From gitlab at gitlab.haskell.org Tue Dec 3 00:41:08 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 02 Dec 2024 19:41:08 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 6 commits: hadrian: Bump directory bound to >=1.3.9 Message-ID: <674e53a4a6471_f8fa5ced26814807a@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - fcafa3cb by sheaf at 2024-12-01T13:50:50-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - b6379524 by Ben Gamari at 2024-12-01T13:50:51-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - b74f7936 by Ben Gamari at 2024-12-01T13:50:51-05:00 rts/linker: Clarify debug output - - - - - 6 changed files: - .gitlab-ci.yml - .gitlab/ci.sh - hadrian/bootstrap/plan-9_10_1.json - hadrian/bootstrap/plan-9_6_1.json - hadrian/bootstrap/plan-9_6_2.json - hadrian/bootstrap/plan-9_6_3.json The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/26e60bb43e0db3d129bceb328935dafa621655d8...b74f793699757d7e97067b65f7b0599fb6ad92e4 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/26e60bb43e0db3d129bceb328935dafa621655d8...b74f793699757d7e97067b65f7b0599fb6ad92e4 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 00:41:47 2024 From: gitlab at gitlab.haskell.org (Cheng Shao (@TerrorJack)) Date: Mon, 02 Dec 2024 19:41:47 -0500 Subject: [Git][ghc/ghc] Deleted branch wip/marge_bot_batch_merge_job Message-ID: <674e53cb6ed3d_f8fa5d3b88c1484f7@gitlab.mail> Cheng Shao deleted branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC -- You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 00:41:50 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 02 Dec 2024 19:41:50 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/marge_bot_batch_merge_job Message-ID: <674e53ceb8af2_f8fa5d3b88c1486b5@gitlab.mail> Marge Bot pushed new branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/marge_bot_batch_merge_job You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 00:41:44 2024 From: gitlab at gitlab.haskell.org (Krzysztof Gogolewski (@monoidal)) Date: Mon, 02 Dec 2024 19:41:44 -0500 Subject: [Git][ghc/ghc][wip/forall-kind-rule] 110 commits: testsuite: normalise some versions in callstacks Message-ID: <674e53c844be0_f8fa5fef9ac1482ae@gitlab.mail> Krzysztof Gogolewski pushed to branch wip/forall-kind-rule at Glasgow Haskell Compiler / GHC Commits: e56ed179 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: normalise some versions in callstacks (cherry picked from commit f230e29f30d0c1c566d4dd251807fcab76a2710e) - - - - - a28fc903 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: use -fhide-source-paths to normalise some backpack tests (cherry picked from commit b19de476bc5ce5c7792e8af1354b94a4286a1a13) - - - - - ed16d303 by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite/haddock: strip version identifiers and unit hashes from html tests (cherry picked from commit fbf0889eadc410d43dd5c1657e320634b6738fa5) - - - - - e45e5836 by Zubin Duggal at 2024-11-11T15:16:36+05:30 haddock: oneshot tests can drop files if they share modtimes. Stop this by including the filename in the key. Ideally we would use `ghc -M` output to do a proper toposort Partially addresses #25372 (cherry picked from commit e78c7ef96e395f1ef41f04790aebecd0409b92b9) - - - - - 9104e6eb by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: fix normalisation of T9930fail so that it doesn't get tripped up by ghc executable (ARGV[0]) differences (cherry picked from commit a79a587e025d42d34bb30e115fc5c7cab6c1e030) - - - - - 2c31264a by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: normalise windows file seperators (cherry picked from commit f858875e03b9609656b542aaaaff85ad0a83878a) - - - - - 2807f91b by Zubin Duggal at 2024-11-11T15:21:30+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites - - - - - c02add17 by Ben Gamari at 2024-11-12T01:22:11-05:00 configure: Check version number validity Here we verify the previously informal invariant that stable release version numbers must have three components, preventing costly failed releases. Specifically, the check fails in the following scenarios: * `version=9.13` while `RELEASE=YES` since this would imply a release made from an unstable branch * `version=9.13.0` since unstable versions should only have two components * `version=9.12` since this has the wrong number of version components for a stable branch Fixes #25390. - - - - - 747fd322 by Teo Camarasu at 2024-11-12T01:22:49-05:00 docs: link to #14474 in the template-haskell docs - - - - - 6d96bb62 by Zubin Duggal at 2024-11-12T01:23:25-05:00 testsuite: normalise execvp vs exec differences in process tests Fixes #25431 - - - - - 502e6711 by Torsten Schmits at 2024-11-12T01:24:01-05:00 fix test lint that accumulated while the checks were broken I didn't fix the issues flagged by the #ifdef linter because it were so many that it seemed like the rule has become obsolete. - - - - - 223a4cb5 by Torsten Schmits at 2024-11-12T01:24:02-05:00 test driver: fix file collection for regex linters When a testsuite linter is executed with the `tracked` strategy, the driver runs `git ls-tree` to collect eligible files. This appears to have ceased producing any paths – `ls-tree` restricts its results to the current working directory, which is `testsuite/tests/linters` in this case. As a quick fix, this patch changes the working directory to match expectations. - - - - - 9ad9ac63 by Alan Zimmerman at 2024-11-12T01:24:39-05:00 EPA: Capture location of '_' for wild card type binder And keep track of promotion status in HsExplicitTupleTy, so the round-trip ppr test works for it. Updates Haddock output too, using the PromotionFlag in HsExplicitTupleTy. Closes #25454 - - - - - c37b96fa by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix setImmediate() implementation for Cloudflare Workers This patch fixes setImmediate() implementation for Cloudflare Workers in the wasm backend's js prelude script. Cloudflare Workers doesn't support the MessageChannel API, and we use a setTimeout() based fallback implementation in this case. - - - - - bea8ea4c by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix FinalizationRegistry logic for Cloudflare Workers This patch fixes FinalizationRegistry related logic for Cloudflare Workers in wasm backend js post linker. Cloudflare Workers doesn't support FinalizationRegistry, in this case we use a dummy implementation that doesn't do anything. - - - - - 00d551bf by Cheng Shao at 2024-11-13T08:48:21-05:00 Remove obsolete cross-port script This patch removes the obsolete cross-port script in the tree. The script was based on the legacy Make build system which has been pruned from the tree long ago. For hadrian, proper support for two-stage bootstrapping onto a new unsupported platform is a work in progress in !11444. - - - - - 75a2eae4 by Cheng Shao at 2024-11-13T08:48:58-05:00 hadrian: fix bindist makefile for wasm32-wasi target This patch fixes one incoherent place between bindist makefile and hadrian logic: I forgot to include wasi/wasm32 in OsSupportsGHCi/ArchSupportsGHCi as well. And this results in incorrect settings file generated after installing the bindist, and "Use interpreter"/"Have interpreter" fields incorrectly have "NO" values where they should be "YES" like --info output of in-tree version. - - - - - 0614abef by Alan Zimmerman at 2024-11-13T08:49:34-05:00 EPA: Correctly capture leading semis in decl list Closes #25467 - - - - - 00d58ae1 by Sebastian Graf at 2024-11-13T15:21:23-05:00 DmdAnal: Make `prompt#` lazy (#25439) This applies the same treatment to `prompt#` as for `catch#`. See `Note [Strictness for mask/unmask/catch/prompt]`. Fixes #25439. - - - - - 93233a66 by Ben Gamari at 2024-11-13T15:21:59-05:00 boot: Do not attempt to update config.sub While Apple ARM hardware was new we found that the autoconf scripts included in some boot packages were too old. As a mitigation for this, we introduced logic in the `boot` script to update the `config.sub` with that from the GHC tree. However, this causes submodules which have `config.sub` committted to appear to be dirty. This is a considerable headache. Now since `config.sub` with full platform support is more common we can remove `boot`'s `config.sub` logic. Fixes #19574. - - - - - fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 254d3f59 by Krzysztof Gogolewski at 2024-12-02T01:41:15+01:00 Limit forall to TYPE r and CONSTRAINT r Fixes #22063. - - - - - 30 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - .gitlab/merge_request_templates/Default.md - boot - compile_flags.txt - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/X86/CodeGen.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Data/Graph/Directed.hs - + compiler/GHC/Data/Graph/Directed/Internal.hs - + compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Backpack.hs - compiler/GHC/Driver/Config/Parser.hs - compiler/GHC/Driver/Config/StgToCmm.hs - compiler/GHC/Driver/DynFlags.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Hooks.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/MakeFile.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0fdb959f1839103aa9f4eb5f39d10ffe16f989b5...254d3f593545af4d388e1f5ec5568cfae6a116e4 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0fdb959f1839103aa9f4eb5f39d10ffe16f989b5...254d3f593545af4d388e1f5ec5568cfae6a116e4 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 00:41:59 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 02 Dec 2024 19:41:59 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 3 commits: Hadrian: use / when making filepaths absolute Message-ID: <674e53d72e166_f8fa5ced268148857@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 57b2c940 by sheaf at 2024-12-02T05:19:05-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 4d208df0 by Ben Gamari at 2024-12-02T05:19:06-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - cb584e7a by Ben Gamari at 2024-12-02T05:19:06-05:00 rts/linker: Clarify debug output - - - - - 7 changed files: - hadrian/src/Hadrian/Utilities.hs - hadrian/src/Rules/CabalReinstall.hs - hadrian/src/Rules/Test.hs - hadrian/src/Settings/Builders/Cabal.hs - hadrian/src/Settings/Builders/Ghc.hs - rts/Linker.c - rts/linker/MMap.c Changes: ===================================== hadrian/src/Hadrian/Utilities.hs ===================================== @@ -7,7 +7,7 @@ module Hadrian.Utilities ( quote, yesNo, parseYesNo, zeroOne, -- * FilePath manipulation - unifyPath, (-/-), makeRelativeNoSysLink, + unifyPath, (-/-), makeRelativeNoSysLink, makeAbsolute, -- * Accessing Shake's type-indexed map insertExtra, lookupExtra, userSetting, @@ -57,6 +57,7 @@ import qualified System.Directory.Extra as IO import qualified System.Info.Extra as IO import qualified System.IO as IO import System.IO.Error (isPermissionError) +import qualified System.FilePath.Posix as Posix -- | Extract a value from a singleton list, or terminate with an error message -- if the list does not contain exactly one value. @@ -136,7 +137,17 @@ zeroOne True = "1" unifyPath :: FilePath -> FilePath unifyPath = toStandard . normaliseEx +{- Note [Absolute paths and MSYS] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +When dealing with absolute paths in Hadrian, we opt to always use Unix-style +forward slashes for separating paths. +This is because, on Windows, the MSYS toolchain can reliably handle paths such +as /c/foo, while it occasionally falls over on paths of the form C:\foo. +-} + -- | Combine paths with a forward slash regardless of platform. +-- +-- See Note [Absolute paths and MSYS]. (-/-) :: FilePath -> FilePath -> FilePath _ -/- b | isAbsolute b && not (isAbsolute $ tail b) = b "" -/- b = b @@ -146,6 +157,16 @@ a -/- b infixr 6 -/- +-- | Like 'System.Directory.makeAbsolute' from @directory@, but always +-- using forward slashes. +-- +-- See Note [Absolute paths and MSYS]. +makeAbsolute :: FilePath -> IO FilePath +makeAbsolute fp = do + cwd <- IO.getCurrentDirectory + let fp' = cwd -/- fp + return $ Posix.normalise fp' + -- | This is like Posix makeRelative, but assumes no sys links in the input -- paths. This allows the result to start with possibly many "../"s. Input -- paths must both be relative, or be on the same drive ===================================== hadrian/src/Rules/CabalReinstall.hs ===================================== @@ -55,10 +55,10 @@ cabalBuildRules = do distDir <- Context.distDir (vanillaContext Stage1 rts) let rtsIncludeDir = distDir -/- "include" - libdir <- liftIO . IO.makeAbsolute =<< stageLibPath Stage1 - work_dir <- liftIO $ IO.makeAbsolute $ root -/- "stage-cabal" + libdir <- liftIO . makeAbsolute =<< stageLibPath Stage1 + work_dir <- liftIO $ makeAbsolute $ root -/- "stage-cabal" let outputDir = work_dir -/- "bin" - includeDir <- liftIO $ IO.makeAbsolute rtsIncludeDir + includeDir <- liftIO $ makeAbsolute rtsIncludeDir createDirectory outputDir @@ -95,7 +95,7 @@ cabalBuildRules = do -- Just symlink these for now -- TODO: build these with cabal as well forM_ iserv_targets $ \(_bin_pkg,bin_path') -> do - bin_path <- liftIO $ IO.makeAbsolute bin_path' + bin_path <- liftIO $ makeAbsolute bin_path' let orig_filename = takeFileName bin_path output_file = outputDir -/- orig_filename liftIO $ do ===================================== hadrian/src/Rules/Test.hs ===================================== @@ -195,7 +195,7 @@ testRules = do -- get relative path for the given program in the given stage let relative_path_stage s p = programPath =<< programContext s p let make_absolute rel_path = do - abs_path <- liftIO (IO.makeAbsolute rel_path) + abs_path <- liftIO (makeAbsolute rel_path) fixAbsolutePathOnWindows abs_path rel_ghc_pkg <- relative_path_stage Stage1 ghcPkg ===================================== hadrian/src/Settings/Builders/Cabal.hs ===================================== @@ -11,7 +11,6 @@ import Settings.Builders.Common import qualified Settings.Builders.Common as S import Control.Exception (assert) import qualified Data.Set as Set -import System.Directory import Settings.Program (programContext) import GHC.Toolchain (ccLinkProgram, tgtCCompilerLink) import GHC.Toolchain.Program (prgFlags) ===================================== hadrian/src/Settings/Builders/Ghc.hs ===================================== @@ -12,7 +12,6 @@ import Settings.Warnings import qualified Context as Context import Rules.Libffi (libffiName) import qualified Data.Set as Set -import System.Directory import Data.Version.Extra ghcBuilderArgs :: Args ===================================== rts/Linker.c ===================================== @@ -1118,7 +1118,7 @@ freePreloadObjectFile (ObjectCode *oc) */ void freeObjectCode (ObjectCode *oc) { - IF_DEBUG(linker, ocDebugBelch(oc, "start\n")); + IF_DEBUG(linker, ocDebugBelch(oc, "freeObjectCode: start\n")); // Run finalizers if (oc->type == STATIC_OBJECT && ===================================== rts/linker/MMap.c ===================================== @@ -351,12 +351,7 @@ mmapInRegion ( if (result == NULL) { // The mapping failed return NULL; - } else if (result < region->start) { - // Uh oh, we assume that mmap() will only give us a - // an address at or after the requested address. - // Try again. - p = (uint8_t *) result + bytes; - } else if (result < region->end) { + } else if (result >= region->start && result < region->end) { // Success! region->last = (uint8_t *) result + bytes; return result; @@ -364,17 +359,23 @@ mmapInRegion ( // We failed to find a suitable mapping munmap(result, bytes); reportMemoryMap(); - errorBelch("mmapForLinker: failed to mmap() memory below 2Gb; " + errorBelch("mmapForLinker: failed to mmap() memory between %p and %p; " "asked for %zu bytes at %p. " "Try specifying an address with +RTS -xm -RTS", - bytes, p); + region->start, region->end, bytes, p); return NULL; - } + } else if (result < region->start) { + // Uh oh, we assume that mmap() will only give us a + // an address at or after the requested address. + // Try bump forward by a bit and try again. + p = (uint8_t *) p + bytes; + } else if (result >= region->end) { + // mmap() gave us too high an address; wrap around and try again + wrapped = true; + p = region->start; + } - // mmap() gave us too high an address; wrap around and try again munmap(result, bytes); - wrapped = true; - p = region->start; } } View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4b4d95acd22d5fe0fc4721febafa7cda02c1dd63...cb584e7a2c0d1fe190532337bed61fa094f6613a -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4b4d95acd22d5fe0fc4721febafa7cda02c1dd63...cb584e7a2c0d1fe190532337bed61fa094f6613a You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 00:43:02 2024 From: gitlab at gitlab.haskell.org (sheaf (@sheaf)) Date: Mon, 02 Dec 2024 19:43:02 -0500 Subject: [Git][ghc/ghc][wip/T24359] Specialise expressions: polishing Message-ID: <674e541665378_f8fa511c1b5414908@gitlab.mail> sheaf pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: 146af81e by sheaf at 2024-12-02T13:29:16+01:00 Specialise expressions: polishing This commit: - adds flags -Wdeprecated-pragmas and -Wuseless-specialisations, - uses -Wdeprecated-pragmas to control the warning when using old-style SPECIALISE pragmas with multiple type ascriptions, - uses -Wuseless-specialisations to control the warning emitted when GHC determines that a SPECIALISE pragma would have no effect, - makes GHC continue to generate seemingly useless SPECIALISE pragmas, as per user request (see new test T25389), - adds deprecations to Template Haskell `pragSpecD` and `pracSpecInlD`, - adds mention of the changes to the 9.14 release notes as well as the Template Haskell changelog, - - - - - 30 changed files: - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/HsToCore/Binds.hs - compiler/GHC/HsToCore/Errors/Ppr.hs - compiler/GHC/HsToCore/Errors/Types.hs - compiler/GHC/Parser/Errors/Ppr.hs - compiler/GHC/Parser/Errors/Types.hs - compiler/GHC/Parser/PostProcess.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Types/Error/Codes.hs - compiler/GHC/Types/Hint.hs - compiler/GHC/Types/Hint/Ppr.hs - compiler/Language/Haskell/Syntax/Binds.hs - docs/users_guide/9.14.1-notes.rst - libraries/ghc-internal/src/GHC/Internal/TH/Lib.hs - libraries/ghc-internal/src/GHC/Internal/TH/Syntax.hs - libraries/template-haskell/changelog.md - testsuite/tests/interface-stability/template-haskell-exports.stdout - + testsuite/tests/simplCore/should_compile/T25389.hs - testsuite/tests/simplCore/should_compile/all.T - testsuite/tests/th/T19363.stdout - testsuite/tests/th/T7064.stdout - + testsuite/tests/typecheck/should_compile/SpecPragmas.hs - + testsuite/tests/typecheck/should_fail/SpecPragmasFail.hs - + testsuite/tests/typecheck/should_fail/SpecPragmasFail.stderr - + testsuite/tests/warnings/should_compile/SpecMultipleTys.hs - + testsuite/tests/warnings/should_compile/SpecMultipleTys.stderr - testsuite/tests/warnings/should_compile/all.T - + testsuite/tests/warnings/should_fail/SpecEMultipleTys.hs - + testsuite/tests/warnings/should_fail/SpecEMultipleTys.stderr The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/146af81ed027cf4cea42bf7f8a52972c9ea971f6 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/146af81ed027cf4cea42bf7f8a52972c9ea971f6 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 00:43:11 2024 From: gitlab at gitlab.haskell.org (sheaf (@sheaf)) Date: Mon, 02 Dec 2024 19:43:11 -0500 Subject: [Git][ghc/ghc][wip/T24359] Specialise expressions: polishing Message-ID: <674e541f64aa5_f8fa5ce79941492cb@gitlab.mail> sheaf pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: ea70f1d9 by sheaf at 2024-12-02T12:48:06+01:00 Specialise expressions: polishing This commit: - adds flags -Wdeprecated-pragmas and -Wuseless-specialisations, - uses -Wdeprecated-pragmas to control the warning when using old-style SPECIALISE pragmas with multiple type ascriptions, - uses -Wuseless-specialisations to control the warning emitted when GHC determines that a SPECIALISE pragma would have no effect, - makes GHC continue to generate seemingly useless SPECIALISE pragmas, as per user request (see new test T25389), - adds deprecations to Template Haskell `pragSpecD` and `pracSpecInlD`, - adds mention of the changes to the 9.14 release notes as well as the Template Haskell changelog, - - - - - 28 changed files: - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/HsToCore/Binds.hs - compiler/GHC/HsToCore/Errors/Ppr.hs - compiler/GHC/HsToCore/Errors/Types.hs - compiler/GHC/Parser/Errors/Ppr.hs - compiler/GHC/Parser/Errors/Types.hs - compiler/GHC/Parser/PostProcess.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Types/Error/Codes.hs - compiler/GHC/Types/Hint.hs - compiler/GHC/Types/Hint/Ppr.hs - compiler/Language/Haskell/Syntax/Binds.hs - docs/users_guide/9.14.1-notes.rst - libraries/ghc-internal/src/GHC/Internal/TH/Lib.hs - libraries/ghc-internal/src/GHC/Internal/TH/Syntax.hs - libraries/template-haskell/changelog.md - + testsuite/tests/simplCore/should_compile/T25389.hs - testsuite/tests/simplCore/should_compile/all.T - + testsuite/tests/typecheck/should_compile/SpecPragmas.hs - + testsuite/tests/typecheck/should_fail/SpecPragmasFail.hs - + testsuite/tests/typecheck/should_fail/SpecPragmasFail.stderr - + testsuite/tests/warnings/should_compile/SpecMultipleTys.hs - + testsuite/tests/warnings/should_compile/SpecMultipleTys.stderr - testsuite/tests/warnings/should_compile/all.T - + testsuite/tests/warnings/should_fail/SpecEMultipleTys.hs - + testsuite/tests/warnings/should_fail/SpecEMultipleTys.stderr - testsuite/tests/warnings/should_fail/all.T Changes: ===================================== compiler/GHC/Driver/Flags.hs ===================================== @@ -1071,6 +1071,8 @@ data WarningFlag = | Opt_WarnDeprecatedTypeAbstractions -- Since 9.10 | Opt_WarnDefaultedExceptionContext -- Since 9.10 | Opt_WarnViewPatternSignatures -- Since 9.12 + | Opt_WarnUselessSpecialisations -- Since 9.14 + | Opt_WarnDeprecatedPragmas -- Since 9.14 deriving (Eq, Ord, Show, Enum, Bounded) -- | Return the names of a WarningFlag @@ -1188,6 +1190,8 @@ warnFlagNames wflag = case wflag of Opt_WarnDeprecatedTypeAbstractions -> "deprecated-type-abstractions" :| [] Opt_WarnDefaultedExceptionContext -> "defaulted-exception-context" :| [] Opt_WarnViewPatternSignatures -> "view-pattern-signatures" :| [] + Opt_WarnUselessSpecialisations -> "useless-specialisations" :| ["useless-specializations"] + Opt_WarnDeprecatedPragmas -> "deprecated-pragmas" :| [] -- ----------------------------------------------------------------------------- -- Standard sets of warning options @@ -1329,7 +1333,9 @@ standardWarnings -- see Note [Documenting warning flags] Opt_WarnInconsistentFlags, Opt_WarnDataKindsTC, Opt_WarnTypeEqualityOutOfScope, - Opt_WarnViewPatternSignatures + Opt_WarnViewPatternSignatures, + Opt_WarnUselessSpecialisations, + Opt_WarnDeprecatedPragmas ] -- | Things you get with -W ===================================== compiler/GHC/Driver/Session.hs ===================================== @@ -2360,6 +2360,8 @@ wWarningFlagsDeps = [minBound..maxBound] >>= \x -> case x of Opt_WarnDeprecatedTypeAbstractions -> warnSpec x Opt_WarnDefaultedExceptionContext -> warnSpec x Opt_WarnViewPatternSignatures -> warnSpec x + Opt_WarnUselessSpecialisations -> warnSpec x + Opt_WarnDeprecatedPragmas -> warnSpec x warningGroupsDeps :: [(Deprecation, FlagSpec WarningGroup)] warningGroupsDeps = map mk warningGroups ===================================== compiler/GHC/HsToCore/Binds.hs ===================================== @@ -1,5 +1,6 @@ {-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE MultiWayIf #-} {-# LANGUAGE TypeFamilies #-} {- @@ -85,6 +86,7 @@ import GHC.Utils.Panic import Control.Monad + {-********************************************************************** * * Desugaring a MonoBinds @@ -974,29 +976,22 @@ finishSpecPrag :: Name -> CoreExpr -- RHS to specialise -> DsM (Maybe (OrdList (Id,CoreExpr), CoreRule)) finishSpecPrag poly_nm poly_rhs rule_bndrs poly_id rule_args spec_bndrs mk_spec_body spec_inl - | isJust (isClassOpId_maybe poly_id) - = do { diagnosticDs (DsUselessSpecialiseForClassMethodSelector poly_nm) - ; return Nothing } -- There is no point in trying to specialise a class op - -- Moreover, classops don't (currently) have an inl_sat arity set - -- (it would be Just 0) and that in turn makes makeCorePair bleat - - | no_act_spec && isNeverActive rule_act - = do { diagnosticDs (DsUselessSpecialiseForNoInlineFunction poly_nm) - ; return Nothing } -- Function is NOINLINE, and the specialisation inherits that - -- See Note [Activation pragmas for SPECIALISE] - - | all is_nop_arg rule_args - = do { diagnosticDs (DsUselessSpecialise poly_nm) - ; return Nothing } -- Specialisation does nothing - - | otherwise - -- The RULE looks like - -- RULE "USPEC" forall rule_bndrs. f rule_args = $sf spec_bndrs - -- The specialised function looks like - -- $sf spec_bndrs = mk_spec_body - -- We also use mk_spec_body to specialise the methods in f's stable unfolding - -- NB: spec_bindrs is a subset of rule_bndrs - = do { this_mod <- getModule + = do { want_spec <- + case mb_useless of + Just useless -> + do { diagnosticDs $ DsUselessSpecialisePragma poly_nm useless + ; return $ uselessSpecialisePragmaKeepAnyway useless } + Nothing -> return True + ; if not want_spec + then return Nothing + else Just <$> + -- The RULE looks like + -- RULE "USPEC" forall rule_bndrs. f rule_args = $sf spec_bndrs + -- The specialised function looks like + -- $sf spec_bndrs = mk_spec_body + -- We also use mk_spec_body to specialise the methods in f's stable unfolding + -- NB: spec_bindrs is a subset of rule_bndrs + do { this_mod <- getModule ; uniq <- newUnique ; dflags <- getDynFlags ; let poly_name = idName poly_id @@ -1025,12 +1020,29 @@ finishSpecPrag poly_nm poly_rhs rule_bndrs poly_id rule_args [ text "fun:" <+> ppr poly_id , text "spec_bndrs:" <+> ppr spec_bndrs , text "args:" <+> ppr rule_args ]) - ; return (Just (unitOL (spec_id, spec_rhs), rule)) + ; return (unitOL (spec_id, spec_rhs), rule) -- NB: do *not* use makeCorePair on (spec_id,spec_rhs), because -- makeCorePair overwrites the unfolding, which we have -- just created using specUnfolding - } + } } where + -- Is this SPECIALISE pragma useless? + mb_useless = + if | isJust (isClassOpId_maybe poly_id) + -- There is no point in trying to specialise a class op + -- Moreover, classops don't (currently) have an inl_sat arity set + -- (it would be Just 0) and that in turn makes makeCorePair bleat + -> Just UselessSpecialiseForClassMethodSelector + | no_act_spec && isNeverActive rule_act + -- Function is NOINLINE, and the specialisation inherits that + -- See Note [Activation pragmas for SPECIALISE] + -> Just UselessSpecialiseForNoInlineFunction + | all is_nop_arg rule_args + -- The specialisation does nothing. + -> Just UselessSpecialiseNoSpecialisation + | otherwise + -> Nothing + -- See Note [Activation pragmas for SPECIALISE] -- no_act_spec is True if the user didn't write an explicit -- phase specification in the SPECIALISE pragma ===================================== compiler/GHC/HsToCore/Errors/Ppr.hs ===================================== @@ -83,15 +83,22 @@ instance Diagnostic DsMessage where StrictBinds -> "strict bindings" in mkSimpleDecorated $ hang (text "Top-level" <+> text desc <+> text "aren't allowed:") 2 (ppr bind) - DsUselessSpecialiseForClassMethodSelector poly_id - -> mkSimpleDecorated $ - text "Ignoring useless SPECIALISE pragma for class selector:" <+> quotes (ppr poly_id) - DsUselessSpecialiseForNoInlineFunction poly_id - -> mkSimpleDecorated $ - text "Ignoring useless SPECIALISE pragma for NOINLINE function:" <+> quotes (ppr poly_id) - DsUselessSpecialise poly_id - -> mkSimpleDecorated $ - text "Ignoring useless SPECIALISE pragma for:" <+> quotes (ppr poly_id) + DsUselessSpecialisePragma poly_id rea -> + mkSimpleDecorated $ + what <+> text "SPECIALISE pragma for" <> why + where + quoted_id = quotes (ppr poly_id) + what = + if uselessSpecialisePragmaKeepAnyway rea + then text "Seemingly useless" + else text "Ignoring useless" + why = case rea of + UselessSpecialiseForClassMethodSelector -> + text " class selector:" <+> quoted_id + UselessSpecialiseForNoInlineFunction -> + text " NOINLINE function:" <+> quoted_id + UselessSpecialiseNoSpecialisation -> + colon <+> quoted_id DsOrphanRule rule -> mkSimpleDecorated $ text "Orphan rule:" <+> ppr rule DsRuleLhsTooComplicated orig_lhs lhs2 @@ -227,9 +234,7 @@ instance Diagnostic DsMessage where DsNonExhaustivePatterns _ (ExhaustivityCheckType mb_flag) _ _ _ -> maybe WarningWithoutFlag WarningWithFlag mb_flag DsTopLevelBindsNotAllowed{} -> ErrorWithoutFlag - DsUselessSpecialiseForClassMethodSelector{} -> WarningWithoutFlag - DsUselessSpecialiseForNoInlineFunction{} -> WarningWithoutFlag - DsUselessSpecialise{} -> WarningWithoutFlag + DsUselessSpecialisePragma{} -> WarningWithFlag Opt_WarnUselessSpecialisations DsOrphanRule{} -> WarningWithFlag Opt_WarnOrphans DsRuleLhsTooComplicated{} -> WarningWithoutFlag DsRuleIgnoredDueToConstructor{} -> WarningWithoutFlag @@ -264,9 +269,7 @@ instance Diagnostic DsMessage where DsMaxPmCheckModelsReached{} -> [SuggestIncreaseMaxPmCheckModels] DsNonExhaustivePatterns{} -> noHints DsTopLevelBindsNotAllowed{} -> noHints - DsUselessSpecialiseForClassMethodSelector{} -> noHints - DsUselessSpecialiseForNoInlineFunction{} -> noHints - DsUselessSpecialise{} -> noHints + DsUselessSpecialisePragma{} -> noHints DsOrphanRule{} -> noHints DsRuleLhsTooComplicated{} -> noHints DsRuleIgnoredDueToConstructor{} -> noHints ===================================== compiler/GHC/HsToCore/Errors/Types.hs ===================================== @@ -1,5 +1,6 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE ExistentialQuantification #-} +{-# LANGUAGE LambdaCase #-} {-# LANGUAGE TypeFamilies #-} module GHC.HsToCore.Errors.Types where @@ -105,11 +106,17 @@ data DsMessage | DsTopLevelBindsNotAllowed !BindsType !(HsBindLR GhcTc GhcTc) - | DsUselessSpecialiseForClassMethodSelector !Name + {-| DsUselessSpecialisePragma is a warning (controlled by the -Wuseless-specialisations flag) + that is emitted for SPECIALISE pragmas that don't do anything. - | DsUselessSpecialiseForNoInlineFunction !Name + Examples: - | DsUselessSpecialise !Name + foo :: forall a. a -> a + {-# SPECIALISE foo :: Int -> Int #-} + -} + | DsUselessSpecialisePragma + !Name + !UselessSpecialisePragmaReason | DsOrphanRule !CoreRule @@ -197,6 +204,26 @@ data ThRejectionReason | ThSplicesWithinDeclBrackets | ThNonLinearDataCon +-- | Why is a @SPECIALISE@ pragmas useless? +data UselessSpecialisePragmaReason + -- | Useless @SPECIALISE@ pragma for a class method + = UselessSpecialiseForClassMethodSelector + -- | Useless @SPECIALISE@ pragma for a function with NOINLINE + | UselessSpecialiseForNoInlineFunction + -- | Useless @SPECIALISE@ pragma which generates a specialised function + -- which is identical to the original function at runtime. + | UselessSpecialiseNoSpecialisation + deriving Generic + +uselessSpecialisePragmaKeepAnyway :: UselessSpecialisePragmaReason -> Bool +uselessSpecialisePragmaKeepAnyway = \case + UselessSpecialiseForClassMethodSelector -> False + UselessSpecialiseForNoInlineFunction -> False + UselessSpecialiseNoSpecialisation -> True + -- See #25389/T25389 for why we might want to keep this specialisation + -- around even if it seemingly does nothing. + + data NegLiteralExtEnabled = YesUsingNegLiterals | NotUsingNegLiterals ===================================== compiler/GHC/Parser/Errors/Ppr.hs ===================================== @@ -573,7 +573,11 @@ instance Diagnostic PsMessage where PsErrSpecExprMultipleTypeAscription -> mkSimpleDecorated $ - text "SPECIALIZE expression doesn't support multiple specialize type ascriptions" + text "SPECIALISE expression doesn't support multiple type ascriptions" + + PsWarnSpecMultipleTypeAscription + -> mkSimpleDecorated $ + text "SPECIALISE pragmas with multiple type ascriptions are deprecated, and will be removed in GHC 9.18" diagnosticReason = \case PsUnknownMessage m -> diagnosticReason m @@ -694,6 +698,7 @@ instance Diagnostic PsMessage where PsErrIllegalOrPat{} -> ErrorWithoutFlag PsErrTypeSyntaxInPat{} -> ErrorWithoutFlag PsErrSpecExprMultipleTypeAscription{} -> ErrorWithoutFlag + PsWarnSpecMultipleTypeAscription{} -> WarningWithFlag Opt_WarnDeprecatedPragmas diagnosticHints = \case PsUnknownMessage m -> diagnosticHints m @@ -863,7 +868,8 @@ instance Diagnostic PsMessage where PsErrInvalidPun {} -> [suggestExtension LangExt.ListTuplePuns] PsErrIllegalOrPat{} -> [suggestExtension LangExt.OrPatterns] PsErrTypeSyntaxInPat{} -> noHints - PsErrSpecExprMultipleTypeAscription {} -> noHints + PsErrSpecExprMultipleTypeAscription {} -> [SuggestSplittingIntoSeveralSpecialisePragmas] + PsWarnSpecMultipleTypeAscription{} -> [SuggestSplittingIntoSeveralSpecialisePragmas] diagnosticCode = constructorCode ===================================== compiler/GHC/Parser/Errors/Types.hs ===================================== @@ -491,8 +491,22 @@ data PsMessage -- T24159_pat_parse_error_6 | PsErrTypeSyntaxInPat !PsErrTypeSyntaxDetails + -- | 'PsErrSpecExprMultipleTypeAscription' is an error that occurs when + -- a user attempts to use the new form SPECIALISE pragma syntax with + -- multiple type signatures, e.g. + -- + -- @{-# SPECIALISE foo 3 :: Float -> Float; Double -> Double #-} | PsErrSpecExprMultipleTypeAscription + -- | 'PsWarnSpecMultipleTypeAscription' is a warning that occurs when + -- a user uses the old-form SPECIALISE pragma syntax with + -- multiple type signatures, e.g. + -- + -- @{-# SPECIALISE bar :: Float -> Float; Double -> Double #-} + -- + -- This constructor is deprecated and will be removed in GHC 9.18. + | PsWarnSpecMultipleTypeAscription + deriving Generic -- | Extra details about a parse error, which helps ===================================== compiler/GHC/Parser/PostProcess.hs ===================================== @@ -1069,19 +1069,18 @@ mkSpecSig inl_prag activation_anns m_rule_binds expr m_sigtypes_ascr -- Use the old SpecSig route | Nothing <- m_rule_binds , L _ (HsVar _ var) <- expr - -> pure $ - SpecSig activation_anns - var sigtype_list inl_prag + -> do addPsMessage sigs_loc PsWarnSpecMultipleTypeAscription + pure $ + SpecSig activation_anns var sigtype_list inl_prag - | otherwise -> ps_err PsErrSpecExprMultipleTypeAscription + | otherwise -> + addFatalError $ + mkPlainErrorMsgEnvelope sigs_loc PsErrSpecExprMultipleTypeAscription where sigtype_list = fromOL sigtype_ol - - where - ps_err = addFatalError - . mkPlainErrorMsgEnvelope - (getHasLoc (ass_open activation_anns) `combineSrcSpans` getHasLoc (ass_close activation_anns)) + sigs_loc = + getHasLoc colon_ann `combineSrcSpans` getHasLoc (last sigtype_list) checkRecordSyntax :: (MonadP m, Outputable a) => LocatedA a -> m (LocatedA a) checkRecordSyntax lr@(L loc r) ===================================== compiler/GHC/Tc/Errors/Types.hs ===================================== @@ -2593,6 +2593,7 @@ data TcRnMessage where typecheck/should_compile/T10504 -} TcRnNonOverloadedSpecialisePragma :: !(LIdP GhcRn) -> TcRnMessage + -- NB: this constructor is deprecated and will be removed in GHC 9.18 (#25540) {-| TcRnSpecialiseNotVisible is a warning that occurs when the subject of a SPECIALISE pragma has a definition that is not visible from the current module. ===================================== compiler/GHC/Types/Error/Codes.hs ===================================== @@ -28,7 +28,7 @@ import GHC.Core.InstEnv (LookupInstanceErrReason) import GHC.Iface.Errors.Types import GHC.Driver.Errors.Types ( DriverMessage, GhcMessageOpts, DriverMessageOpts ) import GHC.Parser.Errors.Types ( PsMessage, PsHeaderMessage ) -import GHC.HsToCore.Errors.Types ( DsMessage ) +import GHC.HsToCore.Errors.Types ( DsMessage, UselessSpecialisePragmaReason ) import GHC.Tc.Errors.Types import GHC.Unit.Module.Warnings ( WarningTxt ) import GHC.Utils.Panic.Plain @@ -147,9 +147,6 @@ type family GhcDiagnosticCode c = n | n -> c where GhcDiagnosticCode "DsMaxPmCheckModelsReached" = 61505 GhcDiagnosticCode "DsNonExhaustivePatterns" = 62161 GhcDiagnosticCode "DsTopLevelBindsNotAllowed" = 48099 - GhcDiagnosticCode "DsUselessSpecialiseForClassMethodSelector" = 93315 - GhcDiagnosticCode "DsUselessSpecialiseForNoInlineFunction" = 38524 - GhcDiagnosticCode "DsUselessSpecialise" = 66582 GhcDiagnosticCode "DsOrphanRule" = 58181 GhcDiagnosticCode "DsRuleLhsTooComplicated" = 69441 GhcDiagnosticCode "DsRuleIgnoredDueToConstructor" = 00828 @@ -166,6 +163,10 @@ type family GhcDiagnosticCode c = n | n -> c where GhcDiagnosticCode "DsAnotherRuleMightFireFirst" = 87502 GhcDiagnosticCode "DsIncompleteRecordSelector" = 17335 + -- Constructors of 'UselessSpecialisePragmaReason' + GhcDiagnosticCode "UselessSpecialiseForClassMethodSelector" = 93315 + GhcDiagnosticCode "UselessSpecialiseForNoInlineFunction" = 38524 + GhcDiagnosticCode "UselessSpecialiseNoSpecialisation" = 66582 -- Parser diagnostic codes GhcDiagnosticCode "PsErrParseLanguagePragma" = 68686 @@ -292,6 +293,7 @@ type family GhcDiagnosticCode c = n | n -> c where GhcDiagnosticCode "PsErrIllegalOrPat" = 29847 GhcDiagnosticCode "PsErrTypeSyntaxInPat" = 32181 GhcDiagnosticCode "PsErrSpecExprMultipleTypeAscription" = 62037 + GhcDiagnosticCode "PsWarnSpecMultipleTypeAscription" = 73026 -- Driver diagnostic codes GhcDiagnosticCode "DriverMissingHomeModules" = 32850 @@ -907,7 +909,11 @@ type family GhcDiagnosticCode c = n | n -> c where -- NB: never remove a return value from this type family! -- We need to ensure uniquess of diagnostic codes across GHC versions, -- and this includes outdated diagnostic codes for errors that GHC - -- no longer reports. These are collected below. + -- no longer reports. + -- + -- We used to collect all the outdated diagnostic codes below, but this + -- turned out to be a source of merge conflicts, so we no longer move + -- a diagnostic below when marking it outdated. GhcDiagnosticCode "TcRnIllegalInstanceHeadDecl" = Outdated 12222 GhcDiagnosticCode "TcRnNoClassInstHead" = Outdated 56538 @@ -982,6 +988,11 @@ type family ConRecursInto con where ConRecursInto "PsUnknownMessage" = 'Just (UnknownDiagnostic NoDiagnosticOpts) ConRecursInto "PsHeaderMessage" = 'Just PsHeaderMessage + ---------------------------------- + -- Constructors of DsMessage + + ConRecursInto "DsUselessSpecialisePragma" = 'Just UselessSpecialisePragmaReason + ---------------------------------- -- Constructors of TcRnMessage ===================================== compiler/GHC/Types/Hint.hs ===================================== @@ -504,6 +504,11 @@ data GhcHint {-| Suggest add parens to pattern `e -> p :: t` -} | SuggestParenthesizePatternRHS + {-| Suggest splitting up a SPECIALISE pragmas with multiple type ascriptions + into several individual SPECIALISE pragmas. + -} + | SuggestSplittingIntoSeveralSpecialisePragmas + -- | The deriving strategy that was assumed when not explicitly listed in the -- source. This is used solely by the missing-deriving-strategies warning. -- There's no `Via` case because we never assume that. ===================================== compiler/GHC/Types/Hint/Ppr.hs ===================================== @@ -288,6 +288,8 @@ instance Outputable GhcHint where (hsep [text "deriving", ppr strat, text "instance", ppr deriv_sig]) SuggestParenthesizePatternRHS -> text "Parenthesize the RHS of the view pattern" + SuggestSplittingIntoSeveralSpecialisePragmas + -> text "Split the SPECIALISE pragma into multiple pragmas, one for each type signature" perhapsAsPat :: SDoc perhapsAsPat = text "Perhaps you meant an as-pattern, which must not be surrounded by whitespace" ===================================== compiler/Language/Haskell/Syntax/Binds.hs ===================================== @@ -359,6 +359,8 @@ data Sig pass -- | An old-form specialisation pragma -- -- > {-# SPECIALISE f :: Int -> Int #-} + -- + -- NB: this constructor is deprecated and will be removed in GHC 9.18 (#25540) | SpecSig (XSpecSig pass) (LIdP pass) -- Specialise a function or datatype ... [LHsSigType pass] -- ... to these types ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -11,8 +11,25 @@ for specific guidance on migrating programs to this release. Language ~~~~~~~~ +* `GHC proposal 493: allow expressions in SPECIALISE pragmas `_ + has been implemented. SPECIALISE pragmas now allow arbitrary expressions such as: :: + + {-# SPECIALISE f @Int False :: Int -> Char #-} + + The ability to specify multiple specialisations in a single SPECIALISE pragma, + with syntax of the form (note the comma between the type signatures): :: + + {-# SPECIALISE g : Int -> Int, Float -> Float #-} + + has been deprecated, and is scheduled to be removed in GHC 9.18. + This deprecation is controlled by the newly introduced ``-Wdeprecated-pragmas`` + flag in ``-Wdefault``. + +* A new flag, `-Wuseless-specialisations`, controls warnings emitted when GHC + determines that a SPECIALISE pragma would have no effect. + * ``-Wincomplete-record-selectors`` is now part of `-Wall`, as specified - by `GHC Proposal 516: add warning for incomplete record selectors _`. + by `GHC Proposal 516: add warning for incomplete record selectors `_. Hence, if a library is compiled with ``-Werror``, compilation may now fail. Solution: fix the library. Workaround: add ``-Werror=no-incomplete-record-selectors``. @@ -47,6 +64,11 @@ Cmm ``ghc`` library ~~~~~~~~~~~~~~~ +* As part of the implementation of `GHC proposal 493 `_, + the `SpecSig` constructor of `Sig` has been deprecated. It is replaced by + the constructor `SpecSigE` which supports expressions at the head, rather than + a lone variable. + ``ghc-heap`` library ~~~~~~~~~~~~~~~~~~~~ @@ -71,6 +93,13 @@ Cmm ``template-haskell`` library ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- As part of the implementation of `GHC proposal 493 `_, + the ``SpecialiseP`` constructor of the Template Haskell ``Pragma`` type, as + well as the helpers ``pragSpecD`` and ``pragSpecInlD``, have been deprecated. + + They are replaced, respectively, by ``SpecialiseEP``, ``pragSpecED`` and + ``pragSpecInlED``. + Included libraries ~~~~~~~~~~~~~~~~~~ ===================================== libraries/ghc-internal/src/GHC/Internal/TH/Lib.hs ===================================== @@ -553,12 +553,14 @@ pragInlD name inline rm phases pragOpaqueD :: Quote m => Name -> m Dec pragOpaqueD name = pure $ PragmaD $ OpaqueP name +{-# DEPRECATED pragSpecD "Please use 'pragSpecED' instead. 'pragSpecD' will be removed in GHC 9.18." #-} pragSpecD :: Quote m => Name -> m Type -> Phases -> m Dec pragSpecD n ty phases = do ty1 <- ty pure $ PragmaD $ SpecialiseP n ty1 Nothing phases +{-# DEPRECATED pragSpecInlD "Please use 'pragSpecInlED' instead. 'pragSpecInlD' will be removed in GHC 9.18." #-} pragSpecInlD :: Quote m => Name -> m Type -> Inline -> Phases -> m Dec pragSpecInlD n ty inline phases = do ===================================== libraries/ghc-internal/src/GHC/Internal/TH/Syntax.hs ===================================== @@ -2165,6 +2165,8 @@ data Pragma = InlineP Name Inline RuleMatch Phases -- ^ @{ {\-\# OPAQUE T #-} }@ | SpecialiseP Name Type (Maybe Inline) Phases -- ^ @{ {\-\# SPECIALISE [INLINE] [phases] nm :: ty #-} }@ + -- + -- NB: this constructor is deprecated and will be removed in GHC 9.18 | SpecialiseEP (Maybe [TyVarBndr ()]) [RuleBndr] Exp (Maybe Inline) Phases -- ^ @{ {\-\# SPECIALISE [INLINE] [phases] exp #-} }@ | SpecialiseInstP Type ===================================== libraries/template-haskell/changelog.md ===================================== @@ -1,5 +1,14 @@ # Changelog for [`template-haskell` package](http://hackage.haskell.org/package/template-haskell) +## 2.24.0.0 + + * As part of the implementation of [GHC proposal 493](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0493-specialise-expressions.rst), + the ``SpecialiseP`` constructor of `Pragma`, as well as the helper functions + `pragSpecD` and `pragSpecInlD`, have been deprecated. + + They are replaced, respectively, by `SpecialiseEP`, `pragSpecED` and + `pragSpecInlED`. + ## 2.23.0.0 * Extend `Exp` with `ForallE`, `ForallVisE`, `ConstraintedE`, ===================================== testsuite/tests/simplCore/should_compile/T25389.hs ===================================== @@ -0,0 +1,19 @@ +{-# LANGUAGE GADTs #-} +{-# LANGUAGE DataKinds #-} + +{-# OPTIONS_GHC -Wno-useless-specialisations #-} + +module T25389 where + +data Example (b :: Bool) where + Ex1 :: Int -> Example True + Ex2 :: Example False + +expensive :: Int -> Int +expensive = (*2) + +{-# SPECIALISE INLINE op :: Example False -> Int #-} +op :: Example b -> Int +op e = case e of + Ex1 i -> expensive i + Ex2 -> 0 ===================================== testsuite/tests/simplCore/should_compile/all.T ===================================== @@ -532,3 +532,4 @@ test('T24725a', [ grep_errmsg(r'testedRule')], compile, ['-O -ddump-rule-firings test('T25033', normal, compile, ['-O']) test('T25160', normal, compile, ['-O -ddump-rules']) test('T25197', [req_th, extra_files(["T25197_TH.hs"]), only_ways(['optasm'])], multimod_compile, ['T25197', '-O2 -v0']) +test('T25389', normal, compile, ['-O -ddump-simpl -dsuppress-uniques -dno-typeable-binds']) ===================================== testsuite/tests/typecheck/should_compile/SpecPragmas.hs ===================================== @@ -0,0 +1,34 @@ + +{-# LANGUAGE NamedWildCards, PartialTypeSignatures #-} + +module SpecPragmas where + +foo :: Num a => a -> a +foo x = x + 1 + +{-# SPECIALISE foo @Int #-} + +{-# SPECIALISE foo @Float :: Float -> Float #-} + +{-# SPECIALISE foo (3 :: Int) #-} +{-# SPECIALISE foo @Int 4 #-} + + +{-# SPECIALISE INLINE foo @Double #-} + +bar :: ( Num a, Integral i ) => a -> i -> a +bar x y = x + fromIntegral y + +{-# SPECIALISE bar @Float :: Float -> Int -> Float #-} + +{-# SPECIALISE bar @Double 3 :: Integer -> Double #-} + +{-# SPECIALISE [1] bar @_ @Int #-} + +{-# SPECIALISE bar @_a @_a #-} + +baz :: (Real a, Integral b, Fractional c) => a -> b -> c +baz a b = realToFrac a + fromIntegral b + +{-# SPECIALISE [~1] forall a. forall. baz @a @_ @a #-} + ===================================== testsuite/tests/typecheck/should_fail/SpecPragmasFail.hs ===================================== @@ -0,0 +1,14 @@ + +module SpecPragmasFail where + +foo :: Num a => a -> a +foo x = x + 1 + +{-# SPECIALISE foo @Integer :: Int -> Int #-} + +{-# SPECIALISE foo @Bool #-} + +bar :: a ~ Int => a +bar = 3 + +{-# SPECIALISE bar @Char #-} ===================================== testsuite/tests/typecheck/should_fail/SpecPragmasFail.stderr ===================================== @@ -0,0 +1,6 @@ +SpecPragmasFail.hs:7:16: error: [GHC-83865] + • Couldn't match type ‘Integer’ with ‘Int’ + Expected: Int -> Int + Actual: Integer -> Integer + • In the expression: foo @Integer :: Int -> Int + ===================================== testsuite/tests/warnings/should_compile/SpecMultipleTys.hs ===================================== @@ -0,0 +1,12 @@ +{-# LANGUAGE GADTs #-} +{-# LANGUAGE DataKinds #-} + +module SpecMultipleTys where + +-- NB: this program should be rejected starting from GHC 9.18. +-- See GHC ticket #25540. + +foo :: Num a => a -> a +foo x = 2 * ( x + 1 ) + +{-# SPECIALISE foo :: Float -> Float, Double -> Double #-} ===================================== testsuite/tests/warnings/should_compile/SpecMultipleTys.stderr ===================================== @@ -0,0 +1,5 @@ +SpecMultipleTys.hs:12:20: warning: [GHC-73026] [-Wdeprecated-pragmas (in -Wdefault)] + SPECIALISE pragmas with multiple type ascriptions are deprecated, and will be removed in GHC 9.18 + Suggested fix: + Split the SPECIALISE pragma into multiple pragmas, one for each type signature + ===================================== testsuite/tests/warnings/should_compile/all.T ===================================== @@ -71,3 +71,4 @@ test('T23573', [extra_files(["T23573.hs", "T23573A.hs", "T23573B.hs"])], multimo test('T23465', normal, compile, ['-ddump-parsed']) test('WarnNoncanonical', normal, compile, ['']) test('T24396', [extra_files(["T24396a.hs", "T24396b.hs"])], multimod_compile, ['T24396b', '']) +test('SpecMultipleTys', normal, compile, ['']) # compile_fail from GHC 9.18 ===================================== testsuite/tests/warnings/should_fail/SpecEMultipleTys.hs ===================================== @@ -0,0 +1,10 @@ +{-# LANGUAGE GADTs #-} +{-# LANGUAGE DataKinds #-} + +module SpecEMultipleTys where + +bar :: Num a => a -> a -> a +bar x y = 2 * ( x + y ) + +-- The "specialise expression" syntax doesn't support multiple type ascriptions. +{-# SPECIALISE bar 3 :: Float -> Float, Double -> Double #-} ===================================== testsuite/tests/warnings/should_fail/SpecEMultipleTys.stderr ===================================== @@ -0,0 +1,5 @@ +SpecEMultipleTys.hs:10:22: error: [GHC-62037] + SPECIALISE expression doesn't support multiple type ascriptions + Suggested fix: + Split the SPECIALISE pragma into multiple pragmas, one for each type signature + ===================================== testsuite/tests/warnings/should_fail/all.T ===================================== @@ -27,3 +27,4 @@ test('WarningCategory6', [extra_files(['WarningCategory1.hs', 'WarningCategory1_ test('WarningCategory7', [extra_files(['WarningCategory1.hs', 'WarningCategory1_B.hs', 'WarningCategoryModule.hs'])], multimod_compile_fail, ['WarningCategory1', '-v0 -Werror -w -Wall']) test('WarningCategoryInvalid', normal, compile_fail, ['']) test('T24396c', normal, compile_fail, ['']) +test('SpecEMultipleTys', normal, compile_fail, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ea70f1d949d993eddf1747b36e836a6c3fc47c33 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ea70f1d949d993eddf1747b36e836a6c3fc47c33 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 00:43:54 2024 From: gitlab at gitlab.haskell.org (Cheng Shao (@TerrorJack)) Date: Mon, 02 Dec 2024 19:43:54 -0500 Subject: [Git][ghc/ghc] Deleted branch wip/marge_bot_batch_merge_job Message-ID: <674e544aea606_f8fa5bd57414948e@gitlab.mail> Cheng Shao deleted branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC -- You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 00:43:58 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 02 Dec 2024 19:43:58 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/marge_bot_batch_merge_job Message-ID: <674e544e1142e_f8fa5cea3241496f0@gitlab.mail> Marge Bot pushed new branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/marge_bot_batch_merge_job You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 00:44:34 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Mon, 02 Dec 2024 19:44:34 -0500 Subject: [Git][ghc/ghc][wip/romes/graph-compact-easy] 44 commits: Don't store boot locations in finder cache Message-ID: <674e547226764_f8fa5bccc81498d8@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/graph-compact-easy at Glasgow Haskell Compiler / GHC Commits: 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 4dbe7cfe by Rodrigo Mesquita at 2024-11-25T17:42:26+00:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 7c99b9fc by Rodrigo Mesquita at 2024-11-25T17:42:26+00:00 Improve haddock of graphReachabilityCyclic - - - - - 0bd2b8c3 by Rodrigo Mesquita at 2024-11-27T14:09:00+00:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - 30d8fd1e by Rodrigo Mesquita at 2024-11-27T14:10:32+00:00 Simplify export list of GHC.Unit.Env - - - - - 6e9b7fc1 by Rodrigo Mesquita at 2024-11-27T14:10:32+00:00 WIP - - - - - 7fbac08f by Rodrigo Mesquita at 2024-11-27T14:10:32+00:00 HPT HUG refactor - - - - - 91695b13 by Rodrigo Mesquita at 2024-11-29T14:07:34+00:00 Tons of changes... - - - - - 13596614 by Rodrigo Mesquita at 2024-11-29T15:26:41+00:00 MORE - - - - - de159005 by Rodrigo Mesquita at 2024-11-29T16:06:49+00:00 MORE - - - - - cf9f061e by Rodrigo Mesquita at 2024-12-02T11:21:27+00:00 Now it compiles. - - - - - f0fb9ba4 by Rodrigo Mesquita at 2024-12-02T11:52:24+00:00 Compile Again - - - - - 65f6513f by Rodrigo Mesquita at 2024-12-02T11:52:37+00:00 OHHH ADD THESE TWO MODULES - - - - - 163e7a7c by Rodrigo Mesquita at 2024-12-02T14:09:22+00:00 Delete HUG internal map representation unneeded functions - - - - - 8d5dd82c by Rodrigo Mesquita at 2024-12-02T14:15:03+00:00 Finalize HUG module! - - - - - ba876dee by Rodrigo Mesquita at 2024-12-02T14:40:38+00:00 More - - - - - 67e4a9aa by Rodrigo Mesquita at 2024-12-02T14:41:00+00:00 X - - - - - 8601b7b0 by Rodrigo Mesquita at 2024-12-02T14:44:05+00:00 Remove some unused imports - - - - - 6a81ab24 by Rodrigo Mesquita at 2024-12-02T14:49:17+00:00 more clean ups - - - - - b4fc8fe9 by Rodrigo Mesquita at 2024-12-02T14:49:24+00:00 progress - - - - - fa46859e by Rodrigo Mesquita at 2024-12-02T16:26:05+00:00 FINISH V0 - - - - - 00904291 by Rodrigo Mesquita at 2024-12-02T17:06:11+00:00 Finish GHC.hs - - - - - 30 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/Core/Opt/Pipeline.hs - compiler/GHC/Data/Graph/Directed.hs - + compiler/GHC/Data/Graph/Directed/Internal.hs - + compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Data/IOEnv.hs - compiler/GHC/Driver/Backpack.hs - compiler/GHC/Driver/Config/StgToCmm.hs - compiler/GHC/Driver/DynFlags.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Hooks.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/MakeFile.hs - compiler/GHC/Driver/Phases.hs - compiler/GHC/Driver/Pipeline.hs - compiler/GHC/Driver/Pipeline/Execute.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/HsToCore/Coverage.hs - compiler/GHC/HsToCore/Monad.hs - compiler/GHC/HsToCore/Usage.hs - compiler/GHC/Iface/Errors.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/83e84702e2344285f17c5353d236290d243dacab...0090429152cedf89c751ce744a5895b92ba63744 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/83e84702e2344285f17c5353d236290d243dacab...0090429152cedf89c751ce744a5895b92ba63744 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 00:44:46 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Mon, 02 Dec 2024 19:44:46 -0500 Subject: [Git][ghc/ghc][wip/T24359] 2 commits: Don't warn about useless SPECIALISE pragmas if they are INLINE Message-ID: <674e547e74d95_f8fa5117f6a015007a@gitlab.mail> Simon Peyton Jones pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: 0b695406 by Simon Peyton Jones at 2024-12-02T22:42:39+00:00 Don't warn about useless SPECIALISE pragmas if they are INLINE - - - - - 79cddff8 by Simon Peyton Jones at 2024-12-02T23:27:10+00:00 More tidying up Fixes a badness that led to a loop; test in T24359a Acked-by: Simon Peyton Jones <simon.peytonjones at gmail.com> - - - - - 6 changed files: - compiler/GHC/HsToCore/Binds.hs - compiler/GHC/HsToCore/Errors/Types.hs - compiler/GHC/Tc/Gen/Sig.hs - + testsuite/tests/simplCore/should_compile/T24359a.hs - + testsuite/tests/simplCore/should_compile/T24359a.stderr - testsuite/tests/simplCore/should_compile/all.T Changes: ===================================== compiler/GHC/HsToCore/Binds.hs ===================================== @@ -812,6 +812,18 @@ We want to get in @[a] @[Int] d2 d3 x 3 Notice that +* If the expression had a type signature, such as + SPECIALISE f :: Eq b => Int -> b -> b + then the desugared expression may have type abstractions and applications + "in the way", like this: + (/\b. (\d:Eq b). let d1 = $dfOrdInt in f @Int @b d1 d) @b (d2:Eq b) + We use the simple optimiser to simplify this to + let { d = d2; d1 = $dfOrdInt } in f @Int @b (d2:Eq b) + Do no inlining in this "simple optimiser" phase: use `simpleOptExprNoInline`. + E.g. we don't want to turn + let { d1=d; d2=d } in f d d --> f d d + because the latter is harder to match. + * We want to quantify the RULE over the free vars of the /call/ inside all those dictionary bindings. @@ -924,6 +936,8 @@ dsSpec poly_rhs (SpecPragE { spe_fn_nm = poly_nm ; tracePm "dsSpec" (vcat [ text "poly_id" <+> ppr poly_id , text "bndrs" <+> ppr bndrs + , text "all_bndrs" <+> ppr all_bndrs + , text "const_bndrs" <+> ppr const_bndrs , text "ds_call" <+> ppr ds_call , text "core_call" <+> ppr core_call , text "core_call fvs" <+> ppr (exprFreeVars core_call) @@ -948,9 +962,11 @@ prepareSpecLHS poly_id evs the_call go qevs acc (Let bind e) | not (all isDictId bndrs) -- A normal 'let' is too complicated = Nothing + | all (transfer_to_spec_rhs qevs) $ - rhssOfBind bind + rhssOfBind bind -- One of the `const_binds` = go qevs (bind:acc) e + | otherwise = go (qevs `extendVarSetList` bndrs) acc e where @@ -964,8 +980,7 @@ prepareSpecLHS poly_id evs the_call = Nothing transfer_to_spec_rhs qevs rhs - = exprIsTrivial rhs - || isEmptyVarSet (exprSomeFreeVars is_quant_id rhs) + = isEmptyVarSet (exprSomeFreeVars is_quant_id rhs) where is_quant_id v = isId v && v `elemVarSet` qevs -- See Note [Desugaring SPECIALISE pragmas] wrinkle (DS1) @@ -976,72 +991,78 @@ finishSpecPrag :: Name -> CoreExpr -- RHS to specialise -> DsM (Maybe (OrdList (Id,CoreExpr), CoreRule)) finishSpecPrag poly_nm poly_rhs rule_bndrs poly_id rule_args spec_bndrs mk_spec_body spec_inl - = do { want_spec <- - case mb_useless of - Just useless -> - do { diagnosticDs $ DsUselessSpecialisePragma poly_nm useless - ; return $ uselessSpecialisePragmaKeepAnyway useless } - Nothing -> return True - ; if not want_spec - then return Nothing - else Just <$> + | Just reason <- mb_useless + = do { diagnosticDs $ DsUselessSpecialisePragma poly_nm reason + ; if uselessSpecialisePragmaKeepAnyway reason + then Just <$> finish_prag + else return Nothing } + + | otherwise + = Just <$> finish_prag + + where -- The RULE looks like -- RULE "USPEC" forall rule_bndrs. f rule_args = $sf spec_bndrs -- The specialised function looks like -- $sf spec_bndrs = mk_spec_body -- We also use mk_spec_body to specialise the methods in f's stable unfolding -- NB: spec_bindrs is a subset of rule_bndrs - do { this_mod <- getModule - ; uniq <- newUnique - ; dflags <- getDynFlags - ; let poly_name = idName poly_id - spec_occ = mkSpecOcc (getOccName poly_name) - spec_name = mkInternalName uniq spec_occ (getSrcSpan poly_name) - - simpl_opts = initSimpleOpts dflags - fn_unf = realIdUnfolding poly_id - spec_unf = specUnfolding simpl_opts spec_bndrs mk_spec_body rule_args fn_unf - spec_id = mkLocalId spec_name ManyTy spec_ty - -- Specialised binding is toplevel, hence Many. - `setInlinePragma` specFunInlinePrag poly_id id_inl spec_inl - `setIdUnfolding` spec_unf - - rule = mkSpecRule dflags this_mod False rule_act (text "USPEC") - poly_id rule_bndrs rule_args - (mkVarApps (Var spec_id) spec_bndrs) - - rule_ty = exprType (mkApps (Var poly_id) rule_args) - spec_ty = mkLamTypes spec_bndrs rule_ty - spec_rhs = mkLams spec_bndrs (mk_spec_body poly_rhs) - - ; dsWarnOrphanRule rule - - ; tracePm "dsSpec" (vcat - [ text "fun:" <+> ppr poly_id - , text "spec_bndrs:" <+> ppr spec_bndrs - , text "args:" <+> ppr rule_args ]) - ; return (unitOL (spec_id, spec_rhs), rule) - -- NB: do *not* use makeCorePair on (spec_id,spec_rhs), because - -- makeCorePair overwrites the unfolding, which we have - -- just created using specUnfolding - } } - where + finish_prag + = do { this_mod <- getModule + ; uniq <- newUnique + ; dflags <- getDynFlags + ; let poly_name = idName poly_id + spec_occ = mkSpecOcc (getOccName poly_name) + spec_name = mkInternalName uniq spec_occ (getSrcSpan poly_name) + + simpl_opts = initSimpleOpts dflags + fn_unf = realIdUnfolding poly_id + spec_unf = specUnfolding simpl_opts spec_bndrs mk_spec_body rule_args fn_unf + spec_id = mkLocalId spec_name ManyTy spec_ty + -- Specialised binding is toplevel, hence Many. + `setInlinePragma` specFunInlinePrag poly_id id_inl spec_inl + `setIdUnfolding` spec_unf + + rule = mkSpecRule dflags this_mod False rule_act (text "USPEC") + poly_id rule_bndrs rule_args + (mkVarApps (Var spec_id) spec_bndrs) + + rule_ty = exprType (mkApps (Var poly_id) rule_args) + spec_ty = mkLamTypes spec_bndrs rule_ty + spec_rhs = mkLams spec_bndrs (mk_spec_body poly_rhs) + + ; dsWarnOrphanRule rule + + ; tracePm "dsSpec" (vcat + [ text "fun:" <+> ppr poly_id + , text "spec_bndrs:" <+> ppr spec_bndrs + , text "args:" <+> ppr rule_args ]) + ; return (unitOL (spec_id, spec_rhs), rule) } + -- NB: do *not* use makeCorePair on (spec_id,spec_rhs), because + -- makeCorePair overwrites the unfolding, which we have + -- just created using specUnfolding + -- Is this SPECIALISE pragma useless? - mb_useless = - if | isJust (isClassOpId_maybe poly_id) - -- There is no point in trying to specialise a class op - -- Moreover, classops don't (currently) have an inl_sat arity set - -- (it would be Just 0) and that in turn makes makeCorePair bleat - -> Just UselessSpecialiseForClassMethodSelector - | no_act_spec && isNeverActive rule_act - -- Function is NOINLINE, and the specialisation inherits that - -- See Note [Activation pragmas for SPECIALISE] - -> Just UselessSpecialiseForNoInlineFunction - | all is_nop_arg rule_args - -- The specialisation does nothing. - -> Just UselessSpecialiseNoSpecialisation - | otherwise - -> Nothing + mb_useless :: Maybe UselessSpecialisePragmaReason + mb_useless + | isJust (isClassOpId_maybe poly_id) + -- There is no point in trying to specialise a class op + -- Moreover, classops don't (currently) have an inl_sat arity set + -- (it would be Just 0) and that in turn makes makeCorePair bleat + = Just UselessSpecialiseForClassMethodSelector + + | no_act_spec, isNeverActive rule_act + -- Function is NOINLINE, and the specialisation inherits that + -- See Note [Activation pragmas for SPECIALISE] + = Just UselessSpecialiseForNoInlineFunction + + | all is_nop_arg rule_args, not (isInlinePragma spec_inl) + -- The specialisation does nothing. + -- But don't compliain if it is SPECIALISE INLINE (#4444) + = Just UselessSpecialiseNoSpecialisation + + | otherwise + = Nothing -- See Note [Activation pragmas for SPECIALISE] -- no_act_spec is True if the user didn't write an explicit ===================================== compiler/GHC/HsToCore/Errors/Types.hs ===================================== @@ -218,12 +218,11 @@ data UselessSpecialisePragmaReason uselessSpecialisePragmaKeepAnyway :: UselessSpecialisePragmaReason -> Bool uselessSpecialisePragmaKeepAnyway = \case UselessSpecialiseForClassMethodSelector -> False - UselessSpecialiseForNoInlineFunction -> False - UselessSpecialiseNoSpecialisation -> True + UselessSpecialiseForNoInlineFunction -> False + UselessSpecialiseNoSpecialisation -> True -- See #25389/T25389 for why we might want to keep this specialisation -- around even if it seemingly does nothing. - data NegLiteralExtEnabled = YesUsingNegLiterals | NotUsingNegLiterals ===================================== compiler/GHC/Tc/Gen/Sig.hs ===================================== @@ -959,7 +959,9 @@ tcSpecPrag poly_id (SpecSigE nm bndrs spec_e inl) solveWanteds wanted -- Quantifiy over the the constraints - ; qevs <- mk_quant_evs (approximateWC False wanted) + ; qevs <- mapM newEvVar $ + ctsPreds $ + approximateWC False wanted ; emitResidualConstraints rhs_tclvl skol_info_anon ev_binds_var emptyVarSet tv_bndrs qevs @@ -1460,55 +1462,41 @@ simplifyRule name tc_lvl lhs_wanted rhs_wanted ; lhs_wanted <- liftZonkM $ zonkWC lhs_wanted -- Note [The SimplifyRule Plan] step 3 - ; let (quant_cts, residual_lhs_wanted) = getRuleQuantCts lhs_wanted - ; quant_evs <- mk_quant_evs quant_cts + ; (quant_evs, residual_lhs_wanted) <-getRuleQuantCts lhs_wanted ; traceTc "simplifyRule" $ vcat [ text "LHS of rule" <+> doubleQuotes (ftext name) , text "lhs_wanted" <+> ppr lhs_wanted , text "rhs_wanted" <+> ppr rhs_wanted - , text "quant_cts" <+> ppr quant_cts + , text "quant_cts" <+> ppr quant_evs , text "residual_lhs_wanted" <+> ppr residual_lhs_wanted , text "dont_default" <+> ppr dont_default ] ; return (quant_evs, residual_lhs_wanted, dont_default) } -mk_quant_evs :: Cts -> TcM [EvVar] -mk_quant_evs cts - = mapM mk_one (bagToList cts) - where - mk_one ct - | CtWanted { ctev_dest = dest, ctev_pred = pred } <- ctEvidence ct - = case dest of - EvVarDest ev_id -> return ev_id - HoleDest hole -> -- See Note [Quantifying over coercion holes] - do { ev_id <- newEvVar pred - ; fillCoercionHole hole (mkCoVarCo ev_id) - ; return ev_id } - mk_one ct = pprPanic "mk_quant_ev" (ppr ct) - -getRuleQuantCts :: WantedConstraints -> (Cts, WantedConstraints) +getRuleQuantCts :: WantedConstraints -> TcM ([EvVar], WantedConstraints) -- Extract all the constraints that we can quantify over, -- also returning the depleted WantedConstraints -- +-- Unlike simplifyInfer, we don't leave the WantedConstraints unchanged, +-- and attempt to solve them from the quantified constraints. Instead +-- we /partition/ the WantedConstraints into ones to quantify and ones +-- we can't quantify. We could use approximateWC instead, and leave +-- `wanted` unchanged; but then we'd have clone fresh binders and +-- generate silly identity bindings. Seems more direct to do this. +-- Probably not a big eal wither way. +-- -- NB: we must look inside implications, because with -- -fdefer-type-errors we generate implications rather eagerly; -- see GHC.Tc.Utils.Unify.implicationNeeded. Not doing so caused #14732. --- --- Unlike simplifyInfer, we don't leave the WantedConstraints unchanged, --- and attempt to solve them from the quantified constraints. That --- nearly works, but fails for a constraint like (d :: Eq Int). --- We /do/ want to quantify over it, but the short-cut solver --- (see GHC.Tc.Solver.Dict Note [Shortcut solving]) ignores the quantified --- and instead solves from the top level. --- --- So we must partition the WantedConstraints ourselves --- Not hard, but tiresome. getRuleQuantCts wc - = float_wc emptyVarSet wc + = do { quant_evs <- mapM mk_one (bagToList quant_cts) + ; return (quant_evs, residual_wc) } where + (quant_cts, residual_wc) = float_wc emptyVarSet wc + float_wc :: TcTyCoVarSet -> WantedConstraints -> (Cts, WantedConstraints) float_wc skol_tvs (WC { wc_simple = simples, wc_impl = implics, wc_errors = errs }) = ( simple_yes `andCts` implic_yes @@ -1534,6 +1522,16 @@ getRuleQuantCts wc -> False -- Note [RULE quantification over equalities] _ -> tyCoVarsOfCt ct `disjointVarSet` skol_tvs + mk_one :: Ct -> TcM EvVar + mk_one ct + | CtWanted { ctev_dest = dest, ctev_pred = pred } <- ctEvidence ct + = case dest of + EvVarDest ev_id -> return ev_id + HoleDest hole -> -- See Note [Quantifying over coercion holes] + do { ev_id <- newEvVar pred + ; fillCoercionHole hole (mkCoVarCo ev_id) + ; return ev_id } + mk_one ct = pprPanic "mk_quant_ev" (ppr ct) -- ok_eq t1 t2 -- | t1 `tcEqType` t2 = False -- Our solving step may have turned it into Refl -- | otherwise = True ===================================== testsuite/tests/simplCore/should_compile/T24359a.hs ===================================== @@ -0,0 +1,18 @@ +{-# LANGUAGE TypeApplications, ExplicitForAll #-} + +module T24359a where + +data UA i = UA !i + +class IArray a where + bounds :: a i -> i + +showsIArray :: (IArray a, Show i) => a i -> String +showsIArray a = show (bounds a) + +{-# SPECIALISE + showsIArray :: (Show i) => UA i -> String + #-} + +instance IArray UA where + bounds (UA u) = u ===================================== testsuite/tests/simplCore/should_compile/T24359a.stderr ===================================== @@ -0,0 +1,7 @@ + +==================== Tidy Core rules ==================== +"USPEC showsIArray @UA @_" + forall (@i) ($dShow :: Show i) ($dIArray :: IArray UA). + showsIArray @UA @i $dIArray $dShow + = showsIArray_$sshowsIArray @i $dShow + ===================================== testsuite/tests/simplCore/should_compile/all.T ===================================== @@ -533,3 +533,4 @@ test('T25033', normal, compile, ['-O']) test('T25160', normal, compile, ['-O -ddump-rules']) test('T25197', [req_th, extra_files(["T25197_TH.hs"]), only_ways(['optasm'])], multimod_compile, ['T25197', '-O2 -v0']) test('T25389', normal, compile, ['-O -ddump-simpl -dsuppress-uniques -dno-typeable-binds']) +test('T24359a', normal, compile, ['-O -ddump-rules']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/146af81ed027cf4cea42bf7f8a52972c9ea971f6...79cddff8aa8ac1f602a5a402786fb97260e98551 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/146af81ed027cf4cea42bf7f8a52972c9ea971f6...79cddff8aa8ac1f602a5a402786fb97260e98551 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 09:29:32 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Tue, 03 Dec 2024 04:29:32 -0500 Subject: [Git][ghc/ghc][wip/T25445b] Wibbles Message-ID: <674ecf7c9a97e_2211c9c18401591d@gitlab.mail> Simon Peyton Jones pushed to branch wip/T25445b at Glasgow Haskell Compiler / GHC Commits: f7b87b20 by Simon Peyton Jones at 2024-12-03T09:28:58+00:00 Wibbles - - - - - 2 changed files: - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/TyCo/Rep.hs Changes: ===================================== compiler/GHC/Core/Lint.hs ===================================== @@ -107,14 +107,6 @@ import Data.IntMap.Strict ( IntMap ) import qualified Data.IntMap.Strict as IntMap ( lookup, keys, empty, fromList ) {- - -ToDo: notes - -* We do not bother to clone non-CoVar Ids at all -* The Subst deals only in TyCoVars; Non-CoVarIds do not even live in the InScope set -* For Ids, the le_in_vars envt gives the OutType of the Id - - Note [Core Lint guarantee] ~~~~~~~~~~~~~~~~~~~~~~~~~~ Core Lint is the type-checker for Core. Using it, we get the following guarantee: @@ -973,9 +965,9 @@ lintCoreExpr e@(App _ _) = lintValArg expr mult ue -- TODO: Look through ticks? - ; runrw_pr <- lint_app2 (text "runRW# expression") + ; runrw_pr <- lintApp (text "runRW# expression") lintTyArg lint_rw_cont - (idType fun) zeroUE [ty_arg1,ty_arg2,cont_arg] + (idType fun) [ty_arg1,ty_arg2,cont_arg] zeroUE ; lintCoreArgs runrw_pr rest } | otherwise @@ -1458,8 +1450,8 @@ subtype of the required type, as one would expect. -- e.g. f :: Int -> Bool -> Int would return `Int` as result type. lintCoreArgs :: (OutType, UsageEnv) -> [InExpr] -> LintM (OutType, UsageEnv) lintCoreArgs (fun_ty, fun_ue) args - = lint_app2 (text "expression") - lintTyArg lintValArg fun_ty fun_ue args + = lintApp (text "expression") + lintTyArg lintValArg fun_ty args fun_ue lintTyArg :: InExpr -> LintM OutType @@ -1917,8 +1909,6 @@ lintTypeAndSubst ty = do { lintType ty; substTyM ty } -- substitution, but it should be in scope lintType :: InType -> LintM () --- The OutType is just the substitution applied to the InType --- -- I experimented with returning the kind along with the type, -- to avoid a number of calls to typeKind, which might in principle be quadratic -- (as we recurse over the type). But in fact returning both seems to slow @@ -1974,6 +1964,7 @@ lintType ty@(ForAllTy {}) = go [] ty where go :: [OutTyCoVar] -> InType -> LintM () + -- Loop, collecting the forall-binders go tcvs ty@(ForAllTy (Bndr tcv _) body_ty) | not (isTyCoVar tcv) = failWithL (text "Non-TyVar or Non-CoVar bound in type:" <+> ppr ty) @@ -2095,20 +2086,37 @@ lint_co_app co = lint_tyco_app (text "coercion" <+> quotes (ppr co)) lint_tyco_app :: SDoc -> OutKind -> [InType] -> LintM () lint_tyco_app msg fun_kind arg_tys -- See Note [Avoiding compiler perf traps when constructing error messages.] - = do { _ <- lint_app2 msg (\ty -> do { lintType ty; substTyM ty }) + = do { _ <- lintApp msg (\ty -> do { lintType ty; substTyM ty }) (\ty _ _ -> do { lintType ty; ki <- substTyM (typeKind ty); return (ki,()) }) - fun_kind () arg_tys + fun_kind arg_tys () ; return () } ---------------- -lint_app2 :: forall a acc. Outputable a => +lintApp :: forall in_a acc. Outputable in_a => SDoc - -> (a -> LintM OutType) -- Lint the thing and return its value - -> (a -> Mult -> acc -> LintM (OutKind, acc)) -- Lint the thing and return its type - -> OutType -> acc -> [a] -> LintM (OutType,acc) -{-# INLINE lint_app2 #-} -- Very few call sites --- 'acc' is either () for types, or UsageEnv for terms -lint_app2 msg lint_forall_arg lint_arrow_arg !orig_fun_ty acc all_args + -> (in_a -> LintM OutType) -- Lint the thing and return its value + -> (in_a -> Mult -> acc -> LintM (OutKind, acc)) -- Lint the thing and return its type + -> OutType + -> [in_a] -- The arguments, always "In" things + -> acc -- Used (only) for UsageEnv in /term/ applications + -> LintM (OutType,acc) +-- lintApp is a performance-critical function, which deals with multiple +-- applications such as (/\a./\b./\c. expr) @ta @tb @tc +-- When returning the type of this expression we want to avoid substituting a:=ta, +-- and /then/ substituting b:=tb, etc. That's quadratic, and can be a huge +-- perf hole. So we gather all the arguments [in_a], and then gather the +-- substitution incrementally in the `go` loop. +-- +-- lintApp is used: +-- * for term applications (lintCoreArgs) +-- * for type applications (lint_ty_app) +-- * for coercion application (lint_co_app) +-- To deal with these cases `lintApp` has two higher order arguments; +-- but we specialise it for each call site (by inlining) +{-# INLINE lintApp #-} -- INLINE: very few call sites; + -- not recursive; specialised at its call sites + +lintApp msg lint_forall_arg lint_arrow_arg !orig_fun_ty all_args acc = do { !in_scope <- getInScope -- We need the in_scope set to satisfy the invariant in -- Note [The substitution invariant] in GHC.Core.TyCo.Subst @@ -2116,18 +2124,12 @@ lint_app2 msg lint_forall_arg lint_arrow_arg !orig_fun_ty acc all_args ; let init_subst = mkEmptySubst in_scope - go :: Subst -> OutType -> acc -> [a] -> LintM (OutType, acc) + go :: Subst -> OutType -> acc -> [in_a] -> LintM (OutType, acc) -- The Subst applies (only) to the fun_ty - go subst fun_ty acc [] = return (substTy subst fun_ty, acc) + -- c.f. GHC.Core.Type.piResultTys, which has a similar loop - go subst fun_ty@(FunTy _ mult exp_arg_ty res_ty) acc (arg:args) - = do { (arg_ty, acc') <- lint_arrow_arg arg (substTy subst mult) acc - ; ensureEqTys (substTy subst exp_arg_ty) arg_ty $ - lint_app_fail_msg msg orig_fun_ty all_args - (hang (text "Fun:" <+> ppr fun_ty) - 2 (vcat [ text "exp_arg_ty:" <+> ppr exp_arg_ty - , text "arg:" <+> ppr arg <+> dcolon <+> ppr arg_ty ])) - ; go subst res_ty acc' args } + go subst fun_ty acc [] + = return (substTy subst fun_ty, acc) go subst (ForAllTy (Bndr tv _vis) body_ty) acc (arg:args) = do { arg' <- lint_forall_arg arg @@ -2140,6 +2142,15 @@ lint_app2 msg lint_forall_arg lint_arrow_arg !orig_fun_ty acc all_args 2 (ppr arg' <+> dcolon <+> ppr karg')) ; go subst' body_ty acc args } + go subst fun_ty@(FunTy _ mult exp_arg_ty res_ty) acc (arg:args) + = do { (arg_ty, acc') <- lint_arrow_arg arg (substTy subst mult) acc + ; ensureEqTys (substTy subst exp_arg_ty) arg_ty $ + lint_app_fail_msg msg orig_fun_ty all_args + (hang (text "Fun:" <+> ppr fun_ty) + 2 (vcat [ text "exp_arg_ty:" <+> ppr exp_arg_ty + , text "arg:" <+> ppr arg <+> dcolon <+> ppr arg_ty ])) + ; go subst res_ty acc' args } + go subst fun_ty acc args | Just fun_ty' <- coreView fun_ty = go subst fun_ty' acc args @@ -2368,8 +2379,7 @@ lintCoercion co@(AppCo co1 co2) ---------- lintCoercion co@(ForAllCo {}) --- See Note [ForAllCo] in GHC.Core.TyCo.Rep, --- including the typing rule for ForAllCo +-- See Note [ForAllCo] in GHC.Core.TyCo.Rep for the typing rule for ForAllCo = do { _ <- go [] co; return () } where go :: [OutTyCoVar] -- Binders in reverse order @@ -2405,15 +2415,17 @@ lintCoercion co@(ForAllCo {}) ; return role } } go tcvs body_co - = -- Assuming kind_co :: k1 ~ k2 - -- Need to check that - -- (forall (tcv:k1). lty) and - -- (forall (tcv:k2). rty[(tcv:k2) |> sym kind_co/tcv]) - -- are both well formed. Easiest way is to call lintForAllBody - -- for each; there is actually no need to do the funky substitution - do { let Pair lty rty = coercionKind body_co + = do { lintCoercion body_co + + -- Need to check that + -- (forall (tcv:k1). lty) and + -- (forall (tcv:k2). rty[(tcv:k2) |> sym kind_co/tcv]) + -- are both well formed, including the skolem escape check. + -- Easiest way is to call lintForAllBody for each + ; let Pair lty rty = coercionKind body_co ; lintForAllBody tcvs lty ; lintForAllBody tcvs rty + ; return (coercionRole body_co) } @@ -2917,15 +2929,20 @@ data LintEnv = LE { le_flags :: LintFlags -- Linting the result of this pass , le_loc :: [LintLocInfo] -- Locations - , le_subst :: Subst -- Current freshening substitution - -- for TyCoVars only. Non-CoVar Ids don't - -- appear in here, not even in the InScopeSet + , le_subst :: Subst + -- Current substitution, for TyCoVars only. + -- Non-CoVar Ids don't appear in here, not even in the InScopeSet + -- Used for (a) cloning to avoid shadowing of TyCoVars, + -- so that eqType works ok + -- (b) substituting for let-bound tyvars, when we have + -- (let @a = Int -> Int in ...) , le_in_vars :: VarEnv (InVar, OutType) - -- Domain is InVar; all in-scope variables are here -- Maps an InVar (i.e. its unique) to its binding InVar - -- and to its OutType - + -- and to its OutType + -- /All/ in-scope variables are here (term variables, + -- type variables, and coercion variables) + -- Used at an occurrence of the InVar , le_joins :: IdSet -- Join points in scope that are valid -- A subset of the InScopeSet in le_subst @@ -3380,6 +3397,7 @@ inCasePat = LintM $ \ env errs -> fromBoxedLResult (Just (is_case_pat env), errs is_case_pat _other = False addInScopeId :: InId -> OutType -> (OutId -> LintM a) -> LintM a +-- Unlike addInScopeTyCoVar, this function does no cloning; Ids never get cloned addInScopeId in_id out_ty thing_inside = LintM $ \ env errs -> let !(out_id, env') = add env @@ -3409,6 +3427,7 @@ addInScopeId in_id out_ty thing_inside | otherwise = delVarSet join_set in_id -- Remove any existing binding addInScopeTyCoVar :: InTyCoVar -> OutType -> (OutTyCoVar -> LintM a) -> LintM a +-- This function clones to avoid shadowing of TyCoVars addInScopeTyCoVar tcv tcv_type thing_inside = LintM $ \ env@(LE { le_in_vars = in_vars, le_subst = subst }) errs -> let (tcv', subst') = subst_bndr subst @@ -3418,7 +3437,7 @@ addInScopeTyCoVar tcv tcv_type thing_inside where subst_bndr subst | isEmptyTCvSubst subst -- No change in kind - , not (tcv `elemInScopeSet` in_scope) -- No change in unique + , not (tcv `elemInScopeSet` in_scope) -- Not already in scope = -- Do not extend the substitution, just the in-scope set (if (varType tcv `eqType` tcv_type) then (\x->x) else pprTrace "addInScopeTyCoVar" ( @@ -3426,6 +3445,7 @@ addInScopeTyCoVar tcv tcv_type thing_inside , text "tcv_type" <+> ppr tcv_type ])) $ (tcv, subst `extendSubstInScope` tcv) + -- Clone, and extend the substitution | let tcv' = uniqAway in_scope (setVarType tcv tcv_type) = (tcv', extendTCvSubstWithClone subst tcv tcv') where @@ -3455,10 +3475,9 @@ getSubst = LintM (\ env errs -> fromBoxedLResult (Just (le_subst env), errs)) substTyM :: InType -> LintM OutType -- Apply the substitution to the type --- The substitution is usually empty, so this is usually a no-op +-- The substitution is often empty, in which case it is a no-op substTyM ty = do { subst <- getSubst --- ; checkWarnL (isEmptyTCvSubst subst) (ppr subst) ; return (substTy subst ty) } getUEAliases :: LintM (NameEnv UsageEnv) @@ -3468,16 +3487,18 @@ getInScope :: LintM InScopeSet getInScope = LintM (\ env errs -> fromBoxedLResult (Just (substInScopeSet $ le_subst env), errs)) lintVarOcc :: InVar -> LintM OutType +-- Used at an occurrence of a variable: term variables, type variables, and coercion variables -- Checks two things: -- a) that it is in scope --- b) that the type at the ocurrences matches the type at the binding site +-- b) that the InType at the ocurrences matches the InType at the binding site lintVarOcc v_occ = do { in_var_env <- getInVarEnv ; case lookupVarEnv in_var_env v_occ of Nothing | isGlobalId v_occ -> return (idType v_occ) - | otherwise -> failWithL (text pp_what <+> quotes (ppr v_occ) <+> text "is out of scope") + | otherwise -> failWithL (text pp_what <+> quotes (ppr v_occ) + <+> text "is out of scope") Just (v_bndr, out_ty) -> do { check_bad_global v_bndr - ; ensureEqTys occ_ty bndr_ty $ + ; ensureEqTys occ_ty bndr_ty $ -- Compares InTypes mkBndrOccTypeMismatchMsg v_occ bndr_ty occ_ty ; return out_ty } where ===================================== compiler/GHC/Core/TyCo/Rep.hs ===================================== @@ -1218,14 +1218,15 @@ because the kinds of the bound tyvars can be different. The typing rule is: - kind_co : k1 ~N k2 - tv1:k1 |- co : t1 ~r t2 + G |- kind_co : k1 ~N k2 + tv1 \not\in fv(typeKind(t1),typeKind(t2)) -- Skolem escape + G, tv1:k1 |- co : t1 ~r t2 if r=N, then vis1=vis2 ------------------------------------ - ForAllCo (tv1:k1) vis1 vis2 kind_co co - : forall (tv1:k1) . t1 + G |- ForAllCo (tv1:k1) vis1 vis2 kind_co co + : forall (tv1:k1) . t1 ~r - forall (tv1:k2) . (t2[tv1 |-> (tv1:k2) |> sym kind_co]) + forall (tv1:k2) . (t2[tv1 |-> (tv1:k2) |> sym kind_co]) Several things to note here View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f7b87b20aea974d95e3e23565b66844f0f8315dd -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f7b87b20aea974d95e3e23565b66844f0f8315dd You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 09:42:19 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Tue, 03 Dec 2024 04:42:19 -0500 Subject: [Git][ghc/ghc][ghc-9.12] 30 commits: Bump unix submodule to 2.8.6.0 Message-ID: <674ed27af0fa2_2211c9275c7c17763@gitlab.mail> Zubin pushed to branch ghc-9.12 at Glasgow Haskell Compiler / GHC Commits: a1f56d6d by Zubin Duggal at 2024-11-26T16:36:33+05:30 Bump unix submodule to 2.8.6.0 - - - - - 348179be by Matthew Pickering at 2024-11-26T16:36:56+05:30 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> (cherry picked from commit 6e68b1177ea6fde381060268c377f67f6097877a) - - - - - 9d5f116c by Rodrigo Mesquita at 2024-11-26T16:38:55+05:30 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 (cherry picked from commit a4e0d23596b45f27f5faad2363c77698abe900b1) - - - - - 39c9228c by Rodrigo Mesquita at 2024-11-26T16:39:07+05:30 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. (cherry picked from commit 284ffab334bcda838865ff4804bc04f9082d81b3) - - - - - 39ecdcb9 by Rodrigo Mesquita at 2024-11-26T16:39:37+05:30 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 (cherry picked from commit 36cddd2ce1a3bc62ea8a1307d8bc6006d54109cf) - - - - - 5f7a6678 by Rodrigo Mesquita at 2024-11-26T16:39:48+05:30 Freeze call stack in error throwing functions CLC proposal#285 (cherry picked from commit 7a74330bf55a85573ed02298b92b7b3fc06f2fed) - - - - - 1848cfb0 by Rodrigo Mesquita at 2024-11-26T16:39:56+05:30 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. (cherry picked from commit 3abf31a45ddbc80901baefdc6325fc3351c5deec) - - - - - 900aa787 by Rodrigo Mesquita at 2024-11-26T16:40:05+05:30 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. (cherry picked from commit c0d783f8a94ee6b72ff3c20e0a974cd09edd96ff) - - - - - b7337c54 by Rodrigo Mesquita at 2024-11-26T16:40:12+05:30 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- (cherry picked from commit 802b5c3e118dad9fcfbe61a3fa4d7bf4592356a8) - - - - - e92bfcb9 by Rodrigo Mesquita at 2024-11-26T16:40:25+05:30 base: Add to changelog.md CLC #285 (cherry picked from commit 3e89eb65895b4ea390d0fd2cd4f8bc688a602e34) - - - - - ab5867a9 by Zubin Duggal at 2024-11-26T16:42:52+05:30 Bump array and stm submodules for exception output changes - - - - - 7688daae by Rodrigo Mesquita at 2024-11-26T16:43:13+05:30 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. (cherry picked from commit d1172e20f29e6fbf53fa95726492bdb998c52582) - - - - - df632282 by Brandon Chinn at 2024-11-26T16:43:29+05:30 Fix CRLF in multiline strings (#25375) (cherry picked from commit 7bd407a67cd7810d3ff1e6d18885555175383a35) - - - - - 5654b8ba by Matthew Pickering at 2024-11-26T16:43:57+05:30 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 (cherry picked from commit bfe64df85683d63ccfa438fed0999193b703d48c) - - - - - 0117fed6 by ARATA Mizuki at 2024-11-26T16:44:12+05:30 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> (cherry picked from commit a0e168ec0b6f18ffeddaf8a5dfc68e84563630b8) - - - - - 467f71c6 by Arnaud Spiwack at 2024-11-26T16:45:13+05:30 Add test for #25185 (cherry picked from commit 791a47b205f1d7cc04f27fc780905f8d4fa042fa) - - - - - eda04ebd by Arnaud Spiwack at 2024-11-26T16:46:10+05:30 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. (cherry picked from commit 374e18e5e79125375a49432da939abbb36268c8a) - - - - - dbac8232 by sheaf at 2024-11-26T16:46:45+05:30 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 (cherry picked from commit 3936bf1bc37c9f8ea662ed4b57a3a28b5a670c54) - - - - - df943652 by sheaf at 2024-11-26T16:46:58+05:30 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 (cherry picked from commit 831aab2238e682e2977b4959afa100df928cec09) - - - - - ff7a27be by sheaf at 2024-11-26T16:47:12+05:30 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 (cherry picked from commit 1fc02399fcc82a222033919c8d3c5db4b382cb97) - - - - - 345ea654 by Cheng Shao at 2024-11-26T16:47:26+05:30 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. (cherry picked from commit bcbcdaaf2df58e3b7a2756d044c4169a724e03d9) - - - - - 2645523b by Andreas Klebinger at 2024-11-26T16:47:55+05:30 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 (cherry picked from commit 7f90f319531c312a074d21688b05f664f0d173fc) - - - - - 0121b76f by Zubin Duggal at 2024-11-26T18:00:38+05:30 Bump os-string submodule to 2.0.8 - - - - - 962ceb50 by Zubin Duggal at 2024-11-26T18:00:38+05:30 Bump file-io submodule to avoid usage of QuasiQuotes - - - - - 7bc6877f by Zubin Duggal at 2024-11-26T18:00:38+05:30 Bump filepath submodule to 1.5.4.0 - - - - - 90b49376 by Zubin Duggal at 2024-11-27T18:55:49+05:30 Add haskeline to stage0Packages Otherwise we link against boot inplace and boot unix as boot haskeline depends on boot unix. - - - - - 77f340a2 by Zubin Duggal at 2024-11-27T18:58:23+05:30 Fix ghc-e005 after HasCallstack changes - - - - - 9478b5ae by Zubin Duggal at 2024-11-27T19:02:38+05:30 Bump file-io submodule to 0.1.5 - - - - - 6fc1fa3b by Zubin Duggal at 2024-11-28T14:31:01+05:30 Bump ghc-prim and template-haskell versions - - - - - 5d938345 by Zubin Duggal at 2024-11-28T18:23:25+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites (cherry picked from commit 2807f91bfb0b1e60ea8668622eae344e9ff5d840) - - - - - 30 changed files: - .gitattributes - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/X86/CodeGen.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/Driver/Config/StgToCmm.hs - compiler/GHC/Driver/Hooks.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/HsToCore/Coverage.hs - compiler/GHC/Iface/Tidy.hs - compiler/GHC/Parser/String.hs - compiler/GHC/StgToCmm.hs - compiler/GHC/StgToCmm/Config.hs - compiler/GHC/StgToCmm/Hpc.hs - compiler/GHC/Tc/Gen/App.hs - compiler/GHC/Tc/Gen/Head.hs - compiler/GHC/Tc/Utils/Monad.hs - compiler/GHC/Types/Error.hs - compiler/GHC/Unit/Module/ModGuts.hs - compiler/GHC/Unit/Module/Warnings.hs - compiler/GHC/Utils/Panic/Plain.hs - + docs/users_guide/diagnostics-as-json-schema-1_1.json - docs/users_guide/exts/multiline_strings.rst - docs/users_guide/using.rst - ghc/GHCi/UI/Monad.hs - ghc/ghc-bin.cabal.in - hadrian/src/Settings/Default.hs - hadrian/src/Settings/Warnings.hs - libraries/array - libraries/base/changelog.md The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/97b0dff223a6c4cc003adec448104c277f214645...5d938345841e3dff6a1dfa129202ba939a4564c9 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/97b0dff223a6c4cc003adec448104c277f214645...5d938345841e3dff6a1dfa129202ba939a4564c9 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 10:37:14 2024 From: gitlab at gitlab.haskell.org (sheaf (@sheaf)) Date: Tue, 03 Dec 2024 05:37:14 -0500 Subject: [Git][ghc/ghc][wip/T24359] 2 commits: Split up SPECIALISE pragmas in GHC.Internal.Real Message-ID: <674edf5a5b1c5_2211c96ebce832791@gitlab.mail> sheaf pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: 999e9a08 by sheaf at 2024-12-03T11:10:29+01:00 Split up SPECIALISE pragmas in GHC.Internal.Real - - - - - dade6ff3 by sheaf at 2024-12-03T11:34:37+01:00 update user's guide for SPECIALISE expression syntax - - - - - 3 changed files: - docs/users_guide/exts/pragmas.rst - docs/users_guide/using-warnings.rst - libraries/ghc-internal/src/GHC/Internal/Real.hs Changes: ===================================== docs/users_guide/exts/pragmas.rst ===================================== @@ -692,24 +692,26 @@ The :pragma:`RULES` pragma lets you specify rewrite rules. It is described in single: pragma, SPECIALIZE single: overloading, death to -.. pragma:: SPECIALIZE ⟨name⟩ :: ⟨type⟩ +.. pragma:: SPECIALIZE ⟨expr⟩ - Ask that GHC specialize a polymorphic value to a particular type. + Ask that GHC specialize a polymorphic value. (UK spelling also accepted.) For key overloaded functions, you can -create extra versions (NB: at the cost of larger code) specialised to particular -types. Thus, if you have an overloaded function: +create extra versions (NB: at the cost of larger code), specialised to specific +arguments. Thus, if you have an overloaded function: :: hammeredLookup :: Ord key => [(key, value)] -> key -> value If it is heavily used on lists with ``Widget`` keys, you could -specialise it as follows: +specialise it with either of the following forms (the second syntax, +introduced in GHC 9.14, additionally requires :extension:`TypeApplications`): :: {-# SPECIALIZE hammeredLookup :: [(Widget, value)] -> Widget -> value #-} + {-# SPECIALIZE hammeredLookup @Widget #-} - A ``SPECIALIZE`` pragma for a function can be put anywhere its type signature could be put. Moreover, you can also ``SPECIALIZE`` an @@ -755,15 +757,14 @@ specialise it as follows: specialisation is done too early, the optimisation rules might fail to fire. -- The type in a ``SPECIALIZE`` pragma can be any type that is less - polymorphic than the type of the original function. In concrete - terms, if the original function is ``f`` then the pragma +- The ``SPECIALIZE`` pragma is valid only if the expression is well-typed. + For example, a specialize pragma of the form :: {-# SPECIALIZE f :: #-} - is valid if and only if the definition + is valid only if the definition :: @@ -777,6 +778,7 @@ specialise it as follows: f :: Eq a => a -> b -> b {-# SPECIALISE f :: Int -> b -> b #-} + {-# SPECIALISE f @Float #-} g :: (Eq a, Ix b) => a -> b -> b {-# SPECIALISE g :: (Eq a) => a -> Int -> Int #-} @@ -789,12 +791,28 @@ specialise it as follows: fire very well. If you use this kind of specialisation, let us know how well it works. +- Since GHC 9.14, it is also possible to specialise a function at specific + value arguments, e.g.: :: + + fn :: Bool -> Int -> Double + fn b i = ... + where + ... = if b then helper1 else helper2 + {-# SPECIALISE fn True #-} + {-# SPECIALISE fn False #-} + + This will make two copies of ``fn``, one for ``True`` and one for ``False``. + These will then be optimised to make direct calls to ``helper1`` or ``helper2``, + respectively, instead of dispatching on ``b`` at runtime. + Call sites (that use a literal ``True`` or ``False``) will be rewritten + to use the specialised versions. + .. _specialize-inline: ``SPECIALIZE INLINE`` ~~~~~~~~~~~~~~~~~~~~~ -.. pragma:: SPECIALIZE INLINE ⟨name⟩ :: ⟨type⟩ +.. pragma:: SPECIALIZE INLINE ⟨expr⟩ :where: top-level ===================================== docs/users_guide/using-warnings.rst ===================================== @@ -423,6 +423,20 @@ of ``-W(no-)*``. such as a `LANGUAGE` or `OPTIONS_GHC` pragma, appears in the body of the module instead. +.. ghc-flag:: -Wdeprecated-pragmas + :shortdesc: warn about deprecated pragmas + :type: dynamic + :reverse: -Wno-deprecated-pragmas + :category: + + :since: 9.14 + + :default: on + + Emits a warning when using a deprecated form of a SPECIALISE pragma which + uses multiple comma-separated type signatures (deprecated and scheduled + to be removed in GHC 9.18). + .. ghc-flag:: -Wmissed-specialisations :shortdesc: warn when specialisation of an imported, overloaded function fails. @@ -477,6 +491,27 @@ of ``-W(no-)*``. Alias for :ghc-flag:`-Wall-missed-specialisations` +.. ghc-flag:: -Wuseless-specialisations + :shortdesc: warn on useless SPECIALISE pragmas + :type: dynamic + :reverse: -Wno-useless-specialisations + :category: + + :since: 9.14 + + :default: on + + Emits a warning if GHC detects a useless SPECIALISE pragma, such as a + SPECIALISE pragma on a non-overloaded function, for example + ``{-# SPECIALISE id :: Int -> Int #-}``. + +.. ghc-flag:: -Wuseless-specializations + :shortdesc: alias for :ghc-flag:`-Wuseless-specialisations` + :type: dynamic + :reverse: -Wno-useless-specializations + + Alias for :ghc-flag:`-Wuseless-specialisations` + .. ghc-flag:: -Wextended-warnings :shortdesc: warn about uses of functions & types that have WARNING or DEPRECATED pragmas, across all categories ===================================== libraries/ghc-internal/src/GHC/Internal/Real.hs ===================================== @@ -746,10 +746,9 @@ x0 ^ y0 | y0 < 0 = errorWithoutStackTrace "Negative exponent" | y0 == 0 = 1 | otherwise = powImpl x0 y0 -{-# SPECIALISE powImpl :: - Integer -> Integer -> Integer, - Integer -> Int -> Integer, - Int -> Int -> Int #-} +{-# SPECIALISE powImpl :: Integer -> Integer -> Integer #-} +{-# SPECIALISE powImpl :: Integer -> Int -> Integer #-} +{-# SPECIALISE powImpl :: Int -> Int -> Int #-} {-# INLINABLE powImpl #-} -- See Note [Inlining (^)] powImpl :: (Num a, Integral b) => a -> b -> a -- powImpl : x0 ^ y0 = (x ^ y) @@ -757,10 +756,9 @@ powImpl x y | even y = powImpl (x * x) (y `quot` 2) | y == 1 = x | otherwise = powImplAcc (x * x) (y `quot` 2) x -- See Note [Half of y - 1] -{-# SPECIALISE powImplAcc :: - Integer -> Integer -> Integer -> Integer, - Integer -> Int -> Integer -> Integer, - Int -> Int -> Int -> Int #-} +{-# SPECIALISE powImplAcc :: Integer -> Integer -> Integer -> Integer #-} +{-# SPECIALISE powImplAcc :: Integer -> Integer -> Integer -> Integer #-} +{-# SPECIALISE powImplAcc :: Int -> Int -> Int -> Int #-} {-# INLINABLE powImplAcc #-} -- See Note [Inlining (^)] powImplAcc :: (Num a, Integral b) => a -> b -> a -> a -- powImplAcc : x0 ^ y0 = (x ^ y) * z View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/79cddff8aa8ac1f602a5a402786fb97260e98551...dade6ff3f6267aad0bd4f32ff778ae5a129aa15a -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/79cddff8aa8ac1f602a5a402786fb97260e98551...dade6ff3f6267aad0bd4f32ff778ae5a129aa15a You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 10:47:49 2024 From: gitlab at gitlab.haskell.org (sheaf (@sheaf)) Date: Tue, 03 Dec 2024 05:47:49 -0500 Subject: [Git][ghc/ghc][wip/T24359] 2 commits: Split up SPECIALISE pragmas in GHC.Internal.Real Message-ID: <674ee1d5621bc_2211c96f4bf43565b@gitlab.mail> sheaf pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: 977a3b5c by sheaf at 2024-12-03T11:47:40+01:00 Split up SPECIALISE pragmas in GHC.Internal.Real - - - - - 63c0155f by sheaf at 2024-12-03T11:47:40+01:00 update user's guide for SPECIALISE expression syntax - - - - - 3 changed files: - docs/users_guide/exts/pragmas.rst - docs/users_guide/using-warnings.rst - libraries/ghc-internal/src/GHC/Internal/Real.hs Changes: ===================================== docs/users_guide/exts/pragmas.rst ===================================== @@ -692,24 +692,26 @@ The :pragma:`RULES` pragma lets you specify rewrite rules. It is described in single: pragma, SPECIALIZE single: overloading, death to -.. pragma:: SPECIALIZE ⟨name⟩ :: ⟨type⟩ +.. pragma:: SPECIALIZE ⟨expr⟩ - Ask that GHC specialize a polymorphic value to a particular type. + Ask that GHC specialize a polymorphic value. (UK spelling also accepted.) For key overloaded functions, you can -create extra versions (NB: at the cost of larger code) specialised to particular -types. Thus, if you have an overloaded function: +create extra versions (NB: at the cost of larger code), specialised to specific +arguments. Thus, if you have an overloaded function: :: hammeredLookup :: Ord key => [(key, value)] -> key -> value If it is heavily used on lists with ``Widget`` keys, you could -specialise it as follows: +specialise it with either of the following forms (the second syntax, +introduced in GHC 9.14, additionally requires :extension:`TypeApplications`): :: {-# SPECIALIZE hammeredLookup :: [(Widget, value)] -> Widget -> value #-} + {-# SPECIALIZE hammeredLookup @Widget #-} - A ``SPECIALIZE`` pragma for a function can be put anywhere its type signature could be put. Moreover, you can also ``SPECIALIZE`` an @@ -755,15 +757,14 @@ specialise it as follows: specialisation is done too early, the optimisation rules might fail to fire. -- The type in a ``SPECIALIZE`` pragma can be any type that is less - polymorphic than the type of the original function. In concrete - terms, if the original function is ``f`` then the pragma +- The ``SPECIALIZE`` pragma is valid only if the expression is well-typed. + For example, a specialize pragma of the form :: {-# SPECIALIZE f :: #-} - is valid if and only if the definition + is valid only if the definition :: @@ -777,6 +778,7 @@ specialise it as follows: f :: Eq a => a -> b -> b {-# SPECIALISE f :: Int -> b -> b #-} + {-# SPECIALISE f @Float #-} g :: (Eq a, Ix b) => a -> b -> b {-# SPECIALISE g :: (Eq a) => a -> Int -> Int #-} @@ -789,12 +791,28 @@ specialise it as follows: fire very well. If you use this kind of specialisation, let us know how well it works. +- Since GHC 9.14, it is also possible to specialise a function at specific + value arguments, e.g.: :: + + fn :: Bool -> Int -> Double + fn b i = ... + where + ... = if b then helper1 else helper2 + {-# SPECIALISE fn True #-} + {-# SPECIALISE fn False #-} + + This will make two copies of ``fn``, one for ``True`` and one for ``False``. + These will then be optimised to make direct calls to ``helper1`` or ``helper2``, + respectively, instead of dispatching on ``b`` at runtime. + Call sites (that use a literal ``True`` or ``False``) will be rewritten + to use the specialised versions. + .. _specialize-inline: ``SPECIALIZE INLINE`` ~~~~~~~~~~~~~~~~~~~~~ -.. pragma:: SPECIALIZE INLINE ⟨name⟩ :: ⟨type⟩ +.. pragma:: SPECIALIZE INLINE ⟨expr⟩ :where: top-level ===================================== docs/users_guide/using-warnings.rst ===================================== @@ -423,6 +423,20 @@ of ``-W(no-)*``. such as a `LANGUAGE` or `OPTIONS_GHC` pragma, appears in the body of the module instead. +.. ghc-flag:: -Wdeprecated-pragmas + :shortdesc: warn about deprecated pragmas + :type: dynamic + :reverse: -Wno-deprecated-pragmas + :category: + + :since: 9.14 + + :default: on + + Emits a warning when using a deprecated form of a SPECIALISE pragma which + uses multiple comma-separated type signatures (deprecated and scheduled + to be removed in GHC 9.18). + .. ghc-flag:: -Wmissed-specialisations :shortdesc: warn when specialisation of an imported, overloaded function fails. @@ -477,6 +491,27 @@ of ``-W(no-)*``. Alias for :ghc-flag:`-Wall-missed-specialisations` +.. ghc-flag:: -Wuseless-specialisations + :shortdesc: warn on useless SPECIALISE pragmas + :type: dynamic + :reverse: -Wno-useless-specialisations + :category: + + :since: 9.14 + + :default: on + + Emits a warning if GHC detects a useless SPECIALISE pragma, such as a + SPECIALISE pragma on a non-overloaded function, for example + ``{-# SPECIALISE id :: Int -> Int #-}``. + +.. ghc-flag:: -Wuseless-specializations + :shortdesc: alias for :ghc-flag:`-Wuseless-specialisations` + :type: dynamic + :reverse: -Wno-useless-specializations + + Alias for :ghc-flag:`-Wuseless-specialisations` + .. ghc-flag:: -Wextended-warnings :shortdesc: warn about uses of functions & types that have WARNING or DEPRECATED pragmas, across all categories ===================================== libraries/ghc-internal/src/GHC/Internal/Real.hs ===================================== @@ -746,10 +746,9 @@ x0 ^ y0 | y0 < 0 = errorWithoutStackTrace "Negative exponent" | y0 == 0 = 1 | otherwise = powImpl x0 y0 -{-# SPECIALISE powImpl :: - Integer -> Integer -> Integer, - Integer -> Int -> Integer, - Int -> Int -> Int #-} +{-# SPECIALISE powImpl :: Integer -> Integer -> Integer #-} +{-# SPECIALISE powImpl :: Integer -> Int -> Integer #-} +{-# SPECIALISE powImpl :: Int -> Int -> Int #-} {-# INLINABLE powImpl #-} -- See Note [Inlining (^)] powImpl :: (Num a, Integral b) => a -> b -> a -- powImpl : x0 ^ y0 = (x ^ y) @@ -757,10 +756,9 @@ powImpl x y | even y = powImpl (x * x) (y `quot` 2) | y == 1 = x | otherwise = powImplAcc (x * x) (y `quot` 2) x -- See Note [Half of y - 1] -{-# SPECIALISE powImplAcc :: - Integer -> Integer -> Integer -> Integer, - Integer -> Int -> Integer -> Integer, - Int -> Int -> Int -> Int #-} +{-# SPECIALISE powImplAcc :: Integer -> Integer -> Integer -> Integer #-} +{-# SPECIALISE powImplAcc :: Integer -> Int -> Integer -> Integer #-} +{-# SPECIALISE powImplAcc :: Int -> Int -> Int -> Int #-} {-# INLINABLE powImplAcc #-} -- See Note [Inlining (^)] powImplAcc :: (Num a, Integral b) => a -> b -> a -> a -- powImplAcc : x0 ^ y0 = (x ^ y) * z View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/dade6ff3f6267aad0bd4f32ff778ae5a129aa15a...63c0155f0b908bad7ea557d2e85cef02d5e108e1 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/dade6ff3f6267aad0bd4f32ff778ae5a129aa15a...63c0155f0b908bad7ea557d2e85cef02d5e108e1 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 10:53:56 2024 From: gitlab at gitlab.haskell.org (sheaf (@sheaf)) Date: Tue, 03 Dec 2024 05:53:56 -0500 Subject: [Git][ghc/ghc][wip/T24359] update user's guide for SPECIALISE expression syntax Message-ID: <674ee3444e7f0_2211c96ff770365d0@gitlab.mail> sheaf pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: a2d417cc by sheaf at 2024-12-03T11:53:44+01:00 update user's guide for SPECIALISE expression syntax - - - - - 2 changed files: - docs/users_guide/exts/pragmas.rst - docs/users_guide/using-warnings.rst Changes: ===================================== docs/users_guide/exts/pragmas.rst ===================================== @@ -692,24 +692,32 @@ The :pragma:`RULES` pragma lets you specify rewrite rules. It is described in single: pragma, SPECIALIZE single: overloading, death to -.. pragma:: SPECIALIZE ⟨name⟩ :: ⟨type⟩ +.. pragma:: SPECIALIZE ⟨expr⟩ - Ask that GHC specialize a polymorphic value to a particular type. + Ask that GHC create a copy of a function with specific arguments; most + commonly, a copy of an overloaded function with specific class + dictionary arguments. (UK spelling also accepted.) For key overloaded functions, you can -create extra versions (NB: at the cost of larger code) specialised to particular -types. Thus, if you have an overloaded function: +create extra versions (NB: at the cost of larger code), specialised to specific +arguments. Thus, if you have an overloaded function: :: hammeredLookup :: Ord key => [(key, value)] -> key -> value If it is heavily used on lists with ``Widget`` keys, you could -specialise it as follows: +specialise it with either of the following forms (the second syntax, +introduced in GHC 9.14, additionally requires :extension:`TypeApplications`): :: {-# SPECIALIZE hammeredLookup :: [(Widget, value)] -> Widget -> value #-} + {-# SPECIALIZE hammeredLookup @Widget #-} + +Instead of taking an unknown ``Ord key`` dictionary at runtime, the specialised +version of ``hammeredLookup`` will use the specific implementation of ``Ord Widget``, +which is likely to produce more efficient code. - A ``SPECIALIZE`` pragma for a function can be put anywhere its type signature could be put. Moreover, you can also ``SPECIALIZE`` an @@ -755,15 +763,14 @@ specialise it as follows: specialisation is done too early, the optimisation rules might fail to fire. -- The type in a ``SPECIALIZE`` pragma can be any type that is less - polymorphic than the type of the original function. In concrete - terms, if the original function is ``f`` then the pragma +- The ``SPECIALIZE`` pragma is valid only if the expression is well-typed. + For example, a specialize pragma of the form :: {-# SPECIALIZE f :: #-} - is valid if and only if the definition + is valid only if the definition :: @@ -777,6 +784,7 @@ specialise it as follows: f :: Eq a => a -> b -> b {-# SPECIALISE f :: Int -> b -> b #-} + {-# SPECIALISE f @Float #-} g :: (Eq a, Ix b) => a -> b -> b {-# SPECIALISE g :: (Eq a) => a -> Int -> Int #-} @@ -789,12 +797,28 @@ specialise it as follows: fire very well. If you use this kind of specialisation, let us know how well it works. +- Since GHC 9.14, it is also possible to specialise a function at specific + value arguments, e.g.: :: + + fn :: Bool -> Int -> Double + fn b i = ... + where + ... = if b then helper1 else helper2 + {-# SPECIALISE fn True #-} + {-# SPECIALISE fn False #-} + + This will make two copies of ``fn``, one for ``True`` and one for ``False``. + These will then be optimised to make direct calls to ``helper1`` or ``helper2``, + respectively, instead of dispatching on ``b`` at runtime. + Call sites (that use a literal ``True`` or ``False``) will be rewritten + to use the specialised versions. + .. _specialize-inline: ``SPECIALIZE INLINE`` ~~~~~~~~~~~~~~~~~~~~~ -.. pragma:: SPECIALIZE INLINE ⟨name⟩ :: ⟨type⟩ +.. pragma:: SPECIALIZE INLINE ⟨expr⟩ :where: top-level ===================================== docs/users_guide/using-warnings.rst ===================================== @@ -423,6 +423,20 @@ of ``-W(no-)*``. such as a `LANGUAGE` or `OPTIONS_GHC` pragma, appears in the body of the module instead. +.. ghc-flag:: -Wdeprecated-pragmas + :shortdesc: warn about deprecated pragmas + :type: dynamic + :reverse: -Wno-deprecated-pragmas + :category: + + :since: 9.14 + + :default: on + + Emits a warning when using a deprecated form of a SPECIALISE pragma which + uses multiple comma-separated type signatures (deprecated and scheduled + to be removed in GHC 9.18). + .. ghc-flag:: -Wmissed-specialisations :shortdesc: warn when specialisation of an imported, overloaded function fails. @@ -477,6 +491,27 @@ of ``-W(no-)*``. Alias for :ghc-flag:`-Wall-missed-specialisations` +.. ghc-flag:: -Wuseless-specialisations + :shortdesc: warn on useless SPECIALISE pragmas + :type: dynamic + :reverse: -Wno-useless-specialisations + :category: + + :since: 9.14 + + :default: on + + Emits a warning if GHC detects a useless SPECIALISE pragma, such as a + SPECIALISE pragma on a non-overloaded function, for example + ``{-# SPECIALISE id :: Int -> Int #-}``. + +.. ghc-flag:: -Wuseless-specializations + :shortdesc: alias for :ghc-flag:`-Wuseless-specialisations` + :type: dynamic + :reverse: -Wno-useless-specializations + + Alias for :ghc-flag:`-Wuseless-specialisations` + .. ghc-flag:: -Wextended-warnings :shortdesc: warn about uses of functions & types that have WARNING or DEPRECATED pragmas, across all categories View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/a2d417ccfdb9cbf3e51fc11f9c52a8c2e40ad7a2 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/a2d417ccfdb9cbf3e51fc11f9c52a8c2e40ad7a2 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 11:10:56 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Tue, 03 Dec 2024 06:10:56 -0500 Subject: [Git][ghc/ghc][wip/romes/graph-compact-easy] 2 commits: rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack Message-ID: <674ee740eb75f_2211c9acf3c8394c0@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/graph-compact-easy at Glasgow Haskell Compiler / GHC Commits: 45fb9238 by Cheng Shao at 2024-12-02T18:07:57+00:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - b5d0b857 by Rodrigo Mesquita at 2024-12-03T11:10:47+00:00 HPT fixes - - - - - 6 changed files: - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC/Unit/Home/PackageTable.hs - ghc/GHCi/Leak.hs - ghc/GHCi/UI.hs - rts/rts.cabal Changes: ===================================== .gitlab/generate-ci/gen_ci.hs ===================================== @@ -444,7 +444,7 @@ opsysVariables AArch64 (Darwin {}) = ] opsysVariables Amd64 (Darwin {}) = mconcat [ "NIX_SYSTEM" =: "x86_64-darwin" - , "MACOSX_DEPLOYMENT_TARGET" =: "10.13" + , "MACOSX_DEPLOYMENT_TARGET" =: "11.0" -- "# Only Sierra and onwards supports clock_gettime. See #12858" , "ac_cv_func_clock_gettime" =: "no" -- # Only newer OS Xs support utimensat. See #17895 ===================================== .gitlab/jobs.yaml ===================================== @@ -1072,7 +1072,7 @@ "HADRIAN_ARGS": "--docs=no-sphinx-pdfs", "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", "LANG": "en_US.UTF-8", - "MACOSX_DEPLOYMENT_TARGET": "10.13", + "MACOSX_DEPLOYMENT_TARGET": "11.0", "NIX_SYSTEM": "x86_64-darwin", "RUNTEST_ARGS": "", "TEST_ENV": "x86_64-darwin-validate", @@ -3834,7 +3834,7 @@ "IGNORE_PERF_FAILURES": "all", "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", "LANG": "en_US.UTF-8", - "MACOSX_DEPLOYMENT_TARGET": "10.13", + "MACOSX_DEPLOYMENT_TARGET": "11.0", "NIX_SYSTEM": "x86_64-darwin", "RUNTEST_ARGS": "", "TEST_ENV": "x86_64-darwin-release", @@ -5213,7 +5213,7 @@ "HADRIAN_ARGS": "--docs=no-sphinx-pdfs", "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", "LANG": "en_US.UTF-8", - "MACOSX_DEPLOYMENT_TARGET": "10.13", + "MACOSX_DEPLOYMENT_TARGET": "11.0", "NIX_SYSTEM": "x86_64-darwin", "RUNTEST_ARGS": "", "TEST_ENV": "x86_64-darwin-validate", ===================================== compiler/GHC/Unit/Home/PackageTable.hs ===================================== @@ -72,6 +72,16 @@ module GHC.Unit.Home.PackageTable -- * Utilities , pprHPT + + -- * Internals + -- + -- | These provide access to the internals of the HomePackageTable to + -- facilitate existing workflows that used the previous API. For instance, + -- if you were listing out all elements, you can keep doing so by reading + -- the internal IO ref and then listing the moduleenv contents out. + -- + -- In GHC itself these should be avoided. + , hptInternalTableRef ) where import GHC.Prelude @@ -122,7 +132,7 @@ data HomePackageTable = HPT { -- about the table 'HomeModInfo' updates. On insertions we must make sure to -- update this field (insertions can only be done through the API exposed). - lastLoadedKey :: !(Maybe Unique) + lastLoadedKey :: Maybe Unique -- ^ What was the last module loaded into this HPT? -- -- Like 'hasHoles', this is a cache that is updated with insertions and kept @@ -180,12 +190,15 @@ addHomeModInfoToHpt :: HomeModInfo -> HomePackageTable -> IO HomePackageTable addHomeModInfoToHpt hmi hpt = addToHpt hpt (moduleName (mi_module (hm_iface hmi))) hmi where addToHpt :: HomePackageTable -> ModuleName -> HomeModInfo -> IO HomePackageTable - addToHpt HPT{table=hptr, hasHoles} mn hmi = do - atomicModifyIORef' hptr (\hpt -> (addToUDFM hpt mn hmi, ())) + addToHpt HPT{table=hptr, hasHoles, lastLoadedKey} mn hmi = do + alreadyExisted <- atomicModifyIORef' hptr (\hpt -> (addToUDFM hpt mn hmi, elemUDFM mn hpt)) + -- If the key already existed in the map, this insertion is overwriting + -- the HMI of a previously loaded module (likely in rehydration). return HPT{ table = hptr , hasHoles = hasHoles && isHoleModule (mi_semantic_module (hm_iface hmi)) - , lastLoadedKey = Just $! getUnique mn + , lastLoadedKey = if alreadyExisted then lastLoadedKey + else Just $! getUnique mn } ---------------------------------------------------------------------------------- @@ -429,3 +442,12 @@ concatHpt f HPT{table} = do return $ concat . eltsUDFM . mapMaybeUDFM g $ hpt where g hmi = case f hmi of { [] -> Nothing; as -> Just as } + +-------------------------------------------------------------------------------- +-- * Internals (see haddocks!) +-------------------------------------------------------------------------------- + +-- | Gets the internal 'IORef' which holds the 'HomeModInfo's of this HPT. +-- Use with care. +hptInternalTableRef :: HomePackageTable -> IORef (DModuleNameEnv HomeModInfo) +hptInternalTableRef = table ===================================== ghc/GHCi/Leak.hs ===================================== @@ -41,7 +41,8 @@ data LeakModIndicators = LeakModIndicators getLeakIndicators :: HscEnv -> IO LeakIndicators getLeakIndicators hsc_env = fmap LeakIndicators $ - forM (eltsUDFM (hsc_HPT hsc_env)) $ \hmi at HomeModInfo{..} -> do + hpt <- readIORef $ hptInternalTableRef $ hsc_HPT hsc_env + forM (eltsUDFM hpt) $ \hmi at HomeModInfo{..} -> do leakMod <- mkWeakPtr hmi Nothing leakIface <- mkWeakPtr hm_iface Nothing leakDetails <- mkWeakPtr hm_details Nothing ===================================== ghc/GHCi/UI.hs ===================================== @@ -4494,10 +4494,13 @@ discardInterfaceCache = clearHPTs :: GhciMonad m => m () clearHPTs = do - let pruneHomeUnitEnv hme = hme { homeUnitEnv_hpt = emptyHomePackageTable } + let pruneHomeUnitEnv hme = do + emptyHpt <- newHomePackageTable + pure hme{ homeUnitEnv_hpt = emptyHpt } discardMG hsc = hsc { hsc_mod_graph = GHC.emptyMG } - modifySession (discardMG . discardIC . hscUpdateHUG (unitEnv_map pruneHomeUnitEnv)) - + modifySessionM $ \hsc_env -> do + hug' <- traverse pruneHomeUnitEnv $ hsc_HUG hsc_env + pure $ discardMG $ discardIC $ hscUpdateHUG (const hug') hsc_env -- The unused package warning doesn't make sense once the targets get out of -- sync with the package flags. See #21110 ===================================== rts/rts.cabal ===================================== @@ -332,8 +332,6 @@ library if os(osx) ld-options: "-Wl,-search_paths_first" - -- See Note [fd_set_overflow] - "-Wl,-U,___darwin_check_fd_set_overflow" -- See Note [Undefined symbols in the RTS] "-Wl,-undefined,dynamic_lookup" if !arch(x86_64) && !arch(aarch64) @@ -549,48 +547,6 @@ library -- We don't want to compile posix/ticker/*.c, these will be #included -- from Ticker.c - --- Note [fd_set_overflow] --- ~~~~~~~~~~~~~~~~~~~~~~ --- In this note is the very sad tale of __darwin_fd_set_overflow. --- The 8.10.5 release was broken because it was built in an environment --- where the libraries were provided by XCode 12.*, these libraries introduced --- a reference to __darwin_fd_set_overflow via the FD_SET macro which is used in --- Select.c. Unfortunately, this symbol is not available with XCode 11.* which --- led to a linker error when trying to link anything. This is almost certainly --- a bug in XCode but we still have to work around it. - --- Undefined symbols for architecture x86_64: --- "___darwin_check_fd_set_overflow", referenced from: --- _awaitEvent in libHSrts.a(Select.o) --- ld: symbol(s) not found for architecture x86_64 - --- One way to fix this is to upgrade your version of xcode, but this would --- force the upgrade on users prematurely. Fortunately it also seems safe to pass --- the linker option "-Wl,-U,___darwin_check_fd_set_overflow" because the usage of --- the symbol is guarded by a guard to check if it's defined. - --- __header_always_inline int --- __darwin_check_fd_set(int _a, const void *_b) --- { --- if ((uintptr_t)&__darwin_check_fd_set_overflow != (uintptr_t) 0) { ---#if defined(_DARWIN_UNLIMITED_SELECT) || defined(_DARWIN_C_SOURCE) --- return __darwin_check_fd_set_overflow(_a, _b, 1); ---#else --- return __darwin_check_fd_set_overflow(_a, _b, 0); ---#endif --- } else { --- return 1; --- } ---} - --- Across the internet there are many other reports of this issue --- See: https://github.com/mono/mono/issues/19393 --- , https://github.com/sitsofe/fio/commit/b6a1e63a1ff607692a3caf3c2db2c3d575ba2320 - --- The issue was originally reported in #19950 - - -- Note [Undefined symbols in the RTS] -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- The RTS is built with a number of `-u` flags. This is to handle cyclic View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0090429152cedf89c751ce744a5895b92ba63744...b5d0b857568123781e0369445b90ed70af8e3324 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0090429152cedf89c751ce744a5895b92ba63744...b5d0b857568123781e0369445b90ed70af8e3324 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 11:45:31 2024 From: gitlab at gitlab.haskell.org (BinderDavid (@BinderDavid)) Date: Tue, 03 Dec 2024 06:45:31 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/fix-references-to-proposals-in-docs Message-ID: <674eef5b6bb_2211c9dca43841915@gitlab.mail> BinderDavid pushed new branch wip/fix-references-to-proposals-in-docs at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/fix-references-to-proposals-in-docs You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 13:39:45 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Tue, 03 Dec 2024 08:39:45 -0500 Subject: [Git][ghc/ghc][wip/romes/graph-compact-easy] 3 commits: whitespace fixes Message-ID: <674f0a218be4_2211c91565e5487167@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/graph-compact-easy at Glasgow Haskell Compiler / GHC Commits: 94f3aab2 by Rodrigo Mesquita at 2024-12-03T11:19:27+00:00 whitespace fixes - - - - - eda1b671 by Rodrigo Mesquita at 2024-12-03T13:39:29+00:00 clean up - - - - - a2778de6 by Rodrigo Mesquita at 2024-12-03T13:39:37+00:00 fix - - - - - 3 changed files: - compiler/GHC/Unit/Env.hs - compiler/GHC/Unit/Home/Graph.hs - ghc/GHCi/Leak.hs Changes: ===================================== compiler/GHC/Unit/Env.hs ===================================== @@ -23,15 +23,15 @@ -- ┌────────────────┐┌────────────────────┐┌───────────┐ -- │HomePackageTable││ExternalPackageState││ModuleGraph│ -- └┬───────────────┘└┬───────────────────┘└┬──────────┘ --- ┌▽────────────┐ │ │ --- │HomeUnitGraph│ │ │ --- └┬────────────┘ │ │ --- ┌▽─────────────────▽┐ │ --- │UnitEnv │ │ --- └┬──────────────────┘ │ --- ┌▽───────────────────────────────────────▽┐ --- │HscEnv │ --- └─────────────────────────────────────────┘ +-- ┌▽────────────┐ │ │ +-- │HomeUnitGraph│ │ │ +-- └┬────────────┘ │ │ +-- ┌▽─────────────────▽┐ │ +-- │UnitEnv │ │ +-- └┬──────────────────┘ │ +-- ┌▽───────────────────────────────────────▽┐ +-- │HscEnv │ +-- └─────────────────────────────────────────┘ -- @ -- -- The 'UnitEnv' references both the 'HomeUnitGraph' (with all the home unit @@ -46,44 +46,18 @@ module GHC.Unit.Env , unsafeGetHomeUnit , updateHug -- * Unit Env helper functions - -- , ue_units , ue_currentHomeUnitEnv - - -- Stuff used by Backpack could be simplifeid ehre - -- , ue_unit_dbs - -- , ue_all_home_unit_ids , ue_hpt - , ue_setActiveUnit , ue_currentUnit , ue_findHomeUnitEnv , ue_unitHomeUnit_maybe , ue_updateHomeUnitEnv - -- , ue_unitHomeUnit - -- , ue_unitFlags - -- * HomeUnitEnv + + -- * HUG Re-export , HomeUnitGraph , HomeUnitEnv (..) - -- , mkHomeUnitEnv - -- , lookupHugByModule - -- , hugElts - -- , lookupHug - -- , addHomeModInfoToHug - -- * UnitEnvGraph - -- , UnitEnvGraph (..) - -- , UnitEnvGraphKey - -- , unitEnv_new - -- , unitEnv_singleton - -- , unitEnv_map - -- , unitEnv_lookup_maybe - -- , unitEnv_lookup - -- , unitEnv_keys - -- , unitEnv_elts - -- , unitEnv_hpts - -- , unitEnv_foldWithKey - -- , unitEnv_mapWithKey - -- * Invariants , assertUnitEnvInvariant -- * Preload units info @@ -92,9 +66,9 @@ module GHC.Unit.Env -- * Home Module functions , isUnitEnvInstalledModule - -------------------------------------------------------------------------------- + -------------------------------------------------------------------------------- -- WIP above - -------------------------------------------------------------------------------- + -------------------------------------------------------------------------------- -- * Operations on the UnitEnv , renameUnitId @@ -114,9 +88,9 @@ module GHC.Unit.Env -- ** Reachability , transitiveHomeDeps - -------------------------------------------------------------------------------- + -------------------------------------------------------------------------------- -- Harder queries for the whole UnitEnv - -------------------------------------------------------------------------------- + -------------------------------------------------------------------------------- -- ** Instances, rules, type fams, annotations, etc.. -- @@ -287,10 +261,6 @@ isUnitEnvInstalledModule ue m = maybe False (`isHomeInstalledModule` m) hu -- Operations on arbitrary elements of the home unit graph -- ------------------------------------------------------- --- ue_findHomeUnitEnv_maybe :: UnitId -> UnitEnv -> Maybe HomeUnitEnv --- ue_findHomeUnitEnv_maybe uid e = --- unitEnv_lookup_maybe uid (ue_home_unit_graph e) - ue_findHomeUnitEnv :: HasDebugCallStack => UnitId -> UnitEnv -> HomeUnitEnv ue_findHomeUnitEnv uid e = case HUG.lookupHugUnit uid (ue_home_unit_graph e) of Nothing -> pprPanic "Unit unknown to the internal unit environment" @@ -362,12 +332,6 @@ ue_unitHomeUnit_maybe :: UnitId -> UnitEnv -> Maybe HomeUnit ue_unitHomeUnit_maybe uid ue_env = HUG.homeUnitEnv_home_unit =<< HUG.lookupHugUnit uid (ue_home_unit_graph ue_env) --- ue_unitHomeUnit :: UnitId -> UnitEnv -> HomeUnit --- ue_unitHomeUnit uid ue_env = homeUnitEnv_unsafeHomeUnit $ ue_findHomeUnitEnv uid ue_env - --- ue_all_home_unit_ids :: UnitEnv -> Set.Set UnitId --- ue_all_home_unit_ids = unitEnv_keys . ue_home_unit_graph - -- ------------------------------------------------------- -- Query and modify the currently active unit -- ------------------------------------------------------- ===================================== compiler/GHC/Unit/Home/Graph.hs ===================================== @@ -272,7 +272,7 @@ lookupHug hug uid mod = do case unitEnv_lookup_maybe uid hug of -- Really, here we want "lookup HPT" rather than unitEnvLookup Nothing -> pure Nothing - Just hue -> lookupHpt (homeUnitEnv_hpt hue) mod + Just hue -> lookupHpt (homeUnitEnv_hpt hue) mod -- | Lookup the 'HomeModInfo' of a 'Module' in the 'HomeUnitGraph' (via the 'HomePackageTable' of the corresponding unit) lookupHugByModule :: Module -> HomeUnitGraph -> IO (Maybe HomeModInfo) ===================================== ghc/GHCi/Leak.hs ===================================== @@ -40,7 +40,7 @@ data LeakModIndicators = LeakModIndicators -- the currently loaded modules. getLeakIndicators :: HscEnv -> IO LeakIndicators getLeakIndicators hsc_env = - fmap LeakIndicators $ + fmap LeakIndicators $ do hpt <- readIORef $ hptInternalTableRef $ hsc_HPT hsc_env forM (eltsUDFM hpt) $ \hmi at HomeModInfo{..} -> do leakMod <- mkWeakPtr hmi Nothing View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b5d0b857568123781e0369445b90ed70af8e3324...a2778de6e37d39fcc701c125ac18bbcdf1fc5c84 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b5d0b857568123781e0369445b90ed70af8e3324...a2778de6e37d39fcc701c125ac18bbcdf1fc5c84 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 13:43:22 2024 From: gitlab at gitlab.haskell.org (sheaf (@sheaf)) Date: Tue, 03 Dec 2024 08:43:22 -0500 Subject: [Git][ghc/ghc][wip/T24359] update tests Message-ID: <674f0afa78832_2211c9163e8d0876f4@gitlab.mail> sheaf pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: fea2cd58 by sheaf at 2024-12-03T14:43:14+01:00 update tests - - - - - 7 changed files: - testsuite/tests/diagnostic-codes/codes.stdout - testsuite/tests/parser/should_compile/OpaqueParseWarn1.stderr - + testsuite/tests/simplCore/should_compile/T25389.stderr - testsuite/tests/simplCore/should_compile/T8537.stderr - testsuite/tests/simplCore/should_fail/T25117b.stderr - + testsuite/tests/th/T13123.stderr - testsuite/tests/typecheck/should_compile/T10504.stderr Changes: ===================================== testsuite/tests/diagnostic-codes/codes.stdout ===================================== @@ -9,10 +9,10 @@ - add test cases to exercise any newly uncovered diagnostic codes, - accept the expected output of the 'codes' test by passing the '-a' flag to Hadrian. -[GHC-93315] is untested (constructor = DsUselessSpecialiseForClassMethodSelector) [GHC-58181] is untested (constructor = DsOrphanRule) [GHC-69441] is untested (constructor = DsRuleLhsTooComplicated) [GHC-19551] is untested (constructor = DsAggregatedViewExpressions) +[GHC-93315] is untested (constructor = UselessSpecialiseForClassMethodSelector) [GHC-09848] is untested (constructor = PsErrCmmParser) [GHC-95644] is untested (constructor = PsErrBangPatWithoutSpace) [GHC-45106] is untested (constructor = PsErrInvalidInfixHole) @@ -61,6 +61,7 @@ [GHC-01570] is untested (constructor = TcRnExpectedValueId) [GHC-96665] is untested (constructor = TcRnMultipleInlinePragmas) [GHC-88293] is untested (constructor = TcRnUnexpectedPragmas) +[GHC-35827] is untested (constructor = TcRnNonOverloadedSpecialisePragma) [GHC-85337] is untested (constructor = TcRnSpecialiseNotVisible) [GHC-91382] is untested (constructor = TcRnIllegalKindSignature) [GHC-72520] is untested (constructor = TcRnIgnoreSpecialisePragmaOnDefMethod) @@ -119,3 +120,5 @@ [GHC-75721] is untested (constructor = CannotRepresentType) [GHC-17599] is untested (constructor = AddTopDeclsUnexpectedDeclarationSplice) [GHC-86934] is untested (constructor = ClassPE) + + ===================================== testsuite/tests/parser/should_compile/OpaqueParseWarn1.stderr ===================================== @@ -1,3 +1,3 @@ -OpaqueParseWarn1.hs:6:1: warning: [GHC-38524] +OpaqueParseWarn1.hs:6:1: warning: [GHC-38524] [-Wuseless-specialisations (in -Wdefault)] Ignoring useless SPECIALISE pragma for NOINLINE function: ‘f’ ===================================== testsuite/tests/simplCore/should_compile/T25389.stderr ===================================== @@ -0,0 +1,97 @@ + +==================== Tidy Core ==================== +Result size of Tidy Core + = {terms: 34, types: 46, coercions: 2, joins: 0/0} + +-- RHS size: {terms: 3, types: 2, coercions: 1, joins: 0/0} +T25389.$WEx1 [InlPrag=INLINE[final] CONLIKE] + :: Int %1 -> Example True +[GblId[DataConWrapper], + Arity=1, + Str=, + Unf=Unf{Src=StableSystem, TopLvl=True, + Value=True, ConLike=True, WorkFree=True, Expandable=True, + Guidance=ALWAYS_IF(arity=1,unsat_ok=True,boring_ok=False) + Tmpl= \ (conrep [Occ=Once1] :: Int) -> + T25389.Ex1 @True @~(_N :: True GHC.Prim.~# True) conrep}] +T25389.$WEx1 + = \ (conrep [Occ=Once1] :: Int) -> + T25389.Ex1 @True @~(_N :: True GHC.Prim.~# True) conrep + +-- RHS size: {terms: 1, types: 1, coercions: 1, joins: 0/0} +T25389.$WEx2 [InlPrag=INLINE[final] CONLIKE] :: Example False +[GblId[DataConWrapper], + Unf=Unf{Src=StableSystem, TopLvl=True, + Value=True, ConLike=True, WorkFree=True, Expandable=True, + Guidance=ALWAYS_IF(arity=0,unsat_ok=True,boring_ok=False) + Tmpl= T25389.Ex2 @False @~(_N :: False GHC.Prim.~# False)}] +T25389.$WEx2 + = T25389.Ex2 @False @~(_N :: False GHC.Prim.~# False) + +-- RHS size: {terms: 8, types: 3, coercions: 0, joins: 0/0} +expensive :: Int -> Int +[GblId, + Arity=1, + Str=<1!P(L)>, + Cpr=1, + Unf=Unf{Src=StableSystem, TopLvl=True, + Value=True, ConLike=True, WorkFree=True, Expandable=True, + Guidance=ALWAYS_IF(arity=1,unsat_ok=True,boring_ok=False) + Tmpl= \ (v [Occ=Once1!] :: Int) -> + case v of { GHC.Types.I# x [Occ=Once1] -> + GHC.Types.I# (GHC.Prim.*# x 2#) + }}] +expensive + = \ (v :: Int) -> + case v of { GHC.Types.I# x -> GHC.Types.I# (GHC.Prim.*# x 2#) } + +-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0} +T25389.op1 :: Int +[GblId, + Unf=Unf{Src=, TopLvl=True, + Value=True, ConLike=True, WorkFree=True, Expandable=True, + Guidance=IF_ARGS [] 10 10}] +T25389.op1 = GHC.Types.I# 0# + +-- RHS size: {terms: 5, types: 9, coercions: 0, joins: 0/0} +T25389.op_$sop [InlPrag=INLINE (sat-args=1)] + :: Example False -> Int +[GblId, + Arity=1, + Str=<1L>, + Cpr=1, + Unf=Unf{Src=StableSystem, TopLvl=True, + Value=True, ConLike=True, WorkFree=True, Expandable=True, + Guidance=ALWAYS_IF(arity=1,unsat_ok=True,boring_ok=True) + Tmpl= \ (e [Occ=Once1!] :: Example False) -> + case e of { Ex2 _ [Occ=Dead] -> T25389.op1 }}] +T25389.op_$sop + = \ (e :: Example False) -> + case e of { Ex2 co [Dmd=B] -> T25389.op1 } + +-- RHS size: {terms: 9, types: 16, coercions: 0, joins: 0/0} +op :: forall (b :: Bool). Example b -> Int +[GblId, + Arity=1, + Str=<1L>, + Cpr=1, + Unf=Unf{Src=StableSystem, TopLvl=True, + Value=True, ConLike=True, WorkFree=True, Expandable=True, + Guidance=ALWAYS_IF(arity=1,unsat_ok=True,boring_ok=False) + Tmpl= \ (@(b :: Bool)) (e [Occ=Once1!] :: Example b) -> + case e of { + Ex1 _ [Occ=Dead] i [Occ=Once1] -> expensive i; + Ex2 _ [Occ=Dead] -> T25389.op1 + }}] +op + = \ (@(b :: Bool)) (e :: Example b) -> + case e of { + Ex1 co [Dmd=B] i -> expensive i; + Ex2 co [Dmd=B] -> T25389.op1 + } + + +------ Local rules for imported ids -------- +"USPEC op @'False" forall. op @False = T25389.op_$sop + + ===================================== testsuite/tests/simplCore/should_compile/T8537.stderr ===================================== @@ -1,4 +1,3 @@ - -T8537.hs:20:5: warning: [GHC-66582] - Ignoring useless SPECIALISE pragma for: ‘fmap’ +T8537.hs:20:5: warning: [GHC-66582] [-Wuseless-specialisations (in -Wdefault)] + Seemingly useless SPECIALISE pragma for: ‘fmap’ ===================================== testsuite/tests/simplCore/should_fail/T25117b.stderr ===================================== @@ -1,2 +1,5 @@ -T25117b.hs:7:1: error: [GHC-62037] - SPECIALIZE expression doesn't support multiple specialize type ascriptions +T25117b.hs:7:27: error: [GHC-62037] + SPECIALISE expression doesn't support multiple type ascriptions + Suggested fix: + Split the SPECIALISE pragma into multiple pragmas, one for each type signature + ===================================== testsuite/tests/th/T13123.stderr ===================================== @@ -0,0 +1,3 @@ +T13123.hs:15:2: warning: [GHC-66582] [-Wuseless-specialisations (in -Wdefault)] + Seemingly useless SPECIALISE pragma for: ‘id2’ + ===================================== testsuite/tests/typecheck/should_compile/T10504.stderr ===================================== @@ -1,3 +1,3 @@ +T10504.hs:5:1: warning: [GHC-66582] [-Wuseless-specialisations (in -Wdefault)] + Seemingly useless SPECIALISE pragma for: ‘myfun’ -T10504.hs:5:1: warning: [GHC-66582] - Ignoring useless SPECIALISE pragma for: ‘myfun’ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/fea2cd586aa0cdd81c8fefcc46f0e55646e2086e -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/fea2cd586aa0cdd81c8fefcc46f0e55646e2086e You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 13:55:40 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Tue, 03 Dec 2024 08:55:40 -0500 Subject: [Git][ghc/ghc][wip/romes/graph-compact-easy] Fix Message-ID: <674f0ddcbffd3_2211c9161b58888758@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/graph-compact-easy at Glasgow Haskell Compiler / GHC Commits: ef610144 by Rodrigo Mesquita at 2024-12-03T13:55:27+00:00 Fix - - - - - 2 changed files: - ghc/GHCi/Leak.hs - ghc/GHCi/UI.hs Changes: ===================================== ghc/GHCi/Leak.hs ===================================== @@ -7,6 +7,7 @@ module GHCi.Leak import Control.Monad import Data.Bits +import Data.IORef import Foreign.Ptr (ptrToIntPtr, intPtrToPtr) import GHC import GHC.Ptr (Ptr (..)) @@ -16,6 +17,7 @@ import GHC.Driver.Ppr import GHC.Utils.Outputable import GHC.Unit.Module.ModDetails import GHC.Unit.Home.ModInfo +import GHC.Unit.Home.PackageTable import GHC.Platform (target32Bit) import GHC.Linker.Types import Prelude ===================================== ghc/GHCi/UI.hs ===================================== @@ -53,7 +53,7 @@ import GHC.Driver.Phases import GHC.Driver.Session as DynFlags import GHC.Driver.Ppr hiding (printForUser) import GHC.Utils.Error hiding (traceCmd) -import GHC.Driver.Monad ( modifySession ) +import GHC.Driver.Monad ( modifySession, modifySessionM ) import GHC.Driver.Make ( newIfaceCache, ModIfaceCache(..) ) import GHC.Driver.Config.Parser (initParserOpts) import GHC.Driver.Config.Diagnostic @@ -144,6 +144,7 @@ import Foreign hiding (void) import GHC.Stack hiding (SrcLoc(..)) import GHC.Unit.Env import GHC.Unit.Home.ModInfo +import GHC.Unit.Home.PackageTable import System.Directory import System.Environment @@ -4494,7 +4495,7 @@ discardInterfaceCache = clearHPTs :: GhciMonad m => m () clearHPTs = do - let pruneHomeUnitEnv hme = do + let pruneHomeUnitEnv hme = liftIO $ do emptyHpt <- newHomePackageTable pure hme{ homeUnitEnv_hpt = emptyHpt } discardMG hsc = hsc { hsc_mod_graph = GHC.emptyMG } View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ef6101447a4da91fadec588ec877d0b584a33301 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ef6101447a4da91fadec588ec877d0b584a33301 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 13:56:08 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Tue, 03 Dec 2024 08:56:08 -0500 Subject: [Git][ghc/ghc][wip/romes/graph-compact-easy] Fix Message-ID: <674f0df827b9c_2211c91633c508909e@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/graph-compact-easy at Glasgow Haskell Compiler / GHC Commits: 04fa9b90 by Rodrigo Mesquita at 2024-12-03T13:55:56+00:00 Fix - - - - - 2 changed files: - ghc/GHCi/Leak.hs - ghc/GHCi/UI.hs Changes: ===================================== ghc/GHCi/Leak.hs ===================================== @@ -7,6 +7,7 @@ module GHCi.Leak import Control.Monad import Data.Bits +import Data.IORef import Foreign.Ptr (ptrToIntPtr, intPtrToPtr) import GHC import GHC.Ptr (Ptr (..)) @@ -16,6 +17,7 @@ import GHC.Driver.Ppr import GHC.Utils.Outputable import GHC.Unit.Module.ModDetails import GHC.Unit.Home.ModInfo +import GHC.Unit.Home.PackageTable import GHC.Platform (target32Bit) import GHC.Linker.Types import Prelude ===================================== ghc/GHCi/UI.hs ===================================== @@ -53,7 +53,7 @@ import GHC.Driver.Phases import GHC.Driver.Session as DynFlags import GHC.Driver.Ppr hiding (printForUser) import GHC.Utils.Error hiding (traceCmd) -import GHC.Driver.Monad ( modifySession ) +import GHC.Driver.Monad ( modifySession, modifySessionM ) import GHC.Driver.Make ( newIfaceCache, ModIfaceCache(..) ) import GHC.Driver.Config.Parser (initParserOpts) import GHC.Driver.Config.Diagnostic @@ -143,7 +143,7 @@ import GHC.Utils.Exception as Exception hiding (catch, mask, handle) import Foreign hiding (void) import GHC.Stack hiding (SrcLoc(..)) import GHC.Unit.Env -import GHC.Unit.Home.ModInfo +import GHC.Unit.Home.PackageTable import System.Directory import System.Environment @@ -4494,7 +4494,7 @@ discardInterfaceCache = clearHPTs :: GhciMonad m => m () clearHPTs = do - let pruneHomeUnitEnv hme = do + let pruneHomeUnitEnv hme = liftIO $ do emptyHpt <- newHomePackageTable pure hme{ homeUnitEnv_hpt = emptyHpt } discardMG hsc = hsc { hsc_mod_graph = GHC.emptyMG } View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/04fa9b901df5a7531d358010787d80c6b9b8e39b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/04fa9b901df5a7531d358010787d80c6b9b8e39b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 15:39:17 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 03 Dec 2024 10:39:17 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25527 Message-ID: <674f262591acf_a8c574dff587788d@gitlab.mail> Ben Gamari pushed new branch wip/T25527 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25527 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 15:55:55 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 03 Dec 2024 10:55:55 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25542 Message-ID: <674f2a0b5deed_a8c576d6aa09388b@gitlab.mail> Ben Gamari pushed new branch wip/T25542 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25542 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 17:27:59 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Tue, 03 Dec 2024 12:27:59 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/andreask/spec_changelog Message-ID: <674f3f9f68116_a8c57c2b6901079d3@gitlab.mail> Andreas Klebinger pushed new branch wip/andreask/spec_changelog at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/andreask/spec_changelog You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 17:30:41 2024 From: gitlab at gitlab.haskell.org (Sebastian Graf (@sgraf812)) Date: Tue, 03 Dec 2024 12:30:41 -0500 Subject: [Git][ghc/ghc][wip/hnf-spec] 3 commits: Make exprIsHNF imply exprOkForSpeculation Message-ID: <674f4040ebc16_a8c57c2b6401096cc@gitlab.mail> Sebastian Graf pushed to branch wip/hnf-spec at Glasgow Haskell Compiler / GHC Commits: 0a399f8b by Sebastian Graf at 2024-12-03T18:29:18+01:00 Make exprIsHNF imply exprOkForSpeculation Fixes #23256 because SetLevels and CSE no longer do a reverse binder swap. Furthermore, we no longer need to check for exprIsHNF when exprOkForSpeculation fails. Also fixes #25423. I had a brief look at `-v` in T5642 (which regresses ghc/alloc by 2-3%). It is essentially a benchmark on `Generic` code and uses `exprOkForSpeculation` quite a lot, which now maintains a substitution, explaining the regression. No changes to any intermediate programs. I also had a look at `-v` in T9961 (which regresses ghc/alloc by 1-2%) In T16577 (regresses ghc/alloc by 2-3%) we end up with a marginally smaller program, but the benefit is offset by an additional Simplifier iteration. Metric Decrease: T9872b_defer T9872d Metric Increase: T5642 T9961 T16577 - - - - - f4396e8e by Sebastian Graf at 2024-12-03T18:29:18+01:00 SetLevels: Use `exprOkForSpeculation` instead of `exprIsHNF` - - - - - 742e886d by Sebastian Graf at 2024-12-03T18:29:18+01:00 Prep: Fix outcommented debug pretty-printing logic - - - - - 14 changed files: - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/CSE.hs - compiler/GHC/Core/Opt/CprAnal.hs - compiler/GHC/Core/Opt/SetLevels.hs - compiler/GHC/Core/Opt/WorkWrap/Utils.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/Type.hs - compiler/GHC/Core/Utils.hs - compiler/GHC/CoreToStg/Prep.hs - compiler/GHC/Utils/Misc.hs - + testsuite/tests/simplCore/should_compile/T25423.hs - + testsuite/tests/simplCore/should_compile/T25423.stderr - testsuite/tests/simplCore/should_compile/all.T Changes: ===================================== compiler/GHC/Core/Lint.hs ===================================== @@ -592,7 +592,7 @@ lintLetBind top_lvl rec_flag binder rhs rhs_ty || (isNonRec rec_flag && exprOkForSpeculation rhs) || isDataConWorkId binder || isDataConWrapId binder -- until #17521 is fixed || exprIsTickedString rhs) - (badBndrTyMsg binder (text "unlifted")) + (badUnliftedBndrTyMsg binder rhs) -- Check that if the binder is at the top level and has type Addr#, -- that it is a string literal. @@ -3741,10 +3741,11 @@ mkRhsMsg binder what ty hsep [text "Binder's type:", ppr (idType binder)], hsep [text "Rhs type:", ppr ty]] -badBndrTyMsg :: Id -> SDoc -> SDoc -badBndrTyMsg binder what - = vcat [ text "The type of this binder is" <+> what <> colon <+> ppr binder - , text "Binder's type:" <+> ppr (idType binder) ] +badUnliftedBndrTyMsg :: Id -> CoreExpr -> SDoc +badUnliftedBndrTyMsg bndr rhs + = vcat [ text "The let binder" <+> ppr bndr <+> text "does not satisfy the let-can-float invariant" + , text "Type:" <+> ppr (idType bndr) + , text "RHS:" <+> ppr rhs ] mkNonTopExportedMsg :: Id -> SDoc mkNonTopExportedMsg binder ===================================== compiler/GHC/Core/Opt/CSE.hs ===================================== @@ -30,24 +30,28 @@ import Data.List ( mapAccumL ) Simple common sub-expression ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When we see - x1 = C a b - x2 = C x1 b -we build up a reverse mapping: C a b -> x1 - C x1 b -> x2 + x1 = C a b + x2 = C x1 b +we build up a reverse mapping: + C a b :-> x1 + C x1 b :-> x2 and apply that to the rest of the program. When we then see - y1 = C a b - y2 = C y1 b + y1 = C a b + y2 = C y1 b we replace the C a b with x1. But then we *don't* want to add x1 -> y1 to the mapping. Rather, we want the reverse, y1 -> x1 so that a subsequent binding y2 = C y1 b will get transformed to C x1 b, and then to x2. -So we carry an extra var->var substitution which we apply *before* looking up in the -reverse mapping. +So we carry an extra var->var substitution cs_canon which we apply *before* +looking up in the reverse mapping. We call this step "canonicalisation", because +it makes α-equivalent expressions /syntactically/ equal by choosing the names +consistently. +Note [CSE for bindings] explains both cases (EXTEND and CANONICALISE) in detail. Note [Shadowing in CSE] ~~~~~~~~~~~~~~~~~~~~~~~ @@ -59,7 +63,6 @@ For example, consider Here we must *not* do CSE on the inner x+x! The simplifier used to guarantee no shadowing, but it doesn't any more (it proved too hard), so we clone as we go. -We can simply add clones to the substitution already described. A similar tricky situation is this, with x_123 and y_123 sharing the same unique: @@ -80,18 +83,31 @@ why we have to substitute binders as we go so we will properly get: let x2 = e2 in let foo = x1 +It may be tempting to do the cloning using the same substitution cs_canon that +does the canonicalisation. +We may not do so; see Note [Canonicalisation reverts binder swap transformation]. + +Hence we maintain two substitutions: cs_subst to implement cloning, and cs_canon +to implement the var->var substitution for canonicalising keys prior to lookup +in the reverse mapping. + Note [CSE for bindings] ~~~~~~~~~~~~~~~~~~~~~~~ Let-bindings have two cases, implemented by extendCSEnvWithBinding. -* SUBSTITUTE: applies when the RHS is a variable +* CANONICALISE: applies when the RHS is a variable let x = y in ...(h x).... - Here we want to extend the /substitution/ with x -> y, so that the - (h x) in the body might CSE with an enclosing (let v = h y in ...). - NB: the substitution maps InIds, so we extend the substitution with - a binding for the original InId 'x' + Here we want to extend the canon. substitution cs_canon with x :-> y, so that + the (h x) in the body might CSE with an enclosing (let v = h y in ...). + + NB: cs_canon is distinct from cs_subst, which clones InIds into OutIds in + order to handle Note [Shadowing in CSE]. + cs_canon maps from OutIds to a subset of OutIds, so it uses the same + InScopeSet as cs_subst. + Couldn't we merge cs_subst and cs_canon? In theory yes, in practice no; + see Note [Canonicalisation reverts binder swap transformation]. How can we have a variable on the RHS? Doesn't the simplifier inline them? @@ -102,11 +118,14 @@ Let-bindings have two cases, implemented by extendCSEnvWithBinding. x2 = C x1 b y1 = C a b y2 = C y1 b - Here we CSE y1's rhs to 'x1', and then we must add (y1->x1) to + Here we CSE y1's rhs to 'x1', and then we must add (y1:->x1) to the substitution so that we can CSE the binding for y2. - Second, we use extendCSEnvWithBinding for case expression scrutinees too; - see Note [CSE for case expressions] + see Note [CSE for case expressions]. + + Do note that adding a mapping (x:->y) to cs_canon by itself does not + substitute any occurrence of x in the program. * EXTEND THE REVERSE MAPPING: applies in all other cases @@ -123,23 +142,9 @@ Let-bindings have two cases, implemented by extendCSEnvWithBinding. Here we want to common-up the two uses of (f @ Int) so we can remove one of the case expressions. - See also Note [Corner case for case expressions] for another - reason not to use SUBSTITUTE for all trivial expressions. - -Notice that - - The SUBSTITUTE situation extends the substitution (cs_subst) + - The CANONICALISE situation extends the canon. substitution (cs_canon) - The EXTEND situation extends the reverse mapping (cs_map) -Notice also that in the SUBSTITUTE case we leave behind a binding - x = y -even though we /also/ carry a substitution x -> y. Can we just drop -the binding instead? Well, not at top level! See Note [Top level and -postInlineUnconditionally] in GHC.Core.Opt.Simplify.Utils; and in any -case CSE applies only to the /bindings/ of the program, and we leave -it to the simplifier to propagate effects to the RULES. Finally, it -doesn't seem worth the effort to discard the nested bindings because -the simplifier will do it next. - Note [CSE for case expressions] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Consider @@ -270,31 +275,13 @@ Wrinkles where the unfolding was added by strictness analysis, say. Then CSE goes ahead, so we get bar = foo - and probably use SUBSTITUTE that will make 'bar' dead. But just - possibly not -- see Note [Dealing with ticks]. In that case we might - be left with + or possibly (due to Note [Dealing with ticks]) bar = tick t1 (tick t2 foo) - in which case we would really like to get rid of the stable unfolding - (generated by the strictness analyser, say). + in both cases we would really like to get rid of the stable unfolding so + that the Simplifier inlines the possibly trivial RHS rather than the stable + unfolding, which would in turn keep alive other bindings. - Hence the zapStableUnfolding in cse_bind. Not a big deal, and only - makes a difference when ticks get into the picture. - -Note [Corner case for case expressions] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Here is another reason that we do not use SUBSTITUTE for -all trivial expressions. Consider - case x |> co of (y::Array# Int) { ... } - -We do not want to extend the substitution with (y -> x |> co); since y -is of unlifted type, this would destroy the let-can-float invariant if -(x |> co) was not ok-for-speculation. - -But surely (x |> co) is ok-for-speculation, because it's a trivial -expression, and x's type is also unlifted, presumably. Well, maybe -not if you are using unsafe casts. I actually found a case where we -had - (x :: HValue) |> (UnsafeCo :: HValue ~ Array# Int) + Hence the zapStableUnfolding in cse_bind. Not a big deal. Note [CSE for join points?] ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -371,6 +358,39 @@ To fix this we pass two different cse envs to cse_bind. One we use the cse the r And one we update with the result of cseing the rhs which we then use going forward for the body/rest of the module. +Note [Canonicalisation reverts binder swap transformation] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The CSEnv maintains two substitutions: + + * cs_subst clones every binder so that CSE does not need to worry about + shadowing. See Note [Shadowing in CSE]. + * cs_canon implements the CANONICALISE case of Note [CSE for bindings], but + is never used to actually substitute an expression in the resulting program. + +These substitutions must stay distinct. Consider + + data T a :: UnliftedType where MkT :: !a -> T a + case x of x' { __DEFAULT -> let y = MkT x' in ... } + +Note that the RHS of y satisfies the Note [Core let-can-float invariant] because +x' is a case binder and thus evaluated. +Note that the scrutinee x is trivial; hence case CANONICALISE applies and we +extend cs_canon with + + x' :-> x + +Now, /if/ we were to merge cs_canon into cs_subst, then we would apply this +"reverse binder swap" substitution to the final program and we'd get + + case x of x' { __DEFAULT -> let y = MkT x in ... } + +now `MkT x` is no longer ok-for-spec and the program violates the let-can-float +invariant. This is only temporary, because the next run of the occurrence +analyser will perform a Note [Binder swap] again, however it will trip up +CoreLint nonetheless. +Hence cs_canon is distinct from cs_subst, and the former is only applied before +looking up a canonicalised key in the reverse mapping. + ************************************************************************ * * \section{Common subexpression} @@ -427,7 +447,7 @@ cseBind toplevel env (Rec pairs) -- We use a different env for cse on the rhs and for extendCSEnvWithBinding -- for reasons explain in See Note [Separate envs for let rhs and body] cse_bind :: TopLevelFlag -> CSEnv -> CSEnv -> (InId, InExpr) -> OutId -> (CSEnv, (OutId, OutExpr)) -cse_bind toplevel env_rhs env_body (in_id, in_rhs) out_id +cse_bind toplevel env_rhs env_body (_in_id, in_rhs) out_id | isTopLevel toplevel, exprIsTickedString in_rhs -- See Note [Take care with literal strings] = (env_body', (out_id', in_rhs)) @@ -442,7 +462,7 @@ cse_bind toplevel env_rhs env_body (in_id, in_rhs) out_id | otherwise = (env_body', (out_id'', out_rhs)) where - (env_body', out_id') = extendCSEnvWithBinding env_body in_id out_id out_rhs cse_done + (env_body', out_id') = extendCSEnvWithBinding env_body out_id out_rhs cse_done (cse_done, out_rhs) = try_for_cse env_rhs in_rhs out_id'' | cse_done = zapStableUnfolding $ delayInlining toplevel out_id' @@ -464,28 +484,28 @@ delayInlining top_lvl bndr = bndr extendCSEnvWithBinding - :: CSEnv -- Includes InId->OutId cloning - -> InVar -- Could be a let-bound type - -> OutId -> OutExpr -- Processed binding - -> Bool -- True <=> RHS was CSE'd and is a variable - -- or maybe (Tick t variable) - -> (CSEnv, OutId) -- Final env, final bndr + :: CSEnv -- Includes InId->OutId cloning + -> OutVar -> OutExpr -- Processed binding + -> Bool -- True <=> RHS was CSE'd and is a variable + -- or maybe (Tick t variable) + -> (CSEnv, OutVar) -- Final env, final bndr -- Extend the CSE env with a mapping [rhs -> out-id] --- unless we can instead just substitute [in-id -> rhs] +-- unless we can instead just canonicalise [out-id -> rhs-id] -- -- It's possible for the binder to be a type variable, --- in which case we can just substitute. +-- in which case we can just CANONICALISE. -- See Note [CSE for bindings] -extendCSEnvWithBinding env in_id out_id rhs' cse_done - | not (isId out_id) = (extendCSSubst env in_id rhs', out_id) - | noCSE out_id = (env, out_id) - | use_subst = (extendCSSubst env in_id rhs', out_id) - | cse_done = (env, out_id) - -- See Note [Dealing with ticks] - | otherwise = (extendCSEnv env rhs' id_expr', zapped_id) +extendCSEnvWithBinding env v rhs' cse_done + -- Should we use CANONICALISE or EXTEND? See Note [CSE for bindings] + | not (isId v) = (extendCSCanon env v rhs', v) -- CANONICALISE + | noCSE v = (env, v) + | Var{} <- rhs' = (extendCSCanon env v rhs', v) -- CANONICALISE + | cse_done = (env, v) + -- See Note [Dealing with ticks] + | otherwise = (extendCSEnv env rhs' id_expr', zapped_id) -- EXTEND where - id_expr' = varToCoreExpr out_id - zapped_id = zapIdUsageInfo out_id + id_expr' = varToCoreExpr v + zapped_id = zapIdUsageInfo v -- Putting the Id into the cs_map makes it possible that -- it'll become shared more than it is now, which would -- invalidate (the usage part of) its demand info. @@ -496,11 +516,6 @@ extendCSEnvWithBinding env in_id out_id rhs' cse_done -- it is bad for performance if you don't do late demand -- analysis - -- Should we use SUBSTITUTE or EXTEND? - -- See Note [CSE for bindings] - use_subst | Var {} <- rhs' = True - | otherwise = False - -- | Given a binder `let x = e`, this function -- determines whether we should add `e -> x` to the cs_map noCSE :: InId -> Bool @@ -544,7 +559,7 @@ the original RHS unmodified. This produces: Now 'y' will be discarded as dead code, and we are done. The net effect is that for the y-binding we want to - - Use SUBSTITUTE, by extending the substitution with y :-> x + - Use CANONICALISE, by extending the canon. substitution with y :-> x - but leave the original binding for y undisturbed This is done by cse_bind. I got it wrong the first time (#13367). @@ -587,7 +602,7 @@ with where 'y' is the variable that 'e' maps to. Now consider extendCSEnvWithBinding for the binding for 'x': -* We can't use SUBSTITUTE because those ticks might not be trivial (we +* We can't use CANONICALISE because those ticks might not be trivial (we use tickishIsCode in exprIsTrivial) * We should not use EXTEND, because we definitely don't want to @@ -721,7 +736,7 @@ cseCase env scrut bndr ty alts -- in cse_alt may mean that a dead case binder -- becomes alive, and Lint rejects that (env1, bndr2) = addBinder env bndr1 - (alt_env, bndr3) = extendCSEnvWithBinding env1 bndr bndr2 scrut1 cse_done + (alt_env, bndr3) = extendCSEnvWithBinding env1 bndr2 scrut1 cse_done -- extendCSEnvWithBinding: see Note [CSE for case expressions] con_target :: OutExpr @@ -844,15 +859,21 @@ the case binder is alive; see Note [DataAlt occ info] in GHC.Core.Opt.Simplify. data CSEnv = CS { cs_subst :: Subst -- Maps InBndrs to OutExprs - -- The substitution variables to + -- The cloning substitution; maps variables to -- /trivial/ OutExprs, not arbitrary expressions + , cs_canon :: Subst -- Maps OutBndrs to OutExprs + -- The canonicalising substitution to apply before applying the + -- reverse mapping cs_subst. + -- Maps to /trivial/ OutExprs. + , cs_map :: CoreMap OutExpr -- The "reverse" mapping. -- Maps a OutExpr to a /trivial/ OutExpr - -- The key of cs_map is stripped of all Ticks + -- The key of cs_subst is stripped of all Ticks -- It maps arbitrary expressions to trivial expressions -- representing the same value. E.g @C a b@ to @x1 at . + -- Canonicalise key with cs_canon before looking up in here. , cs_rec_map :: CoreMap OutExpr -- See Note [CSE for recursive bindings] @@ -860,18 +881,18 @@ data CSEnv emptyCSEnv :: CSEnv emptyCSEnv = CS { cs_map = emptyCoreMap, cs_rec_map = emptyCoreMap - , cs_subst = emptySubst } + , cs_subst = emptySubst, cs_canon = emptySubst } lookupCSEnv :: CSEnv -> OutExpr -> Maybe OutExpr -lookupCSEnv (CS { cs_map = csmap }) expr - = lookupCoreMap csmap expr +lookupCSEnv cse expr + = lookupCoreMap (cs_map cse) (canonCSEnv cse expr) -- | @extendCSEnv env e triv_expr@ will replace any occurrence of @e@ with @triv_expr@ going forward. extendCSEnv :: CSEnv -> OutExpr -> OutExpr -> CSEnv extendCSEnv cse expr triv_expr = cse { cs_map = extendCoreMap (cs_map cse) sexpr triv_expr } where - sexpr = stripTicksE tickishFloatable expr + sexpr = canonCSEnv cse $ stripTicksE tickishFloatable expr extendCSRecEnv :: CSEnv -> OutId -> OutExpr -> OutExpr -> CSEnv -- See Note [CSE for recursive bindings] @@ -892,6 +913,18 @@ lookupSubst (CS { cs_subst = sub}) x = lookupIdSubst sub x extendCSSubst :: CSEnv -> Id -> CoreExpr -> CSEnv extendCSSubst cse x rhs = cse { cs_subst = extendSubst (cs_subst cse) x rhs } +extendCSCanon :: CSEnv -> OutVar -> OutExpr -> CSEnv +extendCSCanon cse x y = cse { cs_canon = extendSubst (cs_canon cse) x y' } + where + y' = canonCSEnv cse y -- canonicalise y first! + +canonCSEnv :: CSEnv -> OutExpr -> OutExpr +canonCSEnv cse@(CS { cs_canon = sub }) e = substExpr (sub `setInScope` is) e + where + is = getSubstInScope (cs_subst cse) + -- We do not separately maintain the in-scope set of cs_canon; it's just + -- the one from the substitution used for cloning. + -- | Add clones to the substitution to deal with shadowing. See -- Note [Shadowing in CSE] for more details. You should call this whenever -- you go under a binder. ===================================== compiler/GHC/Core/Opt/CprAnal.hs ===================================== @@ -298,14 +298,8 @@ data TermFlag -- Better than using a Bool exprTerminates :: CoreExpr -> TermFlag -- ^ A /very/ simple termination analysis. exprTerminates e - | exprIsHNF e = Terminates | exprOkForSpeculation e = Terminates | otherwise = MightDiverge - -- Annoyingly, we have to check both for HNF and ok-for-spec. - -- * `I# (x# *# 2#)` is ok-for-spec, but not in HNF. Still worth CPR'ing! - -- * `lvl` is an HNF if its unfolding is evaluated - -- (perhaps `lvl = I# 0#` at top-level). But, tiresomely, it is never - -- ok-for-spec due to Note [exprOkForSpeculation and evaluated variables]. cprAnalApp :: AnalEnv -> CoreExpr -> [(CprType, CoreArg)] -> (CprType, CoreExpr) -- Main function that takes care of /nested/ CPR. See Note [Nested CPR] ===================================== compiler/GHC/Core/Opt/SetLevels.hs ===================================== @@ -38,39 +38,58 @@ We do *not* clone top-level bindings, because some of them must not change, but we *do* clone bindings that are heading for the top level -4. Note [Binder-swap during float-out] - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +4. Note [Duplicate evals into float] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In the expression - case x of wild { p -> ...wild... } - we substitute x for wild in the RHS of the case alternatives: - case x of wild { p -> ...x... } - This means that a sub-expression involving x is not "trapped" inside the RHS - (i.e. it can now be floated out, whereas if it mentioned wild it could not). - And it's not inconvenient because we already have a substitution. + case x of wild { p -> ...f wild... } + the sub-expression `f wild` appears "trapped" inside the Case. + (i.e. it cannot be floated out because it mentions wild). + In order to "free" it, we float out the expression + `case x of wild { __DEFAULT -> f wild }`, thus duplicating the eval. For example, consider: f x = letrec go y = case x of z { (a,b) -> ...(expensive z)... } in ... - If we do the reverse binder-swap we get + If we dup the eval we get - f x = letrec go y = case x of z { (a,b) -> ...(expensive x)... } + f x = letrec go y = case x of z { (a,b) -> ...(case x of z { __DEFAULT -> expensive z })... } in ... and now we can float out: - f x = let t = expensive x - in letrec go y = case x of z { (a,b) -> ...(t)... } + f x = let t = case x of wild { __DEFAULT -> expensive wild } + in letrec go y = case x of wild { (a,b) -> ...(t)... } in ... - Now (expensive x) is computed once, rather than once each time around the 'go' loop. - - Note that this is EXACTLY BACKWARDS from the what the simplifier does. - The simplifier tries to get rid of occurrences of x, in favour of wild, - in the hope that there will only be one remaining occurrence of x, namely - the scrutinee of the case, and we can inline it. - + Now (expensive wild) is computed once, rather than once each time around the 'go' loop. + + Implementation: + + 1. When entering an eval `case x of wild { __DEFAULT -> ...}`, remember + that `wild` is the result of evaluating `x`. + + 2. After figuring out the variables over which the expression needs to be + abstracted in order to float (abstractVars), go over these variables + once more to see if `wild` occurs among them. If so, and if the + scrutinee variable `x` is bound at a lower level than the destination + level of the float, then remove `wild` as an abs_var and record the + obligation to eval `x` into `wild` instead (i.e., add a new `eval_vars` + pairing). This is implemented in eliminateAbsCaseBndrs. + Of course, it only makes sense to duplicate the eval if we end up + with a thunk in doing so; hence eliminateAbsCaseBndrs checks whether + the abs_vars become empty after duplicating evals. + + + Historically, we implemented a reverse binder-swap + (see Note [The binder-swap substitution] for the forward direction), + which would float `expensive x` and thus drop the eval on `x`. This caused + trouble for expressions such as + case x of wild { __DEFAULT -> let y = dataToTagLarge# wild in ... } + When the case binder `wild` is swapped for the unevaluated scrutinee + `x`, `dataToTagLarge# x` no longer is ok-for-spec and thus the unlifted let + violates the let-can-float invariant. Hence we duplicate the eval nowadays. -} module GHC.Core.Opt.SetLevels ( @@ -127,6 +146,7 @@ import GHC.Utils.Outputable import GHC.Utils.Panic import Data.Maybe +import Data.Either {- ************************************************************************ @@ -445,21 +465,21 @@ lvlCase :: LevelEnv -- Level of in-scope names/tyvars lvlCase env scrut_fvs scrut' case_bndr ty alts -- See Note [Floating single-alternative cases] | [AnnAlt con@(DataAlt {}) bs body] <- alts - , exprIsHNF (deTagExpr scrut') -- See Note [Check the output scrutinee for exprIsHNF] - , not (isTopLvl dest_lvl) -- Can't have top-level cases - , not (floatTopLvlOnly env) -- Can float anywhere - , ManyTy <- idMult case_bndr -- See Note [Floating linear case] + , exprOkForSpeculation (deTagExpr scrut') -- See Note [Check the output scrutinee for exprOkForSpeculation] + , not (isTopLvl dest_lvl) -- Can't have top-level cases + , not (floatTopLvlOnly env) -- Can float anywhere + , ManyTy <- idMult case_bndr -- See Note [Floating linear case] = -- Always float the case if possible -- Unlike lets we don't insist that it escapes a value lambda do { (env1, (case_bndr' : bs')) <- cloneCaseBndrs env dest_lvl (case_bndr : bs) - ; let rhs_env = extendCaseBndrEnv env1 case_bndr scrut' + ; let rhs_env = rememberEval env1 case_bndr' scrut' ; body' <- lvlMFE rhs_env True body ; let alt' = Alt con (map (stayPut dest_lvl) bs') body' ; return (Case scrut' (TB case_bndr' (FloatMe dest_lvl)) ty' [alt']) } | otherwise -- Stays put - = do { let (alts_env1, [case_bndr']) = substAndLvlBndrs NonRecursive env incd_lvl [case_bndr] - alts_env = extendCaseBndrEnv alts_env1 case_bndr scrut' + = do { let (alts_env1, [case_bndr'@(TB case_bndrr _)]) = substAndLvlBndrs NonRecursive env incd_lvl [case_bndr] + alts_env = rememberEval alts_env1 case_bndrr scrut' ; alts' <- mapM (lvl_alt alts_env) alts ; return (Case scrut' case_bndr' ty' alts') } where @@ -497,17 +517,8 @@ the inner loop. Things to note: - * The test we perform is exprIsHNF, and /not/ exprOkForSpeculation. - - - exprIsHNF catches the key case of an evaluated variable - - - exprOkForSpeculation is /false/ of an evaluated variable; - See Note [exprOkForSpeculation and evaluated variables] in GHC.Core.Utils - So we'd actually miss the key case! - - - Nothing is gained from the extra generality of exprOkForSpeculation - since we only consider floating a case whose single alternative - is a DataAlt K a b -> rhs + * The test we perform is exprOkForSpeculation, because speculating the case is + exactly what we do. * We can't float a case to top level @@ -557,8 +568,8 @@ needed to quantify over some of its free variables (e.g. z), resulting in shadowing and very confusing Core Lint failures. -Note [Check the output scrutinee for exprIsHNF] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Note [Check the output scrutinee for exprOkForSpeculation] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Consider this: case x of y { A -> ....(case y of alts).... @@ -572,10 +583,10 @@ evaluated), but the former is not -- and indeed we can't float the inner case out, at least not unless x is also evaluated at its binding site. See #5453. -That's why we apply exprIsHNF to scrut' and not to scrut. +That's why we apply exprOkForSpeculation to scrut' and not to scrut. See Note [Floating single-alternative cases] for why -we use exprIsHNF in the first place. +we use exprOkForSpeculation in the first place. -} lvlNonTailMFE :: LevelEnv -- Level of in-scope names/tyvars @@ -632,7 +643,7 @@ lvlMFE env strict_ctxt ann_expr | float_is_new_lam || exprIsTopLevelBindable expr expr_ty -- No wrapping needed if the type is lifted, or is a literal string -- or if we are wrapping it in one or more value lambdas - = do { expr1 <- lvlFloatRhs abs_vars dest_lvl rhs_env NonRecursive + = do { expr1 <- lvlFloatRhs abs_vars eval_vars dest_lvl rhs_env NonRecursive is_bot_lam NotJoinPoint ann_expr -- Treat the expr just like a right-hand side ; var <- newLvlVar expr1 NotJoinPoint is_mk_static @@ -653,6 +664,7 @@ lvlMFE env strict_ctxt ann_expr = do { expr1 <- lvlExpr rhs_env ann_expr ; let l1r = incMinorLvlFrom rhs_env float_rhs = mkLams abs_vars_w_lvls $ + flip (foldr (wrapEval l1r)) eval_vars $ Case expr1 (stayPut l1r ubx_bndr) box_ty [Alt DEFAULT [] (App boxing_expr (Var ubx_bndr))] @@ -678,7 +690,8 @@ lvlMFE env strict_ctxt ann_expr -- See Note [Bottoming floats] -- esp Bottoming floats (2) expr_ok_for_spec = exprOkForSpeculation expr - abs_vars = abstractVars dest_lvl env fvs + (abs_vars, eval_vars) = eliminateAbsCaseBndrs dest_lvl env $ + abstractVars dest_lvl env fvs dest_lvl = destLevel env fvs fvs_ty is_function is_bot_lam -- NB: is_bot_lam not is_bot; see (3) in -- Note [Bottoming floats] @@ -701,16 +714,16 @@ lvlMFE env strict_ctxt ann_expr float_me = saves_work || saves_alloc || is_mk_static -- See Note [Saving work] - saves_work = escapes_value_lam -- (a) - && not (exprIsHNF expr) -- (b) - && not float_is_new_lam -- (c) + saves_work = escapes_value_lam -- (a) + && not (exprOkForSpeculation expr) -- (b) + && not float_is_new_lam -- (c) escapes_value_lam = dest_lvl `ltMajLvl` (le_ctxt_lvl env) -- See Note [Saving allocation] and Note [Floating to the top] saves_alloc = isTopLvl dest_lvl && floatConsts env && ( not strict_ctxt -- (a) - || exprIsHNF expr -- (b) + || exprOkForSpeculation expr -- (b) || (is_bot_lam && escapes_value_lam)) -- (c) hasFreeJoin :: LevelEnv -> DVarSet -> Bool @@ -730,14 +743,14 @@ But see also Note [Saving allocation]. So we definitely float an expression out if (a) It will escape a value lambda (escapes_value_lam) -(b) The expression is not a head-normal form (exprIsHNF); see (SW1, SW2). +(b) The expression is not a head-normal form (exprOkForSpeculation); see (SW1, SW2). (c) Floating does not require wrapping it in value lambdas (float_is_new_lam). See (SW3) below Wrinkles: (SW1) Concerning (b) I experimented with using `exprIsCheap` rather than - `exprIsHNF` but the latter seems better, according to nofib + `exprOkForSpeculation` but the latter seems better, according to nofib (`spectral/mate` got 10% worse with exprIsCheap). It's really a bit of a heuristic. @@ -755,7 +768,7 @@ Wrinkles: See !12410 for some data comparing the effect of omitting (b) altogether, This doesn't apply, though, if we float the thing to the top level; see Note [Floating to the top]. Bottom line (data from !12410): adding the - not.exprIsHNF test to `saves_work`: + not.exprOkForSpeculation test to `saves_work`: - Decreases compiler allocations by 0.5% - Occasionally decreases runtime allocation (T12996 -2.5%) - Slightly mixed effect on nofib: (puzzle -10%, mate -5%, cichelli +5%) @@ -1233,7 +1246,7 @@ lvlBind env (AnnNonRec bndr rhs) -- Otherwise we are going to float | null abs_vars = do { -- No type abstraction; clone existing binder - rhs' <- lvlFloatRhs [] dest_lvl env NonRecursive + rhs' <- lvlFloatRhs [] [] dest_lvl env NonRecursive is_bot_lam NotJoinPoint rhs ; (env', [bndr']) <- cloneLetVars NonRecursive env dest_lvl [bndr] ; let bndr2 = annotateBotStr bndr' 0 mb_bot_str @@ -1241,7 +1254,7 @@ lvlBind env (AnnNonRec bndr rhs) | otherwise = do { -- Yes, type abstraction; create a new binder, extend substitution, etc - rhs' <- lvlFloatRhs abs_vars dest_lvl env NonRecursive + rhs' <- lvlFloatRhs abs_vars eval_vars dest_lvl env NonRecursive is_bot_lam NotJoinPoint rhs ; (env', [bndr']) <- newPolyBndrs dest_lvl env abs_vars [bndr] ; let bndr2 = annotateBotStr bndr' n_extra mb_bot_str @@ -1252,7 +1265,8 @@ lvlBind env (AnnNonRec bndr rhs) ty_fvs = tyCoVarsOfType bndr_ty rhs_fvs = freeVarsOf rhs bind_fvs = rhs_fvs `unionDVarSet` dIdFreeVars bndr - abs_vars = abstractVars dest_lvl env bind_fvs + (abs_vars, eval_vars) = eliminateAbsCaseBndrs dest_lvl env $ + abstractVars dest_lvl env bind_fvs dest_lvl = destLevel env bind_fvs ty_fvs (isFunction rhs) is_bot_lam deann_rhs = deAnnotate rhs @@ -1332,9 +1346,8 @@ lvlBind env (AnnRec pairs) -- function in a Rec, and we don't much care what -- happens to it. False is simple! - do_rhs env (_,rhs) = lvlFloatRhs abs_vars dest_lvl env Recursive - is_bot NotJoinPoint - rhs + do_rhs env (_,rhs) = lvlFloatRhs abs_vars eval_vars dest_lvl env Recursive + is_bot NotJoinPoint rhs -- Finding the free vars of the binding group is annoying bind_fvs = ((unionDVarSets [ freeVarsOf rhs | (_, rhs) <- pairs]) @@ -1346,7 +1359,8 @@ lvlBind env (AnnRec pairs) ty_fvs = foldr (unionVarSet . tyCoVarsOfType . idType) emptyVarSet bndrs dest_lvl = destLevel env bind_fvs ty_fvs is_fun is_bot - abs_vars = abstractVars dest_lvl env bind_fvs + (abs_vars, eval_vars) = eliminateAbsCaseBndrs dest_lvl env $ + abstractVars dest_lvl env bind_fvs is_top_bindable = not (any (mightBeUnliftedType . idType) bndrs) -- This mightBeUnliftedType stuff is the same test as in the non-rec case @@ -1396,21 +1410,28 @@ lvlRhs :: LevelEnv -> CoreExprWithFVs -> LvlM LevelledExpr lvlRhs env rec_flag is_bot mb_join_arity expr - = lvlFloatRhs [] (le_ctxt_lvl env) env + = lvlFloatRhs [] [] (le_ctxt_lvl env) env rec_flag is_bot mb_join_arity expr -lvlFloatRhs :: [OutVar] -> Level -> LevelEnv -> RecFlag +wrapEval :: Level -> (OutId, OutId) -> Expr LevelledBndr -> Expr LevelledBndr +-- A bit like GHC.Core.Utils.mkDefaultCase, but `Expr LevelledBndr` +wrapEval dest_lvl (scrut_v, case_bndr) body + = Case (Var scrut_v) (TB case_bndr (StayPut dest_lvl)) + (exprType $ deTagExpr body) [Alt DEFAULT [] body] + +lvlFloatRhs :: [OutVar] -> [(OutId,OutId)] -> Level -> LevelEnv -> RecFlag -> Bool -- Binding is for a bottoming function -> JoinPointHood -> CoreExprWithFVs -> LvlM (Expr LevelledBndr) -- Ignores the le_ctxt_lvl in env; treats dest_lvl as the baseline -lvlFloatRhs abs_vars dest_lvl env rec is_bot mb_join_arity rhs - = do { body' <- if not is_bot -- See Note [Floating from a RHS] +lvlFloatRhs abs_vars eval_vars dest_lvl env rec is_bot mb_join_arity rhs + = do { body1 <- if not is_bot -- See Note [Floating from a RHS] && any isId bndrs then lvlMFE body_env True body else lvlExpr body_env body - ; return (mkLams bndrs' body') } + ; let body2 = foldr (wrapEval dest_lvl) body1 eval_vars + ; return (mkLams bndrs' body2) } where (bndrs, body) | JoinPoint join_arity <- mb_join_arity = collectNAnnBndrs join_arity rhs @@ -1633,14 +1654,20 @@ countFreeIds = nonDetStrictFoldUDFM add 0 . getUniqDSet data LevelEnv = LE { le_switches :: FloatOutSwitches - , le_ctxt_lvl :: Level -- The current level - , le_lvl_env :: VarEnv Level -- Domain is *post-cloned* TyVars and Ids + , le_ctxt_lvl :: Level + -- ^ The current level + , le_lvl_env :: VarEnv (Level, Maybe OutId) + -- ^ Domain is *post-cloned* TyVars and Ids. + -- If `Just scrut`, then the var mapping belongs to a case binder with + -- variable scrutinee `scrut`. + -- This is to support Note [Duplicate evals into float]. -- See Note [le_subst and le_env] - , le_subst :: Subst -- Domain is pre-cloned TyVars and Ids - -- The Id -> CoreExpr in the Subst is ignored - -- (since we want to substitute a LevelledExpr for - -- an Id via le_env) but we do use the Co/TyVar substs + , le_subst :: Subst + -- ^ Domain is pre-cloned TyVars and Ids. + -- The Id -> CoreExpr in the Subst is ignored + -- (since we want to substitute a LevelledExpr for + -- an Id via le_env) but we do use the Co/TyVar substs , le_env :: IdEnv ([OutVar], LevelledExpr) -- Domain is pre-cloned Ids } @@ -1690,10 +1717,10 @@ initialEnv float_lams binds -- to a later one. So here we put all the top-level binders in scope before -- we start, to satisfy the lookupIdSubst invariants (#20200 and #20294) -addLvl :: Level -> VarEnv Level -> OutVar -> VarEnv Level -addLvl dest_lvl env v' = extendVarEnv env v' dest_lvl +addLvl :: Level -> VarEnv (Level, Maybe OutId) -> OutVar -> VarEnv (Level, Maybe OutId) +addLvl dest_lvl env v' = extendVarEnv env v' (dest_lvl, Nothing) -addLvls :: Level -> VarEnv Level -> [OutVar] -> VarEnv Level +addLvls :: Level -> VarEnv (Level, Maybe OutId) -> [OutVar] -> VarEnv (Level, Maybe OutId) addLvls dest_lvl env vs = foldl' (addLvl dest_lvl) env vs floatLams :: LevelEnv -> Maybe Int @@ -1711,20 +1738,19 @@ floatTopLvlOnly le = floatToTopLevelOnly (le_switches le) incMinorLvlFrom :: LevelEnv -> Level incMinorLvlFrom env = incMinorLvl (le_ctxt_lvl env) --- extendCaseBndrEnv adds the mapping case-bndr->scrut-var if it can --- See Note [Binder-swap during float-out] -extendCaseBndrEnv :: LevelEnv - -> Id -- Pre-cloned case binder - -> Expr LevelledBndr -- Post-cloned scrutinee - -> LevelEnv -extendCaseBndrEnv le@(LE { le_subst = subst, le_env = id_env }) +-- rememberEval adds the mapping case-bndr->scrut-var if it can +-- See Note [Duplicate evals into float] +rememberEval :: LevelEnv + -> OutId -- Post-cloned case binder + -> Expr LevelledBndr -- Post-cloned scrutinee + -> LevelEnv +rememberEval le@(LE { le_lvl_env = lvl_env }) case_bndr (Var scrut_var) -- We could use OccurAnal. scrutOkForBinderSwap here, and perhaps -- get a bit more floating. But we didn't in the past and it's -- an unforced change, so I'm leaving it. - = le { le_subst = extendSubstWithVar subst case_bndr scrut_var - , le_env = add_id id_env (case_bndr, scrut_var) } -extendCaseBndrEnv env _ _ = env + = le { le_lvl_env = modifyVarEnv (\(lvl,_) -> (lvl, Just scrut_var)) lvl_env case_bndr } +rememberEval env _ _ = env maxFvLevel :: (Var -> Bool) -> LevelEnv -> DVarSet -> Level maxFvLevel max_me env var_set @@ -1745,8 +1771,8 @@ maxIn max_me (LE { le_lvl_env = lvl_env, le_env = id_env }) in_var lvl where max_out out_var lvl | max_me out_var = case lookupVarEnv lvl_env out_var of - Just lvl' -> maxLvl lvl' lvl - Nothing -> lvl + Just (lvl',_) -> maxLvl lvl' lvl + Nothing -> lvl | otherwise = lvl -- Ignore some vars depending on max_me lookupVar :: LevelEnv -> Id -> LevelledExpr @@ -1765,20 +1791,16 @@ abstractVars :: Level -> LevelEnv -> DVarSet -> [OutVar] -- variable computation and deterministic sort. -- See Note [Unique Determinism] in GHC.Types.Unique for explanation of why -- Uniques are not deterministic. -abstractVars dest_lvl (LE { le_subst = subst, le_lvl_env = lvl_env }) in_fvs +abstractVars dest_lvl le@(LE { le_subst = subst }) in_fvs = -- NB: sortQuantVars might not put duplicates next to each other - map zap $ sortQuantVars $ - filter abstract_me $ - dVarSetElems $ - closeOverKindsDSet $ + map zap $ sortQuantVars $ + filter (abstractMe dest_lvl le) $ + dVarSetElems $ + closeOverKindsDSet $ substDVarSet subst in_fvs -- NB: it's important to call abstract_me only on the OutIds the -- come from substDVarSet (not on fv, which is an InId) where - abstract_me v = case lookupVarEnv lvl_env v of - Just lvl -> dest_lvl `ltLvl` lvl - Nothing -> False - -- We are going to lambda-abstract, so nuke any IdInfo, -- and add the tyvars of the Id (if necessary) zap v | isId v = warnPprTrace (isStableUnfolding (idUnfolding v) || @@ -1787,6 +1809,31 @@ abstractVars dest_lvl (LE { le_subst = subst, le_lvl_env = lvl_env }) in_fvs setIdInfo v vanillaIdInfo | otherwise = v +abstractMe :: Level -> LevelEnv -> Var -> Bool +abstractMe dest_lvl (LE { le_lvl_env = lvl_env }) v + | Just (lvl, _) <- lookupVarEnv lvl_env v + = dest_lvl `ltLvl` lvl + | otherwise + = False + +eliminateAbsCaseBndrs :: Level -> LevelEnv -> [OutVar] -> ([OutVar], [(OutId,OutId)]) +-- Try turning all runtime abs_vars into evals. +-- See Note [Duplicate evals into float] +eliminateAbsCaseBndrs dest_lvl le@(LE { le_lvl_env = lvl_env }) abs_vars + | enables_thunking -- otherwise we do not get to safe work anyway! + = res + | otherwise + = (abs_vars, []) + where + res@(abs_vars',_eval_vars') = partitionEithers (map try_elim abs_vars) + enables_thunking = not (any isRuntimeVar abs_vars') + + try_elim v = case lookupVarEnv lvl_env v of + Just (_, Just scrut_id) + | not (abstractMe dest_lvl le scrut_id) -- would not abstract scrut_id + -> Right (scrut_id, v) -- turn abs_var v into an eval on scrut_id! + _ -> Left v -- retain as an abs_var + type LvlM result = UniqSM result initLvl :: UniqSupply -> UniqSM a -> a @@ -1835,9 +1882,12 @@ newLvlVar :: LevelledExpr -- The RHS of the new binding -> LvlM Id newLvlVar lvld_rhs join_arity_maybe is_mk_static = do { uniq <- getUniqueM - ; return (add_join_info (mk_id uniq rhs_ty)) + ; return (add_evald $ add_join_info $ mk_id uniq rhs_ty) } where + add_evald var + | exprIsHNF de_tagged_rhs = var `setIdUnfolding` evaldUnfolding + | otherwise = var add_join_info var = var `asJoinId_maybe` join_arity_maybe de_tagged_rhs = deTagExpr lvld_rhs rhs_ty = exprType de_tagged_rhs ===================================== compiler/GHC/Core/Opt/WorkWrap/Utils.hs ===================================== @@ -1598,7 +1598,7 @@ move_transit_vars :: [Id] -> (CoreExpr -> CoreExpr -> CoreExpr, CoreExpr) move_transit_vars vars | [var] <- vars , let var_ty = idType var - , isUnliftedType var_ty || exprIsHNF (Var var) + , isUnliftedType var_ty || isEvaldUnfolding (idUnfolding var) -- See Note [No unboxed tuple for single, unlifted transit var] -- * Wrapper: `unbox scrut alt = (case of a -> )` -- * Worker: `tup = a` @@ -1702,9 +1702,7 @@ return unboxed instead of in an unboxed singleton tuple: We want `$wh :: Int# -> [Int]`. We'd get `$wh :: Int# -> (# [Int] #)`. -By considering vars as unlifted that satisfy 'exprIsHNF', we catch (3). -Why not check for 'exprOkForSpeculation'? Quite perplexingly, evaluated vars -are not ok-for-spec, see Note [exprOkForSpeculation and evaluated variables]. +By considering vars as evaluated that have an evald unfolding, we catch (3). For (1) and (2) we would have to look at the term. WW only looks at the type and the CPR signature, so the only way to fix (1) and (2) would be to have a nested termination signature, like in MR !1866. ===================================== compiler/GHC/Core/Subst.hs ===================================== @@ -519,7 +519,9 @@ substUnfolding subst df@(DFunUnfolding { df_bndrs = bndrs, df_args = args }) substUnfolding subst unf@(CoreUnfolding { uf_tmpl = tmpl, uf_src = src }) -- Retain stable unfoldings | not (isStableSource src) -- Zap an unstable unfolding, to save substitution work - = NoUnfolding + = if isEvaldUnfolding unf + then evaldUnfolding + else NoUnfolding | otherwise -- But keep a stable one! = seqExpr new_tmpl `seq` unf { uf_tmpl = new_tmpl } ===================================== compiler/GHC/Core/TyCo/Subst.hs ===================================== @@ -22,6 +22,7 @@ module GHC.Core.TyCo.Subst extendCvSubst, extendCvSubstWithClone, extendTvSubst, extendTvSubstWithClone, extendTvSubstList, extendTvSubstAndInScope, + extendCvSubstAndInScope, extendTCvSubstList, unionSubst, zipTyEnv, zipCoEnv, zipTvSubst, zipCvSubst, @@ -409,6 +410,14 @@ extendTvSubstAndInScope (Subst in_scope ids tenv cenv) tv ty (extendVarEnv tenv tv ty) cenv +extendCvSubstAndInScope :: Subst -> CoVar -> Coercion -> Subst +-- Also extends the in-scope set +extendCvSubstAndInScope (Subst in_scope ids tenv cenv) cv co + = Subst (in_scope `extendInScopeSetSet` tyCoVarsOfCo co) + ids + tenv + (extendVarEnv cenv cv co) + -- | Adds multiple 'TyVar' substitutions to the 'Subst': see also 'extendTvSubst' extendTvSubstList :: Subst -> [(TyVar,Type)] -> Subst extendTvSubstList subst vrs ===================================== compiler/GHC/Core/Type.hs ===================================== @@ -55,7 +55,7 @@ module GHC.Core.Type ( splitForAllForAllTyBinders, splitForAllForAllTyBinder_maybe, splitForAllTyCoVar_maybe, splitForAllTyCoVar, splitForAllTyVar_maybe, splitForAllCoVar_maybe, - splitPiTy_maybe, splitPiTy, splitPiTys, collectPiTyBinders, + splitPiTy_maybe, splitPiTy, splitPiTys, getRuntimeArgTys, mkTyConBindersPreferAnon, mkPiTy, mkPiTys, @@ -290,7 +290,6 @@ import GHC.Utils.Panic import GHC.Data.FastString import GHC.Data.Maybe ( orElse, isJust, firstJust ) -import GHC.List (build) -- $type_classification -- #type_classification# @@ -2056,18 +2055,6 @@ splitPiTys ty = split ty ty [] split orig_ty ty bs | Just ty' <- coreView ty = split orig_ty ty' bs split orig_ty _ bs = (reverse bs, orig_ty) -collectPiTyBinders :: Type -> [PiTyBinder] -collectPiTyBinders ty = build $ \c n -> - let - split (ForAllTy b res) = Named b `c` split res - split (FunTy { ft_af = af, ft_mult = w, ft_arg = arg, ft_res = res }) - = Anon (Scaled w arg) af `c` split res - split ty | Just ty' <- coreView ty = split ty' - split _ = n - in - split ty -{-# INLINE collectPiTyBinders #-} - -- | Extracts a list of run-time arguments from a function type, -- looking through newtypes to the right of arrows. -- ===================================== compiler/GHC/Core/Utils.hs ===================================== @@ -74,9 +74,11 @@ import GHC.Core.Ppr import GHC.Core.FVs( bindFreeVars ) import GHC.Core.DataCon import GHC.Core.Type as Type +import GHC.Core.TyCo.Rep as Type import GHC.Core.Predicate( isCoVarType ) import GHC.Core.FamInstEnv import GHC.Core.TyCo.Compare( eqType, eqTypeX ) +import GHC.Core.TyCo.Subst import GHC.Core.Coercion import GHC.Core.Reduction import GHC.Core.TyCon @@ -1714,7 +1716,8 @@ it's applied only to dictionaries. ----------------------------- -- | To a first approximation, 'exprOkForSpeculation' returns True of --- an expression that is: +-- an expression that is nearly a value (i.e., it implies 'exprIsHNF'). +-- That is, the expression is -- -- * Safe to evaluate even if normal order eval might not -- evaluate the expression at all, and @@ -1740,29 +1743,19 @@ it's applied only to dictionaries. -- But in fact both functions are a bit more conservative than the above, -- in at least the following ways: -- --- * W1: We do not take advantage of already-evaluated lifted variables. --- As a result, 'exprIsHNF' DOES NOT imply 'exprOkForSpeculation'; --- if @y@ is a case-binder of lifted type, then @exprIsHNF y@ is --- 'True', while @exprOkForSpeculation y@ is 'False'. --- See Note [exprOkForSpeculation and evaluated variables] for why. --- * W2: Read-effects on mutable variables are currently also included. +-- * W1: Read-effects on mutable variables are currently also included. -- See Note [Classifying primop effects] "GHC.Builtin.PrimOps". --- * W3: Currently, 'exprOkForSpeculation' always returns 'False' for --- let-expressions. Lets can be stacked deeply, so we just give up. --- In any case, the argument of 'exprOkForSpeculation' is usually in --- a strict context, so any lets will have been floated away. --- -- -- As an example of the considerations in this test, consider: -- -- > let x = case y# +# 1# of { r# -> I# r# } --- > in E +-- > in e -- -- being translated to: -- -- > case y# +# 1# of { r# -> -- > let x = I# r# --- > in E +-- > in e -- > } -- -- We can only do this if the @y# +# 1#@ is ok for speculation: it has no @@ -1811,14 +1804,12 @@ expr_ok fun_ok primop_ok (Tick tickish e) | tickishCounts tickish = False | otherwise = expr_ok fun_ok primop_ok e -expr_ok _ _ (Let {}) = False --- See W3 in the Haddock comment for exprOkForSpeculation +expr_ok fun_ok primop_ok (Let _ e) = expr_ok fun_ok primop_ok e + -- Ignore binds becaue of Note [Core let-can-float invariant] in GHC.Core -expr_ok fun_ok primop_ok (Case scrut bndr _ alts) +expr_ok fun_ok primop_ok (Case scrut _ _ alts) = -- See Note [exprOkForSpeculation: case expressions] expr_ok fun_ok primop_ok scrut - && isUnliftedType (idType bndr) - -- OK to call isUnliftedType: binders always have a fixed RuntimeRep && all (\(Alt _ _ rhs) -> expr_ok fun_ok primop_ok rhs) alts && altsAreExhaustive alts @@ -1847,7 +1838,7 @@ app_ok fun_ok primop_ok fun args | idArity fun > n_val_args -- Partial application: just check passing the arguments is OK - = args_ok + = args_ok notCBV | otherwise = case idDetails fun of @@ -1857,9 +1848,10 @@ app_ok fun_ok primop_ok fun args DataConWorkId dc | isLazyDataConRep dc - -> args_ok + -> args_ok notCBV | otherwise - -> fields_ok (dataConRepStrictness dc) + -> args_ok (dataConRepStrictness dc) + -- See (SFC1) of Note [Strict fields in Core] ClassOpId _ is_terminating_result | is_terminating_result -- See Note [exprOkForSpeculation and type classes] @@ -1881,7 +1873,7 @@ app_ok fun_ok primop_ok fun args -- Often there is a literal divisor, and this -- can get rid of a thunk in an inner loop - | otherwise -> primop_ok op && args_ok + | otherwise -> primop_ok op && args_ok notCBV _other -- Unlifted and terminating types; -- Also c.f. the Var case of exprIsHNF @@ -1898,37 +1890,54 @@ app_ok fun_ok primop_ok fun args -- See (U12) of Note [Implementing unsafeCoerce] | fun `hasKey` unsafeEqualityProofIdKey -> True - | otherwise -> False - -- NB: even in the nullary case, do /not/ check - -- for evaluated-ness of the fun; - -- see Note [exprOkForSpeculation and evaluated variables] + | 0 <- n_val_args + , isEvaldUnfolding (idUnfolding fun) + -> -- pprTrace "yes" (ppr fun) + True + + | otherwise -> -- pprTrace "no" (ppr fun <+> ppr args) + False where fun_ty = idType fun n_val_args = valArgCount args - (arg_tys, _) = splitPiTys fun_ty -- Even if a function call itself is OK, any unlifted - -- args are still evaluated eagerly and must be checked - args_ok = all2Prefix arg_ok arg_tys args - arg_ok :: PiTyVarBinder -> CoreExpr -> Bool - arg_ok (Named _) _ = True -- A type argument - arg_ok (Anon ty _) arg -- A term argument - | definitelyLiftedType (scaledThing ty) - = True -- lifted args are not evaluated eagerly + -- args are still evaluated eagerly and must be checked. + -- Furthermore, for saturated calls, we must check CBV args (strict fields + -- of DataCons!) + args_ok str_marks = relevantAppArgsSatisfy arg_ok fun_ty args str_marks + arg_ok :: Type -> CoreExpr -> StrictnessMark -> Bool + arg_ok ty arg str + | NotMarkedStrict <- str -- iff it's not a CBV arg + , definitelyLiftedType ty -- and its type is lifted + = True -- then the worker app does not eval | otherwise = expr_ok fun_ok primop_ok arg - -- Used for strict DataCon worker arguments - -- See (SFC1) of Note [Strict fields in Core] - fields_ok str_marks = all3Prefix field_ok arg_tys str_marks args - field_ok :: PiTyVarBinder -> StrictnessMark -> CoreExpr -> Bool - field_ok (Named _) _ _ = True - field_ok (Anon ty _) str arg - | NotMarkedStrict <- str -- iff it's a lazy field - , definitelyLiftedType (scaledThing ty) -- and its type is lifted - = True -- then the worker app does not eval - | otherwise - = expr_ok fun_ok primop_ok arg +notCBV :: [StrictnessMark] +notCBV = repeat NotMarkedStrict + +relevantAppArgsSatisfy :: (Type -> CoreExpr -> StrictnessMark -> Bool) -> Type -> [CoreExpr] -> [StrictnessMark] -> Bool +-- This calls the predicate on every non-Type CoreExpr arg. +-- We could just do `exprType arg` for every such arg, but carrying around a +-- substitution is much more efficient. +-- The obvious definition regresses T16577 by 30% so we don't do it. +relevantAppArgsSatisfy p ty = go (mkEmptySubst in_scope) ty + where + in_scope = mkInScopeSet (tyCoVarsOfType ty) + go subst (ForAllTy b res) (Type ty : args) strs + = go (extendTvSubstAndInScope subst (binderVar b) ty) res args strs + go subst (ForAllTy b res) (Coercion co : args) strs + = go (extendCvSubstAndInScope subst (binderVar b) co) res args strs + go subst (FunTy { ft_arg = arg, ft_res = res }) (e : args) (str : strs) + = p (substTy subst arg) e str && go subst res args strs + go subst ty args@(_:_) strs@(_:_) + | Just ty' <- coreView (substTy subst ty) + = go (mkEmptySubst (getSubstInScope subst)) ty' args strs + | otherwise + = pprPanic "Should see more argument tys" (ppr ty $$ ppr subst $$ ppr args $$ ppr (take 10 strs)) + go _ _ _ _ = True +{-# INLINE relevantAppArgsSatisfy #-} ----------------------------- altsAreExhaustive :: [Alt b] -> Bool @@ -1985,6 +1994,8 @@ GHC.Types.Id.Make.mkDictSelId for where this field is initialised. Note [exprOkForSpeculation: case expressions] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SG: I don't get what is so "very special" about this case. I find it very reasonable. + exprOkForSpeculation accepts very special case expressions. Reason: (a ==# b) is ok-for-speculation, but the litEq rules in GHC.Core.Opt.ConstantFold convert it (a ==# 3#) to @@ -1994,39 +2005,22 @@ for excellent reasons described in So, annoyingly, we want that case expression to be ok-for-speculation too. Bother. -But we restrict it sharply: - -* We restrict it to unlifted scrutinees. Consider this: - case x of y { - DEFAULT -> ... (let v::Int# = case y of { True -> e1 - ; False -> e2 } - in ...) ... - - Does the RHS of v satisfy the let-can-float invariant? Previously we said - yes, on the grounds that y is evaluated. But the binder-swap done - by GHC.Core.Opt.SetLevels would transform the inner alternative to - DEFAULT -> ... (let v::Int# = case x of { ... } - in ...) .... - which does /not/ satisfy the let-can-float invariant, because x is - not evaluated. See Note [Binder-swap during float-out] - in GHC.Core.Opt.SetLevels. To avoid this awkwardness it seems simpler - to stick to unlifted scrutinees where the issue does not - arise. - -* We restrict it to exhaustive alternatives. A non-exhaustive - case manifestly isn't ok-for-speculation. for example, - this is a valid program (albeit a slightly dodgy one) - let v = case x of { B -> ...; C -> ... } - in case x of - A -> ... - _ -> ...v...v.... - Should v be considered ok-for-speculation? Its scrutinee may be - evaluated, but the alternatives are incomplete so we should not - evaluate it strictly. - - Now, all this is for lifted types, but it'd be the same for any - finite unlifted type. We don't have many of them, but we might - add unlifted algebraic types in due course. +SG: Again, I don't see why we need to list a specific example. +Clearly, we want to detect as many expressions as ok-for-spec as possible! + +But we restrict it to exhaustive alternatives. A non-exhaustive +case manifestly isn't ok-for-speculation. For example, +this is a valid program (albeit a slightly dodgy one) + let v = case x of { B -> ...; C -> ... } + in case x of + A -> ... + _ -> ...v...v.... +Should v be considered ok-for-speculation? Its scrutinee may be +evaluated, but the alternatives are incomplete so we should not +evaluate it strictly. + +Now, all this is for lifted types, but it'd be the same for any +finite unlifted type. ----- Historical note: #15696: -------- @@ -2073,37 +2067,6 @@ points do the job nicely. ------- End of historical note ------------ -Note [exprOkForSpeculation and evaluated variables] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Consider these examples: - * case x of y { DEFAULT -> ....y.... } - Should 'y' (alone) be considered ok-for-speculation? - - * case x of y { DEFAULT -> ....let z = dataToTagLarge# y... } - Should (dataToTagLarge# y) be considered ok-for-spec? Recall that - dataToTagLarge# :: forall a. a -> Int# - must always evaluate its argument. (See also Note [DataToTag overview].) - -You could argue 'yes', because in the case alternative we know that -'y' is evaluated. But the binder-swap transformation, which is -extremely useful for float-out, changes these expressions to - case x of y { DEFAULT -> ....x.... } - case x of y { DEFAULT -> ....let z = dataToTagLarge# x... } - -And now the expression does not obey the let-can-float invariant! Yikes! -Moreover we really might float (dataToTagLarge# x) outside the case, -and then it really, really doesn't obey the let-can-float invariant. - -The solution is simple: exprOkForSpeculation does not try to take -advantage of the evaluated-ness of (lifted) variables. And it returns -False (always) for primops that perform evaluation. We achieve the latter -by marking the relevant primops as "ThrowsException" or -"ReadWriteEffect"; see also Note [Classifying primop effects] in -GHC.Builtin.PrimOps. - -Note that exprIsHNF /can/ and does take advantage of evaluated-ness; -it doesn't have the trickiness of the let-can-float invariant to worry about. - ************************************************************************ * * exprIsHNF, exprIsConLike @@ -2166,7 +2129,6 @@ exprIsHNFlike is_con is_con_unf e || is_con_unf (idUnfolding v) -- Check the thing's unfolding; it might be bound to a value -- or to a guaranteed-evaluated variable (isEvaldUnfolding) - -- Contrast with Note [exprOkForSpeculation and evaluated variables] -- We don't look through loop breakers here, which is a bit conservative -- but otherwise I worry that if an Id's unfolding is just itself, -- we could get an infinite loop @@ -2185,66 +2147,59 @@ exprIsHNFlike is_con is_con_unf e && is_hnf_like e -- See Note [exprIsHNF Tick] is_hnf_like (Cast e _) = is_hnf_like e - is_hnf_like (App e a) - | isValArg a = app_is_value e [a] - | otherwise = is_hnf_like e is_hnf_like (Let _ e) = is_hnf_like e -- Lazy let(rec)s don't affect us is_hnf_like (Case e b _ as) | Just rhs <- isUnsafeEqualityCase e b as = is_hnf_like rhs - is_hnf_like _ = False - - -- Collect arguments through Casts and Ticks and call id_app_is_value - app_is_value :: CoreExpr -> [CoreArg] -> Bool - app_is_value (Var f) as = id_app_is_value f as - app_is_value (Tick _ f) as = app_is_value f as - app_is_value (Cast f _) as = app_is_value f as - app_is_value (App f a) as | isValArg a = app_is_value f (a:as) - | otherwise = app_is_value f as - app_is_value _ _ = False - - id_app_is_value id val_args = + is_hnf_like e + | (fun, args) <- collectArgs e + = case stripTicksTopE (not . tickishCounts) fun of + Var f -> id_app_is_value f args + + -- 'LitRubbish' is the only literal that can occur in the head of an + -- application and will not be matched by the above case (Var /= Lit). + -- See Note [How a rubbish literal can be the head of an application] + -- in GHC.Types.Literal + Lit lit | debugIsOn, not (isLitRubbish lit) + -> pprPanic "Non-rubbish lit in app head" (ppr lit) + | otherwise + -> True + + _ -> False + + id_app_is_value id args = -- See Note [exprIsHNF for function applications] -- for the specification and examples - case compare (idArity id) (length val_args) of + case compare (idArity id) n_val_args of EQ | is_con id -> -- Saturated app of a DataCon/CONLIKE Id case mb_str_marks id of Just str_marks -> -- with strict fields; see (SFC1) of Note [Strict fields in Core] - assert (val_args `equalLength` str_marks) $ - fields_hnf str_marks + args_hnf str_marks Nothing -> -- without strict fields: like PAP - args_hnf -- NB: CONLIKEs are lazy! + args_hnf notCBV -- NB: CONLIKEs are lazy! - GT -> -- PAP: Check unlifted val_args - args_hnf + GT -> -- PAP: Check unlifted args + args_hnf notCBV _ -> False where - -- Saturated, Strict DataCon: Check unlifted val_args and strict fields - fields_hnf str_marks = all3Prefix check_field val_arg_tys str_marks val_args - - -- PAP: Check unlifted val_args - args_hnf = all2Prefix check_arg val_arg_tys val_args - fun_ty = idType id - val_arg_tys = mapMaybe anonPiTyBinderType_maybe (collectPiTyBinders fun_ty) - -- val_arg_tys = map exprType val_args, but much less costly. - -- The obvious definition regresses T16577 by 30% so we don't do it. - - check_arg a_ty a + n_val_args = valArgCount args + -- Check the args for HNFness. + args_hnf str_marks = relevantAppArgsSatisfy check_arg fun_ty args str_marks + -- * Unlifted args must always be HNF + -- * CBV args (strict fields!) must be HNF for saturated calls, + -- indicated by str_marks + check_arg a_ty a str | mightBeUnliftedType a_ty = is_hnf_like a + | isMarkedStrict str = is_hnf_like a | otherwise = True -- Check unliftedness; for example f (x /# 12#) where f has arity two, -- and the first argument is unboxed. This is not a value! -- But f 34# is a value, so check args for HNFs. -- NB: We check arity (and CONLIKEness) first because it's cheaper -- and we reject quickly on saturated apps. - check_field a_ty str a - | mightBeUnliftedType a_ty = is_hnf_like a - | isMarkedStrict str = is_hnf_like a - | otherwise = True - -- isMarkedStrict: Respect Note [Strict fields in Core] mb_str_marks id | Just dc <- isDataConWorkId_maybe id ===================================== compiler/GHC/CoreToStg/Prep.hs ===================================== @@ -2241,6 +2241,20 @@ decideFloatInfo FIA{fia_levity=lev, fia_demand=dmd, fia_is_hnf=is_hnf, | Lifted <- lev = (LetBound, TopLvlFloatable) -- And these float freely but can't be speculated, hence LetBound +instance Outputable FloatInfoArgs where + ppr FIA{ fia_levity=lev, fia_demand=dmd, fia_is_hnf=hnf, fia_is_triv=triv + , fia_is_string=string, fia_is_dc_worker=dcw, fia_ok_for_spec=ok_spec } + = brackets (pprWithCommas id traits) + where + traits = concat $ + [ [ text "string" | string ] + , [ text "DataCon worker binding" | dcw ] + , [ text "trivial" | triv ] + , [ text "unlifted" | Unlifted <- pure lev ] + , [ text "strict" | isStrUsedDmd dmd ] + , [ if hnf then text "hnf" else if ok_spec then text "ok-for-spec" else empty ] + ] + mkCaseFloat :: Id -> CpeRhs -> FloatingBind mkCaseFloat bndr scrut = -- pprTrace "mkCaseFloat" (ppr bndr <+> ppr (bound,info) @@ -2262,13 +2276,12 @@ mkCaseFloat bndr scrut mkNonRecFloat :: CorePrepEnv -> Levity -> Id -> CpeRhs -> (FloatingBind, Id) mkNonRecFloat env lev bndr rhs = -- pprTrace "mkNonRecFloat" (ppr bndr <+> ppr (bound,info) - -- <+> if is_strict then text "strict" else if is_lifted then text "lazy" else text "unlifted" - -- <+> if ok_for_spec then text "ok-for-spec" else empty - -- <+> if evald then text "evald" else empty + -- $$ ppr float_info_args -- $$ ppr rhs) $ (Float (NonRec bndr' rhs) bound info, bndr') where - !(bound, info) = decideFloatInfo $ (defFloatInfoArgs bndr rhs) + !(bound, info) = decideFloatInfo float_info_args + float_info_args = (defFloatInfoArgs bndr rhs) { fia_levity = lev , fia_is_hnf = is_hnf , fia_ok_for_spec = ok_for_spec ===================================== compiler/GHC/Utils/Misc.hs ===================================== @@ -23,7 +23,7 @@ module GHC.Utils.Misc ( dropWhileEndLE, spanEnd, last2, lastMaybe, onJust, - List.foldl1', foldl2, count, countWhile, all2, any2, all2Prefix, all3Prefix, + List.foldl1', foldl2, count, countWhile, all2, any2, lengthExceeds, lengthIs, lengthIsNot, lengthAtLeast, lengthAtMost, lengthLessThan, @@ -658,36 +658,6 @@ any2 :: (a -> b -> Bool) -> [a] -> [b] -> Bool any2 p (x:xs) (y:ys) = p x y || any2 p xs ys any2 _ _ _ = False -all2Prefix :: forall a b. (a -> b -> Bool) -> [a] -> [b] -> Bool --- ^ `all2Prefix p xs ys` is a fused version of `and $ zipWith2 p xs ys`. --- (It generates good code nonetheless.) --- So if one list is shorter than the other, `p` is assumed to be `True` for the --- suffix. -all2Prefix p = foldr k z - where - k :: a -> ([b] -> Bool) -> [b] -> Bool - k x go ys' = case ys' of - (y:ys'') -> p x y && go ys'' - _ -> True - z :: [b] -> Bool - z _ = True -{-# INLINE all2Prefix #-} - -all3Prefix :: forall a b c. (a -> b -> c -> Bool) -> [a] -> [b] -> [c] -> Bool --- ^ `all3Prefix p xs ys zs` is a fused version of `and $ zipWith3 p xs ys zs`. --- (It generates good code nonetheless.) --- So if one list is shorter than the others, `p` is assumed to be `True` for --- the suffix. -all3Prefix p = foldr k z - where - k :: a -> ([b] -> [c] -> Bool) -> [b] -> [c] -> Bool - k x go ys' zs' = case (ys',zs') of - (y:ys'',z:zs'') -> p x y z && go ys'' zs'' - _ -> False - z :: [b] -> [c] -> Bool - z _ _ = True -{-# INLINE all3Prefix #-} - -- Count the number of times a predicate is true count :: (a -> Bool) -> [a] -> Int ===================================== testsuite/tests/simplCore/should_compile/T25423.hs ===================================== @@ -0,0 +1,8 @@ +{-# LANGUAGE BangPatterns #-} +{-# LANGUAGE MagicHash #-} +{-# LANGUAGE UnboxedTuples #-} + +module T25423 where + +f :: Int -> Int -> (# (# Int, Int #), (# Int, Int #) #) +f x y = let !p = (# x, y #) in (# p, p #) ===================================== testsuite/tests/simplCore/should_compile/T25423.stderr ===================================== @@ -0,0 +1,41 @@ + +==================== Tidy Core ==================== +Result size of Tidy Core = {terms: 24, types: 75, coercions: 0, joins: 0/1} + +-- RHS size: {terms: 9, types: 39, coercions: 0, joins: 0/1} +f :: Int -> Int -> (# (# Int, Int #), (# Int, Int #) #) +[GblId, Arity=2, Str=, Cpr=1(1, 1), Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=2,unsat_ok=True,boring_ok=True)}] +f = \ (x :: Int) (y :: Int) -> + let { + p :: (# Int, Int #) + [LclId, Unf=OtherCon []] + p = (# x, y #) } in + (# p, p #) + +-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0} +T25423.$trModule4 :: GHC.Prim.Addr# +[GblId, Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 20 0}] +T25423.$trModule4 = "main"# + +-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0} +T25423.$trModule3 :: GHC.Types.TrName +[GblId, Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 10}] +T25423.$trModule3 = GHC.Types.TrNameS T25423.$trModule4 + +-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0} +T25423.$trModule2 :: GHC.Prim.Addr# +[GblId, Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 30 0}] +T25423.$trModule2 = "T25423"# + +-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0} +T25423.$trModule1 :: GHC.Types.TrName +[GblId, Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 10}] +T25423.$trModule1 = GHC.Types.TrNameS T25423.$trModule2 + +-- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0} +T25423.$trModule :: GHC.Types.Module +[GblId, Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 10}] +T25423.$trModule = GHC.Types.Module T25423.$trModule3 T25423.$trModule1 + + + ===================================== testsuite/tests/simplCore/should_compile/all.T ===================================== @@ -532,3 +532,4 @@ test('T24725a', [ grep_errmsg(r'testedRule')], compile, ['-O -ddump-rule-firings test('T25033', normal, compile, ['-O']) test('T25160', normal, compile, ['-O -ddump-rules']) test('T25197', [req_th, extra_files(["T25197_TH.hs"]), only_ways(['optasm'])], multimod_compile, ['T25197', '-O2 -v0']) +test('T25423', [ grep_errmsg(r'let') ], compile, ['-O -ddump-simpl -dsuppress-uniques']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/41e98722c118da4dbdf480af76f4e2d7f24e106d...742e886d8cad589a336ae010010210977619e6f4 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/41e98722c118da4dbdf480af76f4e2d7f24e106d...742e886d8cad589a336ae010010210977619e6f4 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 17:30:48 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Tue, 03 Dec 2024 12:30:48 -0500 Subject: =?UTF-8?Q?[Git][ghc/ghc][wip/andreask/spec=5Fchangelog]_Document?= =?UTF-8?Q?_-fmax-forced-spec-args=3D=E2=9F=A8n=E2=9F=A9_in_the_9.12_change?= =?UTF-8?Q?log.?= Message-ID: <674f404832b80_a8c57c52074109935@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/spec_changelog at Glasgow Haskell Compiler / GHC Commits: e2d2645c by Andreas Klebinger at 2024-12-03T18:11:04+01:00 Document -fmax-forced-spec-args=⟨n⟩ in the 9.12 changelog. Fixes #25544 - - - - - 1 changed file: - docs/users_guide/9.12.1-notes.rst Changes: ===================================== docs/users_guide/9.12.1-notes.rst ===================================== @@ -131,6 +131,15 @@ Compiler specialization rules was added. It was actually added ghc-9.10.1 already but mistakenly not mentioned in the 9.10.1 changelog. +- A new flag :ghc-flag:`-fmax-forced-spec-args=⟨n⟩` has been added. When a function + with a SPEC argument is specialized GHC now checks the number of arguments the + resulting function takes. + If the specialized version takes less than `max-forced-spec-args` arguments it is + specialized. Otherwise GHC will not specialize the function and emit a warning. + + This avoids edge cases where a SPEC keyword could result in functions being + specialized to large static data resulting in functions with thousands of arguments. + - Fixed a bug that caused GHC to panic when using the aarch64 ncg and -fregs-graph on certain programs. (#24941) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e2d2645c01d45149420bb07987b1634e577adc04 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e2d2645c01d45149420bb07987b1634e577adc04 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 17:32:31 2024 From: gitlab at gitlab.haskell.org (Sebastian Graf (@sgraf812)) Date: Tue, 03 Dec 2024 12:32:31 -0500 Subject: [Git][ghc/ghc][wip/hnf-spec] 3 commits: Make exprIsHNF imply exprOkForSpeculation Message-ID: <674f40af7003f_a8c57c2b67c1102de@gitlab.mail> Sebastian Graf pushed to branch wip/hnf-spec at Glasgow Haskell Compiler / GHC Commits: 8b4b6447 by Sebastian Graf at 2024-12-03T18:32:09+01:00 Make exprIsHNF imply exprOkForSpeculation Fixes #23256 because SetLevels and CSE no longer do a reverse binder swap. Furthermore, we no longer need to check for exprIsHNF when exprOkForSpeculation fails. Also fixes #25423. I had a brief look at `-v` in T5642 (which regresses ghc/alloc by 2-3%). It is essentially a benchmark on `Generic` code and uses `exprOkForSpeculation` quite a lot, which now maintains a substitution, explaining the regression. No changes to any intermediate programs. I also had a look at `-v` in T9961 (which regresses ghc/alloc by 1-2%) In T16577 (regresses ghc/alloc by 2-3%) we end up with a marginally smaller program, but the benefit is offset by an additional Simplifier iteration. Metric Decrease: T9872b_defer T9872d Metric Increase: T5642 T9961 T16577 - - - - - 3622268e by Sebastian Graf at 2024-12-03T18:32:09+01:00 SetLevels: Use `exprOkForSpeculation` instead of `exprIsHNF` - - - - - 05287d4f by Sebastian Graf at 2024-12-03T18:32:09+01:00 Prep: Fix outcommented debug pretty-printing logic - - - - - 14 changed files: - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/CSE.hs - compiler/GHC/Core/Opt/CprAnal.hs - compiler/GHC/Core/Opt/SetLevels.hs - compiler/GHC/Core/Opt/WorkWrap/Utils.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/Type.hs - compiler/GHC/Core/Utils.hs - compiler/GHC/CoreToStg/Prep.hs - compiler/GHC/Utils/Misc.hs - + testsuite/tests/simplCore/should_compile/T25423.hs - + testsuite/tests/simplCore/should_compile/T25423.stderr - testsuite/tests/simplCore/should_compile/all.T Changes: ===================================== compiler/GHC/Core/Lint.hs ===================================== @@ -592,7 +592,7 @@ lintLetBind top_lvl rec_flag binder rhs rhs_ty || (isNonRec rec_flag && exprOkForSpeculation rhs) || isDataConWorkId binder || isDataConWrapId binder -- until #17521 is fixed || exprIsTickedString rhs) - (badBndrTyMsg binder (text "unlifted")) + (badUnliftedBndrTyMsg binder rhs) -- Check that if the binder is at the top level and has type Addr#, -- that it is a string literal. @@ -3741,10 +3741,11 @@ mkRhsMsg binder what ty hsep [text "Binder's type:", ppr (idType binder)], hsep [text "Rhs type:", ppr ty]] -badBndrTyMsg :: Id -> SDoc -> SDoc -badBndrTyMsg binder what - = vcat [ text "The type of this binder is" <+> what <> colon <+> ppr binder - , text "Binder's type:" <+> ppr (idType binder) ] +badUnliftedBndrTyMsg :: Id -> CoreExpr -> SDoc +badUnliftedBndrTyMsg bndr rhs + = vcat [ text "The let binder" <+> ppr bndr <+> text "does not satisfy the let-can-float invariant" + , text "Type:" <+> ppr (idType bndr) + , text "RHS:" <+> ppr rhs ] mkNonTopExportedMsg :: Id -> SDoc mkNonTopExportedMsg binder ===================================== compiler/GHC/Core/Opt/CSE.hs ===================================== @@ -30,24 +30,28 @@ import Data.List ( mapAccumL ) Simple common sub-expression ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When we see - x1 = C a b - x2 = C x1 b -we build up a reverse mapping: C a b -> x1 - C x1 b -> x2 + x1 = C a b + x2 = C x1 b +we build up a reverse mapping: + C a b :-> x1 + C x1 b :-> x2 and apply that to the rest of the program. When we then see - y1 = C a b - y2 = C y1 b + y1 = C a b + y2 = C y1 b we replace the C a b with x1. But then we *don't* want to add x1 -> y1 to the mapping. Rather, we want the reverse, y1 -> x1 so that a subsequent binding y2 = C y1 b will get transformed to C x1 b, and then to x2. -So we carry an extra var->var substitution which we apply *before* looking up in the -reverse mapping. +So we carry an extra var->var substitution cs_canon which we apply *before* +looking up in the reverse mapping. We call this step "canonicalisation", because +it makes α-equivalent expressions /syntactically/ equal by choosing the names +consistently. +Note [CSE for bindings] explains both cases (EXTEND and CANONICALISE) in detail. Note [Shadowing in CSE] ~~~~~~~~~~~~~~~~~~~~~~~ @@ -59,7 +63,6 @@ For example, consider Here we must *not* do CSE on the inner x+x! The simplifier used to guarantee no shadowing, but it doesn't any more (it proved too hard), so we clone as we go. -We can simply add clones to the substitution already described. A similar tricky situation is this, with x_123 and y_123 sharing the same unique: @@ -80,18 +83,31 @@ why we have to substitute binders as we go so we will properly get: let x2 = e2 in let foo = x1 +It may be tempting to do the cloning using the same substitution cs_canon that +does the canonicalisation. +We may not do so; see Note [Canonicalisation reverts binder swap transformation]. + +Hence we maintain two substitutions: cs_subst to implement cloning, and cs_canon +to implement the var->var substitution for canonicalising keys prior to lookup +in the reverse mapping. + Note [CSE for bindings] ~~~~~~~~~~~~~~~~~~~~~~~ Let-bindings have two cases, implemented by extendCSEnvWithBinding. -* SUBSTITUTE: applies when the RHS is a variable +* CANONICALISE: applies when the RHS is a variable let x = y in ...(h x).... - Here we want to extend the /substitution/ with x -> y, so that the - (h x) in the body might CSE with an enclosing (let v = h y in ...). - NB: the substitution maps InIds, so we extend the substitution with - a binding for the original InId 'x' + Here we want to extend the canon. substitution cs_canon with x :-> y, so that + the (h x) in the body might CSE with an enclosing (let v = h y in ...). + + NB: cs_canon is distinct from cs_subst, which clones InIds into OutIds in + order to handle Note [Shadowing in CSE]. + cs_canon maps from OutIds to a subset of OutIds, so it uses the same + InScopeSet as cs_subst. + Couldn't we merge cs_subst and cs_canon? In theory yes, in practice no; + see Note [Canonicalisation reverts binder swap transformation]. How can we have a variable on the RHS? Doesn't the simplifier inline them? @@ -102,11 +118,14 @@ Let-bindings have two cases, implemented by extendCSEnvWithBinding. x2 = C x1 b y1 = C a b y2 = C y1 b - Here we CSE y1's rhs to 'x1', and then we must add (y1->x1) to + Here we CSE y1's rhs to 'x1', and then we must add (y1:->x1) to the substitution so that we can CSE the binding for y2. - Second, we use extendCSEnvWithBinding for case expression scrutinees too; - see Note [CSE for case expressions] + see Note [CSE for case expressions]. + + Do note that adding a mapping (x:->y) to cs_canon by itself does not + substitute any occurrence of x in the program. * EXTEND THE REVERSE MAPPING: applies in all other cases @@ -123,23 +142,9 @@ Let-bindings have two cases, implemented by extendCSEnvWithBinding. Here we want to common-up the two uses of (f @ Int) so we can remove one of the case expressions. - See also Note [Corner case for case expressions] for another - reason not to use SUBSTITUTE for all trivial expressions. - -Notice that - - The SUBSTITUTE situation extends the substitution (cs_subst) + - The CANONICALISE situation extends the canon. substitution (cs_canon) - The EXTEND situation extends the reverse mapping (cs_map) -Notice also that in the SUBSTITUTE case we leave behind a binding - x = y -even though we /also/ carry a substitution x -> y. Can we just drop -the binding instead? Well, not at top level! See Note [Top level and -postInlineUnconditionally] in GHC.Core.Opt.Simplify.Utils; and in any -case CSE applies only to the /bindings/ of the program, and we leave -it to the simplifier to propagate effects to the RULES. Finally, it -doesn't seem worth the effort to discard the nested bindings because -the simplifier will do it next. - Note [CSE for case expressions] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Consider @@ -270,31 +275,13 @@ Wrinkles where the unfolding was added by strictness analysis, say. Then CSE goes ahead, so we get bar = foo - and probably use SUBSTITUTE that will make 'bar' dead. But just - possibly not -- see Note [Dealing with ticks]. In that case we might - be left with + or possibly (due to Note [Dealing with ticks]) bar = tick t1 (tick t2 foo) - in which case we would really like to get rid of the stable unfolding - (generated by the strictness analyser, say). + in both cases we would really like to get rid of the stable unfolding so + that the Simplifier inlines the possibly trivial RHS rather than the stable + unfolding, which would in turn keep alive other bindings. - Hence the zapStableUnfolding in cse_bind. Not a big deal, and only - makes a difference when ticks get into the picture. - -Note [Corner case for case expressions] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Here is another reason that we do not use SUBSTITUTE for -all trivial expressions. Consider - case x |> co of (y::Array# Int) { ... } - -We do not want to extend the substitution with (y -> x |> co); since y -is of unlifted type, this would destroy the let-can-float invariant if -(x |> co) was not ok-for-speculation. - -But surely (x |> co) is ok-for-speculation, because it's a trivial -expression, and x's type is also unlifted, presumably. Well, maybe -not if you are using unsafe casts. I actually found a case where we -had - (x :: HValue) |> (UnsafeCo :: HValue ~ Array# Int) + Hence the zapStableUnfolding in cse_bind. Not a big deal. Note [CSE for join points?] ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -371,6 +358,39 @@ To fix this we pass two different cse envs to cse_bind. One we use the cse the r And one we update with the result of cseing the rhs which we then use going forward for the body/rest of the module. +Note [Canonicalisation reverts binder swap transformation] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The CSEnv maintains two substitutions: + + * cs_subst clones every binder so that CSE does not need to worry about + shadowing. See Note [Shadowing in CSE]. + * cs_canon implements the CANONICALISE case of Note [CSE for bindings], but + is never used to actually substitute an expression in the resulting program. + +These substitutions must stay distinct. Consider + + data T a :: UnliftedType where MkT :: !a -> T a + case x of x' { __DEFAULT -> let y = MkT x' in ... } + +Note that the RHS of y satisfies the Note [Core let-can-float invariant] because +x' is a case binder and thus evaluated. +Note that the scrutinee x is trivial; hence case CANONICALISE applies and we +extend cs_canon with + + x' :-> x + +Now, /if/ we were to merge cs_canon into cs_subst, then we would apply this +"reverse binder swap" substitution to the final program and we'd get + + case x of x' { __DEFAULT -> let y = MkT x in ... } + +now `MkT x` is no longer ok-for-spec and the program violates the let-can-float +invariant. This is only temporary, because the next run of the occurrence +analyser will perform a Note [Binder swap] again, however it will trip up +CoreLint nonetheless. +Hence cs_canon is distinct from cs_subst, and the former is only applied before +looking up a canonicalised key in the reverse mapping. + ************************************************************************ * * \section{Common subexpression} @@ -398,7 +418,7 @@ cseBind toplevel env (Rec [(in_id, rhs)]) , let previous' = mkTicks ticks previous out_id' = delayInlining toplevel out_id = -- We have a hit in the recursive-binding cache - (extendCSSubst env1 in_id previous', NonRec out_id' previous') + (env1, NonRec out_id' previous') | otherwise = (extendCSRecEnv env1 out_id rhs'' id_expr', Rec [(zapped_id, rhs')]) @@ -427,7 +447,7 @@ cseBind toplevel env (Rec pairs) -- We use a different env for cse on the rhs and for extendCSEnvWithBinding -- for reasons explain in See Note [Separate envs for let rhs and body] cse_bind :: TopLevelFlag -> CSEnv -> CSEnv -> (InId, InExpr) -> OutId -> (CSEnv, (OutId, OutExpr)) -cse_bind toplevel env_rhs env_body (in_id, in_rhs) out_id +cse_bind toplevel env_rhs env_body (_in_id, in_rhs) out_id | isTopLevel toplevel, exprIsTickedString in_rhs -- See Note [Take care with literal strings] = (env_body', (out_id', in_rhs)) @@ -442,7 +462,7 @@ cse_bind toplevel env_rhs env_body (in_id, in_rhs) out_id | otherwise = (env_body', (out_id'', out_rhs)) where - (env_body', out_id') = extendCSEnvWithBinding env_body in_id out_id out_rhs cse_done + (env_body', out_id') = extendCSEnvWithBinding env_body out_id out_rhs cse_done (cse_done, out_rhs) = try_for_cse env_rhs in_rhs out_id'' | cse_done = zapStableUnfolding $ delayInlining toplevel out_id' @@ -464,28 +484,28 @@ delayInlining top_lvl bndr = bndr extendCSEnvWithBinding - :: CSEnv -- Includes InId->OutId cloning - -> InVar -- Could be a let-bound type - -> OutId -> OutExpr -- Processed binding - -> Bool -- True <=> RHS was CSE'd and is a variable - -- or maybe (Tick t variable) - -> (CSEnv, OutId) -- Final env, final bndr + :: CSEnv -- Includes InId->OutId cloning + -> OutVar -> OutExpr -- Processed binding + -> Bool -- True <=> RHS was CSE'd and is a variable + -- or maybe (Tick t variable) + -> (CSEnv, OutVar) -- Final env, final bndr -- Extend the CSE env with a mapping [rhs -> out-id] --- unless we can instead just substitute [in-id -> rhs] +-- unless we can instead just canonicalise [out-id -> rhs-id] -- -- It's possible for the binder to be a type variable, --- in which case we can just substitute. +-- in which case we can just CANONICALISE. -- See Note [CSE for bindings] -extendCSEnvWithBinding env in_id out_id rhs' cse_done - | not (isId out_id) = (extendCSSubst env in_id rhs', out_id) - | noCSE out_id = (env, out_id) - | use_subst = (extendCSSubst env in_id rhs', out_id) - | cse_done = (env, out_id) - -- See Note [Dealing with ticks] - | otherwise = (extendCSEnv env rhs' id_expr', zapped_id) +extendCSEnvWithBinding env v rhs' cse_done + -- Should we use CANONICALISE or EXTEND? See Note [CSE for bindings] + | not (isId v) = (extendCSCanon env v rhs', v) -- CANONICALISE + | noCSE v = (env, v) + | Var{} <- rhs' = (extendCSCanon env v rhs', v) -- CANONICALISE + | cse_done = (env, v) + -- See Note [Dealing with ticks] + | otherwise = (extendCSEnv env rhs' id_expr', zapped_id) -- EXTEND where - id_expr' = varToCoreExpr out_id - zapped_id = zapIdUsageInfo out_id + id_expr' = varToCoreExpr v + zapped_id = zapIdUsageInfo v -- Putting the Id into the cs_map makes it possible that -- it'll become shared more than it is now, which would -- invalidate (the usage part of) its demand info. @@ -496,11 +516,6 @@ extendCSEnvWithBinding env in_id out_id rhs' cse_done -- it is bad for performance if you don't do late demand -- analysis - -- Should we use SUBSTITUTE or EXTEND? - -- See Note [CSE for bindings] - use_subst | Var {} <- rhs' = True - | otherwise = False - -- | Given a binder `let x = e`, this function -- determines whether we should add `e -> x` to the cs_map noCSE :: InId -> Bool @@ -544,7 +559,7 @@ the original RHS unmodified. This produces: Now 'y' will be discarded as dead code, and we are done. The net effect is that for the y-binding we want to - - Use SUBSTITUTE, by extending the substitution with y :-> x + - Use CANONICALISE, by extending the canon. substitution with y :-> x - but leave the original binding for y undisturbed This is done by cse_bind. I got it wrong the first time (#13367). @@ -587,7 +602,7 @@ with where 'y' is the variable that 'e' maps to. Now consider extendCSEnvWithBinding for the binding for 'x': -* We can't use SUBSTITUTE because those ticks might not be trivial (we +* We can't use CANONICALISE because those ticks might not be trivial (we use tickishIsCode in exprIsTrivial) * We should not use EXTEND, because we definitely don't want to @@ -721,7 +736,7 @@ cseCase env scrut bndr ty alts -- in cse_alt may mean that a dead case binder -- becomes alive, and Lint rejects that (env1, bndr2) = addBinder env bndr1 - (alt_env, bndr3) = extendCSEnvWithBinding env1 bndr bndr2 scrut1 cse_done + (alt_env, bndr3) = extendCSEnvWithBinding env1 bndr2 scrut1 cse_done -- extendCSEnvWithBinding: see Note [CSE for case expressions] con_target :: OutExpr @@ -844,15 +859,21 @@ the case binder is alive; see Note [DataAlt occ info] in GHC.Core.Opt.Simplify. data CSEnv = CS { cs_subst :: Subst -- Maps InBndrs to OutExprs - -- The substitution variables to + -- The cloning substitution; maps variables to -- /trivial/ OutExprs, not arbitrary expressions + , cs_canon :: Subst -- Maps OutBndrs to OutExprs + -- The canonicalising substitution to apply before applying the + -- reverse mapping cs_subst. + -- Maps to /trivial/ OutExprs. + , cs_map :: CoreMap OutExpr -- The "reverse" mapping. -- Maps a OutExpr to a /trivial/ OutExpr - -- The key of cs_map is stripped of all Ticks + -- The key of cs_subst is stripped of all Ticks -- It maps arbitrary expressions to trivial expressions -- representing the same value. E.g @C a b@ to @x1 at . + -- Canonicalise key with cs_canon before looking up in here. , cs_rec_map :: CoreMap OutExpr -- See Note [CSE for recursive bindings] @@ -860,18 +881,18 @@ data CSEnv emptyCSEnv :: CSEnv emptyCSEnv = CS { cs_map = emptyCoreMap, cs_rec_map = emptyCoreMap - , cs_subst = emptySubst } + , cs_subst = emptySubst, cs_canon = emptySubst } lookupCSEnv :: CSEnv -> OutExpr -> Maybe OutExpr -lookupCSEnv (CS { cs_map = csmap }) expr - = lookupCoreMap csmap expr +lookupCSEnv cse expr + = lookupCoreMap (cs_map cse) (canonCSEnv cse expr) -- | @extendCSEnv env e triv_expr@ will replace any occurrence of @e@ with @triv_expr@ going forward. extendCSEnv :: CSEnv -> OutExpr -> OutExpr -> CSEnv extendCSEnv cse expr triv_expr = cse { cs_map = extendCoreMap (cs_map cse) sexpr triv_expr } where - sexpr = stripTicksE tickishFloatable expr + sexpr = canonCSEnv cse $ stripTicksE tickishFloatable expr extendCSRecEnv :: CSEnv -> OutId -> OutExpr -> OutExpr -> CSEnv -- See Note [CSE for recursive bindings] @@ -889,8 +910,17 @@ csEnvSubst = cs_subst lookupSubst :: CSEnv -> Id -> OutExpr lookupSubst (CS { cs_subst = sub}) x = lookupIdSubst sub x -extendCSSubst :: CSEnv -> Id -> CoreExpr -> CSEnv -extendCSSubst cse x rhs = cse { cs_subst = extendSubst (cs_subst cse) x rhs } +extendCSCanon :: CSEnv -> OutVar -> OutExpr -> CSEnv +extendCSCanon cse x y = cse { cs_canon = extendSubst (cs_canon cse) x y' } + where + y' = canonCSEnv cse y -- canonicalise y first! + +canonCSEnv :: CSEnv -> OutExpr -> OutExpr +canonCSEnv cse@(CS { cs_canon = sub }) e = substExpr (sub `setInScope` is) e + where + is = getSubstInScope (cs_subst cse) + -- We do not separately maintain the in-scope set of cs_canon; it's just + -- the one from the substitution used for cloning. -- | Add clones to the substitution to deal with shadowing. See -- Note [Shadowing in CSE] for more details. You should call this whenever ===================================== compiler/GHC/Core/Opt/CprAnal.hs ===================================== @@ -298,14 +298,8 @@ data TermFlag -- Better than using a Bool exprTerminates :: CoreExpr -> TermFlag -- ^ A /very/ simple termination analysis. exprTerminates e - | exprIsHNF e = Terminates | exprOkForSpeculation e = Terminates | otherwise = MightDiverge - -- Annoyingly, we have to check both for HNF and ok-for-spec. - -- * `I# (x# *# 2#)` is ok-for-spec, but not in HNF. Still worth CPR'ing! - -- * `lvl` is an HNF if its unfolding is evaluated - -- (perhaps `lvl = I# 0#` at top-level). But, tiresomely, it is never - -- ok-for-spec due to Note [exprOkForSpeculation and evaluated variables]. cprAnalApp :: AnalEnv -> CoreExpr -> [(CprType, CoreArg)] -> (CprType, CoreExpr) -- Main function that takes care of /nested/ CPR. See Note [Nested CPR] ===================================== compiler/GHC/Core/Opt/SetLevels.hs ===================================== @@ -38,39 +38,58 @@ We do *not* clone top-level bindings, because some of them must not change, but we *do* clone bindings that are heading for the top level -4. Note [Binder-swap during float-out] - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +4. Note [Duplicate evals into float] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In the expression - case x of wild { p -> ...wild... } - we substitute x for wild in the RHS of the case alternatives: - case x of wild { p -> ...x... } - This means that a sub-expression involving x is not "trapped" inside the RHS - (i.e. it can now be floated out, whereas if it mentioned wild it could not). - And it's not inconvenient because we already have a substitution. + case x of wild { p -> ...f wild... } + the sub-expression `f wild` appears "trapped" inside the Case. + (i.e. it cannot be floated out because it mentions wild). + In order to "free" it, we float out the expression + `case x of wild { __DEFAULT -> f wild }`, thus duplicating the eval. For example, consider: f x = letrec go y = case x of z { (a,b) -> ...(expensive z)... } in ... - If we do the reverse binder-swap we get + If we dup the eval we get - f x = letrec go y = case x of z { (a,b) -> ...(expensive x)... } + f x = letrec go y = case x of z { (a,b) -> ...(case x of z { __DEFAULT -> expensive z })... } in ... and now we can float out: - f x = let t = expensive x - in letrec go y = case x of z { (a,b) -> ...(t)... } + f x = let t = case x of wild { __DEFAULT -> expensive wild } + in letrec go y = case x of wild { (a,b) -> ...(t)... } in ... - Now (expensive x) is computed once, rather than once each time around the 'go' loop. - - Note that this is EXACTLY BACKWARDS from the what the simplifier does. - The simplifier tries to get rid of occurrences of x, in favour of wild, - in the hope that there will only be one remaining occurrence of x, namely - the scrutinee of the case, and we can inline it. - + Now (expensive wild) is computed once, rather than once each time around the 'go' loop. + + Implementation: + + 1. When entering an eval `case x of wild { __DEFAULT -> ...}`, remember + that `wild` is the result of evaluating `x`. + + 2. After figuring out the variables over which the expression needs to be + abstracted in order to float (abstractVars), go over these variables + once more to see if `wild` occurs among them. If so, and if the + scrutinee variable `x` is bound at a lower level than the destination + level of the float, then remove `wild` as an abs_var and record the + obligation to eval `x` into `wild` instead (i.e., add a new `eval_vars` + pairing). This is implemented in eliminateAbsCaseBndrs. + Of course, it only makes sense to duplicate the eval if we end up + with a thunk in doing so; hence eliminateAbsCaseBndrs checks whether + the abs_vars become empty after duplicating evals. + + + Historically, we implemented a reverse binder-swap + (see Note [The binder-swap substitution] for the forward direction), + which would float `expensive x` and thus drop the eval on `x`. This caused + trouble for expressions such as + case x of wild { __DEFAULT -> let y = dataToTagLarge# wild in ... } + When the case binder `wild` is swapped for the unevaluated scrutinee + `x`, `dataToTagLarge# x` no longer is ok-for-spec and thus the unlifted let + violates the let-can-float invariant. Hence we duplicate the eval nowadays. -} module GHC.Core.Opt.SetLevels ( @@ -127,6 +146,7 @@ import GHC.Utils.Outputable import GHC.Utils.Panic import Data.Maybe +import Data.Either {- ************************************************************************ @@ -445,21 +465,21 @@ lvlCase :: LevelEnv -- Level of in-scope names/tyvars lvlCase env scrut_fvs scrut' case_bndr ty alts -- See Note [Floating single-alternative cases] | [AnnAlt con@(DataAlt {}) bs body] <- alts - , exprIsHNF (deTagExpr scrut') -- See Note [Check the output scrutinee for exprIsHNF] - , not (isTopLvl dest_lvl) -- Can't have top-level cases - , not (floatTopLvlOnly env) -- Can float anywhere - , ManyTy <- idMult case_bndr -- See Note [Floating linear case] + , exprOkForSpeculation (deTagExpr scrut') -- See Note [Check the output scrutinee for exprOkForSpeculation] + , not (isTopLvl dest_lvl) -- Can't have top-level cases + , not (floatTopLvlOnly env) -- Can float anywhere + , ManyTy <- idMult case_bndr -- See Note [Floating linear case] = -- Always float the case if possible -- Unlike lets we don't insist that it escapes a value lambda do { (env1, (case_bndr' : bs')) <- cloneCaseBndrs env dest_lvl (case_bndr : bs) - ; let rhs_env = extendCaseBndrEnv env1 case_bndr scrut' + ; let rhs_env = rememberEval env1 case_bndr' scrut' ; body' <- lvlMFE rhs_env True body ; let alt' = Alt con (map (stayPut dest_lvl) bs') body' ; return (Case scrut' (TB case_bndr' (FloatMe dest_lvl)) ty' [alt']) } | otherwise -- Stays put - = do { let (alts_env1, [case_bndr']) = substAndLvlBndrs NonRecursive env incd_lvl [case_bndr] - alts_env = extendCaseBndrEnv alts_env1 case_bndr scrut' + = do { let (alts_env1, [case_bndr'@(TB case_bndrr _)]) = substAndLvlBndrs NonRecursive env incd_lvl [case_bndr] + alts_env = rememberEval alts_env1 case_bndrr scrut' ; alts' <- mapM (lvl_alt alts_env) alts ; return (Case scrut' case_bndr' ty' alts') } where @@ -497,17 +517,8 @@ the inner loop. Things to note: - * The test we perform is exprIsHNF, and /not/ exprOkForSpeculation. - - - exprIsHNF catches the key case of an evaluated variable - - - exprOkForSpeculation is /false/ of an evaluated variable; - See Note [exprOkForSpeculation and evaluated variables] in GHC.Core.Utils - So we'd actually miss the key case! - - - Nothing is gained from the extra generality of exprOkForSpeculation - since we only consider floating a case whose single alternative - is a DataAlt K a b -> rhs + * The test we perform is exprOkForSpeculation, because speculating the case is + exactly what we do. * We can't float a case to top level @@ -557,8 +568,8 @@ needed to quantify over some of its free variables (e.g. z), resulting in shadowing and very confusing Core Lint failures. -Note [Check the output scrutinee for exprIsHNF] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Note [Check the output scrutinee for exprOkForSpeculation] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Consider this: case x of y { A -> ....(case y of alts).... @@ -572,10 +583,10 @@ evaluated), but the former is not -- and indeed we can't float the inner case out, at least not unless x is also evaluated at its binding site. See #5453. -That's why we apply exprIsHNF to scrut' and not to scrut. +That's why we apply exprOkForSpeculation to scrut' and not to scrut. See Note [Floating single-alternative cases] for why -we use exprIsHNF in the first place. +we use exprOkForSpeculation in the first place. -} lvlNonTailMFE :: LevelEnv -- Level of in-scope names/tyvars @@ -632,7 +643,7 @@ lvlMFE env strict_ctxt ann_expr | float_is_new_lam || exprIsTopLevelBindable expr expr_ty -- No wrapping needed if the type is lifted, or is a literal string -- or if we are wrapping it in one or more value lambdas - = do { expr1 <- lvlFloatRhs abs_vars dest_lvl rhs_env NonRecursive + = do { expr1 <- lvlFloatRhs abs_vars eval_vars dest_lvl rhs_env NonRecursive is_bot_lam NotJoinPoint ann_expr -- Treat the expr just like a right-hand side ; var <- newLvlVar expr1 NotJoinPoint is_mk_static @@ -653,6 +664,7 @@ lvlMFE env strict_ctxt ann_expr = do { expr1 <- lvlExpr rhs_env ann_expr ; let l1r = incMinorLvlFrom rhs_env float_rhs = mkLams abs_vars_w_lvls $ + flip (foldr (wrapEval l1r)) eval_vars $ Case expr1 (stayPut l1r ubx_bndr) box_ty [Alt DEFAULT [] (App boxing_expr (Var ubx_bndr))] @@ -678,7 +690,8 @@ lvlMFE env strict_ctxt ann_expr -- See Note [Bottoming floats] -- esp Bottoming floats (2) expr_ok_for_spec = exprOkForSpeculation expr - abs_vars = abstractVars dest_lvl env fvs + (abs_vars, eval_vars) = eliminateAbsCaseBndrs dest_lvl env $ + abstractVars dest_lvl env fvs dest_lvl = destLevel env fvs fvs_ty is_function is_bot_lam -- NB: is_bot_lam not is_bot; see (3) in -- Note [Bottoming floats] @@ -701,16 +714,16 @@ lvlMFE env strict_ctxt ann_expr float_me = saves_work || saves_alloc || is_mk_static -- See Note [Saving work] - saves_work = escapes_value_lam -- (a) - && not (exprIsHNF expr) -- (b) - && not float_is_new_lam -- (c) + saves_work = escapes_value_lam -- (a) + && not (exprOkForSpeculation expr) -- (b) + && not float_is_new_lam -- (c) escapes_value_lam = dest_lvl `ltMajLvl` (le_ctxt_lvl env) -- See Note [Saving allocation] and Note [Floating to the top] saves_alloc = isTopLvl dest_lvl && floatConsts env && ( not strict_ctxt -- (a) - || exprIsHNF expr -- (b) + || exprOkForSpeculation expr -- (b) || (is_bot_lam && escapes_value_lam)) -- (c) hasFreeJoin :: LevelEnv -> DVarSet -> Bool @@ -730,14 +743,14 @@ But see also Note [Saving allocation]. So we definitely float an expression out if (a) It will escape a value lambda (escapes_value_lam) -(b) The expression is not a head-normal form (exprIsHNF); see (SW1, SW2). +(b) The expression is not a head-normal form (exprOkForSpeculation); see (SW1, SW2). (c) Floating does not require wrapping it in value lambdas (float_is_new_lam). See (SW3) below Wrinkles: (SW1) Concerning (b) I experimented with using `exprIsCheap` rather than - `exprIsHNF` but the latter seems better, according to nofib + `exprOkForSpeculation` but the latter seems better, according to nofib (`spectral/mate` got 10% worse with exprIsCheap). It's really a bit of a heuristic. @@ -755,7 +768,7 @@ Wrinkles: See !12410 for some data comparing the effect of omitting (b) altogether, This doesn't apply, though, if we float the thing to the top level; see Note [Floating to the top]. Bottom line (data from !12410): adding the - not.exprIsHNF test to `saves_work`: + not.exprOkForSpeculation test to `saves_work`: - Decreases compiler allocations by 0.5% - Occasionally decreases runtime allocation (T12996 -2.5%) - Slightly mixed effect on nofib: (puzzle -10%, mate -5%, cichelli +5%) @@ -1233,7 +1246,7 @@ lvlBind env (AnnNonRec bndr rhs) -- Otherwise we are going to float | null abs_vars = do { -- No type abstraction; clone existing binder - rhs' <- lvlFloatRhs [] dest_lvl env NonRecursive + rhs' <- lvlFloatRhs [] [] dest_lvl env NonRecursive is_bot_lam NotJoinPoint rhs ; (env', [bndr']) <- cloneLetVars NonRecursive env dest_lvl [bndr] ; let bndr2 = annotateBotStr bndr' 0 mb_bot_str @@ -1241,7 +1254,7 @@ lvlBind env (AnnNonRec bndr rhs) | otherwise = do { -- Yes, type abstraction; create a new binder, extend substitution, etc - rhs' <- lvlFloatRhs abs_vars dest_lvl env NonRecursive + rhs' <- lvlFloatRhs abs_vars eval_vars dest_lvl env NonRecursive is_bot_lam NotJoinPoint rhs ; (env', [bndr']) <- newPolyBndrs dest_lvl env abs_vars [bndr] ; let bndr2 = annotateBotStr bndr' n_extra mb_bot_str @@ -1252,7 +1265,8 @@ lvlBind env (AnnNonRec bndr rhs) ty_fvs = tyCoVarsOfType bndr_ty rhs_fvs = freeVarsOf rhs bind_fvs = rhs_fvs `unionDVarSet` dIdFreeVars bndr - abs_vars = abstractVars dest_lvl env bind_fvs + (abs_vars, eval_vars) = eliminateAbsCaseBndrs dest_lvl env $ + abstractVars dest_lvl env bind_fvs dest_lvl = destLevel env bind_fvs ty_fvs (isFunction rhs) is_bot_lam deann_rhs = deAnnotate rhs @@ -1332,9 +1346,8 @@ lvlBind env (AnnRec pairs) -- function in a Rec, and we don't much care what -- happens to it. False is simple! - do_rhs env (_,rhs) = lvlFloatRhs abs_vars dest_lvl env Recursive - is_bot NotJoinPoint - rhs + do_rhs env (_,rhs) = lvlFloatRhs abs_vars eval_vars dest_lvl env Recursive + is_bot NotJoinPoint rhs -- Finding the free vars of the binding group is annoying bind_fvs = ((unionDVarSets [ freeVarsOf rhs | (_, rhs) <- pairs]) @@ -1346,7 +1359,8 @@ lvlBind env (AnnRec pairs) ty_fvs = foldr (unionVarSet . tyCoVarsOfType . idType) emptyVarSet bndrs dest_lvl = destLevel env bind_fvs ty_fvs is_fun is_bot - abs_vars = abstractVars dest_lvl env bind_fvs + (abs_vars, eval_vars) = eliminateAbsCaseBndrs dest_lvl env $ + abstractVars dest_lvl env bind_fvs is_top_bindable = not (any (mightBeUnliftedType . idType) bndrs) -- This mightBeUnliftedType stuff is the same test as in the non-rec case @@ -1396,21 +1410,28 @@ lvlRhs :: LevelEnv -> CoreExprWithFVs -> LvlM LevelledExpr lvlRhs env rec_flag is_bot mb_join_arity expr - = lvlFloatRhs [] (le_ctxt_lvl env) env + = lvlFloatRhs [] [] (le_ctxt_lvl env) env rec_flag is_bot mb_join_arity expr -lvlFloatRhs :: [OutVar] -> Level -> LevelEnv -> RecFlag +wrapEval :: Level -> (OutId, OutId) -> Expr LevelledBndr -> Expr LevelledBndr +-- A bit like GHC.Core.Utils.mkDefaultCase, but `Expr LevelledBndr` +wrapEval dest_lvl (scrut_v, case_bndr) body + = Case (Var scrut_v) (TB case_bndr (StayPut dest_lvl)) + (exprType $ deTagExpr body) [Alt DEFAULT [] body] + +lvlFloatRhs :: [OutVar] -> [(OutId,OutId)] -> Level -> LevelEnv -> RecFlag -> Bool -- Binding is for a bottoming function -> JoinPointHood -> CoreExprWithFVs -> LvlM (Expr LevelledBndr) -- Ignores the le_ctxt_lvl in env; treats dest_lvl as the baseline -lvlFloatRhs abs_vars dest_lvl env rec is_bot mb_join_arity rhs - = do { body' <- if not is_bot -- See Note [Floating from a RHS] +lvlFloatRhs abs_vars eval_vars dest_lvl env rec is_bot mb_join_arity rhs + = do { body1 <- if not is_bot -- See Note [Floating from a RHS] && any isId bndrs then lvlMFE body_env True body else lvlExpr body_env body - ; return (mkLams bndrs' body') } + ; let body2 = foldr (wrapEval dest_lvl) body1 eval_vars + ; return (mkLams bndrs' body2) } where (bndrs, body) | JoinPoint join_arity <- mb_join_arity = collectNAnnBndrs join_arity rhs @@ -1633,14 +1654,20 @@ countFreeIds = nonDetStrictFoldUDFM add 0 . getUniqDSet data LevelEnv = LE { le_switches :: FloatOutSwitches - , le_ctxt_lvl :: Level -- The current level - , le_lvl_env :: VarEnv Level -- Domain is *post-cloned* TyVars and Ids + , le_ctxt_lvl :: Level + -- ^ The current level + , le_lvl_env :: VarEnv (Level, Maybe OutId) + -- ^ Domain is *post-cloned* TyVars and Ids. + -- If `Just scrut`, then the var mapping belongs to a case binder with + -- variable scrutinee `scrut`. + -- This is to support Note [Duplicate evals into float]. -- See Note [le_subst and le_env] - , le_subst :: Subst -- Domain is pre-cloned TyVars and Ids - -- The Id -> CoreExpr in the Subst is ignored - -- (since we want to substitute a LevelledExpr for - -- an Id via le_env) but we do use the Co/TyVar substs + , le_subst :: Subst + -- ^ Domain is pre-cloned TyVars and Ids. + -- The Id -> CoreExpr in the Subst is ignored + -- (since we want to substitute a LevelledExpr for + -- an Id via le_env) but we do use the Co/TyVar substs , le_env :: IdEnv ([OutVar], LevelledExpr) -- Domain is pre-cloned Ids } @@ -1690,10 +1717,10 @@ initialEnv float_lams binds -- to a later one. So here we put all the top-level binders in scope before -- we start, to satisfy the lookupIdSubst invariants (#20200 and #20294) -addLvl :: Level -> VarEnv Level -> OutVar -> VarEnv Level -addLvl dest_lvl env v' = extendVarEnv env v' dest_lvl +addLvl :: Level -> VarEnv (Level, Maybe OutId) -> OutVar -> VarEnv (Level, Maybe OutId) +addLvl dest_lvl env v' = extendVarEnv env v' (dest_lvl, Nothing) -addLvls :: Level -> VarEnv Level -> [OutVar] -> VarEnv Level +addLvls :: Level -> VarEnv (Level, Maybe OutId) -> [OutVar] -> VarEnv (Level, Maybe OutId) addLvls dest_lvl env vs = foldl' (addLvl dest_lvl) env vs floatLams :: LevelEnv -> Maybe Int @@ -1711,20 +1738,19 @@ floatTopLvlOnly le = floatToTopLevelOnly (le_switches le) incMinorLvlFrom :: LevelEnv -> Level incMinorLvlFrom env = incMinorLvl (le_ctxt_lvl env) --- extendCaseBndrEnv adds the mapping case-bndr->scrut-var if it can --- See Note [Binder-swap during float-out] -extendCaseBndrEnv :: LevelEnv - -> Id -- Pre-cloned case binder - -> Expr LevelledBndr -- Post-cloned scrutinee - -> LevelEnv -extendCaseBndrEnv le@(LE { le_subst = subst, le_env = id_env }) +-- rememberEval adds the mapping case-bndr->scrut-var if it can +-- See Note [Duplicate evals into float] +rememberEval :: LevelEnv + -> OutId -- Post-cloned case binder + -> Expr LevelledBndr -- Post-cloned scrutinee + -> LevelEnv +rememberEval le@(LE { le_lvl_env = lvl_env }) case_bndr (Var scrut_var) -- We could use OccurAnal. scrutOkForBinderSwap here, and perhaps -- get a bit more floating. But we didn't in the past and it's -- an unforced change, so I'm leaving it. - = le { le_subst = extendSubstWithVar subst case_bndr scrut_var - , le_env = add_id id_env (case_bndr, scrut_var) } -extendCaseBndrEnv env _ _ = env + = le { le_lvl_env = modifyVarEnv (\(lvl,_) -> (lvl, Just scrut_var)) lvl_env case_bndr } +rememberEval env _ _ = env maxFvLevel :: (Var -> Bool) -> LevelEnv -> DVarSet -> Level maxFvLevel max_me env var_set @@ -1745,8 +1771,8 @@ maxIn max_me (LE { le_lvl_env = lvl_env, le_env = id_env }) in_var lvl where max_out out_var lvl | max_me out_var = case lookupVarEnv lvl_env out_var of - Just lvl' -> maxLvl lvl' lvl - Nothing -> lvl + Just (lvl',_) -> maxLvl lvl' lvl + Nothing -> lvl | otherwise = lvl -- Ignore some vars depending on max_me lookupVar :: LevelEnv -> Id -> LevelledExpr @@ -1765,20 +1791,16 @@ abstractVars :: Level -> LevelEnv -> DVarSet -> [OutVar] -- variable computation and deterministic sort. -- See Note [Unique Determinism] in GHC.Types.Unique for explanation of why -- Uniques are not deterministic. -abstractVars dest_lvl (LE { le_subst = subst, le_lvl_env = lvl_env }) in_fvs +abstractVars dest_lvl le@(LE { le_subst = subst }) in_fvs = -- NB: sortQuantVars might not put duplicates next to each other - map zap $ sortQuantVars $ - filter abstract_me $ - dVarSetElems $ - closeOverKindsDSet $ + map zap $ sortQuantVars $ + filter (abstractMe dest_lvl le) $ + dVarSetElems $ + closeOverKindsDSet $ substDVarSet subst in_fvs -- NB: it's important to call abstract_me only on the OutIds the -- come from substDVarSet (not on fv, which is an InId) where - abstract_me v = case lookupVarEnv lvl_env v of - Just lvl -> dest_lvl `ltLvl` lvl - Nothing -> False - -- We are going to lambda-abstract, so nuke any IdInfo, -- and add the tyvars of the Id (if necessary) zap v | isId v = warnPprTrace (isStableUnfolding (idUnfolding v) || @@ -1787,6 +1809,31 @@ abstractVars dest_lvl (LE { le_subst = subst, le_lvl_env = lvl_env }) in_fvs setIdInfo v vanillaIdInfo | otherwise = v +abstractMe :: Level -> LevelEnv -> Var -> Bool +abstractMe dest_lvl (LE { le_lvl_env = lvl_env }) v + | Just (lvl, _) <- lookupVarEnv lvl_env v + = dest_lvl `ltLvl` lvl + | otherwise + = False + +eliminateAbsCaseBndrs :: Level -> LevelEnv -> [OutVar] -> ([OutVar], [(OutId,OutId)]) +-- Try turning all runtime abs_vars into evals. +-- See Note [Duplicate evals into float] +eliminateAbsCaseBndrs dest_lvl le@(LE { le_lvl_env = lvl_env }) abs_vars + | enables_thunking -- otherwise we do not get to safe work anyway! + = res + | otherwise + = (abs_vars, []) + where + res@(abs_vars',_eval_vars') = partitionEithers (map try_elim abs_vars) + enables_thunking = not (any isRuntimeVar abs_vars') + + try_elim v = case lookupVarEnv lvl_env v of + Just (_, Just scrut_id) + | not (abstractMe dest_lvl le scrut_id) -- would not abstract scrut_id + -> Right (scrut_id, v) -- turn abs_var v into an eval on scrut_id! + _ -> Left v -- retain as an abs_var + type LvlM result = UniqSM result initLvl :: UniqSupply -> UniqSM a -> a @@ -1835,9 +1882,12 @@ newLvlVar :: LevelledExpr -- The RHS of the new binding -> LvlM Id newLvlVar lvld_rhs join_arity_maybe is_mk_static = do { uniq <- getUniqueM - ; return (add_join_info (mk_id uniq rhs_ty)) + ; return (add_evald $ add_join_info $ mk_id uniq rhs_ty) } where + add_evald var + | exprIsHNF de_tagged_rhs = var `setIdUnfolding` evaldUnfolding + | otherwise = var add_join_info var = var `asJoinId_maybe` join_arity_maybe de_tagged_rhs = deTagExpr lvld_rhs rhs_ty = exprType de_tagged_rhs ===================================== compiler/GHC/Core/Opt/WorkWrap/Utils.hs ===================================== @@ -1598,7 +1598,7 @@ move_transit_vars :: [Id] -> (CoreExpr -> CoreExpr -> CoreExpr, CoreExpr) move_transit_vars vars | [var] <- vars , let var_ty = idType var - , isUnliftedType var_ty || exprIsHNF (Var var) + , isUnliftedType var_ty || isEvaldUnfolding (idUnfolding var) -- See Note [No unboxed tuple for single, unlifted transit var] -- * Wrapper: `unbox scrut alt = (case of a -> )` -- * Worker: `tup = a` @@ -1702,9 +1702,7 @@ return unboxed instead of in an unboxed singleton tuple: We want `$wh :: Int# -> [Int]`. We'd get `$wh :: Int# -> (# [Int] #)`. -By considering vars as unlifted that satisfy 'exprIsHNF', we catch (3). -Why not check for 'exprOkForSpeculation'? Quite perplexingly, evaluated vars -are not ok-for-spec, see Note [exprOkForSpeculation and evaluated variables]. +By considering vars as evaluated that have an evald unfolding, we catch (3). For (1) and (2) we would have to look at the term. WW only looks at the type and the CPR signature, so the only way to fix (1) and (2) would be to have a nested termination signature, like in MR !1866. ===================================== compiler/GHC/Core/Subst.hs ===================================== @@ -519,7 +519,9 @@ substUnfolding subst df@(DFunUnfolding { df_bndrs = bndrs, df_args = args }) substUnfolding subst unf@(CoreUnfolding { uf_tmpl = tmpl, uf_src = src }) -- Retain stable unfoldings | not (isStableSource src) -- Zap an unstable unfolding, to save substitution work - = NoUnfolding + = if isEvaldUnfolding unf + then evaldUnfolding + else NoUnfolding | otherwise -- But keep a stable one! = seqExpr new_tmpl `seq` unf { uf_tmpl = new_tmpl } ===================================== compiler/GHC/Core/TyCo/Subst.hs ===================================== @@ -22,6 +22,7 @@ module GHC.Core.TyCo.Subst extendCvSubst, extendCvSubstWithClone, extendTvSubst, extendTvSubstWithClone, extendTvSubstList, extendTvSubstAndInScope, + extendCvSubstAndInScope, extendTCvSubstList, unionSubst, zipTyEnv, zipCoEnv, zipTvSubst, zipCvSubst, @@ -409,6 +410,14 @@ extendTvSubstAndInScope (Subst in_scope ids tenv cenv) tv ty (extendVarEnv tenv tv ty) cenv +extendCvSubstAndInScope :: Subst -> CoVar -> Coercion -> Subst +-- Also extends the in-scope set +extendCvSubstAndInScope (Subst in_scope ids tenv cenv) cv co + = Subst (in_scope `extendInScopeSetSet` tyCoVarsOfCo co) + ids + tenv + (extendVarEnv cenv cv co) + -- | Adds multiple 'TyVar' substitutions to the 'Subst': see also 'extendTvSubst' extendTvSubstList :: Subst -> [(TyVar,Type)] -> Subst extendTvSubstList subst vrs ===================================== compiler/GHC/Core/Type.hs ===================================== @@ -55,7 +55,7 @@ module GHC.Core.Type ( splitForAllForAllTyBinders, splitForAllForAllTyBinder_maybe, splitForAllTyCoVar_maybe, splitForAllTyCoVar, splitForAllTyVar_maybe, splitForAllCoVar_maybe, - splitPiTy_maybe, splitPiTy, splitPiTys, collectPiTyBinders, + splitPiTy_maybe, splitPiTy, splitPiTys, getRuntimeArgTys, mkTyConBindersPreferAnon, mkPiTy, mkPiTys, @@ -290,7 +290,6 @@ import GHC.Utils.Panic import GHC.Data.FastString import GHC.Data.Maybe ( orElse, isJust, firstJust ) -import GHC.List (build) -- $type_classification -- #type_classification# @@ -2056,18 +2055,6 @@ splitPiTys ty = split ty ty [] split orig_ty ty bs | Just ty' <- coreView ty = split orig_ty ty' bs split orig_ty _ bs = (reverse bs, orig_ty) -collectPiTyBinders :: Type -> [PiTyBinder] -collectPiTyBinders ty = build $ \c n -> - let - split (ForAllTy b res) = Named b `c` split res - split (FunTy { ft_af = af, ft_mult = w, ft_arg = arg, ft_res = res }) - = Anon (Scaled w arg) af `c` split res - split ty | Just ty' <- coreView ty = split ty' - split _ = n - in - split ty -{-# INLINE collectPiTyBinders #-} - -- | Extracts a list of run-time arguments from a function type, -- looking through newtypes to the right of arrows. -- ===================================== compiler/GHC/Core/Utils.hs ===================================== @@ -74,9 +74,11 @@ import GHC.Core.Ppr import GHC.Core.FVs( bindFreeVars ) import GHC.Core.DataCon import GHC.Core.Type as Type +import GHC.Core.TyCo.Rep as Type import GHC.Core.Predicate( isCoVarType ) import GHC.Core.FamInstEnv import GHC.Core.TyCo.Compare( eqType, eqTypeX ) +import GHC.Core.TyCo.Subst import GHC.Core.Coercion import GHC.Core.Reduction import GHC.Core.TyCon @@ -1714,7 +1716,8 @@ it's applied only to dictionaries. ----------------------------- -- | To a first approximation, 'exprOkForSpeculation' returns True of --- an expression that is: +-- an expression that is nearly a value (i.e., it implies 'exprIsHNF'). +-- That is, the expression is -- -- * Safe to evaluate even if normal order eval might not -- evaluate the expression at all, and @@ -1740,29 +1743,19 @@ it's applied only to dictionaries. -- But in fact both functions are a bit more conservative than the above, -- in at least the following ways: -- --- * W1: We do not take advantage of already-evaluated lifted variables. --- As a result, 'exprIsHNF' DOES NOT imply 'exprOkForSpeculation'; --- if @y@ is a case-binder of lifted type, then @exprIsHNF y@ is --- 'True', while @exprOkForSpeculation y@ is 'False'. --- See Note [exprOkForSpeculation and evaluated variables] for why. --- * W2: Read-effects on mutable variables are currently also included. +-- * W1: Read-effects on mutable variables are currently also included. -- See Note [Classifying primop effects] "GHC.Builtin.PrimOps". --- * W3: Currently, 'exprOkForSpeculation' always returns 'False' for --- let-expressions. Lets can be stacked deeply, so we just give up. --- In any case, the argument of 'exprOkForSpeculation' is usually in --- a strict context, so any lets will have been floated away. --- -- -- As an example of the considerations in this test, consider: -- -- > let x = case y# +# 1# of { r# -> I# r# } --- > in E +-- > in e -- -- being translated to: -- -- > case y# +# 1# of { r# -> -- > let x = I# r# --- > in E +-- > in e -- > } -- -- We can only do this if the @y# +# 1#@ is ok for speculation: it has no @@ -1811,14 +1804,12 @@ expr_ok fun_ok primop_ok (Tick tickish e) | tickishCounts tickish = False | otherwise = expr_ok fun_ok primop_ok e -expr_ok _ _ (Let {}) = False --- See W3 in the Haddock comment for exprOkForSpeculation +expr_ok fun_ok primop_ok (Let _ e) = expr_ok fun_ok primop_ok e + -- Ignore binds becaue of Note [Core let-can-float invariant] in GHC.Core -expr_ok fun_ok primop_ok (Case scrut bndr _ alts) +expr_ok fun_ok primop_ok (Case scrut _ _ alts) = -- See Note [exprOkForSpeculation: case expressions] expr_ok fun_ok primop_ok scrut - && isUnliftedType (idType bndr) - -- OK to call isUnliftedType: binders always have a fixed RuntimeRep && all (\(Alt _ _ rhs) -> expr_ok fun_ok primop_ok rhs) alts && altsAreExhaustive alts @@ -1847,7 +1838,7 @@ app_ok fun_ok primop_ok fun args | idArity fun > n_val_args -- Partial application: just check passing the arguments is OK - = args_ok + = args_ok notCBV | otherwise = case idDetails fun of @@ -1857,9 +1848,10 @@ app_ok fun_ok primop_ok fun args DataConWorkId dc | isLazyDataConRep dc - -> args_ok + -> args_ok notCBV | otherwise - -> fields_ok (dataConRepStrictness dc) + -> args_ok (dataConRepStrictness dc) + -- See (SFC1) of Note [Strict fields in Core] ClassOpId _ is_terminating_result | is_terminating_result -- See Note [exprOkForSpeculation and type classes] @@ -1881,7 +1873,7 @@ app_ok fun_ok primop_ok fun args -- Often there is a literal divisor, and this -- can get rid of a thunk in an inner loop - | otherwise -> primop_ok op && args_ok + | otherwise -> primop_ok op && args_ok notCBV _other -- Unlifted and terminating types; -- Also c.f. the Var case of exprIsHNF @@ -1898,37 +1890,54 @@ app_ok fun_ok primop_ok fun args -- See (U12) of Note [Implementing unsafeCoerce] | fun `hasKey` unsafeEqualityProofIdKey -> True - | otherwise -> False - -- NB: even in the nullary case, do /not/ check - -- for evaluated-ness of the fun; - -- see Note [exprOkForSpeculation and evaluated variables] + | 0 <- n_val_args + , isEvaldUnfolding (idUnfolding fun) + -> -- pprTrace "yes" (ppr fun) + True + + | otherwise -> -- pprTrace "no" (ppr fun <+> ppr args) + False where fun_ty = idType fun n_val_args = valArgCount args - (arg_tys, _) = splitPiTys fun_ty -- Even if a function call itself is OK, any unlifted - -- args are still evaluated eagerly and must be checked - args_ok = all2Prefix arg_ok arg_tys args - arg_ok :: PiTyVarBinder -> CoreExpr -> Bool - arg_ok (Named _) _ = True -- A type argument - arg_ok (Anon ty _) arg -- A term argument - | definitelyLiftedType (scaledThing ty) - = True -- lifted args are not evaluated eagerly + -- args are still evaluated eagerly and must be checked. + -- Furthermore, for saturated calls, we must check CBV args (strict fields + -- of DataCons!) + args_ok str_marks = relevantAppArgsSatisfy arg_ok fun_ty args str_marks + arg_ok :: Type -> CoreExpr -> StrictnessMark -> Bool + arg_ok ty arg str + | NotMarkedStrict <- str -- iff it's not a CBV arg + , definitelyLiftedType ty -- and its type is lifted + = True -- then the worker app does not eval | otherwise = expr_ok fun_ok primop_ok arg - -- Used for strict DataCon worker arguments - -- See (SFC1) of Note [Strict fields in Core] - fields_ok str_marks = all3Prefix field_ok arg_tys str_marks args - field_ok :: PiTyVarBinder -> StrictnessMark -> CoreExpr -> Bool - field_ok (Named _) _ _ = True - field_ok (Anon ty _) str arg - | NotMarkedStrict <- str -- iff it's a lazy field - , definitelyLiftedType (scaledThing ty) -- and its type is lifted - = True -- then the worker app does not eval - | otherwise - = expr_ok fun_ok primop_ok arg +notCBV :: [StrictnessMark] +notCBV = repeat NotMarkedStrict + +relevantAppArgsSatisfy :: (Type -> CoreExpr -> StrictnessMark -> Bool) -> Type -> [CoreExpr] -> [StrictnessMark] -> Bool +-- This calls the predicate on every non-Type CoreExpr arg. +-- We could just do `exprType arg` for every such arg, but carrying around a +-- substitution is much more efficient. +-- The obvious definition regresses T16577 by 30% so we don't do it. +relevantAppArgsSatisfy p ty = go (mkEmptySubst in_scope) ty + where + in_scope = mkInScopeSet (tyCoVarsOfType ty) + go subst (ForAllTy b res) (Type ty : args) strs + = go (extendTvSubstAndInScope subst (binderVar b) ty) res args strs + go subst (ForAllTy b res) (Coercion co : args) strs + = go (extendCvSubstAndInScope subst (binderVar b) co) res args strs + go subst (FunTy { ft_arg = arg, ft_res = res }) (e : args) (str : strs) + = p (substTy subst arg) e str && go subst res args strs + go subst ty args@(_:_) strs@(_:_) + | Just ty' <- coreView (substTy subst ty) + = go (mkEmptySubst (getSubstInScope subst)) ty' args strs + | otherwise + = pprPanic "Should see more argument tys" (ppr ty $$ ppr subst $$ ppr args $$ ppr (take 10 strs)) + go _ _ _ _ = True +{-# INLINE relevantAppArgsSatisfy #-} ----------------------------- altsAreExhaustive :: [Alt b] -> Bool @@ -1985,6 +1994,8 @@ GHC.Types.Id.Make.mkDictSelId for where this field is initialised. Note [exprOkForSpeculation: case expressions] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SG: I don't get what is so "very special" about this case. I find it very reasonable. + exprOkForSpeculation accepts very special case expressions. Reason: (a ==# b) is ok-for-speculation, but the litEq rules in GHC.Core.Opt.ConstantFold convert it (a ==# 3#) to @@ -1994,39 +2005,22 @@ for excellent reasons described in So, annoyingly, we want that case expression to be ok-for-speculation too. Bother. -But we restrict it sharply: - -* We restrict it to unlifted scrutinees. Consider this: - case x of y { - DEFAULT -> ... (let v::Int# = case y of { True -> e1 - ; False -> e2 } - in ...) ... - - Does the RHS of v satisfy the let-can-float invariant? Previously we said - yes, on the grounds that y is evaluated. But the binder-swap done - by GHC.Core.Opt.SetLevels would transform the inner alternative to - DEFAULT -> ... (let v::Int# = case x of { ... } - in ...) .... - which does /not/ satisfy the let-can-float invariant, because x is - not evaluated. See Note [Binder-swap during float-out] - in GHC.Core.Opt.SetLevels. To avoid this awkwardness it seems simpler - to stick to unlifted scrutinees where the issue does not - arise. - -* We restrict it to exhaustive alternatives. A non-exhaustive - case manifestly isn't ok-for-speculation. for example, - this is a valid program (albeit a slightly dodgy one) - let v = case x of { B -> ...; C -> ... } - in case x of - A -> ... - _ -> ...v...v.... - Should v be considered ok-for-speculation? Its scrutinee may be - evaluated, but the alternatives are incomplete so we should not - evaluate it strictly. - - Now, all this is for lifted types, but it'd be the same for any - finite unlifted type. We don't have many of them, but we might - add unlifted algebraic types in due course. +SG: Again, I don't see why we need to list a specific example. +Clearly, we want to detect as many expressions as ok-for-spec as possible! + +But we restrict it to exhaustive alternatives. A non-exhaustive +case manifestly isn't ok-for-speculation. For example, +this is a valid program (albeit a slightly dodgy one) + let v = case x of { B -> ...; C -> ... } + in case x of + A -> ... + _ -> ...v...v.... +Should v be considered ok-for-speculation? Its scrutinee may be +evaluated, but the alternatives are incomplete so we should not +evaluate it strictly. + +Now, all this is for lifted types, but it'd be the same for any +finite unlifted type. ----- Historical note: #15696: -------- @@ -2073,37 +2067,6 @@ points do the job nicely. ------- End of historical note ------------ -Note [exprOkForSpeculation and evaluated variables] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Consider these examples: - * case x of y { DEFAULT -> ....y.... } - Should 'y' (alone) be considered ok-for-speculation? - - * case x of y { DEFAULT -> ....let z = dataToTagLarge# y... } - Should (dataToTagLarge# y) be considered ok-for-spec? Recall that - dataToTagLarge# :: forall a. a -> Int# - must always evaluate its argument. (See also Note [DataToTag overview].) - -You could argue 'yes', because in the case alternative we know that -'y' is evaluated. But the binder-swap transformation, which is -extremely useful for float-out, changes these expressions to - case x of y { DEFAULT -> ....x.... } - case x of y { DEFAULT -> ....let z = dataToTagLarge# x... } - -And now the expression does not obey the let-can-float invariant! Yikes! -Moreover we really might float (dataToTagLarge# x) outside the case, -and then it really, really doesn't obey the let-can-float invariant. - -The solution is simple: exprOkForSpeculation does not try to take -advantage of the evaluated-ness of (lifted) variables. And it returns -False (always) for primops that perform evaluation. We achieve the latter -by marking the relevant primops as "ThrowsException" or -"ReadWriteEffect"; see also Note [Classifying primop effects] in -GHC.Builtin.PrimOps. - -Note that exprIsHNF /can/ and does take advantage of evaluated-ness; -it doesn't have the trickiness of the let-can-float invariant to worry about. - ************************************************************************ * * exprIsHNF, exprIsConLike @@ -2166,7 +2129,6 @@ exprIsHNFlike is_con is_con_unf e || is_con_unf (idUnfolding v) -- Check the thing's unfolding; it might be bound to a value -- or to a guaranteed-evaluated variable (isEvaldUnfolding) - -- Contrast with Note [exprOkForSpeculation and evaluated variables] -- We don't look through loop breakers here, which is a bit conservative -- but otherwise I worry that if an Id's unfolding is just itself, -- we could get an infinite loop @@ -2185,66 +2147,59 @@ exprIsHNFlike is_con is_con_unf e && is_hnf_like e -- See Note [exprIsHNF Tick] is_hnf_like (Cast e _) = is_hnf_like e - is_hnf_like (App e a) - | isValArg a = app_is_value e [a] - | otherwise = is_hnf_like e is_hnf_like (Let _ e) = is_hnf_like e -- Lazy let(rec)s don't affect us is_hnf_like (Case e b _ as) | Just rhs <- isUnsafeEqualityCase e b as = is_hnf_like rhs - is_hnf_like _ = False - - -- Collect arguments through Casts and Ticks and call id_app_is_value - app_is_value :: CoreExpr -> [CoreArg] -> Bool - app_is_value (Var f) as = id_app_is_value f as - app_is_value (Tick _ f) as = app_is_value f as - app_is_value (Cast f _) as = app_is_value f as - app_is_value (App f a) as | isValArg a = app_is_value f (a:as) - | otherwise = app_is_value f as - app_is_value _ _ = False - - id_app_is_value id val_args = + is_hnf_like e + | (fun, args) <- collectArgs e + = case stripTicksTopE (not . tickishCounts) fun of + Var f -> id_app_is_value f args + + -- 'LitRubbish' is the only literal that can occur in the head of an + -- application and will not be matched by the above case (Var /= Lit). + -- See Note [How a rubbish literal can be the head of an application] + -- in GHC.Types.Literal + Lit lit | debugIsOn, not (isLitRubbish lit) + -> pprPanic "Non-rubbish lit in app head" (ppr lit) + | otherwise + -> True + + _ -> False + + id_app_is_value id args = -- See Note [exprIsHNF for function applications] -- for the specification and examples - case compare (idArity id) (length val_args) of + case compare (idArity id) n_val_args of EQ | is_con id -> -- Saturated app of a DataCon/CONLIKE Id case mb_str_marks id of Just str_marks -> -- with strict fields; see (SFC1) of Note [Strict fields in Core] - assert (val_args `equalLength` str_marks) $ - fields_hnf str_marks + args_hnf str_marks Nothing -> -- without strict fields: like PAP - args_hnf -- NB: CONLIKEs are lazy! + args_hnf notCBV -- NB: CONLIKEs are lazy! - GT -> -- PAP: Check unlifted val_args - args_hnf + GT -> -- PAP: Check unlifted args + args_hnf notCBV _ -> False where - -- Saturated, Strict DataCon: Check unlifted val_args and strict fields - fields_hnf str_marks = all3Prefix check_field val_arg_tys str_marks val_args - - -- PAP: Check unlifted val_args - args_hnf = all2Prefix check_arg val_arg_tys val_args - fun_ty = idType id - val_arg_tys = mapMaybe anonPiTyBinderType_maybe (collectPiTyBinders fun_ty) - -- val_arg_tys = map exprType val_args, but much less costly. - -- The obvious definition regresses T16577 by 30% so we don't do it. - - check_arg a_ty a + n_val_args = valArgCount args + -- Check the args for HNFness. + args_hnf str_marks = relevantAppArgsSatisfy check_arg fun_ty args str_marks + -- * Unlifted args must always be HNF + -- * CBV args (strict fields!) must be HNF for saturated calls, + -- indicated by str_marks + check_arg a_ty a str | mightBeUnliftedType a_ty = is_hnf_like a + | isMarkedStrict str = is_hnf_like a | otherwise = True -- Check unliftedness; for example f (x /# 12#) where f has arity two, -- and the first argument is unboxed. This is not a value! -- But f 34# is a value, so check args for HNFs. -- NB: We check arity (and CONLIKEness) first because it's cheaper -- and we reject quickly on saturated apps. - check_field a_ty str a - | mightBeUnliftedType a_ty = is_hnf_like a - | isMarkedStrict str = is_hnf_like a - | otherwise = True - -- isMarkedStrict: Respect Note [Strict fields in Core] mb_str_marks id | Just dc <- isDataConWorkId_maybe id ===================================== compiler/GHC/CoreToStg/Prep.hs ===================================== @@ -2241,6 +2241,20 @@ decideFloatInfo FIA{fia_levity=lev, fia_demand=dmd, fia_is_hnf=is_hnf, | Lifted <- lev = (LetBound, TopLvlFloatable) -- And these float freely but can't be speculated, hence LetBound +instance Outputable FloatInfoArgs where + ppr FIA{ fia_levity=lev, fia_demand=dmd, fia_is_hnf=hnf, fia_is_triv=triv + , fia_is_string=string, fia_is_dc_worker=dcw, fia_ok_for_spec=ok_spec } + = brackets (pprWithCommas id traits) + where + traits = concat $ + [ [ text "string" | string ] + , [ text "DataCon worker binding" | dcw ] + , [ text "trivial" | triv ] + , [ text "unlifted" | Unlifted <- pure lev ] + , [ text "strict" | isStrUsedDmd dmd ] + , [ if hnf then text "hnf" else if ok_spec then text "ok-for-spec" else empty ] + ] + mkCaseFloat :: Id -> CpeRhs -> FloatingBind mkCaseFloat bndr scrut = -- pprTrace "mkCaseFloat" (ppr bndr <+> ppr (bound,info) @@ -2262,13 +2276,12 @@ mkCaseFloat bndr scrut mkNonRecFloat :: CorePrepEnv -> Levity -> Id -> CpeRhs -> (FloatingBind, Id) mkNonRecFloat env lev bndr rhs = -- pprTrace "mkNonRecFloat" (ppr bndr <+> ppr (bound,info) - -- <+> if is_strict then text "strict" else if is_lifted then text "lazy" else text "unlifted" - -- <+> if ok_for_spec then text "ok-for-spec" else empty - -- <+> if evald then text "evald" else empty + -- $$ ppr float_info_args -- $$ ppr rhs) $ (Float (NonRec bndr' rhs) bound info, bndr') where - !(bound, info) = decideFloatInfo $ (defFloatInfoArgs bndr rhs) + !(bound, info) = decideFloatInfo float_info_args + float_info_args = (defFloatInfoArgs bndr rhs) { fia_levity = lev , fia_is_hnf = is_hnf , fia_ok_for_spec = ok_for_spec ===================================== compiler/GHC/Utils/Misc.hs ===================================== @@ -23,7 +23,7 @@ module GHC.Utils.Misc ( dropWhileEndLE, spanEnd, last2, lastMaybe, onJust, - List.foldl1', foldl2, count, countWhile, all2, any2, all2Prefix, all3Prefix, + List.foldl1', foldl2, count, countWhile, all2, any2, lengthExceeds, lengthIs, lengthIsNot, lengthAtLeast, lengthAtMost, lengthLessThan, @@ -658,36 +658,6 @@ any2 :: (a -> b -> Bool) -> [a] -> [b] -> Bool any2 p (x:xs) (y:ys) = p x y || any2 p xs ys any2 _ _ _ = False -all2Prefix :: forall a b. (a -> b -> Bool) -> [a] -> [b] -> Bool --- ^ `all2Prefix p xs ys` is a fused version of `and $ zipWith2 p xs ys`. --- (It generates good code nonetheless.) --- So if one list is shorter than the other, `p` is assumed to be `True` for the --- suffix. -all2Prefix p = foldr k z - where - k :: a -> ([b] -> Bool) -> [b] -> Bool - k x go ys' = case ys' of - (y:ys'') -> p x y && go ys'' - _ -> True - z :: [b] -> Bool - z _ = True -{-# INLINE all2Prefix #-} - -all3Prefix :: forall a b c. (a -> b -> c -> Bool) -> [a] -> [b] -> [c] -> Bool --- ^ `all3Prefix p xs ys zs` is a fused version of `and $ zipWith3 p xs ys zs`. --- (It generates good code nonetheless.) --- So if one list is shorter than the others, `p` is assumed to be `True` for --- the suffix. -all3Prefix p = foldr k z - where - k :: a -> ([b] -> [c] -> Bool) -> [b] -> [c] -> Bool - k x go ys' zs' = case (ys',zs') of - (y:ys'',z:zs'') -> p x y z && go ys'' zs'' - _ -> False - z :: [b] -> [c] -> Bool - z _ _ = True -{-# INLINE all3Prefix #-} - -- Count the number of times a predicate is true count :: (a -> Bool) -> [a] -> Int ===================================== testsuite/tests/simplCore/should_compile/T25423.hs ===================================== @@ -0,0 +1,8 @@ +{-# LANGUAGE BangPatterns #-} +{-# LANGUAGE MagicHash #-} +{-# LANGUAGE UnboxedTuples #-} + +module T25423 where + +f :: Int -> Int -> (# (# Int, Int #), (# Int, Int #) #) +f x y = let !p = (# x, y #) in (# p, p #) ===================================== testsuite/tests/simplCore/should_compile/T25423.stderr ===================================== @@ -0,0 +1,41 @@ + +==================== Tidy Core ==================== +Result size of Tidy Core = {terms: 24, types: 75, coercions: 0, joins: 0/1} + +-- RHS size: {terms: 9, types: 39, coercions: 0, joins: 0/1} +f :: Int -> Int -> (# (# Int, Int #), (# Int, Int #) #) +[GblId, Arity=2, Str=, Cpr=1(1, 1), Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=2,unsat_ok=True,boring_ok=True)}] +f = \ (x :: Int) (y :: Int) -> + let { + p :: (# Int, Int #) + [LclId, Unf=OtherCon []] + p = (# x, y #) } in + (# p, p #) + +-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0} +T25423.$trModule4 :: GHC.Prim.Addr# +[GblId, Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 20 0}] +T25423.$trModule4 = "main"# + +-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0} +T25423.$trModule3 :: GHC.Types.TrName +[GblId, Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 10}] +T25423.$trModule3 = GHC.Types.TrNameS T25423.$trModule4 + +-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0} +T25423.$trModule2 :: GHC.Prim.Addr# +[GblId, Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 30 0}] +T25423.$trModule2 = "T25423"# + +-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0} +T25423.$trModule1 :: GHC.Types.TrName +[GblId, Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 10}] +T25423.$trModule1 = GHC.Types.TrNameS T25423.$trModule2 + +-- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0} +T25423.$trModule :: GHC.Types.Module +[GblId, Unf=Unf{Src=, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 10}] +T25423.$trModule = GHC.Types.Module T25423.$trModule3 T25423.$trModule1 + + + ===================================== testsuite/tests/simplCore/should_compile/all.T ===================================== @@ -532,3 +532,4 @@ test('T24725a', [ grep_errmsg(r'testedRule')], compile, ['-O -ddump-rule-firings test('T25033', normal, compile, ['-O']) test('T25160', normal, compile, ['-O -ddump-rules']) test('T25197', [req_th, extra_files(["T25197_TH.hs"]), only_ways(['optasm'])], multimod_compile, ['T25197', '-O2 -v0']) +test('T25423', [ grep_errmsg(r'let') ], compile, ['-O -ddump-simpl -dsuppress-uniques']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/742e886d8cad589a336ae010010210977619e6f4...05287d4f18caf8f4f1069978f6e315a5e891b0c5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/742e886d8cad589a336ae010010210977619e6f4...05287d4f18caf8f4f1069978f6e315a5e891b0c5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 18:09:29 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 03 Dec 2024 13:09:29 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 8 commits: Remove TcRnDeprecatedInvisTyArgInConPat mechanism Message-ID: <674f495987e04_a8c5711d224c12348a@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - b2919344 by sheaf at 2024-12-03T13:09:19-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - f50662b6 by Ben Gamari at 2024-12-03T13:09:19-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 19ea46f2 by Ben Gamari at 2024-12-03T13:09:19-05:00 rts/linker: Clarify debug output - - - - - 39d7006e by Simon Hengel at 2024-12-03T13:09:21-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 63f152c2 by Rodrigo Mesquita at 2024-12-03T13:09:22-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 21a67126 by Rodrigo Mesquita at 2024-12-03T13:09:22-05:00 Improve haddock of graphReachabilityCyclic - - - - - eb1d0fec by Rodrigo Mesquita at 2024-12-03T13:09:22-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - 30 changed files: - compiler/GHC.hs - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/SysTools/Process.hs - compiler/GHC/Tc/Errors/Ppr.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Types/Error/Codes.hs - compiler/GHC/Unit/Module/Graph.hs - compiler/GHC/Unit/Module/ModSummary.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/using-warnings.rst - hadrian/src/Hadrian/Utilities.hs - hadrian/src/Rules/CabalReinstall.hs - hadrian/src/Rules/Test.hs - hadrian/src/Settings/Builders/Cabal.hs - hadrian/src/Settings/Builders/Ghc.hs - rts/Linker.c - rts/linker/MMap.c - testsuite/tests/ghc-api/downsweep/OldModLocation.hs - testsuite/tests/ghc-api/downsweep/PartialDownsweep.hs - testsuite/tests/ghci/scripts/ghci024.stdout - testsuite/tests/ghci/scripts/ghci024.stdout-mingw32 - testsuite/tests/rename/should_fail/Or3.hs - testsuite/tests/rename/should_fail/Or3.stderr - testsuite/tests/rename/should_fail/T22478b.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/7bbfb403f258b1dab38771036df3b77238f18dbc...eb1d0fec7fa98dce41af0e812c9ada22ea1a6523 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/7bbfb403f258b1dab38771036df3b77238f18dbc...eb1d0fec7fa98dce41af0e812c9ada22ea1a6523 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 18:41:37 2024 From: gitlab at gitlab.haskell.org (Teo Camarasu (@teo)) Date: Tue, 03 Dec 2024 13:41:37 -0500 Subject: [Git][ghc/ghc][wip/T25262] 133 commits: Add since tag for -fwrite-if-compression in user guide. Message-ID: <674f50e180707_a8c57180d1c01497a9@gitlab.mail> Teo Camarasu pushed to branch wip/T25262 at Glasgow Haskell Compiler / GHC Commits: 1d7cd7fe by Andreas Klebinger at 2024-10-30T19:14:28-04:00 Add since tag for -fwrite-if-compression in user guide. Partial fix for #25395 - - - - - b349fd1b by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: Remove some unused functions - - - - - f859d61c by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: use explicit vertical bar token for ExplicitSum / SumPat - - - - - 721ac00d by Ben Gamari at 2024-10-31T08:37:38-04:00 rts/Disassembler: Fix encoding of BRK_FUN instruction The offset of the CC field was not updated after the encoding change in b85b11994e0130ff2401dd4bbdf52330e0bcf776. Fix this. Fixes #25374. - - - - - 0bc94360 by Alan Zimmerman at 2024-10-31T08:38:15-04:00 EPA: Bring in last EpToken usages For import declarations, NameAnnCommas and NPlusKPat. And remove anchor, it is the same as epaLocationRealSrcSpan. - - - - - 0b11cdc0 by sheaf at 2024-10-31T08:38:55-04:00 Assert that ctEvCoercion is called on an equality Calling 'ctEvCoercion' on non-equality constraints is always incorrect. We add an assertion to this function to detect such cases; for example a type-checking plugin might erroneously do this. - - - - - ea458779 by doyougnu at 2024-11-01T18:11:33-04:00 ghc-internal: strict, unboxed src loc ranges - closes: #20449 - See CLC proposal: #55 - - - - - 778ac793 by Kazuki Okamoto at 2024-11-01T18:12:13-04:00 No haddock markup in doctest line - - - - - cf0deeaf by Andreas Klebinger at 2024-11-02T17:54:52-04:00 Reword -fexpose-overloaded-unfoldings docs. This should make them slightly clearer. Fixes #24844 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 1c21e7d4 by Andreas Klebinger at 2024-11-02T17:55:29-04:00 Compile T25062 simd tests even if we can't run them. Helps avoid them being utterly broken. Fixes #25341 - - - - - 573cad4b by Cheng Shao at 2024-11-02T17:56:04-04:00 Remove unused USE_REPORT_PRELUDE code paths from the tree This patch removes unused `USE_REPORT_PRELUDE` code paths from the tree. They have been present since the first git revision 4fb94ae5e5d632748fa2e6c35e259eccc5a1a3f4, and might have been useful for debugging purposes many years ago, but these code paths are never actually built. Removing these ease maintenance of relevant modules in the future, and also allows us to get rid of `CPP` extension in those modules as a nice byproduct. - - - - - 97f600c6 by Hassan Al-Awwadi at 2024-11-04T15:52:12+00:00 Refactored BooleanFormula to be in line with TTG (#21592) There are two parts to this commit. * We moved the definition of BooleanFormula over to L.H.S.BooleanFormula * We parameterized the BooleanFormula over the pass The GHC specific details of BooleanFormula remain in Ghc.Data.BooleanFormula. Because its parameterized over the pass its no longer a functor or traversable, but we defined bfMap and bfTraverse for the cases where we needed fmap and traverse originally. Most other changes are just churn. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot ------------------------- - - - - - d4fd3580 by Andreas Klebinger at 2024-11-05T07:36:16-05:00 ghc-heap: Fix incomplete selector warnings. Use utility functions instead of selectors to read partial attributes. Part of fixing #25380. - - - - - fdd9f62a by Peter Trommler at 2024-11-05T07:36:51-05:00 PPC NCG: Implement fmin and fmax - - - - - 8e217256 by Mike Pilgrem at 2024-11-07T04:34:20-05:00 Re CLC #293 - Don't specify Data.List.NonEmpty in terms of partial See https://github.com/haskell/core-libraries-committee/issues/293 `List.init` had already been driven out of `tails1` by 21fc180bec93d964a7f4ffdf2429ef6f74b49ab6 but this specification also avoided partial `fromList`, so I preferred it. The `changelog.md` for `base` is updated, with an entry added under `base-4.22.0.0`. - - - - - 346e4cd1 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: copy zip files into the correct directory Fixes #25446 - - - - - bbdbe225 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: Sign .gz bindists too Fixes #25447 - - - - - 0c722e14 by Hécate Kleidukos at 2024-11-07T04:35:37-05:00 hadrian: Enforce the usage of GHC >=9.8.1 for ghci-multi GHC 9.6 no good when it comes to multi-repl stuff, despite being well within the range of n-2 releases for bootstrapping, when the script was adapted to load haddock, in !12851 - - - - - d8f8a1c3 by Sylvain Henry at 2024-11-07T19:27:46-05:00 Handle the special ghc-prim:GHC.Prim module in the compiler Before this patch, some custom hacks were necessary in ghc-prim's Setup.hs to register the GHC.Prim (virtual) module and in Hadrian to generate haddocks properly. In this patch we special-case this module in the compiler itself instead (which it already is, see ghcPrimIface in GHC.Iface.Load). From Cabal/Hadrian's perspective GHC.Prim is now just a normal autogenerated module. This simplification is worthwhile on its own. It was found while looking into the work needed for #24453 which aims to merge ghc-prim, ghc-bignum, and ghc-internal. It's also one step closer to remove ghc-prim's custom setup. - - - - - a55adc8e by Cheng Shao at 2024-11-07T19:28:22-05:00 Clean up obsolete CPP guarded code paths from the tree This patch cleans up obsolete CPP guarded code paths from the tree. The minimum supported boot GHC version is 9.6, and all the pre-9.6 era code paths can be removed. - - - - - 9ede97f3 by Cheng Shao at 2024-11-07T19:28:58-05:00 Remove obsolete executable wrappers from the tree The executable wrappers are handled by hadrian and bindist Makefile. The various .wrapper scripts in the tree are unused since removal of Make build system, so this patch removes them all. - - - - - 7d42b2df by tristian at 2024-11-07T19:29:40-05:00 TcRnDuplicateDecls now suggests to use the DuplicateRecordFields extension. Fixes: !24627 - - - - - e56ed179 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: normalise some versions in callstacks (cherry picked from commit f230e29f30d0c1c566d4dd251807fcab76a2710e) - - - - - a28fc903 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: use -fhide-source-paths to normalise some backpack tests (cherry picked from commit b19de476bc5ce5c7792e8af1354b94a4286a1a13) - - - - - ed16d303 by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite/haddock: strip version identifiers and unit hashes from html tests (cherry picked from commit fbf0889eadc410d43dd5c1657e320634b6738fa5) - - - - - e45e5836 by Zubin Duggal at 2024-11-11T15:16:36+05:30 haddock: oneshot tests can drop files if they share modtimes. Stop this by including the filename in the key. Ideally we would use `ghc -M` output to do a proper toposort Partially addresses #25372 (cherry picked from commit e78c7ef96e395f1ef41f04790aebecd0409b92b9) - - - - - 9104e6eb by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: fix normalisation of T9930fail so that it doesn't get tripped up by ghc executable (ARGV[0]) differences (cherry picked from commit a79a587e025d42d34bb30e115fc5c7cab6c1e030) - - - - - 2c31264a by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: normalise windows file seperators (cherry picked from commit f858875e03b9609656b542aaaaff85ad0a83878a) - - - - - 2807f91b by Zubin Duggal at 2024-11-11T15:21:30+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites - - - - - c02add17 by Ben Gamari at 2024-11-12T01:22:11-05:00 configure: Check version number validity Here we verify the previously informal invariant that stable release version numbers must have three components, preventing costly failed releases. Specifically, the check fails in the following scenarios: * `version=9.13` while `RELEASE=YES` since this would imply a release made from an unstable branch * `version=9.13.0` since unstable versions should only have two components * `version=9.12` since this has the wrong number of version components for a stable branch Fixes #25390. - - - - - 747fd322 by Teo Camarasu at 2024-11-12T01:22:49-05:00 docs: link to #14474 in the template-haskell docs - - - - - 6d96bb62 by Zubin Duggal at 2024-11-12T01:23:25-05:00 testsuite: normalise execvp vs exec differences in process tests Fixes #25431 - - - - - 502e6711 by Torsten Schmits at 2024-11-12T01:24:01-05:00 fix test lint that accumulated while the checks were broken I didn't fix the issues flagged by the #ifdef linter because it were so many that it seemed like the rule has become obsolete. - - - - - 223a4cb5 by Torsten Schmits at 2024-11-12T01:24:02-05:00 test driver: fix file collection for regex linters When a testsuite linter is executed with the `tracked` strategy, the driver runs `git ls-tree` to collect eligible files. This appears to have ceased producing any paths – `ls-tree` restricts its results to the current working directory, which is `testsuite/tests/linters` in this case. As a quick fix, this patch changes the working directory to match expectations. - - - - - 9ad9ac63 by Alan Zimmerman at 2024-11-12T01:24:39-05:00 EPA: Capture location of '_' for wild card type binder And keep track of promotion status in HsExplicitTupleTy, so the round-trip ppr test works for it. Updates Haddock output too, using the PromotionFlag in HsExplicitTupleTy. Closes #25454 - - - - - c37b96fa by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix setImmediate() implementation for Cloudflare Workers This patch fixes setImmediate() implementation for Cloudflare Workers in the wasm backend's js prelude script. Cloudflare Workers doesn't support the MessageChannel API, and we use a setTimeout() based fallback implementation in this case. - - - - - bea8ea4c by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix FinalizationRegistry logic for Cloudflare Workers This patch fixes FinalizationRegistry related logic for Cloudflare Workers in wasm backend js post linker. Cloudflare Workers doesn't support FinalizationRegistry, in this case we use a dummy implementation that doesn't do anything. - - - - - 00d551bf by Cheng Shao at 2024-11-13T08:48:21-05:00 Remove obsolete cross-port script This patch removes the obsolete cross-port script in the tree. The script was based on the legacy Make build system which has been pruned from the tree long ago. For hadrian, proper support for two-stage bootstrapping onto a new unsupported platform is a work in progress in !11444. - - - - - 75a2eae4 by Cheng Shao at 2024-11-13T08:48:58-05:00 hadrian: fix bindist makefile for wasm32-wasi target This patch fixes one incoherent place between bindist makefile and hadrian logic: I forgot to include wasi/wasm32 in OsSupportsGHCi/ArchSupportsGHCi as well. And this results in incorrect settings file generated after installing the bindist, and "Use interpreter"/"Have interpreter" fields incorrectly have "NO" values where they should be "YES" like --info output of in-tree version. - - - - - 0614abef by Alan Zimmerman at 2024-11-13T08:49:34-05:00 EPA: Correctly capture leading semis in decl list Closes #25467 - - - - - 00d58ae1 by Sebastian Graf at 2024-11-13T15:21:23-05:00 DmdAnal: Make `prompt#` lazy (#25439) This applies the same treatment to `prompt#` as for `catch#`. See `Note [Strictness for mask/unmask/catch/prompt]`. Fixes #25439. - - - - - 93233a66 by Ben Gamari at 2024-11-13T15:21:59-05:00 boot: Do not attempt to update config.sub While Apple ARM hardware was new we found that the autoconf scripts included in some boot packages were too old. As a mitigation for this, we introduced logic in the `boot` script to update the `config.sub` with that from the GHC tree. However, this causes submodules which have `config.sub` committted to appear to be dirty. This is a considerable headache. Now since `config.sub` with full platform support is more common we can remove `boot`'s `config.sub` logic. Fixes #19574. - - - - - fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 499cad81 by Teo Camarasu at 2024-12-03T18:40:37+00:00 Add template-haskell-lift and template-haskell-quasiquoter - - - - - 204cb627 by Teo Camarasu at 2024-12-03T18:41:04+00:00 Use th-lift and th-quasiquoter in boot libs - - - - - 30 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - .gitlab/merge_request_templates/Default.md - .gitlab/rel_eng/recompress-all - .gitlab/rel_eng/upload.sh - boot - compile_flags.txt - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/PPC/CodeGen.hs - compiler/GHC/CmmToAsm/PPC/Instr.hs - compiler/GHC/CmmToAsm/PPC/Ppr.hs - compiler/GHC/CmmToAsm/Ppr.hs - compiler/GHC/CmmToAsm/X86/CodeGen.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Core/Class.hs - compiler/GHC/Core/Make.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/CoreToIface.hs - compiler/GHC/Data/BooleanFormula.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ac6d79d80079bdf70d2a3a0c8565818d00054abb...204cb627209c911095b4836abce6a6db757a450f -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ac6d79d80079bdf70d2a3a0c8565818d00054abb...204cb627209c911095b4836abce6a6db757a450f You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 19:59:37 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Tue, 03 Dec 2024 14:59:37 -0500 Subject: [Git][ghc/ghc][wip/andreask/prof_docs] Document `-prof` and non `-prof` code being incompatible. Message-ID: <674f632921edb_a8c571f3b8e81694ec@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/prof_docs at Glasgow Haskell Compiler / GHC Commits: 45e900be by Andreas Klebinger at 2024-12-03T20:39:52+01:00 Document `-prof` and non `-prof` code being incompatible. Fixes #25518. - - - - - 1 changed file: - docs/users_guide/profiling.rst Changes: ===================================== docs/users_guide/profiling.rst ===================================== @@ -361,12 +361,17 @@ Compiler options for profiling :category: To make use of the profiling system *all* modules must be compiled - and linked with the :ghc-flag:`-prof` option. Any ``SCC`` annotations you've + and linked with the :ghc-flag:`-prof` option. Any :pragma:`SCC` annotations you've put in your source will spring to life. - Without a :ghc-flag:`-prof` option, your ``SCC``\ s are ignored; so you can + Without a :ghc-flag:`-prof` option, your :pragma:`SCC`\ s are ignored; so you can compile ``SCC``-laden code without changing it. + Since :ghc-flag:`-prof` affects not just code generation but also memory layout at runtime + code compiled with and without :ghc-flag:`-prof` is fundamentally incompatible. + To get a functional executable a project has to be built + either fully with or fully without :ghc-flag:`-prof`. + .. ghc-flag:: -fno-prof-count-entries :shortdesc: Do not collect entry counts :type: dynamic View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/45e900bee822f258001c24dbcd67b486fdeb964f -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/45e900bee822f258001c24dbcd67b486fdeb964f You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 22:02:48 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Tue, 03 Dec 2024 17:02:48 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/andreask/tagged_maybe Message-ID: <674f800889e9a_350d402a7d94350f0@gitlab.mail> Andreas Klebinger pushed new branch wip/andreask/tagged_maybe at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/andreask/tagged_maybe You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 22:10:00 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 03 Dec 2024 17:10:00 -0500 Subject: [Git][ghc/ghc][master] Remove TcRnDeprecatedInvisTyArgInConPat mechanism Message-ID: <674f81b881f30_350d4020d154381e2@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - 30 changed files: - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Tc/Errors/Ppr.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Types/Error/Codes.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/using-warnings.rst - testsuite/tests/ghci/scripts/ghci024.stdout - testsuite/tests/ghci/scripts/ghci024.stdout-mingw32 - testsuite/tests/rename/should_fail/Or3.hs - testsuite/tests/rename/should_fail/Or3.stderr - testsuite/tests/rename/should_fail/T22478b.hs - testsuite/tests/rename/should_fail/T22478b.stderr - testsuite/tests/typecheck/should_fail/T20443b.hs - testsuite/tests/typecheck/should_fail/T20443b.stderr - testsuite/tests/typecheck/should_fail/T22478c.hs - testsuite/tests/typecheck/should_fail/T22478c.stderr - testsuite/tests/typecheck/should_fail/T23776.stderr - testsuite/tests/typecheck/should_fail/TyAppPat_ExistentialEscape.hs - testsuite/tests/typecheck/should_fail/TyAppPat_NonlinearMultiAppPat.hs - testsuite/tests/typecheck/should_fail/TyAppPat_NonlinearMultiPat.hs - testsuite/tests/typecheck/should_fail/TyAppPat_NonlinearSinglePat.hs - testsuite/tests/typecheck/should_fail/TyAppPat_NonlinearSinglePat.stderr - testsuite/tests/typecheck/should_fail/TyAppPat_Nonmatching.hs - testsuite/tests/typecheck/should_fail/TyAppPat_PatternBinding.hs - testsuite/tests/typecheck/should_fail/TyAppPat_PatternBindingExistential.hs - testsuite/tests/typecheck/should_fail/TyAppPat_TooMany.hs - testsuite/tests/typecheck/should_fail/TyAppPat_TooMany.stderr - testsuite/tests/wcompat-warnings/Template.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5b4774f93de579474d4ebb867234a07d93003f07 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5b4774f93de579474d4ebb867234a07d93003f07 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 22:10:55 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 03 Dec 2024 17:10:55 -0500 Subject: [Git][ghc/ghc][master] Hadrian: use / when making filepaths absolute Message-ID: <674f81efb1e7e_350d4020d118413d1@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 5 changed files: - hadrian/src/Hadrian/Utilities.hs - hadrian/src/Rules/CabalReinstall.hs - hadrian/src/Rules/Test.hs - hadrian/src/Settings/Builders/Cabal.hs - hadrian/src/Settings/Builders/Ghc.hs Changes: ===================================== hadrian/src/Hadrian/Utilities.hs ===================================== @@ -7,7 +7,7 @@ module Hadrian.Utilities ( quote, yesNo, parseYesNo, zeroOne, -- * FilePath manipulation - unifyPath, (-/-), makeRelativeNoSysLink, + unifyPath, (-/-), makeRelativeNoSysLink, makeAbsolute, -- * Accessing Shake's type-indexed map insertExtra, lookupExtra, userSetting, @@ -57,6 +57,7 @@ import qualified System.Directory.Extra as IO import qualified System.Info.Extra as IO import qualified System.IO as IO import System.IO.Error (isPermissionError) +import qualified System.FilePath.Posix as Posix -- | Extract a value from a singleton list, or terminate with an error message -- if the list does not contain exactly one value. @@ -136,7 +137,17 @@ zeroOne True = "1" unifyPath :: FilePath -> FilePath unifyPath = toStandard . normaliseEx +{- Note [Absolute paths and MSYS] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +When dealing with absolute paths in Hadrian, we opt to always use Unix-style +forward slashes for separating paths. +This is because, on Windows, the MSYS toolchain can reliably handle paths such +as /c/foo, while it occasionally falls over on paths of the form C:\foo. +-} + -- | Combine paths with a forward slash regardless of platform. +-- +-- See Note [Absolute paths and MSYS]. (-/-) :: FilePath -> FilePath -> FilePath _ -/- b | isAbsolute b && not (isAbsolute $ tail b) = b "" -/- b = b @@ -146,6 +157,16 @@ a -/- b infixr 6 -/- +-- | Like 'System.Directory.makeAbsolute' from @directory@, but always +-- using forward slashes. +-- +-- See Note [Absolute paths and MSYS]. +makeAbsolute :: FilePath -> IO FilePath +makeAbsolute fp = do + cwd <- IO.getCurrentDirectory + let fp' = cwd -/- fp + return $ Posix.normalise fp' + -- | This is like Posix makeRelative, but assumes no sys links in the input -- paths. This allows the result to start with possibly many "../"s. Input -- paths must both be relative, or be on the same drive ===================================== hadrian/src/Rules/CabalReinstall.hs ===================================== @@ -55,10 +55,10 @@ cabalBuildRules = do distDir <- Context.distDir (vanillaContext Stage1 rts) let rtsIncludeDir = distDir -/- "include" - libdir <- liftIO . IO.makeAbsolute =<< stageLibPath Stage1 - work_dir <- liftIO $ IO.makeAbsolute $ root -/- "stage-cabal" + libdir <- liftIO . makeAbsolute =<< stageLibPath Stage1 + work_dir <- liftIO $ makeAbsolute $ root -/- "stage-cabal" let outputDir = work_dir -/- "bin" - includeDir <- liftIO $ IO.makeAbsolute rtsIncludeDir + includeDir <- liftIO $ makeAbsolute rtsIncludeDir createDirectory outputDir @@ -95,7 +95,7 @@ cabalBuildRules = do -- Just symlink these for now -- TODO: build these with cabal as well forM_ iserv_targets $ \(_bin_pkg,bin_path') -> do - bin_path <- liftIO $ IO.makeAbsolute bin_path' + bin_path <- liftIO $ makeAbsolute bin_path' let orig_filename = takeFileName bin_path output_file = outputDir -/- orig_filename liftIO $ do ===================================== hadrian/src/Rules/Test.hs ===================================== @@ -195,7 +195,7 @@ testRules = do -- get relative path for the given program in the given stage let relative_path_stage s p = programPath =<< programContext s p let make_absolute rel_path = do - abs_path <- liftIO (IO.makeAbsolute rel_path) + abs_path <- liftIO (makeAbsolute rel_path) fixAbsolutePathOnWindows abs_path rel_ghc_pkg <- relative_path_stage Stage1 ghcPkg ===================================== hadrian/src/Settings/Builders/Cabal.hs ===================================== @@ -11,7 +11,6 @@ import Settings.Builders.Common import qualified Settings.Builders.Common as S import Control.Exception (assert) import qualified Data.Set as Set -import System.Directory import Settings.Program (programContext) import GHC.Toolchain (ccLinkProgram, tgtCCompilerLink) import GHC.Toolchain.Program (prgFlags) ===================================== hadrian/src/Settings/Builders/Ghc.hs ===================================== @@ -12,7 +12,6 @@ import Settings.Warnings import qualified Context as Context import Rules.Libffi (libffiName) import qualified Data.Set as Set -import System.Directory import Data.Version.Extra ghcBuilderArgs :: Args View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f813c8d70e41f0d4663d894db2fee593c71a9772 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f813c8d70e41f0d4663d894db2fee593c71a9772 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 22:12:00 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 03 Dec 2024 17:12:00 -0500 Subject: [Git][ghc/ghc][master] 2 commits: rts/linker: Fix out-of-bounds mapping logic Message-ID: <674f82305821f_350d4021a3a4493f4@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - 2 changed files: - rts/Linker.c - rts/linker/MMap.c Changes: ===================================== rts/Linker.c ===================================== @@ -1118,7 +1118,7 @@ freePreloadObjectFile (ObjectCode *oc) */ void freeObjectCode (ObjectCode *oc) { - IF_DEBUG(linker, ocDebugBelch(oc, "start\n")); + IF_DEBUG(linker, ocDebugBelch(oc, "freeObjectCode: start\n")); // Run finalizers if (oc->type == STATIC_OBJECT && ===================================== rts/linker/MMap.c ===================================== @@ -351,12 +351,7 @@ mmapInRegion ( if (result == NULL) { // The mapping failed return NULL; - } else if (result < region->start) { - // Uh oh, we assume that mmap() will only give us a - // an address at or after the requested address. - // Try again. - p = (uint8_t *) result + bytes; - } else if (result < region->end) { + } else if (result >= region->start && result < region->end) { // Success! region->last = (uint8_t *) result + bytes; return result; @@ -364,17 +359,23 @@ mmapInRegion ( // We failed to find a suitable mapping munmap(result, bytes); reportMemoryMap(); - errorBelch("mmapForLinker: failed to mmap() memory below 2Gb; " + errorBelch("mmapForLinker: failed to mmap() memory between %p and %p; " "asked for %zu bytes at %p. " "Try specifying an address with +RTS -xm -RTS", - bytes, p); + region->start, region->end, bytes, p); return NULL; - } + } else if (result < region->start) { + // Uh oh, we assume that mmap() will only give us a + // an address at or after the requested address. + // Try bump forward by a bit and try again. + p = (uint8_t *) p + bytes; + } else if (result >= region->end) { + // mmap() gave us too high an address; wrap around and try again + wrapped = true; + p = region->start; + } - // mmap() gave us too high an address; wrap around and try again munmap(result, bytes); - wrapped = true; - p = region->start; } } View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f813c8d70e41f0d4663d894db2fee593c71a9772...20912f5bac6fe4146172accc1849d9b762eb45e3 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f813c8d70e41f0d4663d894db2fee593c71a9772...20912f5bac6fe4146172accc1849d9b762eb45e3 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 22:12:47 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 03 Dec 2024 17:12:47 -0500 Subject: [Git][ghc/ghc][master] SysTools: Avoid race conditions when processing output (fixes #16450) Message-ID: <674f825f55a2f_350d4020d10452342@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 1 changed file: - compiler/GHC/SysTools/Process.hs Changes: ===================================== compiler/GHC/SysTools/Process.hs ===================================== @@ -22,6 +22,14 @@ import GHC.Utils.CliOption import GHC.Types.SrcLoc ( SrcLoc, mkSrcLoc, mkSrcSpan ) import GHC.Data.FastString +import GHC.IO.Encoding + +#if defined(__IO_MANAGER_WINIO__) +import GHC.IO.SubSystem (()) +import GHC.IO.Handle.Windows (handleToHANDLE) +import GHC.Event.Windows (associateHandle') +#endif + import Control.Concurrent import Data.Char @@ -222,11 +230,21 @@ handleProc pgm phase_name proc = do does_not_exist = throwGhcExceptionIO (InstallationError ("could not execute: " ++ pgm)) +withPipe :: ((Handle, Handle) -> IO a) -> IO a +withPipe = bracket createPipe $ \ (readEnd, writeEnd) -> do + hClose readEnd + hClose writeEnd builderMainLoop :: Logger -> (String -> String) -> FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> IO ExitCode -builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = do +builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = withPipe $ \ (readEnd, writeEnd) -> do + +#if defined(__IO_MANAGER_WINIO__) + return () do + associateHandle' =<< handleToHANDLE readEnd +#endif + chan <- newChan -- We use a mask here rather than a bracket because we want @@ -243,63 +261,59 @@ builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = do -- finish. let procdata = enableProcessJobs - $ (proc pgm real_args) { cwd = mb_cwd - , env = mb_env - , std_in = CreatePipe - , std_out = CreatePipe - , std_err = CreatePipe - } - (Just hStdIn, Just hStdOut, Just hStdErr, hProcess) <- restore $ + $ (proc pgm real_args) { + cwd = mb_cwd + , env = mb_env + , std_in = CreatePipe + + -- We used to treat stdout/stderr as separate streams, but this + -- was racy (see #25517). We now treat them as one stream and + -- that is fine for our use-case. We rely on upstream programs + -- to serialize writes to the two streams appropriately (note + -- that they already need to do that to produce deterministic + -- output when used interactively / on the command-line). + , std_out = UseHandle writeEnd + , std_err = UseHandle writeEnd + } + (Just hStdIn, Nothing, Nothing, hProcess) <- restore $ createProcess_ "builderMainLoop" procdata - let cleanup_handles = do - hClose hStdIn - hClose hStdOut - hClose hStdErr + hClose writeEnd r <- try $ restore $ do - hSetBuffering hStdOut LineBuffering - hSetBuffering hStdErr LineBuffering + getLocaleEncoding >>= hSetEncoding readEnd + hSetNewlineMode readEnd nativeNewlineMode + hSetBuffering readEnd LineBuffering let make_reader_proc h = forkIO $ readerProc chan h filter_fn - bracketOnError (make_reader_proc hStdOut) killThread $ \_ -> - bracketOnError (make_reader_proc hStdErr) killThread $ \_ -> + bracketOnError (make_reader_proc readEnd) killThread $ \_ -> inner hProcess + hClose hStdIn case r of - -- onException Left (SomeException e) -> do terminateProcess hProcess - cleanup_handles throw e - -- cleanup when there was no exception Right s -> do - cleanup_handles return s safely $ \h -> do - -- we don't want to finish until 2 streams have been complete - -- (stdout and stderr) - log_loop chan (2 :: Integer) - -- after that, we wait for the process to finish and return the exit code. + processBuildMessages chan waitForProcess h where - -- t starts at the number of streams we're listening to (2) decrements each - -- time a reader process sends EOF. We are safe from looping forever if a - -- reader thread dies, because they send EOF in a finally handler. - log_loop _ 0 = return () - log_loop chan t = do + processBuildMessages :: Chan BuildMessage -> IO () + processBuildMessages chan = do msg <- readChan chan case msg of BuildMsg msg -> do logInfo logger $ withPprStyle defaultUserStyle msg - log_loop chan t + processBuildMessages chan BuildError loc msg -> do logMsg logger errorDiagnostic (mkSrcSpan loc loc) $ withPprStyle defaultUserStyle msg - log_loop chan t + processBuildMessages chan EOF -> - log_loop chan (t-1) + return () readerProc :: Chan BuildMessage -> Handle -> (String -> String) -> IO () readerProc chan hdl filter_fn = (do str <- hGetContents hdl - loop (linesPlatform (filter_fn str)) Nothing) + loop (lines (filter_fn str)) Nothing) `finally` writeChan chan EOF -- ToDo: check errors more carefully @@ -372,21 +386,3 @@ data BuildMessage = BuildMsg !SDoc | BuildError !SrcLoc !SDoc | EOF - --- Divvy up text stream into lines, taking platform dependent --- line termination into account. -linesPlatform :: String -> [String] -#if !defined(mingw32_HOST_OS) -linesPlatform ls = lines ls -#else -linesPlatform "" = [] -linesPlatform xs = - case lineBreak xs of - (as,xs1) -> as : linesPlatform xs1 - where - lineBreak "" = ("","") - lineBreak ('\r':'\n':xs) = ([],xs) - lineBreak ('\n':xs) = ([],xs) - lineBreak (x:xs) = let (as,bs) = lineBreak xs in (x:as,bs) - -#endif View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f98b3ac03f5e49d62669e52e8ed0fcdec66c596b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f98b3ac03f5e49d62669e52e8ed0fcdec66c596b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 3 22:13:25 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 03 Dec 2024 17:13:25 -0500 Subject: [Git][ghc/ghc][master] 3 commits: mg: Drop unnecessary HasCallStack Message-ID: <674f8285869c1_350d4020d1185261f@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - 9 changed files: - compiler/GHC.hs - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Unit/Module/Graph.hs - compiler/GHC/Unit/Module/ModSummary.hs - testsuite/tests/ghc-api/downsweep/OldModLocation.hs - testsuite/tests/ghc-api/downsweep/PartialDownsweep.hs Changes: ===================================== compiler/GHC.hs ===================================== @@ -74,7 +74,7 @@ module GHC ( compileToCoreModule, compileToCoreSimplified, -- * Inspecting the module structure of the program - ModuleGraph, emptyMG, mapMG, mkModuleGraph, mgModSummaries, + ModuleGraph, emptyMG, mgMap, mkModuleGraph, mgModSummaries, mgLookupModule, ModSummary(..), ms_mod_name, ModLocation(..), pattern ModLocation, @@ -874,7 +874,7 @@ setProgramDynFlags_ invalidate_needed dflags = do -- invalidateModSummaryCache :: GhcMonad m => m () invalidateModSummaryCache = - modifySession $ \h -> h { hsc_mod_graph = mapMG inval (hsc_mod_graph h) } + modifySession $ \h -> h { hsc_mod_graph = mgMap inval (hsc_mod_graph h) } where inval ms = ms { ms_hs_hash = fingerprint0 } ===================================== compiler/GHC/Data/Graph/Directed/Reachability.hs ===================================== @@ -51,6 +51,9 @@ graphReachability (Graph g from to) = do_one v = IS.unions (IS.fromList (g ! v) : mapMaybe (flip IM.lookup reachableGraph) (g ! v)) -- | Construct a 'ReachabilityIndex' from a 'Graph' which may have cycles. +-- If this reachability index is just going to be used once, it may make sense +-- to use 'reachablesG' instead, which will traverse the reachable nodes without +-- constructing the index -- which may be faster. cyclicGraphReachability :: Graph node -> ReachabilityIndex node cyclicGraphReachability (Graph g from to) = ReachabilityIndex{index = reachableGraphCyclic, from_vertex = from, to_vertex = to} ===================================== compiler/GHC/Driver/Env.hs ===================================== @@ -41,6 +41,8 @@ where import GHC.Prelude +import GHC.Builtin.Names ( gHC_PRIM ) + import GHC.Driver.DynFlags import GHC.Driver.Errors ( printOrThrowDiagnostics ) import GHC.Driver.Errors.Types ( GhcMessage ) @@ -70,8 +72,6 @@ import GHC.Types.Name import GHC.Types.Name.Env import GHC.Types.TyThing -import GHC.Builtin.Names ( gHC_PRIM ) - import GHC.Data.Maybe import GHC.Utils.Exception as Ex @@ -274,9 +274,11 @@ hptSomeThingsBelowUs extract include_hi_boot hsc_env uid mn mg = hsc_mod_graph hsc_env in [ thing - | - -- Find each non-hi-boot module below me - (ModNodeKeyWithUid (GWIB { gwib_mod = mod, gwib_isBoot = is_boot }) mod_uid) <- Set.toList (moduleGraphModulesBelow mg uid mn) + -- "Finding each non-hi-boot module below me" maybe could be cached in the module + -- graph to avoid filtering the boots out of the transitive closure out + -- every time this is called + | (ModNodeKeyWithUid (GWIB { gwib_mod = mod, gwib_isBoot = is_boot }) mod_uid) + <- Set.toList (moduleGraphModulesBelow mg uid mn) , include_hi_boot || (is_boot == NotBoot) -- unsavoury: when compiling the base package with --make, we ===================================== compiler/GHC/Driver/Main.hs ===================================== @@ -1453,7 +1453,7 @@ oneShotMsg logger recomp = batchMsg :: Messager batchMsg = batchMsgWith (\_ _ _ _ -> empty) batchMultiMsg :: Messager -batchMultiMsg = batchMsgWith (\_ _ _ node -> brackets (ppr (moduleGraphNodeUnitId node))) +batchMultiMsg = batchMsgWith (\_ _ _ node -> brackets (ppr (mgNodeUnitId node))) batchMsgWith :: (HscEnv -> (Int, Int) -> RecompileRequired -> ModuleGraphNode -> SDoc) -> Messager batchMsgWith extra hsc_env_start mod_index recomp node = @@ -1469,7 +1469,7 @@ batchMsgWith extra hsc_env_start mod_index recomp node = LinkNode {} -> "Linking" InstantiationNode {} -> "Instantiating" ModuleNode {} -> "Compiling" - hsc_env = hscSetActiveUnitId (moduleGraphNodeUnitId node) hsc_env_start + hsc_env = hscSetActiveUnitId (mgNodeUnitId node) hsc_env_start dflags = hsc_dflags hsc_env logger = hsc_logger hsc_env state = hsc_units hsc_env ===================================== compiler/GHC/Driver/Make.hs ===================================== @@ -250,11 +250,9 @@ depanalPartial diag_wrapper msg excluded_mods allow_dup_roots = do -- cached finder data. liftIO $ flushFinderCaches (hsc_FC hsc_env) (hsc_unit_env hsc_env) - (errs, graph_nodes) <- liftIO $ downsweep + (errs, mod_graph) <- liftIO $ downsweep hsc_env diag_wrapper msg (mgModSummaries old_graph) excluded_mods allow_dup_roots - let - mod_graph = mkModuleGraph graph_nodes return (unionManyMessages errs, mod_graph) -- | Collect the instantiations of dependencies to create 'InstantiationNode' work graph nodes. @@ -289,7 +287,7 @@ linkNodes summaries uid hue = ofile = outputFile_ dflags unit_nodes :: [NodeKey] - unit_nodes = map mkNodeKey (filter ((== uid) . moduleGraphNodeUnitId) summaries) + unit_nodes = map mkNodeKey (filter ((== uid) . mgNodeUnitId) summaries) -- Issue a warning for the confusing case where the user -- said '-o foo' but we're not going to do any linking. -- We attempt linking if either (a) one of the modules is @@ -632,13 +630,18 @@ createBuildPlan mod_graph maybe_top_mod = -- An environment mapping a module to its hs-boot file and all nodes on the path between the two, if one exists boot_modules = mkModuleEnv - [ (ms_mod ms, (m, boot_path (ms_mod_name ms) (ms_unitid ms))) | m@(ModuleNode _ ms) <- (mgModSummaries' mod_graph), isBootSummary ms == IsBoot] + [ (ms_mod ms, (m, boot_path (ms_mod_name ms) (ms_unitid ms))) + | m@(ModuleNode _ ms) <- mgModSummaries' mod_graph + , isBootSummary ms == IsBoot] select_boot_modules :: [ModuleGraphNode] -> [ModuleGraphNode] select_boot_modules = mapMaybe (fmap fst . get_boot_module) get_boot_module :: ModuleGraphNode -> Maybe (ModuleGraphNode, [ModuleGraphNode]) - get_boot_module m = case m of ModuleNode _ ms | HsSrcFile <- ms_hsc_src ms -> lookupModuleEnv boot_modules (ms_mod ms); _ -> Nothing + get_boot_module (ModuleNode _ ms) + | HsSrcFile <- ms_hsc_src ms + = lookupModuleEnv boot_modules (ms_mod ms) + get_boot_module _ = Nothing -- Any cycles should be resolved now collapseSCC :: [SCC ModuleGraphNode] -> Either [ModuleGraphNode] [(Either ModuleGraphNode ModuleGraphNodeWithBootFile)] @@ -668,8 +671,8 @@ createBuildPlan mod_graph maybe_top_mod = in - assertPpr (sum (map countMods build_plan) == length (mgModSummaries' mod_graph)) - (vcat [text "Build plan missing nodes:", (text "PLAN:" <+> ppr (sum (map countMods build_plan))), (text "GRAPH:" <+> ppr (length (mgModSummaries' mod_graph )))]) + assertPpr (sum (map countMods build_plan) == lengthMG mod_graph) + (vcat [text "Build plan missing nodes:", (text "PLAN:" <+> ppr (sum (map countMods build_plan))), (text "GRAPH:" <+> ppr (lengthMG mod_graph))]) build_plan mkWorkerLimit :: DynFlags -> IO WorkerLimit @@ -1142,7 +1145,7 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do !build_map <- getBuildMap hug_var <- gets hug_var -- 1. Get the direct dependencies of this module - let direct_deps = nodeDependencies False mod + let direct_deps = mgNodeDependencies False mod -- It's really important to force build_deps, or the whole buildMap is retained, -- which would retain all the result variables, preventing us from collecting them -- after they are no longer used. @@ -1150,14 +1153,14 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do let !build_action = case mod of InstantiationNode uid iu -> do - withCurrentUnit (moduleGraphNodeUnitId mod) $ do + withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps executeInstantiationNode mod_idx n_mods hug uid iu return (Nothing, deps) ModuleNode _build_deps ms -> let !old_hmi = M.lookup (msKey ms) old_hpt rehydrate_mods = mapMaybe nodeKeyModName <$> rehydrate_nodes - in withCurrentUnit (moduleGraphNodeUnitId mod) $ do + in withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps hmi <- executeCompileNode mod_idx n_mods old_hmi hug rehydrate_mods ms -- Write the HMI to an external cache (if one exists) @@ -1166,9 +1169,9 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do -- This global MVar is incrementally modified in order to avoid having to -- recreate the HPT before compiling each module which leads to a quadratic amount of work. liftIO $ modifyMVar_ hug_var (return . addHomeModInfoToHug hmi) - return (Just hmi, addToModuleNameSet (moduleGraphNodeUnitId mod) (ms_mod_name ms) deps ) + return (Just hmi, addToModuleNameSet (mgNodeUnitId mod) (ms_mod_name ms) deps ) LinkNode _nks uid -> do - withCurrentUnit (moduleGraphNodeUnitId mod) $ do + withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps executeLinkNode hug (mod_idx, n_mods) uid direct_deps return (Nothing, deps) @@ -1570,7 +1573,7 @@ downsweep :: HscEnv -> Bool -- True <=> allow multiple targets to have -- the same module name; this is -- very useful for ghc -M - -> IO ([DriverMessages], [ModuleGraphNode]) + -> IO ([DriverMessages], ModuleGraph) -- The non-error elements of the returned list all have distinct -- (Modules, IsBoot) identifiers, unless the Bool is true in -- which case there can be repeats @@ -1595,7 +1598,7 @@ downsweep_imports :: HscEnv -> [ModuleName] -> Bool -> ([(UnitId, DriverMessages)], [ModSummary]) - -> IO ([DriverMessages], [ModuleGraphNode]) + -> IO ([DriverMessages], ModuleGraph) downsweep_imports hsc_env old_summaries excl_mods allow_dup_roots (root_errs, rootSummariesOk) = do let root_map = mkRootMap rootSummariesOk @@ -1620,7 +1623,7 @@ downsweep_imports hsc_env old_summaries excl_mods allow_dup_roots (root_errs, ro th_enabled_nodes <- enableCodeGenForTH logger tmpfs unit_env all_nodes if null all_root_errs then return (all_errs, th_enabled_nodes) - else pure $ (all_root_errs, []) + else pure $ (all_root_errs, emptyMG) where -- Dependencies arising on a unit (backpack and module linking deps) unitModuleNodes :: [ModuleGraphNode] -> UnitId -> HomeUnitEnv -> [Either (Messages DriverMessage) ModuleGraphNode] @@ -1870,7 +1873,7 @@ enableCodeGenForTH -> TmpFs -> UnitEnv -> [ModuleGraphNode] - -> IO [ModuleGraphNode] + -> IO ModuleGraph enableCodeGenForTH logger tmpfs unit_env = enableCodeGenWhen logger tmpfs TFL_CurrentModule TFL_GhcSession unit_env @@ -1893,19 +1896,19 @@ enableCodeGenWhen -> TempFileLifetime -> UnitEnv -> [ModuleGraphNode] - -> IO [ModuleGraphNode] -enableCodeGenWhen logger tmpfs staticLife dynLife unit_env mod_graph = - mapM enable_code_gen mod_graph + -> IO ModuleGraph +enableCodeGenWhen logger tmpfs staticLife dynLife unit_env mod_graph = do + mgMapM enable_code_gen mg where defaultBackendOf ms = platformDefaultBackend (targetPlatform $ ue_unitFlags (ms_unitid ms) unit_env) - enable_code_gen :: ModuleGraphNode -> IO ModuleGraphNode - enable_code_gen n@(ModuleNode deps ms) + enable_code_gen :: ModSummary -> IO ModSummary + enable_code_gen ms | ModSummary { ms_location = ms_location , ms_hsc_src = HsSrcFile , ms_hspp_opts = dflags } <- ms - , Just enable_spec <- mkNodeKey n `Map.lookup` needs_codegen_map = + , Just enable_spec <- needs_codegen_map (NodeKey_Module (msKey ms)) = if | nocode_enable ms -> do let new_temp_file suf dynsuf = do tn <- newTempName logger tmpfs (tmpDir dflags) staticLife suf @@ -1937,7 +1940,7 @@ enableCodeGenWhen logger tmpfs staticLife dynLife unit_env mod_graph = , ms_hspp_opts = updOptLevel 0 $ new_dflags } -- Recursive call to catch the other cases - enable_code_gen (ModuleNode deps ms') + enable_code_gen ms' -- If -fprefer-byte-code then satisfy dependency by enabling bytecode (if normal object not enough) -- we only get to this case if the default backend is already generating object files, but we need dynamic @@ -1947,21 +1950,21 @@ enableCodeGenWhen logger tmpfs staticLife dynLife unit_env mod_graph = { ms_hspp_opts = gopt_set (ms_hspp_opts ms) Opt_ByteCodeAndObjectCode } -- Recursive call to catch the other cases - enable_code_gen (ModuleNode deps ms') + enable_code_gen ms' | dynamic_too_enable enable_spec ms -> do let ms' = ms { ms_hspp_opts = gopt_set (ms_hspp_opts ms) Opt_BuildDynamicToo } -- Recursive call to catch the other cases - enable_code_gen (ModuleNode deps ms') + enable_code_gen ms' | ext_interp_enable ms -> do let ms' = ms { ms_hspp_opts = gopt_set (ms_hspp_opts ms) Opt_ExternalInterpreter } -- Recursive call to catch the other cases - enable_code_gen (ModuleNode deps ms') + enable_code_gen ms' - | otherwise -> return n + | otherwise -> return ms enable_code_gen ms = return ms @@ -2018,23 +2021,23 @@ enableCodeGenWhen logger tmpfs staticLife dynLife unit_env mod_graph = lcl_dflags = ms_hspp_opts ms internalInterpreter = not (gopt Opt_ExternalInterpreter lcl_dflags) - (mg, lookup_node) = moduleGraphNodes False mod_graph - - mk_needed_set roots = Set.fromList $ map (mkNodeKey . node_payload) $ reachablesG mg (map (expectJust "needs_th" . lookup_node) roots) + mg = mkModuleGraph mod_graph - needs_obj_set, needs_bc_set :: Set.Set NodeKey - needs_obj_set = mk_needed_set need_obj_set + needs_obj_set, needs_bc_set :: NodeKey -> Bool + needs_obj_set k = mgQueryMany mg need_obj_set k || k `elem` need_obj_set - needs_bc_set = mk_needed_set need_bc_set + needs_bc_set k = mgQueryMany mg need_bc_set k || k `elem` need_bc_set -- A map which tells us how to enable code generation for a NodeKey - needs_codegen_map :: Map.Map NodeKey CodeGenEnable - needs_codegen_map = + needs_codegen_map :: NodeKey -> Maybe CodeGenEnable + needs_codegen_map nk = -- Another option here would be to just produce object code, rather than both object and -- byte code - Map.unionWith (\_ _ -> EnableByteCodeAndObject) - (Map.fromList $ [(m, EnableObject) | m <- Set.toList needs_obj_set]) - (Map.fromList $ [(m, EnableByteCode) | m <- Set.toList needs_bc_set]) + case (needs_obj_set nk, needs_bc_set nk) of + (True, True) -> Just EnableByteCodeAndObject + (True, False) -> Just EnableObject + (False, True) -> Just EnableByteCode + (False, False) -> Nothing -- The direct dependencies of modules which require object code need_obj_set = @@ -2470,14 +2473,14 @@ cyclicModuleErr mss Just path -> mkPlainErrorMsgEnvelope src_span $ GhcDriverMessage $ DriverModuleGraphCycle path where - src_span = maybe noSrcSpan (mkFileSrcSpan . ms_location) (moduleGraphNodeModSum (head path)) + src_span = maybe noSrcSpan (mkFileSrcSpan . ms_location) (mgNodeModSum (head path)) where graph :: [Node NodeKey ModuleGraphNode] graph = [ DigraphNode { node_payload = ms , node_key = mkNodeKey ms - , node_dependencies = nodeDependencies False ms + , node_dependencies = mgNodeDependencies False ms } | ms <- mss ] ===================================== compiler/GHC/Unit/Module/Graph.hs ===================================== @@ -2,52 +2,106 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE DeriveTraversable #-} +-- | A module graph should be constructed once and never change from there onwards. +-- +-- The only operations should be for building the 'ModuleGraph' +-- (once and for all -- no update-like/insert-like functions) +-- and querying the structure in various ways, e.g. to determine reachability. +-- +-- We should avoid exposing fields like 'mg_mss' since it may be a footgun +-- trying to use the nodes directly... We do still expose it, but it feels like +-- all its use cases would be better served by a more proper ModuleGraph +-- abstraction module GHC.Unit.Module.Graph - ( ModuleGraph - , ModuleGraphNode(..) - , nodeDependencies + ( + -- * Construct a module graph + -- + -- | A module graph should be constructed once by downsweep and never modified. + ModuleGraph , emptyMG , mkModuleGraph - , extendMG - , extendMGInst - , extendMG' - , unionMG - , isTemplateHaskellOrQQNonBoot - , filterToposortToModules - , mapMG + + -- * Nodes in a module graph + -- + -- | The user-facing nodes in a module graph are 'ModuleGraphNode's. + -- There are a few things which we can query out of each 'ModuleGraphNode': + -- + -- - 'mgNodeDependencies' gets the immediate dependencies of this node + -- - 'mgNodeUnitId' returns the 'UnitId' of that node + -- - 'mgNodeModSum' extracts the 'ModSummary' of a node if exists + , ModuleGraphNode(..) + , mgNodeDependencies + , mgNodeModSum + , mgNodeUnitId + + -- * Module graph operations + , lengthMG + + -- ** 'ModSummary' operations + -- + -- | A couple of operations on the module graph allow access to the + -- 'ModSummary's of the modules in it contained. + -- + -- In particular, 'mapMG' and 'mapMGM' allow updating these 'ModSummary's + -- (without changing the 'ModuleGraph' structure itself!). + -- 'mgModSummaries' lists out all 'ModSummary's, and + -- 'mgLookupModule' looks up a 'ModSummary' for a given module. + , mgMap, mgMapM , mgModSummaries - , mgModSummaries' , mgLookupModule - , showModMsg - , moduleGraphNodeModule - , moduleGraphNodeModSum - , moduleGraphModulesBelow + + -- ** Reachability queries + -- + -- | A module graph explains the structure and relationship between the + -- modules being compiled. Often times, this structure is relevant to + -- answer reachability queries -- is X reachable from Y; or, what is the + -- transitive closure of Z? , mgReachable , mgQuery - + , mgQueryMany + + -- ** Other operations + -- + -- | These operations allow more-internal-than-ideal access to the + -- ModuleGraph structure. Ideally, we could restructure the code using + -- these functions to avoid deconstructing/reconstructing the ModuleGraph + -- and instead extend the "proper interface" of the ModuleGraph to achieve + -- what is currently done but through a better abstraction. + , mgModSummaries' , moduleGraphNodes - , SummaryNode - , summaryNodeSummary + , moduleGraphModulesBelow -- needed for 'hptSomeThingsBelowUs', + -- but I think we could be more clever and cache + -- the graph-ixs of boot modules to efficiently + -- filter them out of the returned list. + -- hptInstancesBelow is re-doing that work every + -- time it's called. + , filterToposortToModules + -- * Keys into the 'ModuleGraph' , NodeKey(..) + , mkNodeKey , nodeKeyUnitId , nodeKeyModName , ModNodeKey - , mkNodeKey + , ModNodeKeyWithUid(..) , msKey + -- ** Internal node representation + -- + -- | 'SummaryNode' is the internal representation for each node stored in + -- the graph. It's not immediately clear to me why users do depend on them. + , SummaryNode + , summaryNodeSummary + , summaryNodeKey - , moduleGraphNodeUnitId - - , ModNodeKeyWithUid(..) + -- * Utilities + , showModMsg ) where import GHC.Prelude import GHC.Platform -import qualified GHC.LanguageExtensions as LangExt - import GHC.Data.Maybe import GHC.Data.Graph.Directed import GHC.Data.Graph.Directed.Reachability @@ -73,8 +127,44 @@ import GHC.Linker.Static.Utils import Data.Bifunctor import Data.Function import Data.List (sort) -import GHC.Data.List.SetOps -import GHC.Stack +import Control.Monad + +-- | A '@ModuleGraph@' contains all the nodes from the home package (only). See +-- '@ModuleGraphNode@' for information about the nodes. +-- +-- Modules need to be compiled. hs-boots need to be typechecked before +-- the associated "real" module so modules with {-# SOURCE #-} imports can be +-- built. Instantiations also need to be typechecked to ensure that the module +-- fits the signature. Substantiation typechecking is roughly comparable to the +-- check that the module and its hs-boot agree. +-- +-- The graph is not necessarily stored in topologically-sorted order. Use +-- 'GHC.topSortModuleGraph' and 'GHC.Data.Graph.Directed.flattenSCC' to achieve this. +data ModuleGraph = ModuleGraph + { mg_mss :: [ModuleGraphNode] + , mg_graph :: (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) + -- A cached transitive dependency calculation so that a lot of work is not + -- repeated whenever the transitive dependencies need to be calculated (for example, hptInstances) + } + +-- | Why do we ever need to construct empty graphs? Is it because of one shot mode? +emptyMG :: ModuleGraph +emptyMG = ModuleGraph [] (graphReachability emptyGraph, const Nothing) + +-- | Construct a module graph. This function should be the only entry point for +-- building a 'ModuleGraph', since it is supposed to be built once and never modified. +-- +-- If you ever find the need to build a 'ModuleGraph' iteratively, don't +-- add insert and update functions to the API since they become footguns. +-- Instead, design an API that allows iterative construction without posterior +-- modification, perhaps like what is done for building arrays from mutable +-- arrays. +mkModuleGraph :: [ModuleGraphNode] -> ModuleGraph +mkModuleGraph = foldr (flip extendMG') emptyMG + +-------------------------------------------------------------------------------- +-- * Module Graph Nodes +-------------------------------------------------------------------------------- -- | A '@ModuleGraphNode@' is a node in the '@ModuleGraph@'. -- Edges between nodes mark dependencies arising from module imports @@ -88,16 +178,36 @@ data ModuleGraphNode -- | Link nodes are whether are are creating a linked product (ie executable/shared object etc) for a unit. | LinkNode [NodeKey] UnitId -moduleGraphNodeModule :: ModuleGraphNode -> Maybe ModuleName -moduleGraphNodeModule mgn = ms_mod_name <$> (moduleGraphNodeModSum mgn) +-- | Collect the immediate dependencies of a ModuleGraphNode, +-- optionally avoiding hs-boot dependencies. +-- If the drop_hs_boot_nodes flag is False, and if this is a .hs and there is +-- an equivalent .hs-boot, add a link from the former to the latter. This +-- has the effect of detecting bogus cases where the .hs-boot depends on the +-- .hs, by introducing a cycle. Additionally, it ensures that we will always +-- process the .hs-boot before the .hs, and so the HomePackageTable will always +-- have the most up to date information. +mgNodeDependencies :: Bool -> ModuleGraphNode -> [NodeKey] +mgNodeDependencies drop_hs_boot_nodes = \case + LinkNode deps _uid -> deps + InstantiationNode uid iuid -> + NodeKey_Module . (\mod -> ModNodeKeyWithUid (GWIB mod NotBoot) uid) <$> uniqDSetToList (instUnitHoles iuid) + ModuleNode deps _ms -> + map drop_hs_boot deps + where + -- Drop hs-boot nodes by using HsSrcFile as the key + hs_boot_key | drop_hs_boot_nodes = NotBoot -- is regular mod or signature + | otherwise = IsBoot + + drop_hs_boot (NodeKey_Module (ModNodeKeyWithUid (GWIB mn IsBoot) uid)) = (NodeKey_Module (ModNodeKeyWithUid (GWIB mn hs_boot_key) uid)) + drop_hs_boot x = x -moduleGraphNodeModSum :: ModuleGraphNode -> Maybe ModSummary -moduleGraphNodeModSum (InstantiationNode {}) = Nothing -moduleGraphNodeModSum (LinkNode {}) = Nothing -moduleGraphNodeModSum (ModuleNode _ ms) = Just ms +mgNodeModSum :: ModuleGraphNode -> Maybe ModSummary +mgNodeModSum (InstantiationNode {}) = Nothing +mgNodeModSum (LinkNode {}) = Nothing +mgNodeModSum (ModuleNode _ ms) = Just ms -moduleGraphNodeUnitId :: ModuleGraphNode -> UnitId -moduleGraphNodeUnitId mgn = +mgNodeUnitId :: ModuleGraphNode -> UnitId +mgNodeUnitId mgn = case mgn of InstantiationNode uid _iud -> uid ModuleNode _ ms -> toUnitId (moduleUnit (ms_mod ms)) @@ -115,79 +225,43 @@ instance Eq ModuleGraphNode where instance Ord ModuleGraphNode where compare = compare `on` mkNodeKey -data NodeKey = NodeKey_Unit {-# UNPACK #-} !InstantiatedUnit - | NodeKey_Module {-# UNPACK #-} !ModNodeKeyWithUid - | NodeKey_Link !UnitId - deriving (Eq, Ord) +-------------------------------------------------------------------------------- +-- * Module Graph operations +-------------------------------------------------------------------------------- -instance Outputable NodeKey where - ppr nk = pprNodeKey nk +-- | Returns the number of nodes in a 'ModuleGraph' +lengthMG :: ModuleGraph -> Int +lengthMG = length . mg_mss -pprNodeKey :: NodeKey -> SDoc -pprNodeKey (NodeKey_Unit iu) = ppr iu -pprNodeKey (NodeKey_Module mk) = ppr mk -pprNodeKey (NodeKey_Link uid) = ppr uid - -nodeKeyUnitId :: NodeKey -> UnitId -nodeKeyUnitId (NodeKey_Unit iu) = instUnitInstanceOf iu -nodeKeyUnitId (NodeKey_Module mk) = mnkUnitId mk -nodeKeyUnitId (NodeKey_Link uid) = uid - -nodeKeyModName :: NodeKey -> Maybe ModuleName -nodeKeyModName (NodeKey_Module mk) = Just (gwib_mod $ mnkModuleName mk) -nodeKeyModName _ = Nothing - -data ModNodeKeyWithUid = ModNodeKeyWithUid { mnkModuleName :: !ModuleNameWithIsBoot - , mnkUnitId :: !UnitId } deriving (Eq, Ord) - -instance Outputable ModNodeKeyWithUid where - ppr (ModNodeKeyWithUid mnwib uid) = ppr uid <> colon <> ppr mnwib - --- | A '@ModuleGraph@' contains all the nodes from the home package (only). See --- '@ModuleGraphNode@' for information about the nodes. --- --- Modules need to be compiled. hs-boots need to be typechecked before --- the associated "real" module so modules with {-# SOURCE #-} imports can be --- built. Instantiations also need to be typechecked to ensure that the module --- fits the signature. Substantiation typechecking is roughly comparable to the --- check that the module and its hs-boot agree. --- --- The graph is not necessarily stored in topologically-sorted order. Use --- 'GHC.topSortModuleGraph' and 'GHC.Data.Graph.Directed.flattenSCC' to achieve this. -data ModuleGraph = ModuleGraph - { mg_mss :: [ModuleGraphNode] - , mg_graph :: (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) - -- A cached transitive dependency calculation so that a lot of work is not - -- repeated whenever the transitive dependencies need to be calculated (for example, hptInstances) - } +-------------------------------------------------------------------------------- +-- ** ModSummaries +-------------------------------------------------------------------------------- -- | Map a function 'f' over all the 'ModSummaries'. --- To preserve invariants 'f' can't change the isBoot status. -mapMG :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph -mapMG f mg at ModuleGraph{..} = mg +-- To preserve invariants, 'f' can't change the isBoot status. +mgMap :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph +mgMap f mg at ModuleGraph{..} = mg { mg_mss = flip fmap mg_mss $ \case InstantiationNode uid iuid -> InstantiationNode uid iuid LinkNode uid nks -> LinkNode uid nks ModuleNode deps ms -> ModuleNode deps (f ms) } -unionMG :: ModuleGraph -> ModuleGraph -> ModuleGraph -unionMG a b = - let new_mss = nubOrdBy compare $ mg_mss a `mappend` mg_mss b - in ModuleGraph { - mg_mss = new_mss - , mg_graph = mkTransDeps new_mss - } - -mkTransDeps :: [ModuleGraphNode] -> (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) -mkTransDeps = first graphReachability {- module graph is acyclic -} . moduleGraphNodes False +-- | Map a function 'f' over all the 'ModSummaries', in 'IO'. +-- To preserve invariants, 'f' can't change the isBoot status. +mgMapM :: (ModSummary -> IO ModSummary) -> ModuleGraph -> IO ModuleGraph +mgMapM f mg at ModuleGraph{..} = do + mss' <- forM mg_mss $ \case + InstantiationNode uid iuid -> pure $ InstantiationNode uid iuid + LinkNode uid nks -> pure $ LinkNode uid nks + ModuleNode deps ms -> ModuleNode deps <$> (f ms) + return mg + { mg_mss = mss' + } mgModSummaries :: ModuleGraph -> [ModSummary] mgModSummaries mg = [ m | ModuleNode _ m <- mgModSummaries' mg ] -mgModSummaries' :: ModuleGraph -> [ModuleGraphNode] -mgModSummaries' = mg_mss - -- | Look up a ModSummary in the ModuleGraph -- Looks up the non-boot ModSummary -- Linear in the size of the module graph @@ -200,128 +274,53 @@ mgLookupModule ModuleGraph{..} m = listToMaybe $ mapMaybe go mg_mss = Just ms go _ = Nothing -emptyMG :: ModuleGraph -emptyMG = ModuleGraph [] (graphReachability emptyGraph, const Nothing) - -isTemplateHaskellOrQQNonBoot :: ModSummary -> Bool -isTemplateHaskellOrQQNonBoot ms = - (xopt LangExt.TemplateHaskell (ms_hspp_opts ms) - || xopt LangExt.QuasiQuotes (ms_hspp_opts ms)) && - (isBootSummary ms == NotBoot) - --- | Add an ExtendedModSummary to ModuleGraph. Assumes that the new ModSummary is --- not an element of the ModuleGraph. -extendMG :: ModuleGraph -> [NodeKey] -> ModSummary -> ModuleGraph -extendMG ModuleGraph{..} deps ms = ModuleGraph - { mg_mss = ModuleNode deps ms : mg_mss - , mg_graph = mkTransDeps (ModuleNode deps ms : mg_mss) - } - -extendMGInst :: ModuleGraph -> UnitId -> InstantiatedUnit -> ModuleGraph -extendMGInst mg uid depUnitId = mg - { mg_mss = InstantiationNode uid depUnitId : mg_mss mg - } - -extendMGLink :: ModuleGraph -> UnitId -> [NodeKey] -> ModuleGraph -extendMGLink mg uid nks = mg { mg_mss = LinkNode nks uid : mg_mss mg } - -extendMG' :: ModuleGraph -> ModuleGraphNode -> ModuleGraph -extendMG' mg = \case - InstantiationNode uid depUnitId -> extendMGInst mg uid depUnitId - ModuleNode deps ms -> extendMG mg deps ms - LinkNode deps uid -> extendMGLink mg uid deps - -mkModuleGraph :: [ModuleGraphNode] -> ModuleGraph -mkModuleGraph = foldr (flip extendMG') emptyMG - --- | This function filters out all the instantiation nodes from each SCC of a --- topological sort. Use this with care, as the resulting "strongly connected components" --- may not really be strongly connected in a direct way, as instantiations have been --- removed. It would probably be best to eliminate uses of this function where possible. -filterToposortToModules - :: [SCC ModuleGraphNode] -> [SCC ModSummary] -filterToposortToModules = mapMaybe $ mapMaybeSCC $ \case - InstantiationNode _ _ -> Nothing - LinkNode{} -> Nothing - ModuleNode _deps node -> Just node - where - -- This higher order function is somewhat bogus, - -- as the definition of "strongly connected component" - -- is not necessarily respected. - mapMaybeSCC :: (a -> Maybe b) -> SCC a -> Maybe (SCC b) - mapMaybeSCC f = \case - AcyclicSCC a -> AcyclicSCC <$> f a - CyclicSCC as -> case mapMaybe f as of - [] -> Nothing - [a] -> Just $ AcyclicSCC a - as -> Just $ CyclicSCC as - -showModMsg :: DynFlags -> Bool -> ModuleGraphNode -> SDoc -showModMsg dflags _ (LinkNode {}) = - let staticLink = case ghcLink dflags of - LinkStaticLib -> True - _ -> False - - platform = targetPlatform dflags - arch_os = platformArchOS platform - exe_file = exeFileName arch_os staticLink (outputFile_ dflags) - in text exe_file -showModMsg _ _ (InstantiationNode _uid indef_unit) = - ppr $ instUnitInstanceOf indef_unit -showModMsg dflags recomp (ModuleNode _ mod_summary) = - if gopt Opt_HideSourcePaths dflags - then text mod_str - else hsep $ - [ text (mod_str ++ replicate (max 0 (16 - length mod_str)) ' ') - , char '(' - , text (op $ msHsFilePath mod_summary) <> char ',' - , message, char ')' ] - - where - op = normalise - mod_str = moduleNameString (moduleName (ms_mod mod_summary)) ++ - hscSourceString (ms_hsc_src mod_summary) - dyn_file = op $ msDynObjFilePath mod_summary - obj_file = op $ msObjFilePath mod_summary - files = [ obj_file ] - ++ [ dyn_file | gopt Opt_BuildDynamicToo dflags ] - ++ [ "interpreted" | gopt Opt_ByteCodeAndObjectCode dflags ] - message = case backendSpecialModuleSource (backend dflags) recomp of - Just special -> text special - Nothing -> foldr1 (\ofile rest -> ofile <> comma <+> rest) (map text files) - - +-------------------------------------------------------------------------------- +-- ** Reachability +-------------------------------------------------------------------------------- -type SummaryNode = Node Int ModuleGraphNode +-- | Return all nodes reachable from the given 'NodeKey'. +mgReachable :: ModuleGraph -> NodeKey -> Maybe [ModuleGraphNode] +mgReachable mg nk = map summaryNodeSummary <$> modules_below where + (td_map, lookup_node) = mg_graph mg + modules_below = + allReachable td_map <$> lookup_node nk -summaryNodeKey :: SummaryNode -> Int -summaryNodeKey = node_key +-- | Reachability Query. +-- +-- @mgQuery(g, a, b)@ asks: +-- Can we reach @b@ from @a@ in graph @g@? +-- +-- Both @a@ and @b@ must be in @g at . +mgQuery :: ModuleGraph -- ^ @g@ + -> NodeKey -- ^ @a@ + -> NodeKey -- ^ @b@ + -> Bool -- ^ @b@ is reachable from @a@ +mgQuery mg nka nkb = isReachable td_map na nb where + (td_map, lookup_node) = mg_graph mg + na = expectJust "mgQuery:a" $ lookup_node nka + nb = expectJust "mgQuery:b" $ lookup_node nkb -summaryNodeSummary :: SummaryNode -> ModuleGraphNode -summaryNodeSummary = node_payload +-- | Many roots reachability Query. +-- +-- @mgQuery(g, roots, b)@ asks: +-- Can we reach @b@ from any of the @roots@ in graph @g@? +-- +-- Node @b@ must be in @g at . +mgQueryMany :: ModuleGraph -- ^ @g@ + -> [NodeKey] -- ^ @roots@ + -> NodeKey -- ^ @b@ + -> Bool -- ^ @b@ is reachable from @roots@ +mgQueryMany mg roots nkb = isReachableMany td_map nroots nb where + (td_map, lookup_node) = mg_graph mg + nroots = mapMaybe lookup_node roots + nb = expectJust "mgQuery:b" $ lookup_node nkb --- | Collect the immediate dependencies of a ModuleGraphNode, --- optionally avoiding hs-boot dependencies. --- If the drop_hs_boot_nodes flag is False, and if this is a .hs and there is --- an equivalent .hs-boot, add a link from the former to the latter. This --- has the effect of detecting bogus cases where the .hs-boot depends on the --- .hs, by introducing a cycle. Additionally, it ensures that we will always --- process the .hs-boot before the .hs, and so the HomePackageTable will always --- have the most up to date information. -nodeDependencies :: Bool -> ModuleGraphNode -> [NodeKey] -nodeDependencies drop_hs_boot_nodes = \case - LinkNode deps _uid -> deps - InstantiationNode uid iuid -> - NodeKey_Module . (\mod -> ModNodeKeyWithUid (GWIB mod NotBoot) uid) <$> uniqDSetToList (instUnitHoles iuid) - ModuleNode deps _ms -> - map drop_hs_boot deps - where - -- Drop hs-boot nodes by using HsSrcFile as the key - hs_boot_key | drop_hs_boot_nodes = NotBoot -- is regular mod or signature - | otherwise = IsBoot +-------------------------------------------------------------------------------- +-- ** Other operations (read haddocks on export list) +-------------------------------------------------------------------------------- - drop_hs_boot (NodeKey_Module (ModNodeKeyWithUid (GWIB mn IsBoot) uid)) = (NodeKey_Module (ModNodeKeyWithUid (GWIB mn hs_boot_key) uid)) - drop_hs_boot x = x +mgModSummaries' :: ModuleGraph -> [ModuleGraphNode] +mgModSummaries' = mg_mss -- | Turn a list of graph nodes into an efficient queriable graph. -- The first boolean parameter indicates whether nodes corresponding to hs-boot files @@ -341,16 +340,16 @@ moduleGraphNodes drop_hs_boot_nodes summaries = ModuleNode __deps ms | isBootSummary ms == IsBoot, drop_hs_boot_nodes -- Using nodeDependencies here converts dependencies on other -- boot files to dependencies on dependencies on non-boot files. - -> Left (ms_mod ms, nodeDependencies drop_hs_boot_nodes s) + -> Left (ms_mod ms, mgNodeDependencies drop_hs_boot_nodes s) _ -> normal_case where normal_case = - let lkup_key = ms_mod <$> moduleGraphNodeModSum s + let lkup_key = ms_mod <$> mgNodeModSum s extra = (lkup_key >>= \key -> Map.lookup key boot_summaries) in Right $ DigraphNode s key $ out_edge_keys $ (fromMaybe [] extra - ++ nodeDependencies drop_hs_boot_nodes s) + ++ mgNodeDependencies drop_hs_boot_nodes s) numbered_summaries = zip summaries [1..] @@ -371,20 +370,6 @@ moduleGraphNodes drop_hs_boot_nodes summaries = out_edge_keys = mapMaybe lookup_key -- If we want keep_hi_boot_nodes, then we do lookup_key with -- IsBoot; else False -newtype NodeMap a = NodeMap { unNodeMap :: Map.Map NodeKey a } - deriving (Functor, Traversable, Foldable) - -mkNodeKey :: ModuleGraphNode -> NodeKey -mkNodeKey = \case - InstantiationNode _ iu -> NodeKey_Unit iu - ModuleNode _ x -> NodeKey_Module $ msKey x - LinkNode _ uid -> NodeKey_Link uid - -msKey :: ModSummary -> ModNodeKeyWithUid -msKey ms = ModNodeKeyWithUid (ms_mnwib ms) (ms_unitid ms) - -type ModNodeKey = ModuleNameWithIsBoot - -- | This function returns all the modules belonging to the home-unit that can -- be reached by following the given dependencies. Additionally, if both the @@ -410,21 +395,150 @@ moduleGraphModulesBelow mg uid mn = filtered_mods [ mn | NodeKey_Module mn <- mo | otherwise -> r1 : filter_mods (r2:rs) rs -> rs -mgReachable :: HasCallStack => ModuleGraph -> NodeKey -> Maybe [ModuleGraphNode] -mgReachable mg nk = map summaryNodeSummary <$> modules_below where - (td_map, lookup_node) = mg_graph mg - modules_below = - allReachable td_map <$> lookup_node nk +-- | This function filters out all the instantiation nodes from each SCC of a +-- topological sort. Use this with care, as the resulting "strongly connected components" +-- may not really be strongly connected in a direct way, as instantiations have been +-- removed. It would probably be best to eliminate uses of this function where possible. +filterToposortToModules + :: [SCC ModuleGraphNode] -> [SCC ModSummary] +filterToposortToModules = mapMaybe $ mapMaybeSCC $ \case + InstantiationNode _ _ -> Nothing + LinkNode{} -> Nothing + ModuleNode _deps node -> Just node + where + -- This higher order function is somewhat bogus, + -- as the definition of "strongly connected component" + -- is not necessarily respected. + mapMaybeSCC :: (a -> Maybe b) -> SCC a -> Maybe (SCC b) + mapMaybeSCC f = \case + AcyclicSCC a -> AcyclicSCC <$> f a + CyclicSCC as -> case mapMaybe f as of + [] -> Nothing + [a] -> Just $ AcyclicSCC a + as -> Just $ CyclicSCC as --- | Reachability Query. @mgQuery(g, a, b)@ asks: Can we reach @b@ from @a@ in --- graph @g@? --- INVARIANT: Both @a@ and @b@ must be in @g at . -mgQuery :: ModuleGraph -- ^ @g@ - -> NodeKey -- ^ @a@ - -> NodeKey -- ^ @b@ - -> Bool -- ^ @b@ is reachable from @a@ -mgQuery mg nka nkb = isReachable td_map na nb where - (td_map, lookup_node) = mg_graph mg - na = expectJust "mgQuery:a" $ lookup_node nka - nb = expectJust "mgQuery:b" $ lookup_node nkb +-------------------------------------------------------------------------------- +-- * Keys into ModuleGraph +-------------------------------------------------------------------------------- + +data NodeKey = NodeKey_Unit {-# UNPACK #-} !InstantiatedUnit + | NodeKey_Module {-# UNPACK #-} !ModNodeKeyWithUid + | NodeKey_Link !UnitId + deriving (Eq, Ord) + +instance Outputable NodeKey where + ppr (NodeKey_Unit iu) = ppr iu + ppr (NodeKey_Module mk) = ppr mk + ppr (NodeKey_Link uid) = ppr uid + +mkNodeKey :: ModuleGraphNode -> NodeKey +mkNodeKey = \case + InstantiationNode _ iu -> NodeKey_Unit iu + ModuleNode _ x -> NodeKey_Module $ msKey x + LinkNode _ uid -> NodeKey_Link uid + +nodeKeyUnitId :: NodeKey -> UnitId +nodeKeyUnitId (NodeKey_Unit iu) = instUnitInstanceOf iu +nodeKeyUnitId (NodeKey_Module mk) = mnkUnitId mk +nodeKeyUnitId (NodeKey_Link uid) = uid + +nodeKeyModName :: NodeKey -> Maybe ModuleName +nodeKeyModName (NodeKey_Module mk) = Just (gwib_mod $ mnkModuleName mk) +nodeKeyModName _ = Nothing + +type ModNodeKey = ModuleNameWithIsBoot +data ModNodeKeyWithUid = ModNodeKeyWithUid { mnkModuleName :: !ModuleNameWithIsBoot + , mnkUnitId :: !UnitId } deriving (Eq, Ord) + +instance Outputable ModNodeKeyWithUid where + ppr (ModNodeKeyWithUid mnwib uid) = ppr uid <> colon <> ppr mnwib + +msKey :: ModSummary -> ModNodeKeyWithUid +msKey ms = ModNodeKeyWithUid (ms_mnwib ms) (ms_unitid ms) + +-------------------------------------------------------------------------------- +-- ** Internal node representation (exposed) +-------------------------------------------------------------------------------- + +type SummaryNode = Node Int ModuleGraphNode + +summaryNodeKey :: SummaryNode -> Int +summaryNodeKey = node_key + +summaryNodeSummary :: SummaryNode -> ModuleGraphNode +summaryNodeSummary = node_payload + +-------------------------------------------------------------------------------- +-- * Misc utilities +-------------------------------------------------------------------------------- + +showModMsg :: DynFlags -> Bool -> ModuleGraphNode -> SDoc +showModMsg dflags _ (LinkNode {}) = + let staticLink = case ghcLink dflags of + LinkStaticLib -> True + _ -> False + + platform = targetPlatform dflags + arch_os = platformArchOS platform + exe_file = exeFileName arch_os staticLink (outputFile_ dflags) + in text exe_file +showModMsg _ _ (InstantiationNode _uid indef_unit) = + ppr $ instUnitInstanceOf indef_unit +showModMsg dflags recomp (ModuleNode _ mod_summary) = + if gopt Opt_HideSourcePaths dflags + then text mod_str + else hsep $ + [ text (mod_str ++ replicate (max 0 (16 - length mod_str)) ' ') + , char '(' + , text (op $ msHsFilePath mod_summary) <> char ',' + , message, char ')' ] + + where + op = normalise + mod_str = moduleNameString (moduleName (ms_mod mod_summary)) ++ + hscSourceString (ms_hsc_src mod_summary) + dyn_file = op $ msDynObjFilePath mod_summary + obj_file = op $ msObjFilePath mod_summary + files = [ obj_file ] + ++ [ dyn_file | gopt Opt_BuildDynamicToo dflags ] + ++ [ "interpreted" | gopt Opt_ByteCodeAndObjectCode dflags ] + message = case backendSpecialModuleSource (backend dflags) recomp of + Just special -> text special + Nothing -> foldr1 (\ofile rest -> ofile <> comma <+> rest) (map text files) + +-------------------------------------------------------------------------------- +-- * Internal methods for module graph +-- +-- These are *really* meant to be internal! +-- Don't expose them without careful consideration about the invariants +-- described in the export list haddocks. +-------------------------------------------------------------------------------- + +newtype NodeMap a = NodeMap { unNodeMap :: Map.Map NodeKey a } + deriving (Functor, Traversable, Foldable) + +mkTransDeps :: [ModuleGraphNode] -> (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) +mkTransDeps = first graphReachability {- module graph is acyclic -} . moduleGraphNodes False + +extendMG' :: ModuleGraph -> ModuleGraphNode -> ModuleGraph +extendMG' mg = \case + InstantiationNode uid depUnitId -> extendMGInst mg uid depUnitId + ModuleNode deps ms -> extendMG mg deps ms + LinkNode deps uid -> extendMGLink mg uid deps + +-- | Add an ExtendedModSummary to ModuleGraph. Assumes that the new ModSummary is +-- not an element of the ModuleGraph. +extendMG :: ModuleGraph -> [NodeKey] -> ModSummary -> ModuleGraph +extendMG ModuleGraph{..} deps ms = ModuleGraph + { mg_mss = ModuleNode deps ms : mg_mss + , mg_graph = mkTransDeps (ModuleNode deps ms : mg_mss) + } + +extendMGInst :: ModuleGraph -> UnitId -> InstantiatedUnit -> ModuleGraph +extendMGInst mg uid depUnitId = mg + { mg_mss = InstantiationNode uid depUnitId : mg_mss mg + } + +extendMGLink :: ModuleGraph -> UnitId -> [NodeKey] -> ModuleGraph +extendMGLink mg uid nks = mg { mg_mss = LinkNode nks uid : mg_mss mg } ===================================== compiler/GHC/Unit/Module/ModSummary.hs ===================================== @@ -24,12 +24,14 @@ module GHC.Unit.Module.ModSummary , msDynObjFileOsPath , msDeps , isBootSummary + , isTemplateHaskellOrQQNonBoot , findTarget ) where import GHC.Prelude +import qualified GHC.LanguageExtensions as LangExt import GHC.Hs import GHC.Driver.DynFlags @@ -163,6 +165,12 @@ msDynObjFileOsPath ms = ml_dyn_obj_file_ospath (ms_location ms) isBootSummary :: ModSummary -> IsBootInterface isBootSummary ms = if ms_hsc_src ms == HsBootFile then IsBoot else NotBoot +isTemplateHaskellOrQQNonBoot :: ModSummary -> Bool +isTemplateHaskellOrQQNonBoot ms = + (xopt LangExt.TemplateHaskell (ms_hspp_opts ms) + || xopt LangExt.QuasiQuotes (ms_hspp_opts ms)) && + (isBootSummary ms == NotBoot) + ms_mnwib :: ModSummary -> ModuleNameWithIsBoot ms_mnwib ms = GWIB (ms_mod_name ms) (isBootSummary ms) @@ -206,4 +214,3 @@ findTarget ms ts = _ `matches` _ = False - ===================================== testsuite/tests/ghc-api/downsweep/OldModLocation.hs ===================================== @@ -61,7 +61,7 @@ main = do -- using the 'location' parameter we'd end up using the old location of -- the "B" module in this test. Make sure that doesn't happen. - hPrint stderr $ sort (map (ml_hs_file . ms_location) (mapMaybe moduleGraphNodeModSum nodes)) + hPrint stderr $ sort (map (ml_hs_file . ms_location) (mapMaybe mgNodeModSum $ mgModSummaries' nodes)) writeMod :: [String] -> IO () writeMod src@(head -> stripPrefix "module " -> Just (takeWhile (/=' ') -> mod)) ===================================== testsuite/tests/ghc-api/downsweep/PartialDownsweep.hs ===================================== @@ -171,7 +171,7 @@ go label mods cnd = hsc_env <- getSession (_, nodes) <- liftIO $ downsweep hsc_env mkUnknownDiagnostic Nothing [] [] False - it label $ cnd (mapMaybe moduleGraphNodeModSum nodes) + it label $ cnd (mapMaybe mgNodeModSum $ mgModSummaries' nodes) writeMod :: [String] -> IO () View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f98b3ac03f5e49d62669e52e8ed0fcdec66c596b...f7cbffe25cb6c24b4e6083c5a6b35ad19b7a50b2 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f98b3ac03f5e49d62669e52e8ed0fcdec66c596b...f7cbffe25cb6c24b4e6083c5a6b35ad19b7a50b2 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 4 02:29:26 2024 From: gitlab at gitlab.haskell.org (Brandon Chinn (@brandonchinn178)) Date: Tue, 03 Dec 2024 21:29:26 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25530 Message-ID: <674fbe864bc14_326305db4f34576d3@gitlab.mail> Brandon Chinn pushed new branch wip/T25530 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25530 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 4 10:25:58 2024 From: gitlab at gitlab.haskell.org (sheaf (@sheaf)) Date: Wed, 04 Dec 2024 05:25:58 -0500 Subject: [Git][ghc/ghc][wip/T24359] improve warning text for T10251 Message-ID: <67502e3641a74_2ff4b744ab38744bd@gitlab.mail> sheaf pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: 4a2d1f46 by sheaf at 2024-12-04T11:25:51+01:00 improve warning text for T10251 - - - - - 5 changed files: - compiler/GHC/HsToCore/Binds.hs - compiler/GHC/HsToCore/Errors/Ppr.hs - compiler/GHC/HsToCore/Errors/Types.hs - + testsuite/tests/deSugar/should_compile/T10251.stderr - testsuite/tests/simplCore/should_compile/T12603.stdout Changes: ===================================== compiler/GHC/HsToCore/Binds.hs ===================================== @@ -65,6 +65,7 @@ import GHC.Builtin.Types ( naturalTy, typeSymbolKind, charTy ) import GHC.Tc.Types.Evidence import GHC.Types.Id +import GHC.Types.Id.Info (IdDetails(..)) import GHC.Types.Name import GHC.Types.Var.Set import GHC.Types.Var.Env @@ -992,7 +993,7 @@ finishSpecPrag :: Name -> CoreExpr -- RHS to specialise finishSpecPrag poly_nm poly_rhs rule_bndrs poly_id rule_args spec_bndrs mk_spec_body spec_inl | Just reason <- mb_useless - = do { diagnosticDs $ DsUselessSpecialisePragma poly_nm reason + = do { diagnosticDs $ DsUselessSpecialisePragma poly_nm is_dfun reason ; if uselessSpecialisePragmaKeepAnyway reason then Just <$> finish_prag else return Nothing } @@ -1084,6 +1085,10 @@ finishSpecPrag poly_nm poly_rhs rule_bndrs poly_id rule_args is_nop_arg (Var x) = x `elem` spec_bndrs is_nop_arg _ = False + is_dfun = case idDetails poly_id of + DFunId {} -> True + _ -> False + specFunInlinePrag :: Id -> InlinePragma -> InlinePragma -> InlinePragma -- See Note [Activation pragmas for SPECIALISE] ===================================== compiler/GHC/HsToCore/Errors/Ppr.hs ===================================== @@ -83,22 +83,27 @@ instance Diagnostic DsMessage where StrictBinds -> "strict bindings" in mkSimpleDecorated $ hang (text "Top-level" <+> text desc <+> text "aren't allowed:") 2 (ppr bind) - DsUselessSpecialisePragma poly_id rea -> + DsUselessSpecialisePragma poly_nm is_dfun rea -> mkSimpleDecorated $ - what <+> text "SPECIALISE pragma for" <> why + what <+> pragma <+> text "pragma" <+> why where - quoted_id = quotes (ppr poly_id) + quoted_nm = quotes (ppr poly_nm) what = if uselessSpecialisePragmaKeepAnyway rea then text "Seemingly useless" else text "Ignoring useless" + pragma = if is_dfun + then text "SPECIALISE instance" + else text "SPECIALISE" why = case rea of UselessSpecialiseForClassMethodSelector -> - text " class selector:" <+> quoted_id + text "for class selector:" <+> quoted_nm UselessSpecialiseForNoInlineFunction -> - text " NOINLINE function:" <+> quoted_id + text "for NOINLINE function:" <+> quoted_nm UselessSpecialiseNoSpecialisation -> - colon <+> quoted_id + if is_dfun + then empty + else colon <+> quoted_nm DsOrphanRule rule -> mkSimpleDecorated $ text "Orphan rule:" <+> ppr rule DsRuleLhsTooComplicated orig_lhs lhs2 ===================================== compiler/GHC/HsToCore/Errors/Types.hs ===================================== @@ -116,6 +116,7 @@ data DsMessage -} | DsUselessSpecialisePragma !Name + !Bool -- ^ is this a @SPECIALISE instance@ pragma? !UselessSpecialisePragmaReason | DsOrphanRule !CoreRule ===================================== testsuite/tests/deSugar/should_compile/T10251.stderr ===================================== @@ -0,0 +1,3 @@ +T10251.hs:19:5: warning: [GHC-66582] [-Wuseless-specialisations (in -Wdefault)] + Seemingly useless SPECIALISE instance pragma + ===================================== testsuite/tests/simplCore/should_compile/T12603.stdout ===================================== @@ -1 +1 @@ - = case GHC.Internal.Real.$w$spowImpl1 2# 8# of v { __DEFAULT -> + = case GHC.Internal.Real.$w$spowImpl 2# 8# of v { __DEFAULT -> View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4a2d1f46040ee2f8e03e2b49acb809f39ff891ee -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4a2d1f46040ee2f8e03e2b49acb809f39ff891ee You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 4 15:24:46 2024 From: gitlab at gitlab.haskell.org (sheaf (@sheaf)) Date: Wed, 04 Dec 2024 10:24:46 -0500 Subject: [Git][ghc/ghc][wip/T24359] improve warning text for T10251 Message-ID: <6750743e881c4_16af13384c1c497de@gitlab.mail> sheaf pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: 7344408d by sheaf at 2024-12-04T16:24:38+01:00 improve warning text for T10251 - - - - - 5 changed files: - compiler/GHC/HsToCore/Binds.hs - compiler/GHC/HsToCore/Errors/Ppr.hs - compiler/GHC/HsToCore/Errors/Types.hs - + testsuite/tests/deSugar/should_compile/T10251.stderr - testsuite/tests/simplCore/should_compile/T12603.stdout Changes: ===================================== compiler/GHC/HsToCore/Binds.hs ===================================== @@ -65,6 +65,7 @@ import GHC.Builtin.Types ( naturalTy, typeSymbolKind, charTy ) import GHC.Tc.Types.Evidence import GHC.Types.Id +import GHC.Types.Id.Info (IdDetails(..)) import GHC.Types.Name import GHC.Types.Var.Set import GHC.Types.Var.Env @@ -992,7 +993,7 @@ finishSpecPrag :: Name -> CoreExpr -- RHS to specialise finishSpecPrag poly_nm poly_rhs rule_bndrs poly_id rule_args spec_bndrs mk_spec_body spec_inl | Just reason <- mb_useless - = do { diagnosticDs $ DsUselessSpecialisePragma poly_nm reason + = do { diagnosticDs $ DsUselessSpecialisePragma poly_nm is_dfun reason ; if uselessSpecialisePragmaKeepAnyway reason then Just <$> finish_prag else return Nothing } @@ -1084,6 +1085,10 @@ finishSpecPrag poly_nm poly_rhs rule_bndrs poly_id rule_args is_nop_arg (Var x) = x `elem` spec_bndrs is_nop_arg _ = False + is_dfun = case idDetails poly_id of + DFunId {} -> True + _ -> False + specFunInlinePrag :: Id -> InlinePragma -> InlinePragma -> InlinePragma -- See Note [Activation pragmas for SPECIALISE] ===================================== compiler/GHC/HsToCore/Errors/Ppr.hs ===================================== @@ -83,22 +83,29 @@ instance Diagnostic DsMessage where StrictBinds -> "strict bindings" in mkSimpleDecorated $ hang (text "Top-level" <+> text desc <+> text "aren't allowed:") 2 (ppr bind) - DsUselessSpecialisePragma poly_id rea -> + DsUselessSpecialisePragma poly_nm is_dfun rea -> mkSimpleDecorated $ - what <+> text "SPECIALISE pragma for" <> why + what <+> pragma <+> text "pragma" <+> why where - quoted_id = quotes (ppr poly_id) + quoted_nm = quotes (ppr poly_nm) what = if uselessSpecialisePragmaKeepAnyway rea then text "Seemingly useless" else text "Ignoring useless" + pragma = if is_dfun + then text "SPECIALISE instance" + else text "SPECIALISE" why = case rea of UselessSpecialiseForClassMethodSelector -> - text " class selector:" <+> quoted_id + text "for class selector:" <+> quoted_nm UselessSpecialiseForNoInlineFunction -> - text " NOINLINE function:" <+> quoted_id + text "for NOINLINE function:" <+> quoted_nm UselessSpecialiseNoSpecialisation -> - colon <+> quoted_id + if is_dfun + -- Omit the Name for a DFunId, as it will be internal and not + -- very illuminating to users who don't know what a DFunId is. + then empty + else text "for:" <+> quoted_nm DsOrphanRule rule -> mkSimpleDecorated $ text "Orphan rule:" <+> ppr rule DsRuleLhsTooComplicated orig_lhs lhs2 ===================================== compiler/GHC/HsToCore/Errors/Types.hs ===================================== @@ -116,6 +116,7 @@ data DsMessage -} | DsUselessSpecialisePragma !Name + !Bool -- ^ is this a @SPECIALISE instance@ pragma? !UselessSpecialisePragmaReason | DsOrphanRule !CoreRule ===================================== testsuite/tests/deSugar/should_compile/T10251.stderr ===================================== @@ -0,0 +1,3 @@ +T10251.hs:19:5: warning: [GHC-66582] [-Wuseless-specialisations (in -Wdefault)] + Seemingly useless SPECIALISE instance pragma + ===================================== testsuite/tests/simplCore/should_compile/T12603.stdout ===================================== @@ -1 +1 @@ - = case GHC.Internal.Real.$w$spowImpl1 2# 8# of v { __DEFAULT -> + = case GHC.Internal.Real.$w$spowImpl 2# 8# of v { __DEFAULT -> View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7344408d8ccbf3da68ea9980b656348720eab732 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7344408d8ccbf3da68ea9980b656348720eab732 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 4 20:38:07 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 04 Dec 2024 15:38:07 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 11 commits: Hadrian: use / when making filepaths absolute Message-ID: <6750bdaf8f386_1674bd62df1810754a@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - 3df5a1d5 by David Binder at 2024-12-04T15:37:35-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - abbbde76 by David Binder at 2024-12-04T15:37:35-05:00 Fix reference to GHC proposal 193 in user guide - - - - - 069199fa by Ben Gamari at 2024-12-04T15:37:36-05:00 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. - - - - - 48c9283a by Ben Gamari at 2024-12-04T15:37:36-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 26 changed files: - compiler/GHC.hs - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/SysTools/Process.hs - compiler/GHC/Unit/Module/Graph.hs - compiler/GHC/Unit/Module/ModSummary.hs - docs/users_guide/exts/primitives.rst - docs/users_guide/exts/rewrite_rules.rst - docs/users_guide/exts/stolen_syntax.rst - docs/users_guide/exts/strict.rst - docs/users_guide/runtime_control.rst - docs/users_guide/using-warnings.rst - docs/users_guide/using.rst - hadrian/src/Hadrian/Utilities.hs - hadrian/src/Rules/CabalReinstall.hs - hadrian/src/Rules/Test.hs - hadrian/src/Settings/Builders/Cabal.hs - hadrian/src/Settings/Builders/Ghc.hs - rts/IOManager.c - rts/Interpreter.c - rts/Linker.c - rts/linker/MMap.c - testsuite/tests/ghc-api/downsweep/OldModLocation.hs - testsuite/tests/ghc-api/downsweep/PartialDownsweep.hs Changes: ===================================== compiler/GHC.hs ===================================== @@ -74,7 +74,7 @@ module GHC ( compileToCoreModule, compileToCoreSimplified, -- * Inspecting the module structure of the program - ModuleGraph, emptyMG, mapMG, mkModuleGraph, mgModSummaries, + ModuleGraph, emptyMG, mgMap, mkModuleGraph, mgModSummaries, mgLookupModule, ModSummary(..), ms_mod_name, ModLocation(..), pattern ModLocation, @@ -874,7 +874,7 @@ setProgramDynFlags_ invalidate_needed dflags = do -- invalidateModSummaryCache :: GhcMonad m => m () invalidateModSummaryCache = - modifySession $ \h -> h { hsc_mod_graph = mapMG inval (hsc_mod_graph h) } + modifySession $ \h -> h { hsc_mod_graph = mgMap inval (hsc_mod_graph h) } where inval ms = ms { ms_hs_hash = fingerprint0 } ===================================== compiler/GHC/Data/Graph/Directed/Reachability.hs ===================================== @@ -51,6 +51,9 @@ graphReachability (Graph g from to) = do_one v = IS.unions (IS.fromList (g ! v) : mapMaybe (flip IM.lookup reachableGraph) (g ! v)) -- | Construct a 'ReachabilityIndex' from a 'Graph' which may have cycles. +-- If this reachability index is just going to be used once, it may make sense +-- to use 'reachablesG' instead, which will traverse the reachable nodes without +-- constructing the index -- which may be faster. cyclicGraphReachability :: Graph node -> ReachabilityIndex node cyclicGraphReachability (Graph g from to) = ReachabilityIndex{index = reachableGraphCyclic, from_vertex = from, to_vertex = to} ===================================== compiler/GHC/Driver/Env.hs ===================================== @@ -41,6 +41,8 @@ where import GHC.Prelude +import GHC.Builtin.Names ( gHC_PRIM ) + import GHC.Driver.DynFlags import GHC.Driver.Errors ( printOrThrowDiagnostics ) import GHC.Driver.Errors.Types ( GhcMessage ) @@ -70,8 +72,6 @@ import GHC.Types.Name import GHC.Types.Name.Env import GHC.Types.TyThing -import GHC.Builtin.Names ( gHC_PRIM ) - import GHC.Data.Maybe import GHC.Utils.Exception as Ex @@ -274,9 +274,11 @@ hptSomeThingsBelowUs extract include_hi_boot hsc_env uid mn mg = hsc_mod_graph hsc_env in [ thing - | - -- Find each non-hi-boot module below me - (ModNodeKeyWithUid (GWIB { gwib_mod = mod, gwib_isBoot = is_boot }) mod_uid) <- Set.toList (moduleGraphModulesBelow mg uid mn) + -- "Finding each non-hi-boot module below me" maybe could be cached in the module + -- graph to avoid filtering the boots out of the transitive closure out + -- every time this is called + | (ModNodeKeyWithUid (GWIB { gwib_mod = mod, gwib_isBoot = is_boot }) mod_uid) + <- Set.toList (moduleGraphModulesBelow mg uid mn) , include_hi_boot || (is_boot == NotBoot) -- unsavoury: when compiling the base package with --make, we ===================================== compiler/GHC/Driver/Main.hs ===================================== @@ -1453,7 +1453,7 @@ oneShotMsg logger recomp = batchMsg :: Messager batchMsg = batchMsgWith (\_ _ _ _ -> empty) batchMultiMsg :: Messager -batchMultiMsg = batchMsgWith (\_ _ _ node -> brackets (ppr (moduleGraphNodeUnitId node))) +batchMultiMsg = batchMsgWith (\_ _ _ node -> brackets (ppr (mgNodeUnitId node))) batchMsgWith :: (HscEnv -> (Int, Int) -> RecompileRequired -> ModuleGraphNode -> SDoc) -> Messager batchMsgWith extra hsc_env_start mod_index recomp node = @@ -1469,7 +1469,7 @@ batchMsgWith extra hsc_env_start mod_index recomp node = LinkNode {} -> "Linking" InstantiationNode {} -> "Instantiating" ModuleNode {} -> "Compiling" - hsc_env = hscSetActiveUnitId (moduleGraphNodeUnitId node) hsc_env_start + hsc_env = hscSetActiveUnitId (mgNodeUnitId node) hsc_env_start dflags = hsc_dflags hsc_env logger = hsc_logger hsc_env state = hsc_units hsc_env ===================================== compiler/GHC/Driver/Make.hs ===================================== @@ -250,11 +250,9 @@ depanalPartial diag_wrapper msg excluded_mods allow_dup_roots = do -- cached finder data. liftIO $ flushFinderCaches (hsc_FC hsc_env) (hsc_unit_env hsc_env) - (errs, graph_nodes) <- liftIO $ downsweep + (errs, mod_graph) <- liftIO $ downsweep hsc_env diag_wrapper msg (mgModSummaries old_graph) excluded_mods allow_dup_roots - let - mod_graph = mkModuleGraph graph_nodes return (unionManyMessages errs, mod_graph) -- | Collect the instantiations of dependencies to create 'InstantiationNode' work graph nodes. @@ -289,7 +287,7 @@ linkNodes summaries uid hue = ofile = outputFile_ dflags unit_nodes :: [NodeKey] - unit_nodes = map mkNodeKey (filter ((== uid) . moduleGraphNodeUnitId) summaries) + unit_nodes = map mkNodeKey (filter ((== uid) . mgNodeUnitId) summaries) -- Issue a warning for the confusing case where the user -- said '-o foo' but we're not going to do any linking. -- We attempt linking if either (a) one of the modules is @@ -632,13 +630,18 @@ createBuildPlan mod_graph maybe_top_mod = -- An environment mapping a module to its hs-boot file and all nodes on the path between the two, if one exists boot_modules = mkModuleEnv - [ (ms_mod ms, (m, boot_path (ms_mod_name ms) (ms_unitid ms))) | m@(ModuleNode _ ms) <- (mgModSummaries' mod_graph), isBootSummary ms == IsBoot] + [ (ms_mod ms, (m, boot_path (ms_mod_name ms) (ms_unitid ms))) + | m@(ModuleNode _ ms) <- mgModSummaries' mod_graph + , isBootSummary ms == IsBoot] select_boot_modules :: [ModuleGraphNode] -> [ModuleGraphNode] select_boot_modules = mapMaybe (fmap fst . get_boot_module) get_boot_module :: ModuleGraphNode -> Maybe (ModuleGraphNode, [ModuleGraphNode]) - get_boot_module m = case m of ModuleNode _ ms | HsSrcFile <- ms_hsc_src ms -> lookupModuleEnv boot_modules (ms_mod ms); _ -> Nothing + get_boot_module (ModuleNode _ ms) + | HsSrcFile <- ms_hsc_src ms + = lookupModuleEnv boot_modules (ms_mod ms) + get_boot_module _ = Nothing -- Any cycles should be resolved now collapseSCC :: [SCC ModuleGraphNode] -> Either [ModuleGraphNode] [(Either ModuleGraphNode ModuleGraphNodeWithBootFile)] @@ -668,8 +671,8 @@ createBuildPlan mod_graph maybe_top_mod = in - assertPpr (sum (map countMods build_plan) == length (mgModSummaries' mod_graph)) - (vcat [text "Build plan missing nodes:", (text "PLAN:" <+> ppr (sum (map countMods build_plan))), (text "GRAPH:" <+> ppr (length (mgModSummaries' mod_graph )))]) + assertPpr (sum (map countMods build_plan) == lengthMG mod_graph) + (vcat [text "Build plan missing nodes:", (text "PLAN:" <+> ppr (sum (map countMods build_plan))), (text "GRAPH:" <+> ppr (lengthMG mod_graph))]) build_plan mkWorkerLimit :: DynFlags -> IO WorkerLimit @@ -1142,7 +1145,7 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do !build_map <- getBuildMap hug_var <- gets hug_var -- 1. Get the direct dependencies of this module - let direct_deps = nodeDependencies False mod + let direct_deps = mgNodeDependencies False mod -- It's really important to force build_deps, or the whole buildMap is retained, -- which would retain all the result variables, preventing us from collecting them -- after they are no longer used. @@ -1150,14 +1153,14 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do let !build_action = case mod of InstantiationNode uid iu -> do - withCurrentUnit (moduleGraphNodeUnitId mod) $ do + withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps executeInstantiationNode mod_idx n_mods hug uid iu return (Nothing, deps) ModuleNode _build_deps ms -> let !old_hmi = M.lookup (msKey ms) old_hpt rehydrate_mods = mapMaybe nodeKeyModName <$> rehydrate_nodes - in withCurrentUnit (moduleGraphNodeUnitId mod) $ do + in withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps hmi <- executeCompileNode mod_idx n_mods old_hmi hug rehydrate_mods ms -- Write the HMI to an external cache (if one exists) @@ -1166,9 +1169,9 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do -- This global MVar is incrementally modified in order to avoid having to -- recreate the HPT before compiling each module which leads to a quadratic amount of work. liftIO $ modifyMVar_ hug_var (return . addHomeModInfoToHug hmi) - return (Just hmi, addToModuleNameSet (moduleGraphNodeUnitId mod) (ms_mod_name ms) deps ) + return (Just hmi, addToModuleNameSet (mgNodeUnitId mod) (ms_mod_name ms) deps ) LinkNode _nks uid -> do - withCurrentUnit (moduleGraphNodeUnitId mod) $ do + withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps executeLinkNode hug (mod_idx, n_mods) uid direct_deps return (Nothing, deps) @@ -1570,7 +1573,7 @@ downsweep :: HscEnv -> Bool -- True <=> allow multiple targets to have -- the same module name; this is -- very useful for ghc -M - -> IO ([DriverMessages], [ModuleGraphNode]) + -> IO ([DriverMessages], ModuleGraph) -- The non-error elements of the returned list all have distinct -- (Modules, IsBoot) identifiers, unless the Bool is true in -- which case there can be repeats @@ -1595,7 +1598,7 @@ downsweep_imports :: HscEnv -> [ModuleName] -> Bool -> ([(UnitId, DriverMessages)], [ModSummary]) - -> IO ([DriverMessages], [ModuleGraphNode]) + -> IO ([DriverMessages], ModuleGraph) downsweep_imports hsc_env old_summaries excl_mods allow_dup_roots (root_errs, rootSummariesOk) = do let root_map = mkRootMap rootSummariesOk @@ -1620,7 +1623,7 @@ downsweep_imports hsc_env old_summaries excl_mods allow_dup_roots (root_errs, ro th_enabled_nodes <- enableCodeGenForTH logger tmpfs unit_env all_nodes if null all_root_errs then return (all_errs, th_enabled_nodes) - else pure $ (all_root_errs, []) + else pure $ (all_root_errs, emptyMG) where -- Dependencies arising on a unit (backpack and module linking deps) unitModuleNodes :: [ModuleGraphNode] -> UnitId -> HomeUnitEnv -> [Either (Messages DriverMessage) ModuleGraphNode] @@ -1870,7 +1873,7 @@ enableCodeGenForTH -> TmpFs -> UnitEnv -> [ModuleGraphNode] - -> IO [ModuleGraphNode] + -> IO ModuleGraph enableCodeGenForTH logger tmpfs unit_env = enableCodeGenWhen logger tmpfs TFL_CurrentModule TFL_GhcSession unit_env @@ -1893,19 +1896,19 @@ enableCodeGenWhen -> TempFileLifetime -> UnitEnv -> [ModuleGraphNode] - -> IO [ModuleGraphNode] -enableCodeGenWhen logger tmpfs staticLife dynLife unit_env mod_graph = - mapM enable_code_gen mod_graph + -> IO ModuleGraph +enableCodeGenWhen logger tmpfs staticLife dynLife unit_env mod_graph = do + mgMapM enable_code_gen mg where defaultBackendOf ms = platformDefaultBackend (targetPlatform $ ue_unitFlags (ms_unitid ms) unit_env) - enable_code_gen :: ModuleGraphNode -> IO ModuleGraphNode - enable_code_gen n@(ModuleNode deps ms) + enable_code_gen :: ModSummary -> IO ModSummary + enable_code_gen ms | ModSummary { ms_location = ms_location , ms_hsc_src = HsSrcFile , ms_hspp_opts = dflags } <- ms - , Just enable_spec <- mkNodeKey n `Map.lookup` needs_codegen_map = + , Just enable_spec <- needs_codegen_map (NodeKey_Module (msKey ms)) = if | nocode_enable ms -> do let new_temp_file suf dynsuf = do tn <- newTempName logger tmpfs (tmpDir dflags) staticLife suf @@ -1937,7 +1940,7 @@ enableCodeGenWhen logger tmpfs staticLife dynLife unit_env mod_graph = , ms_hspp_opts = updOptLevel 0 $ new_dflags } -- Recursive call to catch the other cases - enable_code_gen (ModuleNode deps ms') + enable_code_gen ms' -- If -fprefer-byte-code then satisfy dependency by enabling bytecode (if normal object not enough) -- we only get to this case if the default backend is already generating object files, but we need dynamic @@ -1947,21 +1950,21 @@ enableCodeGenWhen logger tmpfs staticLife dynLife unit_env mod_graph = { ms_hspp_opts = gopt_set (ms_hspp_opts ms) Opt_ByteCodeAndObjectCode } -- Recursive call to catch the other cases - enable_code_gen (ModuleNode deps ms') + enable_code_gen ms' | dynamic_too_enable enable_spec ms -> do let ms' = ms { ms_hspp_opts = gopt_set (ms_hspp_opts ms) Opt_BuildDynamicToo } -- Recursive call to catch the other cases - enable_code_gen (ModuleNode deps ms') + enable_code_gen ms' | ext_interp_enable ms -> do let ms' = ms { ms_hspp_opts = gopt_set (ms_hspp_opts ms) Opt_ExternalInterpreter } -- Recursive call to catch the other cases - enable_code_gen (ModuleNode deps ms') + enable_code_gen ms' - | otherwise -> return n + | otherwise -> return ms enable_code_gen ms = return ms @@ -2018,23 +2021,23 @@ enableCodeGenWhen logger tmpfs staticLife dynLife unit_env mod_graph = lcl_dflags = ms_hspp_opts ms internalInterpreter = not (gopt Opt_ExternalInterpreter lcl_dflags) - (mg, lookup_node) = moduleGraphNodes False mod_graph - - mk_needed_set roots = Set.fromList $ map (mkNodeKey . node_payload) $ reachablesG mg (map (expectJust "needs_th" . lookup_node) roots) + mg = mkModuleGraph mod_graph - needs_obj_set, needs_bc_set :: Set.Set NodeKey - needs_obj_set = mk_needed_set need_obj_set + needs_obj_set, needs_bc_set :: NodeKey -> Bool + needs_obj_set k = mgQueryMany mg need_obj_set k || k `elem` need_obj_set - needs_bc_set = mk_needed_set need_bc_set + needs_bc_set k = mgQueryMany mg need_bc_set k || k `elem` need_bc_set -- A map which tells us how to enable code generation for a NodeKey - needs_codegen_map :: Map.Map NodeKey CodeGenEnable - needs_codegen_map = + needs_codegen_map :: NodeKey -> Maybe CodeGenEnable + needs_codegen_map nk = -- Another option here would be to just produce object code, rather than both object and -- byte code - Map.unionWith (\_ _ -> EnableByteCodeAndObject) - (Map.fromList $ [(m, EnableObject) | m <- Set.toList needs_obj_set]) - (Map.fromList $ [(m, EnableByteCode) | m <- Set.toList needs_bc_set]) + case (needs_obj_set nk, needs_bc_set nk) of + (True, True) -> Just EnableByteCodeAndObject + (True, False) -> Just EnableObject + (False, True) -> Just EnableByteCode + (False, False) -> Nothing -- The direct dependencies of modules which require object code need_obj_set = @@ -2470,14 +2473,14 @@ cyclicModuleErr mss Just path -> mkPlainErrorMsgEnvelope src_span $ GhcDriverMessage $ DriverModuleGraphCycle path where - src_span = maybe noSrcSpan (mkFileSrcSpan . ms_location) (moduleGraphNodeModSum (head path)) + src_span = maybe noSrcSpan (mkFileSrcSpan . ms_location) (mgNodeModSum (head path)) where graph :: [Node NodeKey ModuleGraphNode] graph = [ DigraphNode { node_payload = ms , node_key = mkNodeKey ms - , node_dependencies = nodeDependencies False ms + , node_dependencies = mgNodeDependencies False ms } | ms <- mss ] ===================================== compiler/GHC/SysTools/Process.hs ===================================== @@ -22,6 +22,14 @@ import GHC.Utils.CliOption import GHC.Types.SrcLoc ( SrcLoc, mkSrcLoc, mkSrcSpan ) import GHC.Data.FastString +import GHC.IO.Encoding + +#if defined(__IO_MANAGER_WINIO__) +import GHC.IO.SubSystem (()) +import GHC.IO.Handle.Windows (handleToHANDLE) +import GHC.Event.Windows (associateHandle') +#endif + import Control.Concurrent import Data.Char @@ -222,11 +230,21 @@ handleProc pgm phase_name proc = do does_not_exist = throwGhcExceptionIO (InstallationError ("could not execute: " ++ pgm)) +withPipe :: ((Handle, Handle) -> IO a) -> IO a +withPipe = bracket createPipe $ \ (readEnd, writeEnd) -> do + hClose readEnd + hClose writeEnd builderMainLoop :: Logger -> (String -> String) -> FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> IO ExitCode -builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = do +builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = withPipe $ \ (readEnd, writeEnd) -> do + +#if defined(__IO_MANAGER_WINIO__) + return () do + associateHandle' =<< handleToHANDLE readEnd +#endif + chan <- newChan -- We use a mask here rather than a bracket because we want @@ -243,63 +261,59 @@ builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = do -- finish. let procdata = enableProcessJobs - $ (proc pgm real_args) { cwd = mb_cwd - , env = mb_env - , std_in = CreatePipe - , std_out = CreatePipe - , std_err = CreatePipe - } - (Just hStdIn, Just hStdOut, Just hStdErr, hProcess) <- restore $ + $ (proc pgm real_args) { + cwd = mb_cwd + , env = mb_env + , std_in = CreatePipe + + -- We used to treat stdout/stderr as separate streams, but this + -- was racy (see #25517). We now treat them as one stream and + -- that is fine for our use-case. We rely on upstream programs + -- to serialize writes to the two streams appropriately (note + -- that they already need to do that to produce deterministic + -- output when used interactively / on the command-line). + , std_out = UseHandle writeEnd + , std_err = UseHandle writeEnd + } + (Just hStdIn, Nothing, Nothing, hProcess) <- restore $ createProcess_ "builderMainLoop" procdata - let cleanup_handles = do - hClose hStdIn - hClose hStdOut - hClose hStdErr + hClose writeEnd r <- try $ restore $ do - hSetBuffering hStdOut LineBuffering - hSetBuffering hStdErr LineBuffering + getLocaleEncoding >>= hSetEncoding readEnd + hSetNewlineMode readEnd nativeNewlineMode + hSetBuffering readEnd LineBuffering let make_reader_proc h = forkIO $ readerProc chan h filter_fn - bracketOnError (make_reader_proc hStdOut) killThread $ \_ -> - bracketOnError (make_reader_proc hStdErr) killThread $ \_ -> + bracketOnError (make_reader_proc readEnd) killThread $ \_ -> inner hProcess + hClose hStdIn case r of - -- onException Left (SomeException e) -> do terminateProcess hProcess - cleanup_handles throw e - -- cleanup when there was no exception Right s -> do - cleanup_handles return s safely $ \h -> do - -- we don't want to finish until 2 streams have been complete - -- (stdout and stderr) - log_loop chan (2 :: Integer) - -- after that, we wait for the process to finish and return the exit code. + processBuildMessages chan waitForProcess h where - -- t starts at the number of streams we're listening to (2) decrements each - -- time a reader process sends EOF. We are safe from looping forever if a - -- reader thread dies, because they send EOF in a finally handler. - log_loop _ 0 = return () - log_loop chan t = do + processBuildMessages :: Chan BuildMessage -> IO () + processBuildMessages chan = do msg <- readChan chan case msg of BuildMsg msg -> do logInfo logger $ withPprStyle defaultUserStyle msg - log_loop chan t + processBuildMessages chan BuildError loc msg -> do logMsg logger errorDiagnostic (mkSrcSpan loc loc) $ withPprStyle defaultUserStyle msg - log_loop chan t + processBuildMessages chan EOF -> - log_loop chan (t-1) + return () readerProc :: Chan BuildMessage -> Handle -> (String -> String) -> IO () readerProc chan hdl filter_fn = (do str <- hGetContents hdl - loop (linesPlatform (filter_fn str)) Nothing) + loop (lines (filter_fn str)) Nothing) `finally` writeChan chan EOF -- ToDo: check errors more carefully @@ -372,21 +386,3 @@ data BuildMessage = BuildMsg !SDoc | BuildError !SrcLoc !SDoc | EOF - --- Divvy up text stream into lines, taking platform dependent --- line termination into account. -linesPlatform :: String -> [String] -#if !defined(mingw32_HOST_OS) -linesPlatform ls = lines ls -#else -linesPlatform "" = [] -linesPlatform xs = - case lineBreak xs of - (as,xs1) -> as : linesPlatform xs1 - where - lineBreak "" = ("","") - lineBreak ('\r':'\n':xs) = ([],xs) - lineBreak ('\n':xs) = ([],xs) - lineBreak (x:xs) = let (as,bs) = lineBreak xs in (x:as,bs) - -#endif ===================================== compiler/GHC/Unit/Module/Graph.hs ===================================== @@ -2,52 +2,106 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE DeriveTraversable #-} +-- | A module graph should be constructed once and never change from there onwards. +-- +-- The only operations should be for building the 'ModuleGraph' +-- (once and for all -- no update-like/insert-like functions) +-- and querying the structure in various ways, e.g. to determine reachability. +-- +-- We should avoid exposing fields like 'mg_mss' since it may be a footgun +-- trying to use the nodes directly... We do still expose it, but it feels like +-- all its use cases would be better served by a more proper ModuleGraph +-- abstraction module GHC.Unit.Module.Graph - ( ModuleGraph - , ModuleGraphNode(..) - , nodeDependencies + ( + -- * Construct a module graph + -- + -- | A module graph should be constructed once by downsweep and never modified. + ModuleGraph , emptyMG , mkModuleGraph - , extendMG - , extendMGInst - , extendMG' - , unionMG - , isTemplateHaskellOrQQNonBoot - , filterToposortToModules - , mapMG + + -- * Nodes in a module graph + -- + -- | The user-facing nodes in a module graph are 'ModuleGraphNode's. + -- There are a few things which we can query out of each 'ModuleGraphNode': + -- + -- - 'mgNodeDependencies' gets the immediate dependencies of this node + -- - 'mgNodeUnitId' returns the 'UnitId' of that node + -- - 'mgNodeModSum' extracts the 'ModSummary' of a node if exists + , ModuleGraphNode(..) + , mgNodeDependencies + , mgNodeModSum + , mgNodeUnitId + + -- * Module graph operations + , lengthMG + + -- ** 'ModSummary' operations + -- + -- | A couple of operations on the module graph allow access to the + -- 'ModSummary's of the modules in it contained. + -- + -- In particular, 'mapMG' and 'mapMGM' allow updating these 'ModSummary's + -- (without changing the 'ModuleGraph' structure itself!). + -- 'mgModSummaries' lists out all 'ModSummary's, and + -- 'mgLookupModule' looks up a 'ModSummary' for a given module. + , mgMap, mgMapM , mgModSummaries - , mgModSummaries' , mgLookupModule - , showModMsg - , moduleGraphNodeModule - , moduleGraphNodeModSum - , moduleGraphModulesBelow + + -- ** Reachability queries + -- + -- | A module graph explains the structure and relationship between the + -- modules being compiled. Often times, this structure is relevant to + -- answer reachability queries -- is X reachable from Y; or, what is the + -- transitive closure of Z? , mgReachable , mgQuery - + , mgQueryMany + + -- ** Other operations + -- + -- | These operations allow more-internal-than-ideal access to the + -- ModuleGraph structure. Ideally, we could restructure the code using + -- these functions to avoid deconstructing/reconstructing the ModuleGraph + -- and instead extend the "proper interface" of the ModuleGraph to achieve + -- what is currently done but through a better abstraction. + , mgModSummaries' , moduleGraphNodes - , SummaryNode - , summaryNodeSummary + , moduleGraphModulesBelow -- needed for 'hptSomeThingsBelowUs', + -- but I think we could be more clever and cache + -- the graph-ixs of boot modules to efficiently + -- filter them out of the returned list. + -- hptInstancesBelow is re-doing that work every + -- time it's called. + , filterToposortToModules + -- * Keys into the 'ModuleGraph' , NodeKey(..) + , mkNodeKey , nodeKeyUnitId , nodeKeyModName , ModNodeKey - , mkNodeKey + , ModNodeKeyWithUid(..) , msKey + -- ** Internal node representation + -- + -- | 'SummaryNode' is the internal representation for each node stored in + -- the graph. It's not immediately clear to me why users do depend on them. + , SummaryNode + , summaryNodeSummary + , summaryNodeKey - , moduleGraphNodeUnitId - - , ModNodeKeyWithUid(..) + -- * Utilities + , showModMsg ) where import GHC.Prelude import GHC.Platform -import qualified GHC.LanguageExtensions as LangExt - import GHC.Data.Maybe import GHC.Data.Graph.Directed import GHC.Data.Graph.Directed.Reachability @@ -73,8 +127,44 @@ import GHC.Linker.Static.Utils import Data.Bifunctor import Data.Function import Data.List (sort) -import GHC.Data.List.SetOps -import GHC.Stack +import Control.Monad + +-- | A '@ModuleGraph@' contains all the nodes from the home package (only). See +-- '@ModuleGraphNode@' for information about the nodes. +-- +-- Modules need to be compiled. hs-boots need to be typechecked before +-- the associated "real" module so modules with {-# SOURCE #-} imports can be +-- built. Instantiations also need to be typechecked to ensure that the module +-- fits the signature. Substantiation typechecking is roughly comparable to the +-- check that the module and its hs-boot agree. +-- +-- The graph is not necessarily stored in topologically-sorted order. Use +-- 'GHC.topSortModuleGraph' and 'GHC.Data.Graph.Directed.flattenSCC' to achieve this. +data ModuleGraph = ModuleGraph + { mg_mss :: [ModuleGraphNode] + , mg_graph :: (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) + -- A cached transitive dependency calculation so that a lot of work is not + -- repeated whenever the transitive dependencies need to be calculated (for example, hptInstances) + } + +-- | Why do we ever need to construct empty graphs? Is it because of one shot mode? +emptyMG :: ModuleGraph +emptyMG = ModuleGraph [] (graphReachability emptyGraph, const Nothing) + +-- | Construct a module graph. This function should be the only entry point for +-- building a 'ModuleGraph', since it is supposed to be built once and never modified. +-- +-- If you ever find the need to build a 'ModuleGraph' iteratively, don't +-- add insert and update functions to the API since they become footguns. +-- Instead, design an API that allows iterative construction without posterior +-- modification, perhaps like what is done for building arrays from mutable +-- arrays. +mkModuleGraph :: [ModuleGraphNode] -> ModuleGraph +mkModuleGraph = foldr (flip extendMG') emptyMG + +-------------------------------------------------------------------------------- +-- * Module Graph Nodes +-------------------------------------------------------------------------------- -- | A '@ModuleGraphNode@' is a node in the '@ModuleGraph@'. -- Edges between nodes mark dependencies arising from module imports @@ -88,16 +178,36 @@ data ModuleGraphNode -- | Link nodes are whether are are creating a linked product (ie executable/shared object etc) for a unit. | LinkNode [NodeKey] UnitId -moduleGraphNodeModule :: ModuleGraphNode -> Maybe ModuleName -moduleGraphNodeModule mgn = ms_mod_name <$> (moduleGraphNodeModSum mgn) +-- | Collect the immediate dependencies of a ModuleGraphNode, +-- optionally avoiding hs-boot dependencies. +-- If the drop_hs_boot_nodes flag is False, and if this is a .hs and there is +-- an equivalent .hs-boot, add a link from the former to the latter. This +-- has the effect of detecting bogus cases where the .hs-boot depends on the +-- .hs, by introducing a cycle. Additionally, it ensures that we will always +-- process the .hs-boot before the .hs, and so the HomePackageTable will always +-- have the most up to date information. +mgNodeDependencies :: Bool -> ModuleGraphNode -> [NodeKey] +mgNodeDependencies drop_hs_boot_nodes = \case + LinkNode deps _uid -> deps + InstantiationNode uid iuid -> + NodeKey_Module . (\mod -> ModNodeKeyWithUid (GWIB mod NotBoot) uid) <$> uniqDSetToList (instUnitHoles iuid) + ModuleNode deps _ms -> + map drop_hs_boot deps + where + -- Drop hs-boot nodes by using HsSrcFile as the key + hs_boot_key | drop_hs_boot_nodes = NotBoot -- is regular mod or signature + | otherwise = IsBoot + + drop_hs_boot (NodeKey_Module (ModNodeKeyWithUid (GWIB mn IsBoot) uid)) = (NodeKey_Module (ModNodeKeyWithUid (GWIB mn hs_boot_key) uid)) + drop_hs_boot x = x -moduleGraphNodeModSum :: ModuleGraphNode -> Maybe ModSummary -moduleGraphNodeModSum (InstantiationNode {}) = Nothing -moduleGraphNodeModSum (LinkNode {}) = Nothing -moduleGraphNodeModSum (ModuleNode _ ms) = Just ms +mgNodeModSum :: ModuleGraphNode -> Maybe ModSummary +mgNodeModSum (InstantiationNode {}) = Nothing +mgNodeModSum (LinkNode {}) = Nothing +mgNodeModSum (ModuleNode _ ms) = Just ms -moduleGraphNodeUnitId :: ModuleGraphNode -> UnitId -moduleGraphNodeUnitId mgn = +mgNodeUnitId :: ModuleGraphNode -> UnitId +mgNodeUnitId mgn = case mgn of InstantiationNode uid _iud -> uid ModuleNode _ ms -> toUnitId (moduleUnit (ms_mod ms)) @@ -115,79 +225,43 @@ instance Eq ModuleGraphNode where instance Ord ModuleGraphNode where compare = compare `on` mkNodeKey -data NodeKey = NodeKey_Unit {-# UNPACK #-} !InstantiatedUnit - | NodeKey_Module {-# UNPACK #-} !ModNodeKeyWithUid - | NodeKey_Link !UnitId - deriving (Eq, Ord) +-------------------------------------------------------------------------------- +-- * Module Graph operations +-------------------------------------------------------------------------------- -instance Outputable NodeKey where - ppr nk = pprNodeKey nk +-- | Returns the number of nodes in a 'ModuleGraph' +lengthMG :: ModuleGraph -> Int +lengthMG = length . mg_mss -pprNodeKey :: NodeKey -> SDoc -pprNodeKey (NodeKey_Unit iu) = ppr iu -pprNodeKey (NodeKey_Module mk) = ppr mk -pprNodeKey (NodeKey_Link uid) = ppr uid - -nodeKeyUnitId :: NodeKey -> UnitId -nodeKeyUnitId (NodeKey_Unit iu) = instUnitInstanceOf iu -nodeKeyUnitId (NodeKey_Module mk) = mnkUnitId mk -nodeKeyUnitId (NodeKey_Link uid) = uid - -nodeKeyModName :: NodeKey -> Maybe ModuleName -nodeKeyModName (NodeKey_Module mk) = Just (gwib_mod $ mnkModuleName mk) -nodeKeyModName _ = Nothing - -data ModNodeKeyWithUid = ModNodeKeyWithUid { mnkModuleName :: !ModuleNameWithIsBoot - , mnkUnitId :: !UnitId } deriving (Eq, Ord) - -instance Outputable ModNodeKeyWithUid where - ppr (ModNodeKeyWithUid mnwib uid) = ppr uid <> colon <> ppr mnwib - --- | A '@ModuleGraph@' contains all the nodes from the home package (only). See --- '@ModuleGraphNode@' for information about the nodes. --- --- Modules need to be compiled. hs-boots need to be typechecked before --- the associated "real" module so modules with {-# SOURCE #-} imports can be --- built. Instantiations also need to be typechecked to ensure that the module --- fits the signature. Substantiation typechecking is roughly comparable to the --- check that the module and its hs-boot agree. --- --- The graph is not necessarily stored in topologically-sorted order. Use --- 'GHC.topSortModuleGraph' and 'GHC.Data.Graph.Directed.flattenSCC' to achieve this. -data ModuleGraph = ModuleGraph - { mg_mss :: [ModuleGraphNode] - , mg_graph :: (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) - -- A cached transitive dependency calculation so that a lot of work is not - -- repeated whenever the transitive dependencies need to be calculated (for example, hptInstances) - } +-------------------------------------------------------------------------------- +-- ** ModSummaries +-------------------------------------------------------------------------------- -- | Map a function 'f' over all the 'ModSummaries'. --- To preserve invariants 'f' can't change the isBoot status. -mapMG :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph -mapMG f mg at ModuleGraph{..} = mg +-- To preserve invariants, 'f' can't change the isBoot status. +mgMap :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph +mgMap f mg at ModuleGraph{..} = mg { mg_mss = flip fmap mg_mss $ \case InstantiationNode uid iuid -> InstantiationNode uid iuid LinkNode uid nks -> LinkNode uid nks ModuleNode deps ms -> ModuleNode deps (f ms) } -unionMG :: ModuleGraph -> ModuleGraph -> ModuleGraph -unionMG a b = - let new_mss = nubOrdBy compare $ mg_mss a `mappend` mg_mss b - in ModuleGraph { - mg_mss = new_mss - , mg_graph = mkTransDeps new_mss - } - -mkTransDeps :: [ModuleGraphNode] -> (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) -mkTransDeps = first graphReachability {- module graph is acyclic -} . moduleGraphNodes False +-- | Map a function 'f' over all the 'ModSummaries', in 'IO'. +-- To preserve invariants, 'f' can't change the isBoot status. +mgMapM :: (ModSummary -> IO ModSummary) -> ModuleGraph -> IO ModuleGraph +mgMapM f mg at ModuleGraph{..} = do + mss' <- forM mg_mss $ \case + InstantiationNode uid iuid -> pure $ InstantiationNode uid iuid + LinkNode uid nks -> pure $ LinkNode uid nks + ModuleNode deps ms -> ModuleNode deps <$> (f ms) + return mg + { mg_mss = mss' + } mgModSummaries :: ModuleGraph -> [ModSummary] mgModSummaries mg = [ m | ModuleNode _ m <- mgModSummaries' mg ] -mgModSummaries' :: ModuleGraph -> [ModuleGraphNode] -mgModSummaries' = mg_mss - -- | Look up a ModSummary in the ModuleGraph -- Looks up the non-boot ModSummary -- Linear in the size of the module graph @@ -200,128 +274,53 @@ mgLookupModule ModuleGraph{..} m = listToMaybe $ mapMaybe go mg_mss = Just ms go _ = Nothing -emptyMG :: ModuleGraph -emptyMG = ModuleGraph [] (graphReachability emptyGraph, const Nothing) - -isTemplateHaskellOrQQNonBoot :: ModSummary -> Bool -isTemplateHaskellOrQQNonBoot ms = - (xopt LangExt.TemplateHaskell (ms_hspp_opts ms) - || xopt LangExt.QuasiQuotes (ms_hspp_opts ms)) && - (isBootSummary ms == NotBoot) - --- | Add an ExtendedModSummary to ModuleGraph. Assumes that the new ModSummary is --- not an element of the ModuleGraph. -extendMG :: ModuleGraph -> [NodeKey] -> ModSummary -> ModuleGraph -extendMG ModuleGraph{..} deps ms = ModuleGraph - { mg_mss = ModuleNode deps ms : mg_mss - , mg_graph = mkTransDeps (ModuleNode deps ms : mg_mss) - } - -extendMGInst :: ModuleGraph -> UnitId -> InstantiatedUnit -> ModuleGraph -extendMGInst mg uid depUnitId = mg - { mg_mss = InstantiationNode uid depUnitId : mg_mss mg - } - -extendMGLink :: ModuleGraph -> UnitId -> [NodeKey] -> ModuleGraph -extendMGLink mg uid nks = mg { mg_mss = LinkNode nks uid : mg_mss mg } - -extendMG' :: ModuleGraph -> ModuleGraphNode -> ModuleGraph -extendMG' mg = \case - InstantiationNode uid depUnitId -> extendMGInst mg uid depUnitId - ModuleNode deps ms -> extendMG mg deps ms - LinkNode deps uid -> extendMGLink mg uid deps - -mkModuleGraph :: [ModuleGraphNode] -> ModuleGraph -mkModuleGraph = foldr (flip extendMG') emptyMG - --- | This function filters out all the instantiation nodes from each SCC of a --- topological sort. Use this with care, as the resulting "strongly connected components" --- may not really be strongly connected in a direct way, as instantiations have been --- removed. It would probably be best to eliminate uses of this function where possible. -filterToposortToModules - :: [SCC ModuleGraphNode] -> [SCC ModSummary] -filterToposortToModules = mapMaybe $ mapMaybeSCC $ \case - InstantiationNode _ _ -> Nothing - LinkNode{} -> Nothing - ModuleNode _deps node -> Just node - where - -- This higher order function is somewhat bogus, - -- as the definition of "strongly connected component" - -- is not necessarily respected. - mapMaybeSCC :: (a -> Maybe b) -> SCC a -> Maybe (SCC b) - mapMaybeSCC f = \case - AcyclicSCC a -> AcyclicSCC <$> f a - CyclicSCC as -> case mapMaybe f as of - [] -> Nothing - [a] -> Just $ AcyclicSCC a - as -> Just $ CyclicSCC as - -showModMsg :: DynFlags -> Bool -> ModuleGraphNode -> SDoc -showModMsg dflags _ (LinkNode {}) = - let staticLink = case ghcLink dflags of - LinkStaticLib -> True - _ -> False - - platform = targetPlatform dflags - arch_os = platformArchOS platform - exe_file = exeFileName arch_os staticLink (outputFile_ dflags) - in text exe_file -showModMsg _ _ (InstantiationNode _uid indef_unit) = - ppr $ instUnitInstanceOf indef_unit -showModMsg dflags recomp (ModuleNode _ mod_summary) = - if gopt Opt_HideSourcePaths dflags - then text mod_str - else hsep $ - [ text (mod_str ++ replicate (max 0 (16 - length mod_str)) ' ') - , char '(' - , text (op $ msHsFilePath mod_summary) <> char ',' - , message, char ')' ] - - where - op = normalise - mod_str = moduleNameString (moduleName (ms_mod mod_summary)) ++ - hscSourceString (ms_hsc_src mod_summary) - dyn_file = op $ msDynObjFilePath mod_summary - obj_file = op $ msObjFilePath mod_summary - files = [ obj_file ] - ++ [ dyn_file | gopt Opt_BuildDynamicToo dflags ] - ++ [ "interpreted" | gopt Opt_ByteCodeAndObjectCode dflags ] - message = case backendSpecialModuleSource (backend dflags) recomp of - Just special -> text special - Nothing -> foldr1 (\ofile rest -> ofile <> comma <+> rest) (map text files) - - +-------------------------------------------------------------------------------- +-- ** Reachability +-------------------------------------------------------------------------------- -type SummaryNode = Node Int ModuleGraphNode +-- | Return all nodes reachable from the given 'NodeKey'. +mgReachable :: ModuleGraph -> NodeKey -> Maybe [ModuleGraphNode] +mgReachable mg nk = map summaryNodeSummary <$> modules_below where + (td_map, lookup_node) = mg_graph mg + modules_below = + allReachable td_map <$> lookup_node nk -summaryNodeKey :: SummaryNode -> Int -summaryNodeKey = node_key +-- | Reachability Query. +-- +-- @mgQuery(g, a, b)@ asks: +-- Can we reach @b@ from @a@ in graph @g@? +-- +-- Both @a@ and @b@ must be in @g at . +mgQuery :: ModuleGraph -- ^ @g@ + -> NodeKey -- ^ @a@ + -> NodeKey -- ^ @b@ + -> Bool -- ^ @b@ is reachable from @a@ +mgQuery mg nka nkb = isReachable td_map na nb where + (td_map, lookup_node) = mg_graph mg + na = expectJust "mgQuery:a" $ lookup_node nka + nb = expectJust "mgQuery:b" $ lookup_node nkb -summaryNodeSummary :: SummaryNode -> ModuleGraphNode -summaryNodeSummary = node_payload +-- | Many roots reachability Query. +-- +-- @mgQuery(g, roots, b)@ asks: +-- Can we reach @b@ from any of the @roots@ in graph @g@? +-- +-- Node @b@ must be in @g at . +mgQueryMany :: ModuleGraph -- ^ @g@ + -> [NodeKey] -- ^ @roots@ + -> NodeKey -- ^ @b@ + -> Bool -- ^ @b@ is reachable from @roots@ +mgQueryMany mg roots nkb = isReachableMany td_map nroots nb where + (td_map, lookup_node) = mg_graph mg + nroots = mapMaybe lookup_node roots + nb = expectJust "mgQuery:b" $ lookup_node nkb --- | Collect the immediate dependencies of a ModuleGraphNode, --- optionally avoiding hs-boot dependencies. --- If the drop_hs_boot_nodes flag is False, and if this is a .hs and there is --- an equivalent .hs-boot, add a link from the former to the latter. This --- has the effect of detecting bogus cases where the .hs-boot depends on the --- .hs, by introducing a cycle. Additionally, it ensures that we will always --- process the .hs-boot before the .hs, and so the HomePackageTable will always --- have the most up to date information. -nodeDependencies :: Bool -> ModuleGraphNode -> [NodeKey] -nodeDependencies drop_hs_boot_nodes = \case - LinkNode deps _uid -> deps - InstantiationNode uid iuid -> - NodeKey_Module . (\mod -> ModNodeKeyWithUid (GWIB mod NotBoot) uid) <$> uniqDSetToList (instUnitHoles iuid) - ModuleNode deps _ms -> - map drop_hs_boot deps - where - -- Drop hs-boot nodes by using HsSrcFile as the key - hs_boot_key | drop_hs_boot_nodes = NotBoot -- is regular mod or signature - | otherwise = IsBoot +-------------------------------------------------------------------------------- +-- ** Other operations (read haddocks on export list) +-------------------------------------------------------------------------------- - drop_hs_boot (NodeKey_Module (ModNodeKeyWithUid (GWIB mn IsBoot) uid)) = (NodeKey_Module (ModNodeKeyWithUid (GWIB mn hs_boot_key) uid)) - drop_hs_boot x = x +mgModSummaries' :: ModuleGraph -> [ModuleGraphNode] +mgModSummaries' = mg_mss -- | Turn a list of graph nodes into an efficient queriable graph. -- The first boolean parameter indicates whether nodes corresponding to hs-boot files @@ -341,16 +340,16 @@ moduleGraphNodes drop_hs_boot_nodes summaries = ModuleNode __deps ms | isBootSummary ms == IsBoot, drop_hs_boot_nodes -- Using nodeDependencies here converts dependencies on other -- boot files to dependencies on dependencies on non-boot files. - -> Left (ms_mod ms, nodeDependencies drop_hs_boot_nodes s) + -> Left (ms_mod ms, mgNodeDependencies drop_hs_boot_nodes s) _ -> normal_case where normal_case = - let lkup_key = ms_mod <$> moduleGraphNodeModSum s + let lkup_key = ms_mod <$> mgNodeModSum s extra = (lkup_key >>= \key -> Map.lookup key boot_summaries) in Right $ DigraphNode s key $ out_edge_keys $ (fromMaybe [] extra - ++ nodeDependencies drop_hs_boot_nodes s) + ++ mgNodeDependencies drop_hs_boot_nodes s) numbered_summaries = zip summaries [1..] @@ -371,20 +370,6 @@ moduleGraphNodes drop_hs_boot_nodes summaries = out_edge_keys = mapMaybe lookup_key -- If we want keep_hi_boot_nodes, then we do lookup_key with -- IsBoot; else False -newtype NodeMap a = NodeMap { unNodeMap :: Map.Map NodeKey a } - deriving (Functor, Traversable, Foldable) - -mkNodeKey :: ModuleGraphNode -> NodeKey -mkNodeKey = \case - InstantiationNode _ iu -> NodeKey_Unit iu - ModuleNode _ x -> NodeKey_Module $ msKey x - LinkNode _ uid -> NodeKey_Link uid - -msKey :: ModSummary -> ModNodeKeyWithUid -msKey ms = ModNodeKeyWithUid (ms_mnwib ms) (ms_unitid ms) - -type ModNodeKey = ModuleNameWithIsBoot - -- | This function returns all the modules belonging to the home-unit that can -- be reached by following the given dependencies. Additionally, if both the @@ -410,21 +395,150 @@ moduleGraphModulesBelow mg uid mn = filtered_mods [ mn | NodeKey_Module mn <- mo | otherwise -> r1 : filter_mods (r2:rs) rs -> rs -mgReachable :: HasCallStack => ModuleGraph -> NodeKey -> Maybe [ModuleGraphNode] -mgReachable mg nk = map summaryNodeSummary <$> modules_below where - (td_map, lookup_node) = mg_graph mg - modules_below = - allReachable td_map <$> lookup_node nk +-- | This function filters out all the instantiation nodes from each SCC of a +-- topological sort. Use this with care, as the resulting "strongly connected components" +-- may not really be strongly connected in a direct way, as instantiations have been +-- removed. It would probably be best to eliminate uses of this function where possible. +filterToposortToModules + :: [SCC ModuleGraphNode] -> [SCC ModSummary] +filterToposortToModules = mapMaybe $ mapMaybeSCC $ \case + InstantiationNode _ _ -> Nothing + LinkNode{} -> Nothing + ModuleNode _deps node -> Just node + where + -- This higher order function is somewhat bogus, + -- as the definition of "strongly connected component" + -- is not necessarily respected. + mapMaybeSCC :: (a -> Maybe b) -> SCC a -> Maybe (SCC b) + mapMaybeSCC f = \case + AcyclicSCC a -> AcyclicSCC <$> f a + CyclicSCC as -> case mapMaybe f as of + [] -> Nothing + [a] -> Just $ AcyclicSCC a + as -> Just $ CyclicSCC as --- | Reachability Query. @mgQuery(g, a, b)@ asks: Can we reach @b@ from @a@ in --- graph @g@? --- INVARIANT: Both @a@ and @b@ must be in @g at . -mgQuery :: ModuleGraph -- ^ @g@ - -> NodeKey -- ^ @a@ - -> NodeKey -- ^ @b@ - -> Bool -- ^ @b@ is reachable from @a@ -mgQuery mg nka nkb = isReachable td_map na nb where - (td_map, lookup_node) = mg_graph mg - na = expectJust "mgQuery:a" $ lookup_node nka - nb = expectJust "mgQuery:b" $ lookup_node nkb +-------------------------------------------------------------------------------- +-- * Keys into ModuleGraph +-------------------------------------------------------------------------------- + +data NodeKey = NodeKey_Unit {-# UNPACK #-} !InstantiatedUnit + | NodeKey_Module {-# UNPACK #-} !ModNodeKeyWithUid + | NodeKey_Link !UnitId + deriving (Eq, Ord) + +instance Outputable NodeKey where + ppr (NodeKey_Unit iu) = ppr iu + ppr (NodeKey_Module mk) = ppr mk + ppr (NodeKey_Link uid) = ppr uid + +mkNodeKey :: ModuleGraphNode -> NodeKey +mkNodeKey = \case + InstantiationNode _ iu -> NodeKey_Unit iu + ModuleNode _ x -> NodeKey_Module $ msKey x + LinkNode _ uid -> NodeKey_Link uid + +nodeKeyUnitId :: NodeKey -> UnitId +nodeKeyUnitId (NodeKey_Unit iu) = instUnitInstanceOf iu +nodeKeyUnitId (NodeKey_Module mk) = mnkUnitId mk +nodeKeyUnitId (NodeKey_Link uid) = uid + +nodeKeyModName :: NodeKey -> Maybe ModuleName +nodeKeyModName (NodeKey_Module mk) = Just (gwib_mod $ mnkModuleName mk) +nodeKeyModName _ = Nothing + +type ModNodeKey = ModuleNameWithIsBoot +data ModNodeKeyWithUid = ModNodeKeyWithUid { mnkModuleName :: !ModuleNameWithIsBoot + , mnkUnitId :: !UnitId } deriving (Eq, Ord) + +instance Outputable ModNodeKeyWithUid where + ppr (ModNodeKeyWithUid mnwib uid) = ppr uid <> colon <> ppr mnwib + +msKey :: ModSummary -> ModNodeKeyWithUid +msKey ms = ModNodeKeyWithUid (ms_mnwib ms) (ms_unitid ms) + +-------------------------------------------------------------------------------- +-- ** Internal node representation (exposed) +-------------------------------------------------------------------------------- + +type SummaryNode = Node Int ModuleGraphNode + +summaryNodeKey :: SummaryNode -> Int +summaryNodeKey = node_key + +summaryNodeSummary :: SummaryNode -> ModuleGraphNode +summaryNodeSummary = node_payload + +-------------------------------------------------------------------------------- +-- * Misc utilities +-------------------------------------------------------------------------------- + +showModMsg :: DynFlags -> Bool -> ModuleGraphNode -> SDoc +showModMsg dflags _ (LinkNode {}) = + let staticLink = case ghcLink dflags of + LinkStaticLib -> True + _ -> False + + platform = targetPlatform dflags + arch_os = platformArchOS platform + exe_file = exeFileName arch_os staticLink (outputFile_ dflags) + in text exe_file +showModMsg _ _ (InstantiationNode _uid indef_unit) = + ppr $ instUnitInstanceOf indef_unit +showModMsg dflags recomp (ModuleNode _ mod_summary) = + if gopt Opt_HideSourcePaths dflags + then text mod_str + else hsep $ + [ text (mod_str ++ replicate (max 0 (16 - length mod_str)) ' ') + , char '(' + , text (op $ msHsFilePath mod_summary) <> char ',' + , message, char ')' ] + + where + op = normalise + mod_str = moduleNameString (moduleName (ms_mod mod_summary)) ++ + hscSourceString (ms_hsc_src mod_summary) + dyn_file = op $ msDynObjFilePath mod_summary + obj_file = op $ msObjFilePath mod_summary + files = [ obj_file ] + ++ [ dyn_file | gopt Opt_BuildDynamicToo dflags ] + ++ [ "interpreted" | gopt Opt_ByteCodeAndObjectCode dflags ] + message = case backendSpecialModuleSource (backend dflags) recomp of + Just special -> text special + Nothing -> foldr1 (\ofile rest -> ofile <> comma <+> rest) (map text files) + +-------------------------------------------------------------------------------- +-- * Internal methods for module graph +-- +-- These are *really* meant to be internal! +-- Don't expose them without careful consideration about the invariants +-- described in the export list haddocks. +-------------------------------------------------------------------------------- + +newtype NodeMap a = NodeMap { unNodeMap :: Map.Map NodeKey a } + deriving (Functor, Traversable, Foldable) + +mkTransDeps :: [ModuleGraphNode] -> (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) +mkTransDeps = first graphReachability {- module graph is acyclic -} . moduleGraphNodes False + +extendMG' :: ModuleGraph -> ModuleGraphNode -> ModuleGraph +extendMG' mg = \case + InstantiationNode uid depUnitId -> extendMGInst mg uid depUnitId + ModuleNode deps ms -> extendMG mg deps ms + LinkNode deps uid -> extendMGLink mg uid deps + +-- | Add an ExtendedModSummary to ModuleGraph. Assumes that the new ModSummary is +-- not an element of the ModuleGraph. +extendMG :: ModuleGraph -> [NodeKey] -> ModSummary -> ModuleGraph +extendMG ModuleGraph{..} deps ms = ModuleGraph + { mg_mss = ModuleNode deps ms : mg_mss + , mg_graph = mkTransDeps (ModuleNode deps ms : mg_mss) + } + +extendMGInst :: ModuleGraph -> UnitId -> InstantiatedUnit -> ModuleGraph +extendMGInst mg uid depUnitId = mg + { mg_mss = InstantiationNode uid depUnitId : mg_mss mg + } + +extendMGLink :: ModuleGraph -> UnitId -> [NodeKey] -> ModuleGraph +extendMGLink mg uid nks = mg { mg_mss = LinkNode nks uid : mg_mss mg } ===================================== compiler/GHC/Unit/Module/ModSummary.hs ===================================== @@ -24,12 +24,14 @@ module GHC.Unit.Module.ModSummary , msDynObjFileOsPath , msDeps , isBootSummary + , isTemplateHaskellOrQQNonBoot , findTarget ) where import GHC.Prelude +import qualified GHC.LanguageExtensions as LangExt import GHC.Hs import GHC.Driver.DynFlags @@ -163,6 +165,12 @@ msDynObjFileOsPath ms = ml_dyn_obj_file_ospath (ms_location ms) isBootSummary :: ModSummary -> IsBootInterface isBootSummary ms = if ms_hsc_src ms == HsBootFile then IsBoot else NotBoot +isTemplateHaskellOrQQNonBoot :: ModSummary -> Bool +isTemplateHaskellOrQQNonBoot ms = + (xopt LangExt.TemplateHaskell (ms_hspp_opts ms) + || xopt LangExt.QuasiQuotes (ms_hspp_opts ms)) && + (isBootSummary ms == NotBoot) + ms_mnwib :: ModSummary -> ModuleNameWithIsBoot ms_mnwib ms = GWIB (ms_mod_name ms) (isBootSummary ms) @@ -206,4 +214,3 @@ findTarget ms ts = _ `matches` _ = False - ===================================== docs/users_guide/exts/primitives.rst ===================================== @@ -322,7 +322,7 @@ Unlifted Newtypes Enable the use of newtypes over types with non-lifted runtime representations. GHC implements an :extension:`UnliftedNewtypes` extension as specified in -`the GHC proposal #98 `_. +`the GHC Proposal #98 `_. :extension:`UnliftedNewtypes` relaxes the restrictions around what types can appear inside of a ``newtype``. For example, the type :: @@ -397,7 +397,7 @@ Unlifted Datatypes result kind. GHC implements the :extension:`UnliftedDatatypes` extension as specified in -`the GHC proposal #265 `_. +`the GHC Proposal #265 `_. :extension:`UnliftedDatatypes` relaxes the restrictions around what result kinds are allowed in data declarations. For example, the type :: ===================================== docs/users_guide/exts/rewrite_rules.rst ===================================== @@ -229,7 +229,7 @@ From a semantic point of view: because ``y`` can match against ``0``. - GHC implements **higher order matching** as described by - `GHC proposal #555 `_. + `GHC Proposal #555 `_. When a pattern variable is applied to distinct locally bound variables it forms what we call a **higher order pattern**. When matching, higher order patterns are treated like pattern variables, but they are ===================================== docs/users_guide/exts/stolen_syntax.rst ===================================== @@ -28,8 +28,8 @@ The following syntax is stolen: single: forall Stolen (in types) by default (see :ref:`infelicities-lexical`). ``forall`` is - a reserved keyword and never a type variable, in accordance with `GHC Proposal #43 - `__. + a reserved keyword and never a type variable, in accordance with `GHC Proposal #193 + `__. ``mdo`` ===================================== docs/users_guide/exts/strict.rst ===================================== @@ -528,7 +528,7 @@ that (SPLIT-STRICT) uses a bang-pattern in the ``case`` in the desugared right-h Note that rule (CASE) applies only when any of the *binders* is unlifted; it is irrelevant whether the binding *itself* is unlifted (see -`GHC proposal #35 `__). +`GHC Proposal #35 `__). For example (see :ref:`primitives`):: let (# a::Int, b::Bool #) = e in body ===================================== docs/users_guide/runtime_control.rst ===================================== @@ -1391,7 +1391,7 @@ and can be controlled by the following flags. The default for this flag is currently ``--read-tix-file=yes`` but will change to ``-read-tix-file=no`` in a future version of GHC according to the accepted - `GHC proposal 612 `__. + `GHC Proposal 612 `__. .. rts-flag:: --write-tix-file= ===================================== docs/users_guide/using-warnings.rst ===================================== @@ -1546,7 +1546,7 @@ of ``-W(no-)*``. The use of ``*`` to denote the kind of inhabited types relies on the :extension:`StarIsType` extension, which in a future release will be turned off by default and then possibly removed. The reasons for this and - the deprecation schedule are described in `GHC proposal #143 + the deprecation schedule are described in `GHC Proposal #143 `__. This warning allows to detect such uses of ``*`` before the actual ===================================== docs/users_guide/using.rst ===================================== @@ -752,7 +752,7 @@ search path (see :ref:`search-path`). GHC Jobserver Protocol ~~~~~~~~~~~~~~~~~~~~~~ -The GHC Jobserver Protocol was specified in `GHC proposal #540 `__. +The GHC Jobserver Protocol was specified in `GHC Proposal #540 `__. This protocol allows a server to dynamically invoke many instances of a client process, ===================================== hadrian/src/Hadrian/Utilities.hs ===================================== @@ -7,7 +7,7 @@ module Hadrian.Utilities ( quote, yesNo, parseYesNo, zeroOne, -- * FilePath manipulation - unifyPath, (-/-), makeRelativeNoSysLink, + unifyPath, (-/-), makeRelativeNoSysLink, makeAbsolute, -- * Accessing Shake's type-indexed map insertExtra, lookupExtra, userSetting, @@ -57,6 +57,7 @@ import qualified System.Directory.Extra as IO import qualified System.Info.Extra as IO import qualified System.IO as IO import System.IO.Error (isPermissionError) +import qualified System.FilePath.Posix as Posix -- | Extract a value from a singleton list, or terminate with an error message -- if the list does not contain exactly one value. @@ -136,7 +137,17 @@ zeroOne True = "1" unifyPath :: FilePath -> FilePath unifyPath = toStandard . normaliseEx +{- Note [Absolute paths and MSYS] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +When dealing with absolute paths in Hadrian, we opt to always use Unix-style +forward slashes for separating paths. +This is because, on Windows, the MSYS toolchain can reliably handle paths such +as /c/foo, while it occasionally falls over on paths of the form C:\foo. +-} + -- | Combine paths with a forward slash regardless of platform. +-- +-- See Note [Absolute paths and MSYS]. (-/-) :: FilePath -> FilePath -> FilePath _ -/- b | isAbsolute b && not (isAbsolute $ tail b) = b "" -/- b = b @@ -146,6 +157,16 @@ a -/- b infixr 6 -/- +-- | Like 'System.Directory.makeAbsolute' from @directory@, but always +-- using forward slashes. +-- +-- See Note [Absolute paths and MSYS]. +makeAbsolute :: FilePath -> IO FilePath +makeAbsolute fp = do + cwd <- IO.getCurrentDirectory + let fp' = cwd -/- fp + return $ Posix.normalise fp' + -- | This is like Posix makeRelative, but assumes no sys links in the input -- paths. This allows the result to start with possibly many "../"s. Input -- paths must both be relative, or be on the same drive ===================================== hadrian/src/Rules/CabalReinstall.hs ===================================== @@ -55,10 +55,10 @@ cabalBuildRules = do distDir <- Context.distDir (vanillaContext Stage1 rts) let rtsIncludeDir = distDir -/- "include" - libdir <- liftIO . IO.makeAbsolute =<< stageLibPath Stage1 - work_dir <- liftIO $ IO.makeAbsolute $ root -/- "stage-cabal" + libdir <- liftIO . makeAbsolute =<< stageLibPath Stage1 + work_dir <- liftIO $ makeAbsolute $ root -/- "stage-cabal" let outputDir = work_dir -/- "bin" - includeDir <- liftIO $ IO.makeAbsolute rtsIncludeDir + includeDir <- liftIO $ makeAbsolute rtsIncludeDir createDirectory outputDir @@ -95,7 +95,7 @@ cabalBuildRules = do -- Just symlink these for now -- TODO: build these with cabal as well forM_ iserv_targets $ \(_bin_pkg,bin_path') -> do - bin_path <- liftIO $ IO.makeAbsolute bin_path' + bin_path <- liftIO $ makeAbsolute bin_path' let orig_filename = takeFileName bin_path output_file = outputDir -/- orig_filename liftIO $ do ===================================== hadrian/src/Rules/Test.hs ===================================== @@ -195,7 +195,7 @@ testRules = do -- get relative path for the given program in the given stage let relative_path_stage s p = programPath =<< programContext s p let make_absolute rel_path = do - abs_path <- liftIO (IO.makeAbsolute rel_path) + abs_path <- liftIO (makeAbsolute rel_path) fixAbsolutePathOnWindows abs_path rel_ghc_pkg <- relative_path_stage Stage1 ghcPkg ===================================== hadrian/src/Settings/Builders/Cabal.hs ===================================== @@ -11,7 +11,6 @@ import Settings.Builders.Common import qualified Settings.Builders.Common as S import Control.Exception (assert) import qualified Data.Set as Set -import System.Directory import Settings.Program (programContext) import GHC.Toolchain (ccLinkProgram, tgtCCompilerLink) import GHC.Toolchain.Program (prgFlags) ===================================== hadrian/src/Settings/Builders/Ghc.hs ===================================== @@ -12,7 +12,6 @@ import Settings.Warnings import qualified Context as Context import Rules.Libffi (libffiName) import qualified Data.Set as Set -import System.Directory import Data.Version.Extra ghcBuilderArgs :: Args ===================================== rts/IOManager.c ===================================== @@ -110,7 +110,6 @@ parseIOManagerFlag(const char *iomgrstr, IO_MANAGER_FLAG *flag) #else return IOManagerUnavailable; #endif - *flag = IO_MNGR_FLAG_MIO; } else if (strcmp("winio", iomgrstr) == 0) { #if defined(IOMGR_ENABLED_WINIO) ===================================== rts/Interpreter.c ===================================== @@ -1785,7 +1785,6 @@ run_BCO: case bci_TESTLT_P: { unsigned int discr = BCO_NEXT; int failto = BCO_GET_LARGE_ARG; - ASSERT(discr <= TAG_MASK); StgClosure* con = UNTAG_CLOSURE((StgClosure*)SpW(0)); if (GET_TAG(con) >= discr) { bciPtr = failto; @@ -1796,7 +1795,6 @@ run_BCO: case bci_TESTEQ_P: { unsigned int discr = BCO_NEXT; int failto = BCO_GET_LARGE_ARG; - ASSERT(discr <= TAG_MASK); StgClosure* con = UNTAG_CLOSURE((StgClosure*)SpW(0)); if (GET_TAG(con) != discr) { bciPtr = failto; ===================================== rts/Linker.c ===================================== @@ -1118,7 +1118,7 @@ freePreloadObjectFile (ObjectCode *oc) */ void freeObjectCode (ObjectCode *oc) { - IF_DEBUG(linker, ocDebugBelch(oc, "start\n")); + IF_DEBUG(linker, ocDebugBelch(oc, "freeObjectCode: start\n")); // Run finalizers if (oc->type == STATIC_OBJECT && ===================================== rts/linker/MMap.c ===================================== @@ -351,12 +351,7 @@ mmapInRegion ( if (result == NULL) { // The mapping failed return NULL; - } else if (result < region->start) { - // Uh oh, we assume that mmap() will only give us a - // an address at or after the requested address. - // Try again. - p = (uint8_t *) result + bytes; - } else if (result < region->end) { + } else if (result >= region->start && result < region->end) { // Success! region->last = (uint8_t *) result + bytes; return result; @@ -364,17 +359,23 @@ mmapInRegion ( // We failed to find a suitable mapping munmap(result, bytes); reportMemoryMap(); - errorBelch("mmapForLinker: failed to mmap() memory below 2Gb; " + errorBelch("mmapForLinker: failed to mmap() memory between %p and %p; " "asked for %zu bytes at %p. " "Try specifying an address with +RTS -xm -RTS", - bytes, p); + region->start, region->end, bytes, p); return NULL; - } + } else if (result < region->start) { + // Uh oh, we assume that mmap() will only give us a + // an address at or after the requested address. + // Try bump forward by a bit and try again. + p = (uint8_t *) p + bytes; + } else if (result >= region->end) { + // mmap() gave us too high an address; wrap around and try again + wrapped = true; + p = region->start; + } - // mmap() gave us too high an address; wrap around and try again munmap(result, bytes); - wrapped = true; - p = region->start; } } ===================================== testsuite/tests/ghc-api/downsweep/OldModLocation.hs ===================================== @@ -61,7 +61,7 @@ main = do -- using the 'location' parameter we'd end up using the old location of -- the "B" module in this test. Make sure that doesn't happen. - hPrint stderr $ sort (map (ml_hs_file . ms_location) (mapMaybe moduleGraphNodeModSum nodes)) + hPrint stderr $ sort (map (ml_hs_file . ms_location) (mapMaybe mgNodeModSum $ mgModSummaries' nodes)) writeMod :: [String] -> IO () writeMod src@(head -> stripPrefix "module " -> Just (takeWhile (/=' ') -> mod)) ===================================== testsuite/tests/ghc-api/downsweep/PartialDownsweep.hs ===================================== @@ -171,7 +171,7 @@ go label mods cnd = hsc_env <- getSession (_, nodes) <- liftIO $ downsweep hsc_env mkUnknownDiagnostic Nothing [] [] False - it label $ cnd (mapMaybe moduleGraphNodeModSum nodes) + it label $ cnd (mapMaybe mgNodeModSum $ mgModSummaries' nodes) writeMod :: [String] -> IO () View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/eb1d0fec7fa98dce41af0e812c9ada22ea1a6523...48c9283abcd713104099366b9f7f867ec8ca9299 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/eb1d0fec7fa98dce41af0e812c9ada22ea1a6523...48c9283abcd713104099366b9f7f867ec8ca9299 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 4 21:11:39 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 04 Dec 2024 16:11:39 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25549 Message-ID: <6750c58b859a4_2a612fbcef8176c8@gitlab.mail> Ben Gamari pushed new branch wip/T25549 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25549 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 4 21:27:42 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 04 Dec 2024 16:27:42 -0500 Subject: [Git][ghc/ghc][wip/T25549] 2 commits: base: Reintroduce {Show,Enum} IoSubSystem Message-ID: <6750c94e3552d_2a612f2c0f10193c8@gitlab.mail> Ben Gamari pushed to branch wip/T25549 at Glasgow Haskell Compiler / GHC Commits: aa96dde7 by Ben Gamari at 2024-12-04T16:24:39-05:00 base: Reintroduce {Show,Enum} IoSubSystem To address #25549. - - - - - 4dec7d02 by Ben Gamari at 2024-12-04T16:24:39-05:00 base: Revert GHC.RTS.Flags changes of !9676 Addresses #25549. - - - - - 3 changed files: - libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs - libraries/ghc-internal/src/GHC/Internal/RTS/Flags.hsc - testsuite/tests/interface-stability/base-exports.stdout Changes: ===================================== libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs ===================================== @@ -1,6 +1,7 @@ {-# LANGUAGE Trustworthy #-} -{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE StandaloneDeriving #-} ----------------------------------------------------------------------------- -- | @@ -34,6 +35,8 @@ module GHC.Internal.IO.SubSystem ( ) where import GHC.Internal.Base +import GHC.Internal.Show +import GHC.Internal.Enum #if defined(mingw32_HOST_OS) import GHC.Internal.IO.Unsafe @@ -55,6 +58,10 @@ data IoSubSystem -- native APIs for I/O, including IOCP and RIO. deriving (Eq) +-- N.B. These are currently unused by GHC but is needed for stability of @base at . +deriving instance Enum IoSubSystem +deriving instance Show IoSubSystem + -- | Conditionally execute an action depending on the configured I/O subsystem. -- On POSIX systems always execute the first action. -- On Windows execute the second action if WINIO as active, otherwise fall back to ===================================== libraries/ghc-internal/src/GHC/Internal/RTS/Flags.hsc ===================================== @@ -49,6 +49,7 @@ module GHC.Internal.RTS.Flags , getTickyFlags , getParFlags , getHpcFlags + , getIoManagerFlag ) where #include "Rts.h" @@ -65,6 +66,7 @@ import GHC.Internal.Base import GHC.Internal.Enum import GHC.Internal.Generics (Generic) import GHC.Internal.IO +import GHC.Internal.IO.SubSystem import GHC.Internal.Real import GHC.Internal.Show @@ -166,7 +168,7 @@ data MiscFlags = MiscFlags -- , linkerOptimistic :: Bool , linkerMemBase :: Word -- ^ address to ask the OS for memory for the linker, 0 ==> off - , ioManager :: IoManagerFlag + , ioManager :: IoSubSystem , numIoWorkerThreads :: Word32 } deriving ( Show -- ^ @since base-4.8.0.0 , Generic -- ^ @since base-4.15.0.0 @@ -539,11 +541,14 @@ getMiscFlags = do <*> (toBool <$> (#{peek MISC_FLAGS, linkerAlwaysPic} ptr :: IO CBool)) <*> #{peek MISC_FLAGS, linkerMemBase} ptr - <*> (toEnum . fromIntegral - <$> (#{peek MISC_FLAGS, ioManager} ptr :: IO Word32)) + <*> return GHC.Internal.IO.SubSystem.ioSubSystem <*> (fromIntegral <$> (#{peek MISC_FLAGS, numIoWorkerThreads} ptr :: IO Word32)) +-- | Needed to optimize support for different IO Managers on Windows. +getIoManagerFlag :: IO IoSubSystem +getIoManagerFlag = return GHC.Internal.IO.SubSystem.ioSubSystem + getDebugFlags :: IO DebugFlags getDebugFlags = do let ptr = (#ptr RTS_FLAGS, DebugFlags) rtsFlagsPtr ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -9112,7 +9112,7 @@ module GHC.RTS.Flags where type IoSubSystem :: * data IoSubSystem = IoPOSIX | IoNative type MiscFlags :: * - data MiscFlags = MiscFlags {tickInterval :: RtsTime, installSignalHandlers :: GHC.Types.Bool, installSEHHandlers :: GHC.Types.Bool, generateCrashDumpFile :: GHC.Types.Bool, generateStackTrace :: GHC.Types.Bool, machineReadable :: GHC.Types.Bool, disableDelayedOsMemoryReturn :: GHC.Types.Bool, internalCounters :: GHC.Types.Bool, linkerAlwaysPic :: GHC.Types.Bool, linkerMemBase :: GHC.Types.Word, ioManager :: IoManagerFlag, numIoWorkerThreads :: GHC.Internal.Word.Word32} + data MiscFlags = MiscFlags {tickInterval :: RtsTime, installSignalHandlers :: GHC.Types.Bool, installSEHHandlers :: GHC.Types.Bool, generateCrashDumpFile :: GHC.Types.Bool, generateStackTrace :: GHC.Types.Bool, machineReadable :: GHC.Types.Bool, disableDelayedOsMemoryReturn :: GHC.Types.Bool, internalCounters :: GHC.Types.Bool, linkerAlwaysPic :: GHC.Types.Bool, linkerMemBase :: GHC.Types.Word, ioManager :: IoSubSystem, numIoWorkerThreads :: GHC.Internal.Word.Word32} type ParFlags :: * data ParFlags = ParFlags {nCapabilities :: GHC.Internal.Word.Word32, migrate :: GHC.Types.Bool, maxLocalSparks :: GHC.Internal.Word.Word32, parGcEnabled :: GHC.Types.Bool, parGcGen :: GHC.Internal.Word.Word32, parGcLoadBalancingEnabled :: GHC.Types.Bool, parGcLoadBalancingGen :: GHC.Internal.Word.Word32, parGcNoSyncWithIdle :: GHC.Internal.Word.Word32, parGcThreads :: GHC.Internal.Word.Word32, setAffinity :: GHC.Types.Bool} type ProfFlags :: * @@ -11692,6 +11692,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12515,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/579e9401167ee4d2f47f9b425e90e30b24d43de0...4dec7d02218875cc9540f6bd9ef09213b5cdc7c7 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/579e9401167ee4d2f47f9b425e90e30b24d43de0...4dec7d02218875cc9540f6bd9ef09213b5cdc7c7 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 4 21:29:41 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 04 Dec 2024 16:29:41 -0500 Subject: [Git][ghc/ghc][wip/freebsd] 64 commits: Include diagnostic reason in -fdiagnostics-as-json Message-ID: <6750c9c5ce35e_2a612f2e66fc19516@gitlab.mail> Ben Gamari pushed to branch wip/freebsd at Glasgow Haskell Compiler / GHC Commits: 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - 9b930eb5 by Ben Gamari at 2024-12-04T16:29:09-05:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d71ff9ab by Ben Gamari at 2024-12-04T16:29:32-05:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - d91c2f70 by Ben Gamari at 2024-12-04T16:29:32-05:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 2be3c4f6 by Ben Gamari at 2024-12-04T16:29:32-05:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - 53ea9d14 by Ben Gamari at 2024-12-04T16:29:32-05:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - 30fd3991 by Ben Gamari at 2024-12-04T16:29:32-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - e9fcf27f by Ben Gamari at 2024-12-04T16:29:32-05:00 gitlab-ci: Use system libffi on FreeBSD - - - - - 672fc378 by Ben Gamari at 2024-12-04T16:29:32-05:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - 573ac92c by Ben Gamari at 2024-12-04T16:29:32-05:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - 1b0f99a1 by Ben Gamari at 2024-12-04T16:29:32-05:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 30 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Data/Graph/Directed.hs - + compiler/GHC/Data/Graph/Directed/Internal.hs - + compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Backpack.hs - compiler/GHC/Driver/Config/Parser.hs - compiler/GHC/Driver/Config/StgToCmm.hs - compiler/GHC/Driver/DynFlags.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Hooks.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/MakeFile.hs - compiler/GHC/Driver/Phases.hs - compiler/GHC/Driver/Pipeline/Execute.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/HsToCore/Coverage.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0584a4546924f8a8dfcfc63a3c1ecd960691d533...1b0f99a1a6c3f44511bddffcf11a96d3434ae95b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0584a4546924f8a8dfcfc63a3c1ecd960691d533...1b0f99a1a6c3f44511bddffcf11a96d3434ae95b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 4 23:38:12 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 04 Dec 2024 18:38:12 -0500 Subject: [Git][ghc/ghc][master] 2 commits: Use consistent capitalization for "GHC Proposal" in user guide Message-ID: <6750e7e4a0924_ba5d078e1b4100833@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - 7 changed files: - docs/users_guide/exts/primitives.rst - docs/users_guide/exts/rewrite_rules.rst - docs/users_guide/exts/stolen_syntax.rst - docs/users_guide/exts/strict.rst - docs/users_guide/runtime_control.rst - docs/users_guide/using-warnings.rst - docs/users_guide/using.rst Changes: ===================================== docs/users_guide/exts/primitives.rst ===================================== @@ -322,7 +322,7 @@ Unlifted Newtypes Enable the use of newtypes over types with non-lifted runtime representations. GHC implements an :extension:`UnliftedNewtypes` extension as specified in -`the GHC proposal #98 `_. +`the GHC Proposal #98 `_. :extension:`UnliftedNewtypes` relaxes the restrictions around what types can appear inside of a ``newtype``. For example, the type :: @@ -397,7 +397,7 @@ Unlifted Datatypes result kind. GHC implements the :extension:`UnliftedDatatypes` extension as specified in -`the GHC proposal #265 `_. +`the GHC Proposal #265 `_. :extension:`UnliftedDatatypes` relaxes the restrictions around what result kinds are allowed in data declarations. For example, the type :: ===================================== docs/users_guide/exts/rewrite_rules.rst ===================================== @@ -229,7 +229,7 @@ From a semantic point of view: because ``y`` can match against ``0``. - GHC implements **higher order matching** as described by - `GHC proposal #555 `_. + `GHC Proposal #555 `_. When a pattern variable is applied to distinct locally bound variables it forms what we call a **higher order pattern**. When matching, higher order patterns are treated like pattern variables, but they are ===================================== docs/users_guide/exts/stolen_syntax.rst ===================================== @@ -28,8 +28,8 @@ The following syntax is stolen: single: forall Stolen (in types) by default (see :ref:`infelicities-lexical`). ``forall`` is - a reserved keyword and never a type variable, in accordance with `GHC Proposal #43 - `__. + a reserved keyword and never a type variable, in accordance with `GHC Proposal #193 + `__. ``mdo`` ===================================== docs/users_guide/exts/strict.rst ===================================== @@ -528,7 +528,7 @@ that (SPLIT-STRICT) uses a bang-pattern in the ``case`` in the desugared right-h Note that rule (CASE) applies only when any of the *binders* is unlifted; it is irrelevant whether the binding *itself* is unlifted (see -`GHC proposal #35 `__). +`GHC Proposal #35 `__). For example (see :ref:`primitives`):: let (# a::Int, b::Bool #) = e in body ===================================== docs/users_guide/runtime_control.rst ===================================== @@ -1391,7 +1391,7 @@ and can be controlled by the following flags. The default for this flag is currently ``--read-tix-file=yes`` but will change to ``-read-tix-file=no`` in a future version of GHC according to the accepted - `GHC proposal 612 `__. + `GHC Proposal 612 `__. .. rts-flag:: --write-tix-file= ===================================== docs/users_guide/using-warnings.rst ===================================== @@ -1546,7 +1546,7 @@ of ``-W(no-)*``. The use of ``*`` to denote the kind of inhabited types relies on the :extension:`StarIsType` extension, which in a future release will be turned off by default and then possibly removed. The reasons for this and - the deprecation schedule are described in `GHC proposal #143 + the deprecation schedule are described in `GHC Proposal #143 `__. This warning allows to detect such uses of ``*`` before the actual ===================================== docs/users_guide/using.rst ===================================== @@ -752,7 +752,7 @@ search path (see :ref:`search-path`). GHC Jobserver Protocol ~~~~~~~~~~~~~~~~~~~~~~ -The GHC Jobserver Protocol was specified in `GHC proposal #540 `__. +The GHC Jobserver Protocol was specified in `GHC Proposal #540 `__. This protocol allows a server to dynamically invoke many instances of a client process, View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f7cbffe25cb6c24b4e6083c5a6b35ad19b7a50b2...18d9500d6e7e857536222cba725e1aeb9a7aadd9 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f7cbffe25cb6c24b4e6083c5a6b35ad19b7a50b2...18d9500d6e7e857536222cba725e1aeb9a7aadd9 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 4 23:38:46 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 04 Dec 2024 18:38:46 -0500 Subject: [Git][ghc/ghc][master] Revert "rts/Interpreter: Assert that TEST*_P discriminators are valid" Message-ID: <6750e80633439_ba5d092e1e010539b@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - 1 changed file: - rts/Interpreter.c Changes: ===================================== rts/Interpreter.c ===================================== @@ -1785,7 +1785,6 @@ run_BCO: case bci_TESTLT_P: { unsigned int discr = BCO_NEXT; int failto = BCO_GET_LARGE_ARG; - ASSERT(discr <= TAG_MASK); StgClosure* con = UNTAG_CLOSURE((StgClosure*)SpW(0)); if (GET_TAG(con) >= discr) { bciPtr = failto; @@ -1796,7 +1795,6 @@ run_BCO: case bci_TESTEQ_P: { unsigned int discr = BCO_NEXT; int failto = BCO_GET_LARGE_ARG; - ASSERT(discr <= TAG_MASK); StgClosure* con = UNTAG_CLOSURE((StgClosure*)SpW(0)); if (GET_TAG(con) != discr) { bciPtr = failto; View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/dd95940639fd198f97fb3f44e84494eaca721788 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/dd95940639fd198f97fb3f44e84494eaca721788 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 4 23:39:38 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 04 Dec 2024 18:39:38 -0500 Subject: [Git][ghc/ghc][master] rts/IOManager: Drop dead code Message-ID: <6750e83a1df3f_ba5d05e013c109862@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 1 changed file: - rts/IOManager.c Changes: ===================================== rts/IOManager.c ===================================== @@ -110,7 +110,6 @@ parseIOManagerFlag(const char *iomgrstr, IO_MANAGER_FLAG *flag) #else return IOManagerUnavailable; #endif - *flag = IO_MNGR_FLAG_MIO; } else if (strcmp("winio", iomgrstr) == 0) { #if defined(IOMGR_ENABLED_WINIO) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cad6fede4252aeff3a0a93e81c2188a825ab39c6 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cad6fede4252aeff3a0a93e81c2188a825ab39c6 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 00:42:40 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 04 Dec 2024 19:42:40 -0500 Subject: [Git][ghc/ghc][wip/CLC208] 101 commits: Add regression test for #16234 Message-ID: <6750f700d7b4b_3084bf31e70096077@gitlab.mail> Ben Gamari pushed to branch wip/CLC208 at Glasgow Haskell Compiler / GHC Commits: fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - 3b6463e8 by Ben Gamari at 2024-12-04T19:36:38-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 355e6d36 by Ben Gamari at 2024-12-04T19:40:10-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 40c89b97 by Ben Gamari at 2024-12-04T19:41:39-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 6e888281 by Ben Gamari at 2024-12-04T19:41:41-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - 30 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - .gitlab/merge_request_templates/Default.md - compile_flags.txt - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/X86/CodeGen.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Data/Graph/Directed.hs - + compiler/GHC/Data/Graph/Directed/Internal.hs - + compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Backpack.hs - compiler/GHC/Driver/Config/Parser.hs - compiler/GHC/Driver/Config/StgToCmm.hs - compiler/GHC/Driver/DynFlags.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Hooks.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ee3e89d23478f43d74b0fc37e230ca849efd360d...6e8882810976ce9c3d8b54551e710d72fcf0addb -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ee3e89d23478f43d74b0fc37e230ca849efd360d...6e8882810976ce9c3d8b54551e710d72fcf0addb You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 00:43:28 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 04 Dec 2024 19:43:28 -0500 Subject: [Git][ghc/ghc][wip/CLC208] 3 commits: base: Introduce Data.Bounded Message-ID: <6750f730e8b0a_3084bf31e70099112@gitlab.mail> Ben Gamari pushed to branch wip/CLC208 at Glasgow Haskell Compiler / GHC Commits: 5c4ecd35 by Ben Gamari at 2024-12-04T19:43:22-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - e32005aa by Ben Gamari at 2024-12-04T19:43:22-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 436d2cd5 by Ben Gamari at 2024-12-04T19:43:22-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - 8 changed files: - libraries/base/base.cabal.in - libraries/base/changelog.md - + libraries/base/src/Data/Bounded.hs - libraries/base/src/Data/Enum.hs - 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 Changes: ===================================== libraries/base/base.cabal.in ===================================== @@ -46,8 +46,10 @@ Library , Data.Bifoldable1 , Data.Bifunctor , Data.Bitraversable + , Data.Bounded , Data.Char , Data.Complex + , Data.Enum , Data.Fixed , Data.Foldable1 , Data.Functor.Classes @@ -95,7 +97,6 @@ Library , Data.Dynamic , Data.Either , Data.Eq - , Data.Enum , Data.Foldable , Data.Function , Data.Functor ===================================== libraries/base/changelog.md ===================================== @@ -7,6 +7,8 @@ * `Data.List.NonEmpty.{init,last,tails1}` are now defined using only total functions (rather than partial ones). ([CLC proposal #293](https://github.com/haskell/core-libraries-committee/issues/293)) ## 4.21.0.0 *TBA* + * Introduce `Data.Bounded` module exporting the `Bounded` typeclass (finishing [CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) + * Deprecate export of `Bounded` class from `Data.Enum` ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * `GHC.Desugar` has been deprecated and should be removed in GHC 9.14. ([CLC proposal #216](https://github.com/haskell/core-libraries-committee/issues/216)) * Add a `readTixFile` field to the `HpcFlags` record in `GHC.RTS.Flags` ([CLC proposal #276](https://github.com/haskell/core-libraries-committee/issues/276)) * Add `compareLength` to `Data.List` and `Data.List.NonEmpty` ([CLC proposal #257](https://github.com/haskell/core-libraries-committee/issues/257)) @@ -51,8 +53,9 @@ `ioError` to prevent leaking the implementation of these error functions into the callstack. -## 4.20.0.0 May 2024 +## 4.20.0.0 *May 2024* * Shipped with GHC 9.10.1 + * Introduce `Data.Enum` module exporting both `Enum` and `Bounded`. Note that the export of `Bounded` will be deprecated in a future release ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * Deprecate `GHC.Pack` ([#21461](https://gitlab.haskell.org/ghc/ghc/-/issues/21461)) * Export `foldl'` from `Prelude` ([CLC proposal #167](https://github.com/haskell/core-libraries-committee/issues/167)) * The top-level handler for uncaught exceptions now displays the output of `displayException` rather than `show` ([CLC proposal #198](https://github.com/haskell/core-libraries-committee/issues/198)) ===================================== libraries/base/src/Data/Bounded.hs ===================================== @@ -0,0 +1,25 @@ +{-# LANGUAGE Safe #-} +{-# LANGUAGE NoImplicitPrelude #-} + +----------------------------------------------------------------------------- +-- | +-- Module : Data.Bounded +-- Copyright : (c) The University of Glasgow, 1992-2002 +-- License : see libraries/base/LICENSE +-- +-- Maintainer : cvs-ghc at haskell.org +-- Stability : stable +-- Portability : non-portable (GHC extensions) +-- +-- The 'Bounded' class. +-- +-- @since 4.22.0.0 +-- +----------------------------------------------------------------------------- + +module Data.Bounded + ( Bounded(..) + ) where + +import GHC.Enum + ===================================== libraries/base/src/Data/Enum.hs ===================================== @@ -1,7 +1,8 @@ {-# LANGUAGE Safe #-} +{-# LANGUAGE NoImplicitPrelude #-} +----------------------------------------------------------------------------- -- | --- -- Module : Data.Enum -- Copyright : (c) The University of Glasgow, 1992-2002 -- License : see libraries/base/LICENSE @@ -10,12 +11,16 @@ -- Stability : stable -- Portability : non-portable (GHC extensions) -- --- The 'Enum' and 'Bounded' classes. +-- The 'Enum' class. +-- +-- @since 4.20.0.0 -- +----------------------------------------------------------------------------- module Data.Enum - (Bounded(..), - Enum(..) - ) where + ( Enum(..) + , {-# DEPRECATED "Bounded should be imported from Data.Bounded" #-} + Bounded(..) + ) where import GHC.Internal.Enum ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6e8882810976ce9c3d8b54551e710d72fcf0addb...436d2cd58bce2e468d51e254ded95479b1791165 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6e8882810976ce9c3d8b54551e710d72fcf0addb...436d2cd58bce2e468d51e254ded95479b1791165 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 00:49:18 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 04 Dec 2024 19:49:18 -0500 Subject: [Git][ghc/ghc][wip/T25549] 22 commits: ghc-experimental: expose GHC.RTS.Flags, GHC.Stats Message-ID: <6750f88e8f125_3084bf34ced410495e@gitlab.mail> Ben Gamari pushed to branch wip/T25549 at Glasgow Haskell Compiler / GHC Commits: 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - 49225652 by Ben Gamari at 2024-12-04T19:48:22-05:00 base: Reintroduce {Show,Enum} IoSubSystem To address #25549. - - - - - ddf88d87 by Ben Gamari at 2024-12-04T19:48:31-05:00 base: Revert GHC.RTS.Flags changes of !9676 Addresses #25549. - - - - - 24 changed files: - .gitlab-ci.yml - .gitlab/ci.sh - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/SysTools/Process.hs - compiler/GHC/Tc/Errors/Ppr.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Tc/Gen/Bind.hs - compiler/GHC/Types/Error/Codes.hs - compiler/GHC/Unit/Module/Graph.hs - compiler/GHC/Unit/Module/ModSummary.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/using-warnings.rst - hadrian/bootstrap/plan-9_10_1.json - hadrian/bootstrap/plan-9_6_1.json The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4dec7d02218875cc9540f6bd9ef09213b5cdc7c7...ddf88d8730fda1d93090c1392045b98fd3e3d42c -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4dec7d02218875cc9540f6bd9ef09213b5cdc7c7...ddf88d8730fda1d93090c1392045b98fd3e3d42c You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 08:27:50 2024 From: gitlab at gitlab.haskell.org (sheaf (@sheaf)) Date: Thu, 05 Dec 2024 03:27:50 -0500 Subject: [Git][ghc/ghc][wip/T24359] split up SPECIALISE pragmas in GHC.Internal.Float Message-ID: <675164067c523_37c7ac4e265438145@gitlab.mail> sheaf pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: 6f9fa3be by sheaf at 2024-12-05T09:27:45+01:00 split up SPECIALISE pragmas in GHC.Internal.Float - - - - - 1 changed file: - libraries/ghc-internal/src/GHC/Internal/Float.hs Changes: ===================================== libraries/ghc-internal/src/GHC/Internal/Float.hs ===================================== @@ -1217,8 +1217,8 @@ floatToDigits base x = -- Converting from an Integer to a RealFloat ------------------------------------------------------------------------ -{-# SPECIALISE integerToBinaryFloat' :: Integer -> Float, - Integer -> Double #-} +{-# SPECIALISE integerToBinaryFloat' :: Integer -> Float #-} +{-# SPECIALISE integerToBinaryFloat' :: Integer -> Double #-} -- | Converts a positive integer to a floating-point value. -- -- The value nearest to the argument will be returned. @@ -1386,8 +1386,8 @@ Float or Double exploiting the known floatRadix and avoiding divisions as much as possible. -} -{-# SPECIALISE fromRat'' :: Int -> Int -> Integer -> Integer -> Float, - Int -> Int -> Integer -> Integer -> Double #-} +{-# SPECIALISE fromRat'' :: Int -> Int -> Integer -> Integer -> Float #-} +{-# SPECIALISE fromRat'' :: Int -> Int -> Integer -> Integer -> Double #-} fromRat'' :: RealFloat a => Int -> Int -> Integer -> Integer -> a -- Invariant: n and d strictly positive fromRat'' minEx@(I# me#) mantDigs@(I# md#) n d = View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/6f9fa3beed8a1d9fc19ad6a2b6ec477b45448342 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/6f9fa3beed8a1d9fc19ad6a2b6ec477b45448342 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 10:40:53 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Thu, 05 Dec 2024 05:40:53 -0500 Subject: [Git][ghc/ghc][wip/T20264] 170 commits: Reword -fexpose-overloaded-unfoldings docs. Message-ID: <67518335ee97a_f88364300a8596d8@gitlab.mail> Simon Peyton Jones pushed to branch wip/T20264 at Glasgow Haskell Compiler / GHC Commits: cf0deeaf by Andreas Klebinger at 2024-11-02T17:54:52-04:00 Reword -fexpose-overloaded-unfoldings docs. This should make them slightly clearer. Fixes #24844 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 1c21e7d4 by Andreas Klebinger at 2024-11-02T17:55:29-04:00 Compile T25062 simd tests even if we can't run them. Helps avoid them being utterly broken. Fixes #25341 - - - - - 573cad4b by Cheng Shao at 2024-11-02T17:56:04-04:00 Remove unused USE_REPORT_PRELUDE code paths from the tree This patch removes unused `USE_REPORT_PRELUDE` code paths from the tree. They have been present since the first git revision 4fb94ae5e5d632748fa2e6c35e259eccc5a1a3f4, and might have been useful for debugging purposes many years ago, but these code paths are never actually built. Removing these ease maintenance of relevant modules in the future, and also allows us to get rid of `CPP` extension in those modules as a nice byproduct. - - - - - 97f600c6 by Hassan Al-Awwadi at 2024-11-04T15:52:12+00:00 Refactored BooleanFormula to be in line with TTG (#21592) There are two parts to this commit. * We moved the definition of BooleanFormula over to L.H.S.BooleanFormula * We parameterized the BooleanFormula over the pass The GHC specific details of BooleanFormula remain in Ghc.Data.BooleanFormula. Because its parameterized over the pass its no longer a functor or traversable, but we defined bfMap and bfTraverse for the cases where we needed fmap and traverse originally. Most other changes are just churn. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot ------------------------- - - - - - d4fd3580 by Andreas Klebinger at 2024-11-05T07:36:16-05:00 ghc-heap: Fix incomplete selector warnings. Use utility functions instead of selectors to read partial attributes. Part of fixing #25380. - - - - - fdd9f62a by Peter Trommler at 2024-11-05T07:36:51-05:00 PPC NCG: Implement fmin and fmax - - - - - 8e217256 by Mike Pilgrem at 2024-11-07T04:34:20-05:00 Re CLC #293 - Don't specify Data.List.NonEmpty in terms of partial See https://github.com/haskell/core-libraries-committee/issues/293 `List.init` had already been driven out of `tails1` by 21fc180bec93d964a7f4ffdf2429ef6f74b49ab6 but this specification also avoided partial `fromList`, so I preferred it. The `changelog.md` for `base` is updated, with an entry added under `base-4.22.0.0`. - - - - - 346e4cd1 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: copy zip files into the correct directory Fixes #25446 - - - - - bbdbe225 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: Sign .gz bindists too Fixes #25447 - - - - - 0c722e14 by Hécate Kleidukos at 2024-11-07T04:35:37-05:00 hadrian: Enforce the usage of GHC >=9.8.1 for ghci-multi GHC 9.6 no good when it comes to multi-repl stuff, despite being well within the range of n-2 releases for bootstrapping, when the script was adapted to load haddock, in !12851 - - - - - d8f8a1c3 by Sylvain Henry at 2024-11-07T19:27:46-05:00 Handle the special ghc-prim:GHC.Prim module in the compiler Before this patch, some custom hacks were necessary in ghc-prim's Setup.hs to register the GHC.Prim (virtual) module and in Hadrian to generate haddocks properly. In this patch we special-case this module in the compiler itself instead (which it already is, see ghcPrimIface in GHC.Iface.Load). From Cabal/Hadrian's perspective GHC.Prim is now just a normal autogenerated module. This simplification is worthwhile on its own. It was found while looking into the work needed for #24453 which aims to merge ghc-prim, ghc-bignum, and ghc-internal. It's also one step closer to remove ghc-prim's custom setup. - - - - - a55adc8e by Cheng Shao at 2024-11-07T19:28:22-05:00 Clean up obsolete CPP guarded code paths from the tree This patch cleans up obsolete CPP guarded code paths from the tree. The minimum supported boot GHC version is 9.6, and all the pre-9.6 era code paths can be removed. - - - - - 9ede97f3 by Cheng Shao at 2024-11-07T19:28:58-05:00 Remove obsolete executable wrappers from the tree The executable wrappers are handled by hadrian and bindist Makefile. The various .wrapper scripts in the tree are unused since removal of Make build system, so this patch removes them all. - - - - - 7d42b2df by tristian at 2024-11-07T19:29:40-05:00 TcRnDuplicateDecls now suggests to use the DuplicateRecordFields extension. Fixes: !24627 - - - - - e56ed179 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: normalise some versions in callstacks (cherry picked from commit f230e29f30d0c1c566d4dd251807fcab76a2710e) - - - - - a28fc903 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: use -fhide-source-paths to normalise some backpack tests (cherry picked from commit b19de476bc5ce5c7792e8af1354b94a4286a1a13) - - - - - ed16d303 by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite/haddock: strip version identifiers and unit hashes from html tests (cherry picked from commit fbf0889eadc410d43dd5c1657e320634b6738fa5) - - - - - e45e5836 by Zubin Duggal at 2024-11-11T15:16:36+05:30 haddock: oneshot tests can drop files if they share modtimes. Stop this by including the filename in the key. Ideally we would use `ghc -M` output to do a proper toposort Partially addresses #25372 (cherry picked from commit e78c7ef96e395f1ef41f04790aebecd0409b92b9) - - - - - 9104e6eb by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: fix normalisation of T9930fail so that it doesn't get tripped up by ghc executable (ARGV[0]) differences (cherry picked from commit a79a587e025d42d34bb30e115fc5c7cab6c1e030) - - - - - 2c31264a by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: normalise windows file seperators (cherry picked from commit f858875e03b9609656b542aaaaff85ad0a83878a) - - - - - 2807f91b by Zubin Duggal at 2024-11-11T15:21:30+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites - - - - - c02add17 by Ben Gamari at 2024-11-12T01:22:11-05:00 configure: Check version number validity Here we verify the previously informal invariant that stable release version numbers must have three components, preventing costly failed releases. Specifically, the check fails in the following scenarios: * `version=9.13` while `RELEASE=YES` since this would imply a release made from an unstable branch * `version=9.13.0` since unstable versions should only have two components * `version=9.12` since this has the wrong number of version components for a stable branch Fixes #25390. - - - - - 747fd322 by Teo Camarasu at 2024-11-12T01:22:49-05:00 docs: link to #14474 in the template-haskell docs - - - - - 6d96bb62 by Zubin Duggal at 2024-11-12T01:23:25-05:00 testsuite: normalise execvp vs exec differences in process tests Fixes #25431 - - - - - 502e6711 by Torsten Schmits at 2024-11-12T01:24:01-05:00 fix test lint that accumulated while the checks were broken I didn't fix the issues flagged by the #ifdef linter because it were so many that it seemed like the rule has become obsolete. - - - - - 223a4cb5 by Torsten Schmits at 2024-11-12T01:24:02-05:00 test driver: fix file collection for regex linters When a testsuite linter is executed with the `tracked` strategy, the driver runs `git ls-tree` to collect eligible files. This appears to have ceased producing any paths – `ls-tree` restricts its results to the current working directory, which is `testsuite/tests/linters` in this case. As a quick fix, this patch changes the working directory to match expectations. - - - - - 9ad9ac63 by Alan Zimmerman at 2024-11-12T01:24:39-05:00 EPA: Capture location of '_' for wild card type binder And keep track of promotion status in HsExplicitTupleTy, so the round-trip ppr test works for it. Updates Haddock output too, using the PromotionFlag in HsExplicitTupleTy. Closes #25454 - - - - - c37b96fa by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix setImmediate() implementation for Cloudflare Workers This patch fixes setImmediate() implementation for Cloudflare Workers in the wasm backend's js prelude script. Cloudflare Workers doesn't support the MessageChannel API, and we use a setTimeout() based fallback implementation in this case. - - - - - bea8ea4c by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix FinalizationRegistry logic for Cloudflare Workers This patch fixes FinalizationRegistry related logic for Cloudflare Workers in wasm backend js post linker. Cloudflare Workers doesn't support FinalizationRegistry, in this case we use a dummy implementation that doesn't do anything. - - - - - 00d551bf by Cheng Shao at 2024-11-13T08:48:21-05:00 Remove obsolete cross-port script This patch removes the obsolete cross-port script in the tree. The script was based on the legacy Make build system which has been pruned from the tree long ago. For hadrian, proper support for two-stage bootstrapping onto a new unsupported platform is a work in progress in !11444. - - - - - 75a2eae4 by Cheng Shao at 2024-11-13T08:48:58-05:00 hadrian: fix bindist makefile for wasm32-wasi target This patch fixes one incoherent place between bindist makefile and hadrian logic: I forgot to include wasi/wasm32 in OsSupportsGHCi/ArchSupportsGHCi as well. And this results in incorrect settings file generated after installing the bindist, and "Use interpreter"/"Have interpreter" fields incorrectly have "NO" values where they should be "YES" like --info output of in-tree version. - - - - - 0614abef by Alan Zimmerman at 2024-11-13T08:49:34-05:00 EPA: Correctly capture leading semis in decl list Closes #25467 - - - - - 00d58ae1 by Sebastian Graf at 2024-11-13T15:21:23-05:00 DmdAnal: Make `prompt#` lazy (#25439) This applies the same treatment to `prompt#` as for `catch#`. See `Note [Strictness for mask/unmask/catch/prompt]`. Fixes #25439. - - - - - 93233a66 by Ben Gamari at 2024-11-13T15:21:59-05:00 boot: Do not attempt to update config.sub While Apple ARM hardware was new we found that the autoconf scripts included in some boot packages were too old. As a mitigation for this, we introduced logic in the `boot` script to update the `config.sub` with that from the GHC tree. However, this causes submodules which have `config.sub` committted to appear to be dirty. This is a considerable headache. Now since `config.sub` with full platform support is more common we can remove `boot`'s `config.sub` logic. Fixes #19574. - - - - - fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - ff673479 by Simon Peyton Jones at 2024-11-29T20:38:26+00:00 Start on refactoring Lint Addressing #25445 Does not yet even compile - - - - - 41a99418 by Simon Peyton Jones at 2024-11-29T20:38:26+00:00 Getting there - - - - - 58693d05 by Simon Peyton Jones at 2024-11-29T20:38:26+00:00 Wibbles - - - - - bb89e53b by Simon Peyton Jones at 2024-11-29T20:38:27+00:00 Don't return a kind when linting types - - - - - 2ee04658 by Simon Peyton Jones at 2024-11-29T20:38:27+00:00 Don't clone Ids - - - - - 24fb0470 by Simon Peyton Jones at 2024-11-29T20:38:27+00:00 Wibble - - - - - 8fc1ebcd by Simon Peyton Jones at 2024-11-29T20:38:27+00:00 More improvements - - - - - 985f6b8e by Simon Peyton Jones at 2024-11-29T20:38:27+00:00 Performance-related fixes Addresses #25463 (too much specialisation) and #20825 (Lint is expensive) - - - - - 12ee136c by Simon Peyton Jones at 2024-11-29T20:38:27+00:00 Try not returning gubbins from lintCoercion - - - - - b93049d5 by Simon Peyton Jones at 2024-11-29T20:38:27+00:00 Temporarily switch on Lint in tests/perf/compiler - - - - - fc762b24 by Simon Peyton Jones at 2024-11-29T20:38:28+00:00 lintType no longer returns a type - - - - - 43f782b8 by Simon Peyton Jones at 2024-11-29T20:38:28+00:00 Work in progres on linting applications - - - - - bf4ff999 by Simon Peyton Jones at 2024-11-29T20:38:28+00:00 Lint applications better Notably lint_app2 - - - - - bf9b08bc by Simon Peyton Jones at 2024-11-29T23:50:12+00:00 Improve forallty/forallco - - - - - ad2315ee by Simon Peyton Jones at 2024-11-30T23:43:02+00:00 Wibbles - - - - - f7b87b20 by Simon Peyton Jones at 2024-12-03T09:28:58+00:00 Wibbles - - - - - d755e41c by Joseph Fourment at 2024-12-03T09:51:46+00:00 compiler: introduce type variable unfoldings The plan for #20264 is to introduce let-bound types to have observable sharing in types. To avoid the need to carry an environment when dealing with occurrences of these type variables, we embed the types they're bound to (if any) in a `tv_unfolding :: Maybe Type` attribute. This way, one can look through let-bound type variables using `coreView` and friends. In particular, definitional equality looks through unfoldings. - - - - - ca2799af by Joseph Fourment at 2024-12-03T09:51:46+00:00 simple-opt: don't inline type-lets - - - - - 070398d9 by Joseph Fourment at 2024-12-03T09:51:46+00:00 specialise: fix type-lets in DFun unfoldings During specialisation, a dictionary being specialised gets a new unfolding by turning `DFun \ bndrs -> MkD @<T1> ... @<Tm> <op1> ... <opn>` into `DFun \ spec_bndrs -> MkD @((\ bndrs -> TYPE: <T1>) spec_args) ... ((\ bndrs -> <opn>) spec_args)` which in turns gets beta-reduced into `DFun \ spec_bndrs -> MkD (let { bndrs = spec_args } in TYPE: <T1>) ... (let { bndrs = spec_args } in <opn>)`. Previously, such let binders would immediately be substituted into the type so it didn't cause any issue, but now we want to avoid inlining. Arguments of the form `let { bndrs = spec_args } in TYPE: <T1>` are not considered as type arguments since they're not of the canonical form `TYPE: something`. This commit restores the previous behavior of substituting the specialised type arguments. Alternatively, we could attach some floated type bindings to `DFun`s. - - - - - 9480ca9d by Joseph Fourment at 2024-12-03T09:51:46+00:00 occur-anal: implement occurence analysis for type variables In order to find out let-bound type variables that are used only once, in the hope of inlining them, we need to track type variables as well in the occurrence analiser. Just like Id's, we attach an `OccInfo` to each (immutable) type variable, and we walk into types and coercions to accurately gather occurrences. - - - - - 3f0f375d by Joseph Fourment at 2024-12-03T09:51:46+00:00 simplifier: don't inline type-lets Keep propagating type-lets further down the pipeline, in the simplifier. We also update CallArity, CprAnal, DmdAnal, WorkWrap, and Specialise to ignore type-lets. - - - - - d833a81d by Joseph Fourment at 2024-12-03T09:51:46+00:00 prep: make type-lets pass through CorePrep As a first attempt, ignore type-lets in CorePrep to avoid crashes. However, this is not enough: CorePrep also does some let-floating. If we don't float type-lets along with value-level let-bindings, the latter can float out of the scope of a type variable in use. - - - - - d6cde61f by Joseph Fourment at 2024-12-03T09:51:46+00:00 simple-opt: fix simple_type_bind Also: - Inline small types using a new typeIsSmallEnoughToInline predicate - Inline single-occurrence variables - - - - - ff9a1752 by Joseph Fourment at 2024-12-03T09:51:46+00:00 simple-opt: make beta-reduction use simple_bind_type - - - - - 468b0c5b by Joseph Fourment at 2024-12-03T09:51:46+00:00 iface: add IfaceTypeLetBndr to represent non-top-level type-let binders IfaceLetBndr isn't fit to represent type-let binders, as it includes a bunch of vacuous flags for Ids only. Instead of putting squares in circles, I added a new constructor for type binders. The downside is that it breaks existing iface files, so since we can't bootstrap yet so we have to bootstrap a cherry-picked branch and then checkout again to build with --freeze1. To avoid similar issues in the future, IfaceTyVarInfoItem serialises with a tag despite there being only one constructor for now. - - - - - 7d9c9a42 by Joseph Fourment at 2024-12-03T09:51:46+00:00 dmd-anal: prefix unused variable with _ to avoid warning - - - - - 4196f12c by Joseph Fourment at 2024-12-03T09:51:46+00:00 type: inline unfoldView in sORTKind_maybe - - - - - 05092f45 by Joseph Fourment at 2024-12-03T09:51:46+00:00 tidy: deal with type-lets - - - - - c0b78880 by Joseph Fourment at 2024-12-03T09:51:46+00:00 notes: add Note [Type and coercion lets] - - - - - 4bb9b4e3 by Joseph Fourment at 2024-12-03T09:51:46+00:00 notes: update Note [Comparing nullary type synonyms] to account for type variables While updating backlinks, I noticed the optimisation for type variables could be performed in more places. - - - - - 6822532b by Joseph Fourment at 2024-12-03T09:51:46+00:00 simplifier: inline single-occurring type-lets - - - - - 9a82b0c8 by Joseph Fourment at 2024-12-03T09:51:46+00:00 cleanup: remove NOINLINE on tyVarOccInfo - - - - - fbd0d294 by Simon Peyton Jones at 2024-12-03T09:51:46+00:00 Wibbles - - - - - 5d0c68f1 by Simon Peyton Jones at 2024-12-03T09:58:12+00:00 Wibbles - - - - - 1c9a3bf0 by Simon Peyton Jones at 2024-12-03T09:58:12+00:00 Progress - - - - - e950b7aa by Simon Peyton Jones at 2024-12-03T09:58:12+00:00 Progress - - - - - 0d265cc9 by Simon Peyton Jones at 2024-12-03T09:58:12+00:00 More progress - - - - - a6a9dd48 by Simon Peyton Jones at 2024-12-03T09:59:03+00:00 Progress ...doesn't compile though - - - - - 862e024b by Simon Peyton Jones at 2024-12-03T09:59:03+00:00 Mostly working now - - - - - bb90420a by Simon Peyton Jones at 2024-12-03T09:59:03+00:00 Aggressively create type-lets - - - - - 790fcbcf by Simon Peyton Jones at 2024-12-03T09:59:03+00:00 more progress - - - - - 3a7b4a56 by Simon Peyton Jones at 2024-12-03T09:59:03+00:00 More progress - - - - - fa0f01b3 by Simon Peyton Jones at 2024-12-03T09:59:03+00:00 Temp debug printing - - - - - dd17e7b4 by Simon Peyton Jones at 2024-12-03T09:59:03+00:00 Remove bogus assert - - - - - 4b810ce6 by Simon Peyton Jones at 2024-12-03T09:59:03+00:00 Fix anoher couple of bugs in SimpleOpt and exprIsTrivial - - - - - a543ccf8 by Simon Peyton Jones at 2024-12-03T09:59:03+00:00 Improve zonking of foreign decls to avoid TcTyVars escaping - - - - - f43825c2 by Simon Peyton Jones at 2024-12-04T11:45:30+00:00 Wibbles - - - - - 30 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - .gitlab/merge_request_templates/Default.md - .gitlab/rel_eng/recompress-all - .gitlab/rel_eng/upload.sh - boot - compile_flags.txt - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/PPC/CodeGen.hs - compiler/GHC/CmmToAsm/PPC/Instr.hs - compiler/GHC/CmmToAsm/PPC/Ppr.hs - compiler/GHC/CmmToAsm/Ppr.hs - compiler/GHC/CmmToAsm/X86/CodeGen.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Core.hs - compiler/GHC/Core/Class.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Coercion/Axiom.hs - compiler/GHC/Core/FVs.hs - compiler/GHC/Core/Lint.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2df7352c3ce859c2a2377f01623bdedeb1a16aa8...f43825c29fc3211a3996fb7b111aa61d2f075d4b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2df7352c3ce859c2a2377f01623bdedeb1a16aa8...f43825c29fc3211a3996fb7b111aa61d2f075d4b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 10:51:23 2024 From: gitlab at gitlab.haskell.org (sheaf (@sheaf)) Date: Thu, 05 Dec 2024 05:51:23 -0500 Subject: [Git][ghc/ghc][wip/T24359] split up SPECIALISE pragmas in GHC.Internal.Float and GHC.Internal.Numeric Message-ID: <675185ab7abea_f8836696ae0607eb@gitlab.mail> sheaf pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: 0a1d7ebc by sheaf at 2024-12-05T11:49:41+01:00 split up SPECIALISE pragmas in GHC.Internal.Float and GHC.Internal.Numeric - - - - - 2 changed files: - libraries/ghc-internal/src/GHC/Internal/Float.hs - libraries/ghc-internal/src/GHC/Internal/Numeric.hs Changes: ===================================== libraries/ghc-internal/src/GHC/Internal/Float.hs ===================================== @@ -1217,8 +1217,8 @@ floatToDigits base x = -- Converting from an Integer to a RealFloat ------------------------------------------------------------------------ -{-# SPECIALISE integerToBinaryFloat' :: Integer -> Float, - Integer -> Double #-} +{-# SPECIALISE integerToBinaryFloat' :: Integer -> Float #-} +{-# SPECIALISE integerToBinaryFloat' :: Integer -> Double #-} -- | Converts a positive integer to a floating-point value. -- -- The value nearest to the argument will be returned. @@ -1386,8 +1386,8 @@ Float or Double exploiting the known floatRadix and avoiding divisions as much as possible. -} -{-# SPECIALISE fromRat'' :: Int -> Int -> Integer -> Integer -> Float, - Int -> Int -> Integer -> Integer -> Double #-} +{-# SPECIALISE fromRat'' :: Int -> Int -> Integer -> Integer -> Float #-} +{-# SPECIALISE fromRat'' :: Int -> Int -> Integer -> Integer -> Double #-} fromRat'' :: RealFloat a => Int -> Int -> Integer -> Integer -> a -- Invariant: n and d strictly positive fromRat'' minEx@(I# me#) mantDigs@(I# md#) n d = ===================================== libraries/ghc-internal/src/GHC/Internal/Numeric.hs ===================================== @@ -174,13 +174,16 @@ showInt n0 cs0 -- mutual module deps. {-# SPECIALIZE showEFloat :: - Maybe Int -> Float -> ShowS, + Maybe Int -> Float -> ShowS #-} +{-# SPECIALIZE showEFloat :: Maybe Int -> Double -> ShowS #-} {-# SPECIALIZE showFFloat :: - Maybe Int -> Float -> ShowS, + Maybe Int -> Float -> ShowS #-} +{-# SPECIALIZE showFFloat :: Maybe Int -> Double -> ShowS #-} {-# SPECIALIZE showGFloat :: - Maybe Int -> Float -> ShowS, + Maybe Int -> Float -> ShowS #-} +{-# SPECIALIZE showGFloat :: Maybe Int -> Double -> ShowS #-} -- | Show a signed 'RealFloat' value View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0a1d7ebc96065cc0006ea80947fb2ec32b824e3f -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0a1d7ebc96065cc0006ea80947fb2ec32b824e3f You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 10:51:36 2024 From: gitlab at gitlab.haskell.org (Sebastian Graf (@sgraf812)) Date: Thu, 05 Dec 2024 05:51:36 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25551 Message-ID: <675185b856859_f883669792c616c0@gitlab.mail> Sebastian Graf pushed new branch wip/T25551 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25551 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 14:23:02 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Thu, 05 Dec 2024 09:23:02 -0500 Subject: [Git][ghc/ghc][wip/andreask/prof_docs] 34 commits: driver: Always link against "base" package when one shot linking Message-ID: <6751b746e7ef0_3bb5b21c28d4893a0@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/prof_docs at Glasgow Haskell Compiler / GHC Commits: 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - ac2e26e2 by Andreas Klebinger at 2024-12-05T15:03:20+01:00 Document `-prof` and non `-prof` code being incompatible. Fixes #25518. - - - - - 30 changed files: - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Backpack.hs - compiler/GHC/Driver/Config/Parser.hs - compiler/GHC/Driver/DynFlags.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/Pipeline/Execute.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Parser/HaddockLex.x - compiler/GHC/Parser/Header.hs - compiler/GHC/Parser/Lexer.x - compiler/GHC/Rename/Pat.hs - compiler/GHC/Settings.hs - compiler/GHC/Settings/IO.hs - compiler/GHC/SysTools/Process.hs - compiler/GHC/Tc/Errors/Ppr.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Tc/Gen/Bind.hs - compiler/GHC/Tc/Gen/Expr.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/45e900bee822f258001c24dbcd67b486fdeb964f...ac2e26e278ddffbbc8a08d7274dcfd0a40a30be5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/45e900bee822f258001c24dbcd67b486fdeb964f...ac2e26e278ddffbbc8a08d7274dcfd0a40a30be5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 14:27:57 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Thu, 05 Dec 2024 09:27:57 -0500 Subject: [Git][ghc/ghc][wip/andreask/base_c_fstat_refactor] 138 commits: ghc-internal: strict, unboxed src loc ranges Message-ID: <6751b86d254f4_3bb5b24435cc90753@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/base_c_fstat_refactor at Glasgow Haskell Compiler / GHC Commits: ea458779 by doyougnu at 2024-11-01T18:11:33-04:00 ghc-internal: strict, unboxed src loc ranges - closes: #20449 - See CLC proposal: #55 - - - - - 778ac793 by Kazuki Okamoto at 2024-11-01T18:12:13-04:00 No haddock markup in doctest line - - - - - cf0deeaf by Andreas Klebinger at 2024-11-02T17:54:52-04:00 Reword -fexpose-overloaded-unfoldings docs. This should make them slightly clearer. Fixes #24844 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 1c21e7d4 by Andreas Klebinger at 2024-11-02T17:55:29-04:00 Compile T25062 simd tests even if we can't run them. Helps avoid them being utterly broken. Fixes #25341 - - - - - 573cad4b by Cheng Shao at 2024-11-02T17:56:04-04:00 Remove unused USE_REPORT_PRELUDE code paths from the tree This patch removes unused `USE_REPORT_PRELUDE` code paths from the tree. They have been present since the first git revision 4fb94ae5e5d632748fa2e6c35e259eccc5a1a3f4, and might have been useful for debugging purposes many years ago, but these code paths are never actually built. Removing these ease maintenance of relevant modules in the future, and also allows us to get rid of `CPP` extension in those modules as a nice byproduct. - - - - - 97f600c6 by Hassan Al-Awwadi at 2024-11-04T15:52:12+00:00 Refactored BooleanFormula to be in line with TTG (#21592) There are two parts to this commit. * We moved the definition of BooleanFormula over to L.H.S.BooleanFormula * We parameterized the BooleanFormula over the pass The GHC specific details of BooleanFormula remain in Ghc.Data.BooleanFormula. Because its parameterized over the pass its no longer a functor or traversable, but we defined bfMap and bfTraverse for the cases where we needed fmap and traverse originally. Most other changes are just churn. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot ------------------------- - - - - - d4fd3580 by Andreas Klebinger at 2024-11-05T07:36:16-05:00 ghc-heap: Fix incomplete selector warnings. Use utility functions instead of selectors to read partial attributes. Part of fixing #25380. - - - - - fdd9f62a by Peter Trommler at 2024-11-05T07:36:51-05:00 PPC NCG: Implement fmin and fmax - - - - - 8e217256 by Mike Pilgrem at 2024-11-07T04:34:20-05:00 Re CLC #293 - Don't specify Data.List.NonEmpty in terms of partial See https://github.com/haskell/core-libraries-committee/issues/293 `List.init` had already been driven out of `tails1` by 21fc180bec93d964a7f4ffdf2429ef6f74b49ab6 but this specification also avoided partial `fromList`, so I preferred it. The `changelog.md` for `base` is updated, with an entry added under `base-4.22.0.0`. - - - - - 346e4cd1 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: copy zip files into the correct directory Fixes #25446 - - - - - bbdbe225 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: Sign .gz bindists too Fixes #25447 - - - - - 0c722e14 by Hécate Kleidukos at 2024-11-07T04:35:37-05:00 hadrian: Enforce the usage of GHC >=9.8.1 for ghci-multi GHC 9.6 no good when it comes to multi-repl stuff, despite being well within the range of n-2 releases for bootstrapping, when the script was adapted to load haddock, in !12851 - - - - - d8f8a1c3 by Sylvain Henry at 2024-11-07T19:27:46-05:00 Handle the special ghc-prim:GHC.Prim module in the compiler Before this patch, some custom hacks were necessary in ghc-prim's Setup.hs to register the GHC.Prim (virtual) module and in Hadrian to generate haddocks properly. In this patch we special-case this module in the compiler itself instead (which it already is, see ghcPrimIface in GHC.Iface.Load). From Cabal/Hadrian's perspective GHC.Prim is now just a normal autogenerated module. This simplification is worthwhile on its own. It was found while looking into the work needed for #24453 which aims to merge ghc-prim, ghc-bignum, and ghc-internal. It's also one step closer to remove ghc-prim's custom setup. - - - - - a55adc8e by Cheng Shao at 2024-11-07T19:28:22-05:00 Clean up obsolete CPP guarded code paths from the tree This patch cleans up obsolete CPP guarded code paths from the tree. The minimum supported boot GHC version is 9.6, and all the pre-9.6 era code paths can be removed. - - - - - 9ede97f3 by Cheng Shao at 2024-11-07T19:28:58-05:00 Remove obsolete executable wrappers from the tree The executable wrappers are handled by hadrian and bindist Makefile. The various .wrapper scripts in the tree are unused since removal of Make build system, so this patch removes them all. - - - - - 7d42b2df by tristian at 2024-11-07T19:29:40-05:00 TcRnDuplicateDecls now suggests to use the DuplicateRecordFields extension. Fixes: !24627 - - - - - e56ed179 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: normalise some versions in callstacks (cherry picked from commit f230e29f30d0c1c566d4dd251807fcab76a2710e) - - - - - a28fc903 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: use -fhide-source-paths to normalise some backpack tests (cherry picked from commit b19de476bc5ce5c7792e8af1354b94a4286a1a13) - - - - - ed16d303 by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite/haddock: strip version identifiers and unit hashes from html tests (cherry picked from commit fbf0889eadc410d43dd5c1657e320634b6738fa5) - - - - - e45e5836 by Zubin Duggal at 2024-11-11T15:16:36+05:30 haddock: oneshot tests can drop files if they share modtimes. Stop this by including the filename in the key. Ideally we would use `ghc -M` output to do a proper toposort Partially addresses #25372 (cherry picked from commit e78c7ef96e395f1ef41f04790aebecd0409b92b9) - - - - - 9104e6eb by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: fix normalisation of T9930fail so that it doesn't get tripped up by ghc executable (ARGV[0]) differences (cherry picked from commit a79a587e025d42d34bb30e115fc5c7cab6c1e030) - - - - - 2c31264a by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: normalise windows file seperators (cherry picked from commit f858875e03b9609656b542aaaaff85ad0a83878a) - - - - - 2807f91b by Zubin Duggal at 2024-11-11T15:21:30+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites - - - - - c02add17 by Ben Gamari at 2024-11-12T01:22:11-05:00 configure: Check version number validity Here we verify the previously informal invariant that stable release version numbers must have three components, preventing costly failed releases. Specifically, the check fails in the following scenarios: * `version=9.13` while `RELEASE=YES` since this would imply a release made from an unstable branch * `version=9.13.0` since unstable versions should only have two components * `version=9.12` since this has the wrong number of version components for a stable branch Fixes #25390. - - - - - 747fd322 by Teo Camarasu at 2024-11-12T01:22:49-05:00 docs: link to #14474 in the template-haskell docs - - - - - 6d96bb62 by Zubin Duggal at 2024-11-12T01:23:25-05:00 testsuite: normalise execvp vs exec differences in process tests Fixes #25431 - - - - - 502e6711 by Torsten Schmits at 2024-11-12T01:24:01-05:00 fix test lint that accumulated while the checks were broken I didn't fix the issues flagged by the #ifdef linter because it were so many that it seemed like the rule has become obsolete. - - - - - 223a4cb5 by Torsten Schmits at 2024-11-12T01:24:02-05:00 test driver: fix file collection for regex linters When a testsuite linter is executed with the `tracked` strategy, the driver runs `git ls-tree` to collect eligible files. This appears to have ceased producing any paths – `ls-tree` restricts its results to the current working directory, which is `testsuite/tests/linters` in this case. As a quick fix, this patch changes the working directory to match expectations. - - - - - 9ad9ac63 by Alan Zimmerman at 2024-11-12T01:24:39-05:00 EPA: Capture location of '_' for wild card type binder And keep track of promotion status in HsExplicitTupleTy, so the round-trip ppr test works for it. Updates Haddock output too, using the PromotionFlag in HsExplicitTupleTy. Closes #25454 - - - - - c37b96fa by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix setImmediate() implementation for Cloudflare Workers This patch fixes setImmediate() implementation for Cloudflare Workers in the wasm backend's js prelude script. Cloudflare Workers doesn't support the MessageChannel API, and we use a setTimeout() based fallback implementation in this case. - - - - - bea8ea4c by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix FinalizationRegistry logic for Cloudflare Workers This patch fixes FinalizationRegistry related logic for Cloudflare Workers in wasm backend js post linker. Cloudflare Workers doesn't support FinalizationRegistry, in this case we use a dummy implementation that doesn't do anything. - - - - - 00d551bf by Cheng Shao at 2024-11-13T08:48:21-05:00 Remove obsolete cross-port script This patch removes the obsolete cross-port script in the tree. The script was based on the legacy Make build system which has been pruned from the tree long ago. For hadrian, proper support for two-stage bootstrapping onto a new unsupported platform is a work in progress in !11444. - - - - - 75a2eae4 by Cheng Shao at 2024-11-13T08:48:58-05:00 hadrian: fix bindist makefile for wasm32-wasi target This patch fixes one incoherent place between bindist makefile and hadrian logic: I forgot to include wasi/wasm32 in OsSupportsGHCi/ArchSupportsGHCi as well. And this results in incorrect settings file generated after installing the bindist, and "Use interpreter"/"Have interpreter" fields incorrectly have "NO" values where they should be "YES" like --info output of in-tree version. - - - - - 0614abef by Alan Zimmerman at 2024-11-13T08:49:34-05:00 EPA: Correctly capture leading semis in decl list Closes #25467 - - - - - 00d58ae1 by Sebastian Graf at 2024-11-13T15:21:23-05:00 DmdAnal: Make `prompt#` lazy (#25439) This applies the same treatment to `prompt#` as for `catch#`. See `Note [Strictness for mask/unmask/catch/prompt]`. Fixes #25439. - - - - - 93233a66 by Ben Gamari at 2024-11-13T15:21:59-05:00 boot: Do not attempt to update config.sub While Apple ARM hardware was new we found that the autoconf scripts included in some boot packages were too old. As a mitigation for this, we introduced logic in the `boot` script to update the `config.sub` with that from the GHC tree. However, this causes submodules which have `config.sub` committted to appear to be dirty. This is a considerable headache. Now since `config.sub` with full platform support is more common we can remove `boot`'s `config.sub` logic. Fixes #19574. - - - - - fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 8783f7ee by Andreas Klebinger at 2024-12-05T15:08:07+01:00 Small cleanup around calls to fstat. Pulls out some common logic into a new fdWithCStat helper function. - - - - - 30 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - .gitlab/merge_request_templates/Default.md - .gitlab/rel_eng/recompress-all - .gitlab/rel_eng/upload.sh - boot - compile_flags.txt - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/PPC/CodeGen.hs - compiler/GHC/CmmToAsm/PPC/Instr.hs - compiler/GHC/CmmToAsm/PPC/Ppr.hs - compiler/GHC/CmmToAsm/Ppr.hs - compiler/GHC/CmmToAsm/X86/CodeGen.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Core/Class.hs - compiler/GHC/Core/Make.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/CoreToIface.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ee6bd01ede84c902e4a5b6bd567ae3e102dec61b...8783f7eee9f9c795a1cace5cabe0e62344df0099 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ee6bd01ede84c902e4a5b6bd567ae3e102dec61b...8783f7eee9f9c795a1cace5cabe0e62344df0099 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 15:10:38 2024 From: gitlab at gitlab.haskell.org (sheaf (@sheaf)) Date: Thu, 05 Dec 2024 10:10:38 -0500 Subject: [Git][ghc/ghc][wip/T24359] remove useless SPECIALISE pragmas in Data.Array (updates array submodule) Message-ID: <6751c26ee8cf4_3bb5b27a709c9952d@gitlab.mail> sheaf pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: 3a55a746 by sheaf at 2024-12-05T16:10:34+01:00 remove useless SPECIALISE pragmas in Data.Array (updates array submodule) - - - - - 1 changed file: - libraries/array Changes: ===================================== libraries/array ===================================== @@ -1 +1 @@ -Subproject commit 18dd1439815e43c3e8142cca7b4735c8ad9850ab +Subproject commit a394382f4c1442c59ef764df9851833b57ca6046 View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3a55a7468d01e336e5f7b69d918bd5232bc8cf7f -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3a55a7468d01e336e5f7b69d918bd5232bc8cf7f You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 15:22:11 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Thu, 05 Dec 2024 10:22:11 -0500 Subject: [Git][ghc/ghc][wip/T25549] base: Reintroduce {Show,Enum} IoSubSystem Message-ID: <6751c5238a5c9_3bb5b27d0d20103919@gitlab.mail> Ben Gamari pushed to branch wip/T25549 at Glasgow Haskell Compiler / GHC Commits: 06f408ee by Ben Gamari at 2024-12-05T10:21:35-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 5 changed files: - libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs - 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 Changes: ===================================== libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs ===================================== @@ -1,6 +1,7 @@ {-# LANGUAGE Trustworthy #-} -{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE StandaloneDeriving #-} ----------------------------------------------------------------------------- -- | @@ -34,6 +35,8 @@ module GHC.Internal.IO.SubSystem ( ) where import GHC.Internal.Base +import GHC.Internal.Show +import GHC.Internal.Enum #if defined(mingw32_HOST_OS) import GHC.Internal.IO.Unsafe @@ -55,6 +58,10 @@ data IoSubSystem -- native APIs for I/O, including IOCP and RIO. deriving (Eq) +-- N.B. These are currently unused by GHC but is needed for stability of @base at . +deriving instance Enum IoSubSystem +deriving instance Show IoSubSystem + -- | Conditionally execute an action depending on the configured I/O subsystem. -- On POSIX systems always execute the first action. -- On Windows execute the second action if WINIO as active, otherwise fall back to ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -11692,6 +11692,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12515,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -14727,6 +14727,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -15544,6 +15545,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.JS.Prim.JSException -- Defined in ‘GHC.Internal.JS.Prim’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -11957,6 +11957,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12779,6 +12780,7 @@ instance forall k (p :: k). GHC.Internal.Show.Show (GHC.Internal.Generics.V1 p) instance GHC.Internal.Show.Show GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Show.Show GHC.Internal.IO.Encoding.Types.CodingProgress -- Defined in ‘GHC.Internal.IO.Encoding.Types’ instance GHC.Internal.Show.Show GHC.Internal.IO.Encoding.Types.TextEncoding -- Defined in ‘GHC.Internal.IO.Encoding.Types’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IO.Encoding.Failure.CodingFailureMode -- Defined in ‘GHC.Internal.IO.Encoding.Failure’ instance GHC.Internal.Show.Show GHC.Internal.IO.FD.FD -- Defined in ‘GHC.Internal.IO.FD’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.BufferMode -- Defined in ‘GHC.Internal.IO.Handle.Types’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -11692,6 +11692,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12515,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/06f408ee9c48fe6ccfa657bdd5658289f269465e -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/06f408ee9c48fe6ccfa657bdd5658289f269465e You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 16:58:33 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Thu, 05 Dec 2024 11:58:33 -0500 Subject: [Git][ghc/ghc][wip/freebsd] 2 commits: testsuite: Mark RestartEventLogging as broken on FreeBSD Message-ID: <6751dbb9d52_3bb5b2102ea6c116320@gitlab.mail> Ben Gamari pushed to branch wip/freebsd at Glasgow Haskell Compiler / GHC Commits: 69671a94 by Ben Gamari at 2024-12-05T11:53:22-05:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 664ec778 by Ben Gamari at 2024-12-05T11:57:53-05:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 2 changed files: - testsuite/tests/rts/all.T - testsuite/tests/th/all.T Changes: ===================================== testsuite/tests/rts/all.T ===================================== @@ -531,7 +531,7 @@ test('InitEventLogging', ], compile_and_run, ['InitEventLogging_c.c']) test('RestartEventLogging', - [only_ways(['threaded1','threaded2']), extra_run_opts('+RTS -la -RTS')], + [only_ways(['threaded1','threaded2']), extra_run_opts('+RTS -la -RTS'), when(opsys('freebsd'), expect_broken(19724))], compile_and_run, ['RestartEventLogging_c.c']) test('T17088', ===================================== testsuite/tests/th/all.T ===================================== @@ -488,9 +488,9 @@ test('T15471', normal, multimod_compile, ['T15471.hs', '-v0']) test('T16180', [when(llvm_build(), expect_broken_for(16541, ['ext-interp'])), req_asm, - # Ideally OpenBSD should have expect_broken_for(14012, ['ext-interp']). + # Ideally {Free,Open}BSD should have expect_broken_for(14012, ['ext-interp']). # Except the failure is in compilation so skip seems the best we can do. - when(opsys('openbsd'), skip), + when(opsys('openbsd') or opsys('freebsd'), skip), expect_broken_for(16541, ghci_ways)], compile_and_run, ['-package ghc']) test('T16183', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/1b0f99a1a6c3f44511bddffcf11a96d3434ae95b...664ec7785d2bd50b4c96dd6297d4fc03e83b4a8b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/1b0f99a1a6c3f44511bddffcf11a96d3434ae95b...664ec7785d2bd50b4c96dd6297d4fc03e83b4a8b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 17:03:44 2024 From: gitlab at gitlab.haskell.org (Matthew Pickering (@mpickering)) Date: Thu, 05 Dec 2024 12:03:44 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/t25554 Message-ID: <6751dcf067380_3bb5b211ed66411695a@gitlab.mail> Matthew Pickering pushed new branch wip/t25554 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/t25554 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 17:33:33 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Thu, 05 Dec 2024 12:33:33 -0500 Subject: [Git][ghc/ghc][wip/T20264] Some small wibbles Message-ID: <6751e3ed94ab9_1a63f31dccc0777e7@gitlab.mail> Simon Peyton Jones pushed to branch wip/T20264 at Glasgow Haskell Compiler / GHC Commits: 3edad0d5 by Simon Peyton Jones at 2024-12-05T17:33:03+00:00 Some small wibbles - - - - - 5 changed files: - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/SetLevels.hs - compiler/GHC/Iface/Type.hs - compiler/GHC/Types/Var.hs - compiler/GHC/Utils/Outputable.hs Changes: ===================================== compiler/GHC/Core/Lint.hs ===================================== @@ -2952,6 +2952,8 @@ data LintEnv -- /All/ in-scope variables are here (term variables, -- type variables, and coercion variables) -- Used at an occurrence of the InVar + -- We need the binding InVar so Lint can check that the unfolding at an + -- occurrence is equal to the unfolding at the binding site. , le_joins :: IdSet -- Join points in scope that are valid -- A subset of the InScopeSet in le_subst ===================================== compiler/GHC/Core/Opt/SetLevels.hs ===================================== @@ -1804,16 +1804,23 @@ abstractVars :: Level -> LevelEnv -> DVarSet -> AbsVars -- Uniques are not deterministic. abstractVars dest_lvl (LE { le_subst = subst, le_lvl_env = lvl_env }) in_fvs = -- NB: sortQuantVars might not put duplicates next to each other - map zap $ - dep_anal $ - filter abstract_me $ - dVarSetElems $ - mapUnionDVarSet close $ - substFreeVars subst $ - dVarSetElems in_fvs + pprTrace "abstractVars" + (vcat [ text "r7:" <+> ppr r7 + , text "r1:" <+> ppr r1 + , text "r2:" <+> ppr r3 + , text "r3:" <+> ppr r3 + , text "subst:" <+> ppr subst ]) r7 + where + r7 = map zap r6 + r6 = dep_anal r5 + r5 = filter abstract_me r4 + r4 = dVarSetElems r3 + r3 = mapUnionDVarSet close r2 + r2 = substFreeVars subst r1 + r1 = dVarSetElems in_fvs -- NB: it's important to call abstract_me only on the OutIds the -- come from substDVarSet (not on fv, which is an InId) - where + abstract_me v = case lookupVarEnv lvl_env v of Just lvl -> dest_lvl `ltLvl` lvl Nothing -> False @@ -1830,8 +1837,8 @@ abstractVars dest_lvl (LE { le_subst = subst, le_lvl_env = lvl_env }) in_fvs close :: Var -> DVarSet close v | Just ty <- tyVarUnfolding_maybe v = close_set (tyCoVarsOfTypeDSet ty) `extendDVarSet` v - | otherwise - = close_set (tyCoVarsOfTypeDSet (varType v)) `extendDVarSet` v + | otherwise -- We have already got the free vars of its kind + = unitDVarSet v dep_anal vs = scopedSort tcvs ++ ids where ===================================== compiler/GHC/Iface/Type.hs ===================================== @@ -1061,19 +1061,12 @@ pprArrow (mb_conc, ppr_mult) af mult | otherwise = ppr (funTyFlagTyCon af) -ppr_tv_occ :: TyVar -> SDoc -ppr_tv_occ tv - = sdocOption sdocPrintTyVarUnfoldings $ \print_unf -> - ppr tv <> case tyVarUnfolding_maybe tv of - Just ty | print_unf -> braces (ppr ty) - _ -> empty - ppr_ty :: PprPrec -> IfaceType -> SDoc ppr_ty ctxt_prec ty | not (isIfaceRhoType ty) = ppr_sigma ShowForAllMust ctxt_prec ty ppr_ty _ (IfaceForAllTy {}) = panic "ppr_ty" -- Covered by not.isIfaceRhoType -ppr_ty _ (IfaceFreeTyVar tyvar) = ppr_tv_occ tyvar -- This is the main reason for IfaceFreeTyVar! -ppr_ty _ (IfaceTyVar tyvar) = ppr tyvar -- See Note [Free TyVars and CoVars in IfaceType] +ppr_ty _ (IfaceFreeTyVar tyvar) = ppr tyvar -- This is the main reason for IfaceFreeTyVar! +ppr_ty _ (IfaceTyVar tyvar) = ppr tyvar -- See Note [Free TyVars and CoVars in IfaceType] ppr_ty ctxt_prec (IfaceTyConApp tc tys) = pprTyTcApp ctxt_prec tc tys ppr_ty ctxt_prec (IfaceTupleTy i p tys) = ppr_tuple ctxt_prec i p tys -- always fully saturated ppr_ty _ (IfaceLitTy n) = pprIfaceTyLit n ===================================== compiler/GHC/Types/Var.hs ===================================== @@ -357,36 +357,39 @@ instance Outputable Var where -- don't display debug info with Code style (#25255) ppr_code = ppr (varName var) ppr_normal sty - = sdocOption sdocSuppressVarKinds $ \supp_var_kinds -> - getPprDebug $ \debug -> - let - pp_info = case var of - TyVar { tv_unfolding = Just ty } - | debug - -> brackets (text "unf=" <> ppr ty) - - TyVar {} - | debug - -> brackets (text "tv") - - TcTyVar {tc_tv_details = d} - | dumpStyle sty || debug - -> brackets (pprTcTyVarDetails d) - - Id { idScope = s, id_details = d } - | debug - -> brackets (ppr_id_scope s <> pprIdDetails d) - - _ -> empty - pp_mult = case varMultMaybe var of - Just m -> text "mult=" <> ppr m - Nothing -> empty - in if - | debug && not supp_var_kinds - -> parens (hang (ppr (varName var) <+> pp_info <+> pp_mult) - 2 (dcolon <+> pprKind (tyVarKind var))) - | otherwise - -> ppr (varName var) <> pp_info + = sdocOption sdocSuppressVarKinds $ \supp_var_kinds -> + sdocOption sdocPrintTyVarUnfoldings $ \print_tyvar_unf -> + getPprDebug $ \debug -> + + let add_type_sig doc + | debug, not supp_var_kinds + = parens (doc <+> dcolon <+> pprKind (varType var)) + | otherwise + = doc + + pp_tv_unf | print_tyvar_unf, Just ty <- tyVarUnfolding_maybe var + = braces (equals <> pprKind ty) + | otherwise + = empty + + in case var of + TyVar {} + -> add_type_sig $ + ppr (varName var) + <> ppWhen debug (brackets (text "tv")) + <> pp_tv_unf + + TcTyVar {tc_tv_details = d} + -> add_type_sig $ + ppr (varName var) + <> ppWhen (debug || dumpStyle sty) + (brackets (pprTcTyVarDetails d)) + + Id { idScope = s, id_details = d } + -> add_type_sig $ + ppr (varName var) + <> ppWhen debug + (brackets (ppr_id_scope s <> pprIdDetails d)) ppr_id_scope :: IdScope -> SDoc ppr_id_scope GlobalId = text "gid" ===================================== compiler/GHC/Utils/Outputable.hs ===================================== @@ -506,6 +506,7 @@ traceSDocContext = defaultSDocContext , sdocPrintExplicitRuntimeReps = True , sdocPrintExplicitForalls = True , sdocPrintEqualityRelations = True + , sdocPrintTyVarUnfoldings = True } withPprStyle :: PprStyle -> SDoc -> SDoc View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3edad0d536f32e9a0e81a7294628ab5432baaf07 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3edad0d536f32e9a0e81a7294628ab5432baaf07 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 21:26:55 2024 From: gitlab at gitlab.haskell.org (Adam Gundry (@adamgundry)) Date: Thu, 05 Dec 2024 16:26:55 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/amg/9.12-release-notes Message-ID: <67521a9fb6064_3428e2358b80199e2@gitlab.mail> Adam Gundry pushed new branch wip/amg/9.12-release-notes at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/amg/9.12-release-notes You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 5 23:26:23 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Thu, 05 Dec 2024 18:26:23 -0500 Subject: [Git][ghc/ghc][wip/T20264] Improvements Message-ID: <6752369fb26de_3ee4366d899083130@gitlab.mail> Simon Peyton Jones pushed to branch wip/T20264 at Glasgow Haskell Compiler / GHC Commits: 1cf19e53 by Simon Peyton Jones at 2024-12-05T23:25:30+00:00 Improvements - - - - - 1 changed file: - compiler/GHC/Core/Lint.hs Changes: ===================================== compiler/GHC/Core/Lint.hs ===================================== @@ -910,17 +910,21 @@ lintCoreExpr (Tick tickish expr) -- context, but soft-scoped and non-scoped ticks simply wrap the result -- (see Simplify.simplTick). -lintCoreExpr (Let (NonRec tv (Type ty)) body) +lintCoreExpr (Let (NonRec tv (Type rhs_ty)) body) | isTyVar tv = -- See Note [Linting type lets] - do { ty' <- lintTypeAndSubst ty + do { case tyVarUnfolding_maybe tv of + Nothing -> failWithL (text "Let-bound tyvar with no unfolding:" <+> ppr tv) + Just unf_ty -> ensureEqTys unf_ty rhs_ty $ + hang (text "Let-bound tyvar unfolding not same as RHS:" <+> ppr tv) + 2 (vcat [ text "Unfolding:" <+> ppr unf_ty + , text "RHS: " <+> ppr rhs_ty ]) + + ; rhs_ty' <- lintTypeAndSubst rhs_ty ; lintTyCoBndr tv $ \ tv' -> - do { addLoc (RhsOf tv) $ lintTyKind tv' ty' - -- Now extend the substitution so we - -- take advantage of it in the body - ; extendTvSubstL tv ty' $ - addLoc (BodyOfLet tv) $ - lintCoreExpr body } } + addTyVarUnfolding tv tv' rhs_ty' $ + do { addLoc (RhsOf tv) $ lintTyKind tv' rhs_ty' + ; addLoc (BodyOfLet tv) $ lintCoreExpr body } } lintCoreExpr (Let (NonRec bndr rhs) body) | isId bndr @@ -1573,8 +1577,8 @@ lintTyKind :: OutTyVar -> OutType -> LintM () -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] lintTyKind tyvar arg_ty - = unless (arg_kind `eqType` tyvar_kind) $ - addErrL (mkKindErrMsg tyvar arg_ty $$ (text "Linted Arg kind:" <+> ppr arg_kind)) + = ensureEqTys arg_kind tyvar_kind $ + mkKindErrMsg tyvar arg_ty $$ (text "Linted Arg kind:" <+> ppr arg_kind) where tyvar_kind = tyVarKind tyvar arg_kind = typeKind arg_ty @@ -3439,6 +3443,7 @@ addInScopeId in_id out_ty thing_inside addInScopeTyCoVar :: InTyCoVar -> OutType -> (OutTyCoVar -> LintM a) -> LintM a -- This function clones to avoid shadowing of TyCoVars +-- For a TyVar with an unfolding, it retains the unfolding unchenged addInScopeTyCoVar tcv tcv_type thing_inside = LintM $ \ env@(LE { le_in_vars = in_vars, le_subst = subst }) errs -> let (tcv', subst') = subst_bndr subst @@ -3458,17 +3463,24 @@ addInScopeTyCoVar tcv tcv_type thing_inside -- Clone, and extend the substitution | let tcv' = uniqAway in_scope (setVarType tcv tcv_type) - = (tcv', extendTCvSubstWithClone subst tcv tcv') + = (tcv', Type.extendTCvSubstWithClone subst tcv tcv') where in_scope = substInScopeSet subst getInVarEnv :: LintM (VarEnv (InId, OutType)) getInVarEnv = LintM (\env errs -> fromBoxedLResult (Just (le_in_vars env), errs)) -extendTvSubstL :: TyVar -> Type -> LintM a -> LintM a -extendTvSubstL tv ty m +addTyVarUnfolding :: InTyVar -> OutTyVar -> OutType -> LintM a -> LintM a +addTyVarUnfolding in_tv out_tv out_ty thing_inside + | in_tv == out_tv -- No cloning, so no need to change the unfolding + = assertPpr (isJust (tyVarUnfolding_maybe out_tv)) (ppr in_tv) + thing_inside + | otherwise = LintM $ \ env errs -> - unLintM m (env { le_subst = Type.extendTvSubst (le_subst env) tv ty }) errs + unLintM thing_inside (env { le_subst = Type.extendTvSubst (le_subst env) + in_tv tv_w_unf }) errs + where + tv_w_unf = mkTyVarTy (setTyVarUnfolding out_tv out_ty) markAllJoinsBad :: LintM a -> LintM a markAllJoinsBad m @@ -3497,6 +3509,19 @@ getUEAliases = LintM (\ env errs -> fromBoxedLResult (Just (le_ue_aliases env), getInScope :: LintM InScopeSet getInScope = LintM (\ env errs -> fromBoxedLResult (Just (substInScopeSet $ le_subst env), errs)) +data WhatItIs = IsTyVar | IsCoVar | IsValueVar + deriving( Eq ) + +whatItIs :: Var -> WhatItIs +whatItIs v | isTyVar v = IsTyVar + | isCoVar v = IsCoVar + | otherwise = IsValueVar + +instance Outputable WhatItIs where + ppr IsTyVar = text "type variable" + ppr IsCoVar = text "coercion variable" + ppr IsValueVar = text "value variable" + lintVarOcc :: InVar -> LintM OutType -- Used at an occurrence of a variable: term variables, type variables, and coercion variables -- Checks two things: @@ -3506,21 +3531,18 @@ lintVarOcc v_occ = do { in_var_env <- getInVarEnv ; case lookupVarEnv in_var_env v_occ of Nothing | isGlobalId v_occ -> return (idType v_occ) - | otherwise -> failWithL (text pp_what <+> quotes (ppr v_occ) + | otherwise -> failWithL (text "The" <+> ppr (whatItIs v_occ) + <+> quotes (ppr v_occ) <+> text "is out of scope") - Just (v_bndr, out_ty) -> do { check_bad_global v_bndr - ; ensureEqTys occ_ty bndr_ty $ -- Compares InTypes - mkBndrOccTypeMismatchMsg v_occ bndr_ty occ_ty - ; return out_ty } - where - occ_ty = varType v_occ - bndr_ty = varType v_bndr } - where - pp_what | isTyVar v_occ = "The type variable" - | isCoVar v_occ = "The coercion variable" - | otherwise = "The value variable" + Just (v_bndr, out_ty) -> do { checkBndrOccCompatibility v_bndr v_occ + ; return out_ty } } - -- 'check_bad_global' checks for the case where an /occurrence/ is +checkBndrOccCompatibility :: InVar -> InVar -> LintM () +checkBndrOccCompatibility v_bndr v_occ + = do { checkL (occ_is == bndr_is) $ + bndr_occ_mismatch (ppr bndr_is) (ppr occ_is) + + -- Check for the case where an /occurrence/ is -- a GlobalId, but there is an enclosing binding fora a LocalId. -- NB: the in-scope variables are mostly LocalIds, checked by lintIdBndr, -- but GHCi adds GlobalIds from the interactive context. These @@ -3529,15 +3551,45 @@ lintVarOcc v_occ -- are defined locally, but appear in expressions as (global) -- wired-in Ids after worker/wrapper -- So we simply disable the test in this case - check_bad_global v_bndr - | isGlobalId v_occ - , isLocalId v_bndr - , not (isWiredIn v_occ) - = failWithL $ hang (text "Occurrence is GlobalId, but binding is LocalId") - 2 (vcat [ hang (text "occurrence:") 2 $ pprBndr LetBind v_occ - , hang (text "binder :") 2 $ pprBndr LetBind v_bndr ]) - | otherwise - = return () + ; checkL (not (isGlobalId v_occ && isLocalId v_bndr && not (isWiredIn v_occ))) $ + bndr_occ_mismatch (text "LocalId") (text "GlobalId") + + + -- Check that binder and occurrence have same type + ; ensureEqTys occ_ty bndr_ty $ -- Compares InTypes + hang (text "Mismatch in type between binder and occurrence") + 2 extra_info + + ; flags <- getLintFlags + ; checkL (sameUnfolding flags v_bndr v_occ) $ + hang (text "Mismatch in type-let unfolding between binder and occurrence") + 2 extra_info + } + where + bndr_ty = varType v_bndr + occ_ty = varType v_occ + bndr_is = whatItIs v_bndr + occ_is = whatItIs v_occ + + bndr_occ_mismatch bndr_is occ_is + = text "Occurrence is a" <+> occ_is <> comma + <+> text "but binder is a" <+> bndr_is + + extra_info = vcat [ hang (text "Binder :") 2 $ pprBndr LetBind v_bndr + , hang (text "Occurrence:") 2 $ pprBndr LetBind v_occ] + +sameUnfolding :: LintFlags + -> InVar -- Binder + -> InVar -- Occurrence + -> Bool +-- Check that any unfolding in the /occurence/ is the same as that in the /binder/ +-- An unfolding in the occurrence is optional fo Ids, but compulsory for type-let-boud +-- TyVars. Somewhat lazily, we only check the latter. +sameUnfolding flags v_bndr v_occ + = case (tyVarUnfolding_maybe v_bndr, tyVarUnfolding_maybe v_occ) of + (Nothing, Nothing) -> True + (Just bndr_ty, Just occ_ty) -> eq_type flags bndr_ty occ_ty + _ -> False lookupJoinId :: Id -> LintM JoinPointHood -- Look up an Id which should be a join point, valid here @@ -3906,12 +3958,6 @@ mkJoinBndrOccMismatchMsg bndr join_arity_bndr join_arity_occ , text "Arity at binding site:" <+> ppr join_arity_bndr , text "Arity at occurrence: " <+> ppr join_arity_occ ] -mkBndrOccTypeMismatchMsg :: InVar -> InType -> InType -> SDoc -mkBndrOccTypeMismatchMsg var bndr_ty occ_ty - = vcat [ text "Mismatch in type between binder and occurrence" - , text "Binder: " <+> ppr var <+> dcolon <+> ppr bndr_ty - , text "Occurrence:" <+> ppr var <+> dcolon <+> ppr occ_ty ] - mkBadJoinPointRuleMsg :: JoinId -> JoinArity -> CoreRule -> SDoc mkBadJoinPointRuleMsg bndr join_arity rule = vcat [ text "Join point has rule with wrong number of arguments" View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1cf19e53374cf9bace9fcf4a0dacf08c959fbd6a -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1cf19e53374cf9bace9fcf4a0dacf08c959fbd6a You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 08:40:40 2024 From: gitlab at gitlab.haskell.org (Adam Gundry (@adamgundry)) Date: Fri, 06 Dec 2024 03:40:40 -0500 Subject: [Git][ghc/ghc][wip/amg/9.12-release-notes] Fix formatting issues and make corrections to 9.12.1 release notes Message-ID: <6752b888d90e7_dc4c96e9f38310dc@gitlab.mail> Adam Gundry pushed to branch wip/amg/9.12-release-notes at Glasgow Haskell Compiler / GHC Commits: 6ce3e546 by Adam Gundry at 2024-12-06T08:40:27+00:00 Fix formatting issues and make corrections to 9.12.1 release notes - - - - - 1 changed file: - docs/users_guide/9.12.1-notes.rst Changes: ===================================== docs/users_guide/9.12.1-notes.rst ===================================== @@ -11,9 +11,9 @@ for specific guidance on migrating programs to this release. Language ~~~~~~~~ -- New language extension: :extension:`OrPatterns` implements `GHC Proposal #522 - `_). -- GHC Proposal `#569 `_ +- New language extension: :extension:`OrPatterns` implements `GHC proposal #522 + `_. +- GHC proposal `#569 `_ "Multiline string literals" has been implemented. The following code is now accepted by GHC:: @@ -44,12 +44,12 @@ Language to cause significant disruption. - The built-in ``HasField`` class, used by :extension:`OverloadedRecordDot`, now - supports representation polymorphism (implementing part of `GHC Proposal #583 + supports representation polymorphism (implementing part of `GHC proposal #583 `_). This means that code using :extension:`UnliftedDatatypes` or :extension:`UnliftedNewtypes` can now use :extension:`OverloadedRecordDot`. -- Unboxed ``Float#``/``Double#`` literals now support the HexFloatLiterals extension +- Unboxed ``Float#``/``Double#`` literals now support the :extension:`HexFloatLiterals` extension (`#22155 `_). - :extension:`UnliftedFFITypes`: GHC will now accept FFI types like: ``(# #) -> T`` where ``(# #)`` @@ -57,21 +57,21 @@ Language - The venerable ``default`` declarations have been generalized. They can now name a class other than ``Num`` and the class defaults can be exported. The functionality is guarded - by the new ``NamedDefaults`` language extension. See the `GHC proposal + by the new ``NamedDefaults`` language extension. See `GHC proposal #409 `__ for details. -- GHC now takes COMPLETE pragmas into consideration when deciding whether +- GHC now takes ``COMPLETE`` pragmas into consideration when deciding whether pattern matches in do notation are fallible. -- As part of `GHC Proposal #281 `_ +- As part of `GHC proposal #281 `_ GHC now accepts type syntax in expressions, namely function type arrow ``a -> b``, constraint arrow ``a => b``, and ``forall`` telescopes: :: g = f (forall a. Show a => a -> String) where f :: forall a -> ... -- In accordance with `GHC Proposal #425 `_, +- In accordance with `GHC proposal #425 `_, GHC now permits wildcard binders in type declarations: :: type Const a b = a -- before: the `b` had to be named even if unused on the RHS @@ -109,7 +109,7 @@ Compiler welcome! - i386 Windows support is now completely removed amid massive cleanup - of legacy code to pave way for Arm64 Windows support (`#24883 + of legacy code to pave way for ARM64 Windows support (`#24883 `_). Rest assured, this does not impact existing support for x86_64 Windows or i386 Linux. For end users, the ``stdcall`` C calling convention is @@ -119,7 +119,7 @@ Compiler - 32-bit macOS/iOS support has also been completely removed (`#24921 `_). This does - not affect existing support of apple systems on x86_64/aarch64. + not affect existing support of Apple systems on x86_64/aarch64. - The flag :ghc-flag:`-fignore-asserts` will now also enable the :extension:`CPP` macro ``__GLASGOW_HASKELL_ASSERTS_IGNORED__`` (`#24967 @@ -131,11 +131,11 @@ Compiler specialization rules was added. It was actually added ghc-9.10.1 already but mistakenly not mentioned in the 9.10.1 changelog. -- Fixed a bug that caused GHC to panic when using the aarch64 ncg and -fregs-graph - on certain programs. (#24941) +- Fixed a bug that caused GHC to panic when using the aarch64 NCG and :ghc-flag:`-fregs-graph` + on certain programs (`#24941 `_). - A new warning :ghc-flag:`-Wview-pattern-signatures` is introduced to notify users about - future changes in parsing of view patterns in combination with pattern signatures + future changes in parsing of view patterns in combination with pattern signatures. - GHC now includes a new experimental flag, :ghc-flag:`-fobject-determinism`, which enables deterministic object code generation, with a minor trade-off in @@ -163,7 +163,7 @@ Runtime system - The new runtime flag :rts-flag:`--read-tix-file=\` allows to modify whether a preexisting .tix file is read in at the beginning of a program run. The default is currently ``--read-tix-file=yes`` but will change to ``--read-tix-file=no`` in a future version of GHC. For this reason, a warning is emitted if a .tix file is read in implicitly. You can silence this warning by explicitly passing ``--read-tix-file=yes``. - Details can be found in `GHC proposal 612 `__. + Details can be found in `GHC proposal #612 `__. Cmm ~~~ @@ -180,37 +180,38 @@ Cmm ``base`` library ~~~~~~~~~~~~~~~~ -- Propagate HasCallStack from `errorCallWithCallStackException` to exception backtraces, fixing a bug in the implementation of `CLC proposal 164 `. +- Improve display of exception stack traces and display more metadata about + exceptions in the default top-level uncaught exception handler + (``GHC.Conc.Sync.uncaughtExceptionHandler``). See CLC proposals + `#231 `_, + `#261 `_ and + `#285 `_. -- Add exception type metadata to SomeException's displayException and - "Exception:" header to the default handler - (i.e. ``GHC.Conc.Sync.uncaughtExceptionHandler``): +- Propagate HasCallStack from ``errorCallWithCallStackException`` to exception backtraces, fixing a bug in the implementation of `CLC proposal #164 `_. - https://github.com/haskell/core-libraries-committee/issues/231 - https://github.com/haskell/core-libraries-committee/issues/261 - -- The `deprecation process of GHC.Pack ` has come its term. The module has now been removed from ``base``. - -- Annotate re-thrown exceptions with the backtrace as per `CLC proposal #202 ` +- Annotate re-thrown exceptions with backtraces as per `CLC proposal #202 `_. - Introduced ``catchNoPropagate``, ``rethrowIO`` and ``tryWithContext`` as part of - `CLC proposal #202 ` to + `CLC proposal #202 `_ to facilitate rethrowing exceptions without adding a ``WhileHandling`` context -- if rethrowing ``e``, you don't want to add ``WhileHandling e`` to the context since it will be redundant. These functions are mostly useful for libraries that define exception-handling combinators like ``catch`` and ``onException``, such as ``base``, or the ``exceptions`` package. +- The `deprecation process of GHC.Pack `_ has come its term. The module has now been removed from ``base``. + + ``ghc-prim`` library ~~~~~~~~~~~~~~~~~~~~ -- Usage of deprecated primops is now correctly reported (#19629). -- New primops `isMutableByteArrayWeaklyPinned#` and `isByteArrayWeaklyPinned#` - to allow users to avoid copying large arrays safely when dealing with ffi. - See the users guide for more details on the different kinds of +- Usage of deprecated primops is now correctly reported (`#19629 `_). +- New primops ``isMutableByteArrayWeaklyPinned#`` and ``isByteArrayWeaklyPinned#`` + to allow users to avoid copying large arrays when dealing with FFI. + See :ref:`pinned-byte-arrays` for more details on the different kinds of pinned arrays in 9.12. - This need for this distinction originally surfaced in https://gitlab.haskell.org/ghc/ghc/-/issues/22255 + This need for this distinction originally surfaced in `#22255 `_. - New fused multiply-add instructions for vectors of floating-point values, such as ``fmaddFloatX4# :: FloatX4# -> FloatX4# -> FloatX4# -> FloatX4#`` and @@ -226,11 +227,11 @@ Cmm and indices ``(# 4#, 3#, 6#, 1# #)``, will return a vector with components ``(# 44.1#, 33.1#, 66.1#, 11.1# #)``. -- New instructions for minimum/maximum, such as `minDouble#` and - `minFloatX4#`. These instructions compute the minimum/maximum of their inputs, +- New instructions for minimum/maximum, such as ``minDouble#`` and + ``minFloatX4#``. These instructions compute the minimum/maximum of their inputs, working component-wise for SIMD vectors. Supported argument types are vector - integer values (e.g. `Word16X8#`, `Int32X4#` etc) and both scalar and vector - floating point values (e.g. `Float#`, `DoubleX2#`, `FloatX8#` etc). + integer values (e.g. ``Word16X8#``, ``Int32X4#`` etc) and both scalar and vector + floating point values (e.g. ``Float#``, ``DoubleX2#``, ``FloatX8#`` etc). ``ghc`` library ~~~~~~~~~~~~~~~ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/6ce3e546083304c4f2da060184b3b73f48dd8fc0 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/6ce3e546083304c4f2da060184b3b73f48dd8fc0 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 11:23:34 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 06 Dec 2024 06:23:34 -0500 Subject: [Git][ghc/ghc][wip/T25549] base: Reintroduce {Show,Enum} IoSubSystem Message-ID: <6752deb6c7be5_8a4a575aa0810262f@gitlab.mail> Zubin pushed to branch wip/T25549 at Glasgow Haskell Compiler / GHC Commits: ca14415a by Ben Gamari at 2024-12-06T16:53:26+05:30 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 7 changed files: - libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs - 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 Changes: ===================================== libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs ===================================== @@ -1,6 +1,7 @@ {-# LANGUAGE Trustworthy #-} -{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE StandaloneDeriving #-} ----------------------------------------------------------------------------- -- | @@ -34,6 +35,8 @@ module GHC.Internal.IO.SubSystem ( ) where import GHC.Internal.Base +import GHC.Internal.Show +import GHC.Internal.Enum #if defined(mingw32_HOST_OS) import GHC.Internal.IO.Unsafe @@ -55,6 +58,10 @@ data IoSubSystem -- native APIs for I/O, including IOCP and RIO. deriving (Eq) +-- N.B. These are currently unused by GHC but is needed for stability of @base at . +deriving instance Enum IoSubSystem +deriving instance Show IoSubSystem + -- | Conditionally execute an action depending on the configured I/O subsystem. -- On POSIX systems always execute the first action. -- On Windows execute the second action if WINIO as active, otherwise fall back to ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -11692,6 +11692,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12515,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -14727,6 +14727,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -15544,6 +15545,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.JS.Prim.JSException -- Defined in ‘GHC.Internal.JS.Prim’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -11957,6 +11957,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12789,6 +12790,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IO.Windows.Handle.CONSOLE_READCONSOLE_CONTROL -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.NativeHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.ConsoleHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -11692,6 +11692,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12515,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -10714,6 +10714,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10767,6 +10768,7 @@ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.ProfFlags -- Defined in instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.RTSFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TickyFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TraceFlags -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.Stats.GCDetails -- Defined in ‘GHC.Internal.Stats’ instance GHC.Internal.Show.Show GHC.Internal.Stats.RTSStats -- Defined in ‘GHC.Internal.Stats’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 ===================================== @@ -10717,6 +10717,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10770,6 +10771,7 @@ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.ProfFlags -- Defined in instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.RTSFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TickyFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TraceFlags -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.Stats.GCDetails -- Defined in ‘GHC.Internal.Stats’ instance GHC.Internal.Show.Show GHC.Internal.Stats.RTSStats -- Defined in ‘GHC.Internal.Stats’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ca14415ac8d0e0140a219bca0e0938dbc30de745 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ca14415ac8d0e0140a219bca0e0938dbc30de745 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 11:57:53 2024 From: gitlab at gitlab.haskell.org (Matthew Pickering (@mpickering)) Date: Fri, 06 Dec 2024 06:57:53 -0500 Subject: [Git][ghc/ghc][wip/t25554] typechecker: Perform type family consistency checks in topological order Message-ID: <6752e6c1a27d5_3ee6a2f7cb8899d8@gitlab.mail> Matthew Pickering pushed to branch wip/t25554 at Glasgow Haskell Compiler / GHC Commits: 2257ffaf by Matthew Pickering at 2024-12-06T11:57:26+00:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - 2 changed files: - compiler/GHC/Tc/Instance/Family.hs - compiler/GHC/Tc/Module.hs Changes: ===================================== compiler/GHC/Tc/Instance/Family.hs ===================================== @@ -58,6 +58,7 @@ import Data.Function ( on ) import qualified GHC.LanguageExtensions as LangExt import GHC.Unit.Env (unitEnv_hpts) +import Data.List (sortOn) {- Note [The type family instance consistency story] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -239,6 +240,49 @@ That situation should be pretty common in practice, there's usually a set of utility modules that every module imports directly or indirectly. This is basically the idea from #13092, comment:14. + +Note [Order of type family consistency checks] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Consider a module M which imports modules A, B and C, all defining (open) type +family instances. + +We can waste a lot of work in type family consistency checking depending on the +order in which the modules are processed. + +Suppose for example that C imports A and B. When we compiled C, we will have +checked A and B for consistency against eachother. This means that, when +processing the imports of M to check type family instance consistency: + +* if C is processed first, then A and B will not need to be checked for + consistency against eachother again, +* if we process A and B before C,then the + consistency checks between A and B will be performed again. This is wasted + work, as we already performed them for C. + +This can make a significant difference. Keeping the nomenclature of the above +example for illustration, we have observed situations in practice in which the +compilation time of M goes from 1 second (the "processing A and B first" case) +down to 80 milliseconds (the "processing C first" case). + +Clearly we should engineer that C is checked before B and A, but by what scheme? + +A simple one is to observe that if a module M is in the transitive closure of X +then the size of the consistent family set of M is less than or equal to size +of the consistent family set of X. + +Therefore, by sorting the imports by the size of the consistent family set and +processing the largest first, we make sure to process modules in topological +order. + +For a particular project, without this change we did 40 million checks and with +this change we did 22.9 million checks. This is significant as before this change +type family consistency checks accounted for 26% of total type checker allocations which +was reduced to 15%. + +See tickets #25554 for discussion about this exact issue and #25555 for +why we still do redundant checks. + -} -- We don't need to check the current module, this is done in @@ -267,6 +311,12 @@ checkFamInstConsistency directlyImpMods where deps = dep_finsts . mi_deps . modIface $ mod + ; debug_consistent_set = map (\x -> (x, length (modConsistent x))) directlyImpMods + + -- Sorting the list by size has the effect of performing a topological sort. + -- See Note [Order of type family consistency checks] + ; init_consistent_set = reverse (sortOn (length . modConsistent) directlyImpMods) + ; hmiModule = mi_module . hm_iface ; hmiFamInstEnv = extendFamInstEnvList emptyFamInstEnv . md_fam_insts . hm_details @@ -276,7 +326,8 @@ checkFamInstConsistency directlyImpMods } - ; checkMany hpt_fam_insts modConsistent directlyImpMods + ; traceTc "init_consistent_set" (ppr debug_consistent_set) + ; checkMany hpt_fam_insts modConsistent init_consistent_set } where -- See Note [Checking family instance optimization] @@ -294,6 +345,11 @@ checkFamInstConsistency directlyImpMods -> TcM () go _ _ [] = return () go consistent consistent_set (mod:mods) = do + traceTc "checkManySize" (vcat [text "mod:" <+> ppr mod + , text "m1:" <+> ppr (length to_check_from_mod) + , text "m2:" <+> ppr (length (to_check_from_consistent)) + , text "product:" <+> ppr (length to_check_from_mod * length to_check_from_consistent) + ]) sequence_ [ check hpt_fam_insts m1 m2 | m1 <- to_check_from_mod ===================================== compiler/GHC/Tc/Module.hs ===================================== @@ -514,7 +514,9 @@ tcRnImports hsc_env import_decls ; let { dir_imp_mods = M.keys . imp_mods $ imports } - ; checkFamInstConsistency dir_imp_mods + ; logger <- getLogger + ; withTiming logger (text "ConsistencyCheck"<+>brackets (ppr this_mod)) (const ()) + $ checkFamInstConsistency dir_imp_mods ; traceRn "rn1: } checking family instance consistency" empty ; gbl_env <- getGblEnv View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2257ffafdef249383bacb590f52791251bbd3327 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2257ffafdef249383bacb590f52791251bbd3327 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 14:33:05 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 09:33:05 -0500 Subject: [Git][ghc/ghc][wip/freebsd] 9 commits: gitlab-ci: Enable documentation build on FreeBSD 14 Message-ID: <67530b215e137_3ee6a12b0038116720@gitlab.mail> Ben Gamari pushed to branch wip/freebsd at Glasgow Haskell Compiler / GHC Commits: 0dcbc1b1 by Ben Gamari at 2024-12-06T09:29:33-05:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - 70fa3b2a by Ben Gamari at 2024-12-06T09:29:37-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 95a23b96 by Ben Gamari at 2024-12-06T09:29:37-05:00 gitlab-ci: Use system libffi on FreeBSD - - - - - 3bd8be9f by Ben Gamari at 2024-12-06T09:31:44-05:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - e586afd8 by Ben Gamari at 2024-12-06T09:32:07-05:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - 0bed44aa by Ben Gamari at 2024-12-06T09:32:17-05:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 7331ce3e by Ben Gamari at 2024-12-06T09:32:17-05:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3c6ea281 by Ben Gamari at 2024-12-06T09:32:17-05:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 3120c80a by Ben Gamari at 2024-12-06T09:32:53-05:00 ci: Disable T16992 on FreeBSD due to memory requirement - - - - - 7 changed files: - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - m4/find_ld.m4 - testsuite/tests/concurrent/should_run/all.T - testsuite/tests/rts/all.T - testsuite/tests/rts/linker/all.T - testsuite/tests/th/all.T Changes: ===================================== .gitlab/generate-ci/gen_ci.hs ===================================== @@ -428,10 +428,15 @@ opsysVariables _ FreeBSD14 = mconcat -- to use the "native" iconv embedded in libc as suggested by the -- porting guide [1]. -- [1] https://www.freebsd.org/doc/en/books/porters-handbook/using-iconv.html) - "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" - , "HADRIAN_ARGS" =: "--docs=no-sphinx" + "CONFIGURE_ARGS" =: "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib" + -- Prefer to use the system's clang-based toolchain and not gcc + , "CC" =: "cc" + , "CXX" =: "c++" , "GHC_VERSION" =: "9.6.4" , "CABAL_INSTALL_VERSION" =: "3.10.3.0" + , brokenTest "T16992" "requires too much memory for runners" ] opsysVariables arch (Linux distro) = distroVariables arch distro opsysVariables AArch64 (Darwin {}) = ===================================== .gitlab/jobs.yaml ===================================== @@ -1136,11 +1136,13 @@ "variables": { "BIGNUM_BACKEND": "gmp", "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BROKEN_TESTS": "T16992", "BUILD_FLAVOUR": "validate", "CABAL_INSTALL_VERSION": "3.10.3.0", - "CONFIGURE_ARGS": "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", "GHC_VERSION": "9.6.4", - "HADRIAN_ARGS": "--docs=no-sphinx", "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", "RUNTEST_ARGS": "", "TEST_ENV": "x86_64-freebsd14-validate", @@ -3963,11 +3965,14 @@ "variables": { "BIGNUM_BACKEND": "gmp", "BIN_DIST_NAME": "ghc-x86_64-freebsd14-release", + "BROKEN_TESTS": "T16992", "BUILD_FLAVOUR": "release", "CABAL_INSTALL_VERSION": "3.10.3.0", - "CONFIGURE_ARGS": "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", "GHC_VERSION": "9.6.4", - "HADRIAN_ARGS": "--hash-unit-ids --docs=no-sphinx", + "HADRIAN_ARGS": "--hash-unit-ids", "IGNORE_PERF_FAILURES": "all", "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", "RUNTEST_ARGS": "", @@ -5407,11 +5412,13 @@ "variables": { "BIGNUM_BACKEND": "gmp", "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BROKEN_TESTS": "T16992", "BUILD_FLAVOUR": "validate", "CABAL_INSTALL_VERSION": "3.10.3.0", - "CONFIGURE_ARGS": "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", "GHC_VERSION": "9.6.4", - "HADRIAN_ARGS": "--docs=no-sphinx", "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", "RUNTEST_ARGS": "", "TEST_ENV": "x86_64-freebsd14-validate" ===================================== m4/find_ld.m4 ===================================== @@ -79,13 +79,16 @@ AC_DEFUN([FIND_LD],[ dnl See #21712. AC_CHECK_TARGET_TOOL([LD], [ld]) ;; - *) + *-linux|*-mingw32) if test "x$enable_ld_override" = "xyes"; then find_ld else AC_CHECK_TARGET_TOOL([LD], [ld]) fi ;; + *) + AC_CHECK_TARGET_TOOL([LD], [ld]) + ;; esac CHECK_LD_COPY_BUG([$1]) ]) ===================================== testsuite/tests/concurrent/should_run/all.T ===================================== @@ -268,6 +268,7 @@ test('T21651', test('T21969', [ only_ways(['threaded1','threaded2', 'nonmoving_thr', 'profthreaded']), when(opsys('mingw32'),skip), # uses POSIX pipes + when(opsys('freebsd'), expect_broken(25512)), extra_run_opts('50000'), run_timeout_multiplier(0.3), # default timeout seems to be 300, but lockups happen quickly req_target_smp, ===================================== testsuite/tests/rts/all.T ===================================== @@ -531,7 +531,9 @@ test('InitEventLogging', ], compile_and_run, ['InitEventLogging_c.c']) test('RestartEventLogging', - [only_ways(['threaded1','threaded2']), extra_run_opts('+RTS -la -RTS')], + [only_ways(['threaded1','threaded2']), + extra_run_opts('+RTS -la -RTS'), + when(opsys('freebsd'), fragile_for(19724))], compile_and_run, ['RestartEventLogging_c.c']) test('T17088', ===================================== testsuite/tests/rts/linker/all.T ===================================== @@ -108,6 +108,7 @@ test('T5435_dyn_gcc', ###################################### test('linker_unload', [extra_files(['LinkerUnload.hs', 'Test.hs']), + when(opsys('freebsd'), expect_broken(25491)), req_rts_linker], makefile_test, ['linker_unload']) ===================================== testsuite/tests/th/all.T ===================================== @@ -488,9 +488,9 @@ test('T15471', normal, multimod_compile, ['T15471.hs', '-v0']) test('T16180', [when(llvm_build(), expect_broken_for(16541, ['ext-interp'])), req_asm, - # Ideally OpenBSD should have expect_broken_for(14012, ['ext-interp']). + # Ideally {Free,Open}BSD should have expect_broken_for(14012, ['ext-interp']). # Except the failure is in compilation so skip seems the best we can do. - when(opsys('openbsd'), skip), + when(opsys('openbsd') or opsys('freebsd'), skip), expect_broken_for(16541, ghci_ways)], compile_and_run, ['-package ghc']) test('T16183', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/664ec7785d2bd50b4c96dd6297d4fc03e83b4a8b...3120c80a73bd916589dd4f1e5e899043e4387c4a -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/664ec7785d2bd50b4c96dd6297d4fc03e83b4a8b...3120c80a73bd916589dd4f1e5e899043e4387c4a You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 14:47:40 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 09:47:40 -0500 Subject: [Git][ghc/ghc][wip/freebsd] 3 commits: testsuite: Mark RestartEventLogging as broken on FreeBSD Message-ID: <67530e8cc90b1_3ee6a15aea8c12289b@gitlab.mail> Ben Gamari pushed to branch wip/freebsd at Glasgow Haskell Compiler / GHC Commits: f973e48e by Ben Gamari at 2024-12-06T09:47:31-05:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - a76d398d by Ben Gamari at 2024-12-06T09:47:31-05:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 8b86203c by Ben Gamari at 2024-12-06T09:47:31-05:00 ci: Disable T16992 on FreeBSD due to memory requirement - - - - - 4 changed files: - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - testsuite/tests/rts/all.T - testsuite/tests/th/all.T Changes: ===================================== .gitlab/generate-ci/gen_ci.hs ===================================== @@ -436,6 +436,7 @@ opsysVariables _ FreeBSD14 = mconcat , "CXX" =: "c++" , "GHC_VERSION" =: "9.6.4" , "CABAL_INSTALL_VERSION" =: "3.10.3.0" + , brokenTest "T16992" "requires too much memory for runners" ] opsysVariables arch (Linux distro) = distroVariables arch distro opsysVariables AArch64 (Darwin {}) = ===================================== .gitlab/jobs.yaml ===================================== @@ -1136,6 +1136,7 @@ "variables": { "BIGNUM_BACKEND": "gmp", "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BROKEN_TESTS": "T16992", "BUILD_FLAVOUR": "validate", "CABAL_INSTALL_VERSION": "3.10.3.0", "CC": "cc", @@ -3964,6 +3965,7 @@ "variables": { "BIGNUM_BACKEND": "gmp", "BIN_DIST_NAME": "ghc-x86_64-freebsd14-release", + "BROKEN_TESTS": "T16992", "BUILD_FLAVOUR": "release", "CABAL_INSTALL_VERSION": "3.10.3.0", "CC": "cc", @@ -5410,6 +5412,7 @@ "variables": { "BIGNUM_BACKEND": "gmp", "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BROKEN_TESTS": "T16992", "BUILD_FLAVOUR": "validate", "CABAL_INSTALL_VERSION": "3.10.3.0", "CC": "cc", ===================================== testsuite/tests/rts/all.T ===================================== @@ -531,7 +531,9 @@ test('InitEventLogging', ], compile_and_run, ['InitEventLogging_c.c']) test('RestartEventLogging', - [only_ways(['threaded1','threaded2']), extra_run_opts('+RTS -la -RTS')], + [only_ways(['threaded1','threaded2']), + extra_run_opts('+RTS -la -RTS'), + when(opsys('freebsd'), fragile(19724))], compile_and_run, ['RestartEventLogging_c.c']) test('T17088', ===================================== testsuite/tests/th/all.T ===================================== @@ -488,9 +488,9 @@ test('T15471', normal, multimod_compile, ['T15471.hs', '-v0']) test('T16180', [when(llvm_build(), expect_broken_for(16541, ['ext-interp'])), req_asm, - # Ideally OpenBSD should have expect_broken_for(14012, ['ext-interp']). + # Ideally {Free,Open}BSD should have expect_broken_for(14012, ['ext-interp']). # Except the failure is in compilation so skip seems the best we can do. - when(opsys('openbsd'), skip), + when(opsys('openbsd') or opsys('freebsd'), skip), expect_broken_for(16541, ghci_ways)], compile_and_run, ['-package ghc']) test('T16183', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3120c80a73bd916589dd4f1e5e899043e4387c4a...8b86203c1ba732abfe4074d448ce5d9dce66891b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3120c80a73bd916589dd4f1e5e899043e4387c4a...8b86203c1ba732abfe4074d448ce5d9dce66891b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 15:38:40 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Fri, 06 Dec 2024 10:38:40 -0500 Subject: [Git][ghc/ghc][wip/andreask/arm_mem_model] 4851 commits: [haddock @ 2002-04-04 16:23:43 by simonmar] Message-ID: <67531a80c49c7_3ee6a1a4c29c1285b8@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/arm_mem_model at Glasgow Haskell Compiler / GHC Commits: 2b39cd94 by Simon Marlow at 2002-04-04T16:23:43+00:00 [haddock @ 2002-04-04 16:23:43 by simonmar] This is Haddock, my stab at a Haskell documentation tool. It's not quite ready for release yet, but I'm putting it in the repository so others can take a look. It uses a locally modified version of the hssource parser, extended with support for GHC extensions and documentation annotations. - - - - - 99ede94f by Simon Marlow at 2002-04-04T16:24:10+00:00 [haddock @ 2002-04-04 16:24:10 by simonmar] forgot one file - - - - - 8363294c by Simon Marlow at 2002-04-05T13:58:15+00:00 [haddock @ 2002-04-05 13:58:15 by simonmar] Remap names in the exported declarations to be "closer" to the current module. eg. if an exported declaration mentions a type 'T' which is imported from module A then re-exported from the current module, then links from the type or indeed the documentation will point to the current module rather than module A. This is to support better hiding: module A won't be referred to in the generated output. - - - - - 1570cbc1 by Simon Marlow at 2002-04-05T13:58:23+00:00 [haddock @ 2002-04-05 13:58:23 by simonmar] update the TODO list - - - - - 3a62f96b by Simon Marlow at 2002-04-05T14:11:51+00:00 [haddock @ 2002-04-05 14:11:51 by simonmar] Fix the anchor for a class declaration - - - - - c5d9a471 by Simon Marlow at 2002-04-05T14:18:41+00:00 [haddock @ 2002-04-05 14:18:41 by simonmar] remove underlines on visited links - - - - - 97280525 by Simon Marlow at 2002-04-05T16:11:47+00:00 [haddock @ 2002-04-05 16:11:47 by simonmar] - Update to generate more correct HTML. - Use our own non-overloaded table combinators, as the overloaded versions were giving me a headache. The improved type safety caught several errors in the HTML generation. - - - - - 9acd3a4d by Simon Marlow at 2002-04-05T16:32:19+00:00 [haddock @ 2002-04-05 16:32:19 by simonmar] Add width property to the title, and add TD.children for the module contents page. - - - - - ec9a0847 by Simon Marlow at 2002-04-08T16:39:56+00:00 [haddock @ 2002-04-08 16:39:56 by simonmar] Fix a problem with exports of the form T(..). - - - - - e4627dc8 by Simon Marlow at 2002-04-08T16:41:38+00:00 [haddock @ 2002-04-08 16:41:37 by simonmar] - Add our own versions of Html & BlockTable for the time being. - Add support for generating an index to the HTML backend - - - - - 2d73fd75 by Simon Marlow at 2002-04-09T11:23:24+00:00 [haddock @ 2002-04-09 11:23:24 by simonmar] Add '-- /' as a synonym for '-- |', for compatibility with IDoc. - - - - - 3675464e by Simon Marlow at 2002-04-09T11:33:55+00:00 [haddock @ 2002-04-09 11:33:54 by simonmar] - add the <...> syntax for marking up URLs in documentation - Make the output for data & class declarations more compact when there aren't any documentation annotations on the individual methods or constructors respectively. - - - - - 5077f5b1 by Simon Marlow at 2002-04-09T11:36:04+00:00 [haddock @ 2002-04-09 11:36:04 by simonmar] Update the TODO list - - - - - 9e83c54d by Simon Marlow at 2002-04-10T10:50:06+00:00 [haddock @ 2002-04-10 10:50:06 by simonmar] Use explicit 'px' suffix on pixel sizes; IE seems to prefer them - - - - - 052de51c by Simon Marlow at 2002-04-10T13:23:13+00:00 [haddock @ 2002-04-10 13:23:13 by simonmar] Lex URLs as a single token to avoid having to escape special characters inside the URL string. - - - - - 47187edb by Simon Marlow at 2002-04-10T13:23:55+00:00 [haddock @ 2002-04-10 13:23:55 by simonmar] Not sure why I made the constructor name for a record declaration into a TyCls name, but change it back into a Var name anyhow. - - - - - 3dc6aa81 by Simon Marlow at 2002-04-10T13:26:10+00:00 [haddock @ 2002-04-10 13:26:09 by simonmar] Lots of changes, including: - add index support to the HTML backend - clean up the renamer, put it into a monad - propogate unresolved names to the top level and report them in a nicer way - various bugfixes - - - - - c2a70a72 by Simon Marlow at 2002-04-10T13:32:39+00:00 [haddock @ 2002-04-10 13:32:39 by simonmar] Skeleton documentation - - - - - 50c98d17 by Simon Marlow at 2002-04-10T13:37:23+00:00 [haddock @ 2002-04-10 13:37:23 by simonmar] Update the TODO list, separate into pre-1.0 and post-1.0 items - - - - - f3778be6 by Simon Marlow at 2002-04-10T14:30:58+00:00 [haddock @ 2002-04-10 14:30:58 by simonmar] Add an introduction - - - - - cfbaf9f7 by Simon Marlow at 2002-04-10T14:59:51+00:00 [haddock @ 2002-04-10 14:59:51 by simonmar] Sort the module tree - - - - - 76bd7b34 by Simon Marlow at 2002-04-10T15:50:11+00:00 [haddock @ 2002-04-10 15:50:10 by simonmar] Generate a little table of contents at the top of the module doc (only if the module actually contains some section headings, though). - - - - - bb8560a1 by Simon Marlow at 2002-04-10T16:10:26+00:00 [haddock @ 2002-04-10 16:10:26 by simonmar] Now we understand (or at least don't barf on) type signatures in patterns such as you might find when scoped type variables are in use. - - - - - 86c2a026 by Simon Marlow at 2002-04-10T16:10:49+00:00 [haddock @ 2002-04-10 16:10:49 by simonmar] more updates - - - - - 1c052b0e by Simon Marlow at 2002-04-10T16:28:05+00:00 [haddock @ 2002-04-10 16:28:05 by simonmar] Parse errors in doc strings are now reported as warnings rather that causing the whole thing to fall over. It still needs cleaning up (the warning is emitted with trace) but this will do for the time being. - - - - - ace03e8f by Simon Marlow at 2002-04-10T16:38:03+00:00 [haddock @ 2002-04-10 16:38:03 by simonmar] update again - - - - - 69006c3e by Simon Marlow at 2002-04-11T13:38:02+00:00 [haddock @ 2002-04-11 13:38:02 by simonmar] mention Opera - - - - - fe9b10f8 by Simon Marlow at 2002-04-11T13:40:31+00:00 [haddock @ 2002-04-11 13:40:30 by simonmar] - copy haddock.css into the same place as the generated HTML - new option: --css <file> specifies the style sheet to use - new option: -o <dir> specifies the directory in which to generate the output. - because Haddock now needs to know where to find its default stylesheet, we have to have a wrapper script and do the haddock-inplace thing (Makefile code copied largely from fptools/happy). - - - - - 106adbbe by Simon Marlow at 2002-04-24T15:12:41+00:00 [haddock @ 2002-04-24 15:12:41 by simonmar] Stop slurping comment lines when we see a row of dashes longer than length 2: these are useful as separators. - - - - - 995d3f9e by Simon Marlow at 2002-04-24T15:14:12+00:00 [haddock @ 2002-04-24 15:14:11 by simonmar] Grok the kind of module headers we use in fptools/libraries, and pass the "portability", "stability", and "maintainer" strings through into the generated HTML. If the module header doesn't match the pattern, then we don't include the info in the HTML. - - - - - e14da136 by Simon Marlow at 2002-04-24T15:16:57+00:00 [haddock @ 2002-04-24 15:16:57 by simonmar] Done module headers now. - - - - - 2ca8dfd4 by Simon Marlow at 2002-04-24T15:57:48+00:00 [haddock @ 2002-04-24 15:57:47 by simonmar] Handle gcons in export lists (a common extension). - - - - - 044cea81 by Simon Marlow at 2002-04-25T14:20:12+00:00 [haddock @ 2002-04-25 14:20:12 by simonmar] Add the little lambda icon - - - - - 63955027 by Simon Marlow at 2002-04-25T14:40:05+00:00 [haddock @ 2002-04-25 14:40:05 by simonmar] - Add support for named chunks of documentation which can be referenced from the export list. - Copy the icon from $libdir to the destination in HTML mode. - - - - - 36e3f913 by Simon Marlow at 2002-04-25T16:48:36+00:00 [haddock @ 2002-04-25 16:48:36 by simonmar] More keyboard bashing - - - - - 7ae18dd0 by Simon Marlow at 2002-04-26T08:43:33+00:00 [haddock @ 2002-04-26 08:43:33 by simonmar] Package util reqd. to compile with 4.08.2 - - - - - bbd5fbab by Simon Marlow at 2002-04-26T10:13:00+00:00 [haddock @ 2002-04-26 10:13:00 by simonmar] Include $(GHC_HAPPY_OPTS) when compiling HsParser - - - - - 31c53d79 by Simon Marlow at 2002-04-26T11:18:57+00:00 [haddock @ 2002-04-26 11:18:56 by simonmar] - support for fundeps (partially contributed by Brett Letner - thanks Brett). - make it build with GHC 4.08.2 - - - - - c415ce76 by Simon Marlow at 2002-04-26T13:15:02+00:00 [haddock @ 2002-04-26 13:15:02 by simonmar] Move the explicit formatting of the little table for the stability/portability/maintainer info from the HTML into the CSS, and remove the explicit table size (just right-align it). - - - - - 520ee21a by Simon Marlow at 2002-04-26T16:01:44+00:00 [haddock @ 2002-04-26 16:01:44 by simonmar] Yet more keyboard bashing - this is pretty much complete now. - - - - - 2ae37179 by Simon Marlow at 2002-04-26T16:02:14+00:00 [haddock @ 2002-04-26 16:02:14 by simonmar] Add a couple of things I forgot about - - - - - b7211e04 by Simon Marlow at 2002-04-29T15:28:12+00:00 [haddock @ 2002-04-29 15:28:12 by simonmar] bugfix for declBinders on a NewTypeDecl - - - - - 640c154a by Simon Marlow at 2002-04-29T15:28:54+00:00 [haddock @ 2002-04-29 15:28:54 by simonmar] Allow '-- |' style annotations on constructors and record fields. - - - - - 393f258a by Simon Marlow at 2002-04-29T15:37:32+00:00 [haddock @ 2002-04-29 15:37:32 by simonmar] syntax fix - - - - - 8a2c2549 by Simon Marlow at 2002-04-29T15:37:48+00:00 [haddock @ 2002-04-29 15:37:48 by simonmar] Add an example - - - - - db88f8a2 by Simon Marlow at 2002-04-29T15:55:46+00:00 [haddock @ 2002-04-29 15:55:46 by simonmar] remove a trace - - - - - 2b0248e0 by Simon Marlow at 2002-04-29T15:56:19+00:00 [haddock @ 2002-04-29 15:56:19 by simonmar] Fix for 'make install' - - - - - 120453a0 by Simon Marlow at 2002-04-29T15:56:39+00:00 [haddock @ 2002-04-29 15:56:39 by simonmar] Install the auxilliary bits - - - - - 950e6dbb by Simon Marlow at 2002-04-29T15:57:30+00:00 [haddock @ 2002-04-29 15:57:30 by simonmar] Add BinDist bits - - - - - 154b9d71 by Simon Marlow at 2002-05-01T11:02:52+00:00 [haddock @ 2002-05-01 11:02:52 by simonmar] update - - - - - ba6c39fa by Simon Marlow at 2002-05-01T11:03:26+00:00 [haddock @ 2002-05-01 11:03:26 by simonmar] Add another item - - - - - bacb5e33 by Simon Marlow at 2002-05-03T08:50:00+00:00 [haddock @ 2002-05-03 08:50:00 by simonmar] Fix some typos. - - - - - 54c87895 by Sven Panne at 2002-05-05T19:40:51+00:00 [haddock @ 2002-05-05 19:40:51 by panne] As a temporary hack/workaround for a bug in GHC's simplifier, don't pass Happy the -c option for generating the parsers in this subdir. Furthermore, disable -O for HaddocParse, too. - - - - - e6c08703 by Simon Marlow at 2002-05-06T09:51:10+00:00 [haddock @ 2002-05-06 09:51:10 by simonmar] Add RPM spec file (thanks to Tom Moertel <tom-rpms at moertel.com>) - - - - - 7b8fa8e7 by Simon Marlow at 2002-05-06T12:29:26+00:00 [haddock @ 2002-05-06 12:29:26 by simonmar] Add missing type signature (a different workaround for the bug in GHC's simplifier). - - - - - cd0e300d by Simon Marlow at 2002-05-06T12:30:09+00:00 [haddock @ 2002-05-06 12:30:09 by simonmar] Remove workaround for simplifier bug in previous revision. - - - - - 687e68fa by Simon Marlow at 2002-05-06T12:32:32+00:00 [haddock @ 2002-05-06 12:32:32 by simonmar] Allow empty data declarations (another GHC extension). - - - - - 8f29f696 by Simon Marlow at 2002-05-06T12:49:21+00:00 [haddock @ 2002-05-06 12:49:21 by simonmar] Fix silly bug in named documentation block lookup. - - - - - 8e0059af by Simon Marlow at 2002-05-06T13:02:42+00:00 [haddock @ 2002-05-06 13:02:42 by simonmar] Add another named chunk with a different name - - - - - 68f8a896 by Simon Marlow at 2002-05-06T13:32:32+00:00 [haddock @ 2002-05-06 13:32:32 by simonmar] Be more lenient about extra paragraph breaks - - - - - 65fc31db by Simon Marlow at 2002-05-07T15:36:36+00:00 [haddock @ 2002-05-07 15:36:36 by simonmar] DocEmpty is a right and left-unit of DocAppend (remove it in the smart constructor). - - - - - adc81078 by Simon Marlow at 2002-05-07T15:37:15+00:00 [haddock @ 2002-05-07 15:37:15 by simonmar] Allow code blocks to be denoted with bird-tracks in addition to [...]. - - - - - 1283a3c1 by Simon Marlow at 2002-05-08T11:21:56+00:00 [haddock @ 2002-05-08 11:21:56 by simonmar] Add a facility for specifying options that affect Haddock's treatment of the module. Options are given at the top of the module in a comma-separated list, beginning with '-- #'. eg. -- # prune, hide, ignore-exports Options currently available, with their meanings: prune: ignore declarations which have no documentation annotations ignore-exports: act as if the export list were not specified (i.e. export everything local to the module). hide: do not include this module in the generated documentation, but propagate any exported definitions to modules which re-export them. There's a slight change in the semantics for re-exporting a full module by giving 'module M' in the export list: if module M does not have the 'hide' option, then the documentation will now just contain a reference to module M rather than the full inlined contents of that module. These features, and some other changes in the pipeline, are the result of discussions between myself and Manuel Chakravarty <chak at cse.unsw.edu.au> (author of IDoc) yesterday. Also: some cleanups, use a Writer monad to collect error messages in some places instead of just printing them with trace. - - - - - a2239cf5 by Simon Marlow at 2002-05-08T11:22:30+00:00 [haddock @ 2002-05-08 11:22:30 by simonmar] Update to test new features. - - - - - 6add955f by Simon Marlow at 2002-05-08T13:37:25+00:00 [haddock @ 2002-05-08 13:37:25 by simonmar] Change the markup for typewriter-font from [...] to @... at . The reasoning is that the '@' symbol is much less likely to be needed than square brackets, and we don't want to have to escape square brackets in code fragments. This will be mildly painful in the short term, but it's better to get the change out of the way as early as possible. - - - - - cda06447 by Simon Marlow at 2002-05-08T13:39:56+00:00 [haddock @ 2002-05-08 13:39:56 by simonmar] Allow nested-style comments to be used as documentation annotations too. eg. {-| ... -} is equivalent to -- | ... An extra space can also be left after the comment opener: {- | ... -}. The only version that isn't allowed is {-# ... -}, because this syntax overlaps with Haskell pragmas; use {- # ... -} instead. - - - - - db23f65e by Simon Marlow at 2002-05-08T14:48:41+00:00 [haddock @ 2002-05-08 14:48:39 by simonmar] Add support for existential quantifiers on constructors. - - - - - adce3794 by Simon Marlow at 2002-05-08T15:43:25+00:00 [haddock @ 2002-05-08 15:43:25 by simonmar] update - - - - - 62a1f436 by Simon Marlow at 2002-05-08T15:44:10+00:00 [haddock @ 2002-05-08 15:44:10 by simonmar] Update to version 0.2 - - - - - f6a24ba3 by Simon Marlow at 2002-05-09T08:48:29+00:00 [haddock @ 2002-05-09 08:48:29 by simonmar] typo - - - - - 9f9522a4 by Simon Marlow at 2002-05-09T10:33:14+00:00 [haddock @ 2002-05-09 10:33:14 by simonmar] oops, left out '/' from the special characters in the last change. - - - - - 14abcb39 by Simon Marlow at 2002-05-09T10:34:44+00:00 [haddock @ 2002-05-09 10:34:44 by simonmar] Fix buglet - - - - - b8d878be by Simon Marlow at 2002-05-09T10:35:00+00:00 [haddock @ 2002-05-09 10:35:00 by simonmar] Give a more useful instance of Show for Module. - - - - - f7bfd626 by Simon Marlow at 2002-05-09T10:37:07+00:00 [haddock @ 2002-05-09 10:37:07 by simonmar] The last commit to Main.lhs broke the delicate balance of laziness which was being used to avoid computing the dependency graph of modules. So I finally bit the bullet and did a proper topological sort of the module graph, which turned out to be easy (stealing the Digraph module from GHC - this really ought to be in the libraries somewhere). - - - - - b481c1d0 by Simon Marlow at 2002-05-09T10:37:25+00:00 [haddock @ 2002-05-09 10:37:25 by simonmar] another item done - - - - - 032e2b42 by Simon Marlow at 2002-05-09T10:44:15+00:00 [haddock @ 2002-05-09 10:44:15 by simonmar] Don't consider a module re-export as having documentation, for the purposes of deciding whether we need a Synopsis section or not. - - - - - 5fb45e92 by Simon Marlow at 2002-05-09T11:10:55+00:00 [haddock @ 2002-05-09 11:10:55 by simonmar] Add a special case for list types in ppHsAType - - - - - 1937e428 by Simon Marlow at 2002-05-09T12:43:06+00:00 [haddock @ 2002-05-09 12:43:06 by simonmar] Type synonyms can accept a ctype on the RHS, to match GHC. - - - - - 0f16ce56 by Simon Marlow at 2002-05-09T12:45:19+00:00 [haddock @ 2002-05-09 12:45:19 by simonmar] Add 'stdcall' keyword - - - - - 29b0d7d2 by Simon Marlow at 2002-05-09T13:35:45+00:00 [haddock @ 2002-05-09 13:35:45 by simonmar] Add System Requirements section - - - - - bf14dddd by Simon Marlow at 2002-05-09T13:36:11+00:00 [haddock @ 2002-05-09 13:36:11 by simonmar] Test existential types, amongst other things - - - - - 502f8f6f by Simon Marlow at 2002-05-09T13:37:35+00:00 [haddock @ 2002-05-09 13:37:35 by simonmar] Print the module name in a doc-string parse error - - - - - ca1f8d49 by Simon Marlow at 2002-05-09T13:38:04+00:00 [haddock @ 2002-05-09 13:38:04 by simonmar] Add dependency - - - - - 8d3d91ff by Simon Marlow at 2002-05-09T15:37:57+00:00 [haddock @ 2002-05-09 15:37:57 by simonmar] Add the changelog/release notes - - - - - f3960959 by Simon Marlow at 2002-05-09T15:47:47+00:00 [haddock @ 2002-05-09 15:47:47 by simonmar] mention the backquote-style of markup - - - - - 089fb6e6 by Simon Marlow at 2002-05-09T15:59:45+00:00 [haddock @ 2002-05-09 15:59:45 by simonmar] update - - - - - bdd3be0b by Simon Marlow at 2002-05-09T15:59:56+00:00 [haddock @ 2002-05-09 15:59:56 by simonmar] Document changes since 0.1 - - - - - 00fc4af8 by Simon Marlow at 2002-05-10T08:22:48+00:00 [haddock @ 2002-05-10 08:22:48 by simonmar] oops, update to version 0.2 - - - - - a8a79041 by Simon Marlow at 2002-05-10T16:05:08+00:00 [haddock @ 2002-05-10 16:05:08 by simonmar] Only include a mini-contents if there are 2 or more sections - - - - - 06653319 by Simon Marlow at 2002-05-13T09:13:12+00:00 [haddock @ 2002-05-13 09:13:12 by simonmar] fix typos - - - - - 1402b19b by Simon Marlow at 2002-05-13T10:14:22+00:00 [haddock @ 2002-05-13 10:14:22 by simonmar] Allow backquote as the right-hand quote as well as the left-hand quote, as suggested by Dean Herrington. Clean up the grammar a litte. - - - - - dcd5320d by Simon Marlow at 2002-05-13T10:44:10+00:00 [haddock @ 2002-05-13 10:44:10 by simonmar] a couple more things, prioritise a bit - - - - - a90130c4 by Simon Marlow at 2002-05-13T15:19:03+00:00 [haddock @ 2002-05-13 15:19:03 by simonmar] Cope with datatypes which have documentation on the constructor but not the type itself, and records which have documentation on the fields but not the constructor. (Thanks to Ross Paterson for pointing out the bugs). - - - - - a774d432 by Simon Marlow at 2002-05-13T15:20:54+00:00 [haddock @ 2002-05-13 15:20:54 by simonmar] Fix one of the record examples - - - - - 2d1d5218 by Simon Marlow at 2002-05-15T12:44:35+00:00 [haddock @ 2002-05-15 12:44:35 by simonmar] Preserve the newline before a bird-track, but only within a paragraph. - - - - - 1554c09a by Simon Marlow at 2002-05-15T13:03:02+00:00 [haddock @ 2002-05-15 13:03:01 by simonmar] Reworking of the internals to support documenting function arguments (the Most Wanted new feature by the punters). The old method of keeping parsed documentation in a Name -> Doc mapping wasn't going to cut it for anntations on type components, where there's no name to attach the documentation to, so I've moved to storing all the documentation in the abstract syntax. Previously some of the documentation was left in the abstract syntax by the parser, but was later extracted into the mapping. In order to avoid having to parameterise the abstract syntax over the type of documentation stored in it, we have to parse the documentation at the same time as we parse the Haskell source (well, I suppose we could store 'Either String Doc' in the HsSyn, but that's clunky). One upshot is that documentation is now parsed eagerly, and documentation parse errors are fatal (but have better line numbers in the error message). The new story simplifies matters for the code that processes the source modules, because we don't have to maintain the extra Name->Doc mapping, and it should improve efficiency a little too. New features: - Function arguments and return values can now have doc annotations. - If you refer to a qualified name in a doc string, eg. 'IO.putStr', then Haddock will emit a hyperlink even if the identifier is not in scope, so you don't have to make sure everything referred to from the documentation is imported. - several bugs & minor infelicities fixed. - - - - - 57344dc3 by Simon Marlow at 2002-05-15T13:03:19+00:00 [haddock @ 2002-05-15 13:03:19 by simonmar] Bump to version 0.3 - - - - - b2791812 by Simon Marlow at 2002-05-15T13:03:41+00:00 [haddock @ 2002-05-15 13:03:41 by simonmar] update - - - - - fead183e by Simon Marlow at 2002-05-15T13:10:15+00:00 [haddock @ 2002-05-15 13:10:15 by simonmar] Rename Foo.hs to Test.hs, and add a Makefile - - - - - b0b1f89f by Simon Marlow at 2002-05-15T13:16:07+00:00 [haddock @ 2002-05-15 13:16:07 by simonmar] - Remove the note about function argument docs not being implemented - Note that qualified identifiers can be used to point to entities that aren't in scope. - - - - - 5665f31a by Simon Marlow at 2002-05-15T13:28:46+00:00 [haddock @ 2002-05-15 13:28:46 by simonmar] Patch to add support for GHC-style primitive strings ".."#, from Ross Paterson. - - - - - 0564505d by Simon Marlow at 2002-05-17T10:51:57+00:00 [haddock @ 2002-05-17 10:51:57 by simonmar] Fix bugs in qualified name handling (A.B.f was returned as B.f) - - - - - 10e7311c by Simon Marlow at 2002-05-21T10:24:52+00:00 [haddock @ 2002-05-21 10:24:52 by simonmar] - Use an alternate tabular layout for datatypes, which is more compact - Fix some problems with the function argument documentation - - - - - 2f91c2a6 by Simon Marlow at 2002-05-21T10:27:40+00:00 [haddock @ 2002-05-21 10:27:40 by simonmar] add a few more test cases - - - - - 01c2ddd2 by Simon Marlow at 2002-05-21T10:28:33+00:00 [haddock @ 2002-05-21 10:28:33 by simonmar] Rearrange a bit, and add support for tabular datatype rendering - - - - - a4e4c5f8 by Simon Marlow at 2002-05-27T09:03:52+00:00 [haddock @ 2002-05-27 09:03:51 by simonmar] Lots of changes: - instances of a class are listed with the class, and instances involving a datatype are listed with that type. Derived instances aren't included at the moment: the calculation to find the instance head for a derived instance is non-trivial. - some formatting changes; use rows with specified height rather than cellspacing in some places. - various fixes (source file links were wrong, amongst others) - - - - - 48722e68 by Simon Marlow at 2002-05-27T12:30:38+00:00 [haddock @ 2002-05-27 12:30:37 by simonmar] - Put function arguments *before* the doc for the function, as suggested by Sven Panne. This looks nicer when the function documentation is long. - Switch to using bold for binders at the definition site, and use underline for keywords. This makes the binder stand out more. - - - - - 657204d2 by Simon Marlow at 2002-05-27T13:19:49+00:00 [haddock @ 2002-05-27 13:19:49 by simonmar] Fix bug: we weren't renaming HsDocCommentNamed in renameDecl - - - - - 592aae66 by Simon Marlow at 2002-05-27T14:10:27+00:00 [haddock @ 2002-05-27 14:10:27 by simonmar] Fix some bugs in the rendering of qualified type signatures. - - - - - 69c8f763 by Simon Marlow at 2002-05-27T14:36:45+00:00 [haddock @ 2002-05-27 14:36:45 by simonmar] warning message tweak - - - - - 16e64e21 by Simon Marlow at 2002-05-27T14:53:53+00:00 [haddock @ 2002-05-27 14:53:53 by simonmar] hyperlinked identifiers should be in <tt> - - - - - 8d5e4783 by Simon Marlow at 2002-05-27T15:56:45+00:00 [haddock @ 2002-05-27 15:56:45 by simonmar] Do something sensible for modules which don't export anything (except instances). - - - - - 9d3ef811 by Simon Marlow at 2002-05-28T10:12:50+00:00 [haddock @ 2002-05-28 10:12:50 by simonmar] Rename the module documentation properly (bug reported by Sven Panne). - - - - - ef03a1cc by Simon Marlow at 2002-05-28T10:13:04+00:00 [haddock @ 2002-05-28 10:13:04 by simonmar] Add some more test cases - - - - - 92baa0e8 by Simon Marlow at 2002-05-28T11:17:55+00:00 [haddock @ 2002-05-28 11:17:55 by simonmar] If an identifier doesn't lex, then just replace it by a DocString. - - - - - a3156213 by Simon Marlow at 2002-05-28T16:16:19+00:00 [haddock @ 2002-05-28 16:16:19 by simonmar] Only link to names in the current module which are actually listed in the documentation. A name may be exported but not present in the documentation if it is exported as part of a 'module M' export specifier. - - - - - 31acf941 by Simon Marlow at 2002-05-28T16:17:11+00:00 [haddock @ 2002-05-28 16:17:11 by simonmar] update - - - - - 7e474ebf by Sigbjorn Finne at 2002-05-28T22:42:08+00:00 [haddock @ 2002-05-28 22:42:08 by sof] Handle lone occurrences of '/', e.g., -- | This/that. [did this in the lexer rather than in the parser, as I couldn't see a way not to introduce an S/R conflict that way.] - - - - - 093f7e53 by Simon Marlow at 2002-05-29T09:09:49+00:00 [haddock @ 2002-05-29 09:09:49 by simonmar] Back out previous change until we can find a better way to do this. - - - - - 9234389c by Simon Marlow at 2002-05-29T13:19:06+00:00 [haddock @ 2002-05-29 13:19:06 by simonmar] Make the markup syntax a little more friendly: - single quotes are now interpreted literally unless they surround a valid Haskell identifier. So for example now there's no need to escape a single quote used as an apostrophe. - text to the right of a bird track is now literal (if you want marked-up text in a code block, use @...@). - - - - - b3333526 by Simon Marlow at 2002-05-29T13:38:51+00:00 [haddock @ 2002-05-29 13:38:51 by simonmar] Document recent changes to markup syntax - - - - - f93641d6 by Simon Marlow at 2002-05-29T15:27:18+00:00 [haddock @ 2002-05-29 15:27:18 by simonmar] Include the instances in abstract data types too - - - - - 613f21e3 by Simon Marlow at 2002-06-03T13:05:58+00:00 [haddock @ 2002-06-03 13:05:57 by simonmar] Allow exporting of individual class methods and record selectors. For these we have to invent the correct type signature, which we do in the simplest possible way (i.e. no context reduction nonsense in the class case). - - - - - 14b36807 by Simon Marlow at 2002-06-03T13:20:00+00:00 [haddock @ 2002-06-03 13:20:00 by simonmar] Fix linking to qualified names again (thanks to Sven Panne for pointing out the bug). - - - - - 95b10eac by Simon Marlow at 2002-06-03T13:46:48+00:00 [haddock @ 2002-06-03 13:46:48 by simonmar] Fix for exporting record selectors from a newtype declaration - - - - - 272f932e by Simon Marlow at 2002-06-03T13:56:38+00:00 [haddock @ 2002-06-03 13:56:38 by simonmar] update to version 0.3 - - - - - 1c0a3bed by Simon Marlow at 2002-06-03T14:05:07+00:00 [haddock @ 2002-06-03 14:05:07 by simonmar] Add changes in version 0.3 - - - - - 145b4626 by Simon Marlow at 2002-06-03T14:12:38+00:00 [haddock @ 2002-06-03 14:12:38 by simonmar] Render class names as proper binders - - - - - 052106b3 by Simon Marlow at 2002-06-03T14:15:10+00:00 [haddock @ 2002-06-03 14:15:10 by simonmar] update, and separate into bugs, features, and cosmetic items. - - - - - 854f4914 by Simon Marlow at 2002-06-03T14:16:13+00:00 [haddock @ 2002-06-03 14:16:13 by simonmar] More test cases - - - - - 466922c8 by Simon Marlow at 2002-06-03T14:16:56+00:00 [haddock @ 2002-06-03 14:16:56 by simonmar] Example from the paper - - - - - 9962a045 by Simon Marlow at 2002-06-03T14:17:49+00:00 [haddock @ 2002-06-03 14:17:49 by simonmar] A debugging version of the style-sheet, which gives some tables coloured backgrounds so we can see what's going on. - - - - - f16b79db by Simon Marlow at 2002-06-03T14:19:46+00:00 [haddock @ 2002-06-03 14:19:46 by simonmar] typo - - - - - 620db27b by Simon Marlow at 2002-06-03T14:48:32+00:00 [haddock @ 2002-06-03 14:48:32 by simonmar] oops, fix markup bugs - - - - - 53fd105c by Simon Marlow at 2002-06-05T09:05:07+00:00 [haddock @ 2002-06-05 09:05:07 by simonmar] Keep foreign imports when there is no export list (bug reported by Sven Panne). - - - - - 6d98989c by Simon Marlow at 2002-06-05T09:12:02+00:00 [haddock @ 2002-06-05 09:12:02 by simonmar] Identifiers in single quotes can be symbol names too (bug reported by Hal Daume). - - - - - 001811e5 by Sven Panne at 2002-06-08T14:03:36+00:00 [haddock @ 2002-06-08 14:03:36 by panne] Tiny workaround for the fact that Haddock currently ignores HsImportSpecs: Let the local_orig_env take precedence. This is no real solution at all, but improves things sometimes, e.g. in my GLUT documentation. :-) - - - - - 504d19c9 by Simon Marlow at 2002-06-11T09:23:25+00:00 [haddock @ 2002-06-11 09:23:25 by simonmar] portability nit - - - - - e13b5af4 by Simon Marlow at 2002-06-20T12:38:07+00:00 [haddock @ 2002-06-20 12:38:07 by simonmar] Empty declaration fixes. - - - - - f467a9b6 by Simon Marlow at 2002-06-20T12:39:02+00:00 [haddock @ 2002-06-20 12:39:01 by simonmar] Add support for a "prologue" - a description for the whole library, placed on the contents page before the module list. - - - - - b8dbfe20 by Simon Marlow at 2002-06-21T12:43:06+00:00 [haddock @ 2002-06-21 12:43:06 by simonmar] When we have a single code block paragraph, don't place it in <pre>..</pre>, just use <tt>..</tt> to avoid generating extra vertical white space in some browsers. - - - - - 4831dbbd by Simon Marlow at 2002-06-21T15:50:42+00:00 [haddock @ 2002-06-21 15:50:42 by simonmar] Add support for reading and writing interface files(!) This turned out to be quite easy, and necessary to get decent hyperlinks between the documentation for separate packages in the libraries. The functionality isn't quite complete yet: for a given package of modules, you'd like to say "the HTML for these modules lives in directory <dir>" (currently they are assumed to be all in the same place). Two new flags: --dump-interface=FILE dump an interface file in FILE --read-interface=FILE read interface from FILE an interface file describes *all* the modules being processed. Only the exported names are kept in the interface: if you re-export a name from a module in another interface the signature won't be copied. This is a compromise to keep the size of the interfaces sensible. Also, I added another useful option: --no-implicit-prelude avoids trying to import the Prelude. Previously this was the default, but now importing the Prelude from elsewhere makes sense if you also read in an interface containing the Prelude module, so Haddock imports the Prelude implicitly according to the Haskell spec. - - - - - d3640a19 by Sven Panne at 2002-06-23T14:54:00+00:00 [haddock @ 2002-06-23 14:54:00 by panne] Make it compile with newer GHCs - - - - - 780c506b by Sven Panne at 2002-06-23T15:44:31+00:00 [haddock @ 2002-06-23 15:44:31 by panne] Cleaned up build root handling and added more docs - - - - - 45290d2e by Simon Marlow at 2002-06-24T14:37:43+00:00 [haddock @ 2002-06-24 14:37:42 by simonmar] When reading an interface, allow a file path offset to be specified which represents the path to the HTML files for the modules specified by that interface. The path may be either relative (to the location of the HTML for this package), or absolute. The syntax is --read-interface=PATH,FILE where PATH is the path to the HTML, and FILE is the filename containing the interface. - - - - - 4e2b9ae6 by Simon Marlow at 2002-07-03T16:01:08+00:00 [haddock @ 2002-07-03 16:01:07 by simonmar] Handle import specs properly, include 'hiding'. Haddock now has a complete implementation of the Haskell module system (more or less; I won't claim it's 100% correct). - - - - - 9a9aa1a8 by Simon Marlow at 2002-07-03T16:18:16+00:00 [haddock @ 2002-07-03 16:18:16 by simonmar] Update - - - - - 560c3026 by Simon Marlow at 2002-07-04T14:56:10+00:00 [haddock @ 2002-07-04 14:56:10 by simonmar] Clean up the code that constructs the exported declarations, and fix a couple of bugs along the way. Now if you import a class hiding one of the methods, then re-export the class, the version in the documentation will correctly have the appropriate method removed. - - - - - 2c26e77d by Simon Marlow at 2002-07-04T15:26:13+00:00 [haddock @ 2002-07-04 15:26:13 by simonmar] More bugfixes to the export handling - - - - - 03e0710d by Simon Marlow at 2002-07-09T10:12:10+00:00 [haddock @ 2002-07-09 10:12:10 by simonmar] Don't require that the list type comes from "Prelude" for it to be treated as special syntax (sometimes it comes from Data.List or maybe even GHC.Base). - - - - - 44f3891a by Simon Marlow at 2002-07-09T10:12:51+00:00 [haddock @ 2002-07-09 10:12:51 by simonmar] commented-out debugging code - - - - - 97280873 by Krasimir Angelov at 2002-07-09T16:33:33+00:00 [haddock @ 2002-07-09 16:33:31 by krasimir] 'Microsoft HTML Help' support - - - - - 3dc04655 by Simon Marlow at 2002-07-10T09:40:56+00:00 [haddock @ 2002-07-10 09:40:56 by simonmar] Fix for rendering of the (->) type constructor, from Ross Paterson. - - - - - c9f149c6 by Simon Marlow at 2002-07-10T10:26:11+00:00 [haddock @ 2002-07-10 10:26:11 by simonmar] Tweaks to the MS Help support: the extra files are now only generated if you ask for them (--ms-help). - - - - - e8acc1e6 by Simon Marlow at 2002-07-10T10:57:10+00:00 [haddock @ 2002-07-10 10:57:10 by simonmar] Document all the new options since 0.3 - - - - - 8bb85544 by Simon Marlow at 2002-07-10T10:58:31+00:00 [haddock @ 2002-07-10 10:58:31 by simonmar] Sort the options a bit - - - - - abc0dd59 by Simon Marlow at 2002-07-15T09:19:38+00:00 [haddock @ 2002-07-15 09:19:38 by simonmar] Fix a bug in mkExportItems when processing a module without an explicit export list. We were placing one copy of a declaration for each binder in the declaration, which for a data type would mean one copy of the whole declaration per constructor or record selector. - - - - - dde65bb9 by Simon Marlow at 2002-07-15T09:54:16+00:00 [haddock @ 2002-07-15 09:54:16 by simonmar] merge rev. 1.35 - - - - - bd7eb8c4 by Simon Marlow at 2002-07-15T10:14:31+00:00 [haddock @ 2002-07-15 10:14:30 by simonmar] Be a bit more liberal in the kind of commenting styles we allow, as suggested by Malcolm Wallace. Mostly this consists of allowing doc comments either side of a separator token. In an export list, a section heading is now allowed before the comma, as well as after it. eg. module M where ( T(..) -- * a section heading , f -- * another section heading , g ) In record fields, doc comments are allowed anywhere (previously a doc-next was allowed only after the comma, and a doc-before was allowed only before the comma). eg. data R = C { -- | describes 'f' f :: Int -- | describes 'g' , g :: Int } - - - - - 8f6dfe34 by Simon Marlow at 2002-07-15T10:21:56+00:00 [haddock @ 2002-07-15 10:21:56 by simonmar] Mention alternative commenting styles. - - - - - fc515bb7 by Simon Marlow at 2002-07-15T16:16:50+00:00 [haddock @ 2002-07-15 16:16:50 by simonmar] Allow multiple sections/subsections before and after a comma in the export list. Also at the same time I made the syntax a little stricter (multiple commas now aren't allowed between export specs). - - - - - 80a97e74 by Simon Marlow at 2002-07-19T09:13:10+00:00 [haddock @ 2002-07-19 09:13:10 by simonmar] Allow special id's ([], (), etc.) to be used in an import declaration. - - - - - a69d7378 by Simon Marlow at 2002-07-19T09:59:02+00:00 [haddock @ 2002-07-19 09:59:02 by simonmar] Allow special id's ([], (), etc.) to be used in an import declarations. - - - - - d205fa60 by Simon Marlow at 2002-07-19T10:00:16+00:00 [haddock @ 2002-07-19 10:00:16 by simonmar] Relax the restrictions which require doc comments to be followed by semi colons - in some cases this isn't necessary. Now you can write module M where { -- | some doc class C where {} } without needing to put a semicolon before the class declaration. - - - - - e9301e14 by Simon Marlow at 2002-07-23T08:24:09+00:00 [haddock @ 2002-07-23 08:24:09 by simonmar] A new TODO list item - - - - - e5d77586 by Simon Marlow at 2002-07-23T08:40:56+00:00 [haddock @ 2002-07-23 08:40:56 by simonmar] - update the acknowledgements - remove the paragraph that described how to use explicit layout with doc comments; it isn't relevant any more. - - - - - 78a94137 by Simon Marlow at 2002-07-23T08:43:02+00:00 [haddock @ 2002-07-23 08:43:02 by simonmar] more tests - - - - - 5c320927 by Simon Marlow at 2002-07-23T08:43:26+00:00 [haddock @ 2002-07-23 08:43:26 by simonmar] Updates for version 0.4 - - - - - 488e99ae by Simon Marlow at 2002-07-23T09:10:46+00:00 [haddock @ 2002-07-23 09:10:46 by simonmar] Fix the %changelog (rpm complained that it wasn't in the right order) - - - - - a77bb373 by Simon Marlow at 2002-07-23T09:12:38+00:00 [haddock @ 2002-07-23 09:12:38 by simonmar] Another item for the TODO list - - - - - f1ec1813 by Simon Marlow at 2002-07-23T10:18:46+00:00 [haddock @ 2002-07-23 10:18:46 by simonmar] Add a version banner when invoked with -v - - - - - 1d44cadf by Simon Marlow at 2002-07-24T09:28:19+00:00 [haddock @ 2002-07-24 09:28:19 by simonmar] Remove ^Ms - - - - - 4d8d5e94 by Simon Marlow at 2002-07-24T09:42:18+00:00 [haddock @ 2002-07-24 09:42:17 by simonmar] Patches to quieten ghc -Wall, from those nice folks at Galois. - - - - - d6edc43e by Simon Marlow at 2002-07-25T14:37:29+00:00 [haddock @ 2002-07-25 14:37:28 by simonmar] Patch to allow simple hyperlinking to an arbitrary location in another module's documentation, from Volker Stolz. Now in a doc comment: #foo# creates <a name="foo"></a> And you can use the form "M\#foo" to hyperlink to the label 'foo' in module 'M'. Note that the backslash is necessary for now. - - - - - b34d18fa by Simon Marlow at 2002-08-02T09:08:22+00:00 [haddock @ 2002-08-02 09:08:22 by simonmar] The <TT> and <PRE> environments seem to use a font that is a little too small in IE. Compensate. (suggestion from Daan Leijen). - - - - - 8106b086 by Simon Marlow at 2002-08-02T09:25:23+00:00 [haddock @ 2002-08-02 09:25:20 by simonmar] Remove <P>..</P> from around list items, to reduce excess whitespace between the items of bulleted and ordered lists. (Suggestion from Daan Leijen). - - - - - c1acff8f by Simon Marlow at 2002-08-05T09:03:49+00:00 [haddock @ 2002-08-05 09:03:49 by simonmar] update - - - - - f968661c by Simon Marlow at 2002-11-11T09:32:57+00:00 [haddock @ 2002-11-11 09:32:57 by simonmar] Fix cut-n-pasto - - - - - 12d02619 by Simon Marlow at 2002-11-13T09:49:46+00:00 [haddock @ 2002-11-13 09:49:46 by simonmar] Small bugfix in the --read-interface option parsing from Brett Letner. - - - - - 30e32d5e by Ross Paterson at 2003-01-16T15:07:57+00:00 [haddock @ 2003-01-16 15:07:57 by ross] Adjust for the new exception libraries (as well as the old ones). - - - - - 871f65df by Sven Panne at 2003-02-20T21:31:40+00:00 [haddock @ 2003-02-20 21:31:40 by panne] * Add varsyms and consyms to index * Exclude empty entries from index - - - - - bc42cc87 by Sven Panne at 2003-02-24T21:26:29+00:00 [haddock @ 2003-02-24 21:26:29 by panne] Don't convert a "newtype" to a single-constructor "data" for non-abstractly exported types, they are quite different regarding strictness/pattern matching. Now a "data" without any constructors is only emitted for an abstractly exported type, regardless if it is actually a "newtype" or a "data". - - - - - 0c2a1d99 by Sven Panne at 2003-03-08T19:02:38+00:00 [haddock @ 2003-03-08 19:02:38 by panne] Fixed some broken/redirected/canonicalized links found by a very picky link checker. - - - - - 25459269 by Sven Panne at 2003-03-09T21:13:43+00:00 [haddock @ 2003-03-09 21:13:43 by panne] Don't append a fragment to non-defining index entries, only documents with a defining occurrence have a name anchor. - - - - - 6be4db86 by Sven Panne at 2003-03-10T21:34:25+00:00 [haddock @ 2003-03-10 21:34:24 by panne] Escape fragments. This fixes e.g. links to operators. - - - - - eb12972c by Ross Paterson at 2003-04-25T10:50:06+00:00 [haddock @ 2003-04-25 10:50:05 by ross] An 80% solution to generating derived instances. A complete solution would duplicate the instance inference logic, but if a type variable occurs as a constructor argument, then we can just propagate the derived class to the variable. But we know nothing of the constraints on any type variables that occur elsewhere. For example, the declarations data Either a b = Left a | Right b deriving (Eq, Ord) data Ptr a = Ptr Addr# deriving (Eq, Ord) newtype IORef a = IORef (STRef RealWorld a) deriving Eq yield the instances (Eq a, Eq b) => Eq (Either a b) (Ord a, Ord b) => Ord (Either a b) Eq (Ptr a) Ord (Ptr a) (??? a) => Eq (IORef a) The last example shows the limits of this local analysis. Note that a type variable may be in both categories: then we know a constraint, but there may be more, or a stronger constraint, e.g. data Tree a = Node a [Tree a] deriving Eq yields (Eq a, ??? a) => Eq (Tree a) - - - - - de886f78 by Simon Marlow at 2003-04-25T11:17:55+00:00 [haddock @ 2003-04-25 11:17:55 by simonmar] Some updates, including moving the derived instance item down to the bottom of the list now that Ross has contributed some code that does the job for common cases. - - - - - 1b52cffd by Simon Marlow at 2003-04-30T14:02:32+00:00 [haddock @ 2003-04-30 14:02:32 by simonmar] When installing on Windows, run cygpath over $(HADDOCKLIB) so that haddock (a mingw program, built by GHC) can understand it. You still need to be in a cygwin environment to run Haddock, because of the shell script wrapper. - - - - - d4f638de by Simon Marlow at 2003-05-06T10:04:47+00:00 [haddock @ 2003-05-06 10:04:47 by simonmar] Catch another case of a paragraph containing just a DocMonospaced that should turn into a DocCodeBlock. - - - - - 4162b2b9 by Simon Marlow at 2003-05-06T10:11:44+00:00 [haddock @ 2003-05-06 10:11:44 by simonmar] Add some more code-block tests. - - - - - 4f5802c8 by Simon Marlow at 2003-05-06T10:14:52+00:00 [haddock @ 2003-05-06 10:14:52 by simonmar] Don't turn a single DocCodeBlock into a DocMonospaced, because that tends to remove the line breaks in the code. - - - - - ef8c45f7 by Simon Marlow at 2003-05-21T15:07:21+00:00 [haddock @ 2003-05-21 15:07:21 by simonmar] Only omit the module contents when there are no section headings at all. - - - - - bcee1e75 by Sigbjorn Finne at 2003-05-30T16:50:45+00:00 [haddock @ 2003-05-30 16:50:45 by sof] cygpath: for now, steer clear of --mixed - - - - - 30567af3 by Sigbjorn Finne at 2003-05-30T17:59:28+00:00 [haddock @ 2003-05-30 17:59:28 by sof] oops, drop test defn from prev commit - - - - - b0856e7d by Simon Marlow at 2003-06-03T09:55:26+00:00 [haddock @ 2003-06-03 09:55:26 by simonmar] Two small fixes to make the output valid HTML 4.01 (transitional). Thanks to Malcolm Wallace for pointing out the problems. - - - - - 70e137ea by Simon Marlow at 2003-07-28T13:30:35+00:00 [haddock @ 2003-07-28 13:30:35 by simonmar] Add tests for a couple of bugs. - - - - - 122bd578 by Simon Marlow at 2003-07-28T13:31:25+00:00 [haddock @ 2003-07-28 13:31:25 by simonmar] Add documentation for anchors. - - - - - 0bd27cb2 by Simon Marlow at 2003-07-28T13:31:46+00:00 [haddock @ 2003-07-28 13:31:46 by simonmar] Update - - - - - 08052d42 by Simon Marlow at 2003-07-28T13:32:12+00:00 [haddock @ 2003-07-28 13:32:12 by simonmar] layout tweak. - - - - - 13942749 by Simon Marlow at 2003-07-28T13:33:03+00:00 [haddock @ 2003-07-28 13:33:03 by simonmar] Differentiate links to types/classes from links to variables/constructors with a prefix ("t:" and "v:" respectively). - - - - - d7f493b9 by Simon Marlow at 2003-07-28T13:35:17+00:00 [haddock @ 2003-07-28 13:35:16 by simonmar] When a module A exports another module's contents via 'module B', then modules which import entities from B re-exported by A should link to B.foo rather than A.foo. See examples/Bug2.hs. - - - - - d94cf705 by Simon Marlow at 2003-07-28T13:36:14+00:00 [haddock @ 2003-07-28 13:36:14 by simonmar] Update to version 0.5 - - - - - dbb776cd by Sven Panne at 2003-07-28T14:02:43+00:00 [haddock @ 2003-07-28 14:02:43 by panne] * Updated to version 0.5 * Automagically generate configure if it is not there - - - - - 6cfeee53 by Simon Marlow at 2003-07-28T14:32:43+00:00 [haddock @ 2003-07-28 14:32:42 by simonmar] Update to avoid using hslibs with GHC >= 5.04 - - - - - a1ce838f by Simon Marlow at 2003-07-28T14:33:37+00:00 [haddock @ 2003-07-28 14:33:37 by simonmar] Update for 0.5 - - - - - c0fe6493 by Simon Marlow at 2003-07-28T14:53:22+00:00 [haddock @ 2003-07-28 14:53:22 by simonmar] Markup fix - - - - - 6ea31596 by Sven Panne at 2003-07-28T16:40:45+00:00 [haddock @ 2003-07-28 16:40:45 by panne] Make it compile with GHC >= 6.01 - - - - - afcd30fc by Simon Marlow at 2003-07-30T15:04:52+00:00 [haddock @ 2003-07-30 15:04:52 by simonmar] Pay attention to import specs when building the the import env, as well as the orig env. This may fix some wrong links in documentation when import specs are being used. - - - - - 17c3137f by Simon Marlow at 2003-07-30T16:05:41+00:00 [haddock @ 2003-07-30 16:05:40 by simonmar] Rename instances based on the import_env for the module in which they are to be displayed. This should give, in many cases, better links for the types and classes mentioned in the instance head. This involves keeping around the import_env in the iface until the end, because instances are not collected up until all the modules have been processed. Fortunately it doesn't seem to affect performance much. Instance heads are now attached to ExportDecls, rather than the HTML backend passing around a separate mapping for instances. This is a cleanup. - - - - - 3d3b5c87 by Sven Panne at 2003-08-04T10:18:24+00:00 [haddock @ 2003-08-04 10:18:24 by panne] Don't print parentheses around one-element contexts - - - - - 9e3f3f2d by Simon Marlow at 2003-08-04T12:59:47+00:00 [haddock @ 2003-08-04 12:59:47 by simonmar] A couple of TODOs. - - - - - e9d8085c by Simon Marlow at 2003-08-05T14:10:31+00:00 [haddock @ 2003-08-05 14:10:31 by simonmar] I'm not sure why, but it seems that the index entries for non-defining occurrences of entities did not have an anchor - the link just pointed to the module. This fixes it. - - - - - ff5c7d6d by Simon Marlow at 2003-08-15T14:42:59+00:00 [haddock @ 2003-08-15 14:42:59 by simonmar] Convert the lexer to Alex, and fix a bug in the process. - - - - - 1aa077bf by Simon Marlow at 2003-08-15T15:00:18+00:00 [haddock @ 2003-08-15 15:00:18 by simonmar] Update - - - - - d3de1e38 by Simon Marlow at 2003-08-15T15:01:03+00:00 [haddock @ 2003-08-15 15:01:03 by simonmar] wibbles - - - - - b40ece3b by Simon Marlow at 2003-08-18T10:04:47+00:00 [haddock @ 2003-08-18 10:04:47 by simonmar] Lex the 'mdo' keyword as 'do'. - - - - - 8f9a1146 by Simon Marlow at 2003-08-18T11:48:24+00:00 [haddock @ 2003-08-18 11:48:24 by simonmar] Two bugs from Sven. - - - - - ea54ebc0 by Simon Marlow at 2003-08-18T11:48:46+00:00 [haddock @ 2003-08-18 11:48:46 by simonmar] Fixes to the new lexer. - - - - - d5f6a4b5 by Simon Marlow at 2003-08-19T09:09:03+00:00 [haddock @ 2003-08-19 09:09:03 by simonmar] Further wibbles to the syntax. - - - - - 6bbdadb7 by Sven Panne at 2003-08-26T18:45:35+00:00 [haddock @ 2003-08-26 18:45:35 by panne] Use autoreconf instead of autoconf - - - - - 32e889cb by Sven Panne at 2003-08-26T19:01:19+00:00 [haddock @ 2003-08-26 19:01:18 by panne] Made option handling a bit more consistent with other tools, in particular: Every program in fptools should output * version info on stdout and terminate successfully when -V or --version * usage info on stdout and terminate successfully when -? or --help * usage info on stderr and terminate unsuccessfully when an unknown option is given. - - - - - 5d156a91 by Sven Panne at 2003-08-26T19:20:55+00:00 [haddock @ 2003-08-26 19:20:55 by panne] Make it *very* clear that we terminate when given a -V/--version flag - - - - - e6577265 by Sven Panne at 2003-08-27T07:50:03+00:00 [haddock @ 2003-08-27 07:50:02 by panne] * Made -D a short option for --dump-interface. * Made -m a short option for --ms-help. * Made -n a short option for --no-implicit-prelude. * Made -c a short option for --css. * Removed DocBook options from executable (they didn't do anything), but mark them as reserved in the docs. Note that the short option for DocBook output is now -S (from SGML) instead of -d. The latter is now a short option for --debug. * The order of the Options in the documentation now matches the order printed by Haddock itself. Note: Although changing the names of options is often a bad idea, I'd really like to make the options for the programs in fptools more consistent and compatible to the ones used in common GNU programs. - - - - - d303ff98 by Simon Marlow at 2003-09-10T08:23:48+00:00 [haddock @ 2003-09-10 08:23:48 by simonmar] Add doc subdir. Patch contributed by: Ian Lynagh <igloo at earth.li>. - - - - - 9a70e46a by Simon Marlow at 2003-09-10T08:24:32+00:00 [haddock @ 2003-09-10 08:24:32 by simonmar] Install these files in $(datadir), not $(libdir), since they're architecture independent. Patch contributed by: Ian Lynagh <igloo at earth.li>. - - - - - bbb87e7a by Simon Marlow at 2003-09-10T08:25:31+00:00 [haddock @ 2003-09-10 08:25:31 by simonmar] Haddock's supplementary HTML bits now live in $(datadir), not $(libdir). Patch contributed by: Ian Lynagh <igloo at earth.li>. - - - - - 3587c24b by Simon Marlow at 2003-09-22T10:34:38+00:00 [haddock @ 2003-09-22 10:34:38 by simonmar] Allow installing of docs. - - - - - d510b517 by Sven Panne at 2003-10-11T08:10:44+00:00 [haddock @ 2003-10-11 08:10:44 by panne] Include architecture-independent files in file list - - - - - 187d7618 by Sigbjorn Finne at 2003-10-20T17:19:24+00:00 [haddock @ 2003-10-20 17:19:22 by sof] support for i-parameters + zip comprehensions - - - - - b6c7a273 by Simon Marlow at 2003-11-03T14:24:24+00:00 [haddock @ 2003-11-03 14:24:24 by simonmar] Update TODO file. - - - - - 58513e33 by Simon Marlow at 2003-11-05T11:22:04+00:00 [haddock @ 2003-11-05 11:22:04 by simonmar] Remove the last of the uses of 'trace' to emit warnings, and tidy up a couple of places where duplicate warnings were being emitted. - - - - - 33a78846 by Simon Marlow at 2003-11-05T11:30:53+00:00 [haddock @ 2003-11-05 11:30:52 by simonmar] - Suppress warnings about unknown imported modules by default. - Add a -v/--verbose flag to re-enable these warnings. The general idea is to suppress the "Warning: unknown module: Prelude" warnings which most Haddock users will see every time, and which aren't terribly useful. - - - - - a969de7f by Simon Marlow at 2003-11-05T12:30:28+00:00 [haddock @ 2003-11-05 12:30:28 by simonmar] - Remove the emboldening of index entries for defining locations. This isn't useful, and breaks abstractions. - If an entity is re-exported by a module but the module doesn't include documentation for that entity (perhaps because it is re-exported by 'module M'), then don't attempt to hyperlink to the documentation from the index. Instead, just list that module in the index, to indicate that the entity is exported from there. - - - - - f14ea82a by Simon Marlow at 2003-11-05T15:15:59+00:00 [haddock @ 2003-11-05 15:15:59 by simonmar] Index overhaul: - no more separate type/class and variable/function indices - the index now makes a distinction between different entities with the same name. One example is a type constructor with the same name as a data constructor, but another example is simply a function with the same name exported by two different modules. For example, the index entry for 'catch' now looks like this: catch 1 (Function) Control.Exception 2 (Function) GHC.Exception, Prelude, System.IO, System.IO.Error making it clear that there are two different 'catch'es, but one of them is exported by several modules. - Each index page now has the index contents (A B C ...) at the top. Please let me know if you really hate any of this. - - - - - 01a25ca6 by Simon Marlow at 2003-11-05T15:16:38+00:00 [haddock @ 2003-11-05 15:16:38 by simonmar] Update - - - - - 1a7ccb86 by Simon Marlow at 2003-11-05T17:16:05+00:00 [haddock @ 2003-11-05 17:16:04 by simonmar] Support for generating a single unified index for several packages. --use-index=URL turns off normal index generation, causes Index links to point to URL. --gen-index generates an combined index from the specified interfaces. Currently doesn't work exactly right, because the interfaces don't contain the iface_reexported info. I'll need to fix that up. - - - - - a2bca16d by Simon Marlow at 2003-11-06T10:44:52+00:00 [haddock @ 2003-11-06 10:44:52 by simonmar] Include iface_reexported in the .haddock file. This unfortunately bloats the file (40% for base). If this gets to be a problem we can always apply the dictionary trick that GHC uses for squashing .hi files. - - - - - 0a09c293 by Simon Marlow at 2003-11-06T12:39:47+00:00 [haddock @ 2003-11-06 12:39:46 by simonmar] - Add definition lists, marked up like this: -- | This is a definition list: -- -- [@foo@] The description of @foo at . -- -- [@bar@] The description of @bar at . Cunningly, the [] characters are not treated specially unless a [ is found at the beginning of a paragraph, in which case the ] becomes special in the following text. - Add --use-contents and --gen-contents, along the lines of --use-index and --gen-index added yesterday. Now we can generate a combined index and contents for the whole of the hierarchical libraries, and in theory the index/contents on the system could be updated as new packages are added. - - - - - fe1b3460 by Simon Marlow at 2003-11-06T14:47:36+00:00 [haddock @ 2003-11-06 14:47:36 by simonmar] Remove the 'Parent' button - it is of dubious use, and often points into thin air. - - - - - db6d762f by Simon Marlow at 2003-11-06T16:48:14+00:00 [haddock @ 2003-11-06 16:48:11 by simonmar] - Include the OptHide setting in the interface, so we don't include hidden modules in the combined index/contents. - Add a -k/--package flag to set the package name for the current set of modules. The package name for each module is now shown in the right-hand column of the contents, in a combined contents page. - - - - - 7d71718b by Simon Marlow at 2003-11-06T16:50:28+00:00 [haddock @ 2003-11-06 16:50:28 by simonmar] Add -k/--package docs - - - - - ef43949d by Simon Marlow at 2003-11-06T16:51:23+00:00 [haddock @ 2003-11-06 16:51:23 by simonmar] Bump to 0.6 - - - - - 1c419e06 by Simon Marlow at 2003-11-06T16:51:50+00:00 [haddock @ 2003-11-06 16:51:50 by simonmar] update - - - - - 69422327 by Simon Marlow at 2003-11-10T14:41:06+00:00 [haddock @ 2003-11-10 14:41:05 by simonmar] Re-exporting names from a different package is problematic, because we don't have access to the full documentation for the entity. Currently Haddock just ignores entities with no documentation, but this results in bogus-looking empty documentation for many of the modules in the haskell98 package. So: - the documentation will now just list the name, as a link pointing to the location of the actual documentation. - now we don't attempt to link to these re-exported entities if they are referred to by the current module. Additionally: - If there is no documentation in the current module, include just the Synopsis section (rather than just the documentation section, as it was before). This just looks nicer and was on the TODO list. - - - - - 3c3fc433 by Simon Marlow at 2003-11-10T14:51:59+00:00 [haddock @ 2003-11-10 14:51:59 by simonmar] Fix for getReExports: take into account names which are not visible because they are re-exported from a different package. - - - - - 31c8437b by Simon Marlow at 2003-11-10T15:10:53+00:00 [haddock @ 2003-11-10 15:10:53 by simonmar] Version 0.6 changes - - - - - a7c2430b by Simon Marlow at 2003-11-10T15:15:58+00:00 [haddock @ 2003-11-10 15:15:58 by simonmar] getReExports: one error case that isn't - - - - - 00cc459c by Simon Marlow at 2003-11-10T16:15:19+00:00 [haddock @ 2003-11-10 16:15:18 by simonmar] copyright update - - - - - ca62408d by Simon Marlow at 2003-11-11T09:57:25+00:00 [haddock @ 2003-11-11 09:57:25 by simonmar] Version 0.6 - - - - - 3acbf818 by Simon Marlow at 2003-11-11T12:10:44+00:00 [haddock @ 2003-11-11 12:10:44 by simonmar] Go back to producing just the documentation section, rather than just the synopsis section, for a module with no documentation annotations. One reason is that the synopsis section tries to link each entity to its documentation on the same page. Also, the doc section anchors each entity, and it lists instances which the synopsis doesn't. - - - - - 6c90abc2 by Simon Marlow at 2003-11-12T10:03:39+00:00 [haddock @ 2003-11-12 10:03:39 by simonmar] 2002 -> 2003 - - - - - 090bbc4c by Simon Marlow at 2003-11-28T12:08:00+00:00 [haddock @ 2003-11-28 12:08:00 by simonmar] update - - - - - 8096a832 by Simon Marlow at 2003-11-28T12:09:58+00:00 [haddock @ 2003-11-28 12:09:58 by simonmar] Fix some of the problems with Haddock generating pages that are too wide. Now we only specify 'nowrap' when it is necessary to avoid a code box getting squashed up by the text to the right of it. - - - - - 35294929 by Sven Panne at 2003-12-29T17:16:31+00:00 [haddock @ 2003-12-29 17:16:31 by panne] Updated my email address - - - - - cdb697bf by Simon Marlow at 2004-01-08T10:14:24+00:00 [haddock @ 2004-01-08 10:14:24 by simonmar] Add instructions for using GHC to pre-process source for feeding to Haddock. - - - - - 8dfc491f by Simon Marlow at 2004-01-09T12:45:46+00:00 [haddock @ 2004-01-09 12:45:46 by simonmar] Add -optP-P to example ghc command line. - - - - - ac41b820 by Simon Marlow at 2004-02-03T11:02:03+00:00 [haddock @ 2004-02-03 11:02:03 by simonmar] Fix bug in index generation - - - - - f4e7edcb by Simon Marlow at 2004-02-10T11:51:16+00:00 [haddock @ 2004-02-10 11:51:16 by simonmar] Don't throw away whitespace at the beginning of a line (experimental fix). - - - - - 68e212d2 by Simon Marlow at 2004-02-10T12:10:08+00:00 [haddock @ 2004-02-10 12:10:08 by simonmar] Fix for previous commit: I now realise why the whitespace was stripped from the beginning of the line. Work around it. - - - - - e7d7f2df by Sven Panne at 2004-02-10T18:38:45+00:00 [haddock @ 2004-02-10 18:38:45 by panne] Make Haddock link with the latest relocated monad transformer package - - - - - 992d4225 by Simon Marlow at 2004-02-16T10:21:35+00:00 [haddock @ 2004-02-16 10:21:35 by simonmar] Add a TODO - - - - - 1ac55326 by Simon Marlow at 2004-03-12T11:33:39+00:00 [haddock @ 2004-03-12 11:33:39 by simonmar] Add an item. - - - - - 0478e903 by Simon Marlow at 2004-03-15T12:24:05+00:00 [haddock @ 2004-03-15 12:24:05 by simonmar] Add an item. - - - - - 6f26d21a by Simon Marlow at 2004-03-18T14:21:29+00:00 [haddock @ 2004-03-18 14:21:29 by simonmar] Fix URL - - - - - 19b6bb99 by Simon Marlow at 2004-03-22T14:09:03+00:00 [haddock @ 2004-03-22 14:09:03 by simonmar] getReExports was bogus: we should really look in the import_env to find the documentation for an entity which we are re-exporting without documentation. Suggested by: Ross Paterson (patch modified by me). - - - - - 5c756031 by Simon Marlow at 2004-03-24T09:42:11+00:00 [haddock @ 2004-03-24 09:42:10 by simonmar] hiding bug from Ross Paterson (fixed in rev 1.59 of Main.hs) - - - - - 1b692e6c by Simon Marlow at 2004-03-24T10:10:50+00:00 [haddock @ 2004-03-24 10:10:50 by simonmar] mkExportItems fix & simplification: we should be looking at the actual exported names (calculated earlier) to figure out which subordinates of a declaration are exported. This means that if you export a record, and name its fields separately in the export list, the fields will still be visible in the documentation for the constructor. - - - - - 90e5e294 by Simon Marlow at 2004-03-24T10:12:08+00:00 [haddock @ 2004-03-24 10:12:08 by simonmar] Make restrictCons take into account record field names too (removing a ToDo). - - - - - 2600efa4 by Simon Marlow at 2004-03-24T10:16:17+00:00 [haddock @ 2004-03-24 10:16:17 by simonmar] Record export tests. - - - - - 6a8575c7 by Simon Marlow at 2004-03-25T09:35:14+00:00 [haddock @ 2004-03-25 09:35:14 by simonmar] restrictTo: fix for restricting a newtype with a record field. - - - - - dcf55a8d by Simon Marlow at 2004-03-25T10:01:42+00:00 [haddock @ 2004-03-25 10:01:42 by simonmar] Fix duplicate instance bug - - - - - f49aa758 by Simon Marlow at 2004-03-25T10:02:41+00:00 [haddock @ 2004-03-25 10:02:41 by simonmar] Duplicate instance bug. - - - - - 7b87344c by Simon Marlow at 2004-03-25T10:29:56+00:00 [haddock @ 2004-03-25 10:29:56 by simonmar] If a name is imported from two places, one hidden and one not, choose the unhidden one to link to. Also, when there's only a hidden module to link to, don't try linking to it. - - - - - 40f44d7b by Simon Marlow at 2004-03-25T15:17:24+00:00 [haddock @ 2004-03-25 15:17:23 by simonmar] Add support for collaspible parts of the page, with a +/- button and a bit of JavaScript. Make the instances collapsible, and collapse them by default. This makes documentation with long lists of instances (eg. the Prelude) much easier to read. Maybe we should give other documentation sections the same treatment. - - - - - 9b64dc0f by Simon Marlow at 2004-03-25T15:20:55+00:00 [haddock @ 2004-03-25 15:20:55 by simonmar] Update - - - - - c2fff7f2 by Simon Marlow at 2004-03-25T15:45:10+00:00 [haddock @ 2004-03-25 15:45:10 by simonmar] Eliminate some unnecessary spaces in the HTML rendering - - - - - b7948ff0 by Simon Marlow at 2004-03-25T16:00:37+00:00 [haddock @ 2004-03-25 16:00:36 by simonmar] Remove all that indentation in the generated HTML to keep the file sizes down. - - - - - da2bb4ca by Sven Panne at 2004-03-27T09:57:58+00:00 [haddock @ 2004-03-27 09:57:57 by panne] Added the new-born haddock.js to the build process and the documentation. - - - - - b99e6f8c by Sven Panne at 2004-03-27T10:32:20+00:00 [haddock @ 2004-03-27 10:32:20 by panne] "type" is a required attribute of the "script" element - - - - - 562b185a by Sven Panne at 2004-03-27T12:52:34+00:00 [haddock @ 2004-03-27 12:52:34 by panne] Add a doctype for the contents page, too. - - - - - f6a99c2d by Simon Marlow at 2004-04-14T10:03:25+00:00 [haddock @ 2004-04-14 10:03:25 by simonmar] fix for single-line comment syntax - - - - - de366303 by Simon Marlow at 2004-04-20T13:08:04+00:00 [haddock @ 2004-04-20 13:08:04 by simonmar] Allow a 'type' declaration to include documentation comments. These will be ignored by Haddock, but at least one user (Johannes Waldmann) finds this feature useful, and it's easy to add. - - - - - fd78f51e by Simon Marlow at 2004-05-07T15:14:56+00:00 [haddock @ 2004-05-07 15:14:56 by simonmar] - update copyright - add version to abstract - - - - - 59f53e32 by Sven Panne at 2004-05-09T14:39:53+00:00 [haddock @ 2004-05-09 14:39:53 by panne] Fix the fix for single-line comment syntax, ------------------------------------------- is now a valid comment line again. - - - - - 8b18f2fe by Simon Marlow at 2004-05-10T10:11:51+00:00 [haddock @ 2004-05-10 10:11:51 by simonmar] Update - - - - - 225a491d by Ross Paterson at 2004-05-19T13:10:23+00:00 [haddock @ 2004-05-19 13:10:23 by ross] Make the handling of "deriving" slightly smarter, by ignoring data constructor arguments that are identical to the lhs. Now handles things like data Tree a = Leaf a | Branch (Tree a) (Tree a) deriving ... - - - - - 37588686 by Mike Thomas at 2004-05-21T06:38:14+00:00 [haddock @ 2004-05-21 06:38:14 by mthomas] Windows exe extensions (bin remains for Unix). - - - - - cf2b9152 by Simon Marlow at 2004-05-25T09:34:54+00:00 [haddock @ 2004-05-25 09:34:54 by simonmar] Add some TODO items - - - - - 4d29cdfc by Simon Marlow at 2004-05-25T10:41:46+00:00 [haddock @ 2004-05-25 10:41:46 by simonmar] Complain if -h is used with --gen-index or --gen-contents, because it'll overwrite the new index/contents. - - - - - 2e0771e0 by Mike Thomas at 2004-05-28T20:17:55+00:00 [haddock @ 2004-05-28 20:17:55 by mthomas] Windows: search for templates in executable directory. Unix: Haddock tries cwd first rather than error if no -l arg. - - - - - 8d10bde1 by Sven Panne at 2004-06-05T16:53:34+00:00 [haddock @ 2004-06-05 16:53:34 by panne] Misc. rpm spec file cleanup, including: * make BuildRoot handling more consistent * added default file attributes * consistent defines and tags - - - - - 59974349 by Sven Panne at 2004-06-05T18:01:00+00:00 [haddock @ 2004-06-05 18:01:00 by panne] More rpm spec file cleanup, including: * added some BuildRequires * changed packager to me, so people can complain at the right place :-] * consistently refer to haskell.org instead of www.haskell.org - - - - - b94d4903 by Simon Marlow at 2004-07-01T11:08:58+00:00 [haddock @ 2004-07-01 11:08:57 by simonmar] Update to the +/- buttons: use a resized image rather than a <button>. Still seeing some strange effects in Konqueror, so might need to use a fixed-size image instead. - - - - - d5278f67 by Sven Panne at 2004-07-04T15:15:55+00:00 [haddock @ 2004-07-04 15:15:55 by panne] Install pictures for +/- pictures, too (JPEG is a strange format for graphics like this, I would have expected GIF or PNG here.) Things look fine with Konqueror and Netscape on Linux now, the only downside is that the cursor doesn't change when positioned above the "button". - - - - - 46dec6c5 by Sven Panne at 2004-07-13T17:59:28+00:00 [haddock @ 2004-07-13 17:59:28 by panne] A quote is a valid part of a Haskell identifier, but it would interfere with an ECMA script string delimiter, so escape it there. - - - - - 1d7bc432 by Simon Marlow at 2004-07-22T08:54:06+00:00 [haddock @ 2004-07-22 08:54:06 by simonmar] Add single quote to $ident, so you can say eg. 'foldl'' to refer to foldl' (the longest match rule is our friend). Bug reported by Adrian Hey <ahey at iee.org> - - - - - f183618b by Krasimir Angelov at 2004-07-27T22:59:35+00:00 [haddock @ 2004-07-27 22:58:23 by krasimir] Add basic support for Microsoft HTML Help 2.0 - - - - - d515d0c2 by Krasimir Angelov at 2004-07-27T23:02:36+00:00 [haddock @ 2004-07-27 23:02:36 by krasimir] escape names in the index - - - - - a5f1be23 by Krasimir Angelov at 2004-07-27T23:05:21+00:00 [haddock @ 2004-07-27 23:05:21 by krasimir] Add jsFile, plusFile and minusFile to the file list - - - - - c4fb4881 by Krasimir Angelov at 2004-07-28T22:12:10+00:00 [haddock @ 2004-07-28 22:12:09 by krasimir] bugfix. Move contentsHtmlFile, indexHtmlFile and subIndexHtmlFile functions to HaddockUtil.hs module to make them accessible from HaddockHH2.hs - - - - - 64d30b1d by Krasimir Angelov at 2004-07-30T22:15:47+00:00 [haddock @ 2004-07-30 22:15:45 by krasimir] more stuffs - support for separated compilation of packages - the contents page now uses DHTML TreeView - fixed copyFile bug - - - - - 133c8c5c by Krasimir Angelov at 2004-07-31T12:04:38+00:00 [haddock @ 2004-07-31 12:04:37 by krasimir] make the DHtmlTree in contents page more portable. The +/- buttons are replaced with new images which looks more beatiful. - - - - - 79040963 by Krasimir Angelov at 2004-07-31T13:10:20+00:00 [haddock @ 2004-07-31 13:10:20 by krasimir] Make DHtmlTree compatible with Mozila browser - - - - - 1a55dc90 by Krasimir Angelov at 2004-07-31T14:52:55+00:00 [haddock @ 2004-07-31 14:52:55 by krasimir] fix - - - - - 85ce0237 by Krasimir Angelov at 2004-07-31T14:53:28+00:00 [haddock @ 2004-07-31 14:53:28 by krasimir] HtmlHelp 1.x - - - - - 3c0c53ba by Krasimir Angelov at 2004-07-31T20:35:21+00:00 [haddock @ 2004-07-31 20:35:21 by krasimir] Added support for DevHelp - - - - - d42b5af1 by Krasimir Angelov at 2004-07-31T21:17:51+00:00 [haddock @ 2004-07-31 21:17:51 by krasimir] Document new features in HtmlHelp - - - - - 790fe21e by Krasimir Angelov at 2004-08-01T15:14:02+00:00 [haddock @ 2004-08-01 15:14:02 by krasimir] add missing imports - - - - - fd7cc6bc by Krasimir Angelov at 2004-08-01T19:52:08+00:00 [haddock @ 2004-08-01 19:52:06 by krasimir] fix some bugs. Now I have got the entire libraries documentation in HtmlHelp 2.0 format. - - - - - 94ad7ac8 by Krasimir Angelov at 2004-08-01T19:53:50+00:00 [haddock @ 2004-08-01 19:53:50 by krasimir] I forgot to add the new +/- images - - - - - f0c65388 by Krasimir Angelov at 2004-08-02T16:25:53+00:00 [haddock @ 2004-08-02 16:25:53 by krasimir] Add root node to the table of contents. All modules in tree are not children of the root - - - - - f50bd85d by Sven Panne at 2004-08-02T18:17:46+00:00 [haddock @ 2004-08-02 18:17:46 by panne] Mainly DocBook fixes - - - - - 09527ce3 by Sven Panne at 2004-08-02T20:02:29+00:00 [haddock @ 2004-08-02 20:02:29 by panne] Fixed -o/--odir handling. Generating the output, especially the directory handling, is getting a bit convoluted nowadays... - - - - - c8fbacfa by Sven Panne at 2004-08-02T20:31:13+00:00 [haddock @ 2004-08-02 20:31:13 by panne] Warning police - - - - - 37830bff by Sven Panne at 2004-08-02T20:32:29+00:00 [haddock @ 2004-08-02 20:32:28 by panne] Nuked dead code - - - - - 13847171 by Sven Panne at 2004-08-02T21:12:27+00:00 [haddock @ 2004-08-02 21:12:25 by panne] Use pathJoin instead of low-level list-based manipulation for FilePaths - - - - - c711d61e by Sven Panne at 2004-08-02T21:16:02+00:00 [haddock @ 2004-08-02 21:16:02 by panne] Removed WinDoze CRs - - - - - b1f7dc88 by Sven Panne at 2004-08-03T19:35:59+00:00 [haddock @ 2004-08-03 19:35:59 by panne] Fixed spelling of "http-equiv" attribute - - - - - dd5f394e by Sven Panne at 2004-08-03T19:44:03+00:00 [haddock @ 2004-08-03 19:44:03 by panne] Pacify W3C validator: * Added document encoding (currently UTF-8, not sure if this is completely correct) * Fixed syntax of `id' attributes * Added necessary `alt' attribute for +/- images Small layout improvement: * Added space after +/- images (still not perfect, but better than before) - - - - - 919c47c6 by Sigbjorn Finne at 2004-08-03T19:45:11+00:00 [haddock @ 2004-08-03 19:45:11 by sof] make it compile with <= ghc-6.1 - - - - - 4d6f01d8 by Sigbjorn Finne at 2004-08-03T19:45:30+00:00 [haddock @ 2004-08-03 19:45:30 by sof] ffi wibble - - - - - 4770643a by Sven Panne at 2004-08-03T20:47:46+00:00 [haddock @ 2004-08-03 20:47:46 by panne] Fixed CSS for button style. Note that only "0" is a valid measure without a unit! - - - - - 14aaf2e5 by Sven Panne at 2004-08-03T21:07:59+00:00 [haddock @ 2004-08-03 21:07:58 by panne] Improved spacing of dynamic module tree - - - - - 97c3579a by Simon Marlow at 2004-08-09T11:03:04+00:00 [haddock @ 2004-08-09 11:03:04 by simonmar] Add FormatVersion Patch submitted by: George Russell <ger at informatik.uni-bremen.de> - - - - - af7f8c03 by Simon Marlow at 2004-08-09T11:55:07+00:00 [haddock @ 2004-08-09 11:55:05 by simonmar] Add support for a short description for each module, which is included in the contents. The short description should be given in a "Description: " field of the header. Included in this patch are changes that make the format of the header a little more flexible. From the comments: -- all fields in the header are optional and have the form -- -- [spaces1][field name][spaces] ":" -- [text]"\n" ([spaces2][space][text]"\n" | [spaces]"\n")* -- where each [spaces2] should have [spaces1] as a prefix. -- -- Thus for the key "Description", -- -- > Description : this is a -- > rather long -- > -- > description -- > -- > The module comment starts here -- -- the value will be "this is a .. description" and the rest will begin -- at "The module comment". The header fields must be in the following order: Module, Description, Copyright, License, Maintainer, Stability, Portability. Patches submitted by: George Russell <ger at informatik.uni-bremen.de>, with a few small changes be me, mostly to merge with other recent changes. ToDo: document the module header. - - - - - 7b865ad3 by Simon Marlow at 2004-08-10T14:09:57+00:00 [haddock @ 2004-08-10 14:09:57 by simonmar] Fixes for DevHelp/HtmlHelp following introduction of short module description. - - - - - 814766cd by Simon Marlow at 2004-08-10T14:33:46+00:00 [haddock @ 2004-08-10 14:33:45 by simonmar] Fixes to installation under Windows. - - - - - 39cf9ede by Simon Marlow at 2004-08-12T12:08:23+00:00 [haddock @ 2004-08-12 12:08:23 by simonmar] Avoid using string-gap tricks. - - - - - b6d78551 by Simon Marlow at 2004-08-13T10:53:21+00:00 [haddock @ 2004-08-13 10:53:21 by simonmar] Update - - - - - eaae7417 by Simon Marlow at 2004-08-13T10:53:50+00:00 [haddock @ 2004-08-13 10:53:50 by simonmar] Test for primes in quoted links - - - - - 68c34f06 by Sven Panne at 2004-08-16T19:59:38+00:00 [haddock @ 2004-08-16 19:59:36 by panne] XMLification - - - - - 7f45a6f9 by Sven Panne at 2004-08-18T16:42:54+00:00 [haddock @ 2004-08-18 16:42:54 by panne] Re-added indices + minor fixes - - - - - 8a5dd97c by Sigbjorn Finne at 2004-08-25T17:15:42+00:00 [haddock @ 2004-08-25 17:15:42 by sof] backquote HADDOCK_VERSION defn for <= ghc-6.0.x; believe this is only needed under mingw - - - - - 4b1b42ea by Sven Panne at 2004-08-26T20:08:50+00:00 [haddock @ 2004-08-26 20:08:49 by panne] SGML is dead, long live DocBook XML! Note: The BuildRequires tags in the spec files are still incomplete and the documentation about the DocBook tools needs to be updated, too. Stay tuned... - - - - - 8d52cedb by Sven Panne at 2004-08-26T21:03:19+00:00 [haddock @ 2004-08-26 21:03:19 by panne] Updated BuildRequires tags. Alas, there seems to be no real standard here, so your mileage may vary... At least the current specs should work on SuSE Linux. - - - - - e6982912 by Sigbjorn Finne at 2004-08-30T15:44:59+00:00 [haddock @ 2004-08-30 15:44:59 by sof] escape HADDOCK_VERSION double quotes on all platforms when compiling with <=6.0.x - - - - - b3fbc867 by Simon Marlow at 2004-08-31T13:09:42+00:00 [haddock @ 2004-08-31 13:09:42 by simonmar] Avoid GHC/shell versionitis and create Version.hs - - - - - c359e16a by Sven Panne at 2004-09-05T19:12:33+00:00 [haddock @ 2004-09-05 19:12:32 by panne] * HTML documentation for "foo.xml" goes into directory "foo" again, not "foo-html". This is nicer and consistent with the behaviour for building the docs from SGML. * Disabled building PostScript documentation in the spec files for now, there are some strange issues with the FO->PS conversion for some files which have to be clarified first. - - - - - c68b1eba by Sven Panne at 2004-09-24T07:04:38+00:00 [haddock @ 2004-09-24 07:04:38 by panne] Switched the default state for instances and the module hierarchy to non-collapsed. This can be reversed when we finally use cookies from JavaScript to have a more persistent state. Previously going back and forth in the documentation was simply too annoying because everything was collapsed again and therefore the documentation was not easily navigatable. - - - - - dfb32615 by Simon Marlow at 2004-09-30T08:21:29+00:00 [haddock @ 2004-09-30 08:21:29 by simonmar] Add a feature request - - - - - 45ff783c by Sven Panne at 2004-10-23T19:54:00+00:00 [haddock @ 2004-10-23 19:54:00 by panne] Improved the Cygwin/MinGW chaos a little bit. There is still confusion about host platform vs. target platform... - - - - - 5f644714 by Krasimir Angelov at 2004-10-28T16:01:51+00:00 [haddock @ 2004-10-28 16:01:51 by krasimir] update for ghc-6.3+ - - - - - 92d9753e by Sven Panne at 2004-11-01T16:39:01+00:00 [haddock @ 2004-11-01 16:39:01 by panne] Revert previous commit: It's Network.URI which should be changed, not Haddock. - - - - - 05f70f6e by Simon Marlow at 2005-01-04T16:15:51+00:00 [haddock @ 2005-01-04 16:15:51 by simonmar] parser fix: allow qualified specialids. - - - - - 47870837 by Simon Marlow at 2005-01-04T16:16:54+00:00 [haddock @ 2005-01-04 16:16:54 by simonmar] Add a test - - - - - ff11fc2c by Ross Paterson at 2005-01-10T19:18:22+00:00 [haddock @ 2005-01-10 19:18:22 by ross] Render non-ASCII characters using numeric character references, to simplify charset issues. There's a META tag saying the charset is UTF-8, but GHC outputs characters as raw bytes. Ideally we need an encoding on the input side too, primarily in comments, because source files containing non-ASCII characters aren't portable between locales. - - - - - eba2fc4e by Simon Marlow at 2005-01-11T10:44:37+00:00 [haddock @ 2005-01-11 10:44:37 by simonmar] Remove string gap - - - - - b899a381 by Ross Paterson at 2005-01-13T11:41:33+00:00 [haddock @ 2005-01-13 11:41:33 by ross] recognize SGML-style numeric character references &#ddd; or &#xhhhh; and translate them into Chars. - - - - - 106e3cf0 by Ross Paterson at 2005-01-13T14:43:41+00:00 [haddock @ 2005-01-13 14:43:41 by ross] also allow uppercase X in hexadecimal character references (like SGML) - - - - - e8f54f25 by Ross Paterson at 2005-01-13T14:44:24+00:00 [haddock @ 2005-01-13 14:44:24 by ross] Describe numeric character references. - - - - - 914ccdce by Sven Panne at 2005-01-15T18:44:48+00:00 [haddock @ 2005-01-15 18:44:45 by panne] Make Haddock compile again after the recent base package changed. The Map/Set legacy hell has been factored out, so that all modules can simply use the new non-deprecated interfaces. Probably a lot of things can be improved by a little bit of Map/Set/List algebra, this can be done later if needed. Small note: Currently the list of instances in HTML code is reversed. This will hopefully be fixed later. - - - - - 6ab20e84 by Sven Panne at 2005-01-16T12:18:26+00:00 [haddock @ 2005-01-16 12:18:26 by panne] Trim imports - - - - - efb81da9 by Sven Panne at 2005-01-16T12:58:08+00:00 [haddock @ 2005-01-16 12:58:03 by panne] Correctly handle the new order of arguments for the combining function given to fromListWith. - - - - - e27b5834 by Sven Panne at 2005-01-16T14:14:41+00:00 [haddock @ 2005-01-16 14:14:39 by panne] Data.Map.unions is left-biased. - - - - - dae3cc3e by Sven Panne at 2005-01-16T14:22:44+00:00 [haddock @ 2005-01-16 14:22:44 by panne] Added the last missing "flip" to get identical HTML output as previous versions. - - - - - 951d8408 by Sven Panne at 2005-01-16T14:37:10+00:00 [haddock @ 2005-01-16 14:37:10 by panne] Refactored Text.PrettyPrint legacy hell into a separate module. - - - - - f1c4b892 by Sven Panne at 2005-01-16T15:41:25+00:00 [haddock @ 2005-01-16 15:41:21 by panne] Cleaned up imports and dropped support for GHC < 5.03, it never worked, anyway. - - - - - 60824c6e by Simon Marlow at 2005-01-18T10:02:48+00:00 [haddock @ 2005-01-18 10:02:48 by simonmar] Add a TODO - - - - - a8c82f23 by Krasimir Angelov at 2005-01-28T23:19:39+00:00 [haddock @ 2005-01-28 23:19:39 by krasimir] import Foreign/Foreign.C are required for Windows - - - - - d8450a23 by Simon Marlow at 2005-02-02T16:23:04+00:00 [haddock @ 2005-02-02 16:23:00 by simonmar] Revamp the linking strategy in Haddock. Now name resolution is done in two phases: - first resolve everything to original names, like a Haskell compiler would. - then, figure out the "home" location for every entity, and point all the links to there. The home location is the lowest non-hidden module in the import hierarchy that documents the entity. If there are multiple candidates, one is chosen at random. Also: - Haddock should not generate any HTML with dangling links any more. Unlinked references are just rendered as plain text. - Error reporting is better: if we can't find a link destination for an entity reference, we now emit a warning. - - - - - 1cce71d0 by Simon Marlow at 2005-02-03T13:42:19+00:00 [haddock @ 2005-02-03 13:42:19 by simonmar] - add --ignore-all-exports flag, which behaves as if every module has the ignore-exports attribute (requested by Chris Ryder). - add --hide option to hide a module on the command line. - add --use-package option to get Haddock info for a package from ghc-pkg (largely untested). - remove reexports from the .haddock file, they aren't used any more. - - - - - 767123ef by Ross Paterson at 2005-02-03T16:17:37+00:00 [haddock @ 2005-02-03 16:17:37 by ross] fix typo for < 6.3 - - - - - 0c680c04 by Simon Marlow at 2005-02-04T12:03:31+00:00 [haddock @ 2005-02-04 12:03:31 by simonmar] Fix bug in renameExportItems that meant links in instances weren't being renamed properly. - - - - - ff7abe5f by Simon Marlow at 2005-02-04T12:15:53+00:00 [haddock @ 2005-02-04 12:15:52 by simonmar] Add attribute #not-home, to indicate that the current module should not be considered to be a home module for the each entity it exports, unless there is no other module that exports the entity. - - - - - fc2cfd27 by Simon Marlow at 2005-02-04T12:40:02+00:00 [haddock @ 2005-02-04 12:40:02 by simonmar] Update the documentation w.r.t. home modules and the not-home attribute. - - - - - 26b8ddf7 by Ross Paterson at 2005-02-04T13:36:06+00:00 [haddock @ 2005-02-04 13:36:05 by ross] sort lists of instances by - arity of the type constructors (so higher-kinded instances come first) - name of the class - argument types - - - - - 26bfb19c by Simon Marlow at 2005-02-23T15:57:12+00:00 [haddock @ 2005-02-23 15:57:12 by simonmar] Fix documentation regarding the module attributes. - - - - - 9c3afd02 by Simon Marlow at 2005-02-28T16:18:17+00:00 [haddock @ 2005-02-28 16:18:17 by simonmar] version 0.7 - - - - - a95fd63f by Simon Marlow at 2005-02-28T16:22:08+00:00 [haddock @ 2005-02-28 16:22:08 by simonmar] Attempt to fix the layout of the package names in the contents. Having tried just about everything, the only thing I can get to work reliably is to make the package names line up on a fixed offset from the left margin. This obviously isn't ideal, so anyone else that would like to have a go at improving it is welcome. One option is to remove the +/- buttons from the contents list and go back to a plain table. The contents page now uses CSS for layout rather than tables. It seems that most browsers have different interpretations of CSS layout, so only the simplest things lead to consistent results. - - - - - 905d42f7 by Simon Marlow at 2005-03-01T17:16:42+00:00 [haddock @ 2005-03-01 17:16:40 by simonmar] Another attempt at lining up the package names on the contents page. Now, they line up with Konqueror, and almost line up with Firefox & IE (different layout in each case). - - - - - a0e1d178 by Wolfgang Thaller at 2005-03-09T08:28:39+00:00 [haddock @ 2005-03-09 08:28:39 by wolfgang] Hack haddock's lexer to accept the output from Apple's broken version of cpp (Apple's cpp leaves #pragma set_debug_pwd directives in it's output). - - - - - 9e1eb784 by Simon Marlow at 2005-04-22T14:27:15+00:00 [haddock @ 2005-04-22 14:27:15 by simonmar] Add a TODO item - - - - - 23281f78 by Ross Paterson at 2005-05-18T12:41:59+00:00 [haddock @ 2005-05-18 12:41:59 by ross] fix 3 bugs in --use-package, and document it. - - - - - 00074a68 by Sven Panne at 2005-05-21T12:35:29+00:00 [haddock @ 2005-05-21 12:35:29 by panne] Warning/versionitis police - - - - - 341fa822 by Simon Marlow at 2005-06-15T15:43:21+00:00 [haddock @ 2005-06-15 15:43:21 by simonmar] Allow "licence" as an alternate spelling of "license" - - - - - 3b953f8b by Simon Marlow at 2005-06-16T08:14:12+00:00 [haddock @ 2005-06-16 08:14:12 by simonmar] wibble - - - - - abfd9826 by Simon Marlow at 2005-06-27T14:46:40+00:00 [haddock @ 2005-06-27 14:46:40 by simonmar] name hierarchical HTML files as A-B-C.html instead of A.B.C.html. The old way confused Apache because the extensions are sometimes interpreted as having special meanings. - - - - - a01eea00 by Simon Marlow at 2005-08-04T13:59:40+00:00 [haddock @ 2005-08-04 13:59:40 by simonmar] 0.7 changes - - - - - 170ef87e by Simon Marlow at 2005-08-04T15:08:03+00:00 [haddock @ 2005-08-04 15:08:03 by simonmar] spec file from Jens Peterson - - - - - 7621fde4 by Simon Marlow at 2005-08-04T15:59:30+00:00 [haddock @ 2005-08-04 15:59:30 by simonmar] replace mingw tests with $(Windows) - - - - - a20739bb by Sven Panne at 2005-08-05T07:01:12+00:00 [haddock @ 2005-08-05 07:01:12 by panne] Reverted to previous version (but with bumped version number), the last commit broke RPM building on SuSE systems due to differently named dependencies. As a clarification: All .spec files in the repository have to work at least on SuSE, because that's the system I'm using. And as "Mr. Building Police", I reserve me the right to keep them that way... >:-) It might very well be the case that we need different .spec files for different platforms, so packagers which are unhappy with the current .spec files should contact me, stating the actual problems. - - - - - 4afb15cf by Simon Marlow at 2005-10-05T10:51:45+00:00 [haddock @ 2005-10-05 10:51:45 by simonmar] Add a bug - - - - - 60f69f82 by Simon Marlow at 2005-10-05T12:52:03+00:00 [haddock @ 2005-10-05 12:52:03 by simonmar] Document new behaviour of -s option - - - - - f7e520ca by Simon Marlow at 2005-10-10T15:02:55+00:00 [haddock @ 2005-10-10 15:02:55 by simonmar] extractRecSel: ignore non-record constructors (fixes a crash when using datatypes with a mixture of record and non-record style constructors). - - - - - b2edbedb by Simon Marlow at 2005-10-14T09:44:21+00:00 Start CHANGES for 0.8 - - - - - 21c7ac8d by Simon Marlow at 2005-10-14T23:11:19+00:00 First cut of Cabal build system - - - - - 766cecdd by Simon Marlow at 2005-10-29T08:14:43+00:00 Add configure script and Makefile for the docs Add a separate configure script and build system for building the documentation. The configure and Makefile code is stolen from fptools. This is left as a separate build system so that the main Cabal setup doesn't require a Unix build environment or DocBook XML tools. - - - - - aa36c783 by Duncan Coutts at 2006-01-17T19:29:55+00:00 Add a --wiki=URL flag to add a per-module link to a correspondng wiki page. So each html page gets an extra link (placed next to the source code and contents links) to a corresponding wiki page. The idea is to let readers contribute their own notes, examples etc to the documentation. Also slightly tidy up the code for the --source option. - - - - - e06e2da2 by Simon Marlow at 2006-01-18T09:28:15+00:00 TODO: documnet --wiki - - - - - 17adfda9 by Duncan Coutts at 2006-01-19T20:17:59+00:00 Add an optional wiki link for each top level exported name. In each module, for each "top level" exported entity we add a hyper link to a corresponding wiki page. The link url gets the name of the exported entity as a '#'-style anchor, so if there is an anchor in the page with that name then the users browser should jump directly to it. By "top level" we mean functions, classes, class members and data types (data, type, newtype), but not data constructors, class instances or data type class membership. The link is added at the right of the page and in a small font. Hopefully this is the right balance of visibility/distraction. We also include a link to the wiki base url in the contents and index pages. - - - - - f52324bb by Duncan Coutts at 2006-01-19T20:28:27+00:00 Rewrite pathJoin to only add a path separator when necessary. When the path ends in a file seperator there is no need to add another. Now using "--wiki=http://blah.com/foo/" should do the right thing. (Code snippet adapted from Isaac's FilePath package.) - - - - - 43bb89fa by Duncan Coutts at 2006-01-21T17:15:27+00:00 Teach haddock about line pragmas and add accurate source code links Teach haddock about C and Haskell style line pragmas. Extend the lexer/parser's source location tracking to include the file name as well as line/column. This way each AST item that is tagged with a SrcLoc gets the original file name too. Use this original file name to add source links to each exported item, in the same visual style as the wiki links. Note that the per-export source links are to the defining module rather than whichever module haddock pretends it is exported from. This is what we want for source code links. The source code link URL can also contain the name of the export so one could implement jumping to the actual location of the function in the file if it were linked to an html version of the source rather than just plain text. The name can be selected with the %N wild card. So for linking to the raw source code one might use: --source=http://darcs/haskell.org/foo/%F Or for linking to html syntax highlighted code: --source=http://darcs/haskell.org/foo/%M.html#%N - - - - - edd9f229 by Duncan Coutts at 2006-01-22T00:02:00+00:00 Extend URL variable expansion syntax and add source links to the contents page Like the wiki link on the contents and index page, add a source code link too. Extend the wiki & source URL variable expansion syntax. The original syntax was: %F for the source file name (the .hs version only, not the .lhs or .hs.pp one) %M for the module name (with '.' replaced by '/') The new syntax is: %F or %{FILE} for the original source file name %M or %{MODULE} for the module name (no replacements) %N or %{NAME} for the function/type export name %K or %{KIND} for a type/value flag "t" or "v" with these extensions: %{MODULE/./c} to replace the '.' module seperator with any other char c %{VAR|some text with the % char in it} which means if the VAR is not in use in this URL context then "" else replace the given text with the '%' char replaced by the string value of the VAR. This extension allows us to construct URLs wit optional parts, since the module/file name is not available for the URL in the contents/index pages and the value/type name is not available for the URL at the top level of each module. - - - - - eb3c6ada by Duncan Coutts at 2006-01-23T13:42:34+00:00 Remove the complex substitutions and add more command line flags instead. Instead of incomprehensable URL substitutions like ${MODULE/./-|?m=%} we now use three seperate command line flags for the top level, per-module and per-entity source and wiki links. They are: --source-base, --source-module, --source-entity --comments-base, --comments-module, --comments-entity We leave -s, --source as an alias for --source-module which is how that option behaved previously. The long forms of the substitutions are still available, ${FILE} ${MODULE} etc and the only non-trivial substitution is ${MODULE/./c} to replace the '.' characters in the module name with any other character c. eg ${MODULE/./-} Seperating the source and wiki url flags has the added bonus that they can be turned on or off individually. So users can have per-module links for example without having to also have per-entity links.` - - - - - a2f0f2af by Duncan Coutts at 2006-01-23T13:54:52+00:00 Make the --help output fit in 80 columns. This is a purely cosmetic patch, feel free to ignore it. The only trickery going on is that we don't display the deprecated -s, --source flags in the help message, but we do still accept them. - - - - - 2d3a4b0c by Duncan Coutts at 2006-01-23T14:12:16+00:00 Add documentation for the new --source-* and --comments-* command line options - - - - - 1a82a297 by Simon Marlow at 2006-01-23T17:03:27+00:00 fix markup - - - - - 100d464a by Duncan Coutts at 2006-01-23T18:31:13+00:00 remove a couple TODO items that have been done The --wiki, or rather the --comment-* options are now documented. There is probably no need to have haddock invoke unlit or cpp itself since it can now pick up the line pragmas to get the source locations right. Tools like Cabal will arrange for preprocessors to be run so there is less of a need for tools like haddock to do it themselves. - - - - - 3162fa91 by Simon Marlow at 2006-01-24T14:21:56+00:00 add a test I had lying around - - - - - 98947063 by Simon Marlow at 2006-01-31T13:52:54+00:00 add scabal-version field - - - - - c41876e6 by Neil Mitchell at 2006-02-26T17:48:21+00:00 Add Hoogle output option - - - - - f86fb9c0 by Simon Marlow at 2006-03-08T09:15:20+00:00 add haskell.vim Contributed by Brad Bowman <bsb at bereft.net>, thanks! - - - - - 35d3c511 by benjamin.franksen at 2006-03-03T22:39:54+00:00 fixed libdir (/html was missing) - - - - - 4d08fd7d by Simon Marlow at 2006-03-10T11:13:31+00:00 add PatternGuards extension - - - - - 3f095e70 by Simon Marlow at 2006-03-13T11:40:42+00:00 bug fixes from Brad Bowman - - - - - 8610849d by Sven Panne at 2006-03-19T17:02:56+00:00 Fixed Cabal/RPM build - - - - - 34a994d6 by sven.panne at 2006-04-20T12:39:23+00:00 Avoid pattern guards Due to the use of pattern guards in Haddock, GHC was called with -fglasgow-exts. This in turn enables bang patterns, too, which broke the Haddock build. Removing some unnecessary pattern guards seemed to be the better way of fixing this instead of using a pragma to disable pattern guards. - - - - - bb523f51 by Ross Paterson at 2006-04-24T09:03:25+00:00 extend 'deriving' heuristic a little If an argument of a data constructor has a type variable head, it is irreducible and the same type class can be copied into the constraint. (Formerly we just did this for type variable arguments.) - - - - - dab9fe7a by Simon Marlow at 2006-04-26T10:02:31+00:00 record an idea - - - - - 748b7078 by Simon Marlow at 2006-05-08T08:28:53+00:00 add section about deriving - - - - - 11252ea1 by Simon Marlow at 2006-05-24T15:43:10+00:00 replace a fatal error in lexChar with a parseError - - - - - 382c9411 by Simon Marlow at 2006-05-24T15:45:47+00:00 add a bug - - - - - b79272f5 by Simon Marlow at 2006-05-24T15:46:29+00:00 add a bug report - - - - - 912edf65 by David Waern at 2006-07-10T19:09:23+00:00 Initial modifications -- doesn't compile - - - - - a3c7ba99 by David Waern at 2006-07-11T00:54:19+00:00 More porting work -- doesn't compile - - - - - 0a173d19 by David Waern at 2006-07-11T11:30:03+00:00 Make the repos temporarily compile and illustrate a problem - - - - - bad316de by David Waern at 2006-07-11T15:43:47+00:00 Progress on the porting process - - - - - bbf12d02 by David Waern at 2006-07-11T23:07:44+00:00 More progress on the porting -- first pass starting to shape up - - - - - de580ba2 by David Waern at 2006-07-20T17:48:30+00:00 More progress -- still on phase1 - - - - - 75a917a2 by David Waern at 2006-07-23T18:22:43+00:00 More work on pass1 -- mostly done - - - - - 6697b3f7 by David Waern at 2006-07-23T22:17:40+00:00 More work, started working on the renaming phase -- this code will need a cleanup soon :) - - - - - 82a5bcbb by David Waern at 2006-07-29T16:16:43+00:00 Add instances, build renaming environment, start on the renamer - - - - - c3f8f4f1 by David Waern at 2006-07-29T21:37:48+00:00 Complete the renamer - - - - - 7e00d464 by David Waern at 2006-07-30T21:01:57+00:00 Start porting the Html renderer - - - - - f04ce121 by David Waern at 2006-08-09T20:04:56+00:00 More Html rendering progress - - - - - 20c21b53 by David Waern at 2006-08-10T17:37:47+00:00 More progress - - - - - d7097e0d by David Waern at 2006-08-11T20:31:51+00:00 Cleanup - - - - - a7351e86 by David Waern at 2006-08-12T11:44:47+00:00 Render H98 Data declarations - - - - - 3fb2208e by David Waern at 2006-08-12T17:15:34+00:00 Perfect rendering of Test.hs - - - - - 454fd062 by David Waern at 2006-08-13T21:57:08+00:00 Misc fixes and interface load/save - - - - - 7ef7e7be by David Waern at 2006-08-14T00:56:07+00:00 Some refactoring - - - - - a7d3efef by David Waern at 2006-08-19T20:07:55+00:00 Adapt to latest GHC - - - - - 5fc3c0d7 by David Waern at 2006-08-20T21:28:11+00:00 Move interface read/write to its own module + some cleanup - - - - - 037e011c by David Waern at 2006-08-20T21:38:24+00:00 Small cleanup - - - - - da3a1023 by David Waern at 2006-09-03T16:05:22+00:00 Change mode to BatchCompile to avoid GHC API bug - - - - - 3cc9be3b by David Waern at 2006-09-03T16:06:59+00:00 Starting work on GADT rendering - - - - - 94506037 by David Waern at 2006-09-03T20:02:48+00:00 Compensate for change of export list order in GHC - - - - - c2cec4eb by David Waern at 2006-09-04T20:53:01+00:00 Rename a function - - - - - 9a9735ba by David Waern at 2006-09-05T15:51:21+00:00 Change version number to 2.0 - - - - - 3758a714 by David Waern at 2006-09-05T15:51:49+00:00 Align comment properly - - - - - 68478d9e by David Waern at 2006-09-15T18:03:00+00:00 Remove interface reading/writing code and use the GHC api for creating package environments instead - - - - - d2eedd95 by David Waern at 2006-09-15T18:05:29+00:00 Change the executable name to haddock-ghc-nolib - - - - - fcfbcf66 by David Waern at 2006-09-15T18:05:45+00:00 Small source code cleanup - - - - - d08eb017 by David Waern at 2006-09-15T18:06:21+00:00 Remove handling of --package flag - - - - - b8a4cf53 by David Waern at 2006-09-15T18:07:16+00:00 Remove commented-out code - - - - - bef0a684 by David Waern at 2006-09-15T18:37:57+00:00 Don't warn about missing links to () - - - - - e7d25fd7 by David Waern at 2006-09-15T19:50:49+00:00 Remove Interface and Binary2 modules - - - - - 9894f2a1 by David Waern at 2006-09-15T19:53:43+00:00 Remove debug printing from HaddockHtml - - - - - a0e7455d by David Waern at 2006-09-16T00:16:29+00:00 Comments only - - - - - d5b26fa7 by David Waern at 2006-09-16T00:16:57+00:00 Refactor PackageData creation code and start on building the doc env propery (unfinished) - - - - - 06aaa779 by David Waern at 2006-09-16T00:19:25+00:00 Better comments in Main.hs - - - - - 1a52d1b4 by David Waern at 2006-09-18T22:17:11+00:00 Comments and spacing change - - - - - e5a97767 by David Waern at 2006-09-21T17:02:45+00:00 Remove unnecessary fmapM import in Main - - - - - 9d0f9d3a by David Waern at 2006-09-22T18:07:07+00:00 Make import list in HaddockHtml prettier - - - - - 3452f662 by David Waern at 2006-09-22T18:08:47+00:00 Refactor context rendering - - - - - 12d0a6d0 by David Waern at 2006-09-22T18:09:52+00:00 Do proper HsType rendering (inser parentheses correctly) - - - - - 2c20c2f9 by David Waern at 2006-09-22T18:10:45+00:00 Fix a bug in Main.toHsType - - - - - c5396443 by David Waern at 2006-09-22T18:11:16+00:00 Skip external package modules sort for now - - - - - 3fb95547 by David Waern at 2006-09-22T20:35:40+00:00 Take away trailin "2" on all previously clashing type names - - - - - 2174755f by David Waern at 2006-09-22T20:51:43+00:00 Remove unused imports in Main - - - - - 1e9f7a39 by David Waern at 2006-09-22T20:52:11+00:00 Fix a comment in Main - - - - - 32d9e028 by David Waern at 2006-10-05T16:40:11+00:00 Merge with changes to ghc HEAD - - - - - 3058c8f5 by David Waern at 2006-10-05T16:41:02+00:00 Comment fixes - - - - - b9c217ec by David Waern at 2006-10-05T16:49:59+00:00 Filter out more builtin type constructors from warning messages - - - - - 67e7d252 by David Waern at 2006-10-05T19:38:22+00:00 Refactoring -- better structured pass1 - - - - - cd21c0c1 by David Waern at 2006-10-05T19:44:42+00:00 Remove read/dump interface flags - - - - - 313f9e69 by David Waern at 2006-10-05T19:49:26+00:00 Remove unused pretty printing - - - - - 480f09d1 by David Waern at 2006-12-28T13:22:24+00:00 Update to build with latest GHC HEAD - - - - - 63dccfcb by David Waern at 2007-01-05T01:38:45+00:00 Fixed a bug so that --ghc-flag works correctly - - - - - 3117dadc by David Waern at 2006-12-29T18:53:39+00:00 Automatically get the GHC lib dir - - - - - 9dc84a5c by David Waern at 2006-12-29T19:58:53+00:00 Comments - - - - - 0b0237cc by David Waern at 2007-01-05T16:48:30+00:00 Collect docs based on SrcLoc, syncing with removal of DeclEntity from GHC - - - - - a962c256 by David Waern at 2007-01-05T17:02:47+00:00 Add tabs in haddock.cabal - - - - - 0ca30c97 by David Waern at 2007-01-05T17:04:11+00:00 Add GHCUtils.hs - - - - - c0ab9abe by David Waern at 2007-01-10T11:43:08+00:00 Change package name to haddock-ghc, version 0.1 - - - - - 38e18b27 by David Waern at 2007-01-12T12:03:52+00:00 No binder name for foreign exports - - - - - d18587ab by David Waern at 2007-01-12T12:08:15+00:00 Temp record - - - - - ba6251a0 by David Waern at 2007-01-12T18:27:55+00:00 Remove read/dump-interface (again) - - - - - f4ba2b39 by David Waern at 2007-01-12T18:31:36+00:00 Remove DocOption, use the GHC type - - - - - 511be8bd by David Waern at 2007-01-12T18:32:41+00:00 Use exceptions instead of Either when loading package info - - - - - 0f2144d8 by David Waern at 2007-01-12T18:33:23+00:00 Small type change - - - - - 77507eb7 by David Waern at 2007-01-12T18:33:59+00:00 Remove interface file read/write - - - - - 0ea1e14f by David Waern at 2007-01-17T21:40:26+00:00 Add trace_ppr to GHCUtils - - - - - 3878b493 by David Waern at 2007-01-17T21:40:53+00:00 Sort external package modules and build a doc env - - - - - 8dc323fc by David Waern at 2007-01-17T21:42:41+00:00 Remove comment - - - - - f4c5b097 by David Waern at 2007-01-18T23:22:18+00:00 Add haddock-ghc.cabal and remove ghc option pragma in source file - - - - - da242b2c by David Waern at 2007-01-18T23:22:46+00:00 Remove some tabs - - - - - 288ed096 by David Waern at 2007-01-18T23:39:28+00:00 Moved the defaultErrorHandler to scope only over sortAndCheckModules for now - - - - - 4dd150fe by David Waern at 2007-02-03T21:23:56+00:00 Let restrictCons handle infix constructors - - - - - 97893442 by David Waern at 2007-02-04T16:26:00+00:00 Render infix data constructors - - - - - da89db72 by David Waern at 2007-02-04T16:26:33+00:00 CHange project name to Haddock-GHC - - - - - e93d48af by David Waern at 2007-02-04T16:59:08+00:00 Render infix type constructors properly - - - - - 357bc99b by David Waern at 2007-02-04T17:37:08+00:00 Insert spaces around infix function names - - - - - ab6cfc49 by David Waern at 2007-02-04T17:59:54+00:00 Do not list entities without documentation - - - - - 04249c7e by David Waern at 2007-02-04T19:16:25+00:00 Add GADT support (quite untested) - - - - - 2c223f8d by David Waern at 2007-02-04T19:25:10+00:00 Add package file write/save again! - - - - - b07ed218 by David Waern at 2007-02-04T19:33:02+00:00 Comment out minf_iface based stuff - - - - - 953d1fa7 by David Waern at 2007-02-05T00:12:23+00:00 Solve conflicts - - - - - 593247fc by David Waern at 2007-02-06T19:48:48+00:00 Remove -package flag, GHC's can be used instead - - - - - f658ded2 by David Waern at 2007-02-06T20:50:44+00:00 Start for support of ATs - - - - - 97f9e913 by David Waern at 2007-02-06T20:52:27+00:00 Wibble - - - - - 2ce8e4cf by David Waern at 2007-02-16T12:09:49+00:00 Add the DocOptions change - - - - - dee4a9b5 by David Waern at 2007-03-06T01:24:48+00:00 Wibble - - - - - 7cb99d18 by David Waern at 2007-03-06T01:24:58+00:00 Change version to 2.0 and executable name to haddock - - - - - c5aa02bc by David Waern at 2007-03-08T15:59:49+00:00 Go back to -B flag - - - - - 3a349201 by David Waern at 2007-03-09T13:31:59+00:00 Better exception handling and parsing of GHC flags - - - - - 05a69b71 by David Waern at 2007-03-09T17:45:44+00:00 Remove commented-out DocEntity printing - - - - - 755032cb by davve at dtek.chalmers.se at 2007-03-23T23:30:20+00:00 Remove a file that shouldn't be here - - - - - a7077e5f by davve at dtek.chalmers.se at 2007-03-24T03:58:48+00:00 Remove an import - - - - - 6f55aa8b by davve at dtek.chalmers.se at 2007-03-25T00:46:48+00:00 Start work on Haddock API - - - - - f0199480 by davve at dtek.chalmers.se at 2007-03-25T00:56:36+00:00 Prettify some comments - - - - - f952f9d1 by davve at dtek.chalmers.se at 2007-03-25T00:56:53+00:00 Remove ppr in HaddockTypes - - - - - bc594904 by davve at dtek.chalmers.se at 2007-03-25T00:57:53+00:00 Remove commented out doc env inference - - - - - 11ebf08d by davve at dtek.chalmers.se at 2007-03-25T01:23:25+00:00 De-flatten the namespace - - - - - f696b4bc by davve at dtek.chalmers.se at 2007-03-25T03:21:48+00:00 Add missing stuff to API - - - - - 9a2a04c3 by davve at dtek.chalmers.se at 2007-03-25T03:22:02+00:00 Wibble - - - - - 7d04a6d5 by davve at dtek.chalmers.se at 2007-03-25T03:22:08+00:00 Avoid a GHC bug with parseStaticFlags [] - - - - - 4d2820ba by davve at dtek.chalmers.se at 2007-03-26T04:57:01+00:00 Add fall-through case to mkExportItem - - - - - 6ebc8950 by Stefan O'Rear at 2007-03-26T04:14:53+00:00 Add shebang line to Setup.lhs - - - - - 80966ec5 by davve at dtek.chalmers.se at 2007-03-26T05:24:26+00:00 Fix stupid compile error - - - - - 1ea1385d by davve at dtek.chalmers.se at 2007-04-05T17:19:56+00:00 Do save/read of interface files properly - - - - - 0e4f6541 by David Waern at 2007-04-10T21:08:36+00:00 Add version to ghc dependency - - - - - b0499b63 by David Waern at 2007-04-10T21:37:08+00:00 Change package name to haddock - - - - - 9d50d27e by David Waern at 2007-04-24T00:22:14+00:00 Use filepath package instead of FilePath - - - - - 87c7fcdf by David Waern at 2007-07-10T21:03:04+00:00 Add new package dependencies - - - - - 4768709c by David Waern at 2007-07-11T20:37:11+00:00 Follow changes to record constructor representation - - - - - b9a02fee by Simon Marlow at 2007-05-30T14:00:48+00:00 update to compile with the latest GHC & Cabal - - - - - c0ebdc01 by David Waern at 2007-07-11T21:35:45+00:00 Fix conflicts - - - - - 97f7afd4 by David Waern at 2007-07-11T21:52:38+00:00 Follow changes to the GHC API - - - - - a5b7b58f by David Waern at 2007-07-12T20:36:48+00:00 Call parseStaticFlags before newSession - - - - - f7f50dbc by David Waern at 2007-08-01T21:52:58+00:00 Better indentation in haddock.cabal - - - - - d84e52ad by David Waern at 2007-08-02T00:08:18+00:00 Wibble - - - - - a23f494a by David Waern at 2007-08-02T00:08:24+00:00 Be better at trying to load all module dependencies (debugging) - - - - - ee917f13 by David Waern at 2007-08-03T18:48:08+00:00 Load all targets explicitly (checkModule doesn't chase dependencies anymore) - - - - - 5182d631 by David Waern at 2007-08-16T16:48:55+00:00 Finalize support for links to other packages - - - - - dfd1e3da by David Waern at 2007-08-16T16:51:11+00:00 Fix haddock comment errors in Haddock.Types - - - - - 50c0d83e by David Waern at 2007-08-16T16:51:37+00:00 Remove a debug import - - - - - d84b7c2b by David Waern at 2007-08-16T17:06:30+00:00 Rename PackageData to HaddockPackage - - - - - 3b52cb9f by David Waern at 2007-08-16T17:09:42+00:00 Simplify some comments - - - - - 66fa68d9 by David Waern at 2007-08-16T17:11:38+00:00 Comment the HaddockPackage definition - - - - - 8674c761 by David Waern at 2007-08-16T17:25:54+00:00 Improve code layout in Main - - - - - 571a3a0b by David Waern at 2007-08-16T17:32:13+00:00 Remove explict module imports in Main - - - - - d31b3cb0 by David Waern at 2007-08-16T17:36:23+00:00 Correct comments - - - - - 7f8a9f2b by David Waern at 2007-08-16T17:39:50+00:00 Fix layout problems in Haddock.Types - - - - - 9f421d7f by David Waern at 2007-08-17T11:16:48+00:00 Move options out of Main into Haddock.Options - - - - - 80042b63 by David Waern at 2007-08-17T11:26:59+00:00 Small comment/layout fixes - - - - - b141b982 by David Waern at 2007-08-17T11:28:28+00:00 Change project name from Haddock-GHC to Haddock - - - - - dbeb4a81 by David Waern at 2007-08-17T11:41:05+00:00 Add top module comment to all files - - - - - ce99cc9e by David Waern at 2007-08-17T14:53:04+00:00 Factor out typechecking phase into Haddock.Typecheck - - - - - 6bf75d9e by David Waern at 2007-08-17T16:55:35+00:00 Factor out package code to Haddock.Packages - - - - - b396db37 by David Waern at 2007-08-29T22:40:23+00:00 Major refactoring - - - - - 3d4f95ee by David Waern at 2007-08-29T23:26:24+00:00 Rename HaddockModule to Interface and a few more refactorings - - - - - c55326db by David Waern at 2007-08-29T23:48:03+00:00 Some comment cleanup - - - - - 9a84fc46 by David Waern at 2007-08-29T23:49:29+00:00 Add some modules that I forgot to add earlier - - - - - 4536dce2 by David Waern at 2007-08-29T23:55:24+00:00 Wibble - - - - - 9b7f0206 by David Waern at 2007-08-30T16:03:29+00:00 Wibble - - - - - c52c050a by David Waern at 2007-08-30T16:30:37+00:00 Rename HaddockModule to Interface - - - - - eae2995f by David Waern at 2007-08-30T16:42:59+00:00 Simplify createInterfaces - - - - - 53f99caa by David Waern at 2007-09-29T00:04:31+00:00 Add build-type: Simple to the cabal file - - - - - 0d3103a8 by David Waern at 2007-09-29T00:04:58+00:00 Add containers and array dependency - - - - - 6acf5f30 by David Waern at 2007-09-29T00:13:36+00:00 Prettify the cabal file - - - - - 87c1e378 by David Waern at 2007-09-29T13:16:39+00:00 FIX: consym data headers with more than two variables - - - - - b67fc16a by David Waern at 2007-09-29T14:01:32+00:00 FIX: prefix types used as operators should be quoted - - - - - a8f925bc by David Waern at 2007-09-29T14:02:26+00:00 Use isSymOcc from OccName instead of isConSym - - - - - fc330701 by David Waern at 2007-09-29T14:15:37+00:00 Use isLexConSym/isLexVarSym from OccName - - - - - e4f3dbad by David Waern at 2007-09-29T15:01:08+00:00 FIX: do not quote varsym type operators - - - - - 402207d2 by David Waern at 2007-09-29T15:01:50+00:00 Wibble - - - - - f9d89ef0 by David Waern at 2007-09-29T15:17:40+00:00 Take care when pp tyvars - add parens on syms - - - - - 849e2a77 by David Waern at 2007-10-01T21:56:39+00:00 Go back to using a ModuleMap instead of LookupMod - fixes a bug - - - - - 549dbac6 by David Waern at 2007-10-02T01:05:19+00:00 Improve parsing of doc options - - - - - a36021b8 by David Waern at 2007-10-02T23:05:00+00:00 FIX: double arrows in constructor contexts - - - - - d03bf347 by David Waern at 2007-10-09T16:14:05+00:00 Add a simple test suite - - - - - c252c140 by David Waern at 2007-10-17T16:02:28+00:00 Add --optghc=.. style flag passing to GHC - - - - - cce6c1b3 by David Waern at 2007-10-18T22:03:20+00:00 Add support for --read-interface again - - - - - 33d059c0 by David Waern at 2007-10-18T22:30:18+00:00 Refactoring -- get rid of Haddock.Packages - - - - - f9ed0a4c by David Waern at 2007-10-18T22:34:36+00:00 Name changes - - - - - 8a1c816f by David Waern at 2007-10-20T14:24:23+00:00 Add --ghc-version option - - - - - 4925aaa1 by David Waern at 2007-10-21T14:34:26+00:00 Add some Outputable utils - - - - - 69e7e47f by David Waern at 2007-10-21T14:35:49+00:00 FIX: Ord for OrdName was not comparing modules - - - - - 5a4ae535 by David Waern at 2007-10-21T21:18:48+00:00 Wibble - - - - - 03d48e20 by David Waern at 2007-10-24T15:52:56+00:00 Remove Main from "other modules" - - - - - c66f6d82 by David Waern at 2007-10-24T16:37:18+00:00 Make it possible to run haddock on itself - - - - - 21d156d8 by David Waern at 2007-10-25T14:02:14+00:00 Don't set boot modules as targets - - - - - f8bcf91c by David Waern at 2007-10-31T22:11:17+00:00 Add optimisation flags - - - - - 7ac758f2 by David Waern at 2007-11-04T09:48:28+00:00 Go back to loading only targets (seems to work now) - - - - - 4862aae1 by David Waern at 2007-11-05T22:24:57+00:00 Do full compilation of modules -- temporary fix for GHC API problem - - - - - 697e1517 by David Waern at 2007-11-05T22:25:50+00:00 Don't warn about not being able to link to wired/system/builtin-names - - - - - 892186da by David Waern at 2007-11-06T00:49:21+00:00 Filter out instances with TyCons that are not exported - - - - - 9548314c by David Waern at 2007-11-06T09:37:14+00:00 Wibble - - - - - 5cafd627 by David Waern at 2007-11-08T01:43:07+00:00 Filter out all non-vanilla type sigs - - - - - 04621830 by David Waern at 2007-11-08T01:45:13+00:00 Synch loading of names from .haddock files with GHC's name cache - - - - - 88d37f77 by David Waern at 2007-11-08T01:46:21+00:00 Remove commented-out code - - - - - 6409c911 by David Waern at 2007-11-08T01:56:00+00:00 Small bugfix and cleanup in getDeclFromTyCls - - - - - af59d9c2 by David Waern at 2007-11-08T02:08:44+00:00 Remove OrdName stuff - - - - - 3a615e2e by David Waern at 2007-11-08T02:13:41+00:00 Update runtests.hs following changes to haddock - - - - - 01f3314e by David Waern at 2007-11-08T02:33:01+00:00 Complain if we can't link to wired-in names - - - - - fcafb5d1 by David Waern at 2007-11-09T02:40:16+00:00 Don't exit when there are no file arguments - - - - - 194bc332 by David Waern at 2007-11-09T02:55:37+00:00 Wibble - - - - - dbe4cb55 by David Waern at 2007-11-09T02:56:14+00:00 Wibble - - - - - 82869fda by David Waern at 2007-11-10T17:01:43+00:00 Introduce InstalledInterface structure and add more stuff to the .haddock files We introduce InstalledInterface capturing the part of Interface that is stored in the interface files. We change the ppHtmlContents and ppHtmllIndex to take this structure instead of a partial Interface. We add stuff like the doc map and exported names to the .haddock file (via InstalledInterface). - - - - - d6bb57bf by David Waern at 2007-11-10T17:19:48+00:00 FIX: contents and index should include external package modules when --gen-contents/--gen-index - - - - - e8814716 by David Waern at 2007-11-11T00:29:27+00:00 Remove lDocLinkName and its use in Html backend - - - - - 6f9bd702 by David Waern at 2007-11-11T00:50:57+00:00 Do some refactoring in the html backend This also merges an old patch by Augustsson: Wed Jul 12 19:54:36 CEST 2006 lennart.augustsson at credit-suisse.com * Print type definitions like signatures if given arrows. - - - - - 09d0ce24 by Malcolm.Wallace at 2006-07-20T13:13:57+00:00 mention HsColour in the docs, next to option flags for linking to source code - - - - - 24da6c34 by Malcolm.Wallace at 2006-07-20T13:14:50+00:00 change doc references to CVS to give darcs repository location instead - - - - - 74d52cd6 by David Waern at 2007-11-11T00:55:33+00:00 Update copyright - - - - - fcaa3b4f by Duncan Coutts at 2006-09-08T13:41:00+00:00 Eliminate dep on network by doing a little cut'n'paste haddock depending on the network causes a circular dependency at least if you want to build the network lib with haddock docs. - - - - - 10cc9bda by David Waern at 2007-11-11T02:09:41+00:00 Fix conflicts - - - - - 4e3acd39 by David Waern at 2007-11-11T02:21:19+00:00 Manual merge of a patch from Duncan Coutts that removes the dependency on mtl - - - - - fa9070da by Neil Mitchell at 2006-09-29T15:52:03+00:00 Do not generate an empty table if there are no exports, this fixes a <table></table> tag being generated, which is not valid HTML 4.01 - - - - - d7431c85 by David Waern at 2007-11-11T02:28:50+00:00 Fix conflicts - - - - - f87e8f98 by Simon Marlow at 2006-10-10T11:37:16+00:00 changes for 0.8 - - - - - db929565 by Simon Marlow at 2006-10-10T12:07:12+00:00 fix the name of the source file - - - - - 8220aa4b by Simon Marlow at 2006-10-11T14:17:37+00:00 Rename haddock.js to haddock-util.js haddock.js will be run automatically by Windows when you type 'haddock' if it is found on the PATH, so rename to avoid confusion. Spotted by Adrian Hey. - - - - - 6bccdaa1 by sven.panne at 2006-10-12T15:28:23+00:00 Cabal's sdist does not generate "-src.tar.gz" files, but ".tar.gz" ones - - - - - d3f3fc19 by Simon Marlow at 2006-12-06T16:05:07+00:00 add todo item for --maintainer - - - - - 2da7e269 by Simon Marlow at 2006-12-15T15:52:00+00:00 TODO: do something better about re-exported symbols from another package - - - - - 42d85549 by David Waern at 2007-11-11T02:30:59+00:00 Fix conflicts - - - - - 5e7ef6e5 by Neil Mitchell at 2007-01-11T15:41:15+00:00 Never do spliting index files into many - - - - - f3d4aebe by Neil Mitchell at 2007-01-11T17:07:09+00:00 Add searching on the index page - - - - - bad3ab66 by Neil Mitchell at 2007-01-11T18:17:46+00:00 Delete dead code, now there is only one index page - - - - - cd09eedb by Neil Mitchell at 2007-01-11T18:21:19+00:00 Delete more stuff that is no longer required - - - - - e2806646 by David Waern at 2007-11-11T02:41:53+00:00 Fix conflicts - - - - - a872a823 by Neil Mitchell at 2007-01-11T18:51:43+00:00 Make the index be in case-insensitive alphabetic order - - - - - 8bddd9d7 by Neil Mitchell at 2007-02-06T17:49:12+00:00 Do not create empty tables for data declarations which don't have any constructors, instances or comments. Gets better HTML 4.01 compliance - - - - - 036b8120 by David Waern at 2007-11-11T02:56:58+00:00 Fix conflicts - - - - - f50c1639 by Conal Elliott at 2007-02-14T21:54:00+00:00 added substitution %{FILE///c} - - - - - 402e166a by David Waern at 2007-11-11T03:35:46+00:00 Manual merge of old patch: Sat Apr 21 04:36:43 CEST 2007 Roberto Zunino <zunrob at users.sf.net> * URL expansion for %%, %L, %{LINE} - - - - - 2f264fbd by David Waern at 2007-11-11T03:40:33+00:00 Manual merge of an old patch: Thu Apr 19 20:23:40 CEST 2007 Wolfgang Jeltsch <g9ks157k at acme.softbase.org> * bug fix When Haddock was invoked with the --ignore-all-exports flag but the ignore-exports module attribute wasn't used, hyperlinks weren't created for non-exported names. This fix might not be as clean as one would wish (since --ignore-all-exports now results in ignore_all_exports = True *and* an additional OptIgnoreExports option for every module) but at least the bug seems to be resolved now. - - - - - 7d7ae106 by sven.panne at 2007-09-02T12:18:02+00:00 Install LICENSE in the correct place - - - - - 66eaa924 by David Waern at 2007-11-11T19:02:46+00:00 Fix a bug that made haddock loop - - - - - 4ed47b58 by David Waern at 2007-11-11T19:03:09+00:00 Rename java-script file (this wasn't merge correctly) - - - - - d569534a by David Waern at 2007-11-11T19:06:44+00:00 Don't require -B <ghc-libdir> when no argument files Change readInterfaceFile to take a Maybe Session, to avoid having to pass -B <ghc-libdir> to Haddock when there're no source files to process. This is nice when computing contents/index for external packages. - - - - - 373368bc by Neil Mitchell at 2007-01-11T18:22:44+00:00 Change from tabs to spaces in the ppHtmlIndex function - - - - - 6b063a77 by Neil Mitchell at 2007-01-12T12:17:46+00:00 Rewrite much of the index searching code, previously was too slow to execute on the base library with IE, the new version guarantees less than O(log n) operations be performed, where n is the number in the list (before was always O(n)) - - - - - bfad00b7 by David Waern at 2007-11-11T23:33:53+00:00 Fix conflicts - - - - - cd2dcc09 by Neil Mitchell at 2007-01-12T12:25:01+00:00 Make the max number of results 75 instead of 50, to allow map searching in the base library to work - - - - - 3ae74764 by Neil Mitchell at 2007-01-12T12:58:17+00:00 Make the search box in a form so that enter does the default search - - - - - 142103e5 by David Waern at 2007-11-12T00:03:18+00:00 Merge patch from the old branch: Fri Aug 31 13:21:45 CEST 2007 Duncan Coutts <duncan at haskell.org> * Add category: Development to .cabal file Otherwise it appears on the hackage website in the "Unclassified" category. - - - - - 22ec2ddb by David Waern at 2007-11-25T01:55:29+00:00 A a list of small improvements to the TODO file - - - - - eb0129f4 by Wolfgang Jeltsch at 2007-12-03T23:47:55+00:00 addition of type equality support (at least for HTML generation) - - - - - 816a7e22 by David Waern at 2007-12-08T15:46:26+00:00 Handle class operators correctly when rendering predicates - - - - - 68baaad2 by David Waern at 2007-12-08T16:15:54+00:00 Code layout changes - - - - - 09b77fb4 by David Waern at 2007-12-08T16:16:03+00:00 Handle infix operators correctly in the Type -> HsType translation - - - - - 31c36da2 by David Waern at 2007-12-08T16:24:27+00:00 Add ppLParendTypes/ppLParendType - - - - - b17cc818 by David Waern at 2007-12-08T16:26:12+00:00 Use ppParendType when printing types args in predicates - - - - - ffd1f2cf by David Waern at 2007-12-08T16:45:06+00:00 Fix rendering of instance heads to handle infix operators This is also a refactoring to share this code for rendering predicates. - - - - - ff886d45 by David Waern at 2007-12-08T17:27:46+00:00 Fix rendering of class operators - - - - - e2fcbb9e by David Waern at 2007-12-08T17:59:28+00:00 Fix a bug (use ppTyName instead of ppName to print names in type apps) - - - - - 79a1056e by David Waern at 2007-12-08T21:25:18+00:00 Update tests - - - - - 867741ac by David Waern at 2007-12-08T21:25:49+00:00 Give a diff on test failure - - - - - 7e5eb274 by David Waern at 2008-01-05T14:33:45+00:00 Add DrIFT commands - - - - - 3656454d by David Waern at 2008-01-05T20:26:00+00:00 Add "cabal-version: >= 1.2" to the cabal file - - - - - 77974efc by Simon Marlow at 2007-12-20T09:52:44+00:00 add an item - - - - - f6ac1708 by Simon Marlow at 2007-12-06T14:00:10+00:00 Source links must point to the original module, not the referring module - - - - - eda1d5c9 by David Waern at 2008-01-06T14:40:52+00:00 Manual merge of a patch to the 0.8 branch Thu Dec 6 15:00:10 CET 2007 Simon Marlow <simonmar at microsoft.com> * Source links must point to the original module, not the referring module - - - - - 378f4085 by David Waern at 2008-01-06T16:03:45+00:00 Change stability from stable to experimental - - - - - 8bdafe44 by David Waern at 2008-01-06T16:14:22+00:00 Add haskell.vim (it had been removed somehow) - - - - - ea34d02e by David Waern at 2008-01-06T16:36:57+00:00 Change version to 2.0.0.0 - - - - - 34631ac0 by David Waern at 2008-01-06T16:44:57+00:00 Add missing modules to the cabal file - - - - - 9e142935 by David Waern at 2008-01-06T17:25:42+00:00 Depend on ghc >= 6.8.2 && < 6.9 - - - - - 59f9eeaa by Simon Marlow at 2007-12-20T10:43:04+00:00 add build scripts - - - - - 1c29ae30 by Simon Marlow at 2007-12-20T10:47:07+00:00 update version number - - - - - fe16a3e4 by Simon Marlow at 2007-12-20T10:48:03+00:00 update version - - - - - f688530f by Simon Marlow at 2007-12-20T10:48:29+00:00 doc updates - - - - - ce71b611 by David Waern at 2008-01-07T13:46:32+00:00 Change version in docs and spec - - - - - 03ab8d6f by David Waern at 2008-01-07T13:47:38+00:00 Manually merge over changes to CHANGES for 0.9 - - - - - 39f1b042 by David Waern at 2008-01-07T15:17:41+00:00 Remove the -use-package flag, we don't support it anyway - - - - - 7274a544 by David Waern at 2008-01-07T15:33:05+00:00 Update CHANGES for 2.0.0.0 - - - - - 96594f5d by David Waern at 2008-01-07T15:46:49+00:00 Wibble - - - - - f4c5a4c4 by David Waern at 2008-01-07T15:55:36+00:00 Change url to repo in documentation - - - - - 8a4c77f0 by David Waern at 2008-01-07T16:00:54+00:00 Update CHANGES - - - - - cb3a9288 by David Waern at 2008-01-07T16:02:55+00:00 Documentation fix - - - - - d8e45539 by David Waern at 2008-01-07T16:12:00+00:00 Update docs to say that Haddock accets .lhs files and module names - - - - - 4b5ce824 by David Waern at 2008-01-07T16:12:25+00:00 Document -B option - - - - - 47274262 by David Waern at 2008-01-07T16:23:07+00:00 Update CHANGES - - - - - 7ff314a9 by David Waern at 2008-01-07T16:23:20+00:00 Remove --use-package, --package & --no-implicit.. flags from docs - - - - - 6c3819c0 by David Waern at 2008-01-07T16:23:52+00:00 Remove --no-implicit-prelide flag - - - - - 1b14ae40 by David Waern at 2008-01-07T16:32:26+00:00 Update the "Using literate or pre-processed source" section - - - - - 0117f620 by David Waern at 2008-01-07T16:41:55+00:00 Document the --optghc flag - - - - - 087ab1cf by David Waern at 2008-01-07T16:42:10+00:00 Remove the documenation section on derived instances The problem mentioned there doesn't exist in Haddock 2.0.0.0 - - - - - 7253951e by David Waern at 2008-01-07T16:48:40+00:00 Document OPTIONS_HADDOCK - - - - - 3b6bdcf6 by David Waern at 2008-01-07T16:56:54+00:00 Wibble - - - - - 3025adf9 by David Waern at 2008-01-07T17:08:14+00:00 Wibble - - - - - 5f30f1a0 by David Waern at 2008-01-07T17:15:44+00:00 Change synopsis field to description - - - - - 1673f54b by David Waern at 2008-01-07T17:18:21+00:00 Change my email address in the cabal file - - - - - 55aa9808 by David Waern at 2008-01-07T18:18:02+00:00 Add documentation for readInterfaceFile - - - - - eaea417f by David Waern at 2008-01-07T18:21:30+00:00 Export necessary stuff from Distribution.Haddock - - - - - 7ea18759 by David Waern at 2008-01-07T18:31:49+00:00 Remove dep on Cabal - - - - - 7b79c74e by David Waern at 2008-01-07T18:33:49+00:00 Remove dep on process - - - - - ce3054e6 by David Waern at 2008-01-16T23:01:21+00:00 Add feature-requsts from Henning Thielemann to TODO - - - - - 0c08f1ec by David Waern at 2008-01-16T23:03:02+00:00 Record a bug in TODO - - - - - b04605f3 by David Waern at 2008-01-23T16:59:06+00:00 Add a bug reported by Ross to TODO - - - - - 5b17c030 by David Waern at 2008-01-23T18:05:53+00:00 A a bug report to TODO - - - - - 1c993b0d by David Waern at 2008-01-25T16:30:25+00:00 Accept test output - - - - - c22fc0d0 by David Waern at 2008-01-25T16:34:49+00:00 Accept test output - - - - - 4b795811 by David Waern at 2008-01-25T16:38:37+00:00 Change Hidden.hs (test) to use OPTIONS_HADDOCK - - - - - c124dbd9 by David Waern at 2008-01-25T16:39:23+00:00 Accept test output - - - - - ec6f6eea by David Waern at 2008-01-25T16:42:08+00:00 Add Hidden.html.ref to tests - - - - - 1dc9610c by David Waern at 2008-02-02T20:50:51+00:00 Add a comment about UNPACK bug in TODO - - - - - 2d3f7081 by David Waern at 2008-02-09T22:33:24+00:00 Change the representation of DocNames Ross Paterson reported a bug where links would point to the defining module instead of the "best" module for an identifier (e.g Int pointing to GHC.Base instead of Data.Int). This patch fixes this problem by refactoring the way renamed names are represented. Instead of representing them by: > data DocName = Link Name | NoLink Name they are now represented as such: > data DocName = Documented Name Module | Undocumented Name and the the link-env looks like this: > type LinkEnv = Map Name Module There are several reasons for this. First of all, the bug was caused by changing the module part of Names during the renaming process, without changing the Unique field. This caused names to be overwritten during the loading of .haddock files (which caches names using the NameCache of the GHC session). So we might create new Uniques during renaming to fix this (but I'm not sure that would be problem-free). Instead, we just keep the Name and add the Module where the name is best documented, since it can be useful to keep the original Name around (for e.g. source-code location info and for users of the Haddock API). Also, the names Link/NoLink don't really make sense, since wether to use links or not is entirely up to the users of DocName. In the process of following this change into H.Backends.Html I removed the assumption that binder names are Undocumented (which was just an unnecessary assumption, the OccName is the only thing needed to render these). This will probably make it possible to get rid of the renamer and replace it with a traversal from SYB or Uniplate. Since DocName has changed, InterfaceFile has changed so this patch also increments the file-format version. No backwards-compatibility is implemented. - - - - - 0f28c921 by David Waern at 2008-02-09T23:00:36+00:00 H.GHC.Utils: remove unused imports/exports - - - - - 0c44cad5 by David Waern at 2008-02-10T00:28:13+00:00 H.GHC.Utils: add some functions that were removed by mistake - - - - - e3452f49 by David Waern at 2008-02-10T00:28:48+00:00 Fix some trivial warnings in H.InterfaceFile - - - - - a6d74644 by David Waern at 2008-02-10T00:48:06+00:00 Update the version message to fit in small terminals - - - - - 76c9cd3e by David Waern at 2008-02-10T14:47:39+00:00 Remove bugs from TODO that don't apply anymore since the port - - - - - 5e10e090 by David Waern at 2008-02-10T15:22:47+00:00 Remove bugs from TODO that weren't actual bugs - - - - - fef70878 by David Waern at 2008-02-10T15:23:44+00:00 Remove yet another item from TODO that was not an actual bug - - - - - e1af47b8 by David Waern at 2008-02-11T10:25:57+00:00 Bump the version number to 2.1.0 Since the exported datatype DocName has changed, we need to bump the major version number. Let's also drop the fourth version component, it's not that useful. - - - - - e3be7825 by David Waern at 2008-04-11T14:29:04+00:00 Add a bug to TODO - - - - - cb6574be by David Waern at 2008-04-11T16:00:45+00:00 Use the in-place haddock when running tests - - - - - c6d7af0d by David Waern at 2008-04-11T16:09:16+00:00 Turn off GHC warnings when running tests - - - - - 7f61b546 by David Waern at 2008-04-11T17:24:00+00:00 Add a flag for turning off all warnings - - - - - 883b8422 by David Waern at 2008-04-12T14:02:18+00:00 Fix printing of data binders - - - - - 2a0db8fc by David Waern at 2008-04-12T18:52:46+00:00 Fix missing parenthesis in constructor args bug - - - - - 1b3ac3f9 by David Waern at 2008-04-12T18:57:23+00:00 Simplify test suite and add tests I move all tests into one single directory to simplify things, and add a test for the last bug that was fixed. - - - - - 8f178376 by David Waern at 2008-04-12T19:00:15+00:00 Add a script for copying test output to "expected" output - - - - - 193e3a03 by David Waern at 2008-04-12T19:16:37+00:00 Remove two fixed bugs from TODO - - - - - ddc9130c by David Waern at 2008-04-12T19:37:06+00:00 Update test README - - - - - 956069c0 by David Waern at 2008-05-01T12:16:14+00:00 Update version number in spec and docs - - - - - 5478621c by David Waern at 2008-05-01T12:28:12+00:00 Remove claim of backwards compatibility from docs for readInterfaceFile - - - - - 4a16dea9 by David Waern at 2008-05-01T12:33:04+00:00 Update CHANGES - - - - - 804216fb by David Waern at 2008-05-01T12:43:16+00:00 Add a synopsis - - - - - fd0c84d5 by David Waern at 2008-05-01T12:44:44+00:00 Add Haddock.DocName to the cabal file - - - - - 9f4a7439 by David Waern at 2008-05-01T12:45:53+00:00 Remove -fglasgow-exts and -fasm - - - - - aee7c145 by David Waern at 2008-05-01T12:54:01+00:00 Add LANGUAGE pragmas to source files - - - - - 9a58428b by David Waern at 2008-05-01T12:54:19+00:00 Add extensions to cabal file - - - - - 494f1bee by David Waern at 2008-05-01T13:12:09+00:00 Export DocName in the API - - - - - c938196b by David Waern at 2008-05-01T13:12:19+00:00 Add hide options to some source files - - - - - 236e86af by Neil Mitchell at 2008-06-07T20:45:10+00:00 Rewrite the --hoogle flag support - - - - - 6d910950 by Neil Mitchell at 2008-06-14T10:56:50+00:00 Simplify the newtype/data outputting in Hoogle, as haddock does it automatically - - - - - f87a95a8 by Neil Mitchell at 2008-06-14T12:10:18+00:00 Add initial structure for outputting documentation as well, but does not yet output anything - - - - - 7c3bce54 by Neil Mitchell at 2008-06-14T12:27:07+00:00 Remove <document comment> from the Hoogle output - - - - - 9504a325 by Neil Mitchell at 2008-06-16T06:33:21+00:00 Default to "main" if there is no package, otherwise will clobber hoogle's hoogle info - - - - - 4a794a79 by Neil Mitchell at 2008-06-16T06:53:29+00:00 Change packageName to packageStr, as it better reflects the information stored in it - - - - - 7abc9baf by Neil Mitchell at 2008-06-16T07:09:49+00:00 Add modulePkgInfo to Haddock.GHC.Utils, which gives back package name and version info - - - - - 8ca11514 by Neil Mitchell at 2008-06-16T07:13:48+00:00 Change Hoogle to take the package name and package version separately - - - - - a6da452d by Neil Mitchell at 2008-06-18T11:29:46+00:00 In Hoogle do not list things that are not local to this module - - - - - 974b76b7 by David Waern at 2008-06-19T18:40:13+00:00 Be more consistent with GHC API naming in H.GHC.Utils - - - - - 2facb4eb by David Waern at 2008-06-19T19:03:03+00:00 Update test output - - - - - c501de72 by David Waern at 2008-06-26T20:26:49+00:00 Use ghc-paths to get the lib dir The path can still be overridden using the -B flag. It's not longer required to pass the lib dir to the program that runs the test suite. - - - - - ac4c6836 by David Waern at 2008-06-26T20:33:08+00:00 Update CHANGES - - - - - 9d21c60a by David Waern at 2008-06-26T20:34:53+00:00 Update README - - - - - 741448f0 by David Waern at 2008-06-26T21:12:57+00:00 Improve wording in the help message - - - - - b1b42b11 by David Waern at 2008-06-30T10:16:17+00:00 Rename ForeignType - - - - - 6d6c2b34 by David Waern at 2008-06-30T10:25:09+00:00 Rename TyFamily - - - - - 8d1125ed by David Waern at 2008-06-30T10:37:21+00:00 Rename type patterns - - - - - 7610a4cb by David Waern at 2008-06-30T10:45:07+00:00 Rename associated types - - - - - 8eeba14c by David Waern at 2008-06-30T10:47:41+00:00 Remove the TODO file now that we have a trac - - - - - 1af5b25b by David Waern at 2008-07-02T18:19:28+00:00 Render type family declarations (untested) - - - - - ceb99797 by David Waern at 2008-07-02T18:24:06+00:00 Remove redundant check for summary when rendering data types - - - - - b36a58e0 by David Waern at 2008-07-02T22:01:38+00:00 More support for type families and associated types Now we just need to render the instances - - - - - 78784879 by David Waern at 2008-07-07T22:13:58+00:00 Remove filtering of instances We were filtering out all instances for types with unknown names. This was probably an attempt to filter out instances for internal types. I am removing the filtering for the moment, and will try to fix this properly later. - - - - - 3e758dad by David Waern at 2008-06-30T18:50:30+00:00 Run haddock in-place during testing - - - - - d9dab0ce by David Waern at 2008-07-08T21:04:32+00:00 Remove index.html and doc-index.html from output, they should not be versioned - - - - - 3e6c4681 by David Waern at 2008-07-08T21:06:42+00:00 Update test output following change to instance filtering - - - - - e34a3f14 by David Waern at 2008-07-12T16:48:28+00:00 Stop using the map from exported names to declarations During creation of the interface, we were using two maps: one from exported names to declarations, and one from all defined names in the module to declarations. The first contained subordinate names while the second one didn't. The first map was never used to look up names not defined in the associated module, so if we add subordinate names to the second map, we could use it everywhere. That's that this patch does. This simplifies code because we don't have to pass around two maps everywhere. We now store the map from locally defined things in the interface structure instead of the one from exported names. - - - - - 2e1d2766 by David Waern at 2008-07-12T16:55:21+00:00 Get the all locally defined names from GHC API We previously had some code to compute all locally defined names in a module including subordinate names. We don't need it since we can get the names from modInfoTyThings in the GHC API. - - - - - bf637994 by David Waern at 2008-07-13T13:09:16+00:00 Refactoring in H.Interface.Create We were creating a doc map, a declaration map and a list of entities separately by going through the HsGroup. These structures were all used to build the interface of a module. Instead of doing this, we can start by creating a list of declarations from the HsGroup, then collect the docs directly from this list (instead of using the list of entities), creating a documentation map. We no longer need the Entity data type, and we can store a single map from names to declarations and docs in the interface, instead of the declaration map and the doc map. This way, there is only one place where we filter out the declarations that we don't want, and we can remove a lot of code. Another advantage of this is that we can create the exports directly out of the list of declarations when we export the full module contents. (Previously we did a look up for each name to find the declarations). This is faster and removes another point where we depend on names to identify exported declarations, which is good because it eliminates problems with instances (which don't have names). - - - - - 547e410e by David Waern at 2008-07-13T13:34:51+00:00 Remove FastString import and FSLIT macro in H.I.Create -- they were unused - - - - - 693759d1 by David Waern at 2008-07-13T13:36:23+00:00 Remove unused import from H.I.Create - - - - - cde6e7fb by David Waern at 2008-07-13T13:51:54+00:00 Small touches - - - - - 96de8f1d by David Waern at 2008-07-20T11:21:46+00:00 Preparation for rendering instances as separate declarations We want to be able to render instances as separate declarations. So we remove the Name argument of ExportDecl, since instances are nameless. This patch also contains the first steps needed to gather type family instances and display them in the backend, but the implementation is far from complete. Because of this, we don't actually show the instances yet. - - - - - b0f824fb by David Waern at 2008-07-20T15:53:08+00:00 Follow changes to ExportDecl in Hoogle - - - - - 1192eff3 by Neil Mitchell at 2008-06-26T00:28:10+00:00 Change how the Hoogle backend outputs classes, adding the context in - - - - - 7a0d1464 by Neil Mitchell at 2008-06-26T00:28:46+00:00 Remove the indent utility function from Hoogle backend - - - - - 3361241b by Neil Mitchell at 2008-06-26T09:45:09+00:00 Add support for Hoogle writing ForeignImport/ForeignExport properly - - - - - 795ad3bf by Neil Mitchell at 2008-06-26T12:15:25+00:00 Flesh out the Hoogle code to render documentation - - - - - 23277995 by Neil Mitchell at 2008-06-26T14:56:41+00:00 Fix a bug in the Hoogle backend, unordered lists were being written out <ul>...</u> - - - - - db739b27 by Neil Mitchell at 2008-06-26T15:09:54+00:00 Remove any white space around a <li> element - - - - - f2e6bb8c by Neil Mitchell at 2008-07-10T15:30:47+00:00 Remove the TODO in the Hoogle HTML generation, was already done - - - - - 693ec9a3 by Neil Mitchell at 2008-07-10T15:53:00+00:00 Put brackets round operators in more places in the Hoogle output - - - - - 842313aa by Neil Mitchell at 2008-07-10T16:01:25+00:00 Print type signatures with brackets around the name - - - - - cf93deb0 by David Waern at 2008-07-20T17:04:22+00:00 Bump version number to 2.2.0 - - - - - 30e6a8d1 by David Waern at 2008-07-20T17:04:41+00:00 Resolve conflicts in H.B.Hoogle - - - - - 1f0071c9 by David Waern at 2008-07-23T23:05:01+00:00 Add "all" command to runtests.hs that runs all tests despite failures - - - - - f2723023 by David Waern at 2008-07-23T23:08:39+00:00 Update tests/README - - - - - c0304a11 by David Waern at 2008-07-23T23:21:15+00:00 Be compatible with GHC 6.8.3 The cabal file is converted to use the "new" syntax with explicit Library and Executable sections. We define the __GHC_PATCHLEVEL__ symbol using a conditinal cpp-options field in the cabal file. (Ideally, Cabal would define the symbol for us, like it does for __GLASGOW_HASKELL__). We use these symbols to #ifdef around a small difference between 6.8.2 and 6.8.3. Previously, we only supported GHC 6.8.2 officially but the dependencies field said "ghc <= 6.9". This was just for convenience when testing against the (then compatible) HEAD version of GHC, and was left in the release by mistake. Now, we support both GHC 6.8.2 and 6.8.3 and the dependencies field correctly reflects this. - - - - - 88a5fe71 by David Waern at 2008-07-23T23:54:16+00:00 Depend on the currently available ghc-paths versions only - - - - - 8738d97b by David Waern at 2008-07-24T10:50:44+00:00 FIX haskell/haddock#44: Propagate parenthesis level when printing documented types - - - - - 05339119 by David Waern at 2008-07-24T16:06:18+00:00 Drop unnecessary parenthesis in types, put in by the user We were putting in parenthesis were the user did. Let's remove this since it just clutters up the types. The types are readable anyway since we print parens around infix operators and do not rely on fixity levels. When doing this I discovered that we were relying on user parenthesis when printin types like (a `O` b) c. This patchs fixes this problem so that parenthesis are always inserted around an infix op application in case it is applied to further arguments, or if it's an arguments to a type constructor. Tests are updated. - - - - - b3a99828 by David Waern at 2008-07-24T10:19:43+00:00 Print parenthesis around non-atomic banged types Fixes half of haskell/haddock#44 - - - - - ab5238e0 by David Waern at 2008-07-24T22:07:49+00:00 Add a reference file for the TypeFamilies test - - - - - 1941cc11 by David Waern at 2008-07-25T17:15:53+00:00 Simplify definition of pretty and trace_ppr - - - - - e3bfa33c by David Waern at 2008-07-25T17:18:27+00:00 Warning messages Output a warning when filtering out data/type instances and associated types in instances. We don't show these in the documentation yet, and we need to let the user know. - - - - - 9b85fc89 by David Waern at 2008-07-25T17:45:40+00:00 Doc: Mention Hoogle in the Introduction - - - - - afb2dd60 by David Waern at 2008-07-25T17:49:00+00:00 Doc: update -B description - - - - - 584c0c91 by David Waern at 2008-07-25T18:11:38+00:00 Doc: describe -w flag - - - - - 77619c24 by David Waern at 2008-07-28T12:29:07+00:00 Remove TODO from cabal file - - - - - 96717d5f by David Waern at 2008-07-28T12:29:27+00:00 Support type equality predicates - - - - - c2fd2330 by David Waern at 2008-07-29T19:45:14+00:00 Move unL from H.B.Hoogle to H.GHC.Utils I like Neil's shorter unL better than unLoc from the GHC API. - - - - - c4c3bf6a by David Waern at 2008-07-29T19:47:36+00:00 Do not export ATs when not in list of subitems - - - - - bf9a7b85 by David Waern at 2008-08-03T11:42:59+00:00 Filter out ForeignExports - - - - - df59fcb0 by David Waern at 2008-08-03T14:02:51+00:00 Filter out more declarations The previous refactorings in H.I.Create introduced a few bugs. Filtering of some types of declarations that we don't handle was removed. This patch fixes this. - - - - - 2f8a958b by David Waern at 2008-08-03T15:24:07+00:00 Move reL to H.GHC.Utils so we can use it everywhere - - - - - 8ec15efd by David Waern at 2008-08-03T15:25:00+00:00 Use isVanillaLSig from GHC API instead of home brewn function - - - - - 300f93a2 by David Waern at 2008-08-03T15:25:27+00:00 Filter out separately exported ATs This is a quick and dirty hack to get rid of separately exported ATs. We haven't decided how to handle them yet. No warning message is given. - - - - - 8776d1ec by David Waern at 2008-08-03T16:21:21+00:00 Filter out more declarations and keep only vanilla type sigs in classes - - - - - ea07eada by David Waern at 2008-08-03T16:48:00+00:00 Fix layout - - - - - dd5e8199 by David Waern at 2008-08-03T16:50:52+00:00 Move some utility functions from H.I.Create to H.GHC.Utils - - - - - 4a1dbd72 by David Waern at 2008-08-03T17:39:55+00:00 Do not filter out doc declarations - - - - - 0bc8dca4 by David Waern at 2008-08-03T17:47:26+00:00 Filter out separately exported ATs (take two) - - - - - af970fe8 by David Waern at 2008-08-03T22:39:17+00:00 Update CHANGES - - - - - 5436ad24 by David Waern at 2008-08-03T22:40:20+00:00 Bump version number to 2.2.1 - - - - - d66de448 by David Waern at 2008-08-05T19:00:32+00:00 Remove version restriction on ghc-paths - - - - - 534b1364 by David Waern at 2008-08-05T19:04:35+00:00 Bump version to 2.2.2 and update CHANGES - - - - - 549188ff by David Waern at 2008-08-05T19:16:49+00:00 Fix CHANGES - - - - - 0d156bb4 by Luke Plant at 2008-08-11T15:20:59+00:00 invoking haddock clarification and help - - - - - 748295cc by David Waern at 2008-08-11T18:56:37+00:00 Doc: say that the --hoogle option is functional - - - - - 43301db4 by David Waern at 2008-08-05T19:26:08+00:00 Change ghc version dependency to >= 6.8.2 - - - - - 3e5a53b6 by David Waern at 2008-08-10T22:42:05+00:00 Make H.GHC.Utils build with GHC HEAD - - - - - 7568ace0 by David Waern at 2008-08-11T19:41:54+00:00 Import Control.OldException instead of C.Exception when using ghc >= 6.9 We should really test for base version instead, but I don't currently know which version to test for. - - - - - b71ae991 by David Waern at 2008-08-12T22:40:39+00:00 Make our .haddock file version number depend on the GHC version We need to do this, since our .haddock format can potentially change whenever GHC's version changes (even when only the patchlevel changes). - - - - - 6307ce3f by David Waern at 2008-08-12T22:49:57+00:00 Remove matching on NoteTy in AttachInstances, it has been removed - - - - - 2dbcfd5f by David Waern at 2008-08-12T23:02:02+00:00 Comment out H.GHC.loadPackages - it is unused and doesn't build with ghc >= 6.9 - - - - - c74db5c2 by David Waern at 2008-08-12T23:03:58+00:00 Hide <.> from GHC import in Hoogle only for ghc <= 6.8.3 - - - - - 69a44ebb by David Waern at 2008-08-12T23:11:12+00:00 Follow changes to parseDynamic/StaticFlags - - - - - 5881f3f0 by David Waern at 2008-08-13T21:43:58+00:00 Add __GHC_PATCHLEVEL__ symbol also when building the library - - - - - 8574dc11 by David Waern at 2008-08-13T21:44:17+00:00 Follow move of package string functions from PackageConfig to Module - - - - - c9baa77f by David Waern at 2008-08-13T21:45:29+00:00 Follow extensible exceptions changes - - - - - 9092de15 by David Waern at 2008-08-13T21:46:20+00:00 Update test following Haddock version change - - - - - ebe569a4 by David Waern at 2008-08-13T21:46:54+00:00 Follow changes to parseDynamic- parseStaticFlags in GHC - - - - - b8a5ffd3 by David Waern at 2008-08-13T21:47:36+00:00 Follow changes to Binary in GHC 6.9 - - - - - edfda1cc by David Waern at 2008-08-13T21:50:17+00:00 Change ghc version dependency to >= 6.8.2 && <= 6.9 - - - - - d59be1cf by Neil Mitchell at 2008-08-12T16:02:53+00:00 Output all items, even if they are not defined in this module - ensures map comes from Prelude, not just GHC.Base - - - - - dda93b9f by Neil Mitchell at 2008-08-12T21:37:32+00:00 Add support for type synonyms to Hoogle, was accidentally missing before (woops!) - - - - - b6ee795c by Neil Mitchell at 2008-08-13T14:03:24+00:00 Generalise Hoogle.doc and add a docWith - - - - - 415e1bb2 by Neil Mitchell at 2008-08-13T14:03:46+00:00 Make Hoogle add documentation to a package - - - - - 790a1202 by Neil Mitchell at 2008-08-18T12:52:43+00:00 Use the same method to put out signatures as class methods in the Hoogle backend - - - - - ded37eba by Neil Mitchell at 2008-08-18T12:53:04+00:00 Remove Explicit top-level forall's when pretty-printing signatures - - - - - 6468c722 by Neil Mitchell at 2008-08-20T07:59:13+00:00 Simplify the code by removing not-to-important use of <.> in the Hoogle back end - - - - - 788c3a8b by Neil Mitchell at 2008-08-21T18:20:24+00:00 In the hoogle back end, markup definition lists using <i>, not <b> - - - - - 77d4b000 by Ian Lynagh at 2008-08-14T10:49:14+00:00 Add a Makefile for GHC's build system. Still won't work yet, but we're closer - - - - - 920440d7 by Ian Lynagh at 2008-08-27T18:06:46+00:00 Add haddock.wrapper - - - - - bcda925f by Ian Lynagh at 2008-08-27T18:07:02+00:00 Add a manual Cabal flag to control the ghc-paths dependency - - - - - 04d194e2 by Ian Lynagh at 2008-08-27T20:41:27+00:00 Update extensions in Cabal file Use ScopedTypeVariables instead of PatternSignatures - - - - - 12480043 by Ian Lynagh at 2008-08-27T20:41:55+00:00 Increase the upper bound on the GHC version number - - - - - b1f809a5 by Ian Lynagh at 2008-08-27T21:32:22+00:00 Fix some warnings - - - - - aea0453d by Ian Lynagh at 2008-08-28T14:22:29+00:00 Fixes for using haddock in a GHC build tree - - - - - ad23bf86 by Ian Lynagh at 2008-08-28T21:14:27+00:00 Don't use Cabal wrappers on Windows - - - - - 35858e4c by Ian Lynagh at 2008-08-29T00:07:42+00:00 Fix in-tree haddock on Windows - - - - - c2642066 by Ian Lynagh at 2008-09-03T22:35:53+00:00 follow library changes - - - - - 2eb55d50 by Ian Lynagh at 2008-09-07T18:52:51+00:00 bindist fixes - - - - - 3daa5b59 by Ian Lynagh at 2008-09-10T16:58:18+00:00 We need to tell haddock that its datasubdir is . or it can't find package.conf - - - - - 388fd8c2 by Ian Lynagh at 2008-09-10T19:47:44+00:00 Fix haddock inplace on Windows - - - - - 70a641c1 by Ian Lynagh at 2008-09-10T22:15:44+00:00 Fix installed haddock on Windows - - - - - 83c1e997 by Neil Mitchell at 2008-09-11T10:48:55+00:00 Import GHC.Paths if not IN_GHC_TREE, seems to match the use of GHC.Paths functions much better - - - - - b452519b by Ian Lynagh at 2008-09-12T12:58:24+00:00 Add a LANGUAGE ForeignFunctionInterface pragma - - - - - afbd592c by Ian Lynagh at 2008-09-12T12:59:13+00:00 Wibble imports - - - - - 547ac4ad by Ian Lynagh at 2008-09-14T15:34:22+00:00 Add a "#!/bin/sh" to haddock.wrapper - - - - - f207a807 by Ian Lynagh at 2008-09-15T10:02:32+00:00 Use "exec" when calling haddock in the wrapper - - - - - 2ee68509 by Thomas Schilling at 2008-09-15T09:09:16+00:00 Port Haddock.Interface to new GHC API. This required one bigger change: 'readInterfaceFile' used to take an optional 'Session' argument. This was used to optionally update the name cache of an existing GHC session. This does not work with the new GHC API, because an active session requires the function to return a 'GhcMonad' action, but this is not possible if no session is provided. The solution is to use an argument of functions for reading and updating the name cache and to make the function work for any monad that embeds IO, so it's result type can adapt to the calling context. While refactoring, I tried to make the code a little more self-documenting, mostly turning comments into function names. - - - - - 3bb96431 by Thomas Schilling at 2008-09-15T09:09:37+00:00 Reflect GHC API changes. - - - - - 2e60f714 by Thomas Schilling at 2008-09-15T09:10:37+00:00 Port Haddock.GHC.Typecheck to new GHC API. - - - - - 9cfd4cff by Thomas Schilling at 2008-09-15T09:11:00+00:00 Port Haddock.GHC to new GHC API. - - - - - caffa003 by Thomas Schilling at 2008-09-15T09:11:25+00:00 Port Main to new GHC API. - - - - - 069a4608 by Ian Lynagh at 2008-09-21T11:19:00+00:00 Fix paths used on Windows frmo a GHC tree: There is no whare directory - - - - - 7ceee1f7 by Ian Lynagh at 2008-09-21T12:20:16+00:00 Fix the in-tree haddock on Windows - - - - - 0d486514 by Ian Lynagh at 2008-09-23T18:06:58+00:00 Increase the GHC upper bound from 6.11 to 6.13 - - - - - f092c414 by Neil Mitchell at 2008-09-11T14:56:07+00:00 Do not wrap __ in brackets - - - - - 036bdd13 by Ian Lynagh at 2008-09-28T01:42:35+00:00 Fix building haddock when GhcProfiled=YES - - - - - 01434a89 by David Waern at 2008-09-24T20:24:21+00:00 Add PatternSignatures LANGUAGE pragma to Main and Utils - - - - - 1671a750 by David Waern at 2008-10-02T22:57:25+00:00 For source links, get original module from declaration name instead of environment. Getting it from the environment must have been a remnant from the times when we were using unqualified names (versions 0.x). - - - - - a25dde99 by David Waern at 2008-10-02T22:59:57+00:00 Remove ifaceEnv from Interface - it's no longer used - - - - - 610993da by David Waern at 2008-10-02T23:04:58+00:00 Write a comment about source links for type instance declarations - - - - - 5a96b5d5 by Thomas Schilling at 2008-10-03T10:45:08+00:00 Follow GHC API change of parseModule. - - - - - 5a943ae5 by Ian Lynagh at 2008-10-03T15:56:58+00:00 TAG 2008-10-03 - - - - - 76cdd6ae by Thomas Schilling at 2008-10-08T12:29:50+00:00 Only load modules once when typechecking with GHC. This still doesn't fix the memory leak since the typechecked source is retained and then processed separately. To fix the leak, modules must be processed directly after typechecking. - - - - - 7074d251 by David Waern at 2008-10-09T23:53:54+00:00 Interleave typechecking with interface creation At the same time, we fix a bug where the list of interfaces were processed in the wrong order, when building the links and renaming the interfaces. - - - - - 4b9b2b2d by David Waern at 2008-10-09T23:54:49+00:00 Add some strictness annotations in Interface We add some strictness annotations to the fields of Interface, so that less GHC data is hold on to during processing. - - - - - 22035628 by David Waern at 2008-10-10T20:02:31+00:00 Remove typecheckFiles and MonadUtils import from H.GHC.Typeccheck - - - - - be637ad3 by David Waern at 2008-10-10T20:33:38+00:00 Make Haddock build with GHC 6.8.2 - - - - - 523b3404 by David Waern at 2008-10-10T21:08:09+00:00 Fix documentation for createInterfaces - - - - - e1556702 by David Waern at 2008-10-10T21:26:19+00:00 Hide H.Utils in library - - - - - a8e751c3 by David Waern at 2008-10-10T21:34:59+00:00 Add back .haddock file versioning based on GHC version It was accidentally removed in the patch for GHC 6.8.2 compatibility - - - - - 06fb3c01 by David Waern at 2008-10-10T21:47:15+00:00 Bump version number to 2.3.0 - - - - - ff087fce by David Waern at 2008-10-10T22:35:49+00:00 Add support for DocPic The support for DocPic was merged into the GHC source long ago, but the support in Haddock was forgotten. Thanks Peter Gavin for submitting this fix! - - - - - 3af85bf6 by David Waern at 2008-10-10T23:34:05+00:00 Update tests - - - - - 0966873c by Simon Marlow at 2008-10-10T14:43:04+00:00 no need for handleErrMsg now, we don't throw any ErrMsgs - - - - - f1870de3 by Clemens Fruhwirth at 2008-10-10T13:29:36+00:00 Compile with wrapper but remove it for dist-install - - - - - 7b440dc2 by David Waern at 2008-10-11T14:02:25+00:00 Remove interface from LinksInfo It was there to know the documentation home module when creating a wiki link, but we already know this since we have the DocName. - - - - - e5729e6a by David Waern at 2008-10-15T20:49:18+00:00 Wibble - - - - - b2a8e01a by David Waern at 2008-10-15T21:03:36+00:00 Use type synonyms for declarations and docs in H.I.Create - - - - - be71a15b by David Waern at 2008-10-15T21:12:17+00:00 Comment out unused type family stuff completely - - - - - 91aaf075 by David Waern at 2008-10-15T21:49:04+00:00 Wibble - - - - - 42ba4eb4 by David Waern at 2008-10-15T21:53:53+00:00 Move convenient type synonym to H.Types - - - - - db11b723 by David Waern at 2008-10-15T22:14:07+00:00 Add DeclInfo to H.Types - - - - - 193552b6 by David Waern at 2008-10-15T22:15:01+00:00 Add subordinates with docs to the declaration map The only place in the code where we want the subordinates for a declaration is right after having looked up the declaration in the map. And since we include subordinates in the map, we might as well take the opportunity to store those subordinates that belong to a particular declaration together with that declaration. We also store the documentation for each subordinate. - - - - - 31e6eebc by David Waern at 2008-10-16T17:18:47+00:00 Wibble - - - - - 0dcbd79f by David Waern at 2008-10-16T20:58:42+00:00 Fix haskell/haddock#61 We were not getting docs for re-exported class methods. This was because we were looking up the docs in a map made from the declarations in the current module being rendered. Obviously, re-exported class methods come from another module. Class methods and ATs were the only thing we were looking up using the doc map, everything else we found in the ExporItems. So now I've put subordinate docs in the ExportItem's directly, to make things a bit more consistent. To do this, I added subordinates to the the declarations in the declaration map. This was easy since we were computing subordinates anyway, to store stand-alone in the map. I added a new type synonym 'DeclInfo', which is what we call what is now stored in the map. This little refactoring removes duplicate code to retrieve subordinates and documentation from the HsGroup. - - - - - de47f20a by David Waern at 2008-10-16T22:06:35+00:00 Document function and improve its layout - - - - - e74e625a by Thomas Schilling at 2008-10-20T11:12:57+00:00 Force interface more aggressively. For running Haddock on GHC this reduces memory usage by about 50 MB on a 32 bit system. A heap profile shows total memory usage peak at about 100 MB, but actual usage is at around 300 MB even with compacting GC (+RTS -c). - - - - - b63ac9a1 by David Waern at 2008-10-20T20:25:50+00:00 Make renamer consistent Instead of explicitly making some binders Undocumented, treat all names the same way (that is, try to find a Documented name). - - - - - f6de0bb0 by Ian Lynagh at 2008-09-19T00:54:43+00:00 TAG GHC 6.10 fork - - - - - 74599cd0 by David Waern at 2008-10-20T21:13:24+00:00 Do not save hidden modules in the .haddock file We were saving interfaces of all processed modules including those hidden using {-# OPTIONS_HADDOCK hide #-} in the .haddock file. This caused broken links when generating the index for the libraries that come with GHC. This patch excludes modules with hidden documentation when writing .haddock files. It should fix the above problem. - - - - - 7b6742e9 by David Waern at 2008-10-21T19:54:52+00:00 Do not save hidden modules in the .haddock file (also for ghc >= 6.9) When writing the first patch, I forgot to do the fix in both branches of an #if macro. - - - - - b99b1951 by David Waern at 2008-10-22T20:04:18+00:00 Remove subordinate map and its usage It is not needed now that we store subordinate names in the DeclInfo map. - - - - - da97cddc by David Waern at 2008-10-22T20:11:46+00:00 Tidy up code in H.I.Create a little Remove commented out half-done type instance support, and remove DeclWithDoc synonym. - - - - - 6afa76f3 by David Waern at 2008-10-22T21:17:29+00:00 Fix warnings in H.GHC.Utils - - - - - 171ea1e8 by David Waern at 2008-10-22T21:35:04+00:00 Fix warnings in H.Utils - - - - - c8cb3b91 by David Waern at 2008-10-22T21:36:49+00:00 Wibble - - - - - 767fa06a by David Waern at 2008-10-27T19:59:04+00:00 Make named doc comments into ExportDoc instead of ExportDecl Fixes a crash when processing modules without export lists containing named docs. - - - - - e638bbc6 by David Waern at 2008-11-02T22:21:10+00:00 Add HCAR entry - - - - - 92b4ffcf by David Waern at 2008-11-02T22:44:19+00:00 Update CHANGES - - - - - 84d4da6e by David Waern at 2008-11-03T11:25:04+00:00 Add failing test for template haskell crash - - - - - 2a9cd2b1 by David Waern at 2008-11-04T21:13:44+00:00 Add tests/TH.hs - - - - - 8a59348e by David Waern at 2008-11-04T21:30:26+00:00 TAG 2.3.0 - - - - - 54f70d31 by Thomas Schilling at 2008-10-24T17:04:08+00:00 Enable framed view of the HTML documentation. This patch introduces: - A page that displays the documentation in a framed view. The left side will show a full module index. Clicking a module name will show it in the right frame. If Javascript is enabled, the left side is split again to show the modules at the top and a very short synopsis for the module currently displayed on the right. - Code to generate the mini-synopsis for each module and the mini module index ("index-frames.html"). - CSS rules for the mini-synopsis. - A very small amount of javascript to update the mini-synopsis (but only if inside a frame.) Some perhaps controversial things: - Sharing code was very difficult, so there is a small amount of code duplication. - The amount of generated pages has been doubled, since every module now also gets a mini-synopsis. The overhead should not be too much, but I haven't checked. Alternatively, the mini-synopsis could also be generated using Javascript if we properly annotate the actual synopsis. - - - - - 5d7ea5a6 by David Waern at 2008-11-04T23:20:17+00:00 Follow change to ExportDecl in frames code - - - - - 60e16308 by David Waern at 2008-11-04T23:35:26+00:00 Update CHANGES - - - - - d63fd26d by David Waern at 2008-11-04T23:37:43+00:00 Bump version number - - - - - c1660c39 by David Waern at 2008-11-04T23:44:46+00:00 Update CHANGES - - - - - 995ab384 by David Waern at 2008-11-04T23:55:21+00:00 Remove .ref files from tests/output/ - - - - - 1abbbe75 by David Waern at 2008-11-04T23:57:41+00:00 Output version info before running tests - - - - - 649b182f by David Waern at 2008-11-05T22:45:37+00:00 Add ANNOUNCE message - - - - - c36ae0bb by David Waern at 2008-11-05T23:15:35+00:00 Update ANNOUNCE - - - - - 9c4f3d40 by David Waern at 2008-11-05T23:18:30+00:00 Wibble - - - - - 5aac87ce by David Waern at 2008-11-06T21:07:48+00:00 Depend on base 4.* when using GHC >= 6.9, otherwise 3.* - - - - - b9796a74 by David Waern at 2008-11-06T21:13:40+00:00 Bump version to 2.4.1 and update CHANGES - - - - - d4b26baa by David Waern at 2008-11-06T21:26:33+00:00 Depend on base 4.0.* instead of 4.* - - - - - 2cb0903c by David Waern at 2008-11-06T21:46:53+00:00 Fix warnings in H.B.HH and H.B.HH2 - - - - - e568e89a by David Waern at 2008-11-06T21:47:12+00:00 Fix warnings in Haddock.ModuleTree - - - - - 9dc14fbd by David Waern at 2008-11-06T21:47:52+00:00 Fix warnings in Haddock.Version - - - - - 02ac197c by David Waern at 2008-11-06T21:51:31+00:00 Fix warnings in H.InterfaceFile and H.Options - - - - - 63e7439a by David Waern at 2008-11-06T21:59:45+00:00 Fix warnings in H.GHC.Typecheck - - - - - 4bca5b68 by David Waern at 2008-11-08T13:43:42+00:00 Set HscTarget to HscNothing instead of HscAsm There used to be a bug in the GHC API that prevented us from setting this value. - - - - - 07357aec by David Waern at 2008-11-09T22:27:00+00:00 Re-export NameCache and friends from Distribution.Haddock - - - - - ea554b5a by David Waern at 2008-11-09T23:14:10+00:00 Add Haddock.GHC.Utils to other-modules in library - - - - - 74aecfd7 by David Waern at 2008-11-10T01:18:57+00:00 Export DocName in the library - - - - - 241a58b3 by David Waern at 2008-11-10T01:19:18+00:00 Document the functions in H.DocName - - - - - edc2ef1b by David Waern at 2008-11-10T01:20:52+00:00 Export H.DocName in the library - - - - - 4f588d55 by David Waern at 2008-11-10T01:29:14+00:00 Make DocName an instance of NamedThing - - - - - b4647244 by David Waern at 2008-11-15T22:58:18+00:00 Reflect version bump in test suite - - - - - 4bee8ce2 by David Waern at 2008-11-15T22:58:45+00:00 Update tests For unknown reasons, test output for Bug1 and Test has changed for the better. - - - - - 1690e2f9 by David Waern at 2008-11-15T22:59:33+00:00 Store hidden modules in .haddock files We store documentation for an entity in the 'InstalledInterface' of the definition site module, and never in the same structure for a module which re-exports the entity. So when a client of the Haddock library wants to look up some documentation, he/she might need to access a hidden module. But we currently don't store hidden modules in the .haddock files. So we add the hidden modules and the Haddock options to the .haddock files. The options will be used to filter the module list to obtain the visible modules only, which is necessary for generating the contents and index for installed packages. - - - - - 8add6435 by David Waern at 2008-11-16T14:35:50+00:00 Bump major version number due to .haddock file format change - - - - - 48bfcf82 by David Waern at 2008-11-23T14:32:52+00:00 Update tests to account for version number bump - - - - - 0bbd1738 by David Waern at 2008-11-23T14:33:31+00:00 HADDOCK_DATA_DIR changed to haddock_datadir - - - - - 5088b78c by David Waern at 2008-11-23T17:13:21+00:00 FIX haskell/haddock#45: generate two anchors for each name We generate two anchor tags for each name, one where we don't escape the name and one where we URI-encode it. This is for compatibility between IE and Opera. Test output is updated. - - - - - 5ee5ca3b by Neil Mitchell at 2008-11-27T14:38:11+00:00 Drop HsDocTy annotations, they mess up pretty printing and also have a bracketing bug (#2584) - - - - - 51c014e9 by Roman Cheplyaka at 2008-11-27T22:27:36+00:00 Allow referring to a specific section within a module in a module link Fixes haskell/haddock#65 - - - - - 4094bdc5 by David Waern at 2008-11-28T21:13:33+00:00 Update tests following anchor change - - - - - f89552dd by Thomas Schilling at 2008-11-29T16:16:20+00:00 Haddock really shouldn't try to overwrite files. - - - - - 98127499 by David Waern at 2008-12-07T14:09:15+00:00 Solve conflict - - - - - 319356c5 by David Waern at 2008-10-22T21:16:55+00:00 Add -Wall -Werror to ghc-options - - - - - 3c4968c9 by David Waern at 2008-11-04T23:38:56+00:00 TAG 2.4.0 - - - - - 4b21e003 by David Waern at 2008-11-06T21:14:04+00:00 TAG 2.4.1 - - - - - 8e0cad5c by David Waern at 2008-12-07T14:12:54+00:00 Remove -Werror - - - - - 299d6deb by David Waern at 2008-12-07T14:25:18+00:00 Remove -Wall, we'll focus on warnings after 6.10.2 is out - - - - - 5f4216b6 by David Waern at 2008-12-07T20:58:05+00:00 Resolve conflict properly - - - - - 67d774e7 by Neil Mitchell at 2008-12-15T11:44:26+00:00 Make forall's in constructors explicit, i.e. data Foo = Foo {foo :: Eq a => a} - - - - - 61851792 by Neil Mitchell at 2008-12-18T15:39:39+00:00 Try and find a better package name than "main" for Hoogle, goes wrong when working on an executable rather than a library - - - - - 2fab8554 by David Waern at 2008-12-08T23:19:48+00:00 Make visible names from ExportItems Instead of a complicated calculation of visible names out of GHC's export items, we can get them straight out of the already calculated ExportItems. The ExportItems should represent exactly those items that are visible in an interface. If store all the exported sub-names in ExportDecl instead of only those with documentation, the calculation becomes very simple. So we do this change as well (should perhaps have been a separate patch). This should fix the problem with names from ghc-prim not appearing in the link environment. - - - - - 7caadd8c by Ian Lynagh at 2008-12-11T17:01:04+00:00 Wrap the GHC usage with defaultCleanupHandler This fixes a bug where haddock leaves /tmp/ghc* directories uncleaned. - - - - - 7c9fc9a5 by David Waern at 2009-01-02T21:38:27+00:00 Show re-exported names from external packages again This fixes GHC ticket 2746. In order to also link to the exported subordinate names of a declaration, we need to re-introduce the sub map in the .haddock files. - - - - - 119e4e05 by David Waern at 2009-01-06T23:34:17+00:00 Do not process boot modules We should of course not try to produce documentation for boot modules! The reason this has worked in the past is that the output of "real" modules overwrites the output of boot modules later in the process. However, this causes a subtle link environment problem. So let's get rid of this stupid behaviour. We avoid processing boot modules, but we continue to typecheck them. - - - - - c285b9d2 by David Waern at 2009-01-08T18:03:36+00:00 Export modules also when coming from external packages This seems to have regressed since a refactoring that was part of the 2.3.0 release. - - - - - 24031c17 by David Waern at 2009-01-10T15:26:26+00:00 Change version to 2.4.2 - no need to go to 2.5.0 - - - - - 864d1c3f by David Waern at 2009-01-10T15:35:20+00:00 Update tests to account for version number change - - - - - 524ba886 by David Waern at 2009-01-10T18:29:17+00:00 Add test for Template Haskell splicing - - - - - 05e6e003 by David Waern at 2009-01-10T19:35:42+00:00 Fix Trac haskell/haddock#68: Turn on compilation via C for Template Haskell packages We can't use HscNothing if we need to run code coming from modules inside the processed package during typechecking, which is the case for some packages using Template Haskell. This could be improved, to e.g. use HscInterpreted and HscNothing where possible, instead of using HscC for all modules in the package. - - - - - 2b2bafa1 by David Waern at 2009-01-10T20:22:25+00:00 Only use needsTemplateHaskell when compiling with GHC 6.10.2 or above - - - - - bedc3a93 by Ian Lynagh at 2009-01-11T14:58:41+00:00 Fix the location of INPLACE_PKG_CONF; fixes the build Spotted by Conal Elliott - - - - - 943107c8 by David Waern at 2009-01-20T19:27:39+00:00 Document H.I.Create.collectDocs better - - - - - c6252e37 by David Waern at 2009-01-20T19:29:51+00:00 Fix Trac haskell/haddock#59: TH-generated declarations disappearing This patch was contributed by Joachim Breitner (nomeata). - - - - - 3568a6af by David Waern at 2009-01-21T21:41:48+00:00 Do not indicate that a constructor argument is unboxed We only show the strictness annotation for an unboxed constructor argument. The fact that it is unboxed is an implementation detail and should not be part of the module interface. - - - - - 562a4523 by David Waern at 2009-01-22T18:53:49+00:00 Fix Trac haskell/haddock#50: do not attach docs to pragmas or other kinds of non-declarations We now filter out everything that is not a proper Haskell declaration before collecting the docs and attaching them to declarations. - - - - - 6fdf21c2 by David Waern at 2009-01-22T19:48:09+00:00 Add test for quasi quotation. No reference output yet. - - - - - dc4100fd by David Waern at 2009-01-22T19:57:47+00:00 Improve quasi-quotation test and add reference output - - - - - 908b74bb by David Waern at 2009-01-23T23:22:03+00:00 Filter out separately exported associated types in a smarter way - - - - - f6b42ecb by David Waern at 2009-01-24T16:54:39+00:00 Correct spelling mistake in error message - - - - - 24e4245d by David Waern at 2009-01-24T17:48:03+00:00 Correct comment - - - - - b5e8462f by David Waern at 2009-02-07T13:22:29+00:00 Do not show a subordinate at the top level if its parent is also exported See note in the source code for more info. - - - - - 4b09de57 by David Waern at 2009-02-07T13:53:53+00:00 Update test following change to top level subordinates - - - - - 76379896 by David Waern at 2009-02-07T13:58:04+00:00 Remove html files in the tests/output/ directory which have been accidentally added - - - - - 1a6d8b10 by Joachim Breitner at 2009-02-20T10:29:43+00:00 Typo in comment - - - - - fec367d0 by David Waern at 2009-02-24T20:21:17+00:00 Fix small bug The rule is to prefer type constructors to other things when an identifier in a doc string can refer to multiple things. This stopped working with newer GHC versions (due to a tiny change in the GHC renamer). We implement this rule in the HTML backend for now, instead of fixing it in GHC, since we will move renaming of doc strings to Haddock in the future anyway. - - - - - 9b4172eb by David Waern at 2009-02-25T20:04:38+00:00 Fix bad error handling with newer GHCs When support for GHC 6.10 was added, an error handler was installed only around the typechecking phase. This had the effect that errors thrown during dependency chasing were caught in the top-level exception handler and not printed with enough detail. With this patch we wrap the error handler around all our usage of the Ghc monad. - - - - - de2df363 by Simon Peyton Jones at 2009-02-02T16:47:42+00:00 Hide funTyConName, now exported by TypeRep - - - - - 4d40a29f by Ian Lynagh at 2009-02-12T18:57:49+00:00 Don't build the library when building in the GHC tree - - - - - 1cd0abe4 by Ian Lynagh at 2009-02-13T13:58:53+00:00 Add a ghc.mk - - - - - 3d814eeb by Ian Lynagh at 2009-02-13T18:50:28+00:00 do .depend generation for haddock with the stage1 compiler This is a bit of a hack. We mkdepend with stage1 as if .depend depends on the stage2 compiler then make goes wrong: haddock's .depend gets included, which means that make won't reload until it's built, but we can't build it without the stage2 compiler. We therefore build the stage2 compiler before its .depend file is available, and so compilation fails. - - - - - b55036a4 by Ian Lynagh at 2009-02-25T01:38:13+00:00 Give haddock a wrapper on unix in the new GHC build system - - - - - 9eabfe68 by Ian Lynagh at 2009-02-25T19:21:32+00:00 Create inplace/lib/html in the new GHC build system - - - - - 93af30c7 by Ian Lynagh at 2008-11-07T19:18:23+00:00 TAG GHC 6.10.1 release - - - - - 06e6e34a by Thomas Schilling at 2009-02-24T18:11:00+00:00 Define __GHC_PATCHLEVEL__ for recent version of GHC (stable). - - - - - 680e6ed8 by Thomas Schilling at 2009-02-24T18:12:26+00:00 'needsTemplateHaskell' is not defined in current stable GHC. - - - - - 6c5619df by David Waern at 2009-02-25T22:15:23+00:00 Hide fynTyConName only for recent GHC versions - - - - - 6b2344f1 by Ian Lynagh at 2009-02-26T00:49:56+00:00 Add the module to one of haddocks warnings - - - - - e5d11c70 by David Waern at 2009-02-27T21:37:20+00:00 Bug fix We tried to filter out subordinates that were already exported through their parent. This didn't work properly since we were in some cases looking at the grand-parent and not the parent. We now properly compute all the parent-child relations of a declaration, and use this information to get the parent of a subordinate. We also didn't consider record fields with multiple parents. This is now handled correctly. We don't currently support separately exported associated types. But when we do, they should be handled correctly by this process too. Also slightly improved the warning message that we give when filtering out subordinates. - - - - - 10a79a60 by David Waern at 2009-02-27T22:08:08+00:00 Fix error message conflict The module name is already written in the beginning of the message, as seems to be the convention in Haddock. Perhaps not so clear, but we should change it everywhere in that case. Leaving it as it is for now. - - - - - c5055c7f by David Waern at 2009-02-27T22:15:17+00:00 Shorten warning message - - - - - a72fed3a by David Waern at 2009-02-28T00:53:55+00:00 Do not show package name in warning message - - - - - a5daccb2 by Ian Lynagh at 2009-03-01T14:59:35+00:00 Install haddock in the new GHC build system - - - - - dfdb025c by Ian Lynagh at 2009-03-07T23:56:29+00:00 Relax base dependency to < 4.2, not < 4.1 - - - - - 5769c8b4 by David Waern at 2009-03-21T14:58:52+00:00 Bump .haddock file version number (due to change of format) - - - - - f1b8f67b by David Waern at 2009-03-21T14:59:26+00:00 Define __GHC_PATCHLEVEL__=1 when using ghc-6.10.1 - - - - - 23f78831 by David Waern at 2009-03-21T16:40:52+00:00 Update CHANGES - - - - - 7d2735e9 by David Waern at 2009-03-21T16:50:33+00:00 Update ANNOUNCE - - - - - 0771e00a by David Waern at 2009-03-21T16:54:40+00:00 Update ANNOUNCE, again - - - - - 81a6942a by David Waern at 2009-03-21T17:50:06+00:00 Don't be too verbose in CHANGES - - - - - 29861dcf by David Waern at 2009-03-21T18:03:31+00:00 TAG 2.4.2 - - - - - a585f285 by David Waern at 2009-03-21T19:20:29+00:00 Require Cabal >= 1.2.3 - - - - - 7c611662 by David Waern at 2009-03-21T19:21:48+00:00 TAG 2.4.2 with cabal-version >= 1.2.3 - - - - - 23b7deff by Simon Marlow at 2009-03-20T15:43:42+00:00 new GHC build system: use shell-wrappers macro - - - - - 25f8afe7 by Ian Lynagh at 2009-03-21T19:13:53+00:00 Fix (with a hack?) haddock in teh new build system - - - - - 6a29a37e by David Waern at 2009-03-24T22:10:15+00:00 Remove unnecessary LANGUAGE pragma - - - - - 954da57d by David Waern at 2009-03-24T22:21:23+00:00 Fix warnings in H.B.DevHelp - - - - - 1619f1df by David Waern at 2009-03-26T23:20:44+00:00 -Wall police in H.B.Html - - - - - b211e13b by Simon Marlow at 2009-03-24T13:00:56+00:00 install Haddock's html stuff - - - - - 78e0b107 by David Waern at 2008-12-07T19:58:53+00:00 Add verbosity flag and utils, remove "verbose" flag - - - - - 913dae06 by David Waern at 2008-12-07T20:01:05+00:00 Add some basic "verbose" mode logging in H.Interface - - - - - 1cbff3bf by David Waern at 2009-03-27T00:07:26+00:00 Fix conflicts - - - - - 22f82032 by David Waern at 2009-03-27T21:15:11+00:00 Remove H.GHC.Typecheck - - - - - 81557804 by David Waern at 2009-03-27T21:19:22+00:00 Remove docNameOrig and use getName everywhere instead - - - - - d8267213 by David Waern at 2009-03-27T21:21:46+00:00 Use docNameOcc instead of nameOccName . getName - - - - - 5d55deab by David Waern at 2009-03-27T21:33:04+00:00 Remove H.DocName and put DocName in H.Types - - - - - 8ba72611 by David Waern at 2009-03-27T22:06:26+00:00 Document DocName - - - - - 605f8ca5 by David Waern at 2009-03-27T22:45:21+00:00 -Wall police - - - - - e4da93ae by David Waern at 2009-03-27T23:12:53+00:00 -Wall police in H.B.Hoogle - - - - - bb255519 by David Waern at 2009-03-27T23:41:28+00:00 Define Foldable and Traversable instances for Located - - - - - f1195cfe by David Waern at 2009-03-27T23:51:34+00:00 Wibble - - - - - 23818d7c by David Waern at 2009-03-28T00:03:55+00:00 -Wall police in H.I.Rename - - - - - 0f050d67 by David Waern at 2009-03-28T00:15:15+00:00 -Wall police in H.I.AttachInstances - - - - - 0f3fe038 by David Waern at 2009-03-28T21:09:41+00:00 Wibble - - - - - 275d4865 by David Waern at 2009-03-28T21:27:06+00:00 Layout fix - - - - - 54ff0ef8 by David Waern at 2009-03-28T21:59:07+00:00 -Wall police in H.I.Create - - - - - 7f58b117 by David Waern at 2009-03-28T22:10:19+00:00 -Wall police in H.Interface - - - - - f0c03b44 by David Waern at 2009-03-28T22:22:59+00:00 -Wall police in Main - - - - - 29da355c by David Waern at 2009-03-28T22:23:39+00:00 Turn on -Wall -Werror - - - - - 446d3060 by David Waern at 2009-04-01T20:40:30+00:00 hlint police - - - - - 3867c9fc by David Waern at 2009-04-01T20:48:42+00:00 hlint police - - - - - bd1f1600 by David Waern at 2009-04-01T20:58:02+00:00 hlint police - - - - - e0e90866 by David Waern at 2009-04-05T12:42:53+00:00 Move H.GHC.Utils to H.GhcUtils - - - - - 9cbd426b by David Waern at 2009-04-05T12:57:21+00:00 Remove Haddock.GHC and move its (small) contents to Main - - - - - b5c2cbfd by David Waern at 2009-04-05T13:07:04+00:00 Fix whitespace and stylistic issues in Main - - - - - 3c04aa56 by porges at 2008-12-07T08:22:19+00:00 add unicode output - - - - - 607918da by David Waern at 2009-04-26T15:09:43+00:00 Resolve conflict - - - - - 4bec6b6b by Simon Marlow at 2009-05-13T10:00:31+00:00 fix markup - - - - - 436ad6f4 by Simon Marlow at 2009-03-23T11:54:45+00:00 clean up - - - - - bdcd1398 by Simon Marlow at 2009-03-24T10:36:45+00:00 new GHC build system: add $(exeext) - - - - - 9c0972f3 by Simon Marlow at 2009-03-24T11:04:31+00:00 update for new GHC build system layout - - - - - d0f3f83a by Ian Lynagh at 2009-03-29T15:31:43+00:00 GHC new build system fixes - - - - - 5a8245c2 by Ian Lynagh at 2009-04-04T20:44:23+00:00 Tweak new build system - - - - - 9c6f2d7b by Simon Marlow at 2009-05-13T10:01:27+00:00 add build instructions for GHC - - - - - 66d07c76 by Ian Lynagh at 2009-05-31T00:37:53+00:00 Quote program paths in ghc.mk - - - - - bb7de2cd by Ian Lynagh at 2009-06-03T22:57:55+00:00 Use a bang pattern on an unlifted binding - - - - - 3ad283fc by Ian Lynagh at 2009-06-13T16:17:50+00:00 Include haddock in GHC bindists - - - - - ac447ff4 by David Waern at 2009-06-24T21:07:50+00:00 Delete Haddock.Exception and move contents to Haddock.Types Only a few lines of code that mainly declares a type - why not just put it in Haddock.Types. - - - - - 4464fb9b by David Waern at 2009-06-24T22:23:23+00:00 Add Haddock module headers Add a proper Haddock module header to each module, with a more finegrained copyright. If you feel mis-accreditted, please correct any copyright notice! The maintainer field is set to haddock at projects.haskell.org. Next step is to add a brief description to each module. - - - - - 5f4c95dd by David Waern at 2009-06-24T22:39:44+00:00 Fix spelling error - - - - - 6d074cdb by David Waern at 2009-06-25T21:53:56+00:00 Document Interface and InstalledInterface better - - - - - d0cbd183 by David Waern at 2009-06-27T12:46:46+00:00 Remove misplaced whitespace in H.I.Rename - - - - - fa381c49 by David Waern at 2009-06-27T13:26:03+00:00 Fix haskell/haddock#104 - create output directory if missing - - - - - 91fb77ae by Ian Lynagh at 2009-06-25T15:59:50+00:00 TAG 2009-06-25 - - - - - 0d853f40 by Simon Peyton Jones at 2009-07-02T15:35:22+00:00 Follow extra field in ConDecl - - - - - b201735d by Ian Lynagh at 2009-07-05T16:50:35+00:00 Update Makefile for the new GHC build system - - - - - df6c0092 by Ian Lynagh at 2009-07-05T17:01:13+00:00 Resolve conflicts - - - - - 1066870a by Ian Lynagh at 2009-07-05T17:01:48+00:00 Remove the -Wwarn hack in the GHC build system - - - - - 7e856076 by Ian Lynagh at 2009-07-05T17:17:59+00:00 Fix warnings - - - - - 5d4cd958 by Ian Lynagh at 2009-07-05T19:35:40+00:00 Bump version number Cabal needs to distinguish between haddocks having a --verbose and --verbosity flag - - - - - 6ee07c99 by David Waern at 2009-07-06T20:14:57+00:00 Wibble - - - - - 2308b66f by David Waern at 2009-07-06T20:24:20+00:00 Clearer printing of versions by runtests.hs - - - - - d4b5d9ab by David Waern at 2009-07-06T21:22:42+00:00 Fix (invisible) bug introduced by unicode patch - - - - - 2caca8d8 by David Waern at 2009-07-06T21:44:10+00:00 Use HscAsm instead of HscC when using TH - - - - - 18f3b755 by David Waern at 2009-07-06T22:10:22+00:00 Update HCAR entry (by Janis) - - - - - a72ac9db by David Waern at 2009-07-06T23:01:35+00:00 Follow HsRecTy change with an #if __GLASGOW_HASKEL__ >= 611 - - - - - 549135d2 by David Waern at 2009-07-06T23:11:41+00:00 Remove unused functions from Haddock.Utils - - - - - b450134a by Isaac Dupree at 2009-07-11T14:59:00+00:00 revert to split-index for large indices - remove the search-box, because browsers have search-for-text abilities anyway. - pick 150 items in index as the arbitrary time at which to split it - notice the bug that identifiers starting with non-ASCII characters won't be listed in split-index, but don't bother to fix it yet (see ticket haskell/haddock#116, http://trac.haskell.org/haddock/ticket/116 ) - - - - - 78a5661e by Isaac Dupree at 2009-07-20T15:37:18+00:00 Implement GADT records in HTML backend - - - - - 4e163555 by Isaac Dupree at 2009-07-21T22:03:25+00:00 add test for GADT records - - - - - 79aa4d6e by David Waern at 2009-07-23T20:40:37+00:00 Update test suite following version bump - - - - - 5932c011 by David Waern at 2009-08-02T10:25:39+00:00 Fix documentation bug - - - - - a6970fca by David Waern at 2009-08-12T23:08:53+00:00 Remove support for ghc 6.8.* from .cabal file - - - - - c1695902 by Ian Lynagh at 2009-07-07T13:35:45+00:00 Fix unused import warnings - - - - - fb6df7f9 by Ian Lynagh at 2009-07-16T00:20:31+00:00 Use cProjectVersion directly rather than going through compilerInfo Fixes the build after changes in GHC - - - - - 548cdd66 by Simon Marlow at 2009-07-28T14:27:04+00:00 follow changes in GHC's ForeignType - - - - - 9395aaa0 by David Waern at 2009-08-13T22:17:33+00:00 Switch from PatternSignatures to ScopedTypeVariables in Main - - - - - eebf39bd by David Waern at 2009-08-14T17:14:28+00:00 Version .haddock files made with GHC 6.10.3/4 correclty - - - - - 58f3e735 by David Waern at 2009-08-14T17:19:37+00:00 Support GHC 6.10.* and 6.11.* only - - - - - 5f63cecc by David Waern at 2009-08-14T22:03:20+00:00 Do not version .haddock file based on GHC patchlevel version We require that the instances of Binary that we use from GHC will not change between patchlevel versions. - - - - - d519de9f by David Waern at 2009-08-14T23:50:00+00:00 Update CHANGES - - - - - 35dccf5c by David Waern at 2009-08-14T23:51:38+00:00 Update version number everywhere - - - - - 6d363fea by David Waern at 2009-08-15T09:46:49+00:00 Update ANNOUNCE - - - - - c7ee6bc2 by David Waern at 2009-08-15T09:47:13+00:00 Remove -Werror Forgot that Hackage doesn't like it. - - - - - a125c12b by David Waern at 2009-08-15T09:49:50+00:00 Require Cabal >= 1.6 - - - - - adb2f560 by Isaac Dupree at 2009-08-12T03:47:14+00:00 Cross-Package Documentation version 4 - - - - - 3d6dc04d by David Waern at 2009-08-15T23:42:57+00:00 Put all the IN_GHC_TREE stuff inside getGhcLibDir - - - - - 56624097 by David Waern at 2009-08-15T23:52:03+00:00 Add --print-ghc-libdir - - - - - f15d3ccb by David Waern at 2009-08-16T00:37:52+00:00 Read base.haddock when running tests We can now test cross-package docs. - - - - - 283f0fb9 by David Waern at 2009-08-16T00:50:59+00:00 Update test output - we now have more links - - - - - 673d1004 by David Waern at 2009-08-16T01:26:08+00:00 Read process.haddock when running tests - - - - - 0d127f82 by David Waern at 2009-08-16T01:43:04+00:00 Add a test for cross-package documentation - - - - - f94db967 by Ian Lynagh at 2009-08-16T18:42:44+00:00 Follow GHC build system changes - - - - - 5151278a by Isaac Dupree at 2009-08-16T19:58:05+00:00 make cross-package list types look nicer - - - - - c41e8228 by Isaac Dupree at 2009-08-18T01:47:47+00:00 Haddock.Convert: export more functions This lets us remove some code in Haddock.Interface.AttachInstances - - - - - 2e5fa398 by Isaac Dupree at 2009-08-18T02:11:05+00:00 switch AttachInstances to use synify code It changed an instance from showing ((,) a b) to (a, b) because my synify code is more sophisticated; I hope the latter is a good thing rather than a bad thing aesthetically, here. But this definitely reduces code duplication! - - - - - b8b07123 by Isaac Dupree at 2009-08-18T02:23:31+00:00 Find instances using GHC, which is more complete. In particular, it works cross-package. An intermediate patch also moved the instance-finding into createInterface, but that move turned out not to be necessary, so if we want to do that, it'd go in a separate patch. (Is that possible? Or will we need GHC to have loaded all the modules first, before we can go searching for the instances (e.g. if the modules are recursive or something)?) - - - - - 6959b451 by Isaac Dupree at 2009-08-17T00:37:18+00:00 fix preprocessor conditional sense - - - - - 942823af by Isaac Dupree at 2009-08-16T22:46:48+00:00 remove ghc 6.8 conditionals from Haddock.Interface - - - - - 4b3ad888 by Isaac Dupree at 2009-08-18T20:24:38+00:00 Fix GHC 6.11 build in Haddock.Convert - - - - - 0a89c5ab by Isaac Dupree at 2009-08-23T00:08:58+00:00 hacks to make it compile without fnArgDocsn - - - - - 7b3bed43 by Isaac Dupree at 2009-08-23T03:01:28+00:00 less big-Map-based proper extraction of constructor subdocs - - - - - b21c279a by Isaac Dupree at 2009-08-23T03:02:06+00:00 Html: remove unnecessary+troublesome GHC. qualifications - - - - - 96c97115 by Isaac Dupree at 2009-08-23T03:08:03+00:00 Move doc parsing/lexing into Haddock for ghc>=6.11 - - - - - e1cec02d by Isaac Dupree at 2009-08-23T05:08:14+00:00 get rid of unused DocMap parameter in Html - - - - - 66960c59 by Isaac Dupree at 2009-08-23T05:54:20+00:00 fix horrible named-docs-disappearing bug :-) - - - - - a9d7eff3 by Isaac Dupree at 2009-08-23T06:26:36+00:00 re-implement function-argument docs ..on top of the lexParseRn work. This patch doesn't change the InstalledInterface format, and thus, it does not work cross-package, but that will be easy to add subsequently. - - - - - 8bf6852c by Isaac Dupree at 2009-08-23T07:26:05+00:00 cross-package fnArgDocs. WARNING: changes .haddock binary format While breaking the format, I took the opportunity to unrename the DocMap that's saved to disk, because there's really no reason that we want to know what *another* package's favorite place to link a Name to was. (Is that true? Or might we want to know, someday?) Also, I added instance Binary Map in InterfaceFile. It makes the code a little simpler without changing anything of substance. Also it lets us add another Map hidden inside another Map (fnArgsDocs in instDocMap) without having really-convoluted serialization code. Instances are neat! I don't understand why this change to InterfaceFile seemed to subtly break binary compatibility all by itself, but no matter, I'll just roll it into the greater format-changing patch. Done! - - - - - 30115a64 by Isaac Dupree at 2009-08-23T18:22:47+00:00 Improve behavior for unfindable .haddock - - - - - aa364bda by Isaac Dupree at 2009-08-23T18:28:16+00:00 add comment for FnArgsDoc type - - - - - 49b23a99 by Isaac Dupree at 2009-08-23T21:52:48+00:00 bugfix: restore fnArgDocs for type-synonyms - - - - - f65f9467 by Isaac Dupree at 2009-08-23T22:06:55+00:00 Backends.Hoogle: eliminate warnings - - - - - a292d216 by Isaac Dupree at 2009-08-23T22:10:24+00:00 Haddock.Convert: eliminate warnings - - - - - 5546cd20 by Isaac Dupree at 2009-08-23T22:12:31+00:00 Haddock.Interface.Rename: eliminate warnings - - - - - 0a9798b6 by Isaac Dupree at 2009-08-23T22:18:47+00:00 Main.hs: remove ghc<6.9 conditionals - - - - - e8f9867f by Isaac Dupree at 2009-08-23T22:27:46+00:00 Main.hs: eliminate warnings (except for OldException) - - - - - 61c64247 by Isaac Dupree at 2009-08-23T22:41:01+00:00 move get*LibDir code in Main.hs, to +consistent code, -duplication - - - - - 948f1e69 by Isaac Dupree at 2009-08-23T23:14:26+00:00 Main.hs: OldException->Exception: which eliminates warnings - - - - - 3d5d5e03 by Isaac Dupree at 2009-08-23T23:20:11+00:00 GhcUtils: ghc >= 6.10 - - - - - 2771d657 by Isaac Dupree at 2009-08-23T23:21:55+00:00 InterfaceFile: ghc >= 6.10 - - - - - d9f2b9d1 by Isaac Dupree at 2009-08-23T23:22:58+00:00 Types: ghc >= 6.10 - - - - - ca39210e by Isaac Dupree at 2009-08-23T23:23:26+00:00 ModuleTree: ghc >= 6.10 - - - - - 883c4e59 by Isaac Dupree at 2009-08-23T23:24:04+00:00 Backends.DevHelp: ghc >= 6.10 - - - - - 04667df5 by Isaac Dupree at 2009-08-23T23:24:37+00:00 Backends.Html: ghc >= 6.10 - - - - - a9f7f25f by Isaac Dupree at 2009-08-23T23:25:24+00:00 Utils: ghc >= 6.10 - - - - - b7105022 by Isaac Dupree at 2009-08-23T23:37:47+00:00 eliminate haskell98 dependency, following GHC's example It turns out I/we already had, and it was only a matter of deleting it from the cabal file. - - - - - 292e0911 by Isaac Dupree at 2009-08-24T01:22:44+00:00 refactor out subordinatesWithNoDocs dep of inferenced-decls fix - - - - - c2ed46a2 by Isaac Dupree at 2009-08-24T01:24:03+00:00 Eradicate wrong runtime warning for type-inferenced exported-functions see the long comment in the patch for why I did it this way :-) - - - - - 4ac0b57c by David Waern at 2009-09-04T22:56:20+00:00 Clean up tyThingToHsSynSig a little Factor out noLoc and use the case construct. Also rename the function to tyThingToLHsDecl, since it doesn't just create type signatures. - - - - - 28ab9201 by David Waern at 2009-09-04T22:58:50+00:00 Wibble - - - - - 0d9fe6d0 by David Waern at 2009-09-06T18:39:30+00:00 Add more copyright owners to H.I.AttachInstances - - - - - 122441b1 by David Waern at 2009-09-06T18:44:12+00:00 Style police - - - - - 1fa79463 by David Waern at 2009-09-06T18:57:45+00:00 Move toHsInstHead to Haddock.Convert and call it synifyInstHead - - - - - 0d42a8aa by David Waern at 2009-09-06T21:11:38+00:00 Use colordiff to display test results if available - - - - - ea9d8e03 by Simon Marlow at 2009-08-24T08:46:14+00:00 Follow changes in GHC's interface file format Word32 instead of Int for FastString and Name offsets - - - - - 537e051e by Simon Marlow at 2009-07-29T14:16:53+00:00 define unpackPackageId (it was removed from GHC) - - - - - 50c63aa7 by David Waern at 2009-09-09T23:18:03+00:00 Remove commented-out code - - - - - 511631fe by David Waern at 2009-09-09T23:19:05+00:00 Correct copyright in H.I.ParseModuleHeader - - - - - 898ec768 by David Waern at 2009-09-11T11:22:29+00:00 Use Map.fromList/toList intead of fromAscList/toAscList when serializing Maps This fixes the missing docs problem. The Eq and Ord instances for Name uses the unique number in Name. This number is created at deserialization time by GHC's magic Binary instance for Name, and it is random. Thus, fromAscList can't be used at deserialization time, even though toAscList was used at serialization time. - - - - - 37bec0d5 by Simon Peyton Jones at 2009-09-11T08:28:04+00:00 Track change in HsType - - - - - eb3a97c3 by Ian Lynagh at 2009-09-11T16:07:09+00:00 Allow building with base 4.2 - - - - - bb4205ed by Ian Lynagh at 2009-09-22T13:50:02+00:00 Loosen the GHC dependency - - - - - 5c75deb2 by Ian Lynagh at 2009-09-22T14:08:39+00:00 Fix building with GHC >= 6.12 - - - - - fb131481 by David Waern at 2009-09-11T11:24:48+00:00 Update runtests.hs to work with GHC 6.11 - - - - - ac3a419d by David Waern at 2009-09-11T11:25:14+00:00 Update CrossPackageDocs test - - - - - ec65c3c6 by David Waern at 2009-09-11T11:25:40+00:00 Add reference output for CrossPackageDocs - - - - - 520c2758 by Ian Lynagh at 2009-10-25T17:26:40+00:00 Fix installation in the GHC build system - - - - - 28b3d7df by Ian Lynagh at 2009-11-05T15:57:27+00:00 GHC build system: Make *nix installation work in paths containing spaces - - - - - 5c9bb541 by David Waern at 2009-11-14T11:56:39+00:00 Track change in HsType for the right compiler version - - - - - 905097ce by David Waern at 2009-11-14T12:10:47+00:00 hlint police - - - - - 04920630 by Ian Lynagh at 2009-11-20T13:46:30+00:00 Use defaultObjectTarget rather than HscAsm This fixes haddock when we don't have a native code generator - - - - - 966eb079 by David Waern at 2009-11-15T12:32:21+00:00 Remove commented-out code - - - - - 37f00fc4 by David Waern at 2009-11-22T13:58:48+00:00 Make runtests.hs strip links before diffing Generates easier to read diffs when tests fail. The content of the links is not important anyway since it is not taken into account by the tests. - - - - - 3a9bb8ef by David Waern at 2009-11-22T14:05:06+00:00 Follow findProgramOnPath signature change in runtests.hs - - - - - b26b9e5a by David Waern at 2009-11-22T14:08:40+00:00 Follow removal of GHC.MVar from base in CrossPackageDocs - - - - - f4d90ae4 by David Waern at 2009-11-22T14:48:47+00:00 Make copy.hs strip link contents before copying No more updating of reference files when URLs in links changes. - - - - - 4c9c420d by David Waern at 2009-11-22T15:26:41+00:00 Update test reference output * More links (Int, Float etc) * Stripped link contents - - - - - a62b80e3 by David Waern at 2009-11-23T23:19:39+00:00 Update CrossPackageDocs reference output - Remove GHC.MVar import (removed from base) - Strip link contents - - - - - 43491394 by David Waern at 2009-11-23T23:20:00+00:00 Update test reference files with comments on instances - - - - - 0d370a0b by David Waern at 2009-11-23T23:25:16+00:00 Bump version number - - - - - 2293113e by David Waern at 2009-11-24T20:55:49+00:00 Comments on instances Implementing this was a little trickier than I thought, since we need to match up instances from the renamed syntax with instances represented by InstEnv.Instance. This is due to the current design of Haddock, which matches comments with declarations from the renamed syntax, while getting the list of instances of a class/family directly using the GHC API. - Works for class instances only (Haddock has no support for type family instances yet) - The comments are rendered to the right of the instance head in the HTML output - No change to the .haddock file format - Works for normal user-written instances only. No comments are added on derived or TH-generated instances - - - - - bf586f29 by David Waern at 2009-11-27T22:05:15+00:00 Whitespace police - - - - - b8f03afa by David Waern at 2009-11-27T22:11:46+00:00 Remove bad whitespace and commented-out pieces - - - - - 90b8ee90 by David Waern at 2009-11-27T22:15:04+00:00 Whitespace police - - - - - b5ede900 by David Waern at 2009-11-27T22:15:50+00:00 Whitespace police - - - - - e3fddbfe by David Waern at 2009-11-28T13:37:59+00:00 Remove Name from DocInstance It's not used. - - - - - 9502786c by David Waern at 2009-11-28T13:56:54+00:00 Require at least GHC 6.12 While regression testing Haddock, I found a bug that happens with GHC 6.10.3, but not with GHC 6.12-rc2 (haven't tried 6.10.4). I don't have time to track it down. I think we should just always require the latest major GHC version. The time spent on making Haddock work with older versions is too high compared to the time spent on bugfixing, refactoring and features. - - - - - 8fa688d8 by David Waern at 2009-11-28T15:05:03+00:00 Remove cruft due to compatibility with older GHCs - - - - - 46fbbe9d by David Waern at 2009-11-28T15:07:50+00:00 Add a documentation header to Haddock.Convert - - - - - c3d2cc4a by David Waern at 2009-11-28T15:10:14+00:00 Remove unused H.Utils.FastMutInt2 - - - - - 490aba80 by David Waern at 2009-11-28T15:36:36+00:00 Rename Distribution.Haddock into Documentation.Haddock - - - - - 33ee2397 by David Waern at 2009-11-28T15:36:47+00:00 Fix error message - - - - - a5a3b950 by David Waern at 2009-11-28T16:58:39+00:00 Add a test flag that brings in QuickCheck - - - - - fa049e13 by David Waern at 2009-11-28T19:32:18+00:00 Say that we want quickcheck 2 - - - - - f32b0d9b by David Waern at 2009-11-28T19:32:40+00:00 Add an Arbitrary instance for HsDoc - - - - - da9a8bd7 by David Waern at 2009-11-28T20:15:30+00:00 Rename HsDoc back into Doc - - - - - edb60101 by David Waern at 2009-11-28T22:16:16+00:00 Move H.Interface.Parse/Lex to H.Parse/Lex These are not just used to build Interfaces. - - - - - 0656a9b8 by David Waern at 2009-11-28T23:12:14+00:00 Update version number in test suite - - - - - 5e8c6f4a by David Waern at 2009-12-21T14:12:41+00:00 Improve doc of DocName - - - - - 7868e551 by Ian Lynagh at 2009-09-22T10:43:03+00:00 TAG GHC 6.12-branch created - - - - - 0452a3ea by Ian Lynagh at 2009-12-15T12:46:07+00:00 TAG GHC 6.12.1 release - - - - - 65e9be62 by David Waern at 2009-12-21T16:58:58+00:00 Update CHANGES - - - - - 145cee32 by David Waern at 2009-12-21T16:59:09+00:00 TAG 2.6.0 - - - - - 3c552008 by David Waern at 2009-12-22T17:11:14+00:00 Update ANNOUNCE - - - - - 931f9db4 by David Waern at 2010-01-22T19:57:17+00:00 Convert haddock.vim to use unix newlines - - - - - 4e56588f by David Waern at 2010-01-22T22:11:17+00:00 Remove unnecessary (and inexplicable) uses of nub - - - - - 744bb4d1 by David Waern at 2010-01-22T22:12:14+00:00 Follow move of parser and lexer - - - - - e34bab14 by David Waern at 2010-01-22T22:49:13+00:00 Use findProgramLocation instead of findProgramOnPath in runtests.hs - - - - - 8d39891b by Isaac Dupree at 2010-01-14T18:53:18+00:00 fix html arg-doc off-by-one and silliness - - - - - 9401f2e9 by David Waern at 2010-01-22T22:57:03+00:00 Create a test for function argument docs - - - - - 507a82d7 by David Waern at 2010-01-22T23:24:47+00:00 Put parenthesis around type signature arguments of function type - - - - - 8a305c28 by David Waern at 2010-01-23T17:26:59+00:00 Add reference file for the FunArgs test - - - - - 1309d5e1 by David Waern at 2010-01-24T16:05:08+00:00 Improve FunArg test and update Test.html.ref - - - - - 2990f055 by Yitzchak Gale at 2010-02-14T16:03:46+00:00 Do not generate illegal character in HTML ID attribute. - - - - - c5bcab7a by David Waern at 2010-02-22T22:10:30+00:00 Fix Haddock markup error in comment - - - - - c6416a73 by David Waern at 2010-02-24T22:55:08+00:00 Large additions to the Haddock API Also improved and added more doc comments. - - - - - 57d289d7 by David Waern at 2010-02-24T22:58:02+00:00 Remove unused ifaceLocals - - - - - 80528d93 by David Waern at 2010-02-25T21:05:09+00:00 Add HaddockModInfo to the API - - - - - 82806848 by David Waern at 2010-02-25T21:05:27+00:00 Wibble - - - - - 744cad4c by David Waern at 2010-02-25T23:30:59+00:00 Make it possible to run a single test - - - - - 6a806e4c by David Waern at 2010-03-14T14:19:39+00:00 Bump version number - - - - - a5a8e4a7 by David Waern at 2010-03-14T14:36:35+00:00 Update ANNOUNCE - - - - - 6f05435e by Simon Hengel at 2010-03-15T20:52:42+00:00 Add missing dependencies for 'library' in haddock.cabal - - - - - faefe2bd by David Waern at 2010-03-15T22:29:37+00:00 Solve conflicts - - - - - 9808ad52 by David Waern at 2010-03-15T22:51:21+00:00 Bump version number - - - - - eb0bf60b by David Waern at 2010-03-15T22:52:32+00:00 Update CHANGES - - - - - f95cd891 by David Waern at 2010-03-15T23:01:06+00:00 Add Paths_haddock to other-modules of library - - - - - 65997b0a by David Waern at 2010-03-15T23:14:59+00:00 Update CHANGES - - - - - 7e251731 by David Waern at 2010-03-15T23:15:30+00:00 Bump version number - - - - - c9cd0ddc by David Waern at 2010-03-16T00:28:34+00:00 Fix warning - - - - - 1cac2d93 by Simon Peyton Jones at 2010-01-04T15:22:16+00:00 Fix imports for new location of splitKindFunTys - - - - - 474f26f6 by Simon Peyton Jones at 2010-02-10T14:36:06+00:00 Update Haddock for quasiquotes - - - - - 0dcc06c0 by Simon Peyton Jones at 2010-02-10T10:59:45+00:00 Track changes in HsTyVarBndr - - - - - 2d84733a by Simon Peyton Jones at 2010-02-10T14:52:44+00:00 Track HsSyn chnages - - - - - 9e3adb8b by Ian Lynagh at 2010-02-20T17:09:42+00:00 Resolve conflicts - - - - - a3e72ff8 by Simon Peyton Jones at 2010-03-04T13:05:16+00:00 Track change in HsUtils; and use a nicer function not an internal one - - - - - 27994854 by David Waern at 2010-03-18T22:22:27+00:00 Fix build with GHC 6.12.1 - - - - - 11f6e488 by David Waern at 2010-03-18T22:24:09+00:00 Bump version in test reference files - - - - - 0ef2f11b by David Waern at 2010-03-20T00:56:30+00:00 Fix library part of cabal file when in ghc tree - - - - - 3f6146ff by Mark Lentczner at 2010-03-20T22:30:11+00:00 First, experimental XHTML rendering switch to using the xhtml package copied Html.hs to Xhtml.hs and split into sub-modules under Haddock/Backends/Xhtml and detabify moved footer into div, got ready for iface change headers converted to semantic markup contents in semantic markup summary as semantic markup description in semantic markup, info block in header fixed factored out rendering so during debug it can be readable (see renderToString) - - - - - b8ab329b by Mark Lentczner at 2010-03-20T22:54:01+00:00 apply changes to Html.hs to Xhtml/*.hs incorporate changes that were made between the time Html.hs was copied and split into Xhtml.hs and Xhtml/*.hs includes patchs after "Wibble" (!) through "Fix build with GHC 6.12.1" - - - - - 73df2433 by Ian Lynagh at 2010-03-20T21:56:37+00:00 Follow LazyUniqFM->UniqFM in GHC - - - - - db4f602b by David Waern at 2010-03-29T22:00:01+00:00 Fix build with GHC 6.12 - - - - - d8dca088 by Simon Hengel at 2010-04-02T16:39:55+00:00 Add missing dependencies to cabal file - - - - - e2adc437 by Simon Hengel at 2010-04-02T14:08:40+00:00 Add markup support for interactive examples - - - - - e882ac05 by Simon Hengel at 2010-04-02T14:11:53+00:00 Add tests for interactive examples - - - - - 5a07a6d3 by David Waern at 2010-04-07T17:05:20+00:00 Propagate source positions from Lex.x to Parse.y - - - - - 6493b46f by David Waern at 2010-04-07T21:48:57+00:00 Let runtests.hs die when haddock has not been built - - - - - 5e34423e by David Waern at 2010-04-07T22:01:13+00:00 Make runtests.hs slightly more readable - - - - - 321d59b3 by David Waern at 2010-04-07T22:13:27+00:00 Fix haskell/haddock#75 Add colons to the $ident character set. - - - - - 37b08b8d by David Waern at 2010-04-08T00:32:52+00:00 Fix haskell/haddock#118 Avoid being too greedy when lexing URL markup (<..>), in order to allow multiple URLs on the same line. Do the same thing with <<..>> and #..#. - - - - - df8feac9 by David Waern at 2010-04-08T00:57:33+00:00 Make it easier to add new package deps to test suite This is a hack - we should use Cabal to get the package details instead. - - - - - 1ca6f84b by David Waern at 2010-04-08T01:03:06+00:00 Add ghc-prim to test suite deps - - - - - 27371e3a by Simon Hengel at 2010-04-08T19:26:34+00:00 Let parsing fails on paragraphs that are immediately followed by an example This is more consistent with the way we treat code blocks. - - - - - 83096e4a by David Waern at 2010-04-08T21:20:00+00:00 Improve function name - - - - - 439983ce by David Waern at 2010-04-10T10:46:14+00:00 Fix haskell/haddock#112 No link was generated for 'Addr#' in a doc comment. The reason was simply that the identifier didn't parse. We were using parseIdentifier from the GHC API, with a parser state built from 'defaultDynFlags'. If we pass the dynflags of the module instead, the right options are turned on on while parsing the identifer (in this case -XMagicHash), and the parse succeeds. - - - - - 5c0d35d7 by David Waern at 2010-04-10T10:54:06+00:00 Rename startGhc into withGhc - - - - - dca081fa by Simon Hengel at 2010-04-12T19:09:16+00:00 Add documentation for interactive examples - - - - - c7f26bfa by David Waern at 2010-04-13T00:51:51+00:00 Slight fix to the documentation of examples - - - - - 06eb7c4c by David Waern at 2010-04-13T00:57:05+00:00 Rename Interactive Examples into Examples (and simplify explanation) - - - - - 264830cb by David Waern at 2010-05-10T20:07:27+00:00 Update CHANGES with info about 2.6.1 - - - - - 8e5d4514 by Simon Hengel at 2010-04-18T18:16:54+00:00 Add unit tests for parser - - - - - 68297f40 by David Waern at 2010-05-10T21:53:37+00:00 Improve testsuite README - - - - - f04eb6e4 by David Waern at 2010-05-11T19:14:31+00:00 Re-organise the testsuite structure - - - - - a360f710 by David Waern at 2010-05-11T19:18:03+00:00 Shorten function name - - - - - 1d5dd359 by David Waern at 2010-05-11T21:40:02+00:00 Update runtests.hs following testsuite re-organisation - - - - - ffebe217 by David Waern at 2010-05-11T21:40:10+00:00 Update runtests.hs to use base-4.2.0.1 - - - - - 635de402 by David Waern at 2010-05-11T21:41:11+00:00 Update runparsetests.hs following testsuite reorganisation - - - - - 72137910 by Ian Lynagh at 2010-05-06T20:43:06+00:00 Fix build - - - - - 1a80b76e by Ian Lynagh at 2010-05-06T22:25:29+00:00 Remove redundant import - - - - - 1031a80c by Simon Peyton Jones at 2010-05-07T13:21:09+00:00 Minor wibbles to HsBang stuff - - - - - dd8e7fe5 by Ian Lynagh at 2010-05-08T15:22:00+00:00 GHC build system: Follow "rm" variable changes - - - - - 7f5e6748 by David Waern at 2010-05-13T11:53:02+00:00 Fix build with GHC 6.12.2 - - - - - 7953d4d8 by David Waern at 2010-05-13T18:45:01+00:00 Fixes to comments only - - - - - 8ae8eb64 by David Waern at 2010-05-13T18:57:26+00:00 ModuleMap -> IfaceMap - - - - - 1c3eadc6 by David Waern at 2010-05-13T19:03:13+00:00 Fix whitespace style issues - - - - - e96783c0 by David Waern at 2010-05-13T19:08:53+00:00 Fix comment - - - - - c998a78b by David Waern at 2010-05-13T19:39:00+00:00 Position the module header the same way everywhere Silly, but nice with some consistency :-) - - - - - b48a714e by David Waern at 2010-05-13T19:41:32+00:00 Position of module header, this time in the HTML backends - - - - - f9bfb12e by David Waern at 2010-05-13T19:43:05+00:00 Two newlines between declarations in Main - - - - - 071d44c7 by David Waern at 2010-05-13T19:44:21+00:00 Newlines in Convert - - - - - 036346db by David Waern at 2010-05-13T19:46:47+00:00 Fix a few stylistic issues in H.InterfaceFile - - - - - f0b8379e by David Waern at 2010-05-13T19:47:53+00:00 Add newlines to H.ModuleTree - - - - - 27409f8e by David Waern at 2010-05-13T19:51:10+00:00 Fix stylistic issues in H.Utils - - - - - 24774a11 by David Waern at 2010-05-13T20:00:43+00:00 Structure H.Types better - - - - - 7b6f5e40 by David Waern at 2010-05-13T20:01:04+00:00 Remove bad Arbitrary instance - - - - - fac9f1f6 by David Waern at 2010-05-13T20:05:50+00:00 Get rid of H.Utils.pathJoin and use System.FilePath.joinPath instead - - - - - fe6d00c4 by David Waern at 2010-05-13T20:51:55+00:00 Export a couple of more types from the API - - - - - b2e33a5f by David Waern at 2010-05-13T21:27:51+00:00 Improve doc comment for Interface - - - - - c585f2ce by David Waern at 2010-05-13T21:30:14+00:00 Improve documentation of Haddock.Interface - - - - - e6791db2 by David Waern at 2010-05-13T22:07:35+00:00 Remove meaningless comments - - - - - 7801b390 by David Waern at 2010-05-14T17:53:33+00:00 Remove unused modules - - - - - f813e937 by David Waern at 2010-05-14T17:55:17+00:00 Re-direct compilation output to a temporary directory Also add a flag --no-tmp-comp-dir that can be used to get the old behaviour of writing compilation files to GHC's output directory (default "."). - - - - - e56737ec by David Waern at 2010-05-14T18:06:11+00:00 Wibble - - - - - e40b0447 by David Waern at 2010-05-14T19:01:52+00:00 Move flag evaluation code from Main to Haddock.Options Determining the value of "singular" flags (by e.g. taking the last occurrence of the flag) and other flag evaluation should done in Haddock.Options which is the module that is supposed to define the command line interface. This makes Main a bit easier on the eyes as well. - - - - - 27091f57 by David Waern at 2010-05-14T19:05:10+00:00 Wibble - - - - - c658cf61 by David Waern at 2010-05-14T19:06:49+00:00 Re-order things in Haddock.Options a bit - - - - - 8cfdd342 by David Waern at 2010-05-14T19:20:29+00:00 De-tabify Haddock.Options and fix other whitespace issues - - - - - 0df16b62 by David Waern at 2010-05-14T19:25:07+00:00 Improve comments - - - - - 80b38e2b by David Waern at 2010-05-14T19:26:42+00:00 Whitespace police - - - - - fe580255 by David Waern at 2010-05-14T19:31:23+00:00 Wibbles to comments - - - - - a2b43fad by David Waern at 2010-05-14T20:24:32+00:00 Move some more flag functions to Haddock.Options - - - - - 3f895547 by David Waern at 2010-05-14T20:37:12+00:00 Make renderStep a top-level function in Main - - - - - 5cdca11d by David Waern at 2010-05-14T20:39:27+00:00 Spelling in comment - - - - - ad98d14c by David Waern at 2010-05-14T20:40:26+00:00 Comment fixes - - - - - 0bb9218f by David Waern at 2010-05-14T20:49:01+00:00 Whitespace police - - - - - 0f0a533f by David Waern at 2010-05-15T16:42:29+00:00 Improve description of --dump-interface - - - - - 5b2833ac by David Waern at 2010-05-15T17:16:53+00:00 Document --no-tmp-comp-dir - - - - - 8160b170 by David Waern at 2010-05-15T17:18:59+00:00 Wibble - - - - - 570dbe33 by David Waern at 2010-05-18T21:15:38+00:00 HLint police - - - - - 204e425f by David Waern at 2010-05-18T21:16:30+00:00 HLint police - - - - - 6db657ac by David Waern at 2010-05-18T21:16:37+00:00 Wibble - - - - - b942ccd7 by Simon Marlow at 2010-06-02T08:27:30+00:00 Interrupted disappeared in GHC 6.13 (GHC ticket haskell/haddock#4100) - - - - - 3b94a819 by Simon Marlow at 2010-06-02T08:45:08+00:00 Allow base-4.3 - - - - - c5a1fb7c by Simon Marlow at 2010-06-02T09:03:04+00:00 Fix compilation with GHC 6.13 - - - - - 6181296c by David Waern at 2010-06-08T21:09:05+00:00 Display name of prologue file when parsing it fails - - - - - 7cbc6f60 by Ian Lynagh at 2010-06-13T16:20:25+00:00 Remove redundant imports - - - - - 980c804b by Simon Marlow at 2010-06-22T08:41:50+00:00 isLocalAndTypeInferenced: fix for local module names overlapping package modules - - - - - d74d4a12 by Simon Marlow at 2010-06-23T12:03:27+00:00 Unresolved identifiers in Doc get replaced with DocMonospaced rather than plain strings - - - - - d8546783 by Simon Marlow at 2010-06-30T12:45:17+00:00 LaTeX backend (new options: --latex, --latex-style=<style>) - - - - - 437afa9e by David Waern at 2010-07-01T12:02:44+00:00 Fix a few stylistic whitespace issues in LaTeX backend - - - - - 85bc1fae by David Waern at 2010-07-01T15:42:45+00:00 Make runtest.hs work with GHC 6.12.3 (we should really stop hard coding this) - - - - - 7d2eb86f by David Waern at 2010-07-01T15:43:33+00:00 Update test following Simon's patch to render unresolved names in monospaced font - - - - - 08fcbcd2 by David Waern at 2010-07-01T16:12:18+00:00 Warning police - - - - - d04a8d7a by David Waern at 2010-07-04T14:53:39+00:00 Fix a bug in attachInstances We didn't look for instance docs in all the interfaces of the package. This had the effect of instance docs not always showing up under a declaration. I took the opportunity to clean up the code in H.I.AttachInstances a bit as well. More cleanup is needed, however. - - - - - d10344eb by Simon Hengel at 2010-07-10T09:19:04+00:00 Add missing dependencies to cabal file - - - - - 24090531 by Mark Lentczner at 2010-03-21T04:51:16+00:00 add exports to Xhtml modules - - - - - 84f9a333 by Mark Lentczner at 2010-04-03T19:14:22+00:00 clean up Doc formatting code - add CSS for lists - renderToString now uses showHtml since prettyHtml messes up <pre> sections - - - - - bebccf52 by Mark Lentczner at 2010-04-04T04:51:08+00:00 tweak list css - - - - - 0c2aeb5e by Mark Lentczner at 2010-04-04T06:24:14+00:00 all decls now generate Html not HtmlTable - ppDecl return Html, and so now do all of the functions it calls - added some internal tables to some decls, which is wrong, and will have to be fixed - decl "Box" functions became "Elem" functions to make clear they aren't in a table anymore (see Layout.hs) - docBox went away, as only used in one place (and its days are numbered) - cleaned up logic in a number of places, removed dead code - added maybeDocToHtml which simplified a number of places in the code - - - - - dbf73e6e by Mark Lentczner at 2010-04-05T05:02:43+00:00 clean up processExport and place a div around each decl - - - - - e25b7e9f by Mark Lentczner at 2010-04-10T21:23:21+00:00 data decls are now a sequence of paragraphs, not a table - - - - - 89ee0294 by Mark Lentczner at 2010-04-10T21:29:16+00:00 removed commented out code that can't be maintained - - - - - d466f536 by Mark Lentczner at 2010-04-12T04:56:27+00:00 removed declWithDoc and cleaned up data decls in summary - - - - - ed755832 by Mark Lentczner at 2010-04-12T05:07:53+00:00 merge in markupExample changes - - - - - c36f51fd by Mark Lentczner at 2010-04-25T04:56:37+00:00 made record fields be an unordList, not a table - - - - - ed3a28d6 by Mark Lentczner at 2010-04-25T05:23:28+00:00 fixed surround of instance and constructor tables - - - - - 0e35bbc4 by Mark Lentczner at 2010-04-25T05:36:59+00:00 fix class member boxes in summary - - - - - 5041749b by Mark Lentczner at 2010-04-25T05:38:35+00:00 remove unused bodyBox - - - - - e91724db by Mark Lentczner at 2010-04-25T06:26:10+00:00 fixed javascript quoting/escpaing issue - - - - - f4abbb73 by Mark Lentczner at 2010-05-03T23:04:31+00:00 adjust css for current markup - - - - - e75fec4c by Mark Lentczner at 2010-05-04T06:14:34+00:00 added assoicated types and methods back into class decls - - - - - 84169323 by Mark Lentczner at 2010-05-24T13:13:42+00:00 merge in changes from the big-whitespace cleanup - - - - - 3c1c872e by Mark Lentczner at 2010-06-11T21:03:58+00:00 adjust synopsis and bottom bar spacing - - - - - 3c1f9ef7 by Mark Lentczner at 2010-06-11T21:14:44+00:00 fix missing space in "module" lines in synoposis - - - - - 9a137e6d by Mark Lentczner at 2010-06-11T21:34:08+00:00 changed tt elements to code elements - - - - - 50f71ef1 by Mark Lentczner at 2010-06-11T23:27:46+00:00 factored out ppInstances - - - - - 3b9a9de5 by Mark Lentczner at 2010-06-17T17:36:01+00:00 push single constructors (newtype) onto line with decl - - - - - e0f8f2ec by Mark Lentczner at 2010-06-17T22:20:56+00:00 remove <++> connector - - - - - 56c075dd by Mark Lentczner at 2010-07-13T05:26:21+00:00 change to new page structure - - - - - 04be6ca7 by Mark Lentczner at 2010-07-14T04:21:55+00:00 constructors and args as dl lists, built in Layout.hs - - - - - 65aeafc2 by Mark Lentczner at 2010-07-14T05:38:32+00:00 better interface to subDecls - - - - - 72032189 by Mark Lentczner at 2010-07-14T07:04:10+00:00 made subDecl tables looks just so - - - - - b782eca2 by Mark Lentczner at 2010-07-14T16:00:54+00:00 convert args to SubDecl format - - - - - cc75e98f by Mark Lentczner at 2010-07-14T16:28:53+00:00 convert instances to SubDecl - - - - - 34e2aa5a by Mark Lentczner at 2010-07-14T21:07:32+00:00 removing old table cruft from Layout.hs - - - - - d5810d95 by Mark Lentczner at 2010-07-14T21:54:58+00:00 methods and associated types in new layout scheme - - - - - 65ef9579 by Mark Lentczner at 2010-07-14T23:43:42+00:00 clean up synopsis lists - - - - - e523318f by Mark Lentczner at 2010-07-15T05:02:26+00:00 clean up of anchors - - - - - 1215dfc5 by Mark Lentczner at 2010-07-15T23:53:01+00:00 added two new themes and rough css switcher - - - - - 7f0fd36f by Mark Lentczner at 2010-07-16T04:57:38+00:00 fixed package catpion, added style menu - - - - - 0dd4999c by Mark Lentczner at 2010-07-16T20:12:39+00:00 new output for mini_ pages - - - - - 64b2810b by Mark Lentczner at 2010-07-16T20:58:41+00:00 reformat index-frames - - - - - 3173f555 by Mark Lentczner at 2010-07-16T22:41:53+00:00 convert index to new markup - - - - - b0a4b7c9 by Mark Lentczner at 2010-07-17T04:07:22+00:00 convert index.html to new markup, adjust module markup - - - - - 8261ae1e by Mark Lentczner at 2010-07-17T05:07:29+00:00 classing styling of ancillary pages - - - - - 2a4fb025 by Mark Lentczner at 2010-07-17T05:11:45+00:00 clean up Layout.hs: no more vanillaTable - - - - - 87eec685 by Mark Lentczner at 2010-07-17T05:35:16+00:00 clean up Util.hs - - - - - d304e9b0 by Mark Lentczner at 2010-07-17T05:38:50+00:00 qualify import of XHtml as XHtml - - - - - 7dc05807 by Mark Lentczner at 2010-07-17T06:17:53+00:00 factored out head element generation - - - - - 9cdaec9e by Mark Lentczner at 2010-07-17T06:44:54+00:00 refactored out main page body generation - - - - - 8a51019e by Mark Lentczner at 2010-07-17T06:48:20+00:00 moved footer into only place that used it - - - - - efa479da by Mark Lentczner at 2010-07-17T18:48:30+00:00 styling auxillary pages for tibbe and snappy themes - - - - - 81de5509 by Mark Lentczner at 2010-07-18T04:41:38+00:00 fixed alphabet on index page, and styling of it and packages in module lists - - - - - 20718c1a by Mark Lentczner at 2010-07-18T05:34:29+00:00 cleaned up div functions in Layout.hs - - - - - 60d50453 by Mark Lentczner at 2010-07-18T05:48:39+00:00 added content div to main pages - - - - - ed16561c by Mark Lentczner at 2010-07-18T06:12:22+00:00 add .doc class to documentation blocks - - - - - f5c781b0 by Mark Lentczner at 2010-07-19T05:20:53+00:00 refactoring of anchor ID and fragment handling - - - - - a69a93bf by Mark Lentczner at 2010-07-19T05:35:55+00:00 remove an explicit bold tag - replace with .def class - - - - - d76c7225 by Mark Lentczner at 2010-07-19T06:56:15+00:00 rename Haddock.Backends.Xhtml.Util to Utils - - - - - 5a58c0da by David Waern at 2010-07-21T13:30:54+00:00 Remove trailing whitespace in Haddock.Backends.Xhtml - - - - - 0652aa17 by David Waern at 2010-07-21T13:33:21+00:00 Align a few comments - - - - - 785776c3 by David Waern at 2010-07-21T13:39:04+00:00 Remove trailing whitespace in H.B.X.Decl - - - - - 71a30710 by David Waern at 2010-07-21T13:44:27+00:00 Remove more trailing whitespace - - - - - 38750394 by David Waern at 2010-07-21T13:50:43+00:00 Style police - - - - - 3023d940 by David Waern at 2010-07-21T14:01:22+00:00 Style police in H.B.X.Decl - - - - - df16e9e6 by David Waern at 2010-07-21T14:14:45+00:00 Style police in H.B.X.DocMarkup - - - - - 6020e321 by David Waern at 2010-07-21T14:17:32+00:00 More style police - - - - - 86ad8bf5 by David Waern at 2010-07-21T14:21:02+00:00 Style police in H.B.Xhtml - - - - - aea27d03 by David Waern at 2010-07-21T14:42:03+00:00 Fix warnings in LaTeX backend - - - - - 2aff34a9 by David Waern at 2010-07-21T14:50:46+00:00 Style police in LaTeX backend (mainly more newlines) - - - - - e517162d by David Waern at 2010-07-21T15:05:47+00:00 Doc sections in Main - - - - - b971aa0c by David Waern at 2010-07-21T15:06:17+00:00 Trailing whitespace in Documentation.Haddock - - - - - f11628fb by David Waern at 2010-07-21T15:07:06+00:00 Trailing whitespace in Haddock.Convert - - - - - cbaf284c by David Waern at 2010-07-21T15:08:11+00:00 Style police in Haddock.GhcUtils - - - - - 71feb77b by David Waern at 2010-07-21T15:09:06+00:00 Style police in Haddock.InterfaceFile - - - - - 0a9c80e6 by David Waern at 2010-07-21T15:11:33+00:00 Whitespace police - - - - - 6168376c by David Waern at 2010-07-21T15:16:35+00:00 Style police in Haddock.Utils - - - - - 9fe4dd90 by David Waern at 2010-07-21T15:19:31+00:00 Add -fwarn-tabs - - - - - a000d752 by Mark Lentczner at 2010-07-20T17:25:52+00:00 move CSS Theme functions into Themes.hs - - - - - b52b440f by Mark Lentczner at 2010-07-20T17:29:35+00:00 add Thomas Schilling's theme - - - - - e43fa7e8 by Mark Lentczner at 2010-07-21T04:49:34+00:00 correct icon used with Snappy theme - - - - - ba5092d3 by Mark Lentczner at 2010-07-21T04:56:47+00:00 apply Tibbe's updates to his theme - - - - - 7804eef6 by Mark Lentczner at 2010-07-21T05:15:49+00:00 space between "Style" and the downward triangle - - - - - 7131d4c6 by Mark Lentczner at 2010-07-21T17:43:35+00:00 merge with David's source cleanups - - - - - ee65f1cb by David Waern at 2010-07-22T16:50:46+00:00 Fix a bug where we allowed --hoogle, --latex, etc without input files - - - - - e413ff7a by David Waern at 2010-07-22T17:21:58+00:00 Improve function name - - - - - a0fd14f3 by Simon Marlow at 2010-06-30T15:34:32+00:00 fix warnings - - - - - 31f73d2a by David Waern at 2010-07-22T19:29:41+00:00 Solve conflicts - - - - - d563b4a5 by Simon Marlow at 2010-06-30T15:34:37+00:00 fix warning - - - - - 412b6469 by David Waern at 2010-07-22T19:31:28+00:00 Solve conflict - - - - - 35174b94 by Ian Lynagh at 2010-07-06T17:27:16+00:00 Follow mkPState argument order change - - - - - b5c3585c by Simon Marlow at 2010-07-14T08:49:21+00:00 common up code for instance rendering - - - - - d8009560 by Simon Marlow at 2010-07-14T12:37:11+00:00 fix warnings - - - - - a6d88695 by David Waern at 2010-07-24T15:33:33+00:00 Fix build with ghc < 6.13 - - - - - 94cf9de1 by David Waern at 2010-07-24T15:34:37+00:00 Remove conflict left-over - - - - - 313b15c0 by Mark Lentczner at 2010-07-21T22:09:04+00:00 reorganization of nhaddock.css with tibbe - - - - - 9defed80 by Mark Lentczner at 2010-07-21T22:42:14+00:00 further cleanup of nhaddock.css, float TOC, support aux. pages - - - - - 6d944c1b by Mark Lentczner at 2010-07-22T06:22:23+00:00 remove old HTML backend - - - - - b3e8cba5 by Mark Lentczner at 2010-07-22T06:43:32+00:00 remove --html-help support - it was old, out-of-date, and mostly missing - - - - - d2654a08 by Mark Lentczner at 2010-07-22T21:45:34+00:00 tweaks to nhaddock.css - - - - - f73b285c by Mark Lentczner at 2010-07-23T06:19:35+00:00 command like processing for theme selection The bulk of the change is threadnig the selected theme set through functions in Xhtml.hs so that the selected themes can be used when generating the page output. There isn't much going on in most of these changes, just passing it along. The real work is all done in Themes.hs. - - - - - 8bddc90d by Mark Lentczner at 2010-07-23T06:58:31+00:00 drop --themes support, add named theme support decided that --themes was silly - no one would do that, just use multiple --theme arguments made --theme a synonym for --css and -c made those arguments, if no file is found, look up the argument as the name of a built in theme all of this let's haddock be invoked with "--theme=classic" for example. - - - - - 20cafd4f by Mark Lentczner at 2010-07-23T17:44:29+00:00 rename --default-themes to --built-in-themes - - - - - 0fe41307 by Mark Lentczner at 2010-07-23T18:33:02+00:00 tweaks to theme for info table, headings, and tables - - - - - cba4fee0 by Mark Lentczner at 2010-07-23T19:13:59+00:00 tweaks for dl layout, though still not used - - - - - 463fa294 by Mark Lentczner at 2010-07-23T21:07:19+00:00 tweak look of mini pages, keywords, and preblocks - - - - - 5472fc02 by Mark Lentczner at 2010-07-24T05:36:15+00:00 slide out Synopsis drawer - - - - - 9d5d5de5 by Mark Lentczner at 2010-07-24T06:02:42+00:00 extend package header and footer to edges of page - - - - - a47c91a2 by Mark Lentczner at 2010-07-24T06:28:44+00:00 fields are def lists, tweak css for style menu, mini pages, arguments - - - - - ca20f23b by Mark Lentczner at 2010-07-24T16:55:22+00:00 excisting last vestiges of the --xhtml flag - - - - - 71fb012e by Mark Lentczner at 2010-07-25T18:47:49+00:00 change how collapsing sections are done make whole .caption be the target improve javascript for class toggling have plus/minus images come from .css, not img tags - - - - - c168c8d3 by Mark Lentczner at 2010-07-26T00:32:05+00:00 reorganize files in the html lib data dir - - - - - 93324301 by Mark Lentczner at 2010-07-26T01:27:42+00:00 cleaned up Themes.hs - - - - - ad3b5dd4 by Mark Lentczner at 2010-07-26T02:39:15+00:00 make module list use new collapsers - - - - - 1df9bfc6 by Mark Lentczner at 2010-07-27T19:09:25+00:00 remove Tibbe theme - - - - - 8b9b01b3 by Mark Lentczner at 2010-07-27T20:04:03+00:00 move themes into html dir with .theme and .std-theme extensions - - - - - a7beb965 by Mark Lentczner at 2010-07-27T21:06:34+00:00 give a class to empty dd elements so they can be hidden - - - - - a258c117 by Mark Lentczner at 2010-07-27T21:23:58+00:00 remove custom version of copyFile in Xhtml.hs - - - - - b70dba6e by Mark Lentczner at 2010-07-27T22:12:45+00:00 apply margin changes to pre and headings as per group decision, and small cleanups - - - - - e6f722a2 by Mark Lentczner at 2010-07-28T00:03:12+00:00 make info block and package bar links be floatable by placing them first in the dom tree - - - - - c8278867 by Mark Lentczner at 2010-07-28T19:01:18+00:00 styling source links on declarations - - - - - 88fdc399 by Mark Lentczner at 2010-07-29T01:12:46+00:00 styling tweaks don't generate an empty li for absent style menu in links area update css for Classic and Snappy to handle: dl lists links in package header and in declarations floating of links and info block in package and module headers - - - - - 8a75b213 by Ian Lynagh at 2010-07-30T20:21:46+00:00 Fix build in GHC tree - - - - - ce8e18b3 by Simon Hengel at 2010-08-03T18:37:26+00:00 Adapt paths to data files in cabal file - - - - - 9701a455 by Simon Hengel at 2010-08-07T13:20:27+00:00 Add missing dependency to cabal file - - - - - 01b838d1 by Mark Lentczner at 2010-07-30T20:19:40+00:00 improved synopsis drawer: on click, not hover - - - - - 7b6f3e59 by Mark Lentczner at 2010-07-30T23:38:55+00:00 put the synopsis back in the other themes - - - - - 7b2904c9 by Mark Lentczner at 2010-08-11T11:11:26+00:00 close arrows on expanded synopsis drawer - - - - - ea19e177 by Mark Lentczner at 2010-08-12T21:16:45+00:00 width and font changes removed the max width restrictions on the page as a whole and the synopsis made the main font size smaller (nominally 14pt) and then tweaked most font sizes (relative) to be more consistent - - - - - 5ced00c0 by Mark Lentczner at 2010-08-13T15:09:55+00:00 implemented YUI's CSS font approach - - - - - 2799c548 by Mark Lentczner at 2010-08-13T15:11:59+00:00 adjusted margin to 2em, 1 wasn't enough - - - - - 58f06893 by Mark Lentczner at 2010-08-13T15:48:44+00:00 removed underlining on hover for named anchors headings in interface lost thier a element, no need, just put id on heading css for a elements now only applies to those with href attribute - - - - - 7aced4c4 by Mark Lentczner at 2010-08-13T15:50:22+00:00 more space between elements - - - - - 5a3c1cce by Mark Lentczner at 2010-08-13T16:43:43+00:00 adjusted font sizes of auxilary pages per new scheme - - - - - 487539ef by Mark Lentczner at 2010-08-13T21:43:41+00:00 add Frames button and clean up frames.html - - - - - c1a140b6 by Mark Lentczner at 2010-08-13T22:17:48+00:00 move frames button to js - - - - - b0bdb68e by Mark Lentczner at 2010-08-14T03:44:46+00:00 build style menu in javascript moved to javascript, so as to not polute the content with the style menu removed menu building code in Themes.hs removed onclick in Utils.hs changed text of button in header from "Source code" to "Source" more consistent with links in rest of page - - - - - 43ab7120 by Mark Lentczner at 2010-08-16T15:15:37+00:00 font size and margin tweaks - - - - - c0b68652 by Mark Lentczner at 2010-08-17T18:19:52+00:00 clean up collapser logics javascript code for collapasble sections cleaned up rewrote class utilities in javascript to be more robust refactored utilities for generating collapsable sections made toc be same color as synopsis module list has needed clear attribute in CSS - - - - - 5d573427 by Mark Lentczner at 2010-08-17T23:06:02+00:00 don't collapse entries in module list when clicking on links - - - - - 8c307c4a by Mark Lentczner at 2010-08-17T23:21:43+00:00 add missing data file to .cabal - - - - - 414bcfcf by Mark Lentczner at 2010-08-17T23:28:47+00:00 remove synopsis when in frames - - - - - ba0fa98a by Mark Lentczner at 2010-08-18T16:16:11+00:00 layout tweeks - mini page font size, toc color, etc. - - - - - 63c1bed1 by Mark Lentczner at 2010-08-18T19:50:02+00:00 margin fiddling - - - - - c311c094 by Mark Lentczner at 2010-08-20T01:37:55+00:00 better synopsis handling logic - no flashing - - - - - f1fe5fa8 by Mark Lentczner at 2010-08-20T01:41:06+00:00 fix small layout issues mini frames should have same size top heading give info block dts some padding so they don't collide in some browsers - - - - - 0de84d77 by Mark Lentczner at 2010-08-20T02:13:09+00:00 made style changing and cookies storage robust - - - - - 1ef064f9 by Thomas Schilling at 2010-08-04T13:12:22+00:00 Make synopsis frame behave properly in Firefox. In Firefox, pressing the back button first reverted the synopsis frame, and only clicking the back button a second time would update the main frame. - - - - - dd1c9a94 by Mark Lentczner at 2010-08-21T01:46:19+00:00 remove Snappy theme - - - - - 2353a90d by Mark Lentczner at 2010-08-25T05:16:19+00:00 fix occasional v.scroll bars on pre blocks (I think) - - - - - 459b8bf1 by Simon Hengel at 2010-08-08T10:12:45+00:00 Add createInterfaces' (a more high-level alternative to createInterfaces) to Haddock API - - - - - b1b68675 by David Waern at 2010-08-26T20:31:58+00:00 Follow recent API additions with some refactorings Simon Hegel's patch prompted me to do some refactorings in Main, Haddock.Documentation and Haddock.Interface. - - - - - 264d4d67 by David Waern at 2010-08-26T21:40:59+00:00 Get rid of GhcModule and related cruft We can get everything we need directly from TypecheckedModule. - - - - - 0feacec2 by Mark Lentczner at 2010-08-26T23:44:13+00:00 fixed CSS for ordered lists and def lists in doc blocks - - - - - 2997e0c2 by Mark Lentczner at 2010-08-26T23:45:03+00:00 support both kinds of enumerated lists in doc markup The documentation for Haddock says enumerated lists can use either of (1) first item 2. second item The second form wasn't actually supported - - - - - 5d4ddeec by Mark Lentczner at 2010-08-27T21:29:48+00:00 fix broken header link margins - - - - - 614456ba by Mark Lentczner at 2010-08-27T22:16:19+00:00 fix table of contents CSS - - - - - 03f329a2 by David Waern at 2010-08-28T16:36:09+00:00 Update tests following switch to the Xhtml backend - - - - - ca689fa2 by Mark Lentczner at 2010-08-28T18:25:16+00:00 fix def lists - - - - - 18e1d3d2 by Mark Lentczner at 2010-08-28T18:26:18+00:00 push footer to bottom of window - - - - - b0ab8d82 by David Waern at 2010-08-28T22:04:32+00:00 Whitespace police - - - - - 2d217977 by David Waern at 2010-08-29T12:44:45+00:00 Remove Snappy data files - - - - - 01e27d5f by David Waern at 2010-08-29T13:03:28+00:00 Add source entity path to --read-interface You can now use this flag like this: --read-interface=<html path>,<source entity path>,<.haddock file> By "source entity path" I mean the same thing that is specified with the --source-entity flag. The purpose of this is to be able to specify the source entity path per package, to allow source links to work in the presence of cross-package documentation. When given two arguments or less the --read-interface flag behaves as before. - - - - - 20bf4aaa by David Waern at 2010-08-29T13:11:03+00:00 Naming wibbles - - - - - ad22463f by Mark Lentczner at 2010-08-29T15:14:54+00:00 make portability block be a table - solves layout issues - - - - - 97bd1ae6 by Mark Lentczner at 2010-08-29T15:17:42+00:00 update golden test for Test due to portability box change - - - - - d37e139e by Mark Lentczner at 2010-08-29T17:07:17+00:00 move TOC and Info blocks down 0.5em to improve layout issue w/Test.hs - - - - - acf52501 by David Waern at 2010-08-29T17:32:36+00:00 Allow building with ghc < 6.16 - - - - - 1cb34ed8 by Ian Lynagh at 2010-07-24T23:18:49+00:00 Flatten the dynflags before parsing - - - - - b36845b4 by Ian Lynagh at 2010-07-24T23:26:49+00:00 Follow flattenLanguageFlags -> flattenExtensionFlags rename - - - - - 7f7fcc7e by David Waern at 2010-08-29T17:46:23+00:00 Use flattenExtensionFlags with ghc >= 6.13 only - - - - - 13cf9411 by Ian Lynagh at 2010-08-01T18:09:54+00:00 Make the main haddock script versioned, and make plain "haddock" a symlink - - - - - 495cbff2 by Ian Lynagh at 2010-08-18T18:57:24+00:00 Fix installation in the GHC build system Data-files are now in subdirectories, so we need to handle that - - - - - 88ebab0a by Ian Lynagh at 2010-08-18T19:43:53+00:00 GHC build system: Add all the data files to BINDIST_EXTRAS - - - - - 65837172 by David Waern at 2010-08-29T20:12:34+00:00 Update Test - - - - - 094bbaa2 by David Waern at 2010-08-29T20:55:14+00:00 Revert update to Test - - - - - a881cfb3 by David Waern at 2010-08-31T18:24:15+00:00 Bump version number - - - - - 1fc8a3eb by David Waern at 2010-08-31T22:32:27+00:00 Update ANNOUNCE - - - - - ee1df9d0 by David Waern at 2010-08-31T22:33:11+00:00 Update CHANGES - - - - - 394cc854 by David Waern at 2010-08-31T22:33:23+00:00 Update interface file versioning to work with ghc 6.14/15 - - - - - 7d03b79b by David Waern at 2010-08-31T22:36:00+00:00 Update test output following version change - - - - - a48d82d1 by Mark Lentczner at 2010-09-01T04:29:35+00:00 sort options in doc to match --help output removed --html-help option, as it is no longer supported - - - - - 06561aeb by Mark Lentczner at 2010-09-01T05:29:32+00:00 update options documentation rewrote doc for --html added doc for --theme and --built-in-themes added --use-contents and --gen-contents - - - - - 57dea832 by Mark Lentczner at 2010-09-01T05:31:27+00:00 slight wording change about Frames mode - - - - - fa1f6da3 by David Waern at 2010-09-01T10:57:44+00:00 Update doc configure script to find docbook stylesheets on arch linux - - - - - addff770 by David Waern at 2010-09-01T11:02:29+00:00 Wibble - - - - - 8399006d by David Waern at 2010-09-01T11:19:21+00:00 Replace ghci> with >>> in example syntax - - - - - 35074cf8 by David Waern at 2010-09-01T19:03:27+00:00 Improve docs for --no-tmp-comp-dir - - - - - 0f8f8cfd by David Waern at 2010-09-02T11:22:27+00:00 Add a list of contributors to the user guide Break out everyone thanked in the `Acknowledgements` chapter into a separate contributor list and add everyone from `darcs show authors`. We consider everyone who is thanked to be a contributor as a conservative estimation :-) I have added some more contributors that I know about, who were not in the darcs history, but others may be missing. So please add anyone that you think is missing from the list. - - - - - 42ccf099 by David Waern at 2010-09-02T11:29:22+00:00 Update copyright years in license - - - - - 0d560479 by David Waern at 2010-09-02T11:38:52+00:00 Update release instructions - - - - - 72ab7796 by David Waern at 2010-09-02T19:27:08+00:00 Add a note to ANNOUNCE - - - - - bf9d9c5d by David Waern at 2010-09-02T19:27:48+00:00 H.Utils needs FFI on Win+MinGW - - - - - 048ae44a by Mark Lentczner at 2010-09-04T23:19:47+00:00 make TOC group header identifiers validate - - - - - 8c6faf36 by Simon Michael at 2010-09-22T07:12:34+00:00 add hints for cleaner darcs show authors output - - - - - 9909bd17 by Simon Michael at 2010-09-22T17:58:06+00:00 print haddock coverage info on stdout when generating docs A module's haddockable items are its exports and the module itself. The output is lightly formatted so you can align the :'s and sort for readability. - - - - - 6da72171 by David Waern at 2010-10-03T21:31:24+00:00 Style wibble - - - - - 2f8d8e4d by Tobias Brandt at 2010-08-27T07:01:21+00:00 adding the option to fully qualify identifiers - - - - - 833be6c6 by Tobias Brandt at 2010-08-27T15:50:28+00:00 adding support for local and relative name qualification - - - - - df15c4e9 by Tobias Brandt at 2010-08-27T15:56:37+00:00 corrected qualification help message - - - - - 449e9ce1 by David Waern at 2010-10-16T17:34:30+00:00 Solve conflicts - - - - - 3469bda5 by David Waern at 2010-10-16T18:42:40+00:00 Use "qual" as an abbreviation for qualification instead of "quali" for consistency - - - - - 97c2d728 by David Waern at 2010-10-16T18:47:07+00:00 Style police - - - - - ce14fbea by David Waern at 2010-10-16T21:15:25+00:00 Style police - - - - - fdf29e9d by David Waern at 2010-10-17T00:30:44+00:00 Add a pointer to the style guide - - - - - 8e6b44e8 by rrnewton at 2010-10-24T03:19:28+00:00 Change to index pages: include an 'All' option even when subdividing A-Z. - - - - - 755b131c by David Waern at 2010-11-14T19:39:36+00:00 Bump version - - - - - d0345a04 by David Waern at 2010-11-14T19:41:59+00:00 TAG 2.8.1 - - - - - f6221508 by Simon Peyton Jones at 2010-09-13T09:53:00+00:00 Adapt to minor changes in internal GHC functions - - - - - 1290713d by Ian Lynagh at 2010-09-15T10:37:18+00:00 Remove duplicate Outputable instance for Data.Map.Map - - - - - 87f69eef by Ian Lynagh at 2010-09-21T15:01:10+00:00 Bump GHC dep upper bound - - - - - af36e087 by Ian Lynagh at 2010-09-21T15:12:02+00:00 Fix up __GLASGOW_HASKELL__ tests - - - - - ad67716c by Ian Lynagh at 2010-09-21T20:31:35+00:00 Don't build haddock is HADDOCK_DOCS is NO - - - - - 63b3f1f5 by Ian Lynagh at 2010-09-21T21:39:51+00:00 Fixes for when HADDOCK_DOCS=NO - - - - - e92bfa42 by Ian Lynagh at 2010-09-29T21:15:38+00:00 Fix URL creation on Windows: Use / not \ in URLs. Fixes haskell/haddock#4353 - - - - - 66c55e05 by Ian Lynagh at 2010-09-30T17:03:34+00:00 Tidy up haddock symlink installation In particular, it now doesn't get created if we aren't installing haddock. - - - - - 549b5556 by Ian Lynagh at 2010-10-23T21:17:14+00:00 Follow extension-flattening change in GHC - - - - - d7c2f72b by David Waern at 2010-11-14T20:17:55+00:00 Bump version to 2.8.2 - - - - - 6989a3a9 by David Waern at 2010-11-14T20:26:01+00:00 Solve conflict - - - - - 055c6910 by Ian Lynagh at 2010-09-22T15:36:20+00:00 Bump GHC dep - - - - - c96c0763 by Simon Marlow at 2010-10-27T11:09:44+00:00 follow changes in the GHC API - - - - - 45907129 by David Waern at 2010-11-07T14:00:58+00:00 Update the HCAR entry - - - - - 61940b95 by David Waern at 2010-11-07T14:07:34+00:00 Make the HCAR entry smaller - - - - - aa590b7d by David Waern at 2010-11-14T21:30:59+00:00 Update HCAR entry with November 2010 version - - - - - 587f9847 by David Waern at 2010-11-14T23:48:17+00:00 Require ghc >= 7.0 - - - - - ff5c647c by David Waern at 2010-11-14T23:49:09+00:00 TAG 2.8.2 - - - - - 937fcb4f by David Waern at 2010-11-14T23:49:45+00:00 Solve conflict - - - - - 8e5d0c1a by David Waern at 2010-11-15T21:09:50+00:00 Remove code for ghc < 7 - - - - - 3d47b70a by David Waern at 2010-11-15T21:11:06+00:00 Fix bad merge - - - - - 7f4a0d8a by David Waern at 2010-11-15T21:13:57+00:00 Remove more ghc < 7 code - - - - - 9ee34b50 by David Waern at 2010-11-15T21:31:25+00:00 Match all AsyncExceptions in exception handler - - - - - 42849c70 by David Waern at 2010-11-15T21:35:31+00:00 Just say "internal error" instead of "internal Haddock or GHC error" - - - - - c88c809b by David Waern at 2010-11-15T21:44:19+00:00 Remove docNameOcc under the motto "don't name compositions" - - - - - b798fc7c by David Waern at 2010-11-15T23:27:13+00:00 Wibble - - - - - 2228197e by David Waern at 2010-11-15T23:28:24+00:00 Rename the HCAR entry file - - - - - 8a3f9090 by David Waern at 2010-11-16T00:05:29+00:00 Remove Haskell 2010 extensions from .cabal file - - - - - c7a0c597 by David Waern at 2010-11-16T00:10:28+00:00 Style wibbles - - - - - cde707a5 by David Waern at 2010-11-16T00:12:00+00:00 Remove LANGUAGE ForeignFunctionInterface pragmas - - - - - 1dbda8ed by David Waern at 2010-11-16T00:17:21+00:00 Make a little more use of DoAndIfThenElse - - - - - 4c45ff6e by David Waern at 2010-11-16T00:59:41+00:00 hlint police - - - - - d2feaf09 by David Waern at 2010-11-16T01:14:15+00:00 hlint police - - - - - 99876e97 by David Waern at 2010-11-20T19:06:00+00:00 Haddock documentation updates - - - - - 65ce6987 by David Waern at 2010-11-20T19:42:51+00:00 Follow the style guide closer in Haddock.Types and improve docs - - - - - 28ca304a by tob.brandt at 2010-11-20T17:04:40+00:00 add full qualification for undocumented names - - - - - d61341e3 by David Waern at 2010-11-20T20:04:15+00:00 Re-structure qualification code a little - - - - - 0057e4d6 by David Waern at 2010-11-20T20:07:55+00:00 Re-order functions - - - - - d7279afd by David Waern at 2010-11-21T03:39:54+00:00 Add BangPatterns to alex and happy source files - - - - - 629fe60e by tob.brandt at 2010-11-23T23:35:11+00:00 documentation for qualification - - - - - 37031cee by David Waern at 2010-11-23T21:06:44+00:00 Update CHANGES - don't mention 2.8.2, we won't release it - - - - - f2489e19 by David Waern at 2010-12-01T21:57:11+00:00 Update deps of runtests.hs to work with ghc 7.0.1 - - - - - d3657e9a by David Waern at 2010-12-01T22:04:57+00:00 Make tests compile with ghc 7.0.1 - - - - - a2f09d9b by David Waern at 2010-12-01T22:06:59+00:00 Update tests following version bump - - - - - 50883ebb by David Waern at 2010-12-06T14:09:18+00:00 Update tests following recent changes - - - - - fc2fadeb by David Waern at 2010-12-06T14:17:29+00:00 Add a flag --pretty-html for rendering indented html with newlines - - - - - 30832ef2 by David Waern at 2010-12-06T14:17:35+00:00 Use --pretty-html when running the test suite. Makes it easier to compare output - - - - - a0b81b31 by David Waern at 2010-12-06T14:18:27+00:00 Wibble - - - - - 3aaa23fe by David Waern at 2010-12-06T14:19:29+00:00 Haddockify ppHtml comments - - - - - 24bb24f0 by David Waern at 2010-12-06T14:23:15+00:00 Remove --debug. It was't used, and --verbosity should take its place - - - - - 6bc076e5 by David Waern at 2010-12-06T14:25:37+00:00 Rename golden-tests into html-tests. "golden tests" sounds strange - - - - - 53301e55 by David Waern at 2010-12-06T14:26:26+00:00 QUALI -> QUAL in the description --qual for consistency - - - - - 98b6affb by David Waern at 2010-12-06T21:54:02+00:00 Bump version - - - - - 371bf1b3 by David Waern at 2010-12-06T22:08:55+00:00 Update tests following version bump - - - - - 25be762d by David Waern at 2010-12-06T22:21:03+00:00 Update CHANGES - - - - - 7c7dac71 by David Waern at 2010-12-06T22:33:43+00:00 Update ANNOUNCE - - - - - 30d7a5f2 by Simon Peyton Jones at 2010-11-15T08:38:38+00:00 Alex generates BangPatterns, so make Lex.x accept them (It'd be better for Alex to generate this pragma.) - - - - - 605e8018 by Simon Marlow at 2010-11-17T11:37:24+00:00 Add {-# LANGUAGE BangPatterns #-} to mollify GHC - - - - - a46607ba by David Waern at 2010-12-07T14:08:10+00:00 Solve conflicts - - - - - b28cda66 by David Waern at 2010-12-09T20:41:35+00:00 Docs: Mention that \ is a special character in markup - - - - - a435bfdd by Ian Lynagh at 2010-11-17T14:01:19+00:00 TAG GHC 7.0.1 release - - - - - 5a15a05a by David Waern at 2010-12-11T17:51:19+00:00 Fix indentation problem - - - - - 4232289a by Lennart Kolmodin at 2010-12-17T18:32:03+00:00 Revise haddock.cabal given that we now require ghc-7 default-language should be Haskell2010, slight new semantics for extensions. Rewrite into clearer dependencies of base and Cabal. - - - - - a36302dc by David Waern at 2010-12-19T17:12:37+00:00 Update CHANGES - - - - - 7c8b85b3 by David Waern at 2010-12-19T17:14:24+00:00 Bump version - - - - - cff22813 by Ian Lynagh at 2011-01-05T18:24:27+00:00 Write hoogle output in utf8; fixes GHC build on Windows - - - - - c7e762ea by David Waern at 2011-01-22T00:00:35+00:00 Put title outside doc div when HTML:fying title+prologue Avoids indenting the title, and makes more sense since the title is not a doc string anyway. - - - - - 5f639054 by David Waern at 2011-01-22T16:09:44+00:00 Fix spelling error - contributed by Marco Silva - - - - - c11dce78 by Ian Lynagh at 2011-01-07T02:33:11+00:00 Follow GHC build system changes - - - - - 101cfaf5 by David Waern at 2011-01-08T14:06:44+00:00 Bump version - - - - - af62348b by David Waern at 2011-01-08T14:07:07+00:00 TAG 2.9.2 - - - - - 4d1f6461 by Ian Lynagh at 2011-01-07T23:06:57+00:00 Name the haddock script haddock-ghc-7.0.2 instead of haddock-7.0.2; haskell/haddock#4882 "7.0.2" looked like a haddock version number before - - - - - 8ee4d5d3 by Simon Peyton Jones at 2011-01-10T17:31:12+00:00 Update Haddock to reflect change in hs_tyclds field of HsGroup - - - - - 06f3e3db by Ian Lynagh at 2011-03-03T15:02:37+00:00 TAG GHC 7.0.2 release - - - - - 7de0667d by David Waern at 2011-03-10T22:47:13+00:00 Update CHANGES - - - - - 33a9f1c8 by David Waern at 2011-03-10T22:47:31+00:00 Fix build with ghc 7.0.1 - - - - - 4616f861 by David Waern at 2011-03-10T22:47:50+00:00 TAG 2.9.2-actual - - - - - 0dab5e3c by Simon Hengel at 2011-04-08T15:53:01+00:00 Set shell script for unit tests back to work - - - - - 85c54dee by Simon Hengel at 2011-04-08T16:01:24+00:00 Set unit tests back to work Here "ghci>" was still used instead of ">>>". - - - - - 1cea9b78 by Simon Hengel at 2011-04-08T16:25:36+00:00 Update runtests.hs for GHC 7.0.2 - - - - - 8e5b3bbb by Simon Hengel at 2011-04-08T16:28:49+00:00 Update Haddock version in *.html.ref - - - - - 2545e955 by Simon Hengel at 2011-04-08T17:09:28+00:00 Add support for blank lines in the result of examples Result lines that only contain the string "<BLANKLINE>" are treated as a blank line. - - - - - adf64d2e by Simon Hengel at 2011-04-08T17:36:50+00:00 Add documentation for "support for blank lines in the result of examples" - - - - - c51352ca by David Waern at 2011-05-21T23:57:56+00:00 Improve a haddock comment - - - - - 7419cf2c by David Waern at 2011-05-22T15:41:52+00:00 Use cabal's test suite support to run the test suite This gives up proper dependency tracking of the test script. - - - - - 7770070c by David Waern at 2011-05-22T01:45:44+00:00 We don't need to send DocOptions nor a flag to mkExportItems - - - - - 9d95b7b6 by David Waern at 2011-05-22T21:39:03+00:00 Fix a bug - - - - - 1f93699b by David Waern at 2011-05-22T21:40:21+00:00 Break out fullContentsOf, give it a better name and some documentation The documentation describes how we want this function to eventually behave, once we have fixed a few problems with the current implementation. - - - - - 9a86432f by David Waern at 2011-05-22T21:53:52+00:00 Fix some stylistic issues in mkExportItems - - - - - c271ff0c by David Waern at 2011-05-22T22:09:11+00:00 Indentation - - - - - 93e602b1 by David Waern at 2011-06-10T01:35:31+00:00 Add git commits since switchover: darcs format (followed by a conflict resolution): commit 6f92cdd12d1354dfbd80f8323ca333bea700896a Merge: f420cc4 28df3a1 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Thu May 19 17:54:34 2011 +0100 Merge remote branch 'origin/master' into ghc-generics commit 28df3a119f770fdfe85c687dd73d5f6712b8e7d0 Author: Max Bolingbroke <batterseapower at hotmail.com> Date: Sat May 14 22:37:02 2011 +0100 Unicode fix for getExecDir on Windows commit 89813e729be8bce26765b95419a171a7826f6d70 Merge: 6df3a04 797ab27 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Mon May 9 11:55:17 2011 +0100 Merge branch 'ghc-new-co' commit 6df3a040da3dbddee67c6e30a892f87e6b164383 Author: Ian Lynagh <igloo at earth.li> Date: Sun May 8 17:05:50 2011 +0100 Follow changes in SDoc commit f420cc48b9259f0b1afd2438b12f9a2bde57053d Author: Jose Pedro Magalhaes <jpm at cs.uu.nl> Date: Wed May 4 17:31:52 2011 +0200 Adapt haddock to the removal of HsNumTy and TypePat. commit 797ab27bdccf39c73ccad374fea265f124cb52ea Merge: 1d81436 5a91450 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Mon May 2 12:05:03 2011 +0100 Merge remote branch 'origin/master' into ghc-new-co commit 1d8143659a81cf9611668348e33fd0775c7ab1d2 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Mon May 2 12:03:46 2011 +0100 Wibbles for ghc-new-co branch commit 5a91450e2ea5a93c70bd3904b022445c9cc82488 Author: Ian Lynagh <igloo at earth.li> Date: Fri Apr 22 00:51:56 2011 +0100 Follow defaultDynFlags change in GHC - - - - - 498da5ae by David Waern at 2011-06-11T00:33:33+00:00 * Merge in git patch from Michal Terepeta >From 6fc71d067738ef4b7de159327bb6dc3d0596be29 Mon Sep 17 00:00:00 2001 From: Michal Terepeta <michal.terepeta at gmail.com> Date: Sat, 14 May 2011 19:18:22 +0200 Subject: [PATCH] Follow the change of TypeSig in GHC. This follows the change in GHC to make TypeSig take a list of names (instead of just one); GHC ticket haskell/haddock#1595. This should also improve the Haddock output in case the user writes a type signature that refers to many names: -- | Some comment.. foo, bar :: ... will now generate the expected output with one signature for both names. - - - - - 094607fe by Ian Lynagh at 2011-06-17T19:10:29+01:00 Fix build - - - - - 8fa35740 by Ian Lynagh at 2011-06-26T21:06:40+01:00 Bump GHC dep to allow 7.2 - - - - - e4d2ca3c by Ian Lynagh at 2011-07-07T23:06:28+01:00 Relax base dep - - - - - b948fde9 by Ian Lynagh at 2011-07-28T16:39:45+01:00 GHC build system: Don't install the datafiles twice - - - - - f82f6d70 by Simon Marlow at 2011-08-11T12:08:15+01:00 Hack this to make it work with both Alex 2.x and Alex 3.x. Unicode in documentation strings is (still) mangled. I don't think it's possible to make it so that we get the current behaviour with Alex 2.x but magic Unicode support if you use Alex 3.x. At some point we have to decide that Alex 3.x is a requirement, then we can do Unicode. - - - - - b341cc12 by Max Bolingbroke at 2011-08-22T20:25:27+01:00 Fix compilation with no-pred-ty GHC - - - - - 30494581 by Max Bolingbroke at 2011-08-23T10:20:54+01:00 Remaining fixes for PredTy removal - - - - - 0b197138 by Max Bolingbroke at 2011-08-26T08:27:45+01:00 Rename factKind to constraintKind - - - - - a379bec5 by Max Bolingbroke at 2011-09-04T12:54:47+01:00 Deal with change to IParam handling in GHC - - - - - f94e421b by Max Bolingbroke at 2011-09-06T17:34:31+01:00 Adapt Haddock for the ConstraintKind extension changes - - - - - 8821e5cc by Max Bolingbroke at 2011-09-09T08:24:59+01:00 Ignore associated type defaults (just as we ignore default methods) - - - - - 31a0afd4 by Max Bolingbroke at 2011-09-09T09:06:00+01:00 Merge branch 'no-pred-ty' of ssh://darcs.haskell.org/srv/darcs/haddock into no-pred-ty - - - - - dd3b530a by Max Bolingbroke at 2011-09-09T14:10:25+01:00 Merge branch 'no-pred-ty' Conflicts: src/Haddock/Convert.hs - - - - - 5f25ec96 by Max Bolingbroke at 2011-09-09T14:10:40+01:00 Replace FactTuple with ConstraintTuple - - - - - cd30b9cc by David Waern at 2011-09-26T02:17:55+02:00 Bump to version 2.9.3 - - - - - 4fbfd397 by Max Bolingbroke at 2011-09-27T14:55:21+01:00 Follow changes to BinIface Name serialization - - - - - 92257d90 by David Waern at 2011-09-30T23:45:07+02:00 Fix problem with test files not added to distribution tarball - - - - - 00255bda by David Waern at 2011-09-30T23:48:24+02:00 Merge branch 'development' - - - - - 5421264f by David Waern at 2011-10-01T01:25:39+02:00 Merge in darcs patch from Simon Meier: Wed Jun 1 19:41:16 CEST 2011 iridcode at gmail.com * prettier haddock coverage info The new coverage info rendering uses less horizontal space. This reduces the number of unnecessary line-wrappings. Moreover, the most important information, how much has been documented already, is now put up front. Hopefully, this makes it more likely that a library author is bothered by the low coverage of his modules and fixes that issue ;-) - - - - - 07d318ef by David Waern at 2011-10-01T01:34:10+02:00 Use printException instead of deprecated printExceptionAndWarnings - - - - - 40d52ee4 by David Waern at 2011-10-01T01:41:13+02:00 Merge in darcs pach: Mon Apr 11 18:09:54 JST 2011 Liyang HU <haddock at liyang.hu> * Remember collapsed sections in index.html / haddock-util.js - - - - - 279d6dd4 by David Waern at 2011-10-01T01:55:45+02:00 Merge in darcs patch: Joachim Breitner <mail at joachim-breitner.de>**20110619201645 Ignore-this: f6c51228205b0902ad5bfad5040b989a As reported on http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=578301, generating the global index takes much too long if type-level (with lots of auto-generated types) is installed. The patch avoids a quadratic runtime in the subfunction getIfaceIndex of ppHtmlIndex by using a temporary set. Runtime improvement observed here from 25.36s to 2.86s. - - - - - d1612383 by David Waern at 2011-10-01T01:56:48+02:00 Merge branch 'development' - - - - - 347520c1 by David Waern at 2011-10-01T01:56:54+02:00 Merge branch 'master' of http://darcs.haskell.org/haddock - - - - - 9a0c95e8 by David Waern at 2011-10-01T02:19:10+02:00 Improve .cabal file - - - - - 6967dc64 by Ian Lynagh at 2011-10-01T01:34:06+01:00 Follow changes to ForeignImport/ForeignExport in GHC - - - - - 565cb26b by Simon Marlow at 2011-10-04T00:15:04+02:00 Hack this to make it work with both Alex 2.x and Alex 3.x. Unicode in documentation strings is (still) mangled. I don't think it's possible to make it so that we get the current behaviour with Alex 2.x but magic Unicode support if you use Alex 3.x. At some point we have to decide that Alex 3.x is a requirement, then we can do Unicode. - - - - - 8b74f512 by David Waern at 2011-10-04T00:18:17+02:00 Requre ghc >= 7.2 - - - - - 271d360c by David Waern at 2011-10-04T00:22:50+02:00 Bump version to 2.9.4 - - - - - 37f3edb0 by David Waern at 2011-10-06T02:30:21+02:00 Add alex and happy to build-tools. - - - - - 7ac2bb6e by David Terei at 2011-10-12T14:02:55-07:00 Add safe haskell indication to haddock output - - - - - 42c91a47 by David Terei at 2011-10-12T14:06:03-07:00 Fix CSS issue with info table not being contained in module header - - - - - 0eddab6c by David Terei at 2011-10-12T14:06:58-07:00 Add safe haskell indication to haddock output - - - - - 3df058eb by David Terei at 2011-10-12T14:07:07-07:00 Fix CSS issue with info table not being contained in module header - - - - - a40a6c3f by David Waern at 2011-10-22T11:29:06+02:00 Bump .haddock file version since the format has changed recently - - - - - 8a6254be by David Waern at 2011-10-22T11:30:42+02:00 Merge branch 'development' - - - - - 642e3e02 by David Waern at 2011-10-23T21:23:39+02:00 Sort import list - - - - - 36371cf8 by David Waern at 2011-10-23T22:48:18+02:00 Remove NEW_GHC_LAYOUT conditional. - - - - - 5604b499 by David Waern at 2011-10-27T00:15:03+02:00 Add --print-ghc-path. - - - - - 463499fa by David Waern at 2011-10-27T00:16:22+02:00 Make testsuite able to find its dependencies automatically. - - - - - a3506172 by Ryan Newton at 2011-11-05T05:59:58-04:00 Improved declNames internal error. Added a case to handle DocD. - - - - - 001b8baf by David Waern at 2011-11-05T20:37:29+01:00 Rename copy.hs -> accept.hs. - - - - - 55d808d3 by David Waern at 2011-11-05T23:30:02+01:00 Fix build. - - - - - deb5c3be by David Waern at 2011-11-06T00:01:47+01:00 Merge branch 'master' of http://darcs.haskell.org/haddock - - - - - 9b663554 by David Waern at 2011-11-06T00:03:45+01:00 Merge https://github.com/rrnewton/haddock - - - - - 1abb0ff6 by David Waern at 2011-11-06T01:20:37+01:00 Use getDeclMainBinder instead of declNames. - - - - - 4b005c01 by David Waern at 2011-11-06T19:09:53+01:00 Fix build. - - - - - c2c51bc7 by Ian Lynagh at 2011-11-06T23:01:33+00:00 Remove -DNEW_GHC_LAYOUT in ghc.mk - - - - - f847d703 by Jose Pedro Magalhaes at 2011-11-11T09:07:39+00:00 New kind-polymorphic core This big patch implements a kind-polymorphic core for GHC. The current implementation focuses on making sure that all kind-monomorphic programs still work in the new core; it is not yet guaranteed that kind-polymorphic programs (using the new -XPolyKinds flag) will work. For more information, see http://haskell.org/haskellwiki/GHC/Kinds - - - - - 7d7c3b09 by Jose Pedro Magalhaes at 2011-11-16T21:42:22+01:00 Follow changes to tuple sorts in master - - - - - 8430e03e by Simon Peyton Jones at 2011-11-17T10:20:27+00:00 Remove redundant imports - - - - - d1b06832 by Ian Lynagh at 2011-11-19T01:33:21+00:00 Follow GHC build system change to the way we call rm - - - - - 9e2230ed by David Waern at 2011-11-24T15:00:24+01:00 Fix a bug in test runner and get rid of regex-compat dependency. - - - - - 52039b21 by David Waern at 2011-11-24T23:55:36+01:00 Avoid haskell98 dependency in test - - - - - 92e1220d by David Waern at 2011-11-25T00:03:33+01:00 Avoid depency on regex-compat also in accept.hs. - - - - - ddac6b6f by David Waern at 2011-11-25T02:13:38+01:00 Accept test output. - - - - - 5a720455 by David Waern at 2011-11-25T02:16:20+01:00 Some more changes to test scripts. - - - - - 170a9004 by David Waern at 2011-11-25T02:30:41+01:00 Add flag --interface-version. - - - - - d225576c by David Waern at 2011-11-25T02:39:26+01:00 Remove #ifs for older compiler versions. - - - - - f0d0a4f5 by David Waern at 2011-11-26T04:20:12+01:00 Give preference to type over data constructors for doc comment links at renaming time. Previously this was done in the backends. Also, warn when a doc comment refers to something that is in scope but which we don't have the .haddock file for. These changes mean we can make DocIdentifier [a] into DocIdentifier a. - - - - - eef0e776 by David Waern at 2011-11-26T17:01:06+01:00 Allow doc comments to link to out-of-scope things (#78). (A bug that should have been fixed long ago.) - - - - - 565ad529 by David Waern at 2011-11-26T19:56:21+01:00 Update tests. - - - - - fb3ce7b9 by David Waern at 2011-11-26T21:44:28+01:00 Cleanup. - - - - - d0328126 by David Waern at 2011-11-26T22:10:28+01:00 Fix module reference bug. - - - - - c03765f8 by David Waern at 2011-12-03T05:20:20+01:00 Slightly better behaviour on top-levels without type signatures. - Docs don't get attached to the next top-level with signature by mistake. - If there's an export list and the top-level is part of it, its doc comment shows up in the documentation. - - - - - 48461d31 by David Waern at 2011-12-03T05:38:10+01:00 Add a test for Unicode doc comments. - - - - - 549c4b4e by David Waern at 2011-12-03T19:07:55+01:00 Cleanup. - - - - - 7bfecf91 by David Waern at 2011-12-03T20:13:08+01:00 More cleanup. - - - - - 14fab722 by Ian Lynagh at 2011-12-12T21:21:35+00:00 Update dependencies and binaryInterfaceVersion - - - - - 469e6568 by Ian Lynagh at 2011-12-18T12:56:16+00:00 Fix (untested) building from source tarball without alex/happy haddock's .cabal file was declaring that it needed alex and happy to build, but in the GHC source tarballs it doesn't. - - - - - 895c9a8c by David Waern at 2011-12-27T12:57:43+01:00 Go back to having a doc, sub and decl map instead of one big decl map. This setup makes more sense since when we add value bindings to the processed declarations (for type inference), we will have multiple declarations which should share documentation. Also, we already have a separate doc map for instances which we can now merge into the main doc map. Another benefit is that we don't need the DeclInfo type any longer. - - - - - 736767d9 by David Waern at 2011-12-27T13:33:41+01:00 Merge ../../../haddock Conflicts: src/Haddock/InterfaceFile.hs - - - - - 20016f79 by David Waern at 2011-12-27T13:57:23+01:00 Bump version. - - - - - 31f276fb by David Waern at 2011-12-27T13:57:32+01:00 Merge ../ghc/utils/haddock - - - - - 95b367cd by David Waern at 2011-12-27T14:57:29+01:00 Update tests following version bump. - - - - - fa3c94cd by David Waern at 2011-12-27T14:57:51+01:00 Get rid of quite unnecessary use of different lists. - - - - - 9c4d3c54 by David Waern at 2011-12-27T15:26:42+01:00 Cleanup. - - - - - 2caf9f90 by David Waern at 2011-12-27T16:18:05+01:00 Wibbles. - - - - - 3757d09b by David Waern at 2011-12-27T20:50:26+01:00 Complete support for inferring types for top-level bindings. - - - - - 53418734 by David Waern at 2011-12-28T15:02:13+01:00 Minor fixes and cleanup. - - - - - 0c9d0385 by Ian Lynagh at 2012-01-03T18:31:29+00:00 Follow rename of Instance to ClsInst in GHC - - - - - c9bc969a by Simon Hengel at 2012-01-12T21:28:14+01:00 Make sure that generated xhtml is valid (close haskell/haddock#186) Thanks to Phyx. - - - - - 836a0b9a by David Waern at 2012-02-01T02:30:05+01:00 Fix bug introduced in my recent refactoring. - - - - - c7d733eb by David Waern at 2012-02-01T02:30:26+01:00 Cleanup mkMaps and avoid quadratic behaviour. - - - - - da3cda8f by David Waern at 2012-02-01T02:56:56+01:00 Require ghc >= 7.4. - - - - - 83a3287e by David Waern at 2012-02-01T02:57:36+01:00 Update CHANGES. - - - - - 93408f0b by Simon Hengel at 2012-02-04T00:48:04+01:00 Add reference renderings - - - - - 49d00d2c by Simon Hengel at 2012-02-04T00:48:25+01:00 Set unit tests for parser back to work - - - - - eb450980 by Simon Hengel at 2012-02-04T00:49:07+01:00 Add .gitignore - - - - - a841602c by Simon Hengel at 2012-02-04T00:49:16+01:00 Add .ghci file - - - - - 8861199d by Simon Hengel at 2012-02-04T00:49:29+01:00 tests/html-tests/copy.hs: Use mapM_ instead of mapM So we do net get a list of () on stdout when running with runhaskell. - - - - - b477d9b5 by Simon Hengel at 2012-02-04T00:49:46+01:00 Remove index files from golden tests - - - - - 9dbda34e by Simon Hengel at 2012-02-04T00:49:57+01:00 Add /tests/html-tests/tests/*index*.ref to .gitignore - - - - - a9434817 by Simon Hengel at 2012-02-04T00:50:04+01:00 Add DocWarning to Doc The Xhtml backend has special markup for that, Hoogle and LaTeX reuse what we have for DocEmphasis. - - - - - de2fb6fa by Simon Hengel at 2012-02-04T00:50:13+01:00 Add support for module warnings - - - - - 0640920e by Simon Hengel at 2012-02-04T00:50:21+01:00 Add tests for module warnings - - - - - 30ce0d77 by Simon Hengel at 2012-02-04T00:50:29+01:00 Add support for warnings - - - - - bb367960 by Simon Hengel at 2012-02-04T00:50:37+01:00 Add tests for warnings - - - - - 6af1dc2d by Simon Hengel at 2012-02-04T00:50:50+01:00 Expand type signatures in export list (fixes haskell/haddock#192) - - - - - a06cbf25 by Simon Hengel at 2012-02-04T00:51:04+01:00 Expand type signatures for modules without explicit export list - - - - - 57dda796 by Simon Hengel at 2012-02-04T00:51:15+01:00 Remove obsolete TODO - - - - - 270c3253 by David Waern at 2012-02-04T00:51:24+01:00 Fix issues in support for warnings. * Match against local names only. * Simplify (it's OK to map over the warnings). - - - - - 683634bd by David Waern at 2012-02-04T00:55:11+01:00 Some cleanup and make sure we filter warnings through exports. - - - - - 210cb4ca by David Waern at 2012-02-04T03:01:30+01:00 Merge branch 'fix-for-186' of https://github.com/sol/haddock into ghc-7.4 - - - - - e8db9031 by David Waern at 2012-02-04T03:07:51+01:00 Style police. - - - - - 261f9462 by David Waern at 2012-02-04T03:20:16+01:00 Update tests. - - - - - 823cfc7c by David Waern at 2012-02-04T03:21:12+01:00 Use mapM_ in accept.hs as well. - - - - - 873dd619 by David Waern at 2012-02-04T03:21:33+01:00 Remove copy.hs - use accept.hs instead. - - - - - 0e31a14a by David Waern at 2012-02-04T03:47:33+01:00 Use <> instead of mappend. - - - - - 2ff7544f by David Waern at 2012-02-04T03:48:55+01:00 Remove code for older ghc versions. - - - - - dacf2786 by David Waern at 2012-02-04T15:52:51+01:00 Clean up some code from last SoC project. - - - - - 00cbb117 by David Waern at 2012-02-04T21:43:49+01:00 Mostly hlint-inspired cleanup. - - - - - 7dc86cc2 by Simon Peyton Jones at 2012-02-06T09:14:41+00:00 Track changes in HsDecls - - - - - f91f82fe by Ian Lynagh at 2012-02-16T13:40:11+00:00 Follow changes in GHC caused by the CAPI CTYPE pragma - - - - - a0ea6b0b by Ian Lynagh at 2012-02-22T02:26:12+00:00 Follow changes in GHC - - - - - b23b07d1 by Simon Peyton Jones at 2012-03-02T16:36:41+00:00 Follow changes in data representation from the big PolyKinds commit - - - - - 43406022 by Simon Hengel at 2012-03-05T11:18:34+01:00 Save/restore global state for static flags when running GHC actions This is necessary if we want to run createInterfaces (from Documentation.Haddock) multiple times in the same process. - - - - - 9fba16fe by Paolo Capriotti at 2012-03-06T10:57:33+00:00 Update .gitignore. - - - - - a9325044 by Simon Peyton Jones at 2012-03-14T17:35:42+00:00 Follow changes to tcdKindSig (Trac haskell/haddock#5937) - - - - - fd48065a by Iavor Diatchki at 2012-03-15T22:43:35-07:00 Add support for type-level literals. - - - - - 2e8206dd by Simon Peyton Jones at 2012-03-16T14:18:22+00:00 Follow changes to tcdKindSig (Trac haskell/haddock#5937) - - - - - 93e13319 by Simon Peyton Jones at 2012-03-17T01:04:05+00:00 Merge branch 'master' of http://darcs.haskell.org//haddock Conflicts: src/Haddock/Convert.hs - - - - - d253fa71 by Iavor Diatchki at 2012-03-19T20:12:18-07:00 Merge remote-tracking branch 'origin/master' into type-nats - - - - - fc40acc8 by Iavor Diatchki at 2012-03-19T20:31:27-07:00 Add a missing case for type literals. - - - - - fd2ad699 by Iavor Diatchki at 2012-03-24T13:28:29-07:00 Rename variable to avoid shadowing warning. - - - - - 9369dd3c by Simon Peyton Jones at 2012-03-26T09:14:23+01:00 Follow refactoring of TyClDecl/HsTyDefn - - - - - 38825ca5 by Simon Peyton Jones at 2012-03-26T09:14:37+01:00 Merge branch 'master' of http://darcs.haskell.org//haddock - - - - - 4324ac0f by David Waern at 2012-04-01T01:51:19+02:00 Disable unicode test. - - - - - 3165b750 by David Waern at 2012-04-01T01:51:34+02:00 Take reader environment directly from TypecheckedSource. - - - - - 213b644c by David Waern at 2012-04-01T01:55:20+02:00 Cleanup. - - - - - 3118b4ba by David Waern at 2012-04-01T02:16:15+02:00 Don't filter out unexported names from the four maps - fixes a regression. - - - - - d6524e17 by David Waern at 2012-04-01T02:40:34+02:00 Fix crash when using --qual. Naughty GHC API! - - - - - ea3c43d8 by Henning Thielemann at 2012-04-01T13:03:07+02:00 add QualOption type for distinction between qualification argument given by the user and the actual qualification for a concrete module - - - - - 5422ff05 by Henning Thielemann at 2012-04-01T16:25:02+02:00 emit an error message when the --qual option is used incorrectly - - - - - 026e3404 by David Waern at 2012-04-01T18:10:30+02:00 Don't crash on unicode strings in doc comments. - - - - - ce006632 by David Waern at 2012-04-01T20:13:35+02:00 Add test for --ignore-all-exports flag/ignore-exports pragma. - - - - - 6e4dd33c by David Waern at 2012-04-01T20:21:03+02:00 Merge branch 'dev' of https://github.com/sol/haddock into ghc-7.4 - - - - - 734ae124 by Henning Thielemann at 2012-04-01T20:22:10+02:00 Merge branch 'ghc-7.4' of http://darcs.haskell.org/haddock into ghc-7.4 - - - - - 622f9ba5 by David Waern at 2012-04-01T21:26:13+02:00 Merge http://code.haskell.org/~thielema/haddock/ into ghc-7.4 - - - - - 55ce17cb by Henning Thielemann at 2012-04-01T22:03:25+02:00 'abbreviate' qualification style - basic support Currently we ignore the package a module is imported from. This means that a module import would shadow another one with the same module name from a different package. - - - - - c85314ef by David Waern at 2012-04-01T22:05:12+02:00 Check qualification option before processing modules. - - - - - ae4b626c by Henning Thielemann at 2012-04-02T00:19:36+02:00 abbreviated qualification: use Packages.lookupModuleInAllPackages for finding the package that a module belongs to - - - - - 60bdbcf5 by Henning Thielemann at 2012-04-02T00:25:31+02:00 Merge branch 'ghc-7.4' of http://darcs.haskell.org/haddock into ghc-7.4 - - - - - df44301d by Henning Thielemann at 2012-04-02T00:29:05+02:00 qualification style 'abbreviated' -> 'aliased' - - - - - f4192a64 by David Waern at 2012-04-02T01:05:47+02:00 Merge http://code.haskell.org/~thielema/haddock/ into ghc-7.4 - - - - - 7ba09067 by David Terei at 2012-04-04T15:08:21-07:00 Fix reporting of modules safe haskell mode (#5989) - - - - - d0cc33d0 by David Terei at 2012-04-06T15:50:41+01:00 Fix reporting of modules safe haskell mode (#5989) - - - - - 6e3434c5 by Simon Peyton Jones at 2012-04-20T18:37:46+01:00 Track changes in HsSyn - - - - - 22014ed0 by Simon Peyton Jones at 2012-05-11T22:45:15+01:00 Follow changes to LHsTyVarBndrs - - - - - d9a07b24 by David Waern at 2012-05-15T01:46:35+02:00 Merge branch 'ghc-7.4' of http://darcs.haskell.org/haddock into ghc-7.4 - - - - - a6c4ebc6 by David Waern at 2012-05-16T02:18:32+02:00 Update CHANGES. - - - - - 8e181d29 by David Waern at 2012-05-16T02:27:56+02:00 Merge http://code.haskell.org/~thielema/haddock/ into ghc-7.4 - - - - - e358210d by David Waern at 2012-05-16T02:35:33+02:00 Mention the new aliased --qual mode in CHANGES. - - - - - efd36a28 by David Waern at 2012-05-16T21:33:13+02:00 Bump version number. - - - - - d6b3af14 by Simon Hengel at 2012-05-17T19:08:20+02:00 Add test for deprecated record field - - - - - 927f800e by Simon Hengel at 2012-05-17T19:08:20+02:00 Use >>= instead of fmap and join - - - - - 048b41d5 by Simon Hengel at 2012-05-17T19:08:20+02:00 newtype-wrap Doc nodes for things that may have warnings attached - - - - - e3a89fc3 by Simon Hengel at 2012-05-17T19:08:20+02:00 Attach warnings to `Documentation` type - - - - - 5d4cc43d by Simon Hengel at 2012-05-17T19:08:20+02:00 Simplify lookupWarning - - - - - cf8ae69d by Simon Hengel at 2012-05-17T19:08:20+02:00 Add test for haskell/haddock#205 - - - - - cb409b19 by Simon Peyton Jones at 2012-05-25T08:30:11+01:00 Follow changes in LHsTyVarBndrs - - - - - 2d5f4179 by Simon Hengel at 2012-05-26T19:21:29+02:00 Add Applicative instance for (GenRnM a) - - - - - e4373060 by Simon Hengel at 2012-05-26T19:21:33+02:00 Use a map for warnings, as suggested by @waern - - - - - 597a68c7 by Simon Hengel at 2012-05-27T08:48:24+02:00 Add an optional label to URLs - - - - - ef1ac7fe by Simon Hengel at 2012-05-27T08:48:24+02:00 Add support for hyperlink labels to parser - - - - - 41f2adce by Simon Hengel at 2012-05-27T08:48:24+02:00 Add golden test for hyperlinks - - - - - 83d5e764 by Simon Hengel at 2012-05-27T08:50:02+02:00 Use LANGUAGE pragmas instead of default-extensions in cabal file - - - - - ddb755e5 by Simon Hengel at 2012-05-27T08:50:02+02:00 Fix typo in comment - - - - - 110676b4 by Simon Hengel at 2012-05-27T08:50:02+02:00 Add a type signature for a where-binding - - - - - 7d9ba2a0 by Ian Lynagh at 2012-06-12T14:38:01+01:00 Follow changes in GHC - - - - - 47c704f2 by Ian Lynagh at 2012-06-12T18:52:16+01:00 Follow changes in GHC - - - - - e1efe1ab by Simon Peyton Jones at 2012-06-13T17:25:29+01:00 Follow changes for the implementation of implicit parameters - - - - - 69abc81c by Ian Lynagh at 2012-06-19T22:52:58+01:00 Follow changes in base - - - - - 9d074a21 by Paolo Capriotti at 2012-06-22T18:26:47+01:00 Use right docMap to get decl documentation. - - - - - e3292ef6 by Ian Lynagh at 2012-07-15T01:31:19+01:00 Follow changes in GHC - - - - - ceae56b0 by Ian Lynagh at 2012-07-16T21:22:48+01:00 Fix haddock following some GHC changes Passing _|_ as the Settings for defaultDynFlags no longer works well enough - - - - - 9df72735 by Paolo Capriotti at 2012-07-19T16:49:32+01:00 Forward port changes from stable. - - - - - 572f5fcf by Ian Lynagh at 2012-07-19T20:38:26+01:00 Merge branch 'master' of darcs.haskell.org:/srv/darcs//haddock - - - - - 9195aca4 by Paolo Capriotti at 2012-07-20T10:27:28+01:00 Update dependencies. - - - - - 33db3923 by Ian Lynagh at 2012-07-20T17:54:43+01:00 Build with GHC 7.7 - - - - - 925a2cea by David Waern at 2012-07-23T16:50:40+02:00 Merge branch 'dev' of https://github.com/sol/haddock into ghc-7.6 Conflicts: src/Haddock/InterfaceFile.hs - - - - - d710ef97 by David Waern at 2012-07-23T16:52:07+02:00 Bump version number. - - - - - eb0c2f83 by David Waern at 2012-07-23T16:57:58+02:00 Update CHANGES. - - - - - b3f56943 by Roman Cheplyaka at 2012-07-27T13:00:13+03:00 Hide "internal" instances This fixes haskell/haddock#37 (http://trac.haskell.org/haddock/ticket/37) Precisely, we show an instance iff its class and all the types are exported by non-hidden modules. - - - - - a70aa412 by Roman Cheplyaka at 2012-07-27T13:00:13+03:00 Tests for hiding instances (#37) - - - - - c0f4aa58 by Simon Hengel at 2012-07-27T13:00:13+03:00 Add an other test for hiding instances (#37) - - - - - a7ed6268 by Ian Lynagh at 2012-08-07T14:48:13+01:00 Follow changes in GHC - - - - - 0ab30d38 by Ian Lynagh at 2012-08-13T22:12:27+01:00 Improve haddock memory usage - - - - - 0eaa4e30 by Ian Lynagh at 2012-08-13T23:58:46+01:00 Improve haddock memory usage - - - - - 659d26cf by Ian Lynagh at 2012-08-14T13:16:48+01:00 Remove some temporary pragmas I accidentally recorded - - - - - d97fceb6 by Simon Hengel at 2012-08-25T13:19:34+02:00 Add missing dependency to library - - - - - 4c910697 by Simon Hengel at 2012-08-28T07:39:14+02:00 Move .ghci to project root - - - - - fc3c601a by Simon Hengel at 2012-08-28T07:39:14+02:00 accept.hs: Ignore some files - - - - - 1af9b984 by Simon Hengel at 2012-08-28T07:40:04+02:00 Update reference renderings (bump version) - - - - - 980dc253 by Simon Hengel at 2012-08-28T07:40:32+02:00 Update reference renderings (remove links for ()) - - - - - 33651dbf by Simon Hengel at 2012-08-28T07:41:50+02:00 Update documentation of `runInteractiveProcess` in reference rendering - - - - - 7ab25078 by David Waern at 2012-09-07T10:38:50+02:00 Merge branch 'hiddenInstances2' of http://github.com/feuerbach/haddock into ghc-7.6 - - - - - c3de3a4b by David Waern at 2012-09-07T14:29:27+02:00 Follow changes in GHC. - - - - - 298c43ac by David Waern at 2012-09-07T14:59:24+02:00 Update CHANGES. - - - - - e797993a by David Waern at 2012-09-07T15:21:30+02:00 Update ANNOUNCE. - - - - - d0b44790 by David Waern at 2012-09-07T15:22:43+02:00 Merge branch 'hidden-instances' into ghc-7.6 - - - - - 41a4adc8 by Simon Hengel at 2012-09-08T12:08:37+02:00 Update doc/README - - - - - 71ad1040 by Simon Hengel at 2012-09-08T12:17:17+02:00 Add documentation for URL labels - - - - - 9bb41afd by Simon Peyton Jones at 2012-09-20T18:14:26+01:00 Follow data type changes in the tc-untouchables branch Relating entirely to SynTyConRhs - - - - - b8139bfa by Simon Hengel at 2012-09-21T14:24:16+02:00 Disable Unicode test for now - - - - - a5fafdd7 by Simon Hengel at 2012-09-21T14:35:45+02:00 Update TypeOperators test for GHC 7.6.1 Type operators can't be used as type variables anymore! - - - - - 6ccf0025 by Simon Hengel at 2012-09-21T16:02:24+02:00 Remove (Monad (Either e)) instance from ref. rendering of CrossPackageDocs I do not really understand why the behavior changed, so I'll open a ticket, so that we can further investigate. - - - - - b5c6c138 by Ian Lynagh at 2012-09-27T02:00:57+01:00 Follow changes in GHC build system - - - - - b98eded0 by David Waern at 2012-09-27T15:37:02+02:00 Merge branch 'ghc-7.6' of http://darcs.haskell.org/haddock into ghc-7.6 - - - - - 76cc2051 by David Waern at 2012-09-27T15:48:19+02:00 Update hidden instances tests. - - - - - aeaa1c59 by David Waern at 2012-09-28T10:21:32+02:00 Make API buildable with GHC 7.6. - - - - - d76be1b0 by Simon Peyton Jones at 2012-09-28T15:57:05+01:00 Merge remote-tracking branch 'origin/master' into tc-untouchables - - - - - a1922af8 by David Waern at 2012-09-28T19:50:20+02:00 Fix spurious superclass constraints bug. - - - - - bc41bdbb by Simon Hengel at 2012-10-01T11:30:51+02:00 Remove old examples - - - - - bed7d3dd by Simon Hengel at 2012-10-01T11:30:51+02:00 Adapt parsetests for GHC 7.6.1 - - - - - dcdb22bb by Simon Hengel at 2012-10-01T11:30:51+02:00 Add test-suite section for parsetests to cabal file + get rid of HUnit dependency - - - - - 1e5263c9 by Simon Hengel at 2012-10-01T11:30:51+02:00 Remove test flag from cabal file This was not really used. - - - - - 4beee98b by David Waern at 2012-09-28T23:42:28+02:00 Merge branch 'ghc-7.6' of http://darcs.haskell.org/haddock into ghc-7.6 - - - - - 11dd2256 by Ian Lynagh at 2012-10-03T16:17:35+01:00 Follow change in GHC build system - - - - - fbd77962 by Simon Hengel at 2012-10-03T18:49:40+02:00 Remove redundant dependency from cabal file - - - - - 09218989 by Simon Hengel at 2012-10-04T16:03:05+02:00 Fix typo - - - - - 93a2d5f9 by Simon Hengel at 2012-10-04T16:11:41+02:00 Remove trailing whitespace from cabal file - - - - - c8b46cd3 by Simon Hengel at 2012-10-04T16:12:17+02:00 Export Haddock's main entry point from library - - - - - b411e77b by Simon Hengel at 2012-10-04T16:29:46+02:00 Depend on library for executable The main motivation for this is to increase build speed. In GHC's source tree the library is not build, but all modules are now required for the executable, so that GHC's validate will now detect build failures for the library. - - - - - f8f0979f by Simon Hengel at 2012-10-05T00:32:57+02:00 Set executable flag for Setup.lhs - - - - - dd045998 by Simon Hengel at 2012-10-07T16:44:06+02:00 Extend rather than set environment when running HTML tests On some platforms (e.g. ppc64) GHC requires gcc in the path. - - - - - 7b39c3ae by Simon Hengel at 2012-10-07T17:05:45+02:00 cross-package test: re-export IsString instead of Monad There is a monad instance for Q, which is not available on platforms that do not have GHCi support. This caused CrossPackageDocs to fail on those platforms. Re-exporting IsString should test the same thing, but it works on all platforms. - - - - - 0700c605 by Simon Hengel at 2012-10-07T19:06:34+02:00 runtests.hs: Fix some warnings - - - - - f78eca79 by Simon Hengel at 2012-10-07T19:06:34+02:00 runtests.hs: Make -Wall proof - - - - - 6beec041 by Simon Hengel at 2012-10-07T19:06:34+02:00 runtests.hs: Use listToMaybe/fromMaybe instead of safeHead/maybe - - - - - 44b8ce86 by Ian Lynagh at 2012-10-08T21:59:46+01:00 Follow changes in GHC - - - - - 6da5f702 by Simon Hengel at 2012-10-09T11:16:19+02:00 Update .ghci - - - - - 9ac1a1b9 by Kazu Yamamoto at 2012-10-09T12:45:31+02:00 Add markup support for properties - - - - - 1944cb42 by Simon Hengel at 2012-10-09T12:45:31+02:00 Simplify lexing/parsing of properties In contrast to what we do for examples, we do not really need to capture the "prompt" here. - - - - - bffd8e62 by Simon Hengel at 2012-10-09T13:40:14+02:00 Add HTML test for properties - - - - - 2fe9c5cb by Simon Hengel at 2012-10-09T13:40:21+02:00 Add unit tests for properties - - - - - 874e361b by Simon Hengel at 2012-10-09T13:40:33+02:00 Bump interface version - - - - - 2506cc37 by Simon Hengel at 2012-10-09T15:15:04+02:00 Fix parser bug - - - - - 743d2b7d by Simon Hengel at 2012-10-09T15:31:06+02:00 Allow to load interface files with compatible versions - - - - - 981a1660 by Simon Hengel at 2012-10-10T10:32:05+02:00 Export more types from Documentation.Haddock (fixes haskell/haddock#216) - - - - - dff7dc76 by Simon Hengel at 2012-10-10T11:15:19+02:00 Update ANNOUNCE and CHANGES - - - - - edd2bb01 by Simon Hengel at 2012-10-10T11:22:50+02:00 Bump version - - - - - 5039163b by Simon Hengel at 2012-10-10T13:56:04+02:00 Fix typo in documentation - - - - - e4ce34da by Simon Hengel at 2012-10-10T14:28:35+02:00 Add documentation for properties - - - - - 9555ebca by Simon Hengel at 2012-10-11T10:49:04+02:00 Remove redundant if-defs, more source documentation - - - - - 87aa67e1 by Simon Hengel at 2012-10-11T12:32:51+02:00 Adapt cabal file - - - - - c44c1dee by Simon Hengel at 2012-10-11T12:41:58+02:00 Require ghc 7.6 - - - - - 8383bc34 by Simon Hengel at 2012-10-11T12:50:24+02:00 Bump version - - - - - 1030eb38 by Simon Hengel at 2012-10-11T12:55:44+02:00 Update ANNOUNCE and CHANGES - - - - - 74955088 by Simon Hengel at 2012-10-12T09:49:31+02:00 Improve note about `binaryInterfaceVersion` (thanks David) - - - - - ee30f6b7 by Simon Hengel at 2012-10-13T13:40:59+02:00 Update version in html tests, rpm spec file, and user manual - - - - - f2861f18 by Simon Hengel at 2012-10-13T14:40:33+02:00 Remove unused MonadFix constraint - - - - - dfdf1a74 by Simon Hengel at 2012-10-13T15:15:38+02:00 Minor code simplification - - - - - 4ecd1e70 by Simon Hengel at 2012-10-13T15:33:43+02:00 Increase code locality - - - - - f7df5cc9 by Simon Hengel at 2012-10-13T16:03:12+02:00 Minor code simplification - - - - - e737eb6e by Simon Hengel at 2012-10-13T19:03:04+02:00 Handle HsExplicitListTy in renameer (fixes haskell/haddock#213) - - - - - c2dc8f17 by Simon Hengel at 2012-10-13T20:46:31+02:00 Better error messages - - - - - 14d48b4c by Simon Hengel at 2012-10-14T00:21:07+02:00 Simplify RnM type - - - - - 6c2cc547 by Simon Hengel at 2012-10-14T00:23:35+02:00 Simplify lookupRn - - - - - bc77ce85 by Simon Hengel at 2012-10-14T01:51:32+02:00 Organize unite tests hierarchically - - - - - 2306d117 by Simon Hengel at 2012-10-14T10:34:58+02:00 Handle more cases in renameType - - - - - 8a864203 by Simon Hengel at 2012-10-14T11:47:59+02:00 Add mini_HiddenInstances.html.ref and mini_HiddenInstancesB.html.ref - - - - - 3a978eca by Simon Hengel at 2012-10-14T11:49:28+02:00 Add /tests/html-tests/output/ to .gitignore - - - - - db18888a by Simon Hengel at 2012-10-14T13:38:21+02:00 Allow haddock markup in deprecation messages - - - - - e7cfee9f by Simon Hengel at 2012-10-14T14:00:23+02:00 If parsing of deprecation message fails, include it verbatim - - - - - 242a85be by Simon Hengel at 2012-10-14T14:13:24+02:00 Add description for PruneWithWarning test - - - - - 43d33df1 by Simon Hengel at 2012-10-14T15:40:53+02:00 Minor formatting change - - - - - 22768c44 by Simon Hengel at 2012-10-14T16:03:43+02:00 Properly handle deprecation messages for re-exported things (fixes haskell/haddock#220) - - - - - cb4b9111 by Simon Hengel at 2012-10-14T17:30:28+02:00 Add build artifacts for documentation to .gitignore - - - - - 854cd8de by Simon Hengel at 2012-10-14T23:34:51+02:00 unit-tests: Improve readability Add IsString instance for (Doc RdrName) + use <> instead of DocAppend. - - - - - c4446d54 by Simon Hengel at 2012-10-14T23:37:21+02:00 unit-tests: Minor refactoring Rename parse to parseParas. - - - - - 04f2703c by Simon Hengel at 2012-10-15T00:36:42+02:00 Fix typo - - - - - 3d109e44 by Simon Hengel at 2012-10-15T10:30:07+02:00 Add description for DeprecatedReExport test - - - - - 84f0985c by Simon Hengel at 2012-10-15T14:54:19+02:00 Move resources to /resources directory - - - - - a5de7ca6 by Simon Hengel at 2012-10-15T15:46:18+02:00 Move HTML tests to directory /html-test/ - - - - - e21f727d by Simon Hengel at 2012-10-15T19:32:42+02:00 Move HTML reference renderings to /html-test/ref/ - - - - - 3a3c6c75 by Simon Hengel at 2012-10-15T19:32:42+02:00 Copy css, images, etc. on accept - - - - - 40ead6dc by Simon Hengel at 2012-10-15T19:32:42+02:00 Move unit tests to /test directory - - - - - 99a28231 by Simon Hengel at 2012-10-15T19:32:42+02:00 Fix Setup.lhs /usr/bin/runhaskell is not installed on all systems. - - - - - 95faf45e by Simon Hengel at 2012-10-15T19:32:42+02:00 Make test management scripts more robust * They are now independent from the current directory, and hence can be called from everywhere * On UNIX/Linux they can now be run as scripts - - - - - 027aaa2d by Simon Hengel at 2012-10-15T19:53:40+02:00 Add 'dev' flag to cabal file, that builds without -O2 That way --disable-optimization can be used, which decreases build time considerably. - - - - - e0266ede by Simon Hengel at 2012-10-15T20:03:43+02:00 Add test case for "spurious superclass constraints bug" - - - - - 52a2aa92 by Simon Hengel at 2012-10-15T20:28:55+02:00 Adapt accept.lhs, so that it ignores more index files - - - - - 53530781 by Simon Hengel at 2012-10-15T20:49:39+02:00 Rename html-test/runtests.lhs to html-test/run.lhs - - - - - 84518797 by Simon Hengel at 2012-10-15T20:49:39+02:00 Move source files for HTML tests to html-test/src - - - - - a911dc6c by Simon Hengel at 2012-10-15T20:49:39+02:00 Adapt output directory for HTML tests - - - - - d3c15857 by Ian Lynagh at 2012-10-16T16:54:43+01:00 Follow dopt->gopt rename - - - - - 956665a5 by Simon Hengel at 2012-10-18T08:42:48+02:00 Update html-test/README - - - - - 903b1029 by Simon Hengel at 2012-10-18T08:50:26+02:00 Use markdown for html-test/README - - - - - 150b4d63 by Ian Lynagh at 2012-10-18T16:36:00+01:00 Follow changes in GHC: 'flags' has been renamed 'generalFlags' - - - - - 41e04ff9 by Simon Hengel at 2012-11-28T09:54:35+01:00 Export missing types from Documentation.Haddock - - - - - 9be59237 by Ian Lynagh at 2012-11-30T23:20:47+00:00 Update dependencies - - - - - e06842f5 by Simon Hengel at 2012-12-07T20:58:05+01:00 Bump version - - - - - e3dbede0 by Simon Hengel at 2012-12-07T20:58:05+01:00 Add missing test files to cabal file (fixes haskell/haddock#230) - - - - - ee0dcca7 by Simon Hengel at 2012-12-07T20:58:05+01:00 Update CHANGES - - - - - 51601bdb by Simon Peyton Jones at 2012-12-19T17:28:35+00:00 Track changes in UNPACK pragma stuff - - - - - f2573bc1 by Richard Eisenberg at 2012-12-21T20:56:25-05:00 Implement overlapping type family instances. An ordered, overlapping type family instance is introduced by 'type instance where', followed by equations. See the new section in the user manual (7.7.2.2) for details. The canonical example is Boolean equality at the type level: type family Equals (a :: k) (b :: k) :: Bool type instance where Equals a a = True Equals a b = False A branched family instance, such as this one, checks its equations in order and applies only the first the matches. As explained in the note [Instance checking within groups] in FamInstEnv.lhs, we must be careful not to simplify, say, (Equals Int b) to False, because b might later unify with Int. This commit includes all of the commits on the overlapping-tyfams branch. SPJ requested that I combine all my commits over the past several months into one monolithic commit. The following GHC repos are affected: ghc, testsuite, utils/haddock, libraries/template-haskell, and libraries/dph. Here are some details for the interested: - The definition of CoAxiom has been moved from TyCon.lhs to a new file CoAxiom.lhs. I made this decision because of the number of definitions necessary to support BranchList. - BranchList is a GADT whose type tracks whether it is a singleton list or not-necessarily-a-singleton-list. The reason I introduced this type is to increase static checking of places where GHC code assumes that a FamInst or CoAxiom is indeed a singleton. This assumption takes place roughly 10 times throughout the code. I was worried that a future change to GHC would invalidate the assumption, and GHC might subtly fail to do the right thing. By explicitly labeling CoAxioms and FamInsts as being Unbranched (singleton) or Branched (not-necessarily-singleton), we make this assumption explicit and checkable. Furthermore, to enforce the accuracy of this label, the list of branches of a CoAxiom or FamInst is stored using a BranchList, whose constructors constrain its type index appropriately. I think that the decision to use BranchList is probably the most controversial decision I made from a code design point of view. Although I provide conversions to/from ordinary lists, it is more efficient to use the brList... functions provided in CoAxiom than always to convert. The use of these functions does not wander far from the core CoAxiom/FamInst logic. BranchLists are motivated and explained in the note [Branched axioms] in CoAxiom.lhs. - The CoAxiom type has changed significantly. You can see the new type in CoAxiom.lhs. It uses a CoAxBranch type to track branches of the CoAxiom. Correspondingly various functions producing and consuming CoAxioms had to change, including the binary layout of interface files. - To get branched axioms to work correctly, it is important to have a notion of type "apartness": two types are apart if they cannot unify, and no substitution of variables can ever get them to unify, even after type family simplification. (This is different than the normal failure to unify because of the type family bit.) This notion in encoded in tcApartTys, in Unify.lhs. Because apartness is finer-grained than unification, the tcUnifyTys now calls tcApartTys. - CoreLinting axioms has been updated, both to reflect the new form of CoAxiom and to enforce the apartness rules of branch application. The formalization of the new rules is in docs/core-spec/core-spec.pdf. - The FamInst type (in types/FamInstEnv.lhs) has changed significantly, paralleling the changes to CoAxiom. Of course, this forced minor changes in many files. - There are several new Notes in FamInstEnv.lhs, including one discussing confluent overlap and why we're not doing it. - lookupFamInstEnv, lookupFamInstEnvConflicts, and lookup_fam_inst_env' (the function that actually does the work) have all been more-or-less completely rewritten. There is a Note [lookup_fam_inst_env' implementation] describing the implementation. One of the changes that affects other files is to change the type of matches from a pair of (FamInst, [Type]) to a new datatype (which now includes the index of the matching branch). This seemed a better design. - The TySynInstD constructor in Template Haskell was updated to use the new datatype TySynEqn. I also bumped the TH version number, requiring changes to DPH cabal files. (That's why the DPH repo has an overlapping-tyfams branch.) - As SPJ requested, I refactored some of the code in HsDecls: * splitting up TyDecl into SynDecl and DataDecl, correspondingly changing HsTyDefn to HsDataDefn (with only one constructor) * splitting FamInstD into TyFamInstD and DataFamInstD and splitting FamInstDecl into DataFamInstDecl and TyFamInstDecl * making the ClsInstD take a ClsInstDecl, for parallelism with InstDecl's other constructors * changing constructor TyFamily into FamDecl * creating a FamilyDecl type that stores the details for a family declaration; this is useful because FamilyDecls can appear in classes but other decls cannot * restricting the associated types and associated type defaults for a * class to be the new, more restrictive types * splitting cid_fam_insts into cid_tyfam_insts and cid_datafam_insts, according to the new types * perhaps one or two more that I'm overlooking None of these changes has far-reaching implications. - The user manual, section 7.7.2.2, is updated to describe the new type family instances. - - - - - f788d0fb by Simon Peyton Jones at 2012-12-23T15:49:58+00:00 Track changes in HsBang - - - - - ca460a0c by Simon Peyton Jones at 2012-12-23T15:50:28+00:00 Merge branch 'master' of http://darcs.haskell.org//haddock - - - - - f078fea6 by Simon Peyton Jones at 2013-01-02T08:33:13+00:00 Use InstEnv.instanceSig rather than instanceHead (name change) - - - - - 88e41305 by Simon Peyton Jones at 2013-01-14T17:10:27+00:00 Track change to HsBang type - - - - - e1ad4e19 by Kazu Yamamoto at 2013-02-01T11:59:24+09:00 Merge branch 'ghc-7.6' into ghc-7.6-merge-2 Conflicts: haddock.cabal src/Haddock/Interface/AttachInstances.hs src/Haddock/Interface/Create.hs src/Haddock/Interface/LexParseRn.hs src/Haddock/InterfaceFile.hs src/Haddock/Types.hs Only GHC HEAD can compile this. GHC 7.6.x cannot compile this. Some test fail. - - - - - 62bec012 by Kazu Yamamoto at 2013-02-06T11:12:28+09:00 Using tcSplitSigmaTy in instanceHead' (FIXME is resolved.) - - - - - 013fd2e4 by Kazu Yamamoto at 2013-02-06T17:56:21+09:00 Refactoring instanceHead'. - - - - - 3148ce0e by Kazu Yamamoto at 2013-02-07T17:45:10+09:00 Using new syntax in html-test/src/GADTRecords.hs. - - - - - 626dabe7 by Gabor Greif at 2013-02-15T22:42:01+01:00 Typo - - - - - 1eb667ae by Ian Lynagh at 2013-02-16T17:02:07+00:00 Follow changes in base - - - - - 3ef8253a by Ian Lynagh at 2013-03-01T23:23:57+00:00 Follow changes in GHC's build system - - - - - 1a265a3c by Ian Lynagh at 2013-03-03T23:12:07+00:00 Follow changes in GHC build system - - - - - 69941c79 by Max Bolingbroke at 2013-03-10T09:38:28-07:00 Use Alex 3's Unicode support to properly lex source files as UTF-8 Signed-off-by: David Waern <david.waern at gmail.com> - - - - - ea687dad by Simon Peyton Jones at 2013-03-15T14:16:10+00:00 Adapt to tcRnGetInfo returning family instances too This API change was part of the fix to Trac haskell/haddock#4175. But it offers new information to Haddock: the type-family instances, as well as the class instances, of this type. This patch just drops the new information on the floor, but there's an open opportunity to use it in the information that Haddock displays. - - - - - 971a30b0 by Andreas Voellmy at 2013-05-19T20:47:39+01:00 Fix for haskell/haddock#7879. Changed copy of utils/haddock/html/resources/html to use "cp -RL" rather than "cp -R". This allows users to run validate in a build tree, where the build tree was setup using lndir with a relative path to the source directory. - - - - - 31fb7694 by Ian Lynagh at 2013-05-19T20:47:49+01:00 Use "cp -L" when making $(INPLACE_LIB)/latex too - - - - - e9952233 by Simon Hengel at 2013-06-01T18:06:50+02:00 Add -itest to .ghci - - - - - b06873b3 by Mateusz Kowalczyk at 2013-06-01T18:06:50+02:00 Workaround for a failing build with --enable-tests. - - - - - e7858d16 by Simon Hengel at 2013-06-01T19:29:28+02:00 Fix broken test - - - - - 0690acb1 by Richard Eisenberg at 2013-06-21T14:08:25+01:00 Updates to reflect changes in HsDecls to support closed type families. - - - - - 7fd347ec by Simon Hengel at 2013-07-08T10:28:48+02:00 Fix failing test - - - - - 53ed81b6 by Simon Hengel at 2013-07-08T10:28:48+02:00 Fix failing test - - - - - 931c4f4f by Richard Eisenberg at 2013-07-24T13:15:59+01:00 Remove (error "synifyKind") to use WithinType, to allow haddock to process base. - - - - - 55a9c804 by Richard Eisenberg at 2013-08-02T15:54:55+01:00 Changes to reflect changes in GHC's type HsTyVarBndr - - - - - b6e9226c by Mathieu Boespflug at 2013-08-04T10:39:43-07:00 Output Copright and License keys in Xhtml backend. This information is as relevant in the documentation as it is in the source files themselves. Signed-off-by: David Waern <david.waern at gmail.com> - - - - - 4c66028a by David Waern at 2013-08-04T15:27:36-07:00 Bump interface file version. - - - - - 67340163 by David Waern at 2013-08-09T16:12:51-07:00 Update tests. - - - - - 2087569b by Mateusz Kowalczyk at 2013-08-25T09:24:13+02:00 Add spec tests. This adds tests for all elements we can create during regular parsing. This also adds tests for text with unicode in it. - - - - - 97f36a11 by Mateusz Kowalczyk at 2013-08-27T06:59:12+01:00 Fix ticket haskell/haddock#247. I do the same thing that the XHTML backend does: give these no special treatment and just act as if they are regular functions. - - - - - 60681b4f by Mateusz Kowalczyk at 2013-08-27T21:22:48+02:00 LaTeX tests setup - - - - - fa4c27b2 by Mateusz Kowalczyk at 2013-09-02T23:21:43+01:00 Fixes haskell/haddock#253 - - - - - 1a202490 by Mateusz Kowalczyk at 2013-09-03T01:12:50+01:00 Use Hspec instead of nanospec This is motivated by the fact that Haddock tests are not ran by the GHC's ‘validate’ script so we're pretty liberal on dependencies in that area. Full Hspec gives us some nice features such as Quickcheck integration. - - - - - 8cde3b20 by David Luposchainsky at 2013-09-08T07:27:28-05:00 Fix AMP warnings Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - d10661f2 by Herbert Valerio Riedel at 2013-09-11T15:15:01+02:00 Update Git repo URL in `.cabal` file - - - - - 16a44eb5 by Richard Eisenberg at 2013-09-17T09:34:26-04:00 Revision to reflect new role annotation syntax in GHC. - - - - - 4b9833b9 by Herbert Valerio Riedel at 2013-09-18T10:15:28+02:00 Add missing `traverse` method for `GenLocated` As `Traversable` needs at least one of `traverse` or `sequenceA` to be overridden. Signed-off-by: Herbert Valerio Riedel <hvr at gnu.org> - - - - - b71fed5d by Simon Hengel at 2013-09-18T22:43:34+02:00 Add test helper - - - - - 4fc1ea86 by Mateusz Kowalczyk at 2013-09-18T22:43:34+02:00 Fixes haskell/haddock#231 - - - - - 435872f6 by Mateusz Kowalczyk at 2013-09-18T22:43:34+02:00 Fixes haskell/haddock#256 We inject -dynamic-too into flags before we run all our actions in the GHC monad. - - - - - b8b24abb by Mateusz Kowalczyk at 2013-09-18T22:43:35+02:00 Add new field to DynFlags - - - - - 49558795 by Simon Hengel at 2013-09-18T22:43:35+02:00 Fallback to ./resources when Cabal data is not found (so that themes are found during development) - - - - - bf79d05c by Mateusz Kowalczyk at 2013-09-18T22:43:35+02:00 Fixes haskell/haddock#5 - - - - - e1baebc2 by Mateusz Kowalczyk at 2013-09-18T22:43:35+02:00 Print missing documentation. Fixes haskell/haddock#258. - - - - - 02ea74de by Austin Seipp at 2013-10-09T10:52:22-05:00 Don't consider StaticFlags when parsing arguments. Instead, discard any static flags before parsing the command line using GHC's DynFlags parser. See http://ghc.haskell.org/trac/ghc/ticket/8276 Based off a patch from Simon Hengel. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - 704fd5bb by Simon Hengel at 2013-11-09T00:15:13+01:00 Update HTML tests - - - - - f9fed49e by Simon Hengel at 2013-11-10T18:43:58+01:00 Bump version - - - - - 97ae1999 by Simon Peyton Jones at 2013-11-25T17:25:14+00:00 Track changes in HsSpliceTy data constructor - - - - - 59ad8268 by Simon Peyton Jones at 2014-01-10T18:17:43+00:00 Adapt to small change in Pretty's exports - - - - - 8b12e6aa by Simon Hengel at 2014-01-12T14:48:35-06:00 Some code simplification by using traverse - - - - - fc5ea9a2 by Simon Hengel at 2014-01-12T14:48:35-06:00 Fix warnings in test helper - - - - - 6dbb3ba5 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Add ByteString version of Attoparsec - - - - - 968d7774 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 One pass parser and tests. We remove the HTML test as it is no longer necessary. We cover the test case in spec tests and other HTML tests but keeping this around fails: this is because the new parser has different semantics there. In fact, I suspect the original behaviour was a bug that wasn't caught/fixed but simply included as-is during the testing. - - - - - 37a07c9c by Simon Hengel at 2014-01-12T14:48:35-06:00 Rename Haddock.ParseSpec to Haddock.ParserSpec - - - - - f0f68fe9 by Simon Hengel at 2014-01-12T14:48:35-06:00 Don't append newline to parseString input We also check that we have parsed everything with endOfInput. - - - - - 95d60093 by Simon Hengel at 2014-01-12T14:48:35-06:00 Fix totality, unicode, examples, paragraph parsing Also simplify specs and parsers while we're at it. Some parsers were made more generic. This commit is a part of GHC pre-merge squash, email fuuzetsu at fuuzetsu.co.uk if you need the full commit history. - - - - - 7d99108c by Simon Hengel at 2014-01-12T14:48:35-06:00 Update acceptance tests - - - - - d1b59640 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Support for bold. Conflicts: src/Haddock/Backends/Hoogle.hs src/Haddock/Interface/Rename.hs src/Haddock/Parser.hs - - - - - 4b412b39 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Allow for headings inside function documentation. LaTeX will treat the h3-h6 headings the same as we'd have to hack the style file heavily otherwise and it would make the headings tiny anyway. Hoogle upstream said they will put in the functionality on their end. Conflicts: src/Haddock/Interface/Rename.hs src/Haddock/Types.hs test/Haddock/ParserSpec.hs - - - - - fdcca428 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Per-module extension flags and language listing. Any extensions that are not enabled by a used language (Haskell2010 &c) will be shown. Furthermore, any implicitly enabled are also going to be shown. While we could eliminate this either by using the GHC API or a dirty hack, I opted not to: if a user doesn't want the implied flags to show, they are recommended to use enable extensions more carefully or individually. Perhaps this will encourage users to not enable the most powerful flags needlessly. Enabled with show-extensions. Conflicts: src/Haddock/InterfaceFile.hs - - - - - 368942a2 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Bump interface version There were some breaking changes over the last few patches so we bump the interface version. This causes a big problem with testing: 1. To generate cross package docs, we first need to generate docs for the package used. 2. To generate package docs with new interface version, we need to use Haddock which has the version bumped. 3. To get Haddock with the version bump, we first need to test cross package docs 4. GOTO 1 So the problem is the chicken and the egg problem. It seems that the only solution would be to generate some interface files on the fly but it is non-trivial. To run this test, you'll have to: * build Haddock without the test (make sure everything else passes) * rebuild the packages used in the test with your shiny new binary making sure they are visible to Haddock * remove the ‘_hidden’ suffix and re-run the tests Note: because the packages currently used for this test are those provided by GHC, it's probably non-trivial to just re-build them. Preferably something less tedious to rebuild should be used and something that is not subject to change. - - - - - 124ae7a9 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Allow for nesting of paragraphs under lists. The nesting rules are similar to Markdown's with the exception that we can not simply indent the first line of a hard wrapped indented paragraph and have it treated as if it was fully indented. The reason is differences in markup as some of our constructs care about whitespace while others just swallow everything up so it's just a lot easier to not bother with it rather than making arbitrary rules. Note that we now drop trailing for string entities inside of lists. They weren't needed and it makes the output look uniform whether we use a single or double newline between list elements. Conflicts: src/Haddock/Parser.hs test/Haddock/ParserSpec.hs - - - - - c7913535 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Allow escaping in URLs and pictures. Some tests were moved under parseString as they weren't about paragraph level markup. Conflicts: src/Haddock/Parser.hs test/Haddock/ParserSpec.hs - - - - - 32326680 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Update documentation. - - - - - fbef6406 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Update maintainer - - - - - b40e82f4 by Mateusz Kowalczyk at 2014-01-13T02:39:25-06:00 Fixes haskell/haddock#271 Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - f4eafbf8 by Gergő Érdi at 2014-01-19T15:35:16-06:00 Support for -XPatternSynonyms Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - a8939591 by Austin Seipp at 2014-01-29T08:09:04-06:00 Update CPP check for __GLASGOW_HASKELL__ Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - 30d7e9d5 by Gergő Érdi at 2014-01-31T00:15:01+08:00 <+>: Don't insert a space when concatenating empty nodes - - - - - a25ccd4d by Mateusz Kowalczyk at 2014-01-30T17:22:34+01:00 Fix @ code blocks In cases where we had some horizontal space before the closing ‘@’, the parser would not accept the block as a code block and we'd get ugly output. - - - - - 0f67305a by Mateusz Kowalczyk at 2014-01-30T17:22:34+01:00 Update tests This updates tests due to Haddock Trac haskell/haddock#271 fix and due to removal of TypeHoles as an extension from GHC. - - - - - 157322a7 by Gergő Érdi at 2014-01-31T01:03:17+08:00 Handle infix vs prefix names correctly everywhere, by explicitly specifying the context The basic idea is that "a" and "+" are either pretty-printed as "a" and "(+)" or "`a`" and "+" - - - - - aa6d9685 by Mateusz Kowalczyk at 2014-01-30T17:21:50+00:00 Correct whitespace in ‘hidden’ test for <+> change - - - - - 121872f0 by Mateusz Kowalczyk at 2014-02-09T17:59:12+00:00 Document module header. Fixes Haddock Trac haskell/haddock#270. - - - - - e3253746 by Mateusz Kowalczyk at 2014-02-10T21:37:48+00:00 Insert a space between module link and description Fixes Haddock Trac haskell/haddock#277. - - - - - 771d2384 by Mateusz Kowalczyk at 2014-02-10T23:27:21+00:00 Ensure a space between type signature and ‘Source’ This is briefly related to Haddock Trac haskell/haddock#249 and employs effectively the suggested fix _but_ it doesn't actually fix the reported issue. This commit simply makes copying the full line a bit less of a pain. - - - - - 8cda9eff by nand at 2014-02-11T15:48:30+00:00 Add support for type/data families This adds support for type/data families with their respective instances, as well as closed type families and associated type/data families. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - 3f22c510 by nand at 2014-02-11T15:53:50+00:00 Improve display of poly-kinded type operators This now displays them as (==) k a b c ... to mirror GHC's behavior, instead of the old (k == a) b c ... which was just wrong. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - effb2d6b by nand at 2014-02-11T15:56:50+00:00 Add test case for PatternSynonyms This just tests various stuff including poly-kinded patterns and operator patterns to make sure the rendering isn't broken. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - b38faf0d by Niklas Haas at 2014-02-13T21:53:32+00:00 Get rid of re-implementation of sortBy I have no idea what this was doing lying around here, and due to the usage of tuples it's actually slower, too. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - ac1e0413 by Mateusz Kowalczyk at 2014-02-13T23:57:16+00:00 Only warn about missing docs when docs are missing This fixes the ‘Missing documentation for…’ message for modules with 100% coverage. - - - - - cae2e36a by Niklas Haas at 2014-02-15T21:56:18+00:00 Add test case for inter-module type/data family instances These should show up in every place where the class is visible, and indeed they do right now. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - 8bea5c3a by Mateusz Kowalczyk at 2014-02-19T05:11:34+00:00 Use a bespoke data type to indicate fixity This deals with what I imagine was an ancient TODO and makes it much clearer what the argument actually does rather than having the user chase down the comment. - - - - - 5b52d57c by Niklas Haas at 2014-02-22T21:31:03+01:00 Strip a single leading space from bird tracks (#201) This makes bird tracks in the form > foo > bar > bat parse as if they had been written as >foo >bar >bat ie. without the leading whitespace in front of every line. Ideally we also want to look into how leading whitespace affects code blocks written using the @ @ syntax, which are currently unaffected by this patch. - - - - - 5a1315a5 by Simon Hengel at 2014-02-22T21:55:35+01:00 Turn a source code comment into specs - - - - - 784cfe58 by Mateusz Kowalczyk at 2014-02-23T05:02:22+00:00 Update test case for lifted GADT type rendering The parsing of these seems to have been fixed by GHC folk and it now renders differently. IMHO it now renders in a better way so I'm updating the test to reflect this. - - - - - c3c88c2f by Mateusz Kowalczyk at 2014-02-23T06:37:14+00:00 Don't shadow ‘strip’. -Wall complains - - - - - 293031d8 by Niklas Haas at 2014-02-23T15:21:52+01:00 Make ImplicitParams render correctly (#260) This introduces a new precedence level for single contexts (because implicit param contexts always need parens around them, but other types of contexts don't necessarily, even when alone) - - - - - 4200842d by Niklas Haas at 2014-02-23T15:37:13+01:00 Lower precedence of equality constraints This drops them to the new precedence pREC_CTX, which makes single eqaulity constraints show up as (a ~ b) => ty, in line with GHC's rendering. Additional tests added to make sure other type operators render as intended. Current behavior matches GHC - - - - - b59e3227 by Niklas Haas at 2014-02-23T16:11:22+01:00 Add RankNTypes test case to ImplicitParams.hs This test actually tests what haskell/haddock#260 originally reported - I omitted the RankNTypes scenario from the original fix because I realized it's not relevant to the underlying issue and indeed, this renders as intended now. Still good to have more tests. - - - - - c373dbf7 by Mateusz Kowalczyk at 2014-02-24T06:09:54+00:00 Fix rendering of Contents when links are present Fixes Haddock Trac haskell/haddock#267. - - - - - 9ecb0e56 by Mateusz Kowalczyk at 2014-02-24T06:26:50+00:00 Fix wording in the docs - - - - - 4f4dcd8e by Mateusz Kowalczyk at 2014-02-27T03:00:33+00:00 Change rendering of duplicate record field docs See Haddock Trac haskell/haddock#195. We now change this behaviour to only rendering the documentation attached to the first instance of a duplicate field. Perhaps we could improve this by rendering the first instance that has documentation attached to it but for now, we'll stick with this. - - - - - ad8aa609 by Niklas Haas at 2014-03-08T09:43:26+01:00 Render fixity information Affects functions, type synonyms, type families, class names, data type names, constructors, data families, associated TFs/DFs, type synonyms, pattern synonyms and everything else I could think of. - - - - - 6a39c917 by Niklas Haas at 2014-03-09T07:43:39+01:00 Reorder topDeclElem to move the source/wiki links to the top They appear in the same position due to the float: right attribute but now they're always at the top of the box instead of at the bottom. - - - - - 2d34b3b4 by Niklas Haas at 2014-03-09T07:53:46+01:00 Use optLast instead of listToMaybe for sourceUrls/wikiUrls This lets you override them using eg. cabal haddock --haddock-options, which can come in handy if you want to use a different layout or URL for your source code links than cabal-install generates. - - - - - 0eff4624 by Niklas Haas at 2014-03-09T07:53:46+01:00 Differentiate between TH splices (line-links) and regular names This adds a new type of source code link, to a specific line rather than a specific declaration/name - this is used to link to the location of a TH splice that defines a certain name. Rather hefty changes throughout and still one unresolved issue (the line URLs aren't parsed from the third form of --read-interface which means they're currently restricted to same-interface links). Not sure if this issue is really worth all the hassle, especially since we could just use line links in general. This commit also contains some cleanup/clarification of the types in Haddock.Backends.Xhtml.Decl and shortens some overlong lines in the process. Notably, the Bool parameter was replaced by a Unicode type synonym to help clarify its presence in type signatures. - - - - - 66d6f77b by Niklas Haas at 2014-03-09T20:02:43+01:00 Group similar fixities together Identical fixities declared for the same line should now render using syntax like: infix 4 <, >=, >, <= - - - - - 6587f9f5 by Mateusz Kowalczyk at 2014-03-10T04:24:18+00:00 Update changelog - - - - - 7387ddad by Niklas Haas at 2014-03-11T10:26:04+01:00 Include fixity information in the Interface file This resolves fixity information not appearing across package borders. The binary file version has been increased accordingly. - - - - - ab46ef44 by Niklas Haas at 2014-03-11T10:26:04+01:00 Update changelog - - - - - 565cab6f by Niklas Haas at 2014-03-11T10:26:04+01:00 Update appearance of fixity annotations This moves them in-line with their corresponding lines, similar to a presentation envision by @hvr and described in #ghc. Redundant operator names are also omitted when no ambiguity is present. - - - - - 5d7afd67 by Niklas Haas at 2014-03-11T10:26:05+01:00 Filter family instances of hidden types Currently, this check does not extend to hidden right hand sides, although it probably should hide them in that case. - - - - - ec291b0c by Niklas Haas at 2014-03-11T10:26:05+01:00 Add documentation for --source-entity-line - - - - - 0922e581 by Niklas Haas at 2014-03-11T10:37:32+01:00 Revert "Reorder topDeclElem to move the source/wiki links to the top" This reverts commit 843c42c4179526a2ad3526e4c7d38cbf4d50001d. This change is no longer needed with the new rendering style, and it messes with copy/pasting lines. - - - - - 30618e8b by Mateusz Kowalczyk at 2014-03-11T09:41:07+00:00 Bump version to 2.15.0 - - - - - adf3f1bb by Mateusz Kowalczyk at 2014-03-11T09:41:09+00:00 Fix up some whitespace - - - - - 8905f57d by Niklas Haas at 2014-03-13T19:18:06+00:00 Hide RHS of TFs with non-exported right hand sides Not sure what to do about data families yet, since technically it would not make a lot of sense to display constructors that cannot be used by the user. - - - - - 5c44d5c2 by Niklas Haas at 2014-03-13T19:18:08+00:00 Add UnicodeSyntax alternatives for * and -> I could not find a cleaner way to do this other than checking for string equality with the given built-in types. But seeing as it's actually equivalent to string rewriting in GHC's implementation of UnicodeSyntax, it's probably fitting. - - - - - b04a63e6 by Niklas Haas at 2014-03-13T19:18:10+00:00 Display minimal complete definitions for type classes This corresponds to the new {-# MINIMAL #-} pragma present in GHC 7.8+. I also cleaned up some of the places in which ExportDecl is used to make adding fields easier in the future. Lots of test cases have been updated since they now render with minimality information. - - - - - a4a20b16 by Niklas Haas at 2014-03-13T19:18:12+00:00 Strip links from recently added html tests These were accidentally left there when the tests were originally added - - - - - d624f315 by Mateusz Kowalczyk at 2014-03-13T19:19:31+00:00 Update changelog - - - - - d27a21ac by Mateusz Kowalczyk at 2014-03-13T21:19:07+00:00 Always read in prologue files as UTF8 (#286). - - - - - 54b2fd78 by Mateusz Kowalczyk at 2014-03-13T21:28:09+00:00 Style only - - - - - fa4fe650 by Simon Hengel at 2014-03-15T09:04:18+01:00 Add Fuuzetsu maintainers field in cabal file - - - - - f83484b7 by Niklas Haas at 2014-03-15T18:20:24+00:00 Hide minimal definition for only-method classes Previously this was not covered by the All xs check since here it is not actually an All, rather a single Var n. This also adds the previously missing html-test/src/Minimal.hs. - - - - - 0099d276 by Niklas Haas at 2014-03-15T18:20:26+00:00 Fix issue haskell/haddock#281 This is a regression from the data family instances change. Data instances are now distinguished from regular lists by usage of the new class "inst", and the style has been updated to only apply to those. I've also updated the appropriate test case to test this a bit better, including GADT instances with GADT-style records. - - - - - 1f9687bd by Mateusz Kowalczyk at 2014-03-21T17:48:37+00:00 Please cabal sdist - - - - - 75542693 by Mateusz Kowalczyk at 2014-03-22T16:36:16+00:00 Drop needless --split-objs which slows us down. Involves tiny cleanup of all the dynflag bindings. Fixes haskell/haddock#292. - - - - - 31214dc3 by Herbert Valerio Riedel at 2014-03-23T18:01:01+01:00 Fix a few typos Signed-off-by: Herbert Valerio Riedel <hvr at gnu.org> - - - - - 0b73e638 by Mateusz Kowalczyk at 2014-03-31T05:34:36+01:00 Print kind signatures on GADTs - - - - - 2bab42f3 by Mateusz Kowalczyk at 2014-03-31T16:53:25+01:00 Add default for new PlatformConstraints field - - - - - 42647c5f by Mateusz Kowalczyk at 2014-03-31T18:29:04+01:00 Drop leading whitespace in @-style blocks. Fixes haskell/haddock#201. - - - - - 98208294 by Niklas Haas at 2014-03-31T20:09:58+02:00 Crash when exporting record selectors of data family instances This fixes bug haskell/haddock#294. This also fixes a related but never-before-mentioned bug about the display of GADT record selectors with non-polymorphic type signatures. Note: Associated data type constructors fail to show up if nothing is exported that they could be attached to. Exporting any of the data types in the instance head, or the class + data family itself, causes them to show up, but in the absence of either of these, exporting just the associated data type with the constructor itself will result in it being hidden. The only scenario I can come up that would involve this kind of situation involved OverlappingInstances, and even then it can be mitigated by just exporting the class itself, so I'm not going to solve it since the logic would most likely be very complicated. - - - - - 3832d171 by Mateusz Kowalczyk at 2014-04-01T19:07:33+01:00 Make CHANGES consistent with what's now in 2.14.2 - - - - - c386ae89 by Mateusz Kowalczyk at 2014-04-01T19:18:36+01:00 Actually bundle extra spec tests in sdist - - - - - bd57a6d3 by Mateusz Kowalczyk at 2014-04-03T21:13:48+01:00 Update test cases for GHC bug haskell/haddock#8945, Haddock haskell/haddock#188 The order of signature groups has been corrected upstream. Here we add a test case and update some existing test-cases to reflect this change. We remove grouped signature in test cases that we can (Minimal, BugDeprecated &c) so that the test is as self-contained as possible. - - - - - 708b88b1 by Mateusz Kowalczyk at 2014-04-03T21:16:07+01:00 Enforce strict GHC version in cabal file This stops people with 7.6.3 trying to install 2.15.x which clearly won't work. Unfortunately we shipped 2.14.x without realising this. - - - - - 60334f7c by Mateusz Kowalczyk at 2014-04-03T21:19:24+01:00 Initialise some new PlatformConstants fields - - - - - ea77f668 by Mateusz Kowalczyk at 2014-04-11T16:52:23+01:00 We don't actually want unicode here - - - - - 0b651cae by Mateusz Kowalczyk at 2014-04-11T18:13:30+01:00 Parse identifiers with ^ and ⋆ in them. Fixes haskell/haddock#298. - - - - - e8ad0f5f by Mateusz Kowalczyk at 2014-04-11T18:47:41+01:00 Ignore version string during HTML tests. - - - - - de489089 by Mateusz Kowalczyk at 2014-04-11T18:59:30+01:00 Update CHANGES to follow 2.14.3 - - - - - beb464a9 by Gergő Érdi at 2014-04-13T16:31:10+08:00 remove Origin flag from LHsBindsLR - - - - - cb16f07c by Herbert Valerio Riedel at 2014-04-21T17:16:50+02:00 Replace local `die` by new `System.Exit.die` Starting with GHC 7.10, System.Exit exports the new `die` which is essentially the same as Haddock.Util.die, so this commit changes Haddock.Util.die to be a simple re-export of System.Exit.die. See also https://ghc.haskell.org/trac/ghc/ticket/9016 for more details. Signed-off-by: Herbert Valerio Riedel <hvr at gnu.org> - - - - - 9b9b23c7 by Mateusz Kowalczyk at 2014-05-03T15:40:11+02:00 Disambiguate ‘die’ in test runners. - - - - - 5d28a2b8 by Mateusz Kowalczyk at 2014-05-05T09:19:49+02:00 Prepare modules for parser split. We have to generalise the Doc (now DocH) slightly to remove the dependency on GHC-supplied type. - - - - - d3967ff3 by Mateusz Kowalczyk at 2014-05-05T11:00:41+02:00 Move parser + parser tests out to own package. We move some types out that are necessary as well and then re-export and specialise them in the core Haddock. Reason for moving out spec tests is that if we're working on the parser, we can simply work on that and we can ignore the rest of Haddock. The downside is that it's a little inconvenient if at the end of the day we want to see that everything passes. - - - - - 522a448d by Mateusz Kowalczyk at 2014-05-05T11:14:47+02:00 Move out Show and Eq instances to Types They are much more useful to the users here. - - - - - 11a6f0f2 by Mateusz Kowalczyk at 2014-05-06T13:50:31+02:00 Remove no longer necessary parser error handling. We can now drop some Maybe tests and even lets us strip an error handling monad away in a few places. - - - - - 6992c924 by Mateusz Kowalczyk at 2014-05-14T02:23:55+02:00 Please the GHC build-system. As I can not figure out how to do this properly, if we're in GHC tree, we treat the library as being the same package. If we're not in the tree, we require that the library be installed separately. - - - - - 7a8ad763 by Mateusz Kowalczyk at 2014-05-14T14:50:25+02:00 Update issue tracker URL - - - - - f616c521 by Mateusz Kowalczyk at 2014-05-14T14:53:32+02:00 Update issue tracker URL for haddock-library - - - - - 66580ded by Gergő Érdi at 2014-05-25T14:24:16+08:00 Accomodate change in PatSyn representation - - - - - 0e43b988 by Mateusz Kowalczyk at 2014-05-29T03:15:29+02:00 Revert "Accomodate change in PatSyn representation" This reverts commit 57aa591362d7c8ba21285fccd6a958629a422091. I am reverting this because I pushed it to master when it was meant to stay on a wip-branch. Sorry Gergo and everyone who had trouble due to this. - - - - - e10d7ec8 by Mateusz Kowalczyk at 2014-05-29T03:24:11+02:00 Revert "Revert "Accomodate change in PatSyn representation"" This reverts commit e110e6e70e40eed06c06676fd2e62578da01d295. Apparently as per GHC commit ac2796e6ddbd54c5762c53e2fcf29f20ea162fd5 this was actually intended. Embarrasing for me. - - - - - 5861aca9 by Mateusz Kowalczyk at 2014-06-05T19:49:27+02:00 Clear up highlighting of identifiers with ‘'’s. - - - - - d7cc420f by Simon Peyton Jones at 2014-06-06T12:41:09+01:00 Follow change in patSynSig - - - - - 938b4fd8 by Mateusz Kowalczyk at 2014-06-12T07:24:29+02:00 Slightly update the readme. Style-sheets are no longer a recent thing, dead links, old maintainers, different formats. - - - - - c7799dea by Mateusz Kowalczyk at 2014-06-18T00:05:56+02:00 Update cabal files Update repository urls, use subdir property for haddock-library and use a separate versioning scheme for haddock-library in preparation for release. - - - - - a2750b6a by Simon Hengel at 2014-06-18T11:01:18+08:00 Compatibility with older versions of base and bytestring - - - - - 009b4b03 by Simon Hengel at 2014-06-18T11:14:01+08:00 Enable travis-ci for haddock-library - - - - - 9b5862eb by Simon Hengel at 2014-06-18T11:14:01+08:00 haddock-library: Do not depend on haddock-library in test suite I think you either add src to hs-source-dirs or the library to build-depends. But doing both does not make sense (AFAICT). - - - - - fb1f3279 by Simon Hengel at 2014-06-18T11:49:05+08:00 haddock-library: Use -Wall for specs - - - - - 649340e1 by Mateusz Kowalczyk at 2014-06-18T06:58:54+02:00 Use Travis with multiple GHC versions When using HEAD, we build haddock-library directly from repository as a dependency (and thanks to --enable-tests, the tests get ran anyway). In all other cases, we manually run the tests on haddock-library only and don't test the main project. - - - - - d7eeeec2 by Mateusz Kowalczyk at 2014-06-18T07:49:04+02:00 Comment improvements + few words in cabal file - - - - - 0f8db914 by Simon Hengel at 2014-06-18T13:52:23+08:00 Use doctest to check examples in documentation - - - - - 2888a8dc by Simon Hengel at 2014-06-18T14:16:48+08:00 Remove doctest dependency (so that we can use haddock-library with doctest) - - - - - 626d5e85 by Mateusz Kowalczyk at 2014-06-18T08:41:25+02:00 Travis tweaks - - - - - 41d4f9cc by Mateusz Kowalczyk at 2014-06-18T08:58:43+02:00 Don't actually forget to install specified GHC. - - - - - c6aa512a by John MacFarlane at 2014-06-18T10:43:57-07:00 Removed reliance on LambdaCase (which breaks build with ghc 7.4). - - - - - b9b93b6f by John MacFarlane at 2014-06-18T10:54:56-07:00 Fixed haddock warnings. - - - - - a41b0ab5 by Mateusz Kowalczyk at 2014-06-19T01:20:10+02:00 Update Travis, bump version - - - - - 864bf62a by Mateusz Kowalczyk at 2014-06-25T10:36:54+02:00 Fix anchors. Closes haskell/haddock#308. - - - - - 53df91bb by Mateusz Kowalczyk at 2014-06-25T15:04:49+02:00 Drop DocParagraph from front of headers I can not remember why they were wrapped in paragraphs to begin with and it seems unnecessary now that I test it. Closes haskell/haddock#307. - - - - - 29b5f2fa by Mateusz Kowalczyk at 2014-06-25T15:17:20+02:00 Don't mangle append order for nested lists. The benefit of this is that the ‘top-level’ element of such lists is properly wrapped in <p> tags so any CSS working with these will be applied properly. It also just makes more sense. Pointed out at jgm/pandoc#1346. - - - - - 05cb6e9c by Mateusz Kowalczyk at 2014-06-25T15:19:45+02:00 Bump haddock-library to 1.1.0 for release - - - - - 70feab15 by Iavor Diatchki at 2014-07-01T03:37:07-07:00 Propagate overloading-mode for instance declarations in haddock (#9242) - - - - - d4ca34a7 by Simon Peyton Jones at 2014-07-14T16:23:15+01:00 Adapt to new definition of HsDecls.TyFamEqn This is a knock-on from the refactoring from Trac haskell/haddock#9063. I'll push the corresponding changes to GHC shortly. - - - - - f91e2276 by Edward Z. Yang at 2014-07-21T08:14:19-07:00 Track GHC PackageId to PackageKey renaming. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> Conflicts: src/Haddock/Interface/Create.hs - - - - - b010f9ef by Edward Z. Yang at 2014-07-25T16:28:46-07:00 Track changes for module reexports. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> Conflicts: src/Haddock/Interface/Create.hs - - - - - 8b85f9f9 by Mateusz Kowalczyk at 2014-07-28T13:25:43+02:00 Catch mid-line URLs. Fixes haskell/haddock#314. - - - - - 4c613a78 by Edward Z. Yang at 2014-08-05T03:11:00-07:00 Track type signature change of lookupModuleInAllPackages Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - e80b051c by Edward Z. Yang at 2014-08-05T17:34:26+01:00 If GhcProfiled, also build Haddock profiled. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - f9cccd29 by Edward Z. Yang at 2014-08-07T14:23:35+01:00 Ignore TAGS files. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 00b3af52 by Mateusz Kowalczyk at 2014-08-08T04:58:19+02:00 Update to attoparsec-0.12.1.1 There seems to be memory and speed improvement. - - - - - 5457dc71 by Mateusz Kowalczyk at 2014-08-08T18:24:02+02:00 Fix forgotten src - - - - - 3520cb04 by Mateusz Kowalczyk at 2014-08-14T20:19:07+01:00 Bump down the version for master to 2.14.4 - - - - - dc98c21b by Mateusz Kowalczyk at 2014-08-14T20:23:27+01:00 Revert "Track type signature change of lookupModuleInAllPackages" This reverts commit d59fec2c9551b5662a3507c0011e32a09a9c118f. - - - - - 3f2038c0 by Mateusz Kowalczyk at 2014-08-14T20:23:31+01:00 Revert "Track changes for module reexports." This reverts commit b99b57c0df072d12b67816b45eca2a03cb1da96d. - - - - - 56d4e49e by Mateusz Kowalczyk at 2014-08-14T20:23:42+01:00 Revert "Track GHC PackageId to PackageKey renaming." This reverts commit 8ac42d3327473939c013551750425cac191ff0fd. - - - - - 726ea3cb by Mateusz Kowalczyk at 2014-08-14T20:23:47+01:00 Revert "Adapt to new definition of HsDecls.TyFamEqn" This reverts commit cb96b4f1ed0462b4a394b9fda6612c3bea9886bd. - - - - - 61a88ff0 by Mateusz Kowalczyk at 2014-08-14T20:23:52+01:00 Revert "Propagate overloading-mode for instance declarations in haddock (#9242)" This reverts commit 8d20ca8d5a9bee73252ff2035ec45f9c03d0820c. - - - - - a32ba674 by Mateusz Kowalczyk at 2014-08-14T20:26:03+01:00 Revert "Disambiguate ‘die’ in test runners." This reverts commit dba02d6df32534aac5d257f2d28596238d248942. - - - - - f335820f by Mateusz Kowalczyk at 2014-08-14T20:26:09+01:00 Revert "Replace local `die` by new `System.Exit.die`" This reverts commit 08aa509ebac58bfb202ea79c7c41291ec280a1c5. - - - - - 107078e4 by Mateusz Kowalczyk at 2014-08-14T20:27:34+01:00 Merge branch 'reverts' This reverts any changes that were made to have Haddock compile with 7.9. When 7.10 release comes, we can simply re-apply all the patches and any patches that occur on ghc-head branch from now on. This allows us to build master with 7.8.3 - - - - - b44b3871 by Mateusz Kowalczyk at 2014-08-15T02:47:40+01:00 Fix haskell/haddock#313 by doing some list munging. I get rid of the Monoid instance because we weren't satisfying the laws. Convenience of having <> didn't outweigh the shock-factor of having it behave badly. - - - - - e1a62cde by Mateusz Kowalczyk at 2014-08-15T02:52:56+01:00 Stop testing haskell/haddock#188. Because the change is in GHC 7.9 and we now work against 7.8.3, this test no longer makes sense. We revert it until 7.10 becomes the standard version. If anything, there should be a test for this in GHC itself. - - - - - 54e8286d by Mateusz Kowalczyk at 2014-08-15T05:31:57+01:00 Add haskell/haddock#313 to CHANGES - - - - - 9df7ad5d by Simon Hengel at 2014-08-20T11:25:32+08:00 Fix warning - - - - - ee2574d6 by Simon Hengel at 2014-08-20T12:07:01+08:00 Fix travis builds - - - - - 384cf2e6 by Simon Hengel at 2014-08-20T12:14:31+08:00 Require GHC 7.8.3 - - - - - d4779863 by Simon Hengel at 2014-08-22T12:14:16+08:00 Move Haddock API to a separate package - - - - - 80f3e0e1 by Simon Hengel at 2014-08-22T14:57:38+08:00 Bump version to 2.15.0 and add version constraints - - - - - 309a94ce by Simon Hengel at 2014-08-22T15:18:06+08:00 Add deprecated compatibility module - - - - - 4d1e4e3f by Luite Stegeman at 2014-08-22T20:46:45+02:00 export things to allow customizing how the Ghc session is run - - - - - 47884591 by Luite Stegeman at 2014-08-22T20:46:51+02:00 ghc 7.8.2 compatibility - - - - - 5ea94e2c by Luite Stegeman at 2014-08-22T22:08:58+02:00 install dependencies for haddock-api on travis - - - - - 9fb845b2 by Mateusz Kowalczyk at 2014-08-23T10:09:34+01:00 Move sources under haddock-api/src - - - - - 85817dc4 by Mateusz Kowalczyk at 2014-08-23T10:10:48+01:00 Remove compat stuff - - - - - 151c6169 by Niklas Haas at 2014-08-24T08:14:10+02:00 Fix extra whitespace on signatures and update all test cases This was long overdue, now running ./accept.lhs on a clean test from master will not generate a bunch of changes. - - - - - d320e0d2 by Niklas Haas at 2014-08-24T08:14:35+02:00 Omit unnecessary foralls and fix haskell/haddock#315 This also fixes haskell/haddock#86. - - - - - bdafe108 by Mateusz Kowalczyk at 2014-08-24T15:06:46+01:00 Update CHANGES - - - - - fafa6d6e by Mateusz Kowalczyk at 2014-08-24T15:14:23+01:00 Delete few unused/irrelevant/badly-place files. - - - - - 3634923d by Duncan Coutts at 2014-08-27T13:49:31+01:00 Changes due to ghc api changes in package representation Also fix a bug with finding the package name and version given a module. This had become wrong due to the package key changes (it was very hacky in the first place). We now look up the package key in the package db to get the package info properly. - - - - - 539a7e70 by Herbert Valerio Riedel at 2014-08-31T11:36:32+02:00 Import Data.Word w/o import-list This is needed to keep the compilation warning free (and thus pass GHC's ./validate) regardless of whether Word is re-exported from Prelude or not See https://ghc.haskell.org/trac/ghc/ticket/9531 for more details - - - - - 9e3a0e5b by Mateusz Kowalczyk at 2014-08-31T12:54:43+01:00 Bump version in doc - - - - - 4a177525 by Mateusz Kowalczyk at 2014-08-31T13:01:23+01:00 Bump haddock-library version - - - - - f99c1384 by Mateusz Kowalczyk at 2014-08-31T13:05:25+01:00 Remove references to deleted files - - - - - 5e51a247 by Mateusz Kowalczyk at 2014-08-31T14:18:44+01:00 Make the doc parser not complain - - - - - 2cedb49a by Mateusz Kowalczyk at 2014-09-03T03:33:15+01:00 CONTRIBUTING file for issues - - - - - 88027143 by Mateusz Kowalczyk at 2014-09-04T00:46:59+01:00 Mention --print-missing-docs - - - - - 42f6754f by Alan Zimmerman at 2014-09-05T18:13:24-05:00 Follow changes to TypeAnnot in GHC HEAD Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - e712719e by Austin Seipp at 2014-09-09T01:03:27-05:00 Fix import of 'empty' due to AMP. Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 71c29755 by Herbert Valerio Riedel at 2014-09-09T17:35:20+02:00 Bump `base` constraint for AMP - - - - - 0bf9f3ed by Mateusz Kowalczyk at 2014-09-12T19:18:32+01:00 Delete stale ANNOUNCE - - - - - cac89ee6 by Krzysztof Gogolewski at 2014-09-14T17:17:09+02:00 Followup changes to addition of -fwarn-context-quantification (GHC Trac haskell/haddock#4426) - - - - - 4d683426 by Edward Z. Yang at 2014-09-18T13:38:11-07:00 Properly render package ID (not package key) in index, fixes haskell/haddock#329. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 80697fd5 by Herbert Valerio Riedel at 2014-09-19T00:07:52+02:00 Disambiguate string-literals GHC fails type-inference with `OverloadedStrings` + `Data.Foldable.elem` otherwise. - - - - - c015eb70 by Herbert Valerio Riedel at 2014-09-19T00:10:36+02:00 Revert "Followup changes to addition of -fwarn-context-quantification" This reverts commit 4023817d7c0e46db012ba2eea28022626841ca9b temporarily as the respective feature hasn't landed in GHC HEAD yet, but this commit blocks later commits from being referenced in GHC HEAD. - - - - - 38ded784 by Edward Z. Yang at 2014-09-18T15:32:15-07:00 Revert "Revert "Followup changes to addition of -fwarn-context-quantification"" This reverts commit db14fd8ab4fab43694139bc203808b814eafb2dc. It's in HEAD now. - - - - - f55d59c9 by Herbert Valerio Riedel at 2014-09-26T19:18:28+02:00 Revert "Fix import of 'empty' due to AMP." This reverts commit 0cc5bc85e9fca92ab712b68a2ba2c0dd9d3d79f4 since it turns out we don't need to re-export `empty` from Control.Monad after all. - - - - - 467050f1 by David Feuer at 2014-10-09T20:07:36-04:00 Fix improper lazy IO use Make `getPrologue` force `parseParas dflags str` before returning. Without this, it will attempt to read from the file after it is closed, with unspecified and generally bad results. - - - - - cc47b699 by Edward Z. Yang at 2014-10-09T21:38:19-07:00 Fix use-after-close lazy IO bug Make `getPrologue` force `parseParas dflags str` before returning. Without this, it will attempt to read from the file after it is closed, with unspecified and generally bad results. Signed-off-by: David Feuer <David.Feuer at gmail.com> Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 87babcbe by Austin Seipp at 2014-10-20T20:05:27-05:00 Add an .arcconfig file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - ab259516 by Austin Seipp at 2014-10-20T20:07:01-05:00 Add .arclint file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - b918093c by Mateusz Kowalczyk at 2014-10-29T03:59:39+00:00 Experimental support for collapsable headers Closes haskell/haddock#335 - - - - - 849db129 by Mateusz Kowalczyk at 2014-10-29T10:07:26+01:00 Experimental support for collapsable headers (cherry picked from commit e2ed3b9d8dfab09f1b1861dbc8e74f08e137ebcc) - - - - - a4cc4789 by Herbert Valerio Riedel at 2014-10-31T11:08:26+01:00 Collapse user-defined section by default (re haskell/haddock#335) - - - - - 9da1b33e by Yuras Shumovich at 2014-10-31T16:11:04-05:00 reflect ForeignType constructore removal Reviewers: austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D358 - - - - - c625aefc by Austin Seipp at 2014-10-31T19:34:10-05:00 Remove overlapping pattern match Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - c7738e5e by Simon Hengel at 2014-11-02T07:25:30+08:00 Remove -fobject-code from .ghci (this slows down reloads on modifications) - - - - - d4a86e95 by Simon Hengel at 2014-11-03T09:26:11+08:00 Get rid of StandaloneDeriving - - - - - a974e311 by Simon Hengel at 2014-11-03T09:26:11+08:00 Derive more instances - - - - - 8aa0c4d7 by Simon Hengel at 2014-11-03T09:27:08+08:00 Remove unused language extensions - - - - - 3052d46a by Simon Hengel at 2014-11-03T09:30:46+08:00 Minor refactoring - - - - - 4281d3cb by Simon Hengel at 2014-11-03T09:30:46+08:00 parser: Try to parse definition lists right before text paragraphs - - - - - 8ba12bf9 by Simon Hengel at 2014-11-03T09:34:19+08:00 Add support for markdown links (closes haskell/haddock#336) - - - - - a2f8d747 by Simon Hengel at 2014-11-03T09:34:19+08:00 Allow markdown links at the beginning of a paragraph - - - - - 53b11207 by Simon Hengel at 2014-11-03T09:34:20+08:00 Update documentation - - - - - 652267c6 by Simon Hengel at 2014-11-03T09:34:20+08:00 Add support for markdown images - - - - - 9d667502 by Simon Hengel at 2014-11-03T09:34:20+08:00 Allow an optional colon after the closing bracket of definition lists This is to disambiguate them from markdown links and will be require with a future release. - - - - - 8167fc32 by Mateusz Kowalczyk at 2014-11-04T01:16:51+00:00 whitespace only - - - - - 3da62981 by Mateusz Kowalczyk at 2014-11-04T01:17:31+00:00 Fix re-exports of built-in type families Fixes haskell/haddock#310 - - - - - edc76b34 by Mateusz Kowalczyk at 2014-11-04T02:54:28+00:00 Turn some uses of error into recoverable warnings This should at the very least not abort when something weird happens. It does feel like we should have a type that carries these errors until the end however as the user might not see them unless they are printed at the end. - - - - - 0a137400 by Mateusz Kowalczyk at 2014-11-04T04:09:44+00:00 Fix warnings - - - - - d068fc21 by Mateusz Kowalczyk at 2014-11-04T21:04:07+00:00 Fix parsing of identifiers written in infix way - - - - - 1a9f2f3d by Simon Hengel at 2014-11-08T11:32:42+08:00 Minor code simplification - - - - - 6475e9b1 by Simon Hengel at 2014-11-08T17:28:33+08:00 newtype-wrap parser monad - - - - - dc1ea105 by Herbert Valerio Riedel at 2014-11-15T11:55:43+01:00 Make compatible with `deepseq-1.4.0.0` ...by not relying on the default method implementation of `rnf` - - - - - fbb1aca4 by Simon Hengel at 2014-11-16T08:51:38+08:00 State intention rather than implementation details in Haddock comment - - - - - 97851ab2 by Simon Hengel at 2014-11-16T10:20:19+08:00 (wip) Add support for @since (closes haskell/haddock#26) - - - - - 34bcd18e by Gergő Érdi at 2014-11-20T22:35:38+08:00 Update Haddock to new pattern synonym type signature syntax - - - - - 304b7dc3 by Jan Stolarek at 2014-11-20T17:48:43+01:00 Follow changes from haskell/haddock#9812 - - - - - 920f9b03 by Richard Eisenberg at 2014-11-20T16:52:50-05:00 Changes to reflect refactoring in GHC as part of haskell/haddock#7484 - - - - - 0bfe4e78 by Alan Zimmerman at 2014-11-21T11:23:09-06:00 Follow API changes in D426 Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 356ed45a by Thomas Winant at 2014-11-28T16:11:22-06:00 Support for PartialTypeSignatures - - - - - 5dc8f3b1 by Gergő Érdi at 2014-11-29T15:39:09+08:00 For pattern synonyms, render "pattern" as a keyword - - - - - fe704480 by Mateusz Kowalczyk at 2014-12-09T03:38:32+00:00 List new module in cabal file - - - - - b9ad5a29 by Mateusz Kowalczyk at 2014-12-10T00:58:24+00:00 Allow the parser to spit out meta-info Currently we only use it only for ‘since’ annotations but with these patches it should be fairly simple to add new attributes if we wish to. Closes haskell/haddock#26. It seems to work fine but due to 7.10 rush I don't have the chance to do more exhaustive testing right now. The way the meta is output (emphasis at the end of the whole comment) is fairly arbitrary and subject to bikeshedding. Note that this makes test for Bug310 fail due to interface version bump: it can't find the docs for base with this interface version so it fails. There is not much we can do to help this because it tests for ’built-in’ identifier, not something we can provide ourselves. - - - - - 765af0e3 by Mateusz Kowalczyk at 2014-12-10T01:17:19+00:00 Update doctest parts of comments - - - - - 8670272b by jpmoresmau at 2014-12-10T01:35:31+00:00 header could contain several lines Closes haskell/haddock#348 - - - - - 4f9ae4f3 by Mateusz Kowalczyk at 2014-12-12T06:22:31+00:00 Revert "Merge branch 'reverts'" This reverts commit 5c93cc347773c7634321edd5f808d5b55b46301f, reversing changes made to 5b81a9e53894d2ae591ca0c6c96199632d39eb06. Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - e974ac94 by Duncan Coutts at 2014-12-12T06:26:11+00:00 Changes due to ghc api changes in package representation Also fix a bug with finding the package name and version given a module. This had become wrong due to the package key changes (it was very hacky in the first place). We now look up the package key in the package db to get the package info properly. Conflicts: haddock-api/src/Haddock.hs - - - - - 2f3a2365 by Herbert Valerio Riedel at 2014-12-12T06:26:51+00:00 Import Data.Word w/o import-list This is needed to keep the compilation warning free (and thus pass GHC's ./validate) regardless of whether Word is re-exported from Prelude or not See https://ghc.haskell.org/trac/ghc/ticket/9531 for more details - - - - - 1dbd6390 by Alan Zimmerman at 2014-12-12T06:32:07+00:00 Follow changes to TypeAnnot in GHC HEAD Signed-off-by: Austin Seipp <aseipp at pobox.com> Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - bb6ff1f4 by Mateusz Kowalczyk at 2014-12-12T06:35:07+00:00 Bump ‘base’ constraint Follows the similar commit made on ghc-head branch - - - - - 466fe4ab by Krzysztof Gogolewski at 2014-12-12T06:37:42+00:00 Followup changes to addition of -fwarn-context-quantification (GHC Trac haskell/haddock#4426) - - - - - 97e080c9 by Edward Z. Yang at 2014-12-12T06:39:35+00:00 Properly render package ID (not package key) in index, fixes haskell/haddock#329. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> Conflicts: haddock-api/src/Haddock/ModuleTree.hs - - - - - 20b2af56 by Herbert Valerio Riedel at 2014-12-12T06:42:50+00:00 Disambiguate string-literals GHC fails type-inference with `OverloadedStrings` + `Data.Foldable.elem` otherwise. Conflicts: haddock-library/src/Documentation/Haddock/Parser.hs - - - - - b3ad269d by Austin Seipp at 2014-12-12T06:44:14+00:00 Add an .arcconfig file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - 072df0dd by Austin Seipp at 2014-12-12T06:45:01+00:00 Add .arclint file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - dbb9294a by Herbert Valerio Riedel at 2014-12-12T06:46:17+00:00 Collapse user-defined section by default (re haskell/haddock#335) Conflicts: haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs - - - - - f23ab545 by Yuras Shumovich at 2014-12-12T06:46:41+00:00 reflect ForeignType constructore removal Reviewers: austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D358 - - - - - 753a4b67 by Austin Seipp at 2014-12-12T06:46:51+00:00 Remove overlapping pattern match Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 8954e8f5 by Herbert Valerio Riedel at 2014-12-12T06:50:53+00:00 Make compatible with `deepseq-1.4.0.0` ...by not relying on the default method implementation of `rnf` - - - - - d2b06d61 by Gergő Érdi at 2014-12-12T07:07:30+00:00 Update Haddock to new pattern synonym type signature syntax Conflicts: haddock-api/src/Haddock/Backends/Xhtml/Decl.hs haddock-api/src/Haddock/Convert.hs - - - - - 1ff02426 by Jan Stolarek at 2014-12-12T07:13:24+00:00 Follow changes from haskell/haddock#9812 Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - 06ad7600 by Richard Eisenberg at 2014-12-12T07:13:43+00:00 Changes to reflect refactoring in GHC as part of haskell/haddock#7484 - - - - - 8fd2aa8b by Alan Zimmerman at 2014-12-12T07:22:25+00:00 Follow API changes in D426 Signed-off-by: Austin Seipp <aseipp at pobox.com> Conflicts: haddock-api/src/Haddock/Backends/LaTeX.hs haddock-api/src/Haddock/Backends/Xhtml/Decl.hs haddock-api/src/Haddock/Convert.hs - - - - - 95c3db98 by Thomas Winant at 2014-12-12T07:35:49+00:00 Support for PartialTypeSignatures Conflicts: haddock-api/src/Haddock/Backends/Xhtml/Decl.hs haddock-api/src/Haddock/Convert.hs haddock-api/src/Haddock/Interface/Create.hs - - - - - 45494428 by Gergő Érdi at 2014-12-12T07:36:18+00:00 For pattern synonyms, render "pattern" as a keyword - - - - - a237e3eb by Mateusz Kowalczyk at 2014-12-12T12:27:13+00:00 Various fixups and bumps for next release - - - - - 22918bcd by Herbert Valerio Riedel at 2014-12-14T10:11:47+01:00 Remove redundant wild-card pattern match (this would otherwise cause a build-failure with `-Werror`) - - - - - 1d6ce947 by Herbert Valerio Riedel at 2014-12-14T10:17:06+01:00 Treat GHC 7.10 the same as GHC 7.9 ...since the current GHC 7.9 is going to become GHC 7.10 real-soon-now anyway - - - - - f434ea89 by Herbert Valerio Riedel at 2014-12-14T18:26:50+01:00 Fixup ghc.mk (follow-up to 1739375eb23342) This makes the GHC build-system aware of the data-files to be copied into the bindist (as haddock.cabal doesn't list those anymore) - - - - - 6fb839eb by Mateusz Kowalczyk at 2014-12-17T09:28:59+00:00 Only keep one Version instead of blindly appending - - - - - 40645489 by Mateusz Kowalczyk at 2014-12-18T07:09:44+00:00 Fix dependency version - - - - - 8b3b927b by Mateusz Kowalczyk at 2014-12-18T07:14:23+00:00 Print missing docs by default Adds --no-print-missing-docs - - - - - 59666694 by Mateusz Kowalczyk at 2014-12-18T07:21:37+00:00 update changelog - - - - - aa6d168e by Mateusz Kowalczyk at 2014-12-18T07:30:58+00:00 Update docs for @since - - - - - 2d7043ee by Luite Stegeman at 2014-12-19T18:29:35-06:00 hide projectVersion from DynFlags since it clashes with Haddock.Version.projectVersion - - - - - aaa70fc0 by Luite Stegeman at 2014-12-22T15:58:43+01:00 Add missing import for standalone haddock-api package - - - - - 9ce01269 by Herbert Valerio Riedel at 2014-12-22T17:48:45+01:00 Reset ghc-head with master's tree (this is an overwriting git merge of master into ghc-head) - - - - - fcd6fec1 by Herbert Valerio Riedel at 2014-12-22T17:51:52+01:00 Bump versions for ghc-7.11 - - - - - 525ec900 by Mateusz Kowalczyk at 2014-12-23T13:36:24+00:00 travis-ci: test with HEAD - - - - - cbf494b5 by Simon Peyton Jones at 2014-12-23T15:22:56+00:00 Eliminate instanceHead' in favour of GHC's instanceSig This is made possible by the elimination of "silent superclass parameters" in GHC - - - - - 50e01c99 by Mateusz Kowalczyk at 2014-12-29T15:28:47+00:00 Make travis use 7.10.x - - - - - 475e60b0 by Njagi Mwaniki at 2014-12-29T15:30:44+00:00 Turn the README into GitHub Markdown format. Closes haskell/haddock#354 - - - - - 8cacf48e by Luite Stegeman at 2015-01-05T16:25:37+01:00 bump haddock-api ghc dependency to allow release candidate and first release - - - - - 6ed6cf1f by Simon Peyton Jones at 2015-01-06T16:37:47+00:00 Remove redundant constraints from haddock, discovered by -fwarn-redundant-constraints - - - - - 8b484f33 by Simon Peyton Jones at 2015-01-08T15:50:22+00:00 Track naming change in DataCon - - - - - 23c5c0b5 by Alan Zimmerman at 2015-01-16T10:15:11-06:00 Follow API changes in D538 Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - e7a5532c by JP Moresmau at 2015-01-22T17:19:03+00:00 Ignore warnings, install Cabal 1.22 - - - - - 86942c84 by jpmoresmau at 2015-01-22T17:19:04+00:00 solve dataDir ambiguity - - - - - 5ceb743e by jpmoresmau at 2015-01-22T19:17:32+00:00 support GHC 7.10: no Safe-Inferred, Foldable instance - - - - - 6a3b3fb5 by Mateusz Kowalczyk at 2015-01-22T19:32:10+00:00 Update test files Test: a correct behaviour for fields comma-separating values. I'm surprised we had no bug open for this. Maybe it affects how haskell/haddock#301 renders now but I doubt. Operators: Seems GHC is giving us a new order for operators, something must have changed on their side again. cc @haasn , this makes the fixity to the side not match the order on the LHS which is a bit unpleasant. Maybe the fixity can be made to match the GHC order? Bug335: We expand examples by default now. Bug310: Now inferred safe. - - - - - 708f8b2f by jpmoresmau at 2015-01-22T19:36:59+00:00 Links to source location of class instance definitions - - - - - 5cf8a6da by Vincent Berthoux at 2015-01-22T19:59:58+00:00 Filter '\r' from comments due to Windows problems. On Windows this was causing newline to be rendered twice in code blocks. Closes haskell/haddock#359, fixes haskell/haddock#356. - - - - - 1749e6f0 by Mateusz Kowalczyk at 2015-01-22T20:31:27+00:00 Changelog only - - - - - c8145f90 by Mateusz Kowalczyk at 2015-01-22T23:34:05+00:00 --package-name and --package-version flags Used for --hoogle amongst other things. Now we need to teach cabal to use it. The situation is still a bit sub-par because if the flags aren't passed in, the crash will occur. Closes haskell/haddock#353. - - - - - 14248254 by Mateusz Kowalczyk at 2015-01-22T23:43:18+00:00 Sort out some module import warnings - - - - - d8a38989 by Simon Peyton Jones at 2015-01-23T07:10:16-06:00 Track naming change in DataCon (cherry picked from commit 04cf63d0195837ed52075ed7d2676e71831e8a0b) - - - - - d3ac6ae4 by Alan Zimmerman at 2015-01-23T07:17:19-06:00 Follow API changes in D538 Signed-off-by: Austin Seipp <aseipp at pobox.com> (cherry picked from commit d61bbc75890e4eb0ad508b9c2a27b91f691213e6) - - - - - 4c1ffeb0 by Simon Peyton Jones at 2015-02-10T12:10:33+00:00 Track changes in HsSyn for quasi-quotes - - - - - 775d20f7 by Mateusz Kowalczyk at 2015-03-15T08:11:48+01:00 --package-name and --package-version flags Used for --hoogle amongst other things. Now we need to teach cabal to use it. The situation is still a bit sub-par because if the flags aren't passed in, the crash will occur. Closes haskell/haddock#353. (cherry picked from commit 8e06728afb0784128ab2df0be7a5d7a191d30ff4) - - - - - f9245e72 by Phil Ruffwind at 2015-03-16T04:32:01-04:00 Prevent Synopsis from using up too much horizontal space When long type signatures occur in the Synopsis, the element is stretched beyond the width of the window. Scrollbars don't appear, so it's impossible to read anything when this happens. - - - - - cd8fa415 by Mateusz Kowalczyk at 2015-03-17T21:59:39+00:00 Update changelog Closes haskell/haddock#151 due to 71170fc77962f10d7d001e3b8bc8b92bfeda99bc - - - - - b5248b47 by Ben Gamari at 2015-03-25T17:12:17+00:00 Make the error encountered when a package can't be found more user-friendly Closes haskell/haddock#369 - - - - - b756b772 by Mateusz Kowalczyk at 2015-03-26T16:31:40+00:00 Remove now redundant imports - - - - - 5ea5e8dd by Mateusz Kowalczyk at 2015-03-26T16:45:52+00:00 Update test to account for \r filtering - - - - - 6539bfb3 by Mateusz Kowalczyk at 2015-03-27T00:20:09+00:00 Test for anchor defaulting I delete the old tests because it turns out that: * test runner would never put them in scope of each other even with imports so just one would suffice * test runner actually needed some hacking to keep links so in the end we would end up with no anchors making them useless - - - - - 1a01d950 by Mateusz Kowalczyk at 2015-03-27T00:20:09+00:00 Clearly default to variables in out of scope case - - - - - 7943abe8 by Mateusz Kowalczyk at 2015-03-27T01:14:11+00:00 Fix Hoogle display of constructors Fixes haskell/haddock#361 - - - - - 6d6e587e by Mateusz Kowalczyk at 2015-03-27T01:45:18+00:00 Fully qualify names in Hoogle instances output Closes haskell/haddock#263 - - - - - 52dac365 by Mateusz Kowalczyk at 2015-03-27T01:55:01+00:00 Update changelog - - - - - ca5af9a8 by Mateusz Kowalczyk at 2015-03-27T02:43:55+00:00 Output method documentation in Hoogle backend One thing of note is that we no longer preserve grouping of methods and print each method on its own line. We could preserve it if no documentation is present for any methods in the group if someone asks for it though. Fixes haskell/haddock#259 - - - - - a33f0c10 by Mateusz Kowalczyk at 2015-03-27T03:04:21+00:00 Don't print instance safety information in Hoogle Fixes haskell/haddock#168 - - - - - df6c935a by Mateusz Kowalczyk at 2015-03-28T00:11:47+00:00 Post-release version bumps and changelog - - - - - dde8f7c0 by Mateusz Kowalczyk at 2015-03-28T20:39:10+00:00 Loosen bounds on haddock-* - - - - - de93bf89 by Mateusz Kowalczyk at 2015-03-28T20:39:10+00:00 Expand response files in arguments Closes haskell/haddock#285 - - - - - 1f0b0856 by Zejun Wu at 2015-04-26T16:35:35-07:00 Do not insert anchor for section headings in contents box - - - - - 860439d7 by Simon Peyton Jones at 2015-05-01T09:36:47+01:00 Track change in API of TyCon - - - - - a32f3e5f by Adam Gundry at 2015-05-04T15:32:59+01:00 Track API changes to support empty closed type familes - - - - - 77e98bee by Ben Gamari at 2015-05-06T20:17:08+01:00 Ignore doc/haddock.{ps,pdf} - - - - - 663d0204 by Murray Campbell at 2015-05-11T04:47:37-05:00 Change ModuleTree Node to carry PackageKey and SourcePackageId to resolve haskell/haddock#385 Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 8bb0dcf5 by Murray Campbell at 2015-05-11T06:35:06-05:00 Change ModuleTree Node to carry PackageKey and SourcePackageId to resolve haskell/haddock#385 Signed-off-by: Austin Seipp <aseipp at pobox.com> (cherry picked from commit 2380f07c430c525b205ce2eae6dab23c8388d899) - - - - - bad900ea by Adam Bergmark at 2015-05-11T15:29:39+01:00 haddock-library: require GHC >= 7.4 `Data.Monoid.<>` was added in base-4.5/GHC-7.4 Closes haskell/haddock#394 Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - daceff85 by Simon Peyton Jones at 2015-05-13T12:04:21+01:00 Track the new location of setRdrNameSpace - - - - - 1937d1c4 by Alan Zimmerman at 2015-05-25T21:27:15+02:00 ApiAnnotations : strings in warnings do not return SourceText The strings used in a WARNING pragma are captured via strings :: { Located ([AddAnn],[Located FastString]) } : STRING { sL1 $1 ([],[L (gl $1) (getSTRING $1)]) } .. The STRING token has a method getSTRINGs that returns the original source text for a string. A warning of the form {-# WARNING Logic , mkSolver , mkSimpleSolver , mkSolverForLogic , solverSetParams , solverPush , solverPop , solverReset , solverGetNumScopes , solverAssertCnstr , solverAssertAndTrack , solverCheck , solverCheckAndGetModel , solverGetReasonUnknown "New Z3 API support is still incomplete and fragile: \ \you may experience segmentation faults!" #-} returns the concatenated warning string rather than the original source. - - - - - ee0fb6c2 by Łukasz Hanuszczak at 2015-05-27T11:51:31+02:00 Create simple method for indentation parsing. - - - - - 7d6fcad5 by Łukasz Hanuszczak at 2015-05-27T21:36:13+02:00 Make nested lists count indentation according to first item. - - - - - d6819398 by Łukasz Hanuszczak at 2015-05-27T22:46:13+02:00 Add simple test case for arbitrary-depth list nesting. - - - - - 2929c54d by Łukasz Hanuszczak at 2015-06-03T02:11:31+02:00 Add arbitrary-indent spec test for parser. - - - - - 9a0a9bb0 by Mateusz Kowalczyk at 2015-06-03T05:25:29+01:00 Update docs with info on new list nesting rule Fixes haskell/haddock#278 through commits from PR haskell/haddock#401 - - - - - 12efc92c by Mateusz Kowalczyk at 2015-06-03T05:29:26+01:00 Update some meta data at the top of the docs - - - - - 765ee49f by Bartosz Nitka at 2015-06-07T08:40:59-07:00 Add some Hacking docs for getting started - - - - - 19aaf851 by Bartosz Nitka at 2015-06-07T08:44:30-07:00 Fix markdown - - - - - 2a90cb70 by Mateusz Kowalczyk at 2015-06-08T15:08:36+01:00 Refine hacking instructions slightly - - - - - 0894da6e by Thomas Winant at 2015-06-08T23:47:28-05:00 Update after wild card renaming refactoring in D613 Summary: * Move `Post*` type instances to `Haddock.Types` as other modules than `Haddock.Interface.Rename` will rely on these type instances. * Update after wild card renaming refactoring in D613. Reviewers: simonpj, austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D954 GHC Trac Issues: haskell/haddock#10098 - - - - - 10a9bb76 by Emanuel Borsboom at 2015-06-12T02:46:23+01:00 Build executable with '-threaded' (fixes haskell/haddock#399) - - - - - 7696b94f by Mateusz Kowalczyk at 2015-06-12T02:59:19+01:00 Update changelog for -threaded Closes haskell/haddock#400 - - - - - d3c118ec by Bartosz Nitka at 2015-06-12T03:00:58+01:00 Fix haddock: internal error: spliceURL UnhelpfulSpan (#207) Inferred type signatures don't have SrcSpans, so let's use the one from the declaration. I've tested this manually on the test-case from haskell/haddock#207, but I got stuck at trying to run the test-suite. - - - - - b67e843b by Mateusz Kowalczyk at 2015-06-12T03:01:50+01:00 Changelog for haskell/haddock#207 Fixes haskell/haddock#207, closes haskell/haddock#402 - - - - - 841d785e by jpmoresmau at 2015-06-12T16:03:16+01:00 Attach to instance location the name that has the same location file Fixes haskell/haddock#383 - - - - - 98791cae by Mateusz Kowalczyk at 2015-06-12T16:08:27+01:00 Update changelog Closes haskell/haddock#398 - - - - - 7c0b5a87 by Phil Ruffwind at 2015-06-12T13:07:25-04:00 Fix alignment of Source links in instance table in Firefox Due to a Firefox bug [1], a combination of 'whitespace: nowrap' on the parent element with 'float: right' on the inner element can cause the floated element to be displaced downwards for no apparent reason. To work around this, the left side is wrapped in its own <span> and set to 'float: left'. As a precautionary measure to prevent the parent element from collapsing entirely, we also add the classic "clearfix" hack. The latter is not strictly needed but it helps prevent bugs if the layout is altered again in the future. Fixes haskell/haddock#384. Remark: line 159 of src/Haddock/Backends/Xhtml/Layout.hs was indented to prevent confusion over the operator precedence of (<+>) vs (<<). [1]: https://bugzilla.mozilla.org/show_bug.cgi?id=488725 - - - - - cfe86e73 by Mateusz Kowalczyk at 2015-06-14T10:49:01+01:00 Update tests for the CSS changes - - - - - 2d4983c1 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create scaffolding for Haskell source parser module. - - - - - 29548785 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement function for tagging parsed chunks with source spans. - - - - - 6a5e4074 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement simple string chunking based on HsColour library. - - - - - 6e52291f by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create basic token classification method. - - - - - da971a27 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Adapt source span tagging to work with current whitespace handling. - - - - - 4feb5a22 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add record accessors to exports of hyperlinker parser module. - - - - - a8cc4e39 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Make parser module export all types and associated accessors. - - - - - fb8d468f by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create simple HTML renderer for parsed source file. - - - - - 80747822 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for specifying the CSS file path in HTML source renderer. - - - - - 994dc1f5 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix identifier recognition in Haskell source parser. - - - - - b1bd0430 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix comment recognition in Haskell source parser. - - - - - 11db85ae by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for recognizing compiler pragmas in source parser. - - - - - 736c7bd3 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create scaffolding of module for associating tokens with AST names. - - - - - 7e149bc2 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement utility method for extracting variable identifiers from AST. - - - - - 32eb640a by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create simple mechanism for associating tokens with AST names. - - - - - d4eba5bc by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add dummy support for hyperlinking named tokens. - - - - - 2b76141f by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix span matcher bug causing wrong items being hyperlinked. - - - - - 2d48002e by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Constrain elements exported by hyperlinker modules. - - - - - 9715eec6 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for type token recognition. - - - - - 8fa401cb by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for binding token recognition. - - - - - d062400b by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement go-to-definition mechanism for local bindings. - - - - - f4dc229b by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement module export- and import-list item hyperlinking. - - - - - c9a46d58 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix span matching to allow parenthesized operators hyperlinking. - - - - - 03aad95a by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix weird hyperlinking of parenthesized operators. - - - - - b4694a7d by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for type declaration anchors. - - - - - 7358d2d2 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for top-level function declaration anchors. - - - - - dfc24b24 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix external anchors to contain HTML file extension. - - - - - a045926c by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Refactor the way AST names are handled within detailed tokens. - - - - - c76049b4 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Implement hyperlinking of imported module names. - - - - - 2d2a1572 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix parsing of single line comments with broken up newlines. - - - - - 11afdcf2 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix bug with improper newline handling. - - - - - 8137f104 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix issues with escaped newlines in comments. - - - - - 34759b19 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for parsing C preprocessor macros. - - - - - 09f0f847 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add some documentation for parser module of source hyperlinker. - - - - - 709a8389 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add some documentation for AST module of source hyperlinker. - - - - - 4df5c227 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add command line option for generating hyperlinked source. - - - - - 7a755ea2 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Extend module interface with rich source token stream field. - - - - - 494f4ab1 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Implement source tokenization during interface creation process. - - - - - 5f21c953 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Create hyperlinker module and plug it into the Haddock pipeline. - - - - - 0cc8a216 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for providing custom CSS files for hyperlinked source. - - - - - a32bbdc1 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for fancy highlighting upon hovering over identifier. - - - - - d16d642a by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make source hyperlinker generate output in apropriate directory. - - - - - ae12953d by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Create module with hyperlinker utility functions. - - - - - 6d4952c5 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make external hyperlinks point to locations specified by source URLs. - - - - - 8417555d by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Rewrite source generation to fixed links and directory structure. - - - - - ce9cec01 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add basic support for cross-package hyperlink generation. - - - - - 7eaf025c by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Disable generating hyperlinks for module references. - - - - - a50bf92e by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make Haddock generate source for all interfaces (also hidden ones). - - - - - f5ae2838 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Prevent source parser from throwing exception when lexing fails. - - - - - db9ffbe0 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Implement workaround for Chrome highlighting issues. - - - - - 0b6b453b by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make hyperlinker generate correct anchors for data constructors. - - - - - c86d38bc by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make hyperlinker generate anchors for record field declarations. - - - - - 063abf7f by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix issue with hyperlink highlight styling in Chrome browser. - - - - - 880fc611 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add support for hyperlinking constructor names in patters. - - - - - c9e89b95 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add support for hyperlinking field names in record patterns. - - - - - 17a11996 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add support for hyperlinking field names in record expressions. - - - - - 0eef932d by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Make hyperlinker respect pretty-printer flag and add documentation. - - - - - f87c1776 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Unexpose hyperlinker modules in Cabal configuration. - - - - - 4c9e2b06 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Setup HSpec framework for Haddock API package. - - - - - 4b20cb30 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add basic tests related to comment parsing. - - - - - 6842e919 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add tests related to parsing basic language constructs. - - - - - 87bffb35 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add simple tests for do-notation parsing. - - - - - e7af1841 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add very simple QuickCheck properties for source parser spec. - - - - - c84efcf1 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Create simple test runner for hyperlinker tests. - - - - - 76b90447 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for basic identifier hyperlinking. - - - - - 0fbf4df6 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for operator hyperlinking. - - - - - 731aa039 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for constructor hyperlinking. - - - - - 995a78a2 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for record expressions and patterns hyperlinking. - - - - - 3566875a by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for literal syntax highlighting. - - - - - 68469a35 by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Add hyperlinker test runner to .cabal and .gitignore files. - - - - - aa946c93 by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Adapt hyperlinker test runner to have the same interface as HTML one. - - - - - ce34da16 by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Fix hyperlinker test runner file paths and add pretty-printing option. - - - - - 0d7dd65e by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Add reference files for hyperlinker test cases. - - - - - efa4a1e0 by Łukasz Hanuszczak at 2015-07-01T00:47:32+02:00 Make hyperlinker test runner strip local links from generated source. - - - - - 3e96e584 by Łukasz Hanuszczak at 2015-07-01T01:14:59+02:00 Create simple script for accepting hyperlinker test case references. - - - - - 526fe610 by Łukasz Hanuszczak at 2015-07-01T01:16:41+02:00 Re-accept hyperlinker test cases with local references stripped out. - - - - - 892e2cb3 by Łukasz Hanuszczak at 2015-07-01T01:22:09+02:00 Fix bug with diffing wrong files in hyperlinker test runner. - - - - - 9ff46039 by Łukasz Hanuszczak at 2015-07-01T18:04:46+02:00 Remove unused dependencies in Haddock API spec configuration. - - - - - 47969c07 by Łukasz Hanuszczak at 2015-07-01T18:32:19+02:00 Add support for hyperlinking synonyms in patterns. - - - - - a73449e0 by Łukasz Hanuszczak at 2015-07-01T18:33:44+02:00 Create test case for hyperlinking @-patterns. - - - - - c2077ed8 by Łukasz Hanuszczak at 2015-07-01T19:06:04+02:00 Add support for hyperlinking universally quantified type variables. - - - - - 68017342 by Łukasz Hanuszczak at 2015-07-01T19:28:32+02:00 Create hyperlinker test case with quantified type variables. - - - - - 51c01a78 by Łukasz Hanuszczak at 2015-07-01T19:34:22+02:00 Add scoped type variables test for polymorphism test case. - - - - - 13181ae2 by Łukasz Hanuszczak at 2015-07-01T19:56:27+02:00 Add record wildcards test for records hyperlinking test case. - - - - - 991b81dd by Łukasz Hanuszczak at 2015-07-01T21:01:42+02:00 Document some functions in XHTML utlity module. - - - - - 98c8dfe5 by Łukasz Hanuszczak at 2015-07-01T22:25:21+02:00 Make hyperlinker render qualified names as one entity. - - - - - 75e13b9b by Łukasz Hanuszczak at 2015-07-01T22:27:38+02:00 Add qualified name test for identifiers hyperlinking test case. - - - - - de1e143f by Łukasz Hanuszczak at 2015-07-02T12:32:59+02:00 Fix crash happening when hyperlinking type family declarations. - - - - - 7a8fb175 by Łukasz Hanuszczak at 2015-07-02T12:47:03+02:00 Add support for anchoring data family constructor declarations. - - - - - 3b404e49 by Łukasz Hanuszczak at 2015-07-02T13:31:05+02:00 Improve support for hyperlinking type families. - - - - - 59eb7143 by Łukasz Hanuszczak at 2015-07-02T13:33:34+02:00 Add hyperlinker test case for checking type and type family declarations. - - - - - d1cda0c0 by Łukasz Hanuszczak at 2015-07-02T13:41:38+02:00 Fix issue with operators being recognized as preprocessor directives. - - - - - da206c9d by Łukasz Hanuszczak at 2015-07-02T17:18:12+02:00 Fix broken tests for parsing and hyperlinking hash operators. - - - - - 53750d1b by Łukasz Hanuszczak at 2015-07-02T18:53:28+02:00 Add support for anchoring signatures in type class declarations. - - - - - 1fa5bb10 by Łukasz Hanuszczak at 2015-07-02T19:04:47+02:00 Make hyperlinker generate anchors only to top-level value bindings. - - - - - a542305c by Łukasz Hanuszczak at 2015-07-02T19:05:58+02:00 Create hyperlinker test case for type classes. - - - - - b0dd4581 by Łukasz Hanuszczak at 2015-07-04T16:28:26+02:00 Update docs with information about source hyperlinking. - - - - - 9795302a by Łukasz Hanuszczak at 2015-07-04T16:52:15+02:00 Update docs on using `--read-interface` option. - - - - - 9acdc002 by Łukasz Hanuszczak at 2015-07-04T17:15:26+02:00 Remove potentially dangerous record access in hyperlinker AST module. - - - - - fb3ab7be by Łukasz Hanuszczak at 2015-07-04T17:40:10+02:00 Make Haddock generate warnings about potential misuse of hyperlinker. - - - - - a324c504 by Łukasz Hanuszczak at 2015-07-04T17:43:22+02:00 Fix incorrect specification of source style option in doc file. - - - - - 3f01a8e4 by Łukasz Hanuszczak at 2015-07-05T17:06:36+02:00 Refactor source path mapping to use modules as indices. - - - - - ac70f5b1 by Łukasz Hanuszczak at 2015-07-05T17:47:34+02:00 Fix bug where not all module interfaces were added to source mapping. - - - - - f5e57da9 by Łukasz Hanuszczak at 2015-07-06T16:39:57+02:00 Extract main hyperlinker types to separate module. - - - - - 43974905 by Łukasz Hanuszczak at 2015-07-06T16:52:13+02:00 Move source paths types to hyperlinker types module. - - - - - 3e236055 by Łukasz Hanuszczak at 2015-07-06T17:06:19+02:00 Add support for hyperlinking modules in import lists. - - - - - 58233d9f by Łukasz Hanuszczak at 2015-07-06T17:26:49+02:00 Add short documentation for hyperlinker source map type. - - - - - 14da016d by Łukasz Hanuszczak at 2015-07-06T18:07:20+02:00 Fix bug with module name being hyperlinked to `Prelude`. - - - - - 8f79db52 by Łukasz Hanuszczak at 2015-07-06T18:23:47+02:00 Fix problem with spec build in Haddock API configuration. - - - - - e7cc056c by Adam Sandberg Eriksson at 2015-07-07T23:22:21+01:00 StrictData: print correct strictness marks - - - - - e8253ca8 by Mateusz Kowalczyk at 2015-07-07T23:58:28+01:00 Update changelog - - - - - 0aba676b by Mateusz Kowalczyk at 2015-07-07T23:58:33+01:00 Relax upper bound on GHC a bit - - - - - 7a595381 by Mateusz Kowalczyk at 2015-07-07T23:58:52+01:00 Delete trailing whitespace - - - - - 50976d5e by Adam Sandberg Eriksson at 2015-07-08T15:03:04+02:00 StrictData: changes in HsBang type - - - - - 83b045fa by Mateusz Kowalczyk at 2015-07-11T14:35:18+01:00 Fix expansion icon for user-collapsible sections Closes haskell/haddock#412 - - - - - b2a3b0d1 by Mateusz Kowalczyk at 2015-07-22T22:03:21+01:00 Make some version changes after 2.16.1 release - - - - - a8294423 by Ben Gamari at 2015-07-27T13:16:07+02:00 Merge pull request haskell/haddock#422 from adamse/adamse-D1033 Merge for GHC D1033 - - - - - c0173f17 by randen at 2015-07-30T14:49:08-07:00 Break the response file by line termination rather than spaces, since spaces may be within the parameters. This simple approach avoids having the need for any quoting and/or escaping (although a newline char will not be possible in a parameter and has no escape mechanism to allow it). - - - - - 47c0ca14 by Alan Zimmerman at 2015-07-31T10:41:52+02:00 Replace (SourceText,FastString) with WithSourceText data type Phab:D907 introduced SourceText for a number of data types, by replacing FastString with (SourceText,FastString). Since this has an Outputable instance, no warnings are generated when ppr is called on it, but unexpected output is generated. See Phab:D1096 for an example of this. Replace the (SourceText,FastString) tuples with a new data type data WithSourceText = WithSourceText SourceText FastString Trac ticket: haskell/haddock#10692 - - - - - 45a9d770 by Mateusz Kowalczyk at 2015-07-31T09:47:43+01:00 Update changelog - - - - - 347a20a3 by Phil Ruffwind at 2015-08-02T23:15:26+01:00 Avoid JavaScript error during page load in non-frame mode In non-frame mode, parent.window.synopsis refers to the synopsis div rather than the nonexistent frame. Unfortunately, the script wrongly assumes that if it exists it must be a frame, leading to an error where it tries to access the nonexistent attribute 'replace' of an undefined value (synopsis.location). Closes haskell/haddock#406 - - - - - 54ebd519 by Phil Ruffwind at 2015-08-02T23:27:10+01:00 Link to the definitions to themselves Currently, the definitions already have an anchor tag that allows URLs with fragment identifiers to locate them, but it is rather inconvenient to obtain such a URL (so-called "permalink") as it would require finding the a link to the corresponding item in the Synopsis or elsewhere. This commit adds hyperlinks to the definitions themselves, allowing users to obtain links to them easily. To preserve the original aesthetics of the definitions, we alter the color of the link so as to be identical to what it was, except it now has a hover effect indicating that it is clickable. Additionally, the anchor now uses the 'id' attribute instead of the (obsolete) 'name' attribute. Closes haskell/haddock#407 - - - - - 02cc8bb7 by Phil Ruffwind at 2015-08-02T23:28:02+01:00 Fix typo in Haddock.Backends.Xhtml.Layout: divSynposis -> divSynopsis Closes haskell/haddock#408 - - - - - 2eb0a458 by Phil Ruffwind at 2015-08-02T23:30:07+01:00 Fix record field alignment when name is too long Change <dl> to <ul> and use display:table rather than floats to layout the record fields. This avoids bug haskell/haddock#301 that occurs whenever the field name gets too long. Slight aesthetic change: the entire cell of the field's source code is now shaded gray rather than just the area where text exists. Fixes haskell/haddock#301. Closes haskell/haddock#421 - - - - - 7abb3402 by Łukasz Hanuszczak at 2015-08-02T23:32:14+01:00 Add some utility definitions for generating line anchors. - - - - - e0b1d79b by Łukasz Hanuszczak at 2015-08-02T23:32:15+01:00 Make hyperlinked source renderer generate line anchors. - - - - - 24dd4c9f by Łukasz Hanuszczak at 2015-08-02T23:32:15+01:00 Re-accept test cases after adding line anchors for each of them. - - - - - 0372cfcb by Łukasz Hanuszczak at 2015-08-02T23:32:15+01:00 Override source line flags when source hyperlinker is enabled. - - - - - a81bcd07 by Mateusz Kowalczyk at 2015-08-02T23:58:25+01:00 Update tests to follow HTML changes - - - - - d2d7426f by Łukasz Hanuszczak at 2015-08-06T20:54:59+02:00 Fix quote syntax for promoted types. - - - - - 668cf029 by Łukasz Hanuszczak at 2015-08-06T21:12:00+02:00 Apply promoted type quoting to type-level consing. - - - - - 89f8e7c6 by Łukasz Hanuszczak at 2015-08-06T21:17:10+02:00 Extend advanced types test case with other examples. - - - - - 86494bca by Łukasz Hanuszczak at 2015-08-06T21:22:06+02:00 Rename advanced types test case and accept new output. - - - - - dbb7c7c0 by Adam Sandberg Eriksson at 2015-08-09T23:01:05+02:00 HsBang is split into HsSrcBang and HsImplBang With recent changes in GHC handling of strictness annotations in Haddock is simplified. - - - - - 2a7704fa by Ben Gamari at 2015-08-10T13:18:05+02:00 Merge pull request haskell/haddock#433 from adamse/split-hsbang HsBang is split into HsSrcBang and HsImplBang - - - - - 891954bc by Thomas Miedema at 2015-08-15T14:51:18+02:00 Follow changes in GHC build system - - - - - b55d32ab by Mateusz Kowalczyk at 2015-08-21T18:06:09+01:00 Make Travis use 7.10.2 - - - - - 97348b51 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Move SYB utilities to standalone module. - - - - - 748ec081 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Implement `everywhere` transformation in SYB module. - - - - - 011cc543 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Implement generic transformation constructor. - - - - - b9510db2 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Create simple utility module for type specialization. - - - - - 43229fa6 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Make type of type specialization function more general. - - - - - fd844e90 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Add basic HTML test case for checking instance specialization. - - - - - 6ea0ad04 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Make HTML class instance printer take optional signature argument. - - - - - 65aa41b6 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Refactor instance head type to record instead of a meaningless tuple. - - - - - 3fc3bede by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Add expandable method section for each class instance declaration. - - - - - 99ceb107 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Move dummy post-family instances for `DocName` to `Types` module. - - - - - e98f4708 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create convenience functions for type specialization module. - - - - - b947552f by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Hook type specialization logic with HTML pretty-printer. - - - - - dcaa8030 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create stub functions for sugaring specialized types. - - - - - fa84bc65 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Implement list syntax sugaring logic for specialized types. - - - - - e8b05b07 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Implement tuple syntax sugaring logic for specialized types. - - - - - 68a2e5bc by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Get rid of code duplication in type specialization module. - - - - - 4721c336 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create scaffolding of a framework for renaming specialized types. - - - - - 271b488d by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fill in missing cases in specialized type renaming function. - - - - - bfa5f2a4 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Remove code duplication in specialized type renamer. - - - - - ea6bd0e8 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Change state of the type renaming monad. - - - - - 77c5496e by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Implement simple mechanism for generating new type names. - - - - - 91bfb48b by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fill in stub behaviour with actual environment renaming. - - - - - d244517b by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fix logic behind binder type renaming. - - - - - f3c5e360 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Add SYB-like utility function for performing stateful queries. - - - - - eb3f9154 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create function for retrieving free variables from given type. - - - - - a94561d3 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fix compilation error caused by incorrect type signature. - - - - - 8bb707cf by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Move `SetName` class definition to types module. - - - - - 5800b13b by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Hook type renamer with instance method HTML pretty-printer. - - - - - 6a480164 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Add some test cases for type renamer. - - - - - 839842f7 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Make specialized signatures refer to original signature declaration. - - - - - 4880f7c9 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Make specialized methods be nicely formatted again. - - - - - ab5a6a2e by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Attach source locations to the specialized class methods. - - - - - 43f8a559 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Extend instances test case to also test multi-name type signatures. - - - - - 59bc751c by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix tab-based indentation in instances test case. - - - - - c2126815 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Improve placement of instance methods expander button. - - - - - 0a32e287 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Add new data type declaration to instance specialization test case. - - - - - 5281af1f by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Make type renamer first try single-letter names as alternatives. - - - - - 7d509475 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix type renamer bug with incorrect names being generated. - - - - - 0f35bf7c by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Add some documentation and refactor type specialization module. - - - - - da1d0803 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix another bug where type renamer was generating incorrect names. - - - - - cd39b5cb by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Refactor type renamer to rebinding and pure renaming phases. - - - - - 850251f4 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix unwitting compilation bug. - - - - - e5e9fc01 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Integrate instance specification type into class instance definition. - - - - - 825b0ea0 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Get rid of no longer neccessary instance specification type. - - - - - cdba44eb by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix declaration converter to use more appropriate mode for methods. - - - - - bc45c309 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix bug with types not being specialized at all. - - - - - 5d8e5d89 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix bug where instance expander was opening wrong section. - - - - - 6001ee41 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix another type renamer bug where not all names were rebound. - - - - - 5f58ce2a by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix yet another renamer bug where some names were not unique. - - - - - 8265e521 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Split instance subsection layout method to top-level declarations. - - - - - e5e66298 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Rearrange layout of instance methods in generated documentation. - - - - - a50b4eea by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Get rid of no longer used layout method. - - - - - 2ff36ec2 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Attach section title to the instance methods block. - - - - - 7ac15300 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Add basic tests for associated types in instances test case. - - - - - db0ea2f9 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Attach associated types information to instance header. - - - - - 71cad4d5 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Make instance details section contain associated types information. - - - - - deee2809 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Improve look of rendered associated families in instance details. - - - - - 839d13a5 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Introduce alternative type for family declarations. - - - - - d397f03f by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Make instance details record use new type for family declarations. - - - - - 2b23fe97 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Split printer of type family header to separate functions. - - - - - c3498cdc by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Implement HTML renderer for pseudo-family declarations. - - - - - c12bbb04 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Apply type specializer to associated type family declarations. - - - - - 2fd69ff2 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Create helper method for specializing type signatures. - - - - - 475826e7 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Refactor specializer module to be independent from XHTML backend. - - - - - f00b431c by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Add some documentation for instance head specializer. - - - - - a9fef2dc by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Fix bug with missing space in documentation for associated types. - - - - - 50e29056 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Fix issue with incorrect instance details sections being expanded. - - - - - e6dfdd03 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Accept tests affected by adding instance details section. - - - - - 75565b2a by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Make section identifier of instance details more GHC-independent. - - - - - add0c23e by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Re-accept tests after applying deterministic section identifiers. - - - - - 878f2534 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Make identifier generation also architecture-independent. - - - - - 48be69f8 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Fix issue with instance expander hijacking type hyperlink click. - - - - - 47830c1f by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Get rid of dreadful hashing function for generating identifiers. - - - - - 956cd5af by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Move `InstOrigin` type declaration to more appropriate module. - - - - - bf672ed3 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Accept tests affected by changes related to instance expander. - - - - - 8f2a949a by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Add examples with type operators to the instances test case. - - - - - 64600a84 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Add basic support for sugaring infix type operators. - - - - - 747d71b8 by Łukasz Hanuszczak at 2015-08-21T18:22:34+01:00 Add support for sugaring built-in function syntax. - - - - - d4696ffb by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Remove default methods from Hoogle class output. - - - - - bf0e09d7 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Add fixity declarations in Hoogle backend output. - - - - - 90e91a51 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Fix bug with incorrect fixities being generated in Hoogle backend. - - - - - 48f11d35 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Improve class type family declarations output in Hoogle backend. - - - - - 661e8e8f by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Add missing default family equations in Hoogle output. - - - - - e2d64103 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Improve formatting of class details output in Hoogle backend. - - - - - 490fc377 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Fix weird-looking Hoogle output for familyless classes. - - - - - ea115b64 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Create script file for new HTML test runner. - - - - - 609913d3 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Set default behaviour if no arguments given. - - - - - dc115f67 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Add support for providing optional arguments for test runner. - - - - - d93ec867 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Improve output of test runner error messages. - - - - - 0be9fe12 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Add support for executing Haddock process in test runner. - - - - - 4e4d00d9 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Add GHC path to test runner configuration. - - - - - d67a2086 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make GHC path a test runner command-line argument. - - - - - c810079a by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Extend test runner configuration with Haddock arguments. - - - - - fee18845 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Refactor test runner and create stub functions. - - - - - ff7c161f by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make test runner actually run Haddock executable. - - - - - 391f73e6 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Fix bug with test runner not producing any output files. - - - - - 81a74e2d by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Setup skeleton of framework for running tests. - - - - - f8a79ec4 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Fix bug with modules not being found in global search mode. - - - - - 7e700b4d by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make Haddock standard output redirection be more configurable. - - - - - 53b4c17a by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Incorporate old, ugly functions for comparing output files. - - - - - 8277c8aa by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Refactor architecture of test runner output checking functions. - - - - - 587bb414 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Implement actual diffing mechanism. - - - - - 9ed2b5e4 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Improve code style to match popular guidelines. - - - - - 14bffaf8 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make it possible to choose alternative diff tool. - - - - - 5cdfb005 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Create stub methods for processing test output as XML documents. - - - - - 7ef8e12e by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Implement link-stripping logic as simple SYB transformation. - - - - - 8a1fcd4f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Incorporate link stripping to output diffing mechanism. - - - - - 37dba2bc by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Implement footer-stripping logic. - - - - - 9cd52120 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Add missing dependencies in Cabal configuration file. - - - - - e0f83c6e by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix issue with output being printed in incorrect order. - - - - - 0a94fbb0 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make it possible to run tests without generating diff. - - - - - 76a58c6f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Refactor HTML test suite boilerplate to external package. - - - - - af41e6b0 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create utilities for storing directory configuration. - - - - - d8f0698f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Move IO-dependent config of HTML test suite to test package. - - - - - 17369fa0 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Enable all compiler warnings in Haddock test package configuration. - - - - - 9d03b47a by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Move Haddock runner of HTML test suite to Haddock test package. - - - - - 4b3483c5 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make Haddock test package more generic. - - - - - 03754194 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create convenience wrappers to simplify in test entry points. - - - - - 27476ab7 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Adjust module visibility and items they export. - - - - - c40002ba by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Remove no longer useful test option. - - - - - 55ab2541 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Change extension of test files used for diffing. - - - - - 136bf4e4 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Refactor and simplify XHTML helper module of test package. - - - - - 69f7e3df by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix typo in link stripper of HTML test suite runner. - - - - - 0c3c1c6b by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create convenience script for running specific HTML tests. - - - - - 489e1b05 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Implement utility functions for conditional link stripping. - - - - - 0f985dc3 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Adapt `hypsrc-test` module to work with new testing framework. - - - - - 927406f9 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Implement output accepting mechanism in test package. - - - - - 8545715e by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create utility function for recursive obtaining directory contents. - - - - - cb70381f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make Haddock test package more generic. - - - - - 019599b5 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix path handling in test runner. - - - - - 399b985b by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make it possible to specify ignored files for test output. - - - - - 41b3d93d by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Adapt HTML test runner to use new ignoring functionality. - - - - - e2091c8b by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix bug with not all test output files being checked. - - - - - b22134f9 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Specify ignored files for hyperlinker source test runner. - - - - - 3301dfa1 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Copy test runner script for hyperlinked source case. - - - - - d39a6dfa by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix bug with test runner invoking Haddock in incorrect mode. - - - - - f32c8ff3 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix path handling in test module loader. - - - - - 10f94ee9 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Make test runner ignore test packages with no modules. - - - - - 5dc4239c by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Create test runner entry points for LaTeX test suite. - - - - - 58d1f7cf by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix bug with unnecessary checking old test output. - - - - - c7ce76e1 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Re-implement test acceptance functionality. - - - - - 13bbabe8 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix warning about no longer needed definition. - - - - - 958a99b8 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Adapt Cabal configuration to execute LaTeX suite with new runner. - - - - - 550ff663 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Setup test suite for Hoogle backend. - - - - - 3aa969c4 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Make Hoogle backend create output directory if needed. - - - - - eb085b02 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Add appropriate .gitignore entry and configure Hoogle test suite. - - - - - a50bf915 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix bug with test runner failing when run on multiple test packages. - - - - - bf5368b8 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Create simple test cases for Hoogle backend. - - - - - 6121ba4b by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Create helper function for conversion between XML and XHTML. - - - - - cb516061 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Refactor existing code to use XHTML printer instead of XML one. - - - - - e2de8c82 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Improve portability of test runner scripts. - - - - - 9563e774 by Łukasz Hanuszczak at 2015-08-22T23:43:16+02:00 Remove redundant import statement. - - - - - 55353df1 by Łukasz Hanuszczak at 2015-08-24T23:09:20+02:00 Fix bug with accepting to non-existing directory. - - - - - 00a334ca by Łukasz Hanuszczak at 2015-08-24T23:09:47+02:00 Accept output for Hoogle and LaTeX backends. - - - - - 29191d8b by Łukasz Hanuszczak at 2015-08-24T23:14:18+02:00 Get rid of obsolete testing utilities. - - - - - bbb25db3 by Łukasz Hanuszczak at 2015-08-24T23:18:50+02:00 Update sandbox setup guide to work with Haddock test package. - - - - - cfd45248 by Łukasz Hanuszczak at 2015-08-24T23:51:30+02:00 Make Travis aware of Haddock test package. - - - - - 74185b7a by Łukasz Hanuszczak at 2015-08-25T17:41:59+02:00 Fix test suite failure when used with Stack. - - - - - 18769697 by Łukasz Hanuszczak at 2015-08-25T18:02:09+02:00 Add sample Stack setup to the hacking guide. - - - - - 22715eeb by Łukasz Hanuszczak at 2015-08-25T18:04:47+02:00 Fix Markdown formatting of README file. - - - - - b49ec386 by Łukasz Hanuszczak at 2015-08-25T18:13:36+02:00 Setup Haddock executable path in Travis configuration. - - - - - 5d29eb03 by Eric Seidel at 2015-08-30T09:55:58-07:00 account for changes to ipClass - - - - - f111740a by Ben Gamari at 2015-09-02T13:20:37+02:00 Merge pull request haskell/haddock#443 from bgamari/ghc-head account for changes to ipClass - - - - - a2654bf6 by Jan Stolarek at 2015-09-03T01:32:57+02:00 Follow changes from haskell/haddock#6018 - - - - - 2678bafe by Richard Eisenberg at 2015-09-21T12:00:47-04:00 React to refactoring CoAxiom branch lists. - - - - - ebc56e24 by Edward Z. Yang at 2015-09-21T11:53:46-07:00 Track msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 4a8c4198 by Tamar Christina at 2015-09-27T13:59:08+02:00 Create Process: removed PhaseFailed - - - - - 7e99b790 by Oleg Grenrus at 2015-09-27T20:52:10+03:00 Generate docs for orphan instances - - - - - 32e932e2 by Oleg Grenrus at 2015-09-28T07:21:11+03:00 Have source links for orphan instances - - - - - c2eb9f4f by Oleg Grenrus at 2015-09-28T07:24:58+03:00 Print orphan instances header only if required - - - - - ff96f978 by Oleg Grenrus at 2015-09-28T07:40:54+03:00 Add orphan instances link to contents box - - - - - d72490a6 by Oleg Grenrus at 2015-09-28T16:37:44+03:00 Fix orphan instance collapsing - - - - - 25d3dfe5 by Ben Gamari at 2015-10-03T12:38:09+02:00 Merge pull request haskell/haddock#448 from Mistuke/fix-silent-death-of-runInteractive Remove PhaseFailed - - - - - 1e45e43b by Edward Z. Yang at 2015-10-11T13:10:10-07:00 s/PackageKey/UnitId/g and s/packageKey/unitId/g Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - b1370ac1 by Adam Gundry at 2015-10-16T16:26:42+01:00 Roughly fix up haddock for DuplicateRecordFields changes This compiles, but will probably need more work to produce good documentation when the DuplicateRecordFields extension is used. - - - - - 60bef421 by Simon Peyton Jones at 2015-10-26T12:52:36+00:00 Track wip/spj-wildcard-refactor on main repo - - - - - 4c1898ca by Simon Peyton Jones at 2015-10-27T14:24:56+00:00 Track change to PatSyn.patSynSig - - - - - 25108e85 by Simon Peyton Jones at 2015-10-27T17:34:18+00:00 Follow changes to HsTYpe Not yet complete (but on a wip/ branch) - - - - - 693643ac by Ben Gamari at 2015-10-28T14:33:06+01:00 Account for Typeable changes The treatment of type families changed. - - - - - cd7c2221 by Simon Peyton Jones at 2015-10-30T13:03:51+00:00 Work on updating Haddock to wip/spj-wildard-recactor Still incomplete - - - - - 712032cb by Herbert Valerio Riedel at 2015-10-31T11:01:45+01:00 Relax upper bound on `base` to allow base-4.9 - - - - - 0bfa0475 by Simon Peyton Jones at 2015-10-31T19:08:13+00:00 More adaption to wildcard-refactor - - - - - 0a3c0cb7 by Simon Peyton Jones at 2015-10-31T22:14:43+00:00 Merge remote-tracking branch 'origin/ghc-head' into wip/spj-wildcard-refactor Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - c4fd4ec9 by Alan Zimmerman at 2015-11-01T11:16:34+01:00 Matching change GHC haskell/haddock#11017 BooleanFormula located - - - - - 42cdd882 by Matthew Pickering at 2015-11-06T20:02:16+00:00 Change for IEThingWith - - - - - f368b7be by Ben Gamari at 2015-11-11T11:35:51+01:00 Eliminate support for deprecated GADT syntax Follows from GHC D1460. - - - - - e32965b8 by Simon Peyton Jones at 2015-11-13T12:18:17+00:00 Merge with origin/head - - - - - ebcf795a by Edward Z. Yang at 2015-11-13T21:56:27-08:00 Undo msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 4e23989f by Simon Peyton Jones at 2015-11-18T11:32:54+00:00 Wibbles to Haddock - - - - - 2289cd4a by Simon Peyton Jones at 2015-11-20T23:12:49+00:00 Merge remote-tracking branch 'origin/ghc-head' into wip/spj-wildcard-refactor - - - - - 695975a6 by Alan Zimmerman at 2015-11-21T21:16:12+02:00 Update to match GHC wip/T11019 - - - - - bbba21e7 by Simon Peyton Jones at 2015-11-23T13:54:31+00:00 merge with origin/ghc-head - - - - - 3d664258 by Simon Peyton Jones at 2015-11-23T17:17:18+00:00 Wibble - - - - - e64cf586 by Herbert Valerio Riedel at 2015-12-05T00:29:55+01:00 Canonicalise Monad instances - - - - - a2de15a7 by Alan Zimmerman at 2015-12-05T17:33:52+02:00 Matching changes for haskell/haddock#11028 - - - - - cc29a3e4 by Alan Zimmerman at 2015-12-05T19:45:33+02:00 Placeholder for record style GADT declaration A GADT Declaration is now presented as CmmCondBranch :: {..} -> CmmNode O C cml_pred :: CmmExpr cml_true, cml_false :: !Label cml_likely :: Maybe Bool for CmmCondBranch :: { -- conditional branch cml_pred :: CmmExpr, cml_true, cml_false :: ULabel, cml_likely :: Maybe Bool -- likely result of the conditional, -- if known } -> CmmNode O C - - - - - 95dd15d1 by Richard Eisenberg at 2015-12-11T17:33:39-06:00 Update for type=kinds - - - - - cb5fd9ed by Herbert Valerio Riedel at 2015-12-14T15:07:30+00:00 Bump versions for ghc-7.11 - - - - - 4f286d96 by Simon Peyton Jones at 2015-12-14T15:10:56+00:00 Eliminate instanceHead' in favour of GHC's instanceSig This is made possible by the elimination of "silent superclass parameters" in GHC - - - - - 13ea2733 by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Remove redundant constraints from haddock, discovered by -fwarn-redundant-constraints - - - - - 098df8b8 by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Track changes in HsSyn for quasi-quotes - - - - - 716a64de by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Track change in API of TyCon - - - - - 77a66bca by Adam Gundry at 2015-12-14T15:10:58+00:00 Track API changes to support empty closed type familes - - - - - f2808305 by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Track the new location of setRdrNameSpace - - - - - ba8b08a4 by Alan Zimmerman at 2015-12-14T15:10:59+00:00 ApiAnnotations : strings in warnings do not return SourceText The strings used in a WARNING pragma are captured via strings :: { Located ([AddAnn],[Located FastString]) } : STRING { sL1 $1 ([],[L (gl $1) (getSTRING $1)]) } .. The STRING token has a method getSTRINGs that returns the original source text for a string. A warning of the form {-# WARNING Logic , mkSolver , mkSimpleSolver , mkSolverForLogic , solverSetParams , solverPush , solverPop , solverReset , solverGetNumScopes , solverAssertCnstr , solverAssertAndTrack , solverCheck , solverCheckAndGetModel , solverGetReasonUnknown "New Z3 API support is still incomplete and fragile: \ \you may experience segmentation faults!" #-} returns the concatenated warning string rather than the original source. - - - - - a4ded87e by Thomas Winant at 2015-12-14T15:14:05+00:00 Update after wild card renaming refactoring in D613 Summary: * Move `Post*` type instances to `Haddock.Types` as other modules than `Haddock.Interface.Rename` will rely on these type instances. * Update after wild card renaming refactoring in D613. Reviewers: simonpj, austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D954 GHC Trac Issues: haskell/haddock#10098 - - - - - 25c78107 by Adam Sandberg Eriksson at 2015-12-14T15:14:06+00:00 StrictData: print correct strictness marks - - - - - 6cbc41c4 by Adam Sandberg Eriksson at 2015-12-14T15:14:06+00:00 StrictData: changes in HsBang type - - - - - ad46821a by Alan Zimmerman at 2015-12-14T15:14:06+00:00 Replace (SourceText,FastString) with WithSourceText data type Phab:D907 introduced SourceText for a number of data types, by replacing FastString with (SourceText,FastString). Since this has an Outputable instance, no warnings are generated when ppr is called on it, but unexpected output is generated. See Phab:D1096 for an example of this. Replace the (SourceText,FastString) tuples with a new data type data WithSourceText = WithSourceText SourceText FastString Trac ticket: haskell/haddock#10692 - - - - - abc0ae5b by Adam Sandberg Eriksson at 2015-12-14T15:14:06+00:00 HsBang is split into HsSrcBang and HsImplBang With recent changes in GHC handling of strictness annotations in Haddock is simplified. - - - - - 3308d06c by Thomas Miedema at 2015-12-14T15:14:07+00:00 Follow changes in GHC build system - - - - - 6c763deb by Eric Seidel at 2015-12-14T15:14:07+00:00 account for changes to ipClass - - - - - ae5b4eac by Jan Stolarek at 2015-12-14T15:17:00+00:00 Follow changes from haskell/haddock#6018 - - - - - ffbc40e0 by Richard Eisenberg at 2015-12-14T15:17:02+00:00 React to refactoring CoAxiom branch lists. - - - - - d1f531e9 by Edward Z. Yang at 2015-12-14T15:17:02+00:00 Track msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 79f73754 by Tamar Christina at 2015-12-14T15:17:02+00:00 Create Process: removed PhaseFailed - - - - - 3d37bebb by Edward Z. Yang at 2015-12-14T15:20:46+00:00 s/PackageKey/UnitId/g and s/packageKey/unitId/g Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 5f8a9e44 by Adam Gundry at 2015-12-14T15:20:48+00:00 Roughly fix up haddock for DuplicateRecordFields changes This compiles, but will probably need more work to produce good documentation when the DuplicateRecordFields extension is used. - - - - - 79dda70f by Simon Peyton Jones at 2015-12-14T15:26:02+00:00 Track wip/spj-wildcard-refactor on main repo - - - - - 959930fb by Simon Peyton Jones at 2015-12-14T15:37:50+00:00 Follow changes to HsTYpe Not yet complete (but on a wip/ branch) - - - - - e18a8df5 by Simon Peyton Jones at 2015-12-14T15:37:52+00:00 Work on updating Haddock to wip/spj-wildard-recactor Still incomplete - - - - - aa35ab52 by Simon Peyton Jones at 2015-12-14T15:40:18+00:00 More adaption to wildcard-refactor - - - - - 8ceef94b by Simon Peyton Jones at 2015-12-14T15:46:04+00:00 Track change to PatSyn.patSynSig - - - - - cd81e83d by Ben Gamari at 2015-12-14T15:46:06+00:00 Account for Typeable changes The treatment of type families changed. - - - - - 63c9117c by Herbert Valerio Riedel at 2015-12-14T15:46:34+00:00 Relax upper bound on `base` to allow base-4.9 - - - - - a484c613 by Alan Zimmerman at 2015-12-14T15:47:46+00:00 Matching change GHC haskell/haddock#11017 BooleanFormula located - - - - - 2c26fa51 by Matthew Pickering at 2015-12-14T15:47:47+00:00 Change for IEThingWith - - - - - 593baa0f by Ben Gamari at 2015-12-14T15:49:21+00:00 Eliminate support for deprecated GADT syntax Follows from GHC D1460. - - - - - b6b5ca78 by Edward Z. Yang at 2015-12-14T15:49:54+00:00 Undo msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - b5b0e072 by Alan Zimmerman at 2015-12-14T15:54:20+00:00 Update to match GHC wip/T11019 - - - - - 14ddeb68 by Simon Peyton Jones at 2015-12-14T15:54:22+00:00 Wibble - - - - - 10a90ad8 by Herbert Valerio Riedel at 2015-12-14T15:54:22+00:00 Canonicalise Monad instances - - - - - ed68ac50 by Alan Zimmerman at 2015-12-14T15:55:48+00:00 Matching changes for haskell/haddock#11028 - - - - - 3f7e5a2d by Alan Zimmerman at 2015-12-14T15:55:49+00:00 Placeholder for record style GADT declaration A GADT Declaration is now presented as CmmCondBranch :: {..} -> CmmNode O C cml_pred :: CmmExpr cml_true, cml_false :: !Label cml_likely :: Maybe Bool for CmmCondBranch :: { -- conditional branch cml_pred :: CmmExpr, cml_true, cml_false :: ULabel, cml_likely :: Maybe Bool -- likely result of the conditional, -- if known } -> CmmNode O C - - - - - 6543a73f by Richard Eisenberg at 2015-12-14T15:59:55+00:00 Update for type=kinds - - - - - 193a5c48 by Matthew Pickering at 2015-12-14T18:17:00+00:00 Changes to compile with 8.0 - - - - - add669ec by Matthew Pickering at 2015-12-14T18:47:12+00:00 Warnings - - - - - 223f3fb4 by Ben Gamari at 2015-12-15T23:45:05+01:00 Update for D1200 - - - - - d058388f by Ben Gamari at 2015-12-16T05:40:17-05:00 Types: Add Outputable[Bndr] DocName instances - - - - - 62ecd7fb by Ben Gamari at 2015-12-16T09:23:09-05:00 Fix fallout from wildcards refactoring The wildcard refactoring was introduced a new type of signature, `ClassOpSig`, which is carried by typeclasses. The original patch adapting Haddock for this change missed a few places where this constructor needed to be handled, resulting in no class methods in documentation produced by Haddock. Additionally, this moves and renames the `isVanillaLSig` helper from GHC's HsBinds module into GhcUtils, since it is only used by Haddock. - - - - - ddbc187a by Ben Gamari at 2015-12-16T17:54:55+01:00 Update for D1200 - - - - - cec83b52 by Ben Gamari at 2015-12-16T17:54:55+01:00 Types: Add Outputable[Bndr] DocName instances - - - - - d12ecc98 by Ben Gamari at 2015-12-16T17:54:55+01:00 Fix fallout from wildcards refactoring The wildcard refactoring was introduced a new type of signature, `ClassOpSig`, which is carried by typeclasses. The original patch adapting Haddock for this change missed a few places where this constructor needed to be handled, resulting in no class methods in documentation produced by Haddock. Additionally, this moves and renames the `isVanillaLSig` helper from GHC's HsBinds module into GhcUtils, since it is only used by Haddock. - - - - - ada1616f by Ben Gamari at 2015-12-16T17:54:58+01:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - a4f0383d by Ben Gamari at 2015-12-16T23:32:38+01:00 Fix Hyperlinker GHC.con_names is now GHC.getConNames - - - - - a10e6849 by Ben Gamari at 2015-12-20T00:54:11+01:00 Merge remote-tracking branch 'mrhania/testing-framework-improvements' into ghc-head - - - - - f078b4fd by Ben Gamari at 2015-12-20T00:59:51+01:00 test: Compatibility with Cabal 1.23 - - - - - 88a511a9 by Ben Gamari at 2015-12-20T01:14:35+01:00 Merge remote-tracking branch 'phadej/orphans' into ghc-head - - - - - 4e250f36 by Ben Gamari at 2015-12-20T01:14:52+01:00 Add html-test for orphan instances output - - - - - 87fffbad by Alan Zimmerman at 2015-12-20T09:50:42+02:00 Update for GHC trac#11258 Adding locations to RdrName in FieldOcc and AmbiguousFieldOcc - - - - - 6b7e51c9 by idontgetoutmuch at 2015-12-20T21:01:47+00:00 Merge pull request haskell/haddock#1 from haskell/ghc-head Ghc head - - - - - 229c1fb5 by Dominic Steinitz at 2015-12-21T07:19:16+00:00 Handle inline math with mathjax. - - - - - 57902d66 by Dominic Steinitz at 2015-12-21T08:07:11+00:00 Fix the documentation for haddock itself. Change notation and add support for inline math. Allow newlines in display math. Add a command line option for the mathjax url (you might want to use a locally installed version). Rebase tests because of extra url and version change. Respond to (some of the) comments. Fix warnings in InterfaceFile.hs - - - - - 0e69f236 by Herbert Valerio Riedel at 2015-12-21T18:30:43+01:00 Fix-up left-over assumptions of GHC 7.12 into GHC 8.0 - - - - - c67f8444 by Simon Peyton Jones at 2015-12-22T16:26:56+00:00 Follow removal of NamedWildCard from HsType - - - - - da40327a by Ben Gamari at 2015-12-23T14:15:28+01:00 html-test/Operators: Clear up ambiguous types For reasons that aren't entirely clear a class with ambiguous types was accepted by GHC <8.0. I've added a functional dependency to clear up this ambiguity. - - - - - 541b7fa4 by Ben Gamari at 2015-12-23T14:18:51+01:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-head - - - - - 0febc947 by Ben Gamari at 2015-12-24T00:30:20+01:00 hoogle-test/AssocTypes: Allow AmbiguousTypes GHC 8.0 complains otherwise - - - - - 25810841 by Ben Gamari at 2015-12-24T00:33:18+01:00 OrphanInstances: Accept test output - - - - - 841987f3 by Ben Gamari at 2015-12-25T11:03:11+01:00 Merge remote-tracking branch 'idontgetoutmuch/ghc-head' into ghc-head - - - - - 358391f0 by Ben Gamari at 2015-12-26T10:44:50+01:00 Add missing import - - - - - a8896885 by Ben Gamari at 2015-12-26T10:45:27+01:00 travis: Use Travis containers - - - - - 85e82134 by Herbert Valerio Riedel at 2015-12-30T17:25:39+01:00 tweak version bounds for GHC-8.1 - - - - - 672a5f75 by randen at 2016-01-01T23:45:25-08:00 The Haddock part for fully gcc-like response files " driver/Main.hs * Moved the response file handling into ResponseFile.hs, updating import section as appropriate. * driver/ResponseFile.hs * New file. In anticipation that maybe some day this could be provided by another library, and to make it possible to unit test, this functionality is pulled out of the Main.hs module, and expanded to support the style/format of response files which gcc uses. * The specification for the format of response files which gcc generates and consumes, seems to be best derived from the gcc code itself (libiberty/argv.c), so that is what has been done here. * This is intended to fix haskell/haddock#379 * driver-test/Main.hs * New file for testing code in the driver source tree * driver-test/ResponseFileSpec.hs * Tests, adapted/adopted from the same gcc code where the escaping/unescaping is from, in the hspec style of unit tests * haddock.cabal * Add the driver-test test-suite. Introduces a new library dependency (upon hspec) for the haddock driver target in the haddock.cabal file, but practically, this should not be a problem as the haddock-api tests already depend on hspec. - - - - - 498781df by Ben Gamari at 2016-01-06T13:41:04+01:00 Version bumps and changelog - - - - - 8451e46a by Ben Gamari at 2016-01-06T13:47:17+01:00 Merge remote-tracking branch 'randen/bug468' - - - - - fb2d9181 by Ben Gamari at 2016-01-06T08:14:42-05:00 Add ResponseFile to OtherModules - - - - - 2cb2d2e3 by Ben Gamari at 2016-01-06T14:35:00+01:00 Merge branch 'master' into ghc-head - - - - - 913477d4 by Eric Seidel at 2016-01-11T14:57:57-08:00 deal with un-wiring of IP class - - - - - c557a4b3 by Alan Zimmerman at 2016-01-15T11:14:35+02:00 Update to match wip/T11430 in GHC - - - - - 3e135093 by Alan Zimmerman at 2016-01-16T18:21:59+01:00 Update to match wip/T11430 in GHC - - - - - c48ef2f9 by Ben Gamari at 2016-01-18T09:50:06+01:00 Merge remote-tracking branch 'gridaphobe/ghc-head' into ghc-head - - - - - 9138a1b0 by Eric Seidel at 2016-01-18T12:50:15+01:00 deal with un-wiring of IP class (cherry picked from commit 17388b0f0029d969d79353be7737eb01c7b8dc5f) - - - - - b48c172e by Joachim Breitner at 2016-01-19T00:11:38+01:00 Make sure --mathjax affects all written HTML files This fixes haskell/haddock#475. - - - - - af61fe63 by Ryan Scott at 2016-02-07T23:25:57+01:00 Render */# instead of TYPE 'Lifted/TYPE 'Unlifted (fixes haskell/haddock#473) - - - - - b6458693 by Ben Gamari at 2016-02-07T23:29:27+01:00 Merge pull request haskell/haddock#477 from haskell/issue-475 Make sure --mathjax affects all written HTML files - - - - - adcc0071 by Ben Gamari at 2016-02-07T23:34:52+01:00 Merge branch 'master' into ghc-head - - - - - d0404e61 by Ben Gamari at 2016-02-08T12:46:49+01:00 doc: Switch to Sphinx - - - - - acb153b3 by Ben Gamari at 2016-02-08T12:46:56+01:00 Document --use-unicode flag - - - - - c20bdf1d by Ben Gamari at 2016-02-08T13:41:24+01:00 Fix GHC and haddock-library dependency bounds - - - - - 8d946801 by Ben Gamari at 2016-02-08T14:54:56+01:00 testsuite: Rework handling of output sanitization Previously un-cleaned artifacts were kept as reference output, making it difficult to tell what has changed and causing spurious changes in the version control history. Here we rework this, cleaning the output during acceptance. To accomplish this it was necessary to move to strict I/O to ensure the reference handle was closed before accept attempts to open the reference file. - - - - - c465705d by Ben Gamari at 2016-02-08T15:36:05+01:00 test: Compare on dump For reasons I don't understand the Xml representations differ despite their textual representations being identical. - - - - - 1ec0227a by Ben Gamari at 2016-02-08T15:36:05+01:00 html-test: Accept test output - - - - - eefbd63a by Ben Gamari at 2016-02-08T15:36:08+01:00 hypsrc-test: Accept test output And fix impredicative Polymorphism testcase. - - - - - d1df4372 by Ben Gamari at 2016-02-08T15:40:44+01:00 Merge branch 'fix-up-testsuite' - - - - - 206a3859 by Phil Ruffwind at 2016-02-08T17:51:21+01:00 Move the permalinks to "#" on the right side Since pull request haskell/haddock#407, the identifiers have been permalinked to themselves, but this makes it difficult to copy the identifier by double-clicking. To work around this usability problem, the permalinks are now placed on the far right adjacent to "Source", indicated by "#". Also, 'namedAnchor' now uses 'id' instead of 'name' (which is obsolete). - - - - - 6c89fa03 by Phil Ruffwind at 2016-02-08T17:54:44+01:00 Update tests for previous commit - - - - - effaa832 by Ben Gamari at 2016-02-08T17:56:17+01:00 Merge branch 'anchors-redux' - - - - - 9a2bec90 by Ben Gamari at 2016-02-08T17:58:40+01:00 Use -fprint-unicode-syntax when --use-unicode is enabled This allows GHC to render `*` as its Unicode representation, among other things. - - - - - 28ecac5b by Ben Gamari at 2016-02-11T18:53:03+01:00 Merge pull request haskell/haddock#480 from bgamari/sphinx Move documentation to ReStructuredText - - - - - 222e5920 by Ryan Scott at 2016-02-11T15:42:42-05:00 Collapse type/data family instances by default - - - - - a80ac03b by Ryan Scott at 2016-02-11T20:17:09-05:00 Ensure expanded family instances render correctly - - - - - 7f985231 by Ben Gamari at 2016-02-12T10:04:22+01:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - d4eda086 by Ben Gamari at 2016-02-18T00:05:56+01:00 Xhtml.Decl: Various cleanups - - - - - 79bee48d by Ben Gamari at 2016-02-18T00:05:56+01:00 Xhtml.Decl: Show kind signatures for type family variables Addresses GHC haskell/haddock#11588. - - - - - b2981d98 by Ben Gamari at 2016-02-18T00:05:56+01:00 Xhtml.Decl: Show 'where ...' after closed type family Seems like we should ideally show the actual equations as well but that seems like it would be a fair amount of work - - - - - cfc0e621 by Ben Gamari at 2016-02-18T22:48:12+01:00 Merge pull request haskell/haddock#483 from bgamari/T11588 Fix GHC haskell/haddock#11588 This fixes GHC haskell/haddock#11588: * Show where ... after closed type families * Show kind signatures on type family type variables - - - - - 256e8a0d by Ben Gamari at 2016-02-18T23:15:39+01:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 32402036 by Richard Eisenberg at 2016-02-24T13:21:44-05:00 Follow-on changes to support RuntimeRep - - - - - 2b1c572d by Matthew Pickering at 2016-03-04T21:04:02+00:00 Remove unused functions - - - - - eb906f50 by Richard Eisenberg at 2016-03-13T21:17:20+01:00 Follow-on changes to support RuntimeRep (cherry picked from commit ab954263a793d8ced734459d6194a5d89214b66c) - - - - - 8c34ef34 by Richard Eisenberg at 2016-03-14T23:47:23-04:00 Changes due to fix for GHC#11648. - - - - - 0e022014 by Richard Eisenberg at 2016-03-15T14:06:45+01:00 Changes due to fix for GHC#11648. (cherry picked from commit bb994de1ab0c76d1aaf1e39c54158db2526d31f1) - - - - - ed3f78ab by Rik Steenkamp at 2016-04-02T22:20:36+01:00 Fix printing of pattern synonym types Removes the call to `patSynType :: PatSyn -> Type` in `Convert.hs` as this function will be removed from GHC. Instead, we use the function `patSynSig` and build the `HsDecl` manually. This also fixes the printing of the two contexts and the quantified type variables in a pattern synonym type. Reviewers: goldfire, bgamari, mpickering Differential Revision: https://phabricator.haskell.org/D2048 - - - - - d3210042 by Rik Steenkamp at 2016-04-04T15:43:32+02:00 Fix printing of pattern synonym types Removes the call to `patSynType :: PatSyn -> Type` in `Convert.hs` as this function will be removed from GHC. Instead, we use the function `patSynSig` and build the `HsDecl` manually. This also fixes the printing of the two contexts and the quantified type variables in a pattern synonym type. Reviewers: goldfire, bgamari, mpickering Differential Revision: https://phabricator.haskell.org/D2048 (cherry picked from commit 3ddcbd6b8e6884bd95028381176eb33bee6896fb) - - - - - 236eec90 by Ben Gamari at 2016-04-10T23:40:15+02:00 doc: Fix option references (cherry picked from commit f915fb3c74328fb994235bbbd42092a691539197) - - - - - 692ee7e0 by Ben Gamari at 2016-04-10T23:40:15+02:00 doc: Only install if BUILD_SPHINX_HTML==YES Fixes GHC haskell/haddock#11818. - - - - - 79619f57 by Ben Gamari at 2016-04-10T23:46:22+02:00 doc: Only install if BUILD_SPHINX_HTML==YES Fixes GHC haskell/haddock#11818. (cherry picked from commit c6d6a18d85e5e2d9bb5904e6919e8a8d7e31c4c5) - - - - - 3358ccb4 by Ben Gamari at 2016-04-10T23:47:27+02:00 doc: Fix option references (cherry picked from commit f915fb3c74328fb994235bbbd42092a691539197) - - - - - 264949b1 by Ben Gamari at 2016-04-16T17:50:23+02:00 Merge pull request haskell/haddock#482 from RyanGlScott/ghc-head Collapse type/data family instances by default - - - - - 478c483a by Ben Gamari at 2016-04-16T17:51:09+02:00 Merge pull request haskell/haddock#489 from mpickering/unused-functions Remove some unused functions - - - - - c94e55f0 by Ryan Scott at 2016-04-16T17:57:54+02:00 Collapse type/data family instances by default (cherry picked from commit 2da130a8db8f995c119b544fad807533236cf088) - - - - - 31e633d3 by Ryan Scott at 2016-04-16T17:58:06+02:00 Ensure expanded family instances render correctly (cherry picked from commit 1338b5d7c32939de6bbc31af0049477e4f847103) - - - - - 03e4d197 by Matthew Pickering at 2016-04-16T17:58:21+02:00 Remove unused functions (cherry picked from commit b89d1c2456bdb2d4208d94ded56155f7088a37d0) - - - - - ed4116f6 by Ben Gamari at 2016-04-20T10:46:57+02:00 ghc: Install files for needed --hyperlinked-source - - - - - 0be999c4 by Ben Gamari at 2016-04-20T11:37:54+02:00 ghc: Install files for needed --hyperlinked-source (cherry picked from commit 5c82c9fc2d21ddaae4a2470f1c375426968f19c6) - - - - - 4d17544c by Simon Peyton Jones at 2016-04-20T12:42:28+01:00 Track change to HsGroup This relates to a big GHC patch for Trac haskell/haddock#11348 - - - - - 1700a50d by Ben Gamari at 2016-05-01T13:19:27+02:00 doc: At long last fix ghc.mk The variable reference was incorrectly escaped, meaning that Sphinx documentation was never installed. - - - - - 0b7c8125 by Ben Gamari at 2016-05-01T13:21:43+02:00 doc: At long last fix ghc.mk The variable reference was incorrectly escaped, meaning that Sphinx documentation was never installed. (cherry picked from commit 609018dd09c4ffe27f9248b2d8b50f6196cd42b9) - - - - - af115ce0 by Ryan Scott at 2016-05-04T22:15:50-04:00 Render Haddocks for derived instances Currently, one can document top-level instance declarations, but derived instances (both those in `deriving` clauses and standalone `deriving` instances) do not enjoy the same privilege. This makes the necessary changes to the Haddock API to enable rendering Haddock comments for derived instances. This is part of a fix for Trac haskell/haddock#11768. - - - - - 76fa1edc by Ben Gamari at 2016-05-10T18:13:25+02:00 haddock-test: A bit of refactoring for debuggability - - - - - 7d4c4b20 by Ben Gamari at 2016-05-10T18:13:25+02:00 Create: Mark a comment as TODO - - - - - 2a6d0c90 by Ben Gamari at 2016-05-10T18:13:25+02:00 html-test: Update reference output - - - - - bd60913d by Ben Gamari at 2016-05-10T18:13:25+02:00 hypsrc-test: Fix reference file path in cabal file It appears the haddock insists on prefixing --hyperlinked-sourcer output with directory which the source appeared in. - - - - - c1548057 by Ben Gamari at 2016-05-10T18:22:12+02:00 doc: Update extra-source-files in Cabal file - - - - - 41d5bae3 by Ben Gamari at 2016-05-10T18:29:21+02:00 Bump versions - - - - - ca75b779 by Ben Gamari at 2016-05-11T16:03:44+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 4e3cfd62 by Ben Gamari at 2016-05-11T16:06:45+02:00 Merge remote-tracking branch 'RyanGlScott/ghc-head' into ghc-head - - - - - a2379970 by Ben Gamari at 2016-05-11T23:15:11+02:00 doc: Add clean targets - - - - - f275212e by Ben Gamari at 2016-05-11T23:15:14+02:00 doc: Add html as an all-target for ghc Otherwise the html documentation won't be installed for binary-dist. - - - - - 388fc0af by Ben Gamari at 2016-05-12T09:49:12+02:00 Update CHANGES - - - - - bad81ad5 by Ben Gamari at 2016-05-12T09:49:38+02:00 Version bump - - - - - c01688a7 by Ben Gamari at 2016-05-12T10:04:58+02:00 Revert "Version bump" This bump was a bit premature. This reverts commit 7b238d9c5be9b07aa2d10df323b5c7b8d1634dc8. - - - - - 7ed05724 by Ben Gamari at 2016-05-12T10:05:33+02:00 doc: Fix GHC clean rule Apparently GHC's build system doesn't permit wildcards in clean paths. - - - - - 5d9611f4 by Ben Gamari at 2016-05-12T17:43:50+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 653566b2 by Ben Gamari at 2016-05-14T09:57:31+02:00 Version bump to 2.17.2 - - - - - b355c439 by Ben Gamari at 2016-05-14T09:57:51+02:00 doc: Use `$(MAKE)` instead of `make` This is necessary to ensure we use gmake. - - - - - 8a18537d by Ben Gamari at 2016-05-14T10:15:45+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - b3290ef1 by Sebastian Meric de Bellefon at 2016-05-14T11:29:47-04:00 Fix haskell/haddock#303. Hide footer when printing The "Produced by Haddock" footer was overlapping the page's body when printing. This patch hides the footer with a css media rule. - - - - - b4a76f89 by Sebastian Meric de Bellefon at 2016-05-15T02:12:46-04:00 Fix haskell/haddock#280. Parsing of module header The initial newlines were counted as indentation spaces, thus disturbing the parsing of next lines - - - - - ba797c9e by Ben Gamari at 2016-05-16T14:53:46+02:00 doc: Vendorize alabaster Sphinx theme Alabaster is now the default sphinx theme and is a significant improvement over the previous default that it's worthproviding it when unavailable (e.g. Sphinx <1.3). - - - - - c9283e44 by Ben Gamari at 2016-05-16T14:55:17+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 1c9ea198 by Sebastian Méric de Bellefon at 2016-05-16T12:30:40-04:00 Merge pull request haskell/haddock#502 from Helkafen/master Fix haskell/haddock#303. Hide footer when printing - - - - - 33631016 by Ben Gamari at 2016-05-16T19:56:11+02:00 Revert "doc: Vendorize alabaster Sphinx theme" This ended up causes far too many issues to be worthwhile. We'll just have to live with inconsistent haddock documentation. This reverts commit cec21957001143794e71bcd9420283df18e7de40. - - - - - 93317d26 by Ben Gamari at 2016-05-16T19:56:11+02:00 cabal: Fix README path - - - - - c8695b22 by Ben Gamari at 2016-05-16T19:58:51+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 0b50eaaa by Ben Gamari at 2016-05-16T21:02:08+02:00 doc: Use whichever theme sphinx deems appropriate - - - - - 857c1c9c by Ben Gamari at 2016-05-16T21:07:08+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 15fc5637 by Ben Gamari at 2016-05-22T12:43:59+02:00 Create: Remove redundant imports - - - - - 132ddc6a by Ben Gamari at 2016-05-22T12:43:59+02:00 Create: Better debug output For tracking down haskell/haddock#505 - - - - - 2252a149 by Ben Gamari at 2016-05-22T12:43:59+02:00 Don't consider default class ops when looking for decls When we are looking for an operation within a class we don't care about `default`-type declarations. This was the cause of haskell/haddock#505. - - - - - 4886b2ec by Oleg Grenrus at 2016-05-24T16:19:48+03:00 UnfelpfulSpan line number omitted Kind of resolves https://github.com/haskell/haddock/issues/508 - - - - - a4befd36 by Oleg Grenrus at 2016-05-24T16:53:35+03:00 Change Hyperlinked lexer to know about DataKinds ticks - - - - - f45cb52e by David Feuer at 2016-05-24T18:48:53-04:00 Make parser state a newtype Previously, it was `data` wrapping a `Maybe`, which seems a bit silly. Obviously, this can be changed back if anyone wants to add more fields some day. - - - - - 05013dd7 by Sebastian Meric de Bellefon at 2016-05-24T22:03:55-04:00 remove framed view of the HTML documentation (see haskell/haddock#114 and haskell/haddock#274) Frames are a bit broken, ignored by Hackage, and considered obsolete in general. This patch disables frames generation. The mini_*.html files are still used in the synopsis. - - - - - b8163a88 by Ben Gamari at 2016-05-25T14:44:15+02:00 Merge pull request haskell/haddock#507 from bgamari/T505 Fix haskell/haddock#505 - - - - - ea1b30c6 by Sebastian Meric de Bellefon at 2016-05-25T14:17:00-04:00 Update CHANGES - - - - - eddfc258 by Sebastian Méric de Bellefon at 2016-05-25T15:17:40-04:00 Merge pull request haskell/haddock#514 from Helkafen/frames remove framed view of the HTML documentation (see haskell/haddock#114 and haskell/haddock#274) - - - - - 0e506818 by Alex Biehl at 2016-05-26T12:43:09+02:00 Remove misplaced haddock comment - - - - - a07d28c0 by Ben Gamari at 2016-05-27T11:34:59+02:00 Merge pull request haskell/haddock#515 from alexbiehl/master Remove misplaced haddock comment - - - - - 9001d267 by Ben Gamari at 2016-05-27T11:35:46+02:00 Merge pull request haskell/haddock#513 from treeowl/newtype-since Make parser state a newtype - - - - - 74e1a018 by Sebastian Méric de Bellefon at 2016-05-28T17:28:15-04:00 Merge pull request haskell/haddock#504 from Helkafen/issue-280 Fix haskell/haddock#280. Parsing of module header - - - - - 37557f4f by Alan Zimmerman at 2016-05-29T23:36:50+02:00 Matching changes for haskell/haddock#12105 - - - - - 7d09e5d6 by Sebastian Meric de Bellefon at 2016-06-03T18:07:48-04:00 Version bumps (2.17.3, 1.4.2) - - - - - 85b4bc15 by Sebastian Méric de Bellefon at 2016-06-06T18:35:13-04:00 Merge pull request haskell/haddock#521 from Helkafen/master Version bumps (2.17.3, 1.4.2) - - - - - e95f0dee by Sebastian Meric de Bellefon at 2016-06-06T19:11:35-04:00 publish haddock-test library - - - - - 4de40586 by Sebastian Méric de Bellefon at 2016-06-06T20:26:30-04:00 Merge pull request haskell/haddock#512 from phadej/oleg-fixes Fixes for haskell/haddock#508 and haskell/haddock#510 - - - - - ddfd0789 by Dominic Steinitz at 2016-06-09T09:27:28+01:00 Documentation for LaTeX markup. - - - - - 697a503a by Dominic Steinitz at 2016-06-09T09:33:59+01:00 Fix spelling mistake. - - - - - 246f6fff by Dominic Steinitz at 2016-06-09T09:37:15+01:00 Camel case MathJax. - - - - - 4684bd23 by Dominic Steinitz at 2016-06-09T09:44:53+01:00 Fix math typo and add link. - - - - - f20c037c by Simon Peyton Jones at 2016-06-13T18:26:03+01:00 Follow changes to LHsSigWcType - - - - - 0c58996d by Simon Peyton Jones at 2016-06-15T12:56:01+01:00 Follow GHC re-adding FunTy - - - - - 401b5ca7 by Sebastian Méric de Bellefon at 2016-06-15T12:16:47-04:00 Merge pull request haskell/haddock#525 from idontgetoutmuch/master Documentation for LaTeX markup. - - - - - 92d263b7 by Sebastian Méric de Bellefon at 2016-06-15T12:17:29-04:00 Merge pull request haskell/haddock#522 from Helkafen/master publish haddock-test library - - - - - 0953a2ca by Sebastian Meric de Bellefon at 2016-06-16T00:46:46-04:00 Copyright holders shown on several lines. Fix haskell/haddock#279 - - - - - 65453e14 by Ben Gamari at 2016-06-16T11:16:32+02:00 ocean: Ensure that synopsis fully covers other content Previously MathJax content was being rendered on top of the synopsis due to ambiguous z-ordering. Here we explicitly give the synopsis block a higher z-index to ensure it is rendered on top. Fixes haskell/haddock#531. - - - - - 68e411a1 by Sebastian Méric de Bellefon at 2016-06-16T23:34:39-04:00 Merge pull request haskell/haddock#534 from bgamari/T531 ocean: Ensure that synopsis fully covers other content - - - - - fad6491b by Sebastian Méric de Bellefon at 2016-06-18T23:57:20-04:00 Merge pull request haskell/haddock#533 from Helkafen/master Copyright holders shown on several lines. Fix haskell/haddock#279 - - - - - 6108e21b by Sebastian Meric de Bellefon at 2016-06-22T23:08:28-04:00 do not create empty src directory Fix haskell/haddock#536. - - - - - 1ef23823 by Sebastian Méric de Bellefon at 2016-06-24T00:04:48-04:00 Merge pull request haskell/haddock#537 from Helkafen/master do not create empty src directory - - - - - 966baa96 by Omari Norman at 2016-06-29T21:59:34-04:00 Add $ as a special character If this character is not escaped, documentation built with Haddock 2.17.2 will fail. This was not an issue with 2.16 series, which causes builds to fail and there is nothing in the docs or error message giving a clue about why builds that used to succeed now don't. - - - - - 324adb60 by Ben Gamari at 2016-07-01T12:18:51+02:00 GhcUtils: Changes for multi-pattern signatures - - - - - d7571675 by Ömer Sinan Ağacan at 2016-07-21T13:30:47+02:00 Add support for unboxed sums - - - - - 29d0907b by Simon Marlow at 2016-07-22T13:55:48+01:00 Disable NFData instances for GHC types when GHC >= 8.2 - - - - - 702d95f3 by Simon Marlow at 2016-08-02T15:57:30+02:00 Disable NFData instances for GHC types when GHC >= 8.0.2 (cherry picked from commit a3309e797c42dae9bccdeb17ce52fcababbaff8a) - - - - - f4fa79c3 by Ben Gamari at 2016-08-07T13:51:18+02:00 ghc.mk: Don't attempt to install html/frames.html The frames business has been removed. - - - - - 9cd63daf by Ben Gamari at 2016-08-07T13:51:40+02:00 Haddock.Types: More precise version guard This allows haddock to be built with GHC 8.0.2 pre-releases. - - - - - f3d7e03f by Mateusz Kowalczyk at 2016-08-29T20:47:45+01:00 Merge pull request haskell/haddock#538 from massysett/master Add $ as a special character - - - - - 16dbf7fd by Bartosz Nitka at 2016-09-20T19:44:04+01:00 Fix rendering of class methods for Eq and Ord See haskell/haddock#549 and GHC issue haskell/haddock#12519 - - - - - 7c31c1ff by Bartosz Nitka at 2016-09-27T17:32:22-04:00 Fix rendering of class methods for Eq and Ord See haskell/haddock#549 and GHC issue haskell/haddock#12519 (cherry picked from commit 073d899a8f94ddec698f617a38d3420160a7fd0b) - - - - - 33a90dce by Ryan Scott at 2016-09-30T20:53:41-04:00 Haddock changes for T10598 See https://ghc.haskell.org/trac/ghc/ticket/10598 - - - - - 1f32f7cb by Ben Gamari at 2016-10-13T20:01:26-04:00 Update for refactoring of NameCache - - - - - 1678ff2e by Ben Gamari at 2016-11-15T17:42:48-05:00 Bump upper bound on base - - - - - 9262a7c5 by Alan Zimmerman at 2016-12-07T21:14:28+02:00 Match changes in GHC wip/T3384 branch - - - - - ac0eaf1a by Ben Gamari at 2016-12-09T09:48:41-05:00 haddock-api: Don't use stdcall calling convention on 64-bit Windows See GHC haskell/haddock#12890. - - - - - 04afe4f7 by Alan Zimmerman at 2016-12-12T20:07:21+02:00 Matching changes for GHC wip/T12942 - - - - - e1d1701d by Ben Gamari at 2016-12-13T16:50:41-05:00 Bump base upper bound - - - - - 3d3eacd1 by Alan Zimmerman at 2017-01-10T16:59:38+02:00 HsIParamTy now has a Located name - - - - - 7dbceefd by Kyrill Briantsev at 2017-01-12T13:23:50+03:00 Prevent GHC API from doing optimization passes. - - - - - d48d1e33 by Richard Eisenberg at 2017-01-19T08:41:41-05:00 Upstream changes re levity polymorphism - - - - - 40c25ed6 by Alan Zimmerman at 2017-01-26T15:16:18+02:00 Changes to match haskell/haddock#13163 in GHC - - - - - 504f586d by Ben Gamari at 2017-02-02T17:19:37-05:00 Kill remaining static flags - - - - - 49147ea0 by Justus Adam at 2017-03-02T15:33:34+01:00 Adding MDoc to exports of Documentation.Haddock - - - - - 1cfba9b4 by Justus Adam at 2017-03-09T11:41:44+01:00 Also exposing toInstalledIface - - - - - 53f0c0dd by Ben Gamari at 2017-03-09T13:10:08-05:00 Bump for GHC 8.3 - - - - - c7902d2e by Ben Gamari at 2017-03-09T23:46:02-05:00 Bump for GHC 8.2 - - - - - 4f3a74f8 by Ben Gamari at 2017-03-10T10:21:55-05:00 Merge branch 'ghc-head' - - - - - e273b72f by Richard Eisenberg at 2017-03-14T13:34:04-04:00 Update Haddock w.r.t. new HsImplicitBndrs - - - - - 6ec3d436 by Richard Eisenberg at 2017-03-14T15:15:52-04:00 Update Haddock w.r.t. new HsImplicitBndrs - - - - - eee3cda1 by Ben Gamari at 2017-03-15T15:19:59-04:00 Adapt to EnumSet - - - - - 017cf58e by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Correctly handle Backpack identity/semantic modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 736d6773 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Add a field marking if interface is a signature or not. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 475f84a0 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Render signature module tree separately from modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 13240b53 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Documentation. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - cd16d529 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 More docs. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 3bea97ae by Edward Z. Yang at 2017-03-15T22:50:46-07:00 TODO on moduleExports. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - b2b051ce by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Better Backpack support with signature merging. When we merge signatures, we gain exports that don't necessarily have a source-level declaration corresponding to them. This meant Haddock dropped them. There are two big limitations: * If there's no export list, we won't report inherited signatures. * If the type has a subordinate, the current hiDecl implementation doesn't reconstitute them. These are probably worth fixing eventually, but this gets us to minimum viable functionality. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 0f082795 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Fix haddock-test to work with latest version of Cabal. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 20ef63c9 by Edward Z. Yang at 2017-03-22T13:48:12-07:00 Annotate signature docs with (signature) Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 45692dcb by Edward Z. Yang at 2017-03-22T14:11:25-07:00 Render help documentation link next to (signature) in title. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 4eae8caf by Ben Gamari at 2017-03-23T09:25:33-04:00 Merge commit '240bc38b94ed2d0af27333b23392d03eeb615e82' into HEAD - - - - - 0bbe03f5 by Ben Gamari at 2017-03-23T09:27:28-04:00 haddock-api: Bump bound on GHC - - - - - 65f3ac9d by Alex Biehl at 2017-03-23T17:36:11+01:00 Merge pull request haskell/haddock#581 from JustusAdam/master Adding more exports to Documentation.Haddock - - - - - 37d49a47 by Alex Biehl at 2017-03-23T17:39:14+01:00 Merge pull request haskell/haddock#568 from awson/ghc-head Prevent GHC API from doing optimization passes. - - - - - 1ed047e4 by Brian Huffman at 2017-03-23T17:45:58+01:00 Print any user-supplied kind signatures on type parameters. This applies to type parameters on data, newtype, type, and class declarations, and also to forall-bound type vars in type signatures. - - - - - 1b78ca5c by Brian Huffman at 2017-03-23T17:45:58+01:00 Update test suite to expect kind annotations on type parameters. - - - - - a856b162 by Alex Biehl at 2017-03-23T17:49:32+01:00 Include travis build indication badge - - - - - 8e2e2c56 by Ben Gamari at 2017-03-23T17:20:08-04:00 haddock-api: Bump bound on GHC - - - - - 4d2d9995 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Correctly handle Backpack identity/semantic modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 26d6c150b31bc4580ab17cfd07b6e7f9afe10737) - - - - - a650e20f by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Add a field marking if interface is a signature or not. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 930cfbe58e2e87f5a4d431d89a3c204934e6e858) - - - - - caa282c2 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Render signature module tree separately from modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 2067a2d0afa9cef381d26fb7140b67c62f433fc0) - - - - - 49684884 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Documentation. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 0671abfe7e8ceae2269467a30b77ed9d9656e2cc) - - - - - 4dcfeb1a by Edward Z. Yang at 2017-03-23T17:20:08-04:00 More docs. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 3d77b373dd5807d5d956719dd7c849a11534fa6a) - - - - - 74dd19d2 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 TODO on moduleExports. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 94610e9b446324f4231fa6ad4c6ac51e4eba8c0e) - - - - - a9b19a23 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Better Backpack support with signature merging. When we merge signatures, we gain exports that don't necessarily have a source-level declaration corresponding to them. This meant Haddock dropped them. There are two big limitations: * If there's no export list, we won't report inherited signatures. * If the type has a subordinate, the current hiDecl implementation doesn't reconstitute them. These are probably worth fixing eventually, but this gets us to minimum viable functionality. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 6cc832dfb1de6088a4abcaae62b25a7e944d55c3) - - - - - d3631064 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Fix haddock-test to work with latest version of Cabal. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit bf3c4d72a0fda38561376eac7eda216158783267) - - - - - ef2148fc by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Annotate signature docs with (signature) Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 07b88c5d4e79b87a319fbb08f8ea01dbb41063c1) - - - - - 2f29518b by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Render help documentation link next to (signature) in title. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 4eb765ca4205c79539d60b7afa9b7e261a4a49fe) - - - - - 37de047d by Phil Ruffwind at 2017-04-03T11:57:14+02:00 Update MathJax URL MathJax is shutting down their CDN: https://www.mathjax.org/cdn-shutting-down/ They recommend migrating to cdnjs. - - - - - e9d24ba8 by David C. Turner at 2017-04-03T14:58:01+02:00 Add highlight for :target to ocean.css - - - - - 4819a202 by Alex Biehl at 2017-04-11T19:36:48+02:00 Allow base-4.10 for haddock-test - - - - - 44cec69c by Alex Biehl at 2017-04-11T19:39:22+02:00 cabal.project for haddock-api, haddock-library and haddock-test - - - - - 935d0f6a by Alex Biehl at 2017-04-11T19:46:29+02:00 Move dist scripts to scripts/ - - - - - 128e150c by Alex Biehl at 2017-04-11T20:34:46+02:00 Add haddock to cabal.project - - - - - cc8e08ea by Alex Biehl at 2017-04-11T20:35:08+02:00 Read files for hyperlinker eagerly This also exposes Documentation.Haddock.Utf8 - - - - - 152dda78 by Alex Biehl at 2017-04-11T20:37:06+02:00 Explicit import list ofr Control.DeepSeq in Haddock.Interface.Create - - - - - 501b33c4 by Kyrill Briantsev at 2017-04-11T21:01:42+02:00 Prevent GHC API from doing optimization passes. - - - - - c9f3f5ff by Alexander Biehl at 2017-04-12T16:36:53+02:00 Add @alexbiehl as maintaner - - - - - 76f214cc by Alex Biehl at 2017-04-13T07:27:18+02:00 Disable doctest with ghc-8.3 Currently doctest doesn't support ghc-head - - - - - 46b4f5fc by Edward Z. Yang at 2017-04-22T20:38:26-07:00 Render (signature) only if it actually is a signature! I forgot a conditional, oops! Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - f0555235 by Alex Biehl at 2017-04-25T10:08:48+02:00 Travis: Use ghc-8.2.1 on master - - - - - 966ea348 by Alex Biehl at 2017-04-25T10:32:01+02:00 Travis: Verbose cabal output cf. https://travis-ci.org/haskell/haddock/jobs/225512194#L377 - - - - - 36972bcd by Alex Biehl at 2017-04-25T10:40:43+02:00 Use travis_retry for cabal invocations - - - - - b3a09d2c by Alex Biehl at 2017-04-25T17:02:20+02:00 Use new MathJax URL in html-test 18ed871afb82560d5433b2f53e31b4db9353a74e switched to a new MathJax URL but didn't update the tests. - - - - - ae331e5f by Alexander Biehl at 2017-04-25T17:02:20+02:00 Expand signatures for class declarations - - - - - e573c65a by Alexander Biehl at 2017-04-25T17:02:20+02:00 Hoogle: Correctly print classes with associated data types - - - - - 3fc6be9b by Edward Z. Yang at 2017-04-25T17:02:20+02:00 Render (signature) only if it actually is a signature! I forgot a conditional, oops! Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit a0c4790e15a2d3fab8d830eee8fcd639fe6d39c9) - - - - - 6725c060 by Herbert Valerio Riedel at 2017-04-25T17:02:20+02:00 `html-test --accept` deltas to reference samples - - - - - 7d444d61 by Alex Biehl at 2017-04-26T07:13:50+02:00 Remove anything related to obsolete frames mode - - - - - b888972c by Alex Biehl at 2017-04-26T07:49:10+02:00 Cherry-picked remaining commits from haddock-2.17.4-release (#603) * Release haddock/haddock-api 2.17.4 and haddock-library 1.4.3 * Set version bounds for haddock-library NB: This allows GHC 8.2.1's base * Set version bounds for haddock & haddock-api The version bounds support GHC 8.2 * Merge (temporary) v2.17.3 branch into v2.17 This allows us to delete the v2.17.3 branch * Fixup changelog * Pin down haddock-api to a single version as otherwise `haddock`'s package version has no proper meaning * fix source-repo spec for haddock-api - - - - - 4161099b by Alex Biehl at 2017-04-26T11:11:20+02:00 Update changelog to reflect news in HEAD - - - - - eed72cb8 by Alex Biehl at 2017-04-26T11:11:20+02:00 Markdownify changelog - - - - - 5815cea1 by Alex Biehl at 2017-04-26T11:32:33+02:00 Bump to 2.18.0 (#605) - - - - - a551d558 by Alex Biehl at 2017-04-29T22:00:25+02:00 Update attoparsec-0.12.1.1 to attoparsec-0.13.1.0 - - - - - ea164a8d by Sergey Vinokurov at 2017-04-29T22:42:36+02:00 Improve error message - - - - - 2e10122f by Alex Biehl at 2017-04-30T10:07:46+02:00 Correctly remember collapsed sections (#608) Now the "collapsed" cookie stores which sections have changed state instead of which are collapsed. - - - - - f9b24d99 by Alex Biehl at 2017-05-01T17:40:36+02:00 Lazily decode docMap and argMap (#610) These are only used in case of a doc reexport so most of the time decoding these is wasted work. - - - - - 2372af62 by Alex Biehl at 2017-05-01T21:59:23+02:00 Fix Binary instance for InstalledInterface (#611) (#610) introduced lazy decoding for docs from InstalledInterface but forgot to remove the original calls to get and put_ - - - - - 6c633c13 by Nathan Collins at 2017-05-11T11:47:55+02:00 Improve documenation of Haddock markup (#614) * Improve documentation of Haddock markup. - document that Haddock supports inferring types top-level functions with without type signatures, but also explain why using this feature is discouraged. Looks like this feature has been around since version 2.0.0.0 in 2008! - rework the "Module description" section: - move the general discussion of field formatting to the section intro and add examples illustrating the prose for multiline fields. - mention that newlines are preserved in some multiline fields, but not in others (I also noticed that commas in the `Copyright` field are not preserved; I'll look into this bug later). - add a subsection for the module description fields documentation, and put the field keywords in code formatting (double back ticks) instead of double quotes, to be consistent with the typesetting of keywords in other parts of the documentation. - mention that "Named chunks" are not supported in the long-form "Module description" documentation. - fix formatting of keywords in the "Module attributes" section. Perhaps these errors were left over from an automatic translation to ReST from some other format as part of the transition to using Sphinx for Haddock documentation? Also, add a missing reference here; it just said "See ?"! - update footnote about special treatment for re-exporting partially imported modules not being implemented. In my tests it's not implemented at all -- I tried re-exporting both `import B hiding (f)` and `import B (a, b)` style partial imports, and in both cases got the same result as with full imports `import B`: I only get a module reference. * Rework the `Controlling the documentation structure` section. My main goal was to better explain how to use Haddock without an export list, since that's my most common use case, but I hope I improved the section overall: - remove the incomplete `Omitting the export list` section and fold it into the other sections. In particular, summarize the differences between using and not using an export list -- i.e. control over what and in what order is documented -- in the section lead. - add "realistic" examples that use the structure markup, both with and without an export list. I wanted a realistic example here to capture how it can be useful to explain the relationship between a group of functions in a section, in addition to documenting their individual APIs. - make it clear that you can associate documentation chunks with documentation sections when you aren't using an export list, and that doing it in the most obvious way -- i.e. with `-- |`, as you can in the export list -- doesn't work without an export list. It took me a while to figure this out the first time, since the docs didn't explain it at all before. - add a "no export list" example to the section header section. - add more cross references. * Add examples of gotchas for markup in `@...@`. I'm not sure this will help anyone, since I think most people first learn about `@...@` by reading other people's Haddocks, but I've documented the mistakes which I've made and then gotten confused by. * Use consistent Capitalization of Titles. Some titles were in usual title caps, and others only had the first word capitalized. I chose making them all use title caps because that seems to make the cross references look better. - - - - - d4734f45 by Ben Gamari at 2017-05-12T20:36:08+02:00 Haddock: Fix broken lazy IO in prologue reading (#615) We previously used withFile in conjunction with hGetContents. The list returned by the latter wasn't completely forced by the time we left the withFile block, meaning that we would try to read from a closed handle. - - - - - 93883f37 by Alex Biehl at 2017-05-12T21:02:33+02:00 Haddock: Fix broken lazy IO in prologue reading (#615) We previously used withFile in conjunction with hGetContents. The list returned by the latter wasn't completely forced by the time we left the withFile block, meaning that we would try to read from a closed handle. - - - - - 5b8f179c by Alex Biehl at 2017-05-13T12:48:10+02:00 Consequently use inClass and notInClass in haddock-library (#617) These allow attoparsec to do some clever lookup optimization - - - - - 77984b82 by Doug Wilson at 2017-05-27T17:37:38+02:00 Don't enable compilation for template haskell (#624) This is no longer necessary after ghc commit 53c78be0aab76a3107c4dacbb1d177afacdd37fa - - - - - 5a3de2b4 by Doug Wilson at 2017-05-27T19:54:53+02:00 Improve Syb code (#621) Specialize.hs and Ast.hs are modified to have their Syb code not recurse into Name or Id in HsSyn types. Specialize.hs is refactored to have fewer calls to Syb functions. Syb.hs has some foldl calls replaced with foldl' calls. There is still a lot of performance on the floor of Ast.hs. The RenamedSource is traversed many times, and lookupBySpan is very inefficient. everywhereBut and lookupBySpan dominate the runtime whenever --hyperlinked-source is passed. - - - - - 3d35a949 by Alex Biehl at 2017-05-30T19:01:37+02:00 Clear fixme comment (#625) - - - - - 2a44bd0c by Alex Biehl at 2017-05-30T19:02:12+02:00 Make haddock-library and haddock-api warning free (#626) - - - - - bd1a0e42 by Alex Biehl at 2017-06-01T10:40:33+02:00 Include `driver-test/*.hs` sdist (#630) This lead to haskell/haddock#629. - - - - - 184a3ab6 by Doug Wilson at 2017-06-03T12:02:08+02:00 Disable pattern match warnings (#628) This disables the pattern match checker which can be very expensive in some cases. The disabled warnings include: * Opt_WarnIncompletePatterns * Opt_WarnIncompleteUniPatterns * Opt_WarnIncompletePatternsRecUpd * Opt_WarnOverlappingPatterns - - - - - 0cf68004 by Alex Biehl at 2017-06-03T20:37:28+02:00 Allow user defined signatures for pattern synonyms (#631) - - - - - 7f51a58a by Alex Biehl at 2017-06-04T11:56:38+02:00 Use NameSet for isExported check (#632) - - - - - d8f044a9 by Alan Zimmerman at 2017-06-05T22:26:55+02:00 Match new AST as per GHC wip/new-tree-one-param See https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow - - - - - da1254e3 by Alan Zimmerman at 2017-06-05T22:26:55+02:00 Rename extension index tags - - - - - 538c7514 by Christiaan Baaij at 2017-06-09T08:26:43+02:00 Haddock support for bundled pattern synonyms (#627) * Haddock support for bundled pattern synonyms * Add fixities to bundled pattern synonyms * Add bundled pattern synonyms to the synopsis * Store bundled pattern fixities in expItemFixities * Add test for bundled pattern synonyms * Stop threading fixities * Include bundled pattern synonyms for re-exported data types Sadly, fixity information isn't found for re-exported data types * Support for pattern synonyms * Modify tests after haskell/haddock#631 * Test some reexport variations * Also lookup bundled pattern synonyms from `InstalledInterface`s * Check isExported for bundled pattern synonyms * Pattern synonym is exported check * Always look for pattern synonyms in the current module Another overlooked cornercase * Account for types named twice in export lists Also introduce a fast function for nubbing on a `Name` and use it throughout the code base. * correct fixities for reexported pattern synonyms * Fuse concatMap and map * Remove obsolete import * Add pattern synonyms to visible exports * Fix test * Remove corner case - - - - - a050bffd by Doug Wilson at 2017-06-21T09:27:33+02:00 Use new function getNameToInstancesIndex instead of tcRnGetInfo (#636) There is some performance improvement. GHC compiler: | version | bytes allocated | cpu_seconds --------------------------------- | before | 56057108648 | 41.0 | after | 51592019560 | 35.1 base: | version | bytes allocated | cpu_seconds --------------------------------- | before | 25174011784 | 14.6 | after | 23712637272 | 13.1 Cabal: | version | bytes allocated | cpu_seconds --------------------------------- | before | 18754966920 | 12.6 | after | 18198208864 | 11.6 - - - - - 5d06b871 by Doug Wilson at 2017-06-22T20:23:29+02:00 Use new function getNameToInstancesIndex instead of tcRnGetInfo (#639) * Use new function getNameToInstancesIndex instead of tcRnGetInfo There is some significant performance improvement in the ghc testsuite. haddock.base: -23.3% haddock.Cabal: -16.7% haddock.compiler: -19.8% * Remove unused imports - - - - - b11bb73a by Alex Biehl at 2017-06-23T14:44:41+02:00 Lookup fixities for reexports without subordinates (#642) So we agree that reexported declarations which do not have subordinates (for example top-level functions) shouldn't have gotten fixities reexported according to the current logic. I wondered why for example Prelude.($) which is obviously reexported from GHC.Base has fixities attached (c.f. http://hackage.haskell.org/package/base-4.9.1.0/docs/Prelude.html#v:-36-). The reason is this: In mkMaps we lookup all the subordinates of top-level declarations, of course top-level functions don't have subordinates so for them the resulting list is empty. In haskell/haddock#644 I established the invariant that there won't be any empty lists in the subordinate map. Without the patch from haskell/haddock#642 top-level functions now started to fail reexporting their fixities. - - - - - d2a6dad6 by Alex Biehl at 2017-06-23T18:30:45+02:00 Don't include names with empty subordinates in maps (#644) These are unecessary anyway and just blow up interface size - - - - - 69c2aac4 by Alex Biehl at 2017-06-29T19:54:49+02:00 Make per-argument docs for class methods work again (#648) * Make per-argument docs for class methods work again * Test case - - - - - c9448d54 by Bartosz Nitka at 2017-07-02T12:12:01+02:00 Fix haddock: internal error: links: UnhelpfulSpan (#561) * Fix haddock: internal error: links: UnhelpfulSpan This fixes haskell/haddock#554 for me. I believe this is another fall out of `wildcard-refactor`, like haskell/haddock#549. * Comment to clarify why we take the methods name location - - - - - d4f29eb7 by Alex Biehl at 2017-07-03T19:43:04+02:00 Document record fields when DuplicateRecordFields is enabled (#649) - - - - - 9d6e3423 by Yuji Yamamoto at 2017-07-03T22:37:58+02:00 Fix test failures on Windows (#564) * Ignore .stack-work * Fix for windows: use nul instead of /dev/null * Fix for windows: canonicalize line separator * Also normalize osx line endings - - - - - 7d81e8b3 by Yuji Yamamoto at 2017-07-04T16:13:12+02:00 Avoid errors on non UTF-8 Windows (#566) * Avoid errors on non UTF-8 Windows Problem ==== haddock exits with errors like below: `(1)` ``` haddock: internal error: <stderr>: hPutChar: invalid argument (invalid character) ``` `(2)` ``` haddock: internal error: Language\Haskell\HsColour\Anchors.hs: hGetContents: invalid argument (invalid byte sequence) ``` `(1)` is caused by printing [the "bullet" character](http://www.fileformat.info/info/unicode/char/2022/index.htm) onto stderr. For example, this warning contains it: ``` Language\Haskell\HsColour\ANSI.hs:62:10: warning: [-Wmissing-methods] • No explicit implementation for ‘toEnum’ • In the instance declaration for ‘Enum Highlight’ ``` `(2)` is caused when the input file of `readFile` contains some Unicode characters. In the case above, '⇒' is the cause. Environment ---- OS: Windows 10 haddock: 2.17.3 GHC: 8.0.1 Solution ==== Add `hSetEncoding handle utf8` to avoid the errors. Note ==== - I found the detailed causes by these changes for debugging: - https://github.com/haskell/haddock/commit/8f29edb6b02691c1cf4c479f6c6f3f922b35a55b - https://github.com/haskell/haddock/commit/1dd23bf2065a1e1f2c14d0f4abd847c906b4ecb4 - These errors happen even after executing `chcp 65001` on the console. According to the debug code, `hGetEncoding stderr` returns `CP932` regardless of the console encoding. * Avoid 'internal error: <stderr>: hPutChar: invalid argument (invalid character)' non UTF-8 Windows Better solution for 59411754a6db41d17820733c076e6a72bcdbd82b's (1) - - - - - eded67d2 by Alex Biehl at 2017-07-07T19:17:15+02:00 Remove redudant import warning (#651) - - - - - 05114757 by Alex Biehl at 2017-07-08T00:33:12+02:00 Avoid missing home module warning (#652) * Avoid missing home module warning * Update haddock-library.cabal - - - - - e9cfc902 by Bryn Edwards at 2017-07-17T07:51:20+02:00 Fix haskell/haddock#249 (#655) - - - - - eb02792b by Herbert Valerio Riedel at 2017-07-20T09:09:15+02:00 Fix compilation of lib:haddock-library w/ GHC < 8 - - - - - 9200bfbc by Alex Biehl at 2017-07-20T09:20:38+02:00 Prepare 2.18.1 release (#657) - - - - - 46ddd22c by Herbert Valerio Riedel at 2017-07-20T10:05:14+02:00 Tweak haddock-api.cabal for pending release - - - - - 85e33d29 by Herbert Valerio Riedel at 2017-07-20T10:05:14+02:00 Avoid trivial use of LambdaCase otherwise we can't test w/ e.g. GHC 7.4.2 - - - - - 3afb4bfe by Herbert Valerio Riedel at 2017-07-20T10:05:14+02:00 Refactor .cabal to use sub-lib for vendored lib A practical benefit is that we can control the build-depends and also avoid some recompilation between library and test-suite. - - - - - e56a552e by Herbert Valerio Riedel at 2017-07-20T10:17:48+02:00 haddock-api: add changelog pointing to haddock's changelog This addresses https://github.com/haskell/haddock/issues/638#issuecomment-309283297 - - - - - 2222ff0d by Herbert Valerio Riedel at 2017-07-20T10:19:56+02:00 Drop obsolete/misleading `stability: experimental` This .cabal property has long been considered obsolete - - - - - 9b882905 by Alex Biehl at 2017-07-20T11:25:54+02:00 Beef up haddock description (#658) * Beef up haddock description * Handle empty lines - - - - - bb60e95c by Herbert Valerio Riedel at 2017-07-20T12:08:53+02:00 Import @aisamanra's Haddock cheatsheet from https://github.com/aisamanra/haddock-cheatsheet - - - - - 0761e456 by Herbert Valerio Riedel at 2017-07-20T12:12:55+02:00 Add cheatsheet to haddock.cabal - - - - - 2ece0f0f by Herbert Valerio Riedel at 2017-07-20T12:18:38+02:00 Mention new-build in README - - - - - 947b7865 by Herbert Valerio Riedel at 2017-07-20T12:32:16+02:00 Update README Also improves markup and removes/fixes redundant/obsolete parts [skip ci] - - - - - 785e09ad by Alex Biehl at 2017-07-27T07:28:57+02:00 Bump haddock to 2.18.2, haddock-library to 1.4.5 - - - - - e3ff1ca3 by Alex Biehl at 2017-07-31T20:15:32+02:00 Move `DocMarkup` from haddock-api to haddock-library (#659) * Move `DocMarkup` from haddock-api to haddock-library * Move more markup related functions * Markup module * CHANGELOG - - - - - cda7c20c by Alex Biehl at 2017-07-31T20:35:49+02:00 Fixup haddock - - - - - 583b6812 by Alex Biehl at 2017-07-31T21:20:45+02:00 Changelog for haddock-library - - - - - bac6a0eb by Alex Biehl at 2017-07-31T21:50:24+02:00 Prepare haddock-library-1.4.5 release - - - - - 58ce6877 by Moritz Drexl at 2017-08-05T16:44:40+02:00 Fix renaming after instance signature specializing (#660) * rework rename * Add regression test for Bug 613 * update tests * update changelog - - - - - b8137ec8 by Tim Baumann at 2017-08-06T11:33:38+02:00 Fix: Generate pattern signatures for constructors exported as patterns (#663) * Fix pretty-printing of pattern signatures Pattern synonyms can have up to two contexts, both having a different semantic meaning: The first holds the constraints required to perform the matching, the second contains the constraints provided by a successful pattern match. When the first context is empty but the second is not it is necessary to render the first, empty context. * Generate pattern synonym signatures for ctors exported as patterns This fixes haskell/haddock#653. * Simplify extractPatternSyn It is not necessary to generate the simplest type signature since it will be simplified when pretty-printed. * Add changelog entries for PR haskell/haddock#663 * Fix extractPatternSyn error message - - - - - d037086b by Alex Biehl at 2017-08-06T12:43:25+02:00 Bump haddock-library - - - - - 99d7e792 by Alex Biehl at 2017-08-06T12:44:07+02:00 Bump haddock-library in haddock-api - - - - - 94802a5b by Alex Biehl at 2017-08-06T13:18:02+02:00 Provide --show-interface option to dump interfaces (#645) * WIP: Provide --show-interface option to dump interfaces Like ghcs own --show-iface this flag dumps a binary interface file to stdout in a human (and machine) readable fashion. Currently it uses json as output format. * Fill all the jsonNull stubs * Rework Bifunctor instance of DocH, update changelog and documentation * replace changelog, bring DocMarkupH doc back * Update CHANGES.md * Update CHANGES.md * Move Control.Arrow up It would result in unused import if the Bifunctor instance is not generated. - - - - - c662e476 by Ryan Scott at 2017-08-14T21:00:21-04:00 Adapt to haskell/haddock#14060 - - - - - b891eb73 by Alex Biehl at 2017-08-16T08:24:48+02:00 Bifoldable and Bitraversable for DocH and MetaDoc - - - - - 021bb56c by Alex Biehl at 2017-08-16T09:06:40+02:00 Refactoring: Make doc renaming monadic This allows us to later throw warnings if can't find an identifier - - - - - 39fbf022 by Alex Biehl at 2017-08-19T20:35:27+02:00 Hyperlinker: Avoid linear lookup in enrichToken (#669) * Make Span strict in Position * Hyperlinker: Use a proper map to enrich tokens - - - - - e13baedd by Alex Biehl at 2017-08-21T20:05:42+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 27dd6e87 by Alex Biehl at 2017-08-21T22:06:35+02:00 Drop Avails from export list - - - - - 86b247e2 by Alex Biehl at 2017-08-22T08:44:22+02:00 Bump ghc version for haddock-api tests - - - - - d4607ca0 by Alex Biehl at 2017-08-22T08:45:17+02:00 Revert "Drop Avails from export list" This reverts commit a850ba86d88a4fb9c0bd175453a2580e544e3def. - - - - - c9c54c30 by Alex Biehl at 2017-08-22T09:26:01+02:00 IntefaceFile version - - - - - a85b7c02 by Ben Gamari at 2017-08-22T09:29:52-04:00 haddock: Add Documentation.Haddock.Markup to other-modules - - - - - 34e976f5 by Ben Gamari at 2017-08-22T17:40:06+02:00 haddock: Add Documentation.Haddock.Markup to other-modules - - - - - 577abf06 by Ryan Scott at 2017-08-23T14:47:29-04:00 Update for haskell/haddock#14131 - - - - - da68fc55 by Florian Eggenhofer at 2017-08-27T18:21:56+02:00 Generate an index for package content search (#662) Generate an index for package content search - - - - - 39e62302 by Alex Biehl at 2017-08-27T18:50:16+02:00 Content search for haddock html doc - - - - - 91fd6fb2 by Alex Biehl at 2017-08-28T18:39:58+02:00 Fix tests for content search - - - - - b4a3798a by Alex Biehl at 2017-08-28T18:44:08+02:00 Add search button to #page-menu - - - - - 25a7ca65 by Alex Biehl at 2017-08-28T18:47:43+02:00 Load javascript below the fold - - - - - 8d323c1a by Alex Biehl at 2017-08-28T18:49:22+02:00 Accept tests - - - - - c5dac557 by Alex Biehl at 2017-08-28T19:14:55+02:00 Content search css - - - - - 89a5af57 by Paolo Veronelli at 2017-08-29T07:42:13+02:00 Removed `nowrap` for interface method sigs (#674) with nowrap the interfaces method sigs would expand at libitum - - - - - a505f6f7 by Alex Biehl at 2017-08-29T08:05:33+02:00 Include subordinates in content index - - - - - 4bb698c4 by Alexander Biehl at 2017-08-29T11:40:19+02:00 QuickNav: Make docbase configurable - - - - - c783bf44 by Alexander Biehl at 2017-08-29T11:48:36+02:00 QuickNav: Also use baseUrl for doc-index.json request - - - - - 47017510 by Alex Biehl at 2017-08-29T17:56:47+02:00 Fix test fallout (again) - - - - - 924fc318 by Alex Biehl at 2017-08-30T09:24:56+02:00 Write meta.json when generating html output (#676) - - - - - 717dea52 by Alex Biehl at 2017-09-01T09:20:34+02:00 Use relative URL when no docBaseUrl given - - - - - e5d85f3b by Alex Biehl at 2017-09-01T09:35:19+02:00 Add missing js files to data-files (#677) - - - - - 95b9231a by Alex Biehl at 2017-09-01T11:01:36+02:00 Rename "Search" tab to "Quick Jump" - - - - - da0ead0b by Alex Biehl at 2017-09-01T13:03:49+02:00 Make trigger link configurable (#678) QuickNav: Configurable show/hide trigger - - - - - de7da594 by Ben Gamari at 2017-09-05T06:49:55-04:00 Account for "Remember the AvailInfo for each IE" As of GHC commit f609374a55bdcf3b79f3a299104767aae2ffbf21 GHC retains the AvailInfo associated with each IE. @alexbiehl has a patch making proper use of this change, but this is just to keep things building. - - - - - b05cd3b3 by Ben Gamari at 2017-09-14T07:55:07-04:00 Bump upper bound on base - - - - - 79db899e by Herbert Valerio Riedel at 2017-09-21T23:27:52+02:00 Make compatible with Prelude.<> export in GHC 8.4/base-4.11 - - - - - 3405dd52 by Tim Baumann at 2017-09-23T22:02:01+02:00 Add compile step that bundles and compresses JS files (#684) * Add compile step that bundles and compresses JS files Also, manage dependencies on third-party JS libraries using NPM. * Compile JS from TypeScript * Enable 'noImplicitAny' in TypeScript * QuickJump: use JSX syntax * Generate source maps from TypeScript for easier debugging * TypeScript: more accurate type * Separate quick jump css file from ocean theme - - - - - df0b5742 by Alex Biehl at 2017-09-29T21:15:40+02:00 Bump base for haddock-library and haddock-test - - - - - 62b12ea0 by Merijn Verstraaten at 2017-10-04T16:03:13+02:00 Inhibit output of coverage information for hidden modules. (#687) * Inhibit output of coverage information for hidden modules. * Add changelog entry. - - - - - 8daf8bc1 by Alexander Biehl at 2017-10-05T11:27:05+02:00 Don't use subMap in attachInstances - - - - - ad75114e by Alexander Biehl at 2017-10-05T11:27:58+02:00 Revert "Don't use subMap in attachInstances" This reverts commit 3adf5bcb1a6c5326ab33dc77b4aa229a91d91ce9. - - - - - 7d4aa02f by Alex Biehl at 2017-10-08T15:32:28+02:00 Precise Haddock: Use Avails for export resolution (#688) * Use Avails for export resolution * Support reexported modules * Factor out availExportItem * Use avails for fullModuleExports * Don't use subMap in attachInstances * lookupDocs without subMap * Completely remove subMap * Only calculate unqualified modules when explicit export list is given * Refactor * Refine comment * return * Fix * Refactoring * Split avail if declaration is not exported itself * Move avail splitting - - - - - b9b4faa8 by Alex Biehl at 2017-10-08T19:38:21+02:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 43325295 by Alex Biehl at 2017-10-08T20:18:46+02:00 Fix merge fallout - - - - - c6423cc0 by Alex Biehl at 2017-10-08T20:36:12+02:00 Copy QuickJump files over - - - - - 1db587c3 by Tim Baumann at 2017-10-09T18:33:09+02:00 Use <details> element for collapsibles (#690) * Remove unnecessary call to 'collapseSection' The call is unnecessary since there is no corresponding toggle for hiding the section of orphan instances. * Use <details> for collapsibles This makes them work even when JS is disabled. Closes haskell/haddock#560. - - - - - 1b54c64b by Tim Baumann at 2017-10-10T09:50:59+02:00 Quick Jump: Show error when loading 'doc-index.json' failed (#691) - - - - - 910f716d by Veronika Romashkina at 2017-10-24T07:36:20+02:00 Fix tiny typo in docs (#693) - - - - - b21de7e5 by Ryan Scott at 2017-10-24T13:07:15+02:00 Overhaul Haddock's rendering of kind signatures (#681) * Overhaul Haddock's rendering of kind signatures * Strip off kind signatures when specializing As an added bonus, this lets us remove an ugly hack specifically for `(->)`. Yay! * Update due to 0390e4a0f61e37bd1dcc24a36d499e92f2561b67 * @alexbiehl's suggestions * Import injectiveVarsOfBinder from GHC - - - - - 6704405c by Ryan Scott at 2017-10-28T07:10:27+02:00 Fix Haddock rendering of kind-indexed data family instances (#694) - - - - - 470f6b9c by Alex Biehl at 2017-10-30T08:45:51+01:00 Add QuickJump version to meta.json (#696) - - - - - b89eccdf by Alex Biehl at 2017-10-30T10:15:49+01:00 Put Quickjump behind --quickjump flag (#697) - - - - - 3095fb58 by Alex Biehl at 2017-10-30T19:09:06+01:00 Add build command to package.json - - - - - f223fda9 by Alex Biehl at 2017-10-30T19:10:39+01:00 Decrease threshold for fuzzy matching - - - - - 80245dda by Edward Z. Yang at 2017-10-31T20:35:05+01:00 Supported reexported-modules via --reexport flag. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 7e389742 by Alex Biehl at 2017-10-31T20:37:56+01:00 Correct missing title in changelog - - - - - 1a2a1c03 by Alex Biehl at 2017-10-31T20:59:07+01:00 Copy quickjump.css for nicer error messages - - - - - db234bb9 by Alex Biehl at 2017-10-31T21:31:18+01:00 Reexported modules: Report warnings if argument cannot be parsed or ... module cannot be found - - - - - eea8a205 by Carlo Hamalainen at 2017-10-31T21:43:14+01:00 More general type for nameCacheFromGhc. (#539) - - - - - 580eb42a by Alex Biehl at 2017-10-31T21:46:52+01:00 Remote tab - - - - - 0e599498 by Alex Biehl at 2017-10-31T21:48:55+01:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 7b8539bb by Alex Biehl at 2017-10-31T22:28:34+01:00 fullModuleContents traverses exports in declaration order - - - - - 0c91fbf2 by Alex Biehl at 2017-10-31T22:32:31+01:00 Remove excessive use of list comprehensions - - - - - f7356e02 by Alex Biehl at 2017-11-01T19:11:03+01:00 Make better use of AvailInfo - - - - - f3e512d5 by Alex Biehl at 2017-11-02T12:16:22+01:00 Always return documentation for exported subordinates ... event if they have no documentation (e.g. noDocForDecl) By using the information in the AvailInfo we don't need additional export checks. - - - - - 7cf58898 by Alan Zimmerman at 2017-11-07T08:28:03+02:00 Match changes for Trees that Grow in GHC - - - - - e5105a41 by Alan Zimmerman at 2017-11-08T17:21:58+02:00 Match Trees That Grow - - - - - 55178266 by Alan Zimmerman at 2017-11-11T22:20:31+02:00 Match Trees that Grow in GHC for HsExpr - - - - - 2082ab02 by Ryan Scott at 2017-11-14T15:27:03+01:00 Actually render infix type operators as infix (#703) * Actually render infix type operators as infix * Account for things like `(f :*: g) p`, too - - - - - c52ab7d0 by Alan Zimmerman at 2017-11-14T23:14:26+02:00 Clean up use of PlaceHolder, to match TTG - - - - - 81cc9851 by Moritz Angermann at 2017-11-20T07:52:49+01:00 Declare use of `Paths_haddock` module in other-modules (#705) This was detected by `-Wmissing-home-modules` - - - - - f9d27598 by Moritz Angermann at 2017-11-20T12:47:34+01:00 Drop Paths_haddock from ghc.mk (#707) With haskell/haddock#705 and haskell/haddock#706, the custom addition should not be necessary any more. # Conflicts: # ghc.mk - - - - - f34818dc by Moritz Angermann at 2017-11-20T12:47:59+01:00 Add autogen-modules (#706) > Packages using 'cabal-version: >= 1.25' and the autogenerated module Paths_* must include it also on the 'autogen-modules' field besides 'exposed-modules' and 'other-modules'. This specifies that the module does not come with the package and is generated on setup. Modules built with a custom Setup.hs script also go here to ensure that commands like sdist don't fail. # Conflicts: # haddock.cabal - - - - - bb43a0aa by Ben Gamari at 2017-11-21T15:50:12-05:00 Revert "Clean up use of PlaceHolder, to match TTG" This reverts commit 134a7bb054ea730b13c8629a76232d73e3ace049. - - - - - af9ebb2b by Ben Gamari at 2017-11-21T15:50:14-05:00 Revert "Match Trees that Grow in GHC for HsExpr" This reverts commit 9f054dc365379c66668de6719840918190ae6e44. - - - - - 5d35c3af by Ben Gamari at 2017-11-21T15:50:15-05:00 Revert "Match Trees That Grow" This reverts commit 73a26af844ac50b8bec39de11d64452a6286b00c. - - - - - 99a8e43b by Ben Gamari at 2017-11-21T16:36:06-05:00 Revert "Match changes for Trees that Grow in GHC" This reverts commit 01eeeb048acd2dd05ff6471ae148a97cf0720547. - - - - - c4d650c2 by Ben Gamari at 2017-12-04T15:06:07-05:00 Bump GHC version - - - - - 027b2274 by Ben Gamari at 2017-12-04T17:06:31-05:00 Bump GHC bound to 8.4.* - - - - - 58eaf755 by Alex Biehl at 2017-12-06T15:44:24+01:00 Update changelog - - - - - d68f5584 by Simon Peyton Jones at 2017-12-07T14:39:56+00:00 Track changes to follow Trac haskell/haddock#14529 This tracks the refactoring of HsDecl.ConDecl. - - - - - dc519d6b by Alec Theriault at 2018-01-06T08:20:43-08:00 Pass to GHC visible modules for instance filtering The GHC-side `getNameToInstancesIndex` filters out incorrectly some instances because it is not aware of what modules are visible. On the Haddock side, we need to pass in the modules we are processing. On the GHC side, we need to check against _those_ modules when checking if an instance is visible. - - - - - 8285118c by Alec Theriault at 2018-01-13T12:12:37+01:00 Constructor and pattern synonym argument docs (#709) * Support Haddocks on constructor arguments This is in conjunction with https://phabricator.haskell.org/D4094. Adds support for rendering Haddock's on (non-record) constructor arguments, both for regular and GADT constructors. * Support haddocks on pattern synonym arguments It appears that GHC already parsed these - we just weren't using them. In the process of doing this, I tried to deduplicate some code around handling patterns. * Update the markup guide Add some information about the new support for commenting constructor arguments, and mention pattern synonyms and GADT-style constructors. * Overhaul LaTeX support for data/pattern decls This includes at least * fixing several bugs that resulted in invalid LaTeX * fixing GADT data declaration headers * overhaul handling of record fields * overhaul handling of GADT constructors * overhaul handling of bundled patterns * add support for constructor argument docs * Support GADT record constructors This means changes what existing HTML docs look like. As for LaTeX, looks like GADT records were never even supported. Now they are. * Clean up code/comments Made code/comments consistent between the LaTeX and XHTML backend when possible. * Update changelog * Patch post-rebase regressions * Another post-rebase change We want return values to be documentable on record GADT constructors. - - - - - ca4fabb4 by Alec Theriault at 2018-01-15T17:12:18-08:00 Update the GblRdrEnv when processing modules Without a complete environment, we will miss some instances that were encountered during typechecking. - - - - - 4c472fea by Ryan Scott at 2018-01-19T10:44:02+01:00 Fix haskell/haddock#732 (#733) - - - - - bff14dbd by Alex Biehl at 2018-01-19T15:33:30+01:00 extractDecl: Extract associated types correctly (#736) - - - - - a2a94a73 by Alex Biehl at 2018-01-19T15:34:40+01:00 extractDecl: Extract associated types correctly (#736) - - - - - 26df93dc by Alex Biehl at 2018-01-20T10:18:22+01:00 haddock-api: bump ghc to ^>= 8.4 - - - - - f65aeb1d by Alex Biehl at 2018-01-20T19:18:20+01:00 Fix duplicate declarations and TypeFamilies specifics - - - - - 0e721b97 by Alex Biehl at 2018-01-20T19:20:19+01:00 Fix duplicate declarations and TypeFamilies specifics - - - - - cb6234f6 by Ben Gamari at 2018-01-26T13:40:55-05:00 Merge remote-tracking branch 'harpocrates/fix/missing-orphan-instances' into ghc-head - - - - - 0fc28554 by Alec Theriault at 2018-02-01T14:58:18+01:00 Pass to GHC visible modules for instance filtering The GHC-side `getNameToInstancesIndex` filters out incorrectly some instances because it is not aware of what modules are visible. On the Haddock side, we need to pass in the modules we are processing. On the GHC side, we need to check against _those_ modules when checking if an instance is visible. - - - - - b9123772 by Alec Theriault at 2018-02-01T14:58:18+01:00 Update the GblRdrEnv when processing modules Without a complete environment, we will miss some instances that were encountered during typechecking. - - - - - 0c12e274 by Ryan Scott at 2018-02-01T14:58:18+01:00 Fix haskell/haddock#548 by rendering datatype kinds more carefully (#702) - - - - - 8876d20b by Alec Theriault at 2018-02-01T14:58:18+01:00 Use the GHC lexer for the Hyperlinker backend (#714) * Start changing to use GHC lexer * better cpp * Change SrcSpan to RealSrcSpan * Remove error * Try to stop too many open files * wip * wip * Revert "wip" This reverts commit b605510a195f26315e3d8ca90e6d95a6737553e1. Conflicts: haddock-api/haddock-api.cabal haddock-api/src/Haddock/Interface.hs * Remove pointless 'caching' * Use dlist rather than lists when finding vars * Use a map rather than list * Delete bogus comment * Rebase followup Things now run using the GHC lexer. There are still - stray debug statements - unnecessary changes w.r.t. master * Cleaned up differences w.r.t. current Haddock HEAD Things are looking good. quasiquotes in particular look beautiful: the TH ones (with Haskell source inside) colour/link their contents too! Haven't yet begun to check for possible performance problems. * Support CPP and top-level pragmas The support for these is hackier - but no more hacky than the existing support. * Tests pass, CPP is better recognized The tests were in some cases altered: I consider the new output to be more correct than the old one.... * Fix shrinking of source without tabs in test * Replace 'Position'/'Span' with GHC counterparts Replaces 'Position' -> 'GHC.RealSrcLoc' and 'Span' -> 'GHC.RealSrcSpan'. * Nits * Forgot entry in .cabal * Update changelog - - - - - 95c6a771 by Alec Theriault at 2018-02-01T14:58:18+01:00 Clickable anchors for headings (#716) See haskell/haddock#579. This just adds an <a> tag around the heading, pointing to the heading itself. - - - - - 21463d28 by Alex Biehl at 2018-02-01T14:58:18+01:00 Quickjump: Matches on function names weight more than matches in ... module names. - - - - - 8023af39 by Alex Biehl at 2018-02-01T14:58:18+01:00 Treat escaped \] better in definition lists (#717) This fixes haskell/haddock#546. - - - - - e4866dc1 by Alex Biehl at 2018-02-01T14:58:18+01:00 Remove scanner, takeWhile1_ already takes care of escaping - - - - - 9bcaa49d by Alex Biehl at 2018-02-01T14:58:18+01:00 Take until line feed - - - - - 01d2af93 by Oleg Grenrus at 2018-02-01T14:58:18+01:00 Add simple framework for running parser fixtures (#668) * Add simple framework for running parser fixtures * Compatible with tree-diff-0.0.0.1 * Use parseParas to parse fixtures This allows to test all syntactic constructs available in haddock markup. - - - - - 31128417 by Alec Theriault at 2018-02-01T14:58:18+01:00 Patch flaky parser test (#720) * Patch flaky parser test This test was a great idea, but it doesn't port over too well to using the GHC lexer. GHC rewrites its input a bit - nothing surprising, but we need to guard against those cases for the test. * Change instance head * Change use site - - - - - 9704f214 by Herbert Valerio Riedel at 2018-02-01T14:58:18+01:00 Include secondary LICENSE file in source dist - - - - - 51f25074 by Oleg Grenrus at 2018-02-01T14:58:18+01:00 Grid Tables (#718) * Add table examples * Add table types and adopt simple parser Simple parser is done by Giovanni Cappellotto (@potomak) in https://github.com/haskell/haddock/pull/577 It seems to support single fine full tables, so far from full RST-grid tables, but it's good start. Table type support row- and colspans, but obviously parser is lacking. Still TODO: - Latex backend. Should we use multirow package https://ctan.org/pkg/multirow?lang=en? - Hoogle backend: ? * Implement grid-tables * Refactor table parser * Add two ill-examples * Update CHANGES.md * Basic documentation for tables * Fix documentation example - - - - - 670d6200 by Alex Biehl at 2018-02-01T14:58:18+01:00 Add grid table example to cheatsheet (pdf and svg need to be regenerated thought) - - - - - 4262dec9 by Alec Theriault at 2018-02-01T14:58:18+01:00 Fix infinite loop when specializing instance heads (#723) * Fix infinite loop when specializing instance heads The bug can only be triggered from TH, hence why it went un-noticed for so long. * Add test for haskell/haddock#679 and haskell/haddock#710 - - - - - 67ecd803 by Alec Theriault at 2018-02-01T14:58:18+01:00 Filter RTS arguments from 'ghc-options' arguments (#725) This fixes haskell/haddock#666. - - - - - 7db26992 by Alex Biehl at 2018-02-01T14:58:18+01:00 Quickjump Scrollable overlay - - - - - da9ff634 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Hyperlinker: Adjust parser to new PFailed constructor - - - - - 7b7cf8cb by Alexander Biehl at 2018-02-01T14:58:18+01:00 Specialize: Add missing IdP annotations - - - - - 78cd7231 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Convert: Correct pass type - - - - - a2d0f590 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Warning free compilation - - - - - cd861cf3 by Alexander Biehl at 2018-02-01T14:58:18+01:00 hadock-2.19.0 / haddock-api-2.19.0 / haddock-library-1.5.0 - - - - - c6651b72 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Adjust changelogs - - - - - 1e93da0b by Alexander Biehl at 2018-02-01T14:58:18+01:00 haddock-library: Info about breaking changes - - - - - f9b11db8 by Alec Theriault at 2018-02-02T12:36:02+01:00 Properly color pragma contents in hyperlinker The hyperlinker backend now classifies the content of pragmas as 'TkPragma'. That means that in something like '{-# INLINE foo #-}', 'foo' still gets classified as a pragma token. - - - - - c40b0043 by Alec Theriault at 2018-02-02T12:36:02+01:00 Support the new 'ITcolumn_prag' token - - - - - 4a2a4d39 by Alex Biehl at 2018-02-03T12:11:55+01:00 QuickJump: Mitigate encoding problems on Windows - - - - - bb34503a by Alex Biehl at 2018-02-04T18:39:31+01:00 Use withBinaryFile - - - - - 637605bf by Herbert Valerio Riedel at 2018-02-05T09:48:32+01:00 Try GHC 8.4.1 for Travis CI job - - - - - 7abb67e4 by Herbert Valerio Riedel at 2018-02-05T10:05:42+01:00 try harder to build w/ GHC 8.4.1 - - - - - 8255cc98 by Herbert Valerio Riedel at 2018-02-05T10:05:42+01:00 Add `SPDX-License-Identifier` as alised for "license" module header tokens C.f. SPDX 2.1 - Appendix V https://spdx.org/spdx-specification-21-web-version#h.twlc0ztnng3b The tag should appear on its own line in the source file, generally as part of a comment. SPDX-License-Identifier: <SPDX License Expression> Cherry-picked from haskell/haddock#743 - - - - - 267cd23d by Herbert Valerio Riedel at 2018-02-05T10:24:34+01:00 Make test-suite SMP compatible - - - - - 95d4bf40 by Alec Theriault at 2018-02-05T22:01:04+01:00 Hyperlink pattern synonyms and 'module' imports (#744) Links to pattern synonyms are now generated, as well as links from modules in import lists. Fixes haskell/haddock#731. - - - - - 67838dcd by Alec Theriault at 2018-02-06T08:23:36+01:00 Don't warn about missing '~' (#746) This manually filters out '~' from the list of things to warn about. It truly makes no sense to warn on this since '~' has nothing it could link to - it is magical. This fixes haskell/haddock#532. - - - - - ab6c3f9f by Alec Theriault at 2018-02-06T08:24:47+01:00 Don't barf on 'HsSpliceTy' (#745) This handles 'HsSpliceTy's by replacing them with what they expand to. IIUC everything that is happening, 'renameHsSpliceTy' should not be able to fail for the inputs we feed it from GHC. This fixes haskell/haddock#574. - - - - - 92bf95ad by Alex Biehl at 2018-02-06T08:28:23+01:00 Rename: renameHsSpliceTy ttg - - - - - 3130b1e1 by Alex Biehl at 2018-02-06T09:02:14+01:00 Expand SigDs - - - - - c72adae5 by Alex Biehl at 2018-02-06T09:20:51+01:00 fullModuleContents: support named docs - - - - - de2e4dbf by Alex Biehl at 2018-02-06T13:56:17+01:00 Hyperlinker: Also link pattern synonym arguments - - - - - b7c98237 by Alex Biehl at 2018-02-09T18:44:23+01:00 Expand SigD in a better place In https://github.com/haskell/haddock/issues/287 we found that haddock-2.19.0 would miss documentation on class methods with multiples names. This patch uses expandSigDecls in a more sensible place. - - - - - 8f598b27 by Alec Theriault at 2018-02-11T12:29:56+01:00 Add module tooltips to linked identifiers (#753) No more clicking to figure out whether your bytestring is strict or lazy! - - - - - d812e65d by Alec Theriault at 2018-02-11T12:31:44+01:00 Add 'show' option to complement 'hide' (#752) * Add 'show' option to complement 'hide' The behaviour is for flags passed in the command line to override flags in file headers. In the command line, later flags override earlier ones. Fixes haskell/haddock#751 and haskell/haddock#266. * Add a '--show-all' option - - - - - 6676cecb by Alex Biehl at 2018-02-18T11:07:15-05:00 QuickJump: Mitigate encoding problems on Windows (cherry picked from commit 86292c54bfee2343aee84559ec01f1fc68f52231) - - - - - e753dd88 by Alex Biehl at 2018-02-18T17:59:54+01:00 Use withBinaryFile - - - - - 724dc881 by Tamar Christina at 2018-02-19T05:34:49+01:00 Haddock: support splitted include paths. (#689) - - - - - 9b6d6f50 by Alex Biehl at 2018-02-19T05:57:02+01:00 Teach the HTML backend how to render methods with multiple names - - - - - a74aa754 by Alexander Biehl at 2018-02-19T10:04:34+01:00 Hoogle/Latex: Remove use of partial function - - - - - 66d8bb0e by Alec Theriault at 2018-02-25T16:04:01+01:00 Fix file handle leak (#763) (#764) Brought back some mistakenly deleted code for handling encoding and eager reading of files from e0ada1743cb722d2f82498a95b201f3ffb303137. - - - - - bb92d03d by Alex Biehl at 2018-03-02T14:21:23+01:00 Enable running test suite with stock haddock and ghc using ``` $ cabal new-run -- html-test --haddock-path=$(which haddock) --ghc-path=$(which ghc) ``` - - - - - dddb3cb2 by Alex Biehl at 2018-03-02T15:43:21+01:00 Make testsuite work with haddock-1.19.0 release (#766) - - - - - f38636ed by Alec Theriault at 2018-03-02T15:48:36+01:00 Support unicode operators, proper modules Unicode operators are a pretty big thing in Haskell, so supporting linking them seems like it outweighs the cost of the extra machinery to force Attoparsec to look for unicode. Fixes haskell/haddock#458. - - - - - 09d89f7c by Alec Theriault at 2018-03-02T15:48:43+01:00 Remove bang pattern - - - - - d150a687 by Alex Biehl at 2018-03-02T15:48:48+01:00 fix test - - - - - d6fd71a5 by Alex Biehl at 2018-03-02T16:22:38+01:00 haddock-test: Be more explicit which packages to pass We now pass `-hide-all-packages` to haddock when invoking the testsuite. This ensures we don't accidentally pick up any dependencies up through ghc.env files. - - - - - 0932c78c by Alex Biehl at 2018-03-02T17:50:38+01:00 Revert "fix test" This reverts commit 1ac2f9569242f6cb074ba6e577285a4c33ae1197. - - - - - 52516029 by Alex Biehl at 2018-03-02T18:16:50+01:00 Fix Bug548 for real - - - - - 89df9eb5 by Alex Biehl at 2018-03-05T18:28:19+01:00 Hyperlinker: Links for TyOps, class methods and associated types - - - - - d019a4cb by Ryan Scott at 2018-03-06T13:43:56-05:00 Updates for haskell/haddock#13324 - - - - - 6d5a42ce by Alex Biehl at 2018-03-10T18:25:57+01:00 Bump haddock-2.19.0.1, haddock-api-2.19.0.1, haddock-library-1.5.0.1 - - - - - c0e6f380 by Alex Biehl at 2018-03-10T18:25:57+01:00 Update changelogs for haddock-2.19.0.1 and haddock-library-1.5.0.1 - - - - - 500da489 by Herbert Valerio Riedel at 2018-03-10T18:25:57+01:00 Update to QC 2.11 - - - - - ce8362e9 by Herbert Valerio Riedel at 2018-03-10T18:25:57+01:00 Restore backward-compat with base-4.5 through base-4.8 - - - - - baae4435 by Alex Biehl at 2018-03-10T18:25:57+01:00 Bump lower bound for haddock-library - - - - - 10b7a73e by Alex Biehl at 2018-03-10T18:25:57+01:00 Haddock: Straighten out base bound - - - - - a6096f7b by Alex Biehl at 2018-03-13T08:45:06+01:00 extractDecl: Extract constructor patterns from data family instances (#776) * extractDecl: Allow extraction of data family instance constructors * extractDecl: extract data family instance constructors - - - - - ba4a0744 by Simon Jakobi at 2018-03-14T08:26:42+01:00 Readme: Update GHC version (#778) - - - - - 8de157d4 by Simon Jakobi at 2018-03-14T20:39:29+01:00 Add fixture test for definition lists - - - - - 425b46f9 by Simon Jakobi at 2018-03-14T20:39:29+01:00 Add fixture test for links - - - - - d53945d8 by Simon Jakobi at 2018-03-14T20:39:29+01:00 Add fixture test for inline links - - - - - f1dc7c99 by Simon Jakobi at 2018-03-14T20:39:29+01:00 fixtures: Slightly unmangle output - - - - - 0879d31c by Simon Jakobi at 2018-03-14T20:39:29+01:00 fixtures: Prevent stdout buffering - - - - - 1f9e5f1b by Simon Jakobi at 2018-03-14T20:39:29+01:00 haddock-library.cabal: Clean up GHC options - - - - - 066b891a by Simon Jakobi at 2018-03-14T20:39:29+01:00 Make a proper definition for the <link> parser - - - - - 573d6ba7 by Alec Theriault at 2018-03-21T09:16:57+01:00 Show where instances are defined (#748) * Indicate source module of instances Above instance, we now also display a link to the module where the instance was defined. This is sometimes helpful in figuring out what to import. * Source module for type/data families too * Remove parens * Accept tests - - - - - 99b5d28b by Alex Biehl at 2018-03-21T09:20:36+01:00 Prepare changelog for next release - - - - - 482d3a93 by Alex Biehl at 2018-03-23T15:57:36+01:00 Useful cost centres, timers and allocation counters (#785) * Add some useful cost-centres for profiling * Add withTiming for each haddock phase Invoking haddock with `--optghc=-ddump-timings` now shows the amount of time spent and the number of allocated bytes for each phase. - - - - - 773b41bb by Alec Theriault at 2018-03-27T08:35:59+02:00 @since includes package name (#749) * Metadoc stores a package name This means that '@since' annotations can be package aware. * Get the package name the right way This should extract the package name for `@since` annotations the right way. I had to move `modulePackageInfo` around to do this and, in the process, I took the liberty to update it. Since it appears that finding the package name is something that can fail, I added a warning for this case. * Silence warnings * Hide package for local 'since' annotations As discussed, this is still the usual case (and we should avoid being noisy for it). Although this commit is large, it is basically only about threading a 'Maybe Package' from 'Haddock.render' all the way to 'Haddock.Backends.Xhtml.DocMarkup.renderMeta'. * Bump binary interface version * Add a '--since-qual' option This controls when to qualify since annotations with the package they come from. The default is always, but I've left an 'external' variant where only those annotations coming from outside of the current package are qualified. * Make ParserSpec work * Make Fixtures work * Use package name even if package version is not available The @since stuff needs only the package name passed in, so it makes sense to not be forced to pass in a version too. - - - - - e42c57bc by Alex Biehl at 2018-03-27T08:42:50+02:00 haddock-2.19.1, haddock-api-2.19.1, haddock-library-1.6.0 - - - - - 8373a529 by Alex Biehl at 2018-03-28T10:17:11+02:00 Bump haddock and haddock-api to 2.20.0 - - - - - 5038eddd by Jack Henahan at 2018-04-03T13:28:12+02:00 Clear search string on hide for haskell/haddock#781 (#789) - - - - - 920ca1eb by Alex Biehl at 2018-04-03T16:35:50+02:00 Travis: Build with ghc-8.4.2 (#793) - - - - - a232f0eb by Alan Zimmerman at 2018-04-07T14:14:32+02:00 Match changes in GHC for D4199 Removing HasSourceText and SourceTextX classes. - - - - - ab85060b by Alan Zimmerman at 2018-04-09T21:20:24+02:00 Match GHC changes for TTG - - - - - 739302b6 by Alan Zimmerman at 2018-04-13T13:31:44+02:00 Match GHC for TTG implemented on HsBinds, D4581 - - - - - 2f56d3cb by Ryan Scott at 2018-04-19T11:42:58-04:00 Bump upper bound on base to < 4.13 See https://ghc.haskell.org/trac/ghc/ticket/15018. - - - - - a49df92a by Alex Biehl at 2018-04-20T07:31:44+02:00 Don't treat fixity signatures like declarations - - - - - d02c103b by Ryan Scott at 2018-04-24T11:20:11-04:00 Add regression test for haskell/haddock#413 Fixes haskell/haddock#413. - - - - - c7577f52 by Ryan Scott at 2018-04-24T13:51:06-07:00 Improve the Hoogle backend's treatment of type families (#808) Fixes parts 1 and 2 of haskell/haddock#806. - - - - - d88f85b1 by Alec Theriault at 2018-04-25T11:24:07-07:00 Replace 'attoparsec' with 'parsec' (#799) * Remove attoparsec with parsec and start fixing failed parses * Make tests pass * Fix encoding issues The Haddock parser no longer needs to worry about bytestrings. All the internal parsing work in haddock-library happens over 'Text'. * Remove attoparsec vendor * Fix stuff broken in 'attoparsec' -> 'parsec' * hyperlinks * codeblocks * examples Pretty much all issues are due to attoparsec's backtracking failure behaviour vs. parsec's non-backtracking failure behaviour. * Fix small TODOs * Missing quote + Haddocks * Better handle spaces before/after paragraphs * Address review comments - - - - - fc25e2fe by Alan Zimmerman at 2018-04-27T15:36:53+02:00 Match changes in GHC for TTG - - - - - 06175f91 by Herbert Valerio Riedel at 2018-05-01T18:11:09+02:00 Merge branch 'ghc-head' with 'ghc-8.4' - - - - - 879caaa8 by Alec Theriault at 2018-05-07T18:53:15-07:00 Filter out CRLFs in hyperlinker backend (#813) This prevents spurious lines from appearing in the final output. - - - - - 3e0120cb by Simon Jakobi at 2018-05-07T19:00:18-07:00 Add docs for some DocH constructors (#814) - - - - - 0a32c6db by Alec Theriault at 2018-05-08T02:15:45-07:00 Remove 'TokenGroup' from Hyperlinker (#818) Since the hyperlinker backend now relies on the GHC tokenizer, something like 'Bar.Baz.foo' already gets bunched together into one token (as opposed to being spread across 'Bar', '.', 'Baz', '.', and 'foo'). - - - - - 8816e783 by Simon Jakobi at 2018-05-08T10:48:11-07:00 Renamer: Warn about out of scope identifiers. (#819) - - - - - ad60366f by Ryan Scott at 2018-05-10T11:19:47-04:00 Remove Hoogle backend hack that butchers infix datatype names - - - - - 03b7cc3b by Ryan Scott at 2018-05-10T11:24:38-04:00 Wibbles - - - - - b03dd563 by Chaitanya Koparkar at 2018-05-10T11:44:58-04:00 Use the response file utilities defined in `base` (#821) Summary: The response file related modules were recently copied from `haddock` into `base`. This patch removes them from `haddock`. GHC Trac Issues: haskell/haddock#13896 - - - - - 9f298a40 by Ben Gamari at 2018-05-13T17:36:04-04:00 Account for refactoring of LitString - - - - - ea3dabe7 by Ryan Scott at 2018-05-16T09:21:43-04:00 Merge pull request haskell/haddock#826 from haskell/T825 Remove Hoogle backend hack that butchers infix datatype names - - - - - 0d234f7c by Alec Theriault at 2018-05-23T11:29:05+02:00 Use `ClassOpSig` instead of `TypeSig` for class methods (#835) * Fix minimal pragma handling Class declarations contain 'ClassOpSig' not 'Typesig'. This should fix haskell/haddock#834. * Accept html-test output - - - - - 15fc9712 by Simon Jakobi at 2018-05-31T04:17:47+02:00 Adjust to new HsDocString internals - - - - - 6f1e19a8 by Ben Gamari at 2018-06-02T16:18:58-04:00 Remove ParallelArrays and Data Parallel Haskell - - - - - 0d0355d9 by Ryan Scott at 2018-06-04T21:26:59-04:00 DerivingVia changes - - - - - 0d93475a by Simon Jakobi at 2018-06-05T19:47:05+02:00 Bump a few dependency bounds (#845) - - - - - 5cbef804 by Alec Theriault at 2018-06-05T19:47:16+02:00 Improve hyperlinker's 'spanToNewline' (#846) 'spanToNewline' is used to help break apart the source into lines which can then be partioned into CPP and non-CPP chunks. It is important that 'spanToNewline' not break apart tokens, so it needs to properly handle things like * block comments, possibly nested * string literals, possibly multi-line * CPP macros, possibly multi-line String literals in particular were not being properly handled. The fix is to to fall back in 'Text.Read.lex' to help lex things that are not comments. Fixes haskell/haddock#837. - - - - - 9094c56f by Alec Theriault at 2018-06-05T22:53:25+02:00 Extract docs from strict/unpacked constructor args (#839) This fixes haskell/haddock#836. - - - - - 70188719 by Simon Jakobi at 2018-06-08T22:20:30+02:00 Renamer: Warn about ambiguous identifiers (#831) * Renamer: Warn about ambiguous identifiers Example: Warning: 'elem' is ambiguous. It is defined * in ‘Data.Foldable’ * at /home/simon/tmp/hdk/src/Lib.hs:7:1 You may be able to disambiguate the identifier by qualifying it or by hiding some imports. Defaulting to 'elem' defined at /home/simon/tmp/hdk/src/Lib.hs:7:1 Fixes haskell/haddock#830. * Deduplicate warnings Fixes haskell/haddock#832. - - - - - 495cd1fc by Chaitanya Koparkar at 2018-06-13T23:01:34+02:00 Use the response file utilities defined in `base` (#821) Summary: The response file related modules were recently copied from `haddock` into `base`. This patch removes them from `haddock`. GHC Trac Issues: haskell/haddock#13896 - - - - - 81088732 by Ben Gamari at 2018-06-13T23:01:34+02:00 Account for refactoring of LitString - - - - - 7baf6587 by Simon Jakobi at 2018-06-13T23:05:08+02:00 Adjust to new HsDocString internals - - - - - bb61464d by Ben Gamari at 2018-06-13T23:05:22+02:00 Remove ParallelArrays and Data Parallel Haskell - - - - - 5d8cb87f by Ryan Scott at 2018-06-13T23:39:30+02:00 DerivingVia changes - - - - - 73d373a3 by Alec Theriault at 2018-06-13T23:39:30+02:00 Extract docs from strict/unpacked constructor args (#839) This fixes haskell/haddock#836. - - - - - 4865e254 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Remove `ITtildehsh` token - - - - - b867db54 by Alec Theriault at 2018-06-13T23:39:30+02:00 Filter out CRLFs in hyperlinker backend (#813) This prevents spurious lines from appearing in the final output. - - - - - 9598e392 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Add docs for some DocH constructors (#814) - - - - - 8a59035b by Alec Theriault at 2018-06-13T23:39:30+02:00 Remove 'TokenGroup' from Hyperlinker (#818) Since the hyperlinker backend now relies on the GHC tokenizer, something like 'Bar.Baz.foo' already gets bunched together into one token (as opposed to being spread across 'Bar', '.', 'Baz', '.', and 'foo'). - - - - - 29350fc8 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Renamer: Warn about out of scope identifiers. (#819) - - - - - 2590bbd9 by Ryan Scott at 2018-06-13T23:39:30+02:00 Remove Hoogle backend hack that butchers infix datatype names - - - - - a9939fdc by Ryan Scott at 2018-06-13T23:39:30+02:00 Wibbles - - - - - a22f7df4 by Alec Theriault at 2018-06-13T23:39:30+02:00 Use `ClassOpSig` instead of `TypeSig` for class methods (#835) * Fix minimal pragma handling Class declarations contain 'ClassOpSig' not 'Typesig'. This should fix haskell/haddock#834. * Accept html-test output - - - - - 8741015d by Simon Jakobi at 2018-06-13T23:39:30+02:00 Bump a few dependency bounds (#845) - - - - - 4791e1cc by Alec Theriault at 2018-06-13T23:39:30+02:00 Improve hyperlinker's 'spanToNewline' (#846) 'spanToNewline' is used to help break apart the source into lines which can then be partioned into CPP and non-CPP chunks. It is important that 'spanToNewline' not break apart tokens, so it needs to properly handle things like * block comments, possibly nested * string literals, possibly multi-line * CPP macros, possibly multi-line String literals in particular were not being properly handled. The fix is to to fall back in 'Text.Read.lex' to help lex things that are not comments. Fixes haskell/haddock#837. - - - - - 311d3216 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Renamer: Warn about ambiguous identifiers (#831) * Renamer: Warn about ambiguous identifiers Example: Warning: 'elem' is ambiguous. It is defined * in ‘Data.Foldable’ * at /home/simon/tmp/hdk/src/Lib.hs:7:1 You may be able to disambiguate the identifier by qualifying it or by hiding some imports. Defaulting to 'elem' defined at /home/simon/tmp/hdk/src/Lib.hs:7:1 Fixes haskell/haddock#830. * Deduplicate warnings Fixes haskell/haddock#832. - - - - - d0577817 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Complete FixitySig and FamilyDecl pattern matches - - - - - 055b3aa7 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Fix redundant import warnings - - - - - f9ce19b1 by Simon Jakobi at 2018-06-13T23:49:52+02:00 html-test: Accept output - - - - - 04604ea7 by Simon Jakobi at 2018-06-13T23:54:37+02:00 Bump bounds on Cabal - - - - - 0713b692 by Simon Jakobi at 2018-06-14T00:00:12+02:00 Merge branch 'ghc-head' into ghc-head-update-3 - - - - - c6a56bfd by Simon Jakobi at 2018-06-14T02:33:27+02:00 Bump ghc bound for haddock-api spec test-suite - - - - - 119d04b2 by Simon Jakobi at 2018-06-14T12:37:48+02:00 Travis: `--allow-newer` for all packages - - - - - 0e876e2c by Alex Biehl at 2018-06-14T15:28:52+02:00 Merge pull request haskell/haddock#857 from sjakobi/ghc-head-update-3 Update ghc-head - - - - - 5be46454 by Alec Theriault at 2018-06-14T21:42:45+02:00 Improved handling of interfaces in 'haddock-test' (#851) This should now work with an inplace GHC where (for instance) HTML directories may not be properly recorded in the package DB. - - - - - 96ab1387 by Vladislav Zavialov at 2018-06-14T17:06:21-04:00 Handle -XStarIsType - - - - - e518f8c4 by Ben Gamari at 2018-06-14T17:48:00-04:00 Revert unintentional reversion of fix of haskell/haddock#548 - - - - - 01b9f96d by Alan Zimmerman at 2018-06-19T11:52:22+02:00 Match changes in GHC for haskell/haddock#14259 - - - - - 7f8c8298 by Ben Gamari at 2018-06-19T18:14:27-04:00 Bump GHC version to 8.6 - - - - - 11c6b5d2 by Ryan Scott at 2018-06-19T23:17:31-04:00 Remove HsEqTy and XEqTy - - - - - b33347c2 by Herbert Valerio Riedel at 2018-06-20T23:14:52+02:00 Revert "Bump GHC version to 8.6" This was applied to the wrong branch; there's now a `ghc-8.6` branch; ghc-head is always supposed to point to GHC HEAD, i.e. an odd major version. The next version bump to `ghc-head` is supposed to go from e.g. 8.5 to 8.7 This reverts commit 5e3cf5d8868323079ff5494a8225b0467404a5d1. - - - - - f0d2460e by Herbert Valerio Riedel at 2018-06-20T23:28:46+02:00 Update Travis CI job - - - - - ef239223 by Herbert Valerio Riedel at 2018-06-20T23:32:41+02:00 Drop GHC HEAD from CI and update GHC to 8.4.3 It's a waste of resource to even try to build this branch w/ ghc-head; so let's not do that... - - - - - 41c4a9fa by Ben Gamari at 2018-06-20T18:26:20-04:00 Bump GHC version to 8.7 - - - - - 8be593dc by Herbert Valerio Riedel at 2018-06-21T22:32:15+02:00 Update CI job to use GHC 8.7.* - - - - - b91d334a by Simon Jakobi at 2018-06-30T13:41:38+02:00 README updates (#856) * README: Remove mentions of master branch * README: Add instructions for using html-test * README: Change command to run _all_ the testsuites * README: Add project overview section - - - - - f707d848 by Alec Theriault at 2018-07-05T10:43:35-04:00 Export more fixities for Hoogle (#871) This exports fixities for more things, including class methods and type-level operators. - - - - - a6d2b8dc by Alec Theriault at 2018-07-06T10:06:32-04:00 Avoid line breaks due to line length in Hoogle (#868) * Avoid line breaks due to line length in Hoogle Hoogle operates in a line-oriented fashion, so we should avoid ever breaking due to long lines. One way of doing this non-intrusively is to modify the 'DynFlags' that are threaded through the 'Hoogle' module (note this is anyways only passed through for use in the various 'showSDoc' functions). * Amend test case - - - - - 13819f71 by Alan Zimmerman at 2018-07-15T19:33:51+02:00 Match XFieldOcc rename in GHC Trac haskell/haddock#15386 - - - - - c346aa78 by Simon Jakobi at 2018-07-19T12:29:32+02:00 haddock-library: Bump bounds for containers - - - - - 722e733c by Simon Jakobi at 2018-07-19T13:36:45+02:00 tyThingToLHsDecl: Preserve type synonyms that contain a forall (#880) * tyThingToLHsDecls: Preserve type synonyms that contain a forall Fixes haskell/haddock#879. * Add Note [Invariant: Never expand type synonyms] * Clarify Note [Invariant: Never expand type synonyms] - - - - - f0bd83fd by Alec Theriault at 2018-07-19T14:39:57+02:00 Fix HEAD html-test (#860) * Update tests for 'StarIsType' * Accept tests * Revert "Update tests for 'StarIsType'" This reverts commit 7f0c01383bbba6dc5af554ee82988d2cf44e407a. - - - - - 394053a8 by Simon Jakobi at 2018-07-19T14:58:07+02:00 haddock-library: Bump bounds for containers - - - - - 1bda11a2 by Alec Theriault at 2018-07-20T09:04:03+02:00 Add HEAD.hackage overlay (#887) * Add HEAD.hackage overlay * Add HCPKG variable - - - - - c7b4ab45 by Alec Theriault at 2018-07-20T12:01:16+02:00 Refactor handling of parens in types (#874) * Fix type parenthesization in Hoogle backend Ported the logic in the HTML and LaTeX backends for adding in parens into something top-level in 'GhcUtil'. Calling that from the Hoogle backend fixes haskell/haddock#873. * Remove parenthesizing logic from LaTeX and XHTML backends Now, the only times that parenthesis in types are added in any backend is through the explicit 'HsParTy' constructor. Precedence is also represented as its own datatype. * List out cases explicitly vs. catch-all * Fix printing of parens for QuantifiedConstraints The priority of printing 'forall' types was just one too high. Fixes haskell/haddock#877. * Accept HTML output for quantified contexts test - - - - - c05d32ad by Alec Theriault at 2018-07-20T12:01:49+02:00 Preserve docs on type family instances (#867) * Preserve docs on type family instances The only problem was that the instance location was slightly off for type family instances. * Accept output - - - - - 24b39ee4 by Alec Theriault at 2018-07-20T12:02:16+02:00 Fix broken instance source links (#869) The problem manifests itself in instances that are defined in modules other than the module where the class is defined. The fix is just to thread through the 'Module' of the instance further along. Since orphan instances appear to already have been working, I didn't do anything there. - - - - - cb9d2099 by Simon Jakobi at 2018-07-20T13:39:29+02:00 README updates (#856) * README: Remove mentions of master branch * README: Add instructions for using html-test * README: Change command to run _all_ the testsuites * README: Add project overview section (cherry picked from commit 61d6f935da97eb96685f07bf385102c2dbc2a33c) - - - - - 133f24f5 by Alec Theriault at 2018-07-20T13:39:29+02:00 Export more fixities for Hoogle (#871) This exports fixities for more things, including class methods and type-level operators. (cherry picked from commit 88316b972e3d47197b1019111bae0f7f87275fce) - - - - - 11024149 by Alec Theriault at 2018-07-20T13:39:29+02:00 Avoid line breaks due to line length in Hoogle (#868) * Avoid line breaks due to line length in Hoogle Hoogle operates in a line-oriented fashion, so we should avoid ever breaking due to long lines. One way of doing this non-intrusively is to modify the 'DynFlags' that are threaded through the 'Hoogle' module (note this is anyways only passed through for use in the various 'showSDoc' functions). * Amend test case (cherry picked from commit 657b1b3d519545f8d4ca048c06210d6cbf0f0da0) - - - - - de0c139e by Simon Jakobi at 2018-07-20T13:39:29+02:00 tyThingToLHsDecl: Preserve type synonyms that contain a forall (#880) * tyThingToLHsDecls: Preserve type synonyms that contain a forall Fixes haskell/haddock#879. * Add Note [Invariant: Never expand type synonyms] * Clarify Note [Invariant: Never expand type synonyms] (cherry picked from commit c3eb3f0581f69e816f9453b1747a9f2a3ba02bb9) - - - - - 6435e952 by Alec Theriault at 2018-07-20T13:39:29+02:00 Preserve docs on type family instances (#867) * Preserve docs on type family instances The only problem was that the instance location was slightly off for type family instances. * Accept output (cherry picked from commit 133e9c2c168db19c1135479f7ab144c4e33af2a4) - - - - - 1461af39 by Alec Theriault at 2018-07-20T13:39:29+02:00 Fix broken instance source links (#869) The problem manifests itself in instances that are defined in modules other than the module where the class is defined. The fix is just to thread through the 'Module' of the instance further along. Since orphan instances appear to already have been working, I didn't do anything there. (cherry picked from commit 2de7c2acf9b1ec85b09027a8bb58bf8512e91c05) - - - - - 69d3bde1 by Alec Theriault at 2018-07-20T13:49:47+02:00 Add some more unicode related tests (#872) This has been fixed for sure ever since we switched from attoparsec to parsec. Parts of it may have been working before that, but there was a point where this would have failed (see haskell/haddock#191). A regression test never hurt anyone. :) - - - - - 6a5c73c7 by Alec Theriault at 2018-07-20T13:50:00+02:00 Misc tests (#858) * More tests * spliced types * constructor/pattern argument docs * strictness marks on fields with argument docs * latex test cases need seperate directory * Accept tests - - - - - 92ca94c6 by Alec Theriault at 2018-07-20T13:55:36+02:00 Add some more unicode related tests (#872) This has been fixed for sure ever since we switched from attoparsec to parsec. Parts of it may have been working before that, but there was a point where this would have failed (see haskell/haddock#191). A regression test never hurt anyone. :) (cherry picked from commit 5ec7715d418bfac0f26aec6039792a99a6e89370) - - - - - 981bc7fa by Simon Jakobi at 2018-07-20T15:06:06+02:00 Additional tests for the identifier parser (#816) * Add tests for the identifier parser * docs: Clarify how to delimit identifiers - - - - - 27e7c0c5 by Simon Jakobi at 2018-07-20T15:09:05+02:00 Additional tests for the identifier parser (#816) * Add tests for the identifier parser * docs: Clarify how to delimit identifiers (cherry picked from commit 0861affeca4d72938f05a2eceddfae2c19199071) - - - - - 49e1a415 by Simon Jakobi at 2018-07-20T16:02:02+02:00 Update the ghc-8.6 branch (#889) * Revert "Bump GHC version to 8.6" This was applied to the wrong branch; there's now a `ghc-8.6` branch; ghc-head is always supposed to point to GHC HEAD, i.e. an odd major version. The next version bump to `ghc-head` is supposed to go from e.g. 8.5 to 8.7 This reverts commit 5e3cf5d8868323079ff5494a8225b0467404a5d1. * README updates (#856) * README: Remove mentions of master branch * README: Add instructions for using html-test * README: Change command to run _all_ the testsuites * README: Add project overview section (cherry picked from commit 61d6f935da97eb96685f07bf385102c2dbc2a33c) * Export more fixities for Hoogle (#871) This exports fixities for more things, including class methods and type-level operators. (cherry picked from commit 88316b972e3d47197b1019111bae0f7f87275fce) * Avoid line breaks due to line length in Hoogle (#868) * Avoid line breaks due to line length in Hoogle Hoogle operates in a line-oriented fashion, so we should avoid ever breaking due to long lines. One way of doing this non-intrusively is to modify the 'DynFlags' that are threaded through the 'Hoogle' module (note this is anyways only passed through for use in the various 'showSDoc' functions). * Amend test case (cherry picked from commit 657b1b3d519545f8d4ca048c06210d6cbf0f0da0) * tyThingToLHsDecl: Preserve type synonyms that contain a forall (#880) * tyThingToLHsDecls: Preserve type synonyms that contain a forall Fixes haskell/haddock#879. * Add Note [Invariant: Never expand type synonyms] * Clarify Note [Invariant: Never expand type synonyms] (cherry picked from commit c3eb3f0581f69e816f9453b1747a9f2a3ba02bb9) * Fix HEAD html-test (#860) * Update tests for 'StarIsType' * Accept tests * Revert "Update tests for 'StarIsType'" This reverts commit 7f0c01383bbba6dc5af554ee82988d2cf44e407a. * Refactor handling of parens in types (#874) * Fix type parenthesization in Hoogle backend Ported the logic in the HTML and LaTeX backends for adding in parens into something top-level in 'GhcUtil'. Calling that from the Hoogle backend fixes haskell/haddock#873. * Remove parenthesizing logic from LaTeX and XHTML backends Now, the only times that parenthesis in types are added in any backend is through the explicit 'HsParTy' constructor. Precedence is also represented as its own datatype. * List out cases explicitly vs. catch-all * Fix printing of parens for QuantifiedConstraints The priority of printing 'forall' types was just one too high. Fixes haskell/haddock#877. * Accept HTML output for quantified contexts test * Preserve docs on type family instances (#867) * Preserve docs on type family instances The only problem was that the instance location was slightly off for type family instances. * Accept output (cherry picked from commit 133e9c2c168db19c1135479f7ab144c4e33af2a4) * Fix broken instance source links (#869) The problem manifests itself in instances that are defined in modules other than the module where the class is defined. The fix is just to thread through the 'Module' of the instance further along. Since orphan instances appear to already have been working, I didn't do anything there. (cherry picked from commit 2de7c2acf9b1ec85b09027a8bb58bf8512e91c05) * Add some more unicode related tests (#872) This has been fixed for sure ever since we switched from attoparsec to parsec. Parts of it may have been working before that, but there was a point where this would have failed (see haskell/haddock#191). A regression test never hurt anyone. :) (cherry picked from commit 5ec7715d418bfac0f26aec6039792a99a6e89370) * Misc tests (#858) * More tests * spliced types * constructor/pattern argument docs * strictness marks on fields with argument docs * latex test cases need seperate directory * Accept tests * Additional tests for the identifier parser (#816) * Add tests for the identifier parser * docs: Clarify how to delimit identifiers (cherry picked from commit 0861affeca4d72938f05a2eceddfae2c19199071) - - - - - 5ca14bed by Simon Jakobi at 2018-07-20T16:05:47+02:00 Revert "Revert "Bump GHC version to 8.6"" That commit didn't belong onto the ghc-8.6 branch. This reverts commit acbaef3b9daf1d2dea10017964bf886e77a8e967. - - - - - 2dd600dd by Simon Jakobi at 2018-07-20T16:18:21+02:00 Don't warn about ambiguous identifiers when the candidate names belong to the same type This also changes the defaulting heuristic for ambiguous identifiers. We now prefer local names primarily, and type constructors or class names secondarily. Partially fixes haskell/haddock#854. - - - - - fceb2422 by Simon Jakobi at 2018-07-20T16:18:21+02:00 outOfScope: Recommend qualifying the identifier - - - - - acea5d23 by Simon Jakobi at 2018-07-20T16:19:35+02:00 outOfScope: Recommend qualifying the identifier (cherry picked from commit 73707ed58d879cc04cb644c5dab88c39ca1465b7) - - - - - 1a83ca55 by Simon Jakobi at 2018-07-20T16:19:35+02:00 Don't warn about ambiguous identifiers when the candidate names belong to the same type This also changes the defaulting heuristic for ambiguous identifiers. We now prefer local names primarily, and type constructors or class names secondarily. Partially fixes haskell/haddock#854. (cherry picked from commit d504a2864a4e1982e142cf88c023e7caeea3b76f) - - - - - 48374451 by Masahiro Sakai at 2018-07-20T17:06:42+02:00 Add # as a special character (#884) '#' has special meaning used for anchors and can be escaped using backslash. Therefore it would be nice to be listed as special characters. - - - - - 5e1a5275 by Alec Theriault at 2018-07-20T23:37:24+02:00 Let `haddock-test` bypass interface version check (#890) This means `haddock-test` might * crash during deserialization * deserialize incorrectly Still - it means things _might_ work where they were previously sure not to. - - - - - 27286754 by Yuji Yamamoto at 2018-07-23T08:16:01+02:00 Avoid "invalid argument (invalid character)" on non-unicode Windows (#892) Steps to reproduce and the error message ==== ``` > stack haddock basement ... snip ... Warning: 'A' is out of scope. Warning: 'haddock: internal error: <stdout>: commitBuffer: invalid argument (invalid character) ``` Environment ==== OS: Windows 10 ver. 1709 haddock: [HEAD of ghc-8.4 when I reproduce the error](https://github.com/haskell/haddock/commit/532b209d127e4cecdbf7e9e3dcf4f653a5605b5a). (I had to use this version to avoid another probrem already fixed in HEAD) GHC: 8.4.3 stack: Version 1.7.1, Git revision 681c800873816c022739ca7ed14755e85a579565 (5807 commits) x86_64 hpack-0.28.2 Related pull request ==== https://github.com/haskell/haddock/pull/566 - - - - - 6729d361 by Alec Theriault at 2018-07-23T13:52:56-07:00 Accumulate explicitly which modules to load for 'attachInstances' The old approach to fixing haskell/haddock#469, while correct, consumes a lot of memory. We ended up with a HUGE 'GblRdrEnv' in 'ic_rn_gbl_env'. However, 'getNameToInstancesIndex' takes that environment and compresses it down to a much smaller 'ModuleSet'. Now, we compute that 'ModuleSet' explicitly as we process modules. That way we can just tell 'getNameToInstancesIndex' what modules to load (instead of it trying to compute that information from the interactive context). - - - - - 8cf4e6b5 by Ryan Scott at 2018-07-27T11:28:03-04:00 eqTyCon_RDR now lives in TysWiredIn After GHC commit http://git.haskell.org/ghc.git/commit/f265008fb6f70830e7e92ce563f6d83833cef071 - - - - - 1ad251a6 by Alan Zimmerman at 2018-07-30T13:28:09-04:00 Match XFieldOcc rename in GHC Trac haskell/haddock#15386 (cherry picked from commit e3926b50ab8a7269fd6904b06e881745f08bc5d6) - - - - - 8aea2492 by Richard Eisenberg at 2018-08-02T10:54:17-04:00 Update against new HsImplicitBndrs - - - - - e42cada9 by Alec Theriault at 2018-08-04T17:51:30+02:00 Latex type families (#734) * Support for type families in LaTeX The code is ported over from the XHTML backend. * Refactor XHTML and LaTeX family handling This is mostly a consolidation effort: stripping extra exports, inlining some short definitions, and trying to make the backends match. The LaTeX backend now has preliminary support for data families, although the only the data instance head is printed (not the actual constructors). Both backends also now use "newtype" for newtype data family instances. * Add some tests - - - - - 0e852512 by Alex Biehl at 2018-08-06T13:04:02+02:00 Make --package-version optional for --hoogle generation (#899) * Make --package-version optional for --hoogle generation * Import mkVersion * It's makeVersion not mkVersion - - - - - d2abd684 by Noel Bourke at 2018-08-21T09:34:18+02:00 Remove unnecessary backslashes from docs (#908) On https://haskell-haddock.readthedocs.io/en/latest/markup.html#special-characters the backslash and backtick special characters showed up with an extra backslash before them – I think the escaping is not (or no longer) needed for those characters in rst. - - - - - 7a578a9e by Matthew Pickering at 2018-08-21T09:34:50+02:00 Load plugins when starting a GHC session (#905) Fixes haskell/haddock#900 - - - - - aa3d4db3 by Matthew Pickering at 2018-08-21T09:37:34+02:00 Load plugins when starting a GHC session (#905) Fixes haskell/haddock#900 - - - - - ede91744 by Alec Theriault at 2018-08-21T09:42:52+02:00 Better test output when Haddock crashes on a test (#902) In particular: we report the tests that crashed seperately from the tests that produced incorrect output. In order for tests to pass (and exit 0), they must not crash and must produce the right output. - - - - - 4a872b84 by Guillaume Bouchard at 2018-08-21T09:45:57+02:00 Fix a typo (#878) - - - - - 4dbf7595 by Ben Sklaroff at 2018-08-21T12:04:09-04:00 Add ITcomment_line_prag token to Hyperlinker Parser This token is necessary for parsing #line pragmas inside nested comments. Reviewers: bgamari Reviewed By: bgamari Differential Revision: https://phabricator.haskell.org/D4935 - - - - - 9170b2a9 by Ben Gamari at 2018-08-21T17:55:15-04:00 Merge pull request haskell/haddock#893 from harpocrates/get-name-to-instances Accumulate explicitly which modules to load for 'attachInstances' - - - - - d57b57cc by Ben Gamari at 2018-08-21T17:59:13-04:00 Merge branch 'ghc-head' of github.com:haskell/haddock into ghc-head - - - - - 14601ca2 by Alec Theriault at 2018-08-21T19:09:37-04:00 Accumulate explicitly which modules to load for 'attachInstances' The old approach to fixing haskell/haddock#469, while correct, consumes a lot of memory. We ended up with a HUGE 'GblRdrEnv' in 'ic_rn_gbl_env'. However, 'getNameToInstancesIndex' takes that environment and compresses it down to a much smaller 'ModuleSet'. Now, we compute that 'ModuleSet' explicitly as we process modules. That way we can just tell 'getNameToInstancesIndex' what modules to load (instead of it trying to compute that information from the interactive context). (cherry picked from commit 5c7c596c51d69b92164e9ba920157b36ce2b2ec1) - - - - - 438c645e by Matthew Pickering at 2018-08-21T19:12:39-04:00 Load plugins when starting a GHC session (#905) Fixes haskell/haddock#900 (cherry picked from commit e6aa8fb47b9477cc5ef5e46097524fe83e080f6d) - - - - - a80c5161 by Alec Theriault at 2018-08-21T22:06:40-07:00 Better rendering of unboxed sums/tuples * adds space after/before the '#' marks * properly reify 'HsSumTy' in 'synifyType' - - - - - 88456cc1 by Alec Theriault at 2018-08-21T22:06:40-07:00 Handle promoted tuples in 'synifyType' When we have a fully applied promoted tuple, we can expand it out properly. - - - - - fd1c1094 by Alec Theriault at 2018-08-21T22:19:34-07:00 Accept test cases - - - - - 6e80d9e0 by Alec Theriault at 2018-08-21T22:24:03-07:00 Merge pull request haskell/haddock#914 from harpocrates/feature/unboxed-stuff Better rendering of unboxed sums, unboxed tuples, promoted tuples. - - - - - 181a23f1 by Ben Gamari at 2018-08-23T15:53:48-04:00 Merge remote-tracking branch 'origin/ghc-8.6' into ghc-8.6 - - - - - 3a18c1d8 by Alec Theriault at 2018-08-27T14:15:25-07:00 Properly synify promoted list types We reconstruct promoted list literals whenever possible. That means that 'synifyType' produces '[Int, Bool, ()] instead of (Int ': (() ': (Bool ': ([] :: [Type])))) - - - - - b4794946 by Alec Theriault at 2018-09-03T07:19:55-07:00 Only look at visible types when synifying a 'HsListTy' The other types are still looked at when considering whether to make a kind signature or not. - - - - - a231fce2 by Alec Theriault at 2018-09-03T07:38:10-07:00 Merge pull request haskell/haddock#922 from harpocrates/promoted-lists Properly synify promoted list types - - - - - 0fdf044e by Ningning Xie at 2018-09-15T10:25:58-04:00 Update according to GHC Core changes - - - - - 7379b115 by Ningning Xie at 2018-09-15T15:40:18-04:00 update dataFullSig to work with Co Quantification This should have been in the previous patch, but wasn't. - - - - - cf84a046 by Alec Theriault at 2018-09-17T20:12:18-07:00 Fix/add to various docs * Add documentation for a bunch of previously undocumented options (fixes haskell/haddock#870) * Extend the documentation of `--hoogle` considerably (see haskell/haddock#807) * Describe how to add docs to `deriving` clauses (fixes haskell/haddock#912) * Fix inaccurate docs about hyperlinking infix identifiers (fixes haskell/haddock#780) - - - - - ae017935 by Alec Theriault at 2018-09-22T08:32:16-07:00 Update Travis - - - - - d95ae753 by Alec Theriault at 2018-09-22T09:34:10-07:00 Accept failing tests Also silence orphan warnings. - - - - - f3e67024 by Alec Theriault at 2018-09-22T09:41:23-07:00 Bump haddock-api-2.21.0, haddock-library-1.7.0 * Update CHANGELOGS * Update new versions in Cabal files * Purge references to ghc-8.4/master branches in README - - - - - 3f136d4a by Alec Theriault at 2018-09-22T10:53:31-07:00 Turn haddock-library into a minor release Fix some version bounds in haddock-library too. - - - - - b9def006 by Alec Theriault at 2018-09-22T13:07:35-07:00 keep cabal.project file - - - - - 4909aca7 by Alec Theriault at 2018-10-16T09:36:30-07:00 Build on 7.4 and 7.8 - - - - - 99d20a28 by Herbert Valerio Riedel at 2018-10-16T18:45:52+02:00 Minor tweak to package description - - - - - a8059618 by Herbert Valerio Riedel at 2018-10-16T18:47:24+02:00 Merge pull request haskell/haddock#945 haddock-api 2.21.0 and haddock-library 1.6.1 release - - - - - 2d9bdfc1 by Alec Theriault at 2018-10-16T10:54:21-07:00 Bump haddock-library to 1.7.0 The 1.6.1 release should've been a major bump, since types in the `Documentation.Haddock.Parser.Monad` module changed. This version makes that module internal (as it morally should be). - - - - - ed340cef by Alec Theriault at 2018-10-16T14:59:13-07:00 Merge branch 'ghc-8.4' into ghc-8.6 - - - - - 2821a8df by Alec Theriault at 2018-10-16T15:14:48-07:00 Merge branch 'ghc-8.6' into ghc-head - - - - - a722dc84 by Alec Theriault at 2018-10-16T16:28:55-07:00 Latex type families (#734) * Support for type families in LaTeX The code is ported over from the XHTML backend. * Refactor XHTML and LaTeX family handling This is mostly a consolidation effort: stripping extra exports, inlining some short definitions, and trying to make the backends match. The LaTeX backend now has preliminary support for data families, although the only the data instance head is printed (not the actual constructors). Both backends also now use "newtype" for newtype data family instances. * Add some tests - - - - - 63377496 by Alec Theriault at 2018-10-16T16:39:07-07:00 Update changelog - - - - - 099a0110 by Alec Theriault at 2018-10-16T16:49:28-07:00 Merge pull request haskell/haddock#942 from harpocrates/update-docs Fix & add to documentation - - - - - 0927416f by Alec Theriault at 2018-10-16T16:50:14-07:00 Set UTF-8 encoding before writing files (#934) This should fix haskell/haddock#929, as well as guard against future problems of this sort in other places. Basically replaces 'writeFile' (which selects the users default locale) with 'writeUtf8File' (which always uses utf8). - - - - - 83b7b017 by Alec Theriault at 2018-10-16T17:42:05-07:00 Output pattern synonyms in Hoogle backend (#947) * Output pattern synonyms in Hoogle backend We were previously weren't outputting _any_ pattern synonyms, bundled or not. Now, we output both. Fixes haskell/haddock#946. * Update changelog - - - - - 81e5033d by Alec Theriault at 2018-10-16T18:04:40-07:00 Release `haddock{,-api}-2.22.0` This version will accompany ghc-8.6.2 - - - - - 9661744e by Alex Biehl at 2018-10-18T08:14:32-07:00 Add NewOcean theme And make it the default theme. - - - - - 7ae6d722 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Improve appearance and readability These changes include: - use latest Haskell's logo colors - decrease #content width to improve readability - use nicer font - improve sizes and distances - - - - - 37f8703d by NunoAlexandre at 2018-10-18T08:14:32-07:00 Include custom font in the html head - - - - - 1d5e1d79 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Update html test reference files - - - - - 53b7651f by NunoAlexandre at 2018-10-18T08:14:32-07:00 Make it responsive - It makes small screens taking more space than larger ones - fixes a few issues present in small screens currently - make it look good across different screen sizes. - - - - - 6aa1aeb1 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Make the style consistent with hackage Several things are addressed here: - better responsive behaviour on the header - better space usage - consistent colors overall - other nit PR comments - - - - - 3a250c5c by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Place the package name before the menu links This supports the expected responsive menu design, where the package name appears above the menu links. - - - - - cae699b3 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update html-test reference files The package name element in the package-header is now a div instead of a paragraph, and it is now above the menu ul.links instead of below. - - - - - 2ec7fd2d by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Improve synopsis style and code - Use CSS3 instead of loading pictures to show "+" and "-" symbols - Drop redundant code - - - - - 0c874c01 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Decrease space between code blocks There was too much space between code blocks as pointed out by reviewers. - - - - - 85568ce2 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Add an initial-scale property to all haddock pages This solves an issue reported about the content looking incredibly small on mobile devices. - - - - - c1538926 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Address several PR comments - Darken text color like done for hackage - Move synopsis to left side - Make table of contents stick to the left on wide screens - Wrap links to avoid page overflow - Improve expand/collapse buttons - Fix issue with content size on mobile devices - Fix issue with font-size on landscape mode - Increase width of the content - Change colors of table of contents and synopsis - Etc - - - - - e6639e5f by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Make synopsis scrollable on wide screens When the synopsis is longer than the screen, you can’t see its end and you can't scroll down either, making the content unreachable. - - - - - 1f0591ff by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Improve information density - Reduce font size - Improve space between and within code blocks - Improve alignments - Improve spacing within sub-blocks - - - - - bf083097 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Minor adjustments Bring in some adjustments made to hackage: - link colors - page header show everything when package title is too long - - - - - 10375fc7 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Fix responsive triggers overlap issue The min and max width triggers have the same values, which caused the style resolution to take an intersection of both style declarations when the screen resolution had the size of the limts (say 1280px), causing an odd behaviour and look. - - - - - 95ff2f95 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Fix issue with menu alignment on firefox Reported and described here: https://github.com/haskell/haddock/pull/721#issuecomment-374668869 - - - - - dc86587e by Alex Biehl at 2018-10-18T08:14:32-07:00 Changelog entry for NewOcean - - - - - 27195e47 by Herbert Valerio Riedel at 2018-10-18T08:14:32-07:00 html-test --accept - - - - - 83f4f9c0 by Alex Biehl at 2018-10-18T08:14:32-07:00 Avoid name shadowing - - - - - 231487f1 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update font to PT Sans Also migrate some general text related changes from hackage. - - - - - 313db81a by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Use 'flex' to fix header alignment - - - - - 5087367b by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Misc of tweaks - Update link colors to hackage scheme - Tune spacing between content elements - Update footer style - Fix and improve code blocks identation - - - - - b08020df by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update font in Xhtml.hs to PT Sans - - - - - 78ce06e3 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Improve code blocks styling - Fix and improve spacing - Improve colors and borders - - - - - 81262d20 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Make package-header caption backward-compatible The current html generator of this branch wraps the package-header caption as a div, which does not work (without style adjustments) with the old themes. Changing it from div to span does the trick, without needing to adjust the old stylesheets. - - - - - dc4475cb by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update test-suite reference html pages - - - - - 393d35d8 by Alec Theriault at 2018-10-18T08:25:36-07:00 Accept tests - - - - - a94484ba by Alec Theriault at 2018-10-21T10:29:29-07:00 Fix CHANGELOG - - - - - 8797eca3 by Alec Theriault at 2018-10-21T10:36:19-07:00 Update 'data-files' to include NewOcean stuff - - - - - 1ae51e4a by Simon Jakobi at 2018-10-23T11:29:14+02:00 Fix typo in a warning - - - - - 009ad8e8 by Alec Theriault at 2018-10-24T12:47:47-07:00 Update JS dependencies This was done via `npm audit fix`. I think this fixes haskell/haddock#903 along with some more serious vulnerabilities that nobody seems to have noticed. - - - - - 051994db by Alec Theriault at 2018-10-24T17:31:09-07:00 Resurrect the style-switcher This fixes haskell/haddock#810. Looks like things were broken during the quickjump refactor of the JS. For the (git) record: I do not think the style switcher is a good idea. I'm fixing it for the same reason @mzero added it; as an answer to "rumblings from some that they didn't want their pixels changed on bit" - - - - - 2a1d620f by Alec Theriault at 2018-10-24T17:38:07-07:00 Fix copy-pasta error in data-files - - - - - ed5bfb7f by Alec Theriault at 2018-10-24T20:42:14-07:00 Fix the synopsis button Here's these changes are supposed to do: * put the synopsis back on the right side * properly have it on the edge of the screen on wide screens * adjust the background of the synopsis to match the button (otherwise the grey blends in with what is underneath) * get rid of the dotted purple line * the synopsis contents are now scrollable even when in wide screens (this has been a long-standing bug) - - - - - 883fd74b by Alec Theriault at 2018-10-25T20:16:46-07:00 Avoid more conflicts in generated ids (#954) This fixes haskell/haddock#953 by passing more names into the generated ids. - - - - - ea54e331 by Alec Theriault at 2018-10-25T21:07:12-07:00 Don't hide bullets in method docs I think thst CSS was meant only to deal with fields and the effect on bullets was accidental. Fixes haskell/haddock#926. - - - - - 9a14ef4a by Alec Theriault at 2018-10-25T22:02:07-07:00 Indent more things + slightly smaller font - - - - - b9f17e29 by Alec Theriault at 2018-10-25T22:10:01-07:00 Merge branch 'ghc-8.6' into wip/new-ocean - - - - - 096a3cfa by Alec Theriault at 2018-10-25T22:24:38-07:00 Accept HTML output - - - - - 2669517d by Alec Theriault at 2018-10-26T09:02:35-07:00 User manual + stuff for building GHC docs - - - - - 46b27687 by Alec Theriault at 2018-10-26T09:10:59-07:00 Make 'Contents' in NewOcean scrollable This only happens if the contents block on the left is so big that it doesn't fit (vertically) on the page. If that happens, we want it to be scrollable. - - - - - 3443dd94 by Alec Theriault at 2018-10-26T09:36:46-07:00 Revert "Make 'Contents' in NewOcean scrollable" This reverts commit f909ffd8353d6463fd5dd184998a32aa98d5c922. I missed the fact this also forces the 'Contents' to always go down to the bottom of the page. - - - - - ed081424 by Alec Theriault at 2018-10-26T14:22:23-07:00 Avoid some partiality AFAICT this wasn't causing any crashes, but that's mostly because we happen not to be forcing `pkgStr` when it would diverge. We come dangerously close to doing that in `ppHtmlIndex`. Fixes haskell/haddock#569. - - - - - 6a5bec41 by Alec Theriault at 2018-10-27T10:05:04-07:00 Fix documentation in `haddock-api` (#957) * Fix misplaced Haddocks in Haddock itself Haddock should be able to generate documentation for 'haddock-api' again. * Make CI check that documentation can be built. * Add back a doc that is OK - - - - - 5100450a by Matthew Yacavone at 2018-10-27T14:51:38-04:00 More explicit foralls (GHC Proposal 0007) - - - - - 8771a6b0 by Alec Theriault at 2018-11-05T13:58:11-08:00 Only run MathJax on entities with "mathjax" class (#960) Correspondingly, we wrap all inline/diplay math in <span class="mathjax"> ... the math .... </span> This fixes haskell/haddock#959. - - - - - bd7ff5c5 by Alec Theriault at 2018-11-05T15:54:22-08:00 Deduplicate some work in 'AttachInstances' Perf only change: * avoid needlessly union-ing maps * avoid synify-ing instances twice Took this opportunity to add some docs too - - - - - cf99fd8f by Alec Theriault at 2018-11-05T15:54:22-08:00 Specialize some SYB functions Perf only change: * Add a 'SPECIALIZE' pragma to help GHC optimize a 'Data a =>' constraint * Manually specialize the needlessly general type of 'specializeTyVarBndrs' - - - - - 4f91c473 by Alec Theriault at 2018-11-05T15:54:22-08:00 Improve perf of renaming Perf only change: * don't look up type variable names (they're never in the environment) * use a difference list for accumulating missing names * more efficient 'Functor'/'Applicative' instances for 'RnM' - - - - - 4bbab0d4 by Alec Theriault at 2018-11-05T15:54:22-08:00 Faster 'Text' driven parser combinators Perf only change: * use 'getParserState'/'setParserState' to make 'Text'-optimized parser combinators * minimize uses of 'Data.Text.{pack,unpack,cons,snoc}' - - - - - fa430c02 by Alec Theriault at 2018-11-06T12:03:24-08:00 Support hyperlink labels with inline markup The parser for pictures hasn't been properly adjusted yet. - - - - - c1431035 by Alec Theriault at 2018-11-06T12:03:24-08:00 Support (and flatten) inline markup in image links Inline markup is supported in image links but, as per the [commonmark recommendation][0], it is stripped back to a plain text representation. [0]: https://spec.commonmark.org/0.28/#example-547 - - - - - d4ee1ba5 by Alec Theriault at 2018-11-06T12:03:24-08:00 Accept test case - - - - - 8088aeb1 by Alec Theriault at 2018-11-06T12:03:24-08:00 Fix/add to haddock-library test suite - - - - - e78f644d by Alec Theriault at 2018-11-06T13:26:31-08:00 Bump version bounds - - - - - 644335eb by Alec Theriault at 2018-11-06T13:53:30-08:00 Merge pull request haskell/haddock#875 from harpocrates/feature/markup-in-hyperlinks Inline markup in markdown-style links and images - - - - - e173ed0d by Alec Theriault at 2018-11-07T12:37:18-08:00 Fix issues around plus/minus * swap the minimize unicode to something more intuitive * use new unicode expander/collapser for instance lists * address some alignment issues in the "index" page - - - - - b2d92df7 by Alec Theriault at 2018-11-07T13:41:57-08:00 Allow "Contents" summary to scroll in a fixed div In the unfortunate event that the "Contents" summary doesn't fit vertically (like in the "Prelude"), it will be scrollable. - - - - - ca704c23 by Alec Theriault at 2018-11-07T13:45:15-08:00 Accept HTML output changes - - - - - 82c0ec6d by Alec Theriault at 2018-11-07T18:12:54-08:00 overflow-y 'scroll' -> 'auto' - - - - - 571d7657 by Alec Theriault at 2018-11-08T19:44:12-08:00 Clicking on "Contents" navigates to top of page - - - - - 8065a012 by Alec Theriault at 2018-11-08T19:44:17-08:00 Space out functions more Also, functions and data decls now have the same space before and after them. - - - - - cc650ede by Alec Theriault at 2018-11-09T08:13:35-08:00 Merge branch 'ghc-8.6' into wip/new-ocean - - - - - 65f8c17f by Alec Theriault at 2018-11-10T14:04:06-08:00 Update changelog - - - - - 20473847 by Alec Theriault at 2018-11-10T14:21:40-08:00 Replace oplus/ominus expander/collapser icons with triangles - - - - - 16592957 by Alec Theriault at 2018-11-10T14:35:10-08:00 Merge pull request haskell/haddock#949 from haskell/wip/new-ocean Introduce NewOcean theme. - - - - - 357cefe1 by Alec Theriault at 2018-11-10T16:02:13-08:00 Merge branch 'ghc-8.6' into ghc-head - - - - - de612267 by Alec Theriault at 2018-11-11T20:01:21-08:00 Rename 'NewOcean' theme to 'Linuwial' - - - - - 954b5baa by Alec Theriault at 2018-11-12T08:33:18-08:00 Add blockquote styling Matches b71da1feabf33efbbc517ac376bb690b5a604c2f from hackage-server. Fixes haskell/haddock#967. - - - - - d32c0b0b by Fangyi Zhou at 2018-11-12T10:24:13-08:00 Fix some broken links (#15733) Summary: For links in subpackages as well. https://phabricator.haskell.org/D5257 Test Plan: Manually verify links Reviewers: mpickering, bgamari, osa1 Reviewed By: osa1 GHC Trac Issues: haskell/haddock#15733 Differential Revision: https://phabricator.haskell.org/D5262 - - - - - 41098b1f by Alp Mestanogullari at 2018-11-15T22:40:09+01:00 Follow GHC HEAD's HsTypes.Promoted -> BasicTypes.PromotionFlag change It got introduced in ghc/ghc at ae2c9b40f5b6bf272251d1f4107c60003f541b62. - - - - - c5c1c7e0 by Alec Theriault at 2018-11-15T13:48:13-08:00 Merge pull request haskell/haddock#970 from alpmestan/alp/fix-promotionflag Follow GHC HEAD's HsTypes.Promoted -> BasicTypes.PromotionFlag change - - - - - 6473d3a4 by Shayan-Najd at 2018-11-23T01:38:49+01:00 [TTG: Handling Source Locations] Foundation and Pat Trac Issues haskell/haddock#15495 This patch removes the ping-pong style from HsPat (only, for now), using the plan laid out at https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow/HandlingSourceLocations (solution A). - the class `HasSrcSpan`, and its functions (e.g., `cL` and `dL`), are introduced - some instances of `HasSrcSpan` are introduced - some constructors `L` are replaced with `cL` - some patterns `L` are replaced with `dL->L` view pattern - some type annotation are necessarily updated (e.g., `Pat p` --> `Pat (GhcPass p)`) - - - - - 7a088dfe by Alec Theriault at 2018-11-26T11:11:28-08:00 More uniform handling of `forall`'s in HTML/LaTeX * don't forget to print explicit `forall`'s when there are arg docs * when printing an explicit `forall`, print all tyvars Fixes haskell/haddock#973 - - - - - d735e570 by Alec Theriault at 2018-12-12T08:42:09-08:00 Fix warnings, accept output * remove redundant imports (only brought to light due to recent work for improving redundant import detection) * fix a bug that was casuing exports to appear in reverse order * fix something in haddock-library that prevented compilation on old GHC's - - - - - a3852f8a by Zejun Wu at 2018-12-14T09:37:47-05:00 Output better debug infromation on internal error in extractDecl This will make investigation of haskell/haddock#979 easier - - - - - 2eccb5b9 by Alec Theriault at 2018-12-17T09:25:10-05:00 Refactor names + unused functions (#982) This commit should not introduce any change in functionality! * consistently use `getOccString` to convert `Name`s to strings * compare names directly when possible (instead of comparing strings) * get rid of unused utility functions - - - - - e82e4df8 by Alec Theriault at 2018-12-20T16:16:30-05:00 Load plugins when compiling each module (#983) * WIP: Load (typechecker) plugins from language pragmas * Revert "Load plugins when starting a GHC session (#905)" This reverts commit 72d82e52f2a6225686d9668790ac33c1d1743193. * Simplify plugin initialization code - - - - - 96e86f38 by Alec Theriault at 2018-12-23T10:23:20-05:00 Properly synify and render promoted type variables (#985) * Synify and render properly promoted type variables Fixes haskell/haddock#923. * Accept output - - - - - 23343345 by Alec Theriault at 2018-12-27T16:39:38-05:00 Remove `haddock-test`'s dep. on `syb` (#987) The functionality is easily inlined into one short function: `gmapEverywhere`. This doesn't warrant pulling in another package. - - - - - d0734f21 by Alec Theriault at 2018-12-27T16:39:52-05:00 Address deprecation warnings in `haddock-test` (#988) Fixes haskell/haddock#885. - - - - - 4d9f144e by mynguyen at 2018-12-30T23:42:26-05:00 Visible kind application haddock update - - - - - ffe0e9ed by Alec Theriault at 2019-01-07T13:55:22-08:00 Print kinded tyvars in constructors for Hoogle (#993) Fixes haskell/haddock#992 - - - - - 2e18b55d by Alec Theriault at 2019-01-10T16:42:45-08:00 Accept new output `GHC.Maybe` -> `Data.Maybe` (#996) Since 53874834b779ad0dfbcde6650069c37926da1b79 in GHC, "GHC.Maybe" is marked as `not-home`. That changes around some test output. - - - - - 055da666 by Gabor Greif at 2019-01-22T14:41:51+01:00 Lone typofix - - - - - 01bb71c9 by Alec Theriault at 2019-01-23T11:46:46-08:00 Keep forall on H98 existential data constructors (#1003) The information about whether or not there is a source-level `forall` is already available on a `ConDecl` (as `con_forall`), so we should use it instead of always assuming `False`! Fixes haskell/haddock#1002. - - - - - f9b9bc0e by Ryan Scott at 2019-01-27T09:28:12-08:00 Fix haskell/haddock#1004 with a pinch of dropForAlls - - - - - 5cfcdd0a by Alec Theriault at 2019-01-28T16:49:57-08:00 Loosen 'QuickCheck' and 'hspec' bounds It looks like the new versions don't cause any breakage and loosening the bounds helps deps fit in one stack resolver. - - - - - 3545d3dd by Alec Theriault at 2019-01-31T01:37:25-08:00 Use `.hie` files for the Hyperlinker backend (#977) # Summary This is a large architectural change to the Hyperlinker. * extract link (and now also type) information from `.hie` instead of doing ad-hoc SYB traversals of the `RenamedSource`. Also adds a superb type-on-hover feature (#715). * re-engineer the lexer to avoid needless string conversions. By going directly through GHC's `P` monad and taking bytestring slices, we avoid a ton of allocation and have better handling of position pragmas and CPP. In terms of performance, the Haddock side of things has gotten _much_ more efficient. Unfortunately, much of this is cancelled out by the increased GHC workload for generating `.hie` files. For the full set of boot libs (including `ghc`-the-library) * the sum of total time went down by 9-10% overall * the sum of total allocations went down by 6-7% # Motivation Haddock is moving towards working entirely over `.hi` and `.hie` files. This change means we no longer need the `RenamedSource` from `TypecheckedModule` (something which is _not_ in `.hi` files). # Details Along the way a bunch of things were fixed: * Cross package (and other) links are now more reliable (#496) * The lexer tries to recover from errors on every line (instead of at CPP boundaries) * `LINE`/`COLUMN` pragmas are taken into account * filter out zero length tokens before rendering * avoid recomputing the `ModuleName`-based `SrcMap` * remove the last use of `Documentation.Haddock.Utf8` (see haskell/haddock#998) * restructure temporary folder logic for `.hi`/`.hie` model - - - - - 2ded3359 by Herbert Valerio Riedel at 2019-02-02T12:06:12+01:00 Update/modernise haddock-library.cabal file - - - - - 62b93451 by Herbert Valerio Riedel at 2019-02-02T12:19:31+01:00 Tentatively declare support for unreleased base-4.13/ghc-8.8 - - - - - 6041e767 by Herbert Valerio Riedel at 2019-02-02T16:04:32+01:00 Normalise LICENSE text w/ cabal's BSD2 template Also, correct the `.cabal` files to advertise `BSD2` instead of the incorrect `BSD3` license. - - - - - 0b459d7f by Alec Theriault at 2019-02-02T18:06:12-08:00 CI: fetch GHC from validate artifact Should help make CI be less broken - - - - - 6b5c07cf by Alec Theriault at 2019-02-02T18:06:12-08:00 Fix some Hyperlinker test suite fallout * Amend `ParserSpec` to match new Hyperlinker API - pass in compiler info - strip out null tokens * Make `hypsrc-test` pass reliably - strip out `local-*` ids - strip out `line-*` ids from the `ClangCppBug` test - re-accept output - - - - - ded34791 by Nathan Collins at 2019-02-02T18:31:23-08:00 Update README instructions for Stack No need to `stack install` Haddock to test it. Indeed, `stack install` changes the `haddock` on user's `PATH` if `~/.local/bin` is on user's `PATH` which may not be desirable when hacking on Haddock. - - - - - 723298c9 by Alec Theriault at 2019-02-03T09:11:05-08:00 Remove `Documentation.Haddock.Utf8` The circumstances under which this module appeared are completely gone. The Hyperlinker backend no longer needs this module (it uses the more efficient `Encoding` module from `ghc`). Why no deprecation? Because this module really shouldn't exist! - It isn't used in `haddock-library`/`haddock-api` anymore - It was copy pasted directly from `utf8-string` - Folks seeking a boot-lib only solution can use `ghc`'s `Encoding` - - - - - 51050006 by Alec Theriault at 2019-02-03T22:58:58-08:00 Miscellaneous improvements to `Convert` (#1020) Now that Haddock is moving towards working entirely over `.hi` and `.hie` files, all declarations and types are going to be synthesized via the `Convert` module. In preparation for this change, here are a bunch of fixes to this module: * Add kind annotations to type variables in `forall`'s whose kind is not `Type`, unless the kind can be inferred from some later use of the variable. See `implicitForAll` and `noKindTyVars` in particular if you wish to dive into this. * Properly detect `HsQualTy` in `synifyType`. This is done by following suit with what GHC's `toIfaceTypeX` does and checking the first argument of `FunTy{} :: Type` to see if it classified as a given/wanted in the typechecker (see `isPredTy`). * Beef up the logic around figuring out when an explicit `forall` is needed. This includes: observing if any of the type variables will need kind signatures, if the inferred type variable order _without_ a forall will still match the one GHC claims, and some other small things. * Add some (not yet used) functionality for default levity polymorphic type signatures. This functionality similar to `fprint-explicit-runtime-reps`. Couple other smaller fixes only worth mentioning: * Show the family result signature only when it isn't `Type` * Fix rendering of implicit parameters in the LaTeX and Hoogle backends * Better handling of the return kind of polykinded H98 data declarations * Class decls produced by `tyThingToLHsDecl` now contain associated type defaults and default method signatures when appropriate * Filter out more `forall`'s in pattern synonyms - - - - - 841980c4 by Oleg Grenrus at 2019-02-04T08:44:25-08:00 Make a fixture of weird parsing of lists (#997) The second example is interesting. If there's a list directly after the header, and that list has deeper structure, the parser is confused: It finds two lists: - One with the first nested element, - everything after it I'm not trying to fix this, as I'm not even sure this is a bug, and not a feature. - - - - - 7315c0c8 by Ryan Scott at 2019-02-04T12:17:56-08:00 Fix haskell/haddock#1015 with dataConUserTyVars (#1022) The central trick in this patch is to use `dataConUserTyVars` instead of `univ_tvs ++ ex_tvs`, which displays the foralls in a GADT constructor in a way that's more faithful to how the user originally wrote it. Fixes haskell/haddock#1015. - - - - - ee0b49a3 by Ryan Scott at 2019-02-04T15:25:17-05:00 Changes from haskell/haddock#14579 We now have a top-level `tyConAppNeedsKindSig` function, which means that we can delete lots of code in `Convert`. - - - - - 1c850dc8 by Alan Zimmerman at 2019-02-05T21:54:18+02:00 Matching changes in GHC for haskell/haddock#16236 - - - - - ab03c38e by Simon Marlow at 2019-02-06T08:07:33+00:00 Merge pull request haskell/haddock#1014 from hvr/pr/bsd2-normalise Normalise LICENSE text w/ cabal's BSD2 template - - - - - 5a92ccae by Alec Theriault at 2019-02-10T06:21:55-05:00 Merge remote-tracking branch 'gitlab/wip/T16236-2' into ghc-head - - - - - c0485a1d by Alec Theriault at 2019-02-10T03:32:52-08:00 Removes `haddock-test`s dependency on `xml`/`xhtml` (#1027) This means that `html-test`, `latex-test`, `hoogle-test`, and `hypsrc-test` now only depend on GHC boot libs. So we should now be able to build and run these as part of GHC's testsuite. \o/ The reference output has changed very slightly, in three ways: * we don't convert quotes back into `&quot;` as the `xml` lib did * we don't add extra `&nbsp;` as the `xml` lib did * we now remove the entire footer `div` (instead of just emptying it) - - - - - 65a448e3 by Alec Theriault at 2019-02-11T12:27:41-05:00 Remove workaround for now-fixed Clang CPP bug (#1028) Before LLVM 6.0.1 (or 10.0 on Apple LLVM), there was a bug where lines that started with an octothorpe but turned out not to lex like pragmas would have an extra line added after them. Since this bug has been fixed upstream and that it doesn't have dire consequences anyways, the workaround is not really worth it anymore - we can just tell people to update their clang version (or re-structure their pragma code). - - - - - 360ca937 by Alec Theriault at 2019-02-13T11:36:11-05:00 Clean up logic for guessing `-B` and `--lib` (#1026) Haddock built with the `in-ghc-tree` flag tries harder to find the GHC lib folder and its own resources. This should make it possible to use `in-ghc-tree`-built Haddock without having to specify the `-B` and `--lib` options (just how you can use in-tree GHC without always specifying the `-B` option). The logic to do this relies on `getExecutablePath`, so we only get this auto-detection on platforms where this function works. - - - - - d583e364 by Alec Theriault at 2019-02-16T10:41:22-05:00 Fix tests broken by GHC Changes in 19626218566ea709b5f6f287d3c296b0c4021de2 affected some of the hyperlinker output. Accepted the new output (hovering over a `..` now shows you what that wildcard binds). Also fixed some stray deprecation warnings. - - - - - da0c42cc by Vladislav Zavialov at 2019-02-17T11:39:19+03:00 Parser changes to match !380 - - - - - ab96bed7 by Ryan Scott at 2019-02-18T04:44:08-05:00 Bump ghc version to 8.9 - - - - - 44b7c714 by Alec Theriault at 2019-02-22T05:49:43-08:00 Match GHC changes for T16185 `FunTy` now has an `AnonArgFlag` that indicates whether the arrow is a `t1 => t2` or `t1 -> t2`. This commit shouldn't change any functionality in Haddock. - - - - - 2ee653b1 by Alec Theriault at 2019-02-24T18:53:33-08:00 Update .travis.yml Points to the new GHC CI artifact. - - - - - 90939d71 by Alec Theriault at 2019-02-25T00:42:41-08:00 Support value/type namespaces on identifier links Identifier links can be prefixed with a 'v' or 't' to indicate the value or type namespace of the desired identifier. For example: -- | Some link to a value: v'Data.Functor.Identity' -- -- Some link to a type: t'Data.Functor.Identity' The default is still the type (with a warning about the ambiguity) - - - - - d6ed496c by Alec Theriault at 2019-02-25T00:42:46-08:00 Better identifier parsing * '(<|>)' and '`elem`' now get parsed and rendered properly as links * 'DbModule'/'DbUnitId' now properly get split apart into two links * tuple names now get parsed properly * some more small niceties... The identifier parsing code is more precise and more efficient (although to be fair: it is also longer and in its own module). On the rendering side, we need to pipe through information about backticks/parens/neither all the way through from renaming to the backends. In terms of impact: a total of 35 modules in the entirety of the bootlib + ghc lib docs change. The only "regression" is things like '\0'. These should be changed to @\\0@ (the path by which this previously worked seems accidental). - - - - - 3c3b404c by Alec Theriault at 2019-02-25T22:12:11-08:00 Fix standalone deriving docs Docs on standalone deriving decls for classes with associated types should be associated with the class instance, not the associated type instance. Fixes haskell/haddock#1033 - - - - - d51ef69e by Alec Theriault at 2019-02-26T19:14:59-08:00 Fix bogus identifier defaulting This avoids a situation in which an identifier would get defaulted to a completely different identifier. Prior to this commit, the 'Bug1035' test case would hyperlink 'Foo' into 'Bar'! Fixes haskell/haddock#1035. - - - - - 88cbbdc7 by Ryan Scott at 2019-02-27T10:14:03-05:00 Visible dependent quantification (#16326) changes - - - - - 0dcf6cee by Xia Li-yao at 2019-02-27T21:53:27-05:00 Menu item controlling which instances are expanded/collapsed (#1007) Adds a menu item (like "Quick Jump") for options related to displaying instances. This provides functionality for: * expanding/collapsing all instances on the currently opened page * controlling whether instances are expanded/collapsed by default * controlling whether the state of instances should be "remembered" This new functionality is implemented in Typescript in `details-helper`. The built-in-themes style switcher also got a revamp so that all three of QuickJump, the style switcher, and instance preferences now have the same style and implementation structure. See also: https://mail.haskell.org/pipermail/haskell-cafe/2019-January/130495.html Fixes haskell/haddock#698. Co-authored-by: Lysxia <lysxia at gmail.com> Co-authored-by: Nathan Collins <conathan at galois.com> - - - - - 3828c0fb by Alec Theriault at 2019-02-28T12:42:49-05:00 `--show-interface` should output to stdout. (#1040) Fixes haskell/haddock#864. - - - - - a50f4cda by gbaz at 2019-03-01T07:43:16-08:00 Increase contrast of Linuwal theme (#1037) This is to address the concern that, on less nice and older screens, some of the shades of grey blend in too easily with the white background. * darken the font slightly * darken slightly the grey behind type signatures and such * add a border and round the corners on code blocks * knock the font down by one point - - - - - ab4d41de by Alec Theriault at 2019-03-03T09:23:26-08:00 Merge branch 'ghc-8.6' into ghc-8.8 - - - - - 12f509eb by Ben Gamari at 2019-03-04T22:13:20-05:00 Remove reference to Opt_SplitObjs flag Split-objects has been removed. - - - - - 5b3e4c9a by Ryan Scott at 2019-03-06T19:16:24-05:00 Update html-test output to reflect haskell/haddock#16391 changes - - - - - fc228af1 by Alec Theriault at 2019-03-09T08:29:23-08:00 Match changes for "Stop inferring over-polymorphic kinds" The `hsq_ext` field of `HsQTvs` is now just the implicit variables (instead of also including information about which of these variables are dependent). This commit shouldn't change any functionality in Haddock. - - - - - 6ac109eb by Alec Theriault at 2019-03-09T11:22:55-08:00 Add .hi, .dyn_hi, etc files to .gitignore Fixes haskell/haddock#1030. - - - - - b55f0c05 by Alec Theriault at 2019-03-09T11:22:55-08:00 Better support for default methods in classes * default methods now get rendered differently * default associated types get rendered * fix a forgotten `s/TypeSig/ClassOpSig/` refactor in LaTeX backend * LaTeX backend now renders default method signatures NB: there is still no way to document default class members and the NB: LaTeX backend still crashes on associated types - - - - - 10aea0cf by Alec Theriault at 2019-03-09T11:22:55-08:00 Avoid multi-line `emph` in LaTeX backend `markupWarning` often processes inputs which span across paragraphs. Unfortunately, LaTeX's `emph` is not made to handle this (and will crash). Fixes haskell/haddock#936. - - - - - d22dc2c9 by Alec Theriault at 2019-03-09T11:22:55-08:00 Many LaTeX backend fixes After this commit, we can run with `--latex` on all boot libraries without crashing (although the generated LaTeX still fails to compile in a handful of larger packages like `ghc` and `base`). * Add newlines after all block elements in LaTeX. This is important to prevent the final output from being more an more indented. See the `latext-test/src/Example` test case for a sample of this. * Support associated types in class declarations (but not yet defaults) * Several small issues for producing compiling LaTeX; - avoid empy `\haddockbeginargs` lists (ex: `type family Any`) - properly escape identifiers depending on context (ex: `Int#`) - add `vbox` around `itemize`/`enumerate` (so they can be in tables) * Several spacing fixes: - limit the width of `Pretty`-arranged monospaced code - cut out extra space characters in export lists - only escape spaces if there are _multiple_ spaces - allow type signatures to be multiline (even without docs) * Remove uninteresting and repetitive `main.tex`/`haddock.sty` files from `latex-test` test reference output. Fixes haskell/haddock#935, haskell/haddock#929 (LaTeX docs for `text` build & compile) Fixes haskell/haddock#727, haskell/haddock#930 (I think both are really about type families...) - - - - - 0e6cee00 by Alec Theriault at 2019-03-29T12:11:56-07:00 Remove workaround for now-fixed Clang CPP bug (#1028) Before LLVM 6.0.1 (or 10.0 on Apple LLVM), there was a bug where lines that started with an octothorpe but turned out not to lex like pragmas would have an extra line added after them. Since this bug has been fixed upstream and that it doesn't have dire consequences anyways, the workaround is not really worth it anymore - we can just tell people to update their clang version (or re-structure their pragma code). - - - - - ce05434d by Alan Zimmerman at 2019-03-29T12:12:11-07:00 Matching changes in GHC for haskell/haddock#16236 (cherry picked from commit 3ee6526d4ae7bf4deb7cd1caf24b3d7355573576) - - - - - d85766b2 by Ben Gamari at 2019-03-29T12:14:04-07:00 Bump GHC to 8.8 - - - - - 5a82cbaf by Oleg Grenrus at 2019-05-05T13:02:00-07:00 Redo ParseModuleHeader - - - - - b9033348 by Oleg Grenrus at 2019-05-05T13:02:00-07:00 Comment C, which clarifies why e.g. ReadP is not enough - - - - - bb55c8f4 by Alec Theriault at 2019-05-13T16:10:07-07:00 Remove outdated `.ghci` files and `scripts` The `.ghci` files are actively annoying when trying to `cabal v2-repl`. As for the `scripts`, the distribution workflow is completely different. - - - - - 5ee244dc by Alec Theriault at 2019-05-13T16:10:07-07:00 Remove obsolete arcanist files + STYLE Now that GHC is hosted on Gitlab, the arcanist files don't make sense anymore. The STYLE file contains nothing more than a dead link too. - - - - - d07c1928 by Oleg Grenrus at 2019-05-13T16:41:43-07:00 Redo ParseModuleHeader - - - - - 492762d2 by Oleg Grenrus at 2019-05-13T16:41:43-07:00 Comment C, which clarifies why e.g. ReadP is not enough - - - - - af2ac773 by Ryan Scott at 2019-05-14T17:22:13-04:00 Changes for haskell/haddock#16110/#16356 - - - - - 6820ed0d by Alec Theriault at 2019-05-17T08:51:27-07:00 Unbreak haskell/haddock#1004 test case `fail` is no longer part of `Monad`. - - - - - 6bf7be98 by Alec Theriault at 2019-05-17T08:51:27-07:00 Fix haskell/haddock#1063 with better parenthesization logic for contexts The only other change in html/hoogle/hyperlinker output for the boot libraries that this caused is a fix to some Hoogle output for implicit params. ``` $ diff -r _build/docs/ old_docs diff -r _build/docs/html/libraries/base/base.txt old_docs/html/libraries/base/base.txt 13296c13296 < assertError :: (?callStack :: CallStack) => Bool -> a -> a --- > assertError :: ?callStack :: CallStack => Bool -> a -> a ``` - - - - - b5716b61 by Ryan Scott at 2019-05-22T17:24:32-04:00 Match changes with haskell/haddock#14332 - - - - - c115abf6 by Alec Theriault at 2019-05-26T16:01:58-04:00 Remove Haddock's dependency on `Cabal` At this point, Haddock depended on Cabal-the-library solely for a verbosity parser (which misleadingly accepts all sorts of verbosity options that Haddock never uses). Now, the only dependency on Cabal is for `haddock-test` (which uses Cabal to locate the Haddock interface files of a couple boot libraries). - - - - - e5b2d4a3 by Alec Theriault at 2019-05-26T16:16:25-04:00 Regression test: promoted lists in associated types When possible, associated types with promoted lists should use the promoted list literal syntax (instead of repeated applications of ': and '[]). This was fixed in 2122de5473fd5b434af690ff9ccb1a2e58491f8c. Closes haskell/haddock#466, - - - - - cc5ad5d3 by Alec Theriault at 2019-05-26T17:55:54-04:00 Merge branch 'ghc-8.6' into ghc-8.8 - - - - - 4b3301a6 by Alec Theriault at 2019-05-26T17:57:52-04:00 Release haddock-2.23, haddock-library-1.8.0 Tentatively adjust bounds and changelogs for the release to be bundled with GHC 8.8.1. - - - - - 69c7cfce by Matthew Pickering at 2019-05-30T10:54:27+01:00 Update hyperlinker tests for new types in .hie files - - - - - 29b7e738 by Zubin Duggal at 2019-05-30T10:57:51+01:00 update for new way to store hiefile headers - - - - - aeca5d5f by Zubin Duggal at 2019-06-04T18:57:42-04:00 update for new way to store hiefile headers - - - - - ba2ca518 by Ben Gamari at 2019-06-07T23:11:14+00:00 Update test output for introduction of Safe-Inferred - - - - - 3a975a6c by Ryan Scott at 2019-07-03T12:06:27-04:00 Changes for haskell/haddock#15247 - - - - - 0df46555 by Zubin Duggal at 2019-07-22T10:52:50+01:00 Fix haddockHypsrcTest - - - - - 2688686b by Sylvain Henry at 2019-09-12T23:19:39+02:00 Fix for GHC module renaming - - - - - 9ec0f3fc by Alec Theriault at 2019-09-20T03:21:00-04:00 Fix Travis CI, loosen .cabal bounds (#1089) Tentatively for the 2.23 release: * updated Travis CI to work again * tweaked bounds in the `.cabal` files * adjusted `extra-source-files` to properly identify test files - - - - - ca559beb by Matthías Páll Gissurarson at 2019-09-28T12:14:40-04:00 Small change in to facilitate extended typed-holes (#1090) This change has no functional effect on haddock itself, it just changes one pattern to use `_ (` rather than `_(`, so that we may use `_(` as a token for extended typed-holes later. - - - - - 02e28976 by Vladislav Zavialov at 2019-09-28T12:17:45-04:00 Remove spaces around @-patterns (#1093) This is needed to compile `haddock` when [GHC Proposal haskell/haddock#229](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0229-whitespace-bang-patterns.rst) is implemented. - - - - - 83cbbf55 by Alexis King at 2019-09-30T21:12:42-04:00 Fix the ignore-exports option (#1082) The `ignore-exports` option has been broken since haskell/haddock#688, as mentioned in https://github.com/haskell/haddock/pull/766#issue-172505043. This PR fixes it. - - - - - e127e0ab by Ben Gamari at 2019-10-06T15:12:06-04:00 Fix a few haddock issues - - - - - 3a0f5c89 by Zubin Duggal at 2019-10-07T17:56:13-04:00 Fix crash when there are no srcspans in the file due to CPP - - - - - 339c5ff8 by Alec Theriault at 2019-10-07T17:56:13-04:00 Prefer un-hyperlinked sources to no sources It is possible to fail to extract an HIE ast. This is however not a reason to produce _no_ output - we should still make a colorized HTML page. - - - - - d47ef478 by Alec Theriault at 2019-10-07T17:56:13-04:00 Add a regression test for haskell/haddock#1091 Previously, this input would crash Haddock. - - - - - ed7c8b0f by Alec Theriault at 2019-10-07T20:56:48-04:00 Add Hyperlinker test cases for TH-related stuff Hopefully this will guard against regressions around quasiquotes, TH quotes, and TH splices. - - - - - d00436ab by Andreas Klebinger at 2019-10-21T15:53:03+02:00 Refactor for withTiming changes. - - - - - 4230e712 by Ben Gamari at 2019-10-22T09:36:37-04:00 Merge pull request haskell/haddock#1101 from AndreasPK/withTimingRefactor Refactor for withTiming changes. - - - - - d155c5f4 by Ryan Scott at 2019-10-23T10:37:17-04:00 Reify oversaturated data family instances correctly (#1103) This fixes haskell/haddock#1103 by adapting the corresponding patch for GHC (see https://gitlab.haskell.org/ghc/ghc/issues/17296 and https://gitlab.haskell.org/ghc/ghc/merge_requests/1877). - - - - - 331a5adf by Sebastian Graf at 2019-10-25T17:14:40+02:00 Refactor for OutputableBndrId changes - - - - - 48a490e0 by Ben Gamari at 2019-10-27T10:16:16-04:00 Merge pull request haskell/haddock#1105 from sgraf812/wip/flexible-outputable Refactor for OutputableBndrId changes - - - - - f62a7dfc by Sebastian Graf at 2019-11-01T11:54:16+00:00 Define `XRec` for location information and get rid of `HasSrcSpan` In https://gitlab.haskell.org/ghc/ghc/merge_requests/1970 I propose a simpler way to encode location information into the GHC and Haddock AST while incurring no cost for e.g. TH which doesn't need location information. These are just changes that have to happen in lock step. - - - - - d9b242ed by Ryan Scott at 2019-11-03T13:20:03-05:00 Changes from haskell/haddock#14579 We now have a top-level `tyConAppNeedsKindSig` function, which means that we can delete lots of code in `Convert`. (cherry picked from commit cfd682c5fd03b099a3d78c44f9279faf56a0ac70) - - - - - dfd42406 by Sebastian Graf at 2019-11-04T07:02:14-05:00 Define `XRec` for location information and get rid of `HasSrcSpan` In https://gitlab.haskell.org/ghc/ghc/merge_requests/1970 I propose a simpler way to encode location information into the GHC and Haddock AST while incurring no cost for e.g. TH which doesn't need location information. These are just changes that have to happen in lock step. - - - - - 0b15be7c by Ben Gamari at 2019-11-09T13:21:33-05:00 Import isRuntimeRepVar from Type rather than TyCoRep isRuntimeRepVar is not longer exported from TyCoRep due to ghc#17441. - - - - - 091f7283 by Ben Gamari at 2019-11-10T12:47:06-05:00 Bump to GHC 8.10 - - - - - e88c71f2 by Ben Gamari at 2019-11-14T00:22:24-05:00 Merge pull request haskell/haddock#1110 from haskell/wip/T17441 Import isRuntimeRepVar from Type rather than TyCoRep - - - - - 4e0bbc17 by Ben Gamari at 2019-11-14T00:22:45-05:00 Version bumps for GHC 8.11 - - - - - 0e85ceb4 by Ben Gamari at 2019-11-15T11:59:45-05:00 Bump to GHC 8.10 - - - - - 00d6d68b by Ben Gamari at 2019-11-16T18:35:58-05:00 Bump ghc version to 8.11 - - - - - dde1fc3f by Ben Gamari at 2019-11-16T20:40:37-05:00 Drop support for base 4.13 - - - - - f52e331d by Vladislav Zavialov at 2019-11-24T13:02:28+03:00 Update Hyperlinker.Parser.classify to use ITdollar - - - - - 1ad96198 by Vladislav Zavialov at 2019-11-28T16:12:33+03:00 Remove HasSrcSpan (#17494) - - - - - 651afd70 by Herbert Valerio Riedel at 2019-12-08T12:08:16+01:00 Document error-prone conditional definition of instances This can easily trip up people if one isn't aware of it. Usually it's better to avoid this kind of conditionality especially for typeclasses for which there's an compat-package as conditional instances like these tend to fragment the ecosystem into those packages that go the extra mile to provide backward compat via those compat-packages and those that fail to do so. - - - - - b521af56 by Herbert Valerio Riedel at 2019-12-08T12:09:54+01:00 Fix build-failure regression for base < 4.7 The `$>` operator definition is available only since base-4.7 which unfortunately wasn't caught before release to Hackage (but has been fixed up by a metadata-revision) This commit introduces a `CompatPrelude` module which allows to reduce the amount of CPP by ousting it to a central location, i.e. the new `CompatPrelude` module. This pattern also tends to reduce the tricks needed to silence unused import warnings. Addresses haskell/haddock#1119 - - - - - 556c375d by Sylvain Henry at 2020-01-02T19:01:55+01:00 Fix after Iface modules renaming - - - - - bd6c53e5 by Sylvain Henry at 2020-01-07T00:48:48+01:00 hsyl20-modules-renamer - - - - - fb23713b by Ryan Scott at 2020-01-08T07:41:13-05:00 Changes for GHC#17608 See https://gitlab.haskell.org/ghc/ghc/merge_requests/2372 - - - - - 4a4dd382 by Ryan Scott at 2020-01-25T08:08:26-05:00 Changes for GHC#17566 See https://gitlab.haskell.org/ghc/ghc/merge_requests/2469 - - - - - e782a44d by Sylvain Henry at 2020-01-26T02:12:37+01:00 Rename PackageConfig into UnitInfo - - - - - ba3c9f05 by Sylvain Henry at 2020-01-26T02:12:37+01:00 Rename lookupPackage - - - - - ab37f9b3 by Ben Gamari at 2020-01-29T13:00:44-05:00 Merge pull request haskell/haddock#1125 from haskell/wip/T17566-take-two Changes for GHC#17566 - - - - - 3ebd5ae0 by Ryan Scott at 2020-01-31T05:56:50-05:00 Merge branch 'wip-hsyl20-package-refactor' into ghc-head - - - - - 602a747e by Richard Eisenberg at 2020-02-04T09:05:43+00:00 Echo GHC's removal of PlaceHolder module This goes with GHC's !2083. - - - - - ccfe5679 by Sylvain Henry at 2020-02-10T10:13:56+01:00 Module hierarchy: runtime (cf haskell/haddock#13009) - - - - - 554914ce by Cale Gibbard at 2020-02-10T16:10:39-05:00 Fix build of haddock in stage1 We have to use the correct version of the GHC API, but the version of the compiler itself doesn't matter. - - - - - 5b6fa2a7 by John Ericson at 2020-02-10T16:18:07-05:00 Noramlize `tested-with` fields in cabal files - - - - - e6eb3ebe by Vladislav Zavialov at 2020-02-16T13:25:26+03:00 No MonadFail/Alternative for P - - - - - 90e181f7 by Ben Gamari at 2020-02-18T14:13:47-05:00 Merge pull request haskell/haddock#1129 from obsidiansystems/wip/fix-stage1-build Fix build of haddock in stage1 - - - - - 93b64636 by Sylvain Henry at 2020-02-19T11:20:27+01:00 Modules: Driver (#13009) - - - - - da4f6c7b by Vladislav Zavialov at 2020-02-22T15:33:02+03:00 Use RealSrcSpan in InstMap - - - - - 479b1b50 by Ben Gamari at 2020-02-23T10:28:13-05:00 Merge remote-tracking branch 'upstream/ghc-head' into HEAD - - - - - 55ecacf0 by Sylvain Henry at 2020-02-25T15:18:27+01:00 Modules: Core (#13009) - - - - - 60867b3b by Vladislav Zavialov at 2020-02-28T15:53:52+03:00 Ignore the BufLoc/BufSpan added in GHC's !2516 - - - - - 1e5506d3 by Sylvain Henry at 2020-03-02T12:32:43+01:00 Modules: Core (#13009) - - - - - 6fb53177 by Richard Eisenberg at 2020-03-09T14:49:40+00:00 Changes in GHC's !1913. - - - - - 30b792ea by Ben Gamari at 2020-03-16T12:45:02-04:00 Merge pull request haskell/haddock#1130 from hsyl20/wip/hsyl20-modules-core2 Modules: Core (#13009) - - - - - cd761ffa by Sylvain Henry at 2020-03-18T15:24:00+01:00 Modules: Types - - - - - b6646486 by Ben Gamari at 2020-03-18T14:42:43-04:00 Merge pull request haskell/haddock#1133 from hsyl20/wip/hsyl20/modules/types Modules: Types - - - - - 9325d734 by Kleidukos at 2020-03-19T12:38:31-04:00 Replace the 'caption' class so that the collapsible sections are shown - - - - - 5e2bb555 by Kleidukos at 2020-03-19T12:38:31-04:00 Force ghc-8.8.3 - - - - - c6fcd0aa by Kleidukos at 2020-03-19T12:38:31-04:00 Update test fixtures - - - - - 5c849cb1 by Sylvain Henry at 2020-03-20T09:34:39+01:00 Modules: Types - - - - - 7f439155 by Alec Theriault at 2020-03-20T20:17:01-04:00 Merge branch 'ghc-8.8' into ghc-8.10 - - - - - b7904e5c by Alina Banerjee at 2020-03-20T20:24:17-04:00 Update parsing to strip whitespace from table cells (#1074) * Update parsing to strip leading & trailing whitespace from table cells * Update fixture data to disallow whitespaces at both ends in table cells * Add test case for whitespaces stripped from both ends of table cells * Update table reference test data for html tests - - - - - b9d60a59 by Alec Theriault at 2020-03-22T11:46:42-04:00 Clean up warnings * unused imports * imports of `Data.List` without import lists * missing `CompatPrelude` file in `.cabal` - - - - - 0c317dbe by Alec Theriault at 2020-03-22T18:46:54-04:00 Fix NPM security warnings This was done by calling `npm audit fix`. Note that the security issues seem to have been entirely in the build dependencies, since the output JS has not changed. - - - - - 6e306242 by Alec Theriault at 2020-03-22T20:10:52-04:00 Tentative 2.24 release Adjusted changelogs and versions in `.cabal` files in preparation for the upcoming release bundled with GHC 8.10. - - - - - 1bfb4645 by Ben Gamari at 2020-03-23T16:40:54-04:00 Merge commit '3c2944c037263b426c4fe60a3424c27b852ea71c' into HEAD More changes from the GHC types module refactoring. - - - - - be8c6f3d by Alec Theriault at 2020-03-26T20:10:53-04:00 Update `.travis.yml` to work with GHC 8.10.1 * Regenerated the Travis file with `haskell-ci` * Beef up `.cabal` files with more `tested-with` information - - - - - b025a9c6 by Alec Theriault at 2020-03-26T20:10:53-04:00 Update README Removed some out of date links/info, added some more useful links. * badge to Hackage * update old trac link * `ghc-head` => `ghc-8.10` * `cabal new-*` is now `cabal v2-*` and it should Just Work * `--test-option='--accept'` is the way to accept testsuite output - - - - - 564d889a by Alec Theriault at 2020-03-27T20:34:33-04:00 Fix crash in `haddock-library` on unicode space Our quickcheck tests for `haddock-library` stumbled across an edge case input that was causing Haddock to crash: it was a unicode space character. The root cause of the crash is that we were implicitly assuming that if a space character was not " \t\f\v\r", it would have to be "\n". We fix this by instead defining horizontal space as: any space character that is not '\n'. Fixes haskell/haddock#1142 - - - - - 2d360ba1 by Alec Theriault at 2020-03-27T21:57:32-04:00 Disallow qualified uses of reserved identifiers This a GHC bug (https://gitlab.haskell.org/ghc/ghc/issues/14109) too, but it is a relatively easy fix in Haddock. Note that the fix must live in `haddock-api` instead of `haddock-library` because we can only really decide if an identifier is a reserved one by asking the GHC lexer. Fixes haskell/haddock#952 - - - - - 47ae22ed by Alec Theriault at 2020-03-28T13:36:25-04:00 Remove unused `Haddock.Utils` functions * removed functions in `Haddock.Utils` that were not used anywhere (or exported from the `haddock-api` package) * moved GHC-specific utils from `Haddock.Utils` to `Haddock.GhcUtils` - - - - - c0291245 by Alec Theriault at 2020-03-28T13:36:25-04:00 Use TTG empty extensions to remove some `error`'s None of these error cases should ever have been reachable, so this is just a matter of leveraging the type system to assert this. * Use the `NoExtCon` and `noExtCon` to handle case matches for no extension constructors, instead of throwing an `error`. * Use the extension field of `HsSpliceTy` to ensure that this variant of `HsType` cannot exist in an `HsType DocNameI`. - - - - - 0aff8dc4 by Alec Theriault at 2020-03-28T13:36:25-04:00 Use `unLoc`/`noLoc` from GHC instead of `unL`/`reL` * `unL` is already defined by GHC as `unLoc` * `reL` is already defined by GHC as `noLoc` (in a safer way too!) * Condense `setOutputDir` and add a about exporting from GHC Fixes haskell/haddock#978 - - - - - bf6f2fb7 by Alec Theriault at 2020-03-28T13:36:25-04:00 Cleanup up GHC flags in `.cabal` files * enable more useful warning flags in `haddock-api`, handle the new warnings generated * remove `-fwarn-tabs` (now we'd use `-Wtabs`, but this has been in `-Wall` for a while now) - - - - - c576fbf1 by Alec Theriault at 2020-03-28T13:36:25-04:00 `haddock-library` document header level Document the fact the header level is going to always be between 1 and 6 inclusive. Along the way, I also optimized the parsing code a bit. - - - - - 71bce0ee by Alec Theriault at 2020-03-28T14:26:27-04:00 Disallow links in section headers This is quite straightforward to implement, since we already had a function `docToHtmlNoAnchors` (which we used to generate the link in the sidebar "Contents"). This breaks test `Bug387`, but that test case has aged badly: we now automatically generate anchors for all headings, so manually adding an anchor in a section makes no sense. Nested anchors are, as pointed out in haskell/haddock#1054, disallowed by the HTML standard. Fixes haskell/haddock#1054 - - - - - b461b0ed by Sylvain Henry at 2020-03-30T10:34:23+02:00 Modules: type checker - - - - - cd8cd1ee by Ben Gamari at 2020-03-31T12:45:02-04:00 Merge pull request haskell/haddock#1152 from hsyl20/wip/hsyl20/modules/tc Module renaming - - - - - 5e8f8ea7 by Felix Yan at 2020-04-01T17:58:06-07:00 Allow QuickCheck 2.14 Builds fine and all tests pass. - - - - - dc6b1633 by Sylvain Henry at 2020-04-05T16:43:44+02:00 Module renaming: amend previous patch - - - - - eee2f4ae by Ryan Scott at 2020-04-05T09:04:43-07:00 Fix haskell/haddock#1050 by filtering out invisible AppTy arguments This makes the `synifyType` case for `AppTy` more intelligent by taking into consideration the visibilities of each `AppTy` argument and filtering out any invisible arguments, as they aren't intended to be displayed in the source code. (See haskell/haddock#1050 for an example of what can happen if you fail to filter these out.) Along the way, I noticed that a special `synifyType` case for `AppTy t1 (CoercionTy {})` could be consolidated with the case below it, so I took the opportunity to tidy this up. - - - - - 23eb99e8 by Ben Gamari at 2020-04-07T11:19:58-04:00 Merge pull request haskell/haddock#1154 from hsyl20/wip/hsyl20/modules/tc Module renaming: amend previous patch - - - - - 072d994d by Ryan Scott at 2020-04-07T19:32:47-04:00 Make NoExtCon fields strict These changes are a part of a fix for [GHC#17992](https://gitlab.haskell.org/ghc/ghc/issues/17992). - - - - - d8ebf6c8 by Ignat Insarov at 2020-04-09T21:15:01-04:00 Recode Doc to Json. (#1159) * Recode Doc to Json. * More descriptive field labels. - - - - - 52df4b4e by Sylvain Henry at 2020-04-10T12:39:18+02:00 Module renaming - - - - - d9ab8ec8 by Cale Gibbard at 2020-04-14T11:43:34-04:00 Add instance of XCollectPat for DocNameI - - - - - 323d221d by Cale Gibbard at 2020-04-14T11:43:34-04:00 Rename XCollectPat -> CollectPass - - - - - 2df80867 by Alec Theriault at 2020-04-15T07:30:51-07:00 Prune docstrings that are never rendered When first creating a Haddock interface, trim `ifaceDocMap` and `ifaceArgMap` to not include docstrings that can never appear in the final output. Besides checking with GHC which names are exported, we also need to keep all the docs attached to instance declarations (it is much tougher to detect when an instance is fully private). This change means: * slightly smaller interface files (7% reduction on boot libs) * slightly less work to do processing docstrings that aren't used * no warnings in Haddock's output about private docstrings (see haskell/haddock#1070) I've tested manually that this does not affect any of the boot library generated docs (the only change in output was some small re-ordering in a handful of instance lists). This should mean no docstrings have been incorrectly dropped. - - - - - f49c90cc by Alec Theriault at 2020-04-15T07:30:51-07:00 Don't warn about missing links in miminal sigs When renaming the Haddock interface, never emit warnings when renaming a minimal signature. Also added some documention around `renameInterface`. Minimal signatures intentionally include references to potentially un-exported methods (see the discussion in haskell/haddock#330), so it is expected that they will not always have a link destination. On the principle that warnings should always be resolvable, this shouldn't produce a warning. See haskell/haddock#1070. - - - - - a9eda64d by Ben Gamari at 2020-04-17T09:27:35-04:00 Merge pull request haskell/haddock#1160 from hsyl20/wip/hsyl20/modules/systools Module renaming - - - - - f40d7879 by Cale Gibbard at 2020-04-20T11:30:38-04:00 Merge remote-tracking branch 'origin/ghc-head' into wip/ttg-con-pat - - - - - a50e7753 by Ben Gamari at 2020-04-20T11:36:10-04:00 Merge pull request haskell/haddock#1165 from obsidiansystems/wip/ttg-con-pat Trees that Grow refactor (GHC !2553) - - - - - 6a24795c by Alec Theriault at 2020-04-21T08:06:45-07:00 Fallback to `hiDecl` when `extractDecl` fails Sometimes, the declaration being exported is a subdecl (for instance, a record accessor getting exported at the top-level). For these cases, Haddock has to find a way to produce some synthetic sensible top-level declaration. This is done with `extractDecl`. As is shown by haskell/haddock#1067, this is sometimes impossible to do just at a syntactic level (for instance when the subdecl is re-exported). In these cases, the only sensible thing to do is to try to reify a declaration based on a GHC `TyThing` via `hiDecl`. - - - - - eee1a8b7 by Sylvain Henry at 2020-04-24T15:46:05+02:00 Module structure - - - - - 50b9259c by Iñaki at 2020-04-25T18:38:11-04:00 Add support for custom section anchors (#1179) This allows to have stable anchors for groups, even if the set of groups in the documentation is altered. The syntax for setting the anchor of a group is -- * Group name #desiredAnchor# Which will produce an html anchor of the form '#g:desiredAnchor' Co-authored-by: Iñaki García Etxebarria <git at inaki.blueleaf.cc> - - - - - 4003c97a by Ben Gamari at 2020-04-26T09:35:15-04:00 Merge pull request haskell/haddock#1166 from hsyl20/wip/hsyl20/modules/utils Module structure - - - - - 5206ab60 by Sylvain Henry at 2020-04-27T16:47:39+02:00 Renamed UnitInfo fields - - - - - c32c333b by Sylvain Henry at 2020-04-27T17:32:58+02:00 UnitId has been renamed into Unit - - - - - 3e87db64 by Sylvain Henry at 2020-04-27T17:36:00+02:00 Fix for GHC.Unit.* modules - - - - - ae3323a7 by Ben Gamari at 2020-04-29T12:36:37-04:00 Merge pull request haskell/haddock#1183 from hsyl20/wip/hsyl20/unitid Refactoring of Unit code - - - - - b105564a by Artem Pelenitsyn at 2020-05-03T08:14:10+01:00 add dependency on exceptions because GHC.Exception was boiled down (ghc haskell/haddock#18075) - - - - - 9857eff3 by Zubin Duggal at 2020-05-04T18:48:25+01:00 Atomic update of NameCache in readHieFile - - - - - 86bbb226 by Sylvain Henry at 2020-05-14T16:36:27+02:00 Fix after Config module renaming - - - - - a4bbdbc2 by Gert-Jan Bottu at 2020-05-15T22:09:44+02:00 Explicit Specificity Support for Haddock - - - - - 46199daf by Ben Gamari at 2020-05-19T09:59:56-04:00 Merge pull request haskell/haddock#1192 from hsyl20/hsyl20/modules-config Fix after Config module renaming - - - - - f9a9d2ba by Gert-Jan Bottu at 2020-05-20T16:48:38-04:00 Explicit Specificity Support for Haddock - - - - - 55c5b7ea by Ben Gamari at 2020-05-21T00:32:02-04:00 Merge commit 'a8d7e66da4dcc3b242103271875261604be42d6e' into ghc-head - - - - - a566557f by Cale Gibbard at 2020-05-21T16:02:06-04:00 isBootSummary now produces a result of type IsBootInterface - - - - - ea52f905 by Zubin Duggal at 2020-05-24T17:55:48+01:00 update for hiefile-typeclass-info - - - - - 49ba7a67 by Willem Van Onsem at 2020-05-25T12:23:01-04:00 Use floor over round to calculate the percentage (#1195) If we compile documentation where only a small fraction is undocumented, it is misleading to see 100% coverage - 99% is more intuitive. Fixes haskell/haddock#1194 - - - - - c025ebf1 by Ben Gamari at 2020-05-29T14:32:42-04:00 Merge pull request haskell/haddock#1185 from obsidiansystems/boot-disambig isBootSummary now produces a result of type IsBootInterface - - - - - 74ab9415 by Ben Gamari at 2020-05-29T20:23:39-04:00 haddock: Bounds bumps for GHC 8.12 - - - - - b40be944 by Ben Gamari at 2020-06-03T17:02:31-04:00 testsuite: Update expected output for simplified subsumption - - - - - 624be71c by Ryan Scott at 2020-06-05T12:43:23-04:00 Changes for GHC#18191 See https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3337. - - - - - fbd8f7ce by Sylvain Henry at 2020-06-08T15:31:47+02:00 Fix after unit refactoring - - - - - 743fda4d by Ben Gamari at 2020-06-09T12:09:58-04:00 Merge pull request haskell/haddock#1202 from hsyl20/wip/hsyl20/unitid-ii Fix after unit refactoring - - - - - d07a06a9 by Ryan Scott at 2020-06-13T07:16:55-04:00 Use HsForAllTelescope (GHC#18235) - - - - - 389bb60d by Ben Gamari at 2020-06-13T15:30:52-04:00 haddock: Bounds bumps for GHC 8.12 - - - - - 7a377f5f by Ben Gamari at 2020-06-17T14:53:16-04:00 Merge pull request haskell/haddock#1199 from bgamari/wip/ghc-8.12 haddock: Bounds bumps for GHC 8.12 - - - - - 9fd9e586 by Krzysztof Gogolewski at 2020-06-17T16:09:07-04:00 Adapt Haddock to LinearTypes See ghc/ghc!852. - - - - - 46fe7636 by Ben Gamari at 2020-06-18T14:20:02-04:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-head - - - - - 35a3c9e2 by Zubin Duggal at 2020-06-21T21:19:18+05:30 Use functions exported from HsToCore - - - - - 8abe3928 by Ben Gamari at 2020-06-24T13:53:39-04:00 Merge pull request haskell/haddock#1204 from wz1000/wip/haddock-hstocore Use functions exported from GHC.HsToCore.Docs - - - - - 22f2c937 by Matthías Páll Gissurarson at 2020-06-26T19:07:03+02:00 Adapt Haddock for QualifiedDo - - - - - 3f6208d7 by Vladislav Zavialov at 2020-06-28T14:28:16+03:00 Handle LexicalNegation's ITprefixminus - - - - - 03a19f41 by Sylvain Henry at 2020-07-02T09:37:38+02:00 Rename hsctarget into backend - - - - - ea17ff23 by Andreas Klebinger at 2020-07-02T17:44:18+02:00 Update for UniqFM changes. - - - - - 9872f2f3 by Ben Gamari at 2020-07-09T10:39:19-04:00 Merge pull request haskell/haddock#1209 from AndreasPK/wip/typed_uniqfm Update for UniqFM changes. - - - - - 68f7b668 by Krzysztof Gogolewski at 2020-07-12T18:16:57+02:00 Sync with GHC removing {-# CORE #-} pragma See ghc ticket haskell/haddock#18048 - - - - - eb372681 by Sylvain Henry at 2020-07-20T11:41:30+02:00 Rename hscTarget into backend - - - - - fb7f78bf by Ben Gamari at 2020-07-21T12:15:25-04:00 Merge pull request haskell/haddock#1214 from hsyl20/wip/hsyl20/hadrian/ncg Rename hscTarget into backend - - - - - 1e8f5b56 by Ben Gamari at 2020-07-23T09:11:50-04:00 Merge commit '904dce0cafe0a241dd3ef355775db47fc12f434d' into ghc-head - - - - - d8fd1775 by Zubin Duggal at 2020-07-23T18:46:40+05:30 Update for modular ping pong - - - - - 8416f872 by Ben Gamari at 2020-07-23T09:35:03-04:00 Merge pull request haskell/haddock#1200 from wz1000/wip/wz1000-modular-ping-pong Modular ping pong - - - - - a24a8577 by Ben Gamari at 2020-07-28T15:23:36-04:00 Bump GHC version to 9.0 - - - - - 6a51c9dd by Sylvain Henry at 2020-08-05T18:47:05+02:00 Fix after Outputable refactoring - - - - - c05e1c99 by Ben Gamari at 2020-08-10T14:41:41-04:00 Merge pull request haskell/haddock#1223 from hsyl20/wip/hsyl20/dynflags/exception Fix after Outputable refactoring - - - - - d964f15b by Sylvain Henry at 2020-08-12T11:58:49+02:00 Fix after HomeUnit - - - - - 8e6d5b23 by Ben Gamari at 2020-08-12T14:25:30-04:00 Merge pull request haskell/haddock#1225 from hsyl20/wip/hsyl20/plugins/homeunit Fix after HomeUnit - - - - - 8c7880fe by Sylvain Henry at 2020-08-17T14:13:29+02:00 Remove Ord FastString instance - - - - - 8ea410db by Alex Biehl at 2020-08-19T10:56:32+02:00 Another round of `npm audit fix` (#1228) This should shut down the warnings on Github. Note that the security issues seem to have been entirely in the build dependencies, since the output JS has not changed. Last NPM dependency audit happend in d576b2327e2bc117f912fe0a9d595e9ae62614e0 Co-authored-by: Alex Biehl <alex.biehl at target.com> - - - - - 7af6e2a8 by Ben Gamari at 2020-08-31T13:59:34-04:00 Merge pull request haskell/haddock#1226 from hsyl20/wip/hsyl20/fs_ord Remove Ord FastString instance - - - - - ffbc8702 by Alan Zimmerman at 2020-09-07T21:47:41+01:00 Match GHC for haskell/haddock#18639, remove GENERATED pragma - - - - - a93f1268 by Alan Zimmerman at 2020-09-07T23:11:38+01:00 Merge pull request haskell/haddock#1232 from haskell/wip/T18639-remove-generated-pragma, Match GHC for haskell/haddock#18639, remove GENERATED pragma - - - - - 1f605d50 by Ben Gamari at 2020-09-14T18:30:01-04:00 Bump GHC version to 9.1 - - - - - 6599df62 by Vladislav Zavialov at 2020-09-18T14:05:15+03:00 Bump base upper bound to 4.16 - - - - - a01b3c43 by Ben Gamari at 2020-09-22T15:41:48-04:00 Update hypsrc-test for QuickLook This appears to be a spurious change. - - - - - e9cc6cac by Vladislav Zavialov at 2020-09-26T21:00:12+03:00 Updates for the new linear types syntax: a %p -> b - - - - - 30e3ca7c by Sylvain Henry at 2020-09-29T11:18:32-04:00 Update for parser (#1234) - - - - - b172f3e3 by Vladislav Zavialov at 2020-09-30T01:01:30+03:00 Updates for the new linear types syntax: a %p -> b - - - - - 0b9c08d3 by Sylvain Henry at 2020-09-30T11:02:33+02:00 Adapt to GHC parser changes - - - - - b9540b7a by Sylvain Henry at 2020-10-12T09:13:38-04:00 Don't pass the HomeUnitId (#1239) - - - - - 34762e80 by HaskellMouse at 2020-10-13T12:58:04+03:00 Changed tests due to unification of `Nat` and `Natural` in the follwing merge request: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3583 - - - - - 256f86b6 by Vladislav Zavialov at 2020-10-15T10:48:03+03:00 Add whitespace in: map ($ v) - - - - - 4a3f711b by Alan Zimmerman at 2020-10-19T08:57:27+01:00 Match GHC, adding IsUnicodeSyntax field to HsFunTy and HsScaled - - - - - 072cdd21 by Alan Zimmerman at 2020-10-21T14:48:28-04:00 Match GHC, adding IsUnicodeSyntax field to HsFunTy and HsScaled (cherry picked from commit a7d1d8e034d25612d5d08ed8fdbf6f472aded4a1) - - - - - 9e09a445 by Alan Zimmerman at 2020-10-21T23:53:34-04:00 Match GHC, adding IsUnicodeSyntax field to HsFunTy and HsScaled (cherry picked from commit a7d1d8e034d25612d5d08ed8fdbf6f472aded4a1) - - - - - 636d7de3 by Sylvain Henry at 2020-10-26T14:31:54-04:00 GHC.Driver.Types refactoring (#1242) - - - - - a597f000 by Ryan Scott at 2020-10-29T04:18:05-04:00 Adapt to the removal of Hs{Boxed,Constraint}Tuple See ghc/ghc!4097 and GHC#18723. - - - - - b96660fb by Ryan Scott at 2020-10-30T04:53:05-04:00 Adapt to HsConDecl{H98,GADT}Details split Needed for GHC#18844. - - - - - c287d82c by Ryan Scott at 2020-10-30T19:35:59-04:00 Adapt to HsOuterTyVarBndrs These changes accompany ghc/ghc!4107, which aims to be a fix for haskell/haddock#16762. - - - - - a34c31a1 by Ryan Scott at 2020-11-13T13:38:34-05:00 Adapt to splitPiTysInvisible being renamed to splitInvisPiTys This is a part of !4434, a fix for GHC#18939. - - - - - 66ea459d by Sylvain Henry at 2020-11-16T10:59:30+01:00 Fix after Plugins moved into HscEnv - - - - - 508556d8 by Ben Gamari at 2020-11-18T15:47:40-05:00 Merge pull request haskell/haddock#1253 from hsyl20/wip/hsyl20/plugins/hscenv Fix after Plugins moved into HscEnv - - - - - 620fec1a by Andreas Klebinger at 2020-11-24T20:51:59+01:00 Update for changes in GHC's Pretty - - - - - 01cc13ab by Richard Eisenberg at 2020-11-25T23:18:35-05:00 Avoid GHC#18932. - - - - - 8d29ba21 by Cale Gibbard at 2020-11-25T23:18:35-05:00 Add type arguments to PrefixCon - - - - - 414d5f87 by Sylvain Henry at 2020-11-30T17:06:04+01:00 DynFlags's unit fields moved to HscEnv - - - - - e356668c by Ben Gamari at 2020-11-30T11:11:37-05:00 Merge pull request haskell/haddock#1258 from hsyl20/wip/hsyl20/hscenv/unitstate Unit fields moved from DynFlags to HscEnv - - - - - 7cf552f1 by Ben Gamari at 2020-12-03T10:31:27-05:00 Merge pull request haskell/haddock#1257 from AndreasPK/wip/andreask/opt_dumps Update for changes in GHC's Pretty - - - - - fc0871c3 by Veronika Romashkina at 2020-12-08T16:35:33+01:00 Fix docs links from Darcs to GitHub in intro (#1262) - - - - - 7059e808 by Veronika Romashkina at 2020-12-08T16:36:16+01:00 Use gender neutral word in docs (#1260) - - - - - 1b16e5ee by Maximilian Tagher at 2020-12-08T16:40:03+01:00 Allow scrolling search results (#1235) Closes https://github.com/haskell/haddock/issues/1231 - - - - - 8a118c01 by dependabot[bot] at 2020-12-08T16:40:25+01:00 Bump bl from 1.2.2 to 1.2.3 in /haddock-api/resources/html (#1255) Bumps [bl](https://github.com/rvagg/bl) from 1.2.2 to 1.2.3. - [Release notes](https://github.com/rvagg/bl/releases) - [Commits](https://github.com/rvagg/bl/compare/v1.2.2...v1.2.3) Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - c89ff587 by Xia Li-yao at 2020-12-08T16:42:17+01:00 Allow more characters in anchor following module reference (#1220) - - - - - 14af7d64 by Xia Li-yao at 2020-12-08T16:43:05+01:00 Add dangling changes from branches ghc-8.6 and ghc-8.8 (#1243) * Fix multiple typos and inconsistencies in doc/markup.rst Note: I noticed some overlap with haskell/haddock#1112 from @wygulmage and haskell/haddock#1081 from @parsonsmatt after creating these proposed changes - mea culpa for not looking at the open PRs sooner. * Fix haskell/haddock#1113 If no Signatures, no section of index.html * Change the formatting of missing link destinations The current formatting of the missing link destination does not really help user to understand the reasons of the missing link. To address this, I've changed the formatting in two ways: - the missing link symbol name is now fully qualified. This way you immediately know which haskell module cannot be linked. It is then easier to understand why this module does not have documentation (hidden module or broken documentation). - one line per missing link, that's more readable now that symbol name can be longer due to qualification. For example, before haddock was listing missing symbol such as: ``` could not find link destinations for: Word8 Word16 mapMaybe ``` Now it is listed as: ``` could not find link destinations for: - Data.Word.Word8 - Data.Word.Word16 - Data.Maybe.mapMaybe ``` * Add `--ignore-link-symbol` command line argument This argument can be used multiples time. A missing link to a symbol listed by `--ignore-link-symbol` won't trigger "missing link" warning. * Forbid spaces in anchors (#1148) * Improve error messages with context information (#1060) Co-authored-by: Matt Audesse <matt at mattaudesse.com> Co-authored-by: Mike Pilgrem <mpilgrem at users.noreply.github.com> Co-authored-by: Guillaume Bouchard <guillaume.bouchard at tweag.io> Co-authored-by: Pepe Iborra <pepeiborra at gmail.com> - - - - - 89e3af13 by tomjaguarpaw at 2020-12-08T18:00:04+01:00 Enable two warnings (#1245) because they will be soon be added to -Wall. See https://gitlab.haskell.org/ghc/ghc/-/issues/15656 - - - - - c3320f8d by Willem Van Onsem at 2020-12-08T18:26:55+01:00 simplify calculating percentages fixing haskell/haddock#1194 (#1236) - - - - - 685df308 by Alex Biehl at 2020-12-08T20:06:26+01:00 Changes for GHC#17566 See https://gitlab.haskell.org/ghc/ghc/merge_requests/2469 - - - - - be3ec3c0 by Alex Biehl at 2020-12-08T20:06:26+01:00 Import intercalate - - - - - 32c33912 by Matthías Páll Gissurarson at 2020-12-08T21:15:30+01:00 Adapt Haddock for QualifiedDo - - - - - 31696088 by Alex Biehl at 2020-12-08T22:06:02+01:00 Fix haddock-library tests - - - - - fbc0998a by Alex Biehl at 2020-12-08T23:08:23+01:00 Move to GitHub CI (#1266) * Initial version of ci.yml This is a straight copy from Dmitrii Kovanikov's blog post at https://kodimensional.dev/github-actions. Will adapt to haddock in successive commits. * Delete .travis.yml * Modify to only test on ghc-8.10.{1,2} * Use actions/setup-haskell at v1.1.4 * Relax QuickCheck bound on haddock-api * Remove stack matrix for now * Nail down to ghc-8.10 branch for now * Pin index state to 2020-12-08T20:13:44Z for now * Disable macOS and Windows tests for now for speed up - - - - - 5b946b9a by tomjaguarpaw at 2020-12-10T19:01:41+01:00 Enable two warnings (#1245) (#1268) because they will be soon be added to -Wall. See https://gitlab.haskell.org/ghc/ghc/-/issues/15656 - - - - - bc5a408f by dependabot[bot] at 2020-12-10T19:02:16+01:00 Bump ini from 1.3.5 to 1.3.7 in /haddock-api/resources/html (#1269) Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - d02995f1 by Andrew Martin at 2020-12-14T16:48:40-05:00 Update for boxed rep - - - - - a381aeff by Ben Gamari at 2020-12-15T15:13:30-05:00 Revert "Enable two warnings (#1245) (#1268)" As this does not build on GHC `master`. This reverts commit 7936692badfe38f23ae95b51fb7bd7c2ff7e9bce. - - - - - a63c0a9e by Ben Gamari at 2020-12-15T15:17:59-05:00 Revert "Update for boxed rep" This reverts commit 4ffb30d8b637ccebecc81ce610f0af451ac8088d. - - - - - 53bfbb29 by Ben Gamari at 2020-12-15T15:37:24-05:00 Merge remote-tracking branch 'upstream/ghc-head' into ghc-head - - - - - bae76a30 by Ben Gamari at 2020-12-16T02:44:42+00:00 Update output for nullary TyConApp optimisation (ghc/ghc!2952) - - - - - 4b733b57 by Krzysztof Gogolewski at 2020-12-16T20:03:14+01:00 Display linear/multiplicity arrows correctly (#1238) Previously we were ignoring multiplicity and displayed a %1 -> b as a -> b. - - - - - ee463bd3 by Ryan Scott at 2020-12-16T16:55:23-05:00 Adapt to HsCoreTy (formerly NewHsTypeX) becoming a type synonym Needed for !4417, the fix for GHC#15706 and GHC#18914. - - - - - ed0b02f8 by tomjaguarpaw at 2020-12-19T10:17:19+00:00 Enable two warnings (#1245) (#1268) because they will be soon be added to -Wall. See https://gitlab.haskell.org/ghc/ghc/-/issues/15656 - - - - - d80bf8f5 by Sylvain Henry at 2020-12-21T10:09:25+01:00 Fix after binder collect changes - - - - - bf4c9d32 by Adam Gundry at 2020-12-23T21:35:01+00:00 Adapt to changes to GlobalRdrElt and AvailInfo Needed for ghc/ghc!4467 - - - - - 37736c4c by John Ericson at 2020-12-28T12:27:02-05:00 Support a new ghc --make node type for parallel backpack upsweep - - - - - 717bdeac by Vladislav Zavialov at 2020-12-29T10:50:02+03:00 Inline and fix getGADTConTypeG The getGADTConTypeG used HsRecTy, which is at odds with GHC issue haskell/haddock#18782. I noticed that getGADTConTypeG was only used in the Hoogle backend. Interestingly, when handling H98 constructors, Hoogle converts RecCon to PrefixCon (see Haddock.Backends.Hoogle.ppCtor). So I changed getGADTConTypeG to handle RecConGADT in the same manner as PrefixConGADT, and after this simplification moved it into the 'where' clause of ppCtor, to the only place where it is used. The practical effect of this change is as follows. Consider this example: data TestH98 = T98 { bar::Int } data TestGADT where TG :: { foo :: Int } -> TestGADT Before this patch, haddock --hoogle used to produce: T98 :: Int -> TestH98 [TG] :: {foo :: Int} -> TestGADT Notice how the record syntax was discarded in T98 but not TG. With this patch, we always produce signatures without record syntax: T98 :: Int -> TestH98 [TG] :: Int -> TestGADT I suspect this might also be a bugfix, as currently Hoogle doesn't seem to render GADT record constructors properly. - - - - - cb1b8c56 by Andreas Abel at 2020-12-30T21:12:37+01:00 Build instructions: haddock-library and -api first! - - - - - b947f6ad by Ben Gamari at 2020-12-31T13:04:19-05:00 Merge pull request haskell/haddock#1281 from obsidiansystems/wip/backpack-j Changes to support -j with backpack - - - - - 120e1cfd by Hécate Moonlight at 2021-01-04T19:54:58+01:00 Merge pull request haskell/haddock#1282 from andreasabel/master Build instructions: haddock-library and -api first! - - - - - fd45e41a by Ben Gamari at 2021-01-05T16:14:31-05:00 Merge remote-tracking branch 'origin/ghc-8.10' into ghc-9.0 - - - - - b471bdec by Ben Gamari at 2021-01-05T16:23:02-05:00 Merge commit '1e56f63c3197e7ca1c1e506e083c2bad25d08793' into ghc-9.0 - - - - - 81cdbc41 by Alex Biehl at 2021-01-09T12:14:41+01:00 Prepare Haddock for being a GHC Plugin - - - - - b646d952 by Alex Biehl at 2021-01-09T12:14:41+01:00 Make Haddock a GHC Plugin - - - - - cc044674 by Alex Biehl at 2021-01-09T12:14:41+01:00 Add -j[n] CLI param to Haddock executable It translates to `--ghcopt=-j[n]` - - - - - 84a04073 by Alex Biehl at 2021-01-09T12:14:41+01:00 Abstract Monad for interface creation I found that when running as a plugin the lookupName function (which runs in Ghc monad) does not work correctly from the typeCheckResultAction hook. Instead, we abstracted the monad used when creating interfaces, so that access to GHC session specific parts is explicit and so that the TcM can provide their (correct) implementation of lookupName. - - - - - 5be2c4f7 by Alex Biehl at 2021-01-09T12:14:41+01:00 Accept tests - - - - - 8cefee9d by Alex Biehl at 2021-01-09T16:10:47+01:00 Add missing dependency for mtl - - - - - 3681f919 by Ben Gamari at 2021-01-13T18:39:25-05:00 Merge remote-tracking branch 'origin/ghc-9.0' into ghc-head - - - - - 33c6b152 by Hécate Moonlight at 2021-01-14T16:04:20+01:00 Merge pull request haskell/haddock#1273 from hsyl20/wip/hsyl20/arrows Fix after binder collect changes - - - - - 70d13e8e by Joachim Breitner at 2021-01-22T19:03:45+01:00 Make haddock more robust to changes to the `Language` data type With the introduction of GHC2021, the `Languages` data type in GHC will grow. In preparation of that (and to avoid changing haddock with each new language), this change makes the code handle extensions to that data type gracefully. (cherry picked from commit c341dd7c9c3fc5ebc83a2d577c5a726f3eb152a5) - - - - - 7d6dd57a by John Ericson at 2021-01-22T22:02:02+00:00 Add `NoGhcTc` instance now that it's not closed - - - - - e5fdaf0a by Alan Zimmerman at 2021-01-23T22:57:44+00:00 Merge pull request haskell/haddock#1293 from obsidiansystems/wip/fix-18936 Add `NoGhcTc` instance now that it's not closed - - - - - 989a1e05 by Oleg Grenrus at 2021-01-24T16:11:46+03:00 Add import list to Data.List - - - - - 368e144a by Ben Gamari at 2021-01-28T22:15:48+01:00 Adapt to "Make PatSyn immutable" - - - - - abe66c21 by Alfredo Di Napoli at 2021-02-01T08:05:35+01:00 Rename pprLogErrMsg to new name - - - - - e600e75c by Hécate Moonlight at 2021-02-05T14:53:00+01:00 Move CI to ghc-9.0 - - - - - dd492961 by Vladislav Zavialov at 2021-02-05T14:53:00+01:00 Update cabal.project and README build instructions - - - - - 31bd292a by Hécate Moonlight at 2021-02-05T15:03:56+01:00 Merge pull request haskell/haddock#1296 from Kleidukos/ghc-9.0 Merge the late additions to ghc-8.10 into ghc-9.0 - - - - - 6388989e by Vladislav Zavialov at 2021-02-05T17:41:57+03:00 Cleanup: fix build warnings - - - - - f99407ef by Daniel Rogozin at 2021-02-05T18:11:48+03:00 type level characters support for haddock (required for haskell/haddock#11342) - - - - - d8c6b26f by Hécate Moonlight at 2021-02-05T17:44:50+01:00 Add a CONTRIBUTING.md file - - - - - 6a01ad98 by Hécate Moonlight at 2021-02-05T17:58:16+01:00 Merge pull request haskell/haddock#1312 from Kleidukos/proper-branch-etiquette Add a CONTRIBUTING.md file - - - - - 955eecc4 by Vladislav Zavialov at 2021-02-05T20:29:00+03:00 Merge commit 'a917dfd29f3103b69378138477514cbfa38558a9' into ghc-head - - - - - 47b3d6ab by Hécate Moonlight at 2021-02-05T19:09:38+01:00 Amend the CONTRIBUTING.md file - - - - - 23de6137 by Hécate Moonlight at 2021-02-05T19:16:49+01:00 Merge pull request haskell/haddock#1313 from Kleidukos/amend-contributing Amend the CONTRIBUTING.md file - - - - - 69026b59 by Krzysztof Gogolewski at 2021-02-05T23:05:56+01:00 Display linear/multiplicity arrows correctly (#1238) Previously we were ignoring multiplicity and displayed a %1 -> b as a -> b. (cherry picked from commit b4b4d896d2d68d6c48e7db7bfe95c185ca0709cb) - - - - - ea026b78 by Oleg Grenrus at 2021-02-06T17:14:45+01:00 Add import list to Data.List - - - - - 5204326f by Hécate Moonlight at 2021-02-06T17:15:44+01:00 Merge pull request haskell/haddock#1316 from Kleidukos/explicit-imports-to-data-list Add import list to Data.List - - - - - 1f4d2136 by Ben Gamari at 2021-02-06T11:53:31-05:00 Merge remote-tracking branch 'origin/ghc-head' into wip/ghc-head-merge - - - - - 13f0d09a by Ben Gamari at 2021-02-06T11:53:45-05:00 Fix partial record selector warning - - - - - 5c115f7e by Ben Gamari at 2021-02-06T11:55:52-05:00 Merge commit 'a917dfd29f3103b69378138477514cbfa38558a9' into wip/ghc-head-merge - - - - - b6fd8b75 by Ben Gamari at 2021-02-06T12:01:31-05:00 Merge commit '41964cb2fd54b5a10f8c0f28147015b7d5ad2c02' into wip/ghc-head-merge - - - - - a967194c by Ben Gamari at 2021-02-06T18:30:35-05:00 Merge branch 'wip/ghc-head-merge' into ghc-head - - - - - 1f4c3a91 by MorrowM at 2021-02-07T01:52:33+02:00 Fix search div not scrolling - - - - - 684b1287 by Iñaki García Etxebarria at 2021-02-07T16:13:04+01:00 Add support for labeled module references Support a markdown-style way of annotating module references. For instance -- | [label]("Module.Name#anchor") will create a link that points to the same place as the module reference "Module.Name#anchor" but the text displayed on the link will be "label". - - - - - bdb55a5d by Hécate Moonlight at 2021-02-07T16:18:10+01:00 Merge pull request haskell/haddock#1319 from alexbiehl/alex/compat Backward compat: Add support for labeled module references - - - - - 6ca70991 by Hécate Moonlight at 2021-02-07T16:21:29+01:00 Merge pull request haskell/haddock#1314 from tweag/show-linear-backport Backport haskell/haddock#1238 (linear types) to ghc-9.0 - - - - - d9d73298 by Alex Biehl at 2021-02-07T17:46:25+01:00 Remove dubious parseModLink Instead construct the ModLink value directly when parsing. - - - - - 33b4d020 by Hécate Moonlight at 2021-02-07T17:52:05+01:00 Merge pull request haskell/haddock#1320 from haskell/alex/fix Remove dubious parseModLink - - - - - 54211316 by Hécate Moonlight at 2021-02-07T18:12:07+01:00 Merge pull request haskell/haddock#1318 from MorrowM/ghc-9.0 Fix search div not scrolling - - - - - 19db679e by alexbiehl-gc at 2021-02-07T18:14:46+01:00 Merge pull request haskell/haddock#1317 from bgamari/wip/ghc-head-merge Merge ghc-8.10 into ghc-head - - - - - 6bc1e9e4 by Willem Van Onsem at 2021-02-07T18:25:30+01:00 simplify calculating percentages fixing haskell/haddock#1194 (#1236) - - - - - c8537cf8 by alexbiehl-gc at 2021-02-07T18:30:40+01:00 Merge pull request haskell/haddock#1322 from haskell/alex/forward-port simplify calculating percentages fixing haskell/haddock#1194 (#1236) - - - - - 2d47ae4e by alexbiehl-gc at 2021-02-07T18:39:59+01:00 Merge branch 'ghc-head' into ghc-9.0 - - - - - 849e4733 by Hécate Moonlight at 2021-02-07T18:43:19+01:00 Merge pull request haskell/haddock#1321 from Kleidukos/ghc-9.0 Merge ghc-9.0 into ghc-head - - - - - ee6095d7 by Sylvain Henry at 2021-02-08T11:36:38+01:00 Update for Logger - - - - - 4ad688c9 by Alex Biehl at 2021-02-08T18:11:24+01:00 Merge pull request haskell/haddock#1310 from hsyl20/wip/hsyl20/logger2 Logger refactoring - - - - - 922a9e0e by Ben Gamari at 2021-02-08T12:54:33-05:00 Merge remote-tracking branch 'upstream/ghc-head' into ghc-head - - - - - 991649d2 by Sylvain Henry at 2021-02-09T10:55:17+01:00 Fix to build with HEAD - - - - - a8348dc2 by Hécate Moonlight at 2021-02-09T10:58:51+01:00 Merge pull request haskell/haddock#1327 from hsyl20/wip/hsyl20/logger2 Fix to build with HEAD - - - - - 0abdbca6 by Fendor at 2021-02-09T20:06:15+01:00 Add UnitId to Target record - - - - - d5790a0e by Alex Biehl at 2021-02-11T10:32:32+01:00 Stable sort for (data/newtype) instances - - - - - 8e6036f5 by Alex Biehl at 2021-02-11T10:32:32+01:00 Also make TyLit deterministic - - - - - f76d2945 by Hécate Moonlight at 2021-02-11T11:00:31+01:00 Merge pull request haskell/haddock#1329 from hsyl20/hsyl20/stabe_iface Stable sort for instances - - - - - 5e0469ea by Oleg Grenrus at 2021-02-14T15:28:15+02:00 Add import list to Data.List in Haddock.Interface.Create - - - - - fa57cd24 by Hécate Moonlight at 2021-02-14T17:19:27+01:00 Merge pull request haskell/haddock#1331 from phadej/more-explicit-data-list-imports Add import list to Data.List in Haddock.Interface.Create - - - - - f0cd629c by Hécate Moonlight at 2021-02-21T00:22:01+01:00 Merge pull request haskell/haddock#1311 from fendor/wip/add-targetUnitId-to-target Add UnitId to Target record - - - - - 674ef723 by Joachim Breitner at 2021-02-22T10:39:18+01:00 html-test: Always set language from ghc-9.2 on, the “default” langauge of GHC is expected to change more wildly. To prepare for that (and unblock https://gitlab.haskell.org/ghc/ghc/-/merge_requests/4853), this sets the language for all the test files to `Haskell2010`. This should insolate this test suite against changes to the default. Cherry-picked from https://github.com/haskell/haddock/pull/1341 - - - - - f072d623 by Hécate Moonlight at 2021-02-22T10:56:51+01:00 Merge pull request haskell/haddock#1342 from nomeata/joachim/haskell2010-in-tests-ghc-head html-test: Always set language - - - - - caebbfca by Hécate Moonlight at 2021-02-22T11:53:07+01:00 Clean-up of Interface and Interface.Create's imports and pragmata - - - - - f6caa89d by Hécate Moonlight at 2021-02-22T11:54:58+01:00 Merge pull request haskell/haddock#1345 from Kleidukos/head/fix-interface-imports [ghc-head] Clean-up of Interface and Interface.Create's imports and pragmata - - - - - 7395c9cb by Hécate Moonlight at 2021-02-22T18:44:57+01:00 Explicit imports for Haddock.Interface and Haddock.Interface.Create - - - - - 6e9fb5d5 by Hécate Moonlight at 2021-02-22T18:45:28+01:00 Merge pull request haskell/haddock#1348 from Kleidukos/head/explicit-imports-interface Explicit imports for Haddock.Interface and Haddock.Interface.Create - - - - - 9198b118 by Alan Zimmerman at 2021-02-22T20:04:24+00:00 Context becomes a Maybe in the GHC AST This prevents noLoc's appearing in the ParsedSource. Match the change in GHC. - - - - - 0af20f64 by Hécate Moonlight at 2021-02-23T12:36:12+01:00 Fix the call-site of guessTarget in Interface.hs Explicit the imports from GHC.HsToCore.Docs - - - - - b7886885 by Hécate Moonlight at 2021-02-23T12:37:54+01:00 Merge pull request haskell/haddock#1349 from Kleidukos/fix-interface-guesstarget-call Fix the call-site of guessTarget in Interface.hs - - - - - 9cf041ba by Sylvain Henry at 2021-02-24T11:08:20+01:00 Fix haddockHypsrcTest output in ghc-head - - - - - b194182a by Hécate Moonlight at 2021-02-24T11:12:36+01:00 Merge pull request haskell/haddock#1351 from hsyl20/wip/hsyl20/fix-head Fix haddockHypsrcTest output in ghc-head - - - - - 3ce8b375 by Shayne Fletcher at 2021-03-06T09:55:03-05:00 Add ITproj to parser - - - - - d2abf762 by Ben Gamari at 2021-03-06T19:26:49-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - a0f6047d by Andrew Martin at 2021-03-07T11:25:23-05:00 Update for boxed rep - - - - - 6f63c99e by Ben Gamari at 2021-03-10T13:20:21-05:00 Update for "FastString: Use FastMutInt instead of IORef Int" - - - - - e13f01df by Luke Lau at 2021-03-10T15:38:40-05:00 Implement template-haskell's putDoc This catches up to GHC using the new extractTHDocs function, which returns documentation added via the putDoc function (provided it was compiled with Opt_Haddock). Since it's already a map from names -> docs, there's no need to do traversal etc. It also matches the change from the argument map being made an IntMap rather than a Map Int - - - - - 89263d94 by Alan Zimmerman at 2021-03-15T17:15:26+00:00 Match changes in GHC AST for in-tree API Annotations As landed via https://gitlab.haskell.org/ghc/ghc/-/merge_requests/2418 - - - - - 28db1934 by Alan Zimmerman at 2021-03-15T20:40:09+00:00 Change some type family test results. It is not clear to me whether the original was printing incorrectly (since we did not have the TopLevel flag before now), or if this behaviour is expected. For the time being I am assuming the former. - - - - - 7c11c989 by Sylvain Henry at 2021-03-22T10:05:19+01:00 Fix after NameCache changes - - - - - addbde15 by Sylvain Henry at 2021-03-22T10:05:19+01:00 NameCache doesn't store a UniqSupply anymore - - - - - 15ec6cec by Ben Gamari at 2021-03-22T17:53:44-04:00 Bump GHC version to 9.2 - - - - - dbd6aa63 by Hécate Moonlight at 2021-03-24T14:28:36+01:00 Merge pull request haskell/haddock#1365 from hsyl20/wip/hsyl20/iface1 NameCache refactoring - - - - - 2d32da7e by Oleg Grenrus at 2021-03-27T01:12:00+02:00 Specialization of Data.List - - - - - 32b84fa6 by Fendor at 2021-03-27T10:50:17+01:00 Add UnitId to Target record This way we always know to which home-unit a given target belongs to. So far, there only exists a single home-unit at a time, but it enables having multiple home-units at the same time. - - - - - 54bf9f0e by Hécate Moonlight at 2021-03-28T14:08:35+02:00 Merge pull request haskell/haddock#1368 from fendor/target-unit-id-revert Add UnitId to Target record - - - - - 7dea168a by Alan Zimmerman at 2021-03-29T08:45:52+01:00 EPA : Rename ApiAnn to EpAnn - - - - - 72967f65 by Alfredo Di Napoli at 2021-03-29T09:47:01+02:00 pprError changed name in GHC - - - - - 4bc61035 by Alan Zimmerman at 2021-03-29T16:16:27-04:00 EPA : Rename ApiAnn to EpAnn - - - - - 108d031d by Ben Gamari at 2021-03-29T18:49:36-04:00 Merge commit '36418c4f70d7d2b179a77925b3ad5caedb08c9b5' into HEAD - - - - - 1444f700 by Ben Gamari at 2021-03-31T09:18:39-04:00 Merge pull request haskell/haddock#1370 from adinapoli/wip/adinapoli-diag-reason-severity Rename pprError to mkParserErr - - - - - d3087b79 by Ben Gamari at 2021-03-31T11:34:17-04:00 Merge commit 'd8d8024ad6796549a8d3b5512dabf3288d14e30f' into ghc-head - - - - - 170b79e9 by Ben Gamari at 2021-03-31T12:24:56-04:00 Merge remote-tracking branch 'upstream/ghc-head' into ghc-head - - - - - db0d6bae by Ben Gamari at 2021-04-10T09:34:35-04:00 Bump GHC version to 9.3 - - - - - a9f2c421 by Alan Zimmerman at 2021-04-19T18:26:46-04:00 Update for EPA changes in GHC (cherry picked from commit cafb48118f7c111020663776845897e225607b41) - - - - - 1ee4b7c7 by Sylvain Henry at 2021-05-11T10:00:06+02:00 Removal of HsVersions.h (#1388) * Update for EPA changes in GHC * Account for HsVersions.h removal Co-authored-by: Alan Zimmerman <alan.zimm at gmail.com> - - - - - 79e819e9 by Hécate Moonlight at 2021-05-11T10:14:47+02:00 Revert "Removal of HsVersions.h (#1388)" This reverts commit 72118896464f94d81f10c52f5d9261efcacc57a6. - - - - - 3dbd3f8b by Alan Zimmerman at 2021-05-11T10:15:17+02:00 Update for EPA changes in GHC - - - - - 2ce80c17 by Sylvain Henry at 2021-05-11T10:15:19+02:00 Account for HsVersions.h removal - - - - - 00e4c918 by Christiaan Baaij at 2021-05-13T08:21:56+02:00 Add Haddock support for the OPAQUE pragma (#1380) - - - - - 8f9049b2 by Hécate Moonlight at 2021-05-13T08:40:22+02:00 fixup! Use GHC 9.2 in CI runner - - - - - 27ddec38 by Alan Zimmerman at 2021-05-13T22:51:20+01:00 EPA: match changes from GHC T19834 - - - - - f8a1d714 by Felix Yan at 2021-05-14T17:10:04+02:00 Allow hspec 2.8 (#1389) All tests are passing. - - - - - df44453b by Divam Narula at 2021-05-20T15:42:42+02:00 Update ref, the variables got renamed. (#1391) This is due to ghc/ghc!5555 which caused a change in ModDetails in case of NoBackend. Now the initModDetails is used to recreate the ModDetails from interface and in-memory ModDetails is not used. - - - - - e46bfc87 by Alan Zimmerman at 2021-05-20T19:05:09+01:00 Remove Maybe from HsQualTy Match changes in GHC for haskell/haddock#19845 - - - - - 79bd7b62 by Shayne Fletcher at 2021-05-22T08:20:39+10:00 FieldOcc: rename extFieldOcc to foExt - - - - - 6ed68c74 by Ben Gamari at 2021-05-21T22:29:30-04:00 Merge commit '3b6a8774bdb543dad59b2618458b07feab8a55e9' into ghc-head - - - - - f9a02d34 by Alfredo Di Napoli at 2021-05-24T13:53:00+02:00 New Parser diagnostics interface - - - - - 392807d0 by Ben Gamari at 2021-05-24T09:57:40-04:00 Merge pull request haskell/haddock#1394 from adinapoli/wip/adinapoli-align-ps-messages Align Haddock to use the new Parser diagnostics interface - - - - - 33023cd8 by Ben Gamari at 2021-05-24T11:19:16-04:00 Revert "Add Haddock support for the OPAQUE pragma (#1380)" This reverts commit a1337c599ef7720b0482a25c55f11794112496dc. The GHC patch associated with this change is not yet ready to be merged. - - - - - 8c005af7 by Ben Simms at 2021-05-28T07:56:20+02:00 CI configuration for ghc-head (#1395) - - - - - 1e947612 by Hécate Moonlight at 2021-05-28T12:27:35+02:00 Use GHC 9.2 in CI runner (#1378) - - - - - e6fa10ab by CGenie at 2021-05-31T09:02:13+02:00 Add page about common errors (#1396) * Update index.rst Common errors page * Create common-errors.rst * Update common-errors.rst * Use GHC 9.2 in CI runner (#1378) * [haddock-api] remove .hspec-failures Co-authored-by: Hécate Moonlight <Kleidukos at users.noreply.github.com> - - - - - abc72a8d by Sylvain Henry at 2021-06-01T10:02:06+02:00 Adapt Haddock to Logger and Parser changes (#1399) - - - - - 91373656 by Zubin Duggal at 2021-06-01T20:45:10+02:00 Update haddockHypSrc tests since we now compute slighly more type info (#1397) - - - - - ed712822 by Marcin Szamotulski at 2021-06-02T08:54:33+02:00 Added myself to contributors - - - - - 49fdbcb7 by Marcin Szamotulski at 2021-06-02T08:57:24+02:00 Document multi component support - - - - - 9ddc8d7d by Hécate Moonlight at 2021-06-02T09:35:55+02:00 Merge pull request haskell/haddock#1379 from coot/coot/document-multi-component-support Document multi component support - - - - - 585b5c5e by Ben Simms at 2021-06-02T19:46:54+02:00 Update CONTRIBUTING.md (#1402) - - - - - 1df4a605 by Ben Simms at 2021-06-02T19:47:14+02:00 Update CONTRIBUTING.md (#1403) - - - - - 58ea43d2 by sheaf at 2021-06-02T22:09:06+02:00 Update Haddock Bug873 to account for renaming - - - - - c5d0ab23 by Vladislav Zavialov at 2021-06-10T13:35:42+03:00 HsToken in FunTy, RecConGADT - - - - - 1ae2f40c by Hécate Moonlight at 2021-06-11T11:19:09+02:00 Update the CI badges - - - - - 6fdc4de2 by Sylvain Henry at 2021-06-28T19:21:17+02:00 Fix mkParserOpts (#1411) - - - - - 18201670 by Alfredo Di Napoli at 2021-07-05T07:55:12+02:00 Rename getErrorMessages Lexer import This commit renames the Lexer import in `Hyperlinker.Parser` from `getErrorMessages` to `getPsErrorMessages` to eliminate the ambiguity with the `getErrorMessages` function defined in `GHC.Types.Error`. - - - - - 23173ca3 by Ben Gamari at 2021-07-07T11:31:44-04:00 Merge pull request haskell/haddock#1413 from adinapoli/wip/adinapoli-issue-19920 Rename getErrorMessages Lexer import - - - - - b3dc4ed8 by Alan Zimmerman at 2021-07-28T22:30:59+01:00 EPA: match changes from GHC T19834 (cherry picked from commit 2fec1b44e0ee7e263286709aa528b4ecb99ac6c2) - - - - - 5f177278 by Ben Gamari at 2021-08-06T01:17:37-04:00 Merge commit '2a966c8ca37' into HEAD - - - - - cdd81d08 by Marcin Szamotulski at 2021-08-08T17:19:06+02:00 coot/multiple packages (ghc-9.2) (#1418) - - - - - be0d71f1 by Marcin Szamotulski at 2021-08-16T08:46:03+02:00 coot/multiple package (ghc-head) (#1419) * FromJSON class Aeson style FromJSON class with Parsec based json parser. * doc-index.json file for multiple packages When creating haddock summary page for multiple packages render doc-index.json file using contents of all found 'doc-index.json' files. * Render doc-index.json When rendering html, render doc-index.json file independently of maybe_index_url option. doc-index.json file is useful now even if maybe_index_url is not `Nothing`. * base url option New `Flag_BaseURL` which configures from where static files are loaded (--base-url). If given and not equal "." static files are not coppied, as this indicates that they are not read from the the directory where we'd copy them. The default value is ".". - - - - - 3b09dbdf by Hécate Moonlight at 2021-10-07T23:26:03+02:00 Update GHC 9.2 to latest pre-release in CI - - - - - 7ac55417 by Zubin Duggal at 2021-10-11T12:10:19+02:00 Enable Haddock tests in GHC windows CI (#1428) * testsuite: strip windows line endings for haddock * hyperlinker: Work around double escaping (#19236) * deterministic SCC - - - - - 1cb81f25 by Andrew Lelechenko at 2021-10-12T15:23:19+02:00 haddock-library does not depend on bytestring or transformers (#1426) - - - - - a890b9aa by sheaf at 2021-10-15T22:19:42+02:00 update haddockHypsrcTest for GHC MR !6705 (#1430) - - - - - 42a55c6c by Sylvain Henry at 2021-10-15T22:20:10+02:00 Fix after PkgQual refactoring (#1429) - - - - - 91659238 by Alan Zimmerman at 2021-10-28T18:57:10+01:00 Update for changes in GHC for branch wip/az/no-srcspan-anno-instances - - - - - acf23e60 by Vladislav Zavialov at 2021-11-05T02:09:47+03:00 Do not use forall as an identifier See GHC ticket haskell/haddock#20609 - - - - - c565db0e by Krzysztof Gogolewski at 2021-11-27T02:42:35+01:00 Update after NoExtCon -> DataConCantHappen rename - - - - - b5f55590 by Artem Pelenitsyn at 2021-11-27T11:14:17+01:00 fix CI for 9.2 (#1436) - - - - - 25cd621e by Matthew Pickering at 2021-12-02T11:46:54+00:00 Update html-test for Data.List revert - - - - - 1d5ff85f by malteneuss at 2021-12-15T07:56:55+01:00 Add hint about inline link issue (#1444) - - - - - 791fde81 by Sylvain Henry at 2021-12-16T09:29:51+01:00 Bump ghc-head (#1445) * Update after NoExtCon -> DataConCantHappen rename * Update html-test for Data.List revert * Fix for new Plugins datatype Co-authored-by: Krzysztof Gogolewski <krzysztof.gogolewski at tweag.io> Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - 44236317 by Sylvain Henry at 2021-12-17T09:39:00+01:00 Fix for new Plugins datatype - - - - - 80ada0fa by Hécate Moonlight at 2021-12-17T17:28:48+01:00 Remove ghc-head workflow (#1446) Contributions of GHC glue code are now done on the GHC gitlab, not in the GitHub repo anymore. - - - - - 49e171cd by Matthew Pickering at 2021-12-28T09:47:09+00:00 Remove use of ExtendedModSummary - - - - - 0e91b5ea by askeblad at 2022-01-04T09:18:35+01:00 update URLs - - - - - 9f13c212 by Hécate Moonlight at 2022-02-25T10:19:46+01:00 Fix solver for GHC 9.2 - - - - - 386751a1 by Meng Weng Wong at 2022-02-25T19:19:11+01:00 IDoc link has bitrotted; replaced with web.archive.org cache. (#1454) - - - - - d877cbe6 by Hécate Moonlight at 2022-02-25T19:21:58+01:00 Fix haddock user guide (#1456) - - - - - cc47f036 by Andrew Lelechenko at 2022-03-04T17:29:36+01:00 Allow text-2.0 in haddock-library (#1459) - - - - - 7b3685a3 by malteneuss at 2022-03-07T19:27:24+01:00 Add multi-line style hint to style section (#1460) - - - - - c51088b8 by John Ericson at 2022-03-11T16:46:26+01:00 Fix CollectPass instance to match TTG refactor Companion to GHC !7614 (https://gitlab.haskell.org/ghc/ghc/-/merge_requests/7614) - - - - - b882195b by Vladislav Zavialov at 2022-03-14T20:32:30+01:00 Link to (~) - - - - - 877349b8 by Christiaan Baaij at 2022-03-16T09:20:43+01:00 Add Haddock support for the OPAQUE pragma - - - - - 0ea22721 by askeblad at 2022-03-16T09:44:27+01:00 typos (#1464) - - - - - a6d13da1 by Matthew Pickering at 2022-03-22T13:41:17+00:00 Minimum changes needed for compilation with hi-haddock With hi-haddock, of course there is a much large refactoring of haddock which could be achieved but that is left for a future patch which can implemented at any time independently of GHC. - - - - - e7ac9129 by Matthew Pickering at 2022-03-22T21:17:50+00:00 Update test output - - - - - 6d916214 by Matthew Pickering at 2022-03-24T15:06:26+00:00 Merge branch 'wip/opaque_pragma' into 'ghc-head' Add Haddock support for the OPAQUE pragma See merge request ghc/haddock!2 - - - - - 42208183 by Steve Hart at 2022-03-25T20:43:50+01:00 Fix CI (#1467) * CI: Reinstall GHC with docs CI tests were failing because the GHC preinstalled to the CI environment does not include documentation, which is required for running the Haddock tests. This commit causes the CI workflow to reinstall GHC with docs so that tests can succeed. - - - - - 9676fd79 by Steve Hart at 2022-03-25T21:33:34+01:00 Make links in Synopsis functional again (#1458) Commit e41c1cbe9f0476997eac7b4a3f17cbc6b2262faf added a call to e.preventDefault() when handling click events that reach a toggle element. This prevents the browser from following hyperlinks within the Synopsis section when they are clicked by a user. This commit restores functioning hyperlinks within the Synopsis section by removing the call to e.preventDefault(), as it does not appear to be necessary, and removing it increases the flexibility of the details-helper code. - - - - - d1edd637 by sheaf at 2022-04-01T12:02:02+02:00 Keep track of promotion ticks in HsOpTy Keeping track of promotion ticks in HsOpTy allows us to properly pretty-print promoted constructors such as lists. - - - - - 9dcb2dfc by Jakob Brünker at 2022-04-01T15:46:22+00:00 Add support for \cases See merge request ghc/ghc!7873 - - - - - b0412ee5 by askeblad at 2022-04-06T17:47:57+02:00 spelling errors (#1471) - - - - - 6b18829b by Vladislav Zavialov at 2022-04-06T18:53:58+02:00 Rename [] to List - - - - - 2d046691 by Vladislav Zavialov at 2022-04-07T20:25:54+03:00 HsToken ConDeclGADT con_dcolon - - - - - 90b43da4 by Steve Hart at 2022-04-12T13:29:46+02:00 Parse Markdown links at beginning of line within a paragraph (#1470) * Catch Markdown links at beginning of line within paragraph Per Issue haskell/haddock#774, Markdown links were being parsed as ordinary text when they occurred at the beginning of a line other than the first line of the paragraph. This occurred because the parser was not interpreting a left square bracket as a special character that could delimit special markup. A space character was considered a special character, so, if a space occurred at the beginning of the new line, then the parser would interpret the space by itself and then continue parsing, thereby catching the Markdown link. '\n' was not treated as a special character, so the parser did not catch a Markdown link that may have followed. Note that this will allow for Markdown links that are not surrounded by spaces. For example, the following text includes a Markdown link that will be parsed: Hello, world[label](url) This is consistent with how the parser handles other types of markup. * Remove obsolete documentation hint Commit 6b9aeafddf20efc65d3725c16e3fc43a20aac343 should eliminate the need for the workaround suggested in the documentation. - - - - - 5b08312d by Hécate Moonlight at 2022-04-12T13:36:38+02:00 Force ghc-9.2 in the cabal.project - - - - - 0d0ea349 by dependabot[bot] at 2022-04-12T13:57:41+02:00 Bump path-parse from 1.0.5 to 1.0.7 in /haddock-api/resources/html (#1469) Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.5 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - 2b9fc65e by dependabot[bot] at 2022-04-12T13:57:54+02:00 Bump copy-props from 2.0.4 to 2.0.5 in /haddock-api/resources/html (#1468) Bumps [copy-props](https://github.com/gulpjs/copy-props) from 2.0.4 to 2.0.5. - [Release notes](https://github.com/gulpjs/copy-props/releases) - [Changelog](https://github.com/gulpjs/copy-props/blob/master/CHANGELOG.md) - [Commits](https://github.com/gulpjs/copy-props/compare/2.0.4...2.0.5) --- updated-dependencies: - dependency-name: copy-props dependency-type: indirect ... Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - ea98a6fb by Ben Gamari at 2022-04-23T22:54:37-04:00 Update for GHC 9.4 - - - - - 9e11864f by Ben Gamari at 2022-04-25T16:24:31-04:00 Merge remote-tracking branch 'upstream/ghc-9.2' into ghc-head - - - - - f83cc506 by Ben Gamari at 2022-04-25T17:00:25-04:00 Bump ghc version to 9.5 - - - - - e01c2e7d by Ben Gamari at 2022-04-28T16:19:04-04:00 Revert "Bump ghc-head (#1445)" This reverts commit b29a78ef6926101338f62e84f456dac8659dc9d2. This should not have been merged. - - - - - a2b5ee8c by Ben Gamari at 2022-04-28T16:19:24-04:00 Merge commit '2627a86c' into ghc-head - - - - - 0c6fe4f9 by Ben Gamari at 2022-04-29T10:05:54-04:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-9.4 - - - - - b6e5cb0a by Ben Gamari at 2022-04-29T11:46:06-04:00 Revert "HsToken ConDeclGADT con_dcolon" This reverts commit 24208496649a02d5f87373052c430ea4a97842c5. - - - - - 15a62888 by Ben Gamari at 2022-04-29T15:12:55-04:00 Bump base upper bound - - - - - 165b9031 by Ben Gamari at 2022-04-29T23:58:38-04:00 Update test output - - - - - e0c3e5da by Phil de Joux at 2022-05-02T14:46:38+02:00 Add hlint action .hlint.yaml with ignores & CPP. (#1475) - - - - - ead1158d by Raphael Das Gupta at 2022-05-02T14:46:48+02:00 fix grammar in docs: "can the" → "can be" (#1477) - - - - - cff97944 by Ben Gamari at 2022-05-02T18:38:56-04:00 Allow base-4.17 - - - - - e4ecb201 by Phil de Joux at 2022-05-03T13:14:55+02:00 Remove unused imports that GHC warned about. (#1480) - - - - - 222890b1 by Phil de Joux at 2022-05-03T13:15:46+02:00 Follow hlint suggestion to remove redundant bang. (#1479) - - - - - 058b671f by Phil de Joux at 2022-05-03T13:34:04+02:00 Follow hlint, remove language pragmas in libs. (#1478) - - - - - 0a645049 by Ben Simms at 2022-05-03T14:19:24+02:00 Keep track of ordered list indexes and render them (#1407) * Keep track of ordered list indexes and render them * Rename some identifiers to clarify - - - - - f0433304 by Norman Ramsey at 2022-05-04T15:13:34-04:00 update for changes in GHC API - - - - - 3740cf71 by Emily Martins at 2022-05-06T18:23:48+02:00 Add link to the readthedocs in cabal description to show on hackage. (cherry picked from commit 52e2d40d47295c02d3181aac0c53028e730f1e3b) - - - - - 5d754f1e by Hécate Moonlight at 2022-05-06T18:44:57+02:00 remove Bug873 - - - - - 968fc267 by Hécate Moonlight at 2022-05-06T18:48:28+02:00 Ignore "Use second" HLint suggestion. It increases laziness. - - - - - 02d14e97 by Jade Lovelace at 2022-05-07T17:42:08+02:00 Fix hyperlinks to external items and modules (#1482) Fixes haskell/haddock#1481. There were two bugs in this: * We were assuming that we were always getting a relative path to the module in question, while Nix gives us file:// URLs sometimes. This change checks for those and stops prepending `..` to them. * We were not linking to the file under the module. This seems to have been a regression introduced by haskell/haddock#977. That is, the URLs were going to something like file:///nix/store/3bwbsy0llxxn1pixx3ll02alln56ivxy-ghc-9.0.2-doc/share/doc/ghc/html/libraries/base-4.15.1.0/src which does not have the appropriate HTML file or fragment for the item in question at the end. There is a remaining instance of the latter bug, but not in the hyperlinker: the source links to items reexported from other modules are also not including the correct file name. e.g. the reexport of Entity in esqueleto, from persistent. NOTE: This needs to get tested with relative-path located modules. It seems correct for Nix based on my testing. Testing strategy: ``` nix-shell '<nixpkgs>' --pure -A haskell.packages.ghc922.aeson mkdir /tmp/aesonbuild && cd /tmp/aesonbuild export out=/tmp/aesonbuild/out genericBuild ln -sf $HOME/co/haddock/haddock-api/resources . ./Setup haddock --with-haddock=$HOME/path/to/haddock/exec --hyperlink-source ``` - - - - - b22b87ed by Artem Pelenitsyn at 2022-05-08T16:19:47+02:00 fix parsing trailing quotes in backticked identifiers (#1408) (#1483) - - - - - 80ae107b by Alex Biehl at 2022-05-08T16:37:16+02:00 Fix "Defined by not used" error (cherry picked from commit 6e02a620a26c3a44f98675dd1b93b08070c36c0a) - - - - - 4c838e84 by Hécate Moonlight at 2022-05-08T16:37:16+02:00 Fix the changelog and bump the version of haddock-library on ghc-9.2 - - - - - fc9827b4 by Hécate Moonlight at 2022-05-08T16:40:40+02:00 Fix the changelog and bump the version of haddock-library on ghc-9.2 - - - - - b153b555 by Xia Li-yao at 2022-05-20T17:52:42+02:00 Hide synopsis from search when hidden (#1486) Fix haskell/haddock#1451 - - - - - f3e38b85 by Marcin Szamotulski at 2022-05-21T23:32:31+02:00 Allow to hide interfaces when rendering multiple components (#1487) This is useful when one wishes to `--gen-contents` when rendering multiple components, but one does not want to render all modules. This is in particular useful when adding base package. - - - - - f942863b by Marcin Szamotulski at 2022-05-24T08:29:59+02:00 Check if doc-index.json exists before reading it (#1488) - - - - - 31e92982 by Marcin Szamotulski at 2022-05-25T16:22:13+02:00 Version bump 2.26.1 (#1489) * Version bump 2.26.1 We extended format accepted by `--read-interface` option, which requires updating the minor version. * Update documentation of --read-interface option - - - - - 7cc873e0 by sheaf at 2022-05-25T16:42:31+02:00 Updated HaddockHypsrcTest output for record update changes (MR !7981) - - - - - cd196942 by Marcin Szamotulski at 2022-05-25T20:28:47+02:00 Use visibility to decide which interfaces are included in quickjump (#1490) This is also consistent with how html index is build. See haskell/cabal#7669 for rationale behind this decision. - - - - - 00c713c5 by Hécate Moonlight at 2022-05-26T17:09:15+02:00 Add code of conduct and hspec failure files in .gitignore - - - - - 2f3039f1 by Hécate Moonlight at 2022-05-26T17:10:59+02:00 Add code of conduct and hspec failure files in .gitignore - - - - - 63a5650c by romes at 2022-05-31T12:43:22+01:00 TTG: Match new GHC AST - - - - - dd7d1617 by romes at 2022-06-02T16:11:00+01:00 Update for IE changes in !8228 - - - - - c23aaab7 by cydparser at 2022-06-06T08:48:14+02:00 Fix and improve CI (#1495) * Pin GHC version before creating the freeze file * Use newest action versions * Improve caching * Avoid unnecessarily reinstalling GHC * Use GHC 9.2.2 for CI Co-authored-by: Cyd Wise <cwise at tripshot.com> - - - - - c156fa77 by Hécate Moonlight at 2022-06-06T11:59:35+02:00 Add Mergify configuration (#1496) - - - - - 2dba4188 by Hécate Moonlight at 2022-06-06T16:12:50+02:00 Bump haddock's version in cabal file to 2.26.1 (#1497) - - - - - d7d4b8b9 by Marcin Szamotulski at 2022-06-07T06:09:40+00:00 Render module tree per package in the content page (#1492) * Render module tree per package in the content page When rendering content page for multiple packages it is useful to split the module tree per package. Package names in this patch are inferred from haddock's interface file names. * Write PackageInfo into interface file To keep interface file format backward compatible, instead of using `Binary` instance for `InterfaceFile` we introduce functions to serialise and deserialise, which depends on the interface file version. - - - - - 77765665 by Mike Pilgrem at 2022-06-12T21:57:19+01:00 Fix haskell/haddock#783 Don't show button if --quickjump not present - - - - - b0e079b0 by mergify[bot] at 2022-06-13T11:49:37+00:00 Merge pull request haskell/haddock#1108 from mpilgrem/fix783 Fix haskell/haddock#783 Don't show button if --quickjump not present - - - - - 6c0292b1 by Hécate Moonlight at 2022-06-21T17:21:08+02:00 Update the contribution guide - - - - - e413b9fa by dependabot[bot] at 2022-06-21T23:38:19+02:00 Bump shell-quote from 1.6.1 to 1.7.3 in /haddock-api/resources/html (#1500) Bumps [shell-quote](https://github.com/substack/node-shell-quote) from 1.6.1 to 1.7.3. - [Release notes](https://github.com/substack/node-shell-quote/releases) - [Changelog](https://github.com/substack/node-shell-quote/blob/master/CHANGELOG.md) - [Commits](https://github.com/substack/node-shell-quote/compare/1.6.1...1.7.3) --- updated-dependencies: - dependency-name: shell-quote dependency-type: indirect ... Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - 29d0ef70 by romes at 2022-07-06T11:29:39+02:00 TTG: AST Updates for !8308 - - - - - 1bae7c87 by Alan Zimmerman at 2022-07-06T22:50:43+01:00 Match GHC changes for T21805 This brings in a newtype for FieldLabelString - - - - - 6fe8b988 by Phil de Joux at 2022-07-16T20:54:26+00:00 Bump hlint version to 3.4.1, the version with counts. (#1503) Redo the counts available with the --default option. - - - - - 48fb43af by Phil de Joux at 2022-07-19T09:32:55+02:00 Follow hlint suggestion: unused LANGUAGE pragma. (#1504) * Follow hlint suggestion: unused LANGUAGE pragma. * Ignore within modules to pass linting and pass tests. - - - - - c1cf1fa7 by Phil de Joux at 2022-07-24T13:45:59+02:00 Follow hlint suggestion: redundant $. (#1505) * Follow hlint suggestion: redundant $. * Remove $ and surplus blank lines in Operators. - - - - - 74777eb2 by Jade Lovelace at 2022-07-29T11:02:41+01:00 Fix hyperlinks to external items and modules (#1482) Fixes haskell/haddock#1481. There were two bugs in this: * We were assuming that we were always getting a relative path to the module in question, while Nix gives us file:// URLs sometimes. This change checks for those and stops prepending `..` to them. * We were not linking to the file under the module. This seems to have been a regression introduced by haskell/haddock#977. That is, the URLs were going to something like file:///nix/store/3bwbsy0llxxn1pixx3ll02alln56ivxy-ghc-9.0.2-doc/share/doc/ghc/html/libraries/base-4.15.1.0/src which does not have the appropriate HTML file or fragment for the item in question at the end. There is a remaining instance of the latter bug, but not in the hyperlinker: the source links to items reexported from other modules are also not including the correct file name. e.g. the reexport of Entity in esqueleto, from persistent. NOTE: This needs to get tested with relative-path located modules. It seems correct for Nix based on my testing. Testing strategy: ``` nix-shell '<nixpkgs>' --pure -A haskell.packages.ghc922.aeson mkdir /tmp/aesonbuild && cd /tmp/aesonbuild export out=/tmp/aesonbuild/out genericBuild ln -sf $HOME/co/haddock/haddock-api/resources . ./Setup haddock --with-haddock=$HOME/path/to/haddock/exec --hyperlink-source ``` (cherry picked from commit ab53ccf089ea703b767581ac14be0f6c78a7678a) - - - - - faa4cfcf by Hécate Moonlight at 2022-07-29T20:31:20+02:00 Merge pull request haskell/haddock#1516 from duog/9-4-backport-fix-hyperlinks Backport 9-4: Fix hyperlinks to external items and modules (#1482) - - - - - 5d2450f3 by Ben Gamari at 2022-08-05T17:41:15-04:00 Merge remote-tracking branch 'origin/ghc-9.4' - - - - - 63954f73 by Ben Gamari at 2022-08-05T19:08:36-04:00 Clean up build and testsuite for GHC 9.4 - - - - - d4568cb8 by Hécate Moonlight at 2022-08-05T19:10:49-04:00 Bump the versions - - - - - 505583a4 by Ben Gamari at 2022-08-06T13:58:27-04:00 Merge pull request haskell/haddock#1518 from bgamari/wip/ghc-9.4-merge Merge GHC 9.4 into `main` - - - - - 5706f6a4 by Ben Gamari at 2022-08-06T22:57:21-04:00 html-test: Testsuite changes for GHC 9.4.1 - - - - - 5f2a45a2 by Ben Gamari at 2022-08-15T14:33:05-04:00 doc: Fix a few minor ReST issues Sphinx was complaining about too-short title underlines. - - - - - 220e6410 by Ben Gamari at 2022-08-15T14:41:24-04:00 Merge branch 'main' into ghc-head - - - - - fbeb1b02 by Ben Gamari at 2022-08-15T14:45:16-04:00 Updates for GHC 9.5 - - - - - eee562eb by Vladislav Zavialov at 2022-08-15T14:46:13-04:00 HsToken ConDeclGADT con_dcolon - - - - - c5f073db by Ben Gamari at 2022-08-15T16:55:35-04:00 Updates for GHC 9.5 - - - - - 3f7ab242 by Vladislav Zavialov at 2022-08-15T16:55:35-04:00 HsToken ConDeclGADT con_dcolon - - - - - a18e473d by Ben Gamari at 2022-08-16T08:35:19-04:00 Merge branch 'wip/ghc-head-bump' into ghc-head - - - - - af0ff3a4 by M Farkas-Dyck at 2022-09-15T21:16:05+00:00 Disuse `mapLoc`. - - - - - a748fc38 by Matthew Farkas-Dyck at 2022-09-17T10:44:18+00:00 Scrub partiality about `NewOrData`. - - - - - 2758fb6c by John Ericson at 2022-09-18T03:27:37+02:00 Test output changed because of change to `base` Spooky, but I guess that is intended? - - - - - a7eec128 by Torsten Schmits at 2022-09-21T11:06:55+02:00 update tests for the move of tuples to GHC.Tuple.Prim - - - - - 461e7b9d by Ross Paterson at 2022-09-24T22:01:25+00:00 match implementation of GHC proposal haskell/haddock#106 (Define Kinds Without Promotion) - - - - - f7fd77ef by sheaf at 2022-10-17T14:53:01+02:00 Update Haddock for GHC MR !8563 (configuration of diagnostics) - - - - - 3d3e85ab by Vladislav Zavialov at 2022-10-22T23:04:06+03:00 Class layout info - - - - - cbde4cb0 by Simon Peyton Jones at 2022-10-25T23:19:18+01:00 Adapt to Constraint-vs-Type See haskell/haddock#21623 and !8750 - - - - - 7108ba96 by Tom Smeding at 2022-11-01T22:33:23+01:00 Remove outdated footnote about module re-exports The footnote is invalid with GHC 9.2.4 (and possibly earlier): the described behaviour in the main text works fine. - - - - - 206c6bc7 by Hécate Moonlight at 2022-11-01T23:00:46+01:00 Merge pull request haskell/haddock#1534 from tomsmeding/patch-1 - - - - - a57b4c4b by Andrew Lelechenko at 2022-11-21T00:39:52+00:00 Support mtl-2.3 - - - - - e9d62453 by Simon Peyton Jones at 2022-11-25T13:49:12+01:00 Track small API change in TyCon.hs - - - - - eb1c73f7 by Ben Gamari at 2022-12-07T08:46:21-05:00 Update for GhC 9.6 - - - - - 063268dd by Ben Gamari at 2022-12-07T11:26:32-05:00 Merge remote-tracking branch 'upstream/ghc-head' into HEAD - - - - - 4ca722fe by Ben Gamari at 2022-12-08T14:43:26-05:00 Bump bounds to accomodate base-4.18 - - - - - 340b7511 by Vladislav Zavialov at 2022-12-10T12:31:28+00:00 HsToken in HsAppKindTy - - - - - 946226ec by Ben Gamari at 2022-12-13T20:12:56-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - fd8faa66 by Ben Gamari at 2022-12-22T13:44:28-05:00 Bump GHC version to 9.7 - - - - - 2958aa9c by Ben Gamari at 2022-12-22T14:49:16-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 9e0fefd8 by Andrei Borzenkov at 2023-01-30T14:02:04+04:00 Rename () to Unit, Rename (,,...,,) to Tuple<n> - - - - - eb3968b5 by Ben Gamari at 2023-03-10T02:32:43-05:00 Bump versions for ghc-9.6 release - - - - - 4aeead36 by Adam Gundry at 2023-03-23T13:53:47+01:00 Adapt to warning categories changes - - - - - 642d8d60 by sheaf at 2023-03-29T13:35:56+02:00 Adapt to record field refactor This commit adapts to the changes in GHC MR !8686, which overhauls the treatment of record fields in the renamer, adding separate record field namespaces and entirely removing the GreName datatype. - - - - - ac8d4333 by doyougnu at 2023-03-29T11:11:44-04:00 Update UniqMap API - - - - - 7866fc86 by Ben Orchard at 2023-04-20T11:29:33+02:00 update classify with new tokens - - - - - ffcdd683 by Finley McIlwaine at 2023-04-24T09:36:18-06:00 Remove index-state - - - - - 05b70982 by Finley McIlwaine at 2023-04-26T08:16:31-06:00 `renameInterface` space leak fixes - Change logic for accumulation of names for which link warnings will be generated - Change handling of `--ignore-link-symbol` to allow qualified and unqualified names. Added to CHANGES.md - Some formatting changes and comments here and there - - - - - e5697d7c by Finley McIlwaine at 2023-04-27T18:46:36-06:00 Messy things - ghc-debug dependency and instrumentation - cabal.project custom with-compiler - hie.yaml files - traces and such - - - - - 0b8ef80b by Finley McIlwaine at 2023-05-02T18:08:52-06:00 Stop retaining GRE closures GRE closures should never be necessary to Haddock, so we never want to keep them on the heap. Despite that, they are retained by a lot of the data structures that Haddock makes use of. - Attempt to fix that situation by adding strictness to various computations and pruning the `ifaceInstances` field of `Interface` to a much thinner data type. - Removes the `ifaceFamInstances` field, as it was never used. - Move some of the attach instances types (e.g. `SimpleType`) to the types module - - - - - 8bda991b by Finley McIlwaine at 2023-05-08T16:07:51-06:00 Memory usage fixes - Refactor `ifaceDeclMap` to drastically reduce memory footprint. We no longer store all declarations associated with a given name, since we only cared to determine if the only declaration associated with a name was a value declaration. Change the `DeclMap` type to better reflect this. - Drop pre-renaming export items after the renaming step. Since the Hoogle backend used the pre-renamed export items, this isn't trivial. We now generate Hoogle output for exported declarations during the renaming step (if Hoogle output /should/ be generated), and store that with the renamed export item. - Slightly refactor Hoogle backend to handle the above change and allow for early generation of Hoogle output. - Remove the `ifaceRnDocMap` and `ifaceRnArgMap` fields of the `Interface` type, as they were never used. - Remove some unnecessary strictness - Remove a lot of dead code from `Syb` module - - - - - 1611ac0c by Finley McIlwaine at 2023-05-09T11:51:57-06:00 Unify ErrMsgM and IfM - Delete ErrMsgM, stop accumulating warnings in a writer - Make IfM a state monad, print warnings directly to stdout, move IfM type into types module - Drop ErrMsg = String synonym - Unset IORefs from plugin after they are read, preventing unnecessary retention of interfaces - - - - - 42d696ab by Finley McIlwaine at 2023-05-11T15:52:07-06:00 Thunk leak fixes The strictness introduced in this commit was motivated by observing thunk leaks in the eventlog2html output. - Refactor attach instances list comprehension to avoid large intermediate thunks - Refactor some HTML backend list comprehensions to avoid large intermediate thunks - Avoid thunks accumulating in documentation types or documentation parser - A lot of orphan NFData instances to allow us to force documentation values - - - - - 68561cf6 by Finley McIlwaine at 2023-05-11T17:02:10-06:00 Remove GHC debug dep - - - - - 10519e3d by Finley McIlwaine at 2023-05-15T12:40:48-06:00 Force HIE file path Removes a potential retainer of `ModSummary`s - - - - - 1e4a6ec6 by Finley McIlwaine at 2023-05-15T14:20:34-06:00 Re-add index-state, with-compiler, delete hie.yamls - - - - - a2363fe9 by Hécate Moonlight at 2023-05-15T22:45:16+02:00 Merge pull request haskell/haddock#1594 from FinleyMcIlwaine/finley/ghc-9.6-mem-fixes Reduce memory usage - - - - - e8a78383 by Finley McIlwaine at 2023-05-17T12:19:16-06:00 Merge branch ghc-9.6 into ghc-head - - - - - 22e25581 by Finley McIlwaine at 2023-05-17T12:20:23-06:00 Merge branch 'ghc-head' of gitlab.haskell.org:ghc/haddock into ghc-head - - - - - 41bbf0df by Bartłomiej Cieślar at 2023-05-24T08:57:58+02:00 changes to the WarningTxt cases Signed-off-by: Bartłomiej Cieślar <bcieslar2001 at gmail.com> - - - - - c686ba9b by Hécate Moonlight at 2023-06-01T14:03:02-06:00 Port the remains of Hi-Haddock - - - - - 9d8a85fd by Hécate Moonlight at 2023-06-01T14:03:06-06:00 Stdout for tests - - - - - 36331d07 by Finley McIlwaine at 2023-06-01T14:06:02-06:00 Formatting, organize imports - - - - - a06059b1 by Finley McIlwaine at 2023-06-01T14:06:04-06:00 Fix empty context confusion in Convert module - - - - - 379346ae by Finley McIlwaine at 2023-06-01T14:06:04-06:00 Fix associated type families in Hoogle output - - - - - fc6ea7ed by Finley McIlwaine at 2023-06-01T14:06:04-06:00 Fix test refs Accept several changes in Hoogle tests: Pretty printing logic no longer prints the `(Proxy (Proxy (...))` chain in Bug806 with parentheses. Since this test was only meant to verify that line breaks do not occur, accept the change. `tyThingToLHsDecl` is called for class and data declarations, which ends up "synifying" the type variables and giving unlifted types kind signatures. As a result, type variables of kind `Type -> Type` are now printed with kind signatures in Hoogle output. This could be changed by manually drop kind signatures from class variables in the Hoogle backend if the behavior is deemed unacceptable. Sometimes subordinate declarations are exported separate from their parent declarations (e.g. record selectors). In this case, a type signature is cobbled together for the export item in `extractDecl`. Since this type signature is very manually constructed, it may lack kind signatures of decls constructed from `tyThingToLHsDecl`. An example of this is the `type-sigs` Hoogle test. Change `*` to `Type` in Hoogle test refs. I don't think this will break Hoogle behavior, since it appears to not consider type signatures in search. I have not fully verified this. - - - - - e14b7e58 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Fix LaTeX backend test refs Changes to GHC pretty printing code have resulted in some differences to Haddock's LaTeX output. - Type variables are printed explicitly quantified in the LinearTypes test - Wildcard types in type family equations are now printed numbered, e.g. _1 _2, in the TypeFamilies3 test - Combined signatures in DefaultSignatures test are now documented as separate signatures - - - - - 41b5b296 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Formatting and test source updates - Stop using kind `*` in html test sources - Add TypeOperators where necessary to avoid warnings and future errors - Rename some test modules to match their module names - - - - - c640e2a2 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Fix missing deprecation warnings on record fields `lookupOccEnv` was used to resolve `OccNames` with warnings attached, but it doesn't look in the record field namespace. Thus, if a record field had a warning attached, it would not resolve and the warning map would not include it. This commit fixes by using `lookupOccEnv_WithFields` instead. - - - - - fad0c462 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Formatting and some comments - - - - - 751fd023 by Finley McIlwaine at 2023-06-01T14:11:41-06:00 Accept HTML test diffs All diffs now boil down to the expected differences resulting from declarations being reified from TyThings in hi-haddock. Surface syntax now has much less control over the syntax used in the documentation. - - - - - d835c845 by Finley McIlwaine at 2023-06-01T14:11:45-06:00 Adapt to new load' type - - - - - dcf776c4 by Finley McIlwaine at 2023-06-01T14:13:13-06:00 Update mkWarningMap and moduleWarning - - - - - 8e8432fd by Finley McIlwaine at 2023-06-01T14:28:54-06:00 Revert load' changes - - - - - aeb2982c by Finley McIlwaine at 2023-06-01T14:40:24-06:00 Accept change to Instances test in html-test Link to Data.Tuple instead of GHC.Tuple.Prim - - - - - 8adfdbac by Finley McIlwaine at 2023-06-01T15:53:17-06:00 Reset ghc dep to ^>= 9.6 - - - - - 2b1ce93d by Finley McIlwaine at 2023-06-06T07:50:04-06:00 Update CHANGES.md, user guide, recomp avoidance * Add --trace-args flag for tracing arguments received to standard output * Avoid recompiling due to changes in optimization flags * Update users guide and changes.md - - - - - f3da6676 by Finley McIlwaine at 2023-06-06T14:12:56-06:00 Add "Avoiding Recompilation" section to docs This section is a bit of a WIP due to the unstable nature of hi-haddock and the lack of tooling supporting it, but its a good start. - - - - - bf36c467 by Matthew Pickering at 2023-06-07T10:16:09+01:00 Revert back to e16e20d592a6f5d9ed1af17b77fafd6495242345 Neither of these MRs are ready to land yet which causes issues with other MRs which are ready to land and need haddock changes. - - - - - 421510a9 by Vladislav Zavialov at 2023-06-07T09:36:30+00:00 atSign has no unicode variant Prior to this change, atSign was defined as follows: atSign unicode = text (if unicode then "@" else "@") Yes, this is the same symbol '\64' and not your font playing tricks on you. Now we define: atSign = char '@' Both the LaTeX and the Xhtml backend are updated accordingly. - - - - - 3785c276 by Vladislav Zavialov at 2023-06-07T09:36:30+00:00 LaTeX: fix printing of type variable bindings Consider this type signature: kindOf :: forall {k} (a :: k). Proxy a -> Proxy k Prior to this fix, the LaTeX backend rendered it like this: kindOf :: forall k a. Proxy a -> Proxy k Now we preserve explicit specificity and kind annotations. - - - - - 0febf3a8 by Vladislav Zavialov at 2023-06-07T09:36:30+00:00 Add support for invisible binders in type declarations - - - - - 13e33bb3 by Finley McIlwaine at 2023-06-08T07:51:59-06:00 Add "Avoiding Recompilation" section to docs This section is a bit of a WIP due to the unstable nature of hi-haddock and the lack of tooling supporting it, but its a good start. - - - - - 3e5340ce by Finley McIlwaine at 2023-06-08T07:54:27-06:00 Add note about stubdir to recompilation docs - - - - - db7e84dc by Finley at 2023-06-08T08:11:03-06:00 Merge pull request haskell/haddock#1597 from haskell/finley/hi-haddock-9.6 hi-haddock for ghc 9.6 - - - - - 4e085d17 by Finley McIlwaine at 2023-06-14T13:41:06-06:00 Replace SYB traversals - - - - - 7b39aec5 by Finley McIlwaine at 2023-06-14T14:20:17-06:00 Test ref accepts, remove unused HaddockClsInst - - - - - df9c2090 by Finley McIlwaine at 2023-06-15T08:02:51-06:00 Use batchMsg for progress reporting during load With hi-haddock as is, there is an awkward silence during the load operation. This commit makes haddock use the default `batchMsg` Messager for progress reporting, and makes the default GHC verbosity level 1, so the user can see what GHC is doing. - - - - - f23679a8 by Hécate Moonlight at 2023-06-15T20:31:53+02:00 Merge pull request haskell/haddock#1600 from haskell/finley/hi-haddock-optim - - - - - a7982192 by Finley McIlwaine at 2023-06-15T15:02:16-06:00 hi-haddock squashed - - - - - c34f0c8d by Finley McIlwaine at 2023-06-15T16:22:03-06:00 Merge remote-tracking branch 'origin/ghc-9.6' into finley/hi-haddock-squashed - - - - - 40452797 by Bartłomiej Cieślar at 2023-06-16T12:26:04+02:00 Changes related to MR !10283 MR !10283 changes the alternatives for WarningTxt pass. This MR reflects those changes in the haddock codebase. Signed-off-by: Bartłomiej Cieślar <bcieslar2001 at gmail.com> - - - - - e58673bf by Ben Gamari at 2023-06-16T09:33:35-04:00 Bump GHC version to 9.8 - - - - - 74bdf972 by Ben Gamari at 2023-06-16T09:36:18-04:00 Merge commit 'fcaaad06770a26d35d4aafd65772dedadf17669c' into ghc-head - - - - - 418ee3dc by Finley McIlwaine at 2023-06-20T15:39:05-04:00 Remove NFData SourceText, IfaceWarnings updates The NFData SourceText instance is now available in GHC Handle mod_iface mi_warns now being IfaceWarnings - - - - - 62f31380 by Finley McIlwaine at 2023-06-20T15:39:05-04:00 Accept Instances.hs test output Due to ghc!10469. - - - - - a8f2fc0e by Ben Gamari at 2023-06-20T15:48:08-04:00 Test fixes for "Fix associated data family doc structure items" Associated data families were being given their own export DocStructureItems, which resulted in them being documented separately from their classes in haddocks. This commit fixes it. - - - - - cb1ac33e by Bartłomiej Cieślar at 2023-06-21T12:56:02-04:00 Changes related to MR !10283 MR !10283 changes the alternatives for WarningTxt pass. This MR reflects those changes in the haddock codebase. Signed-off-by: Bartłomiej Cieślar <bcieslar2001 at gmail.com> - - - - - 9933e10b by Ben Gamari at 2023-06-21T12:56:02-04:00 Bump GHC version to 9.8 - - - - - fe8c18b6 by Ben Gamari at 2023-06-21T15:36:29-04:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - c61a0d5b by Ben Gamari at 2023-06-21T16:10:51-04:00 Bump GHC version to 9.9 - - - - - 0c2a756e by sheaf at 2023-07-07T13:45:12+02:00 Avoid incomplete record update in Haddock Hoogle This commit avoids running into an incomplete record update warning in the Hoogle backend of Haddock. This was only noticed now, because incomplete record updates were broken in GHC 9.6. Now that they are fixed, we have to avoid running into them! - - - - - f9b952a7 by Ben Gamari at 2023-07-21T11:58:05-04:00 Bump base bound to <4.20 For GHC 9.8. - - - - - 1b27e151 by Vladislav Zavialov at 2023-08-02T10:42:11+00:00 Check for puns (see ghc#23368) - - - - - 457341fd by Vladislav Zavialov at 2023-08-02T10:42:11+00:00 Remove fake exports for (~), List, and Tuple<n> The old reasoning no longer applies, nowadays those names can be mentioned in export lists. - - - - - bf3dcddf by Vladislav Zavialov at 2023-08-02T10:42:11+00:00 Fix pretty-printing of Solo and MkSolo - - - - - 495b2241 by Matthew Pickering at 2023-09-01T13:02:07+02:00 Fix issue with duplicate reexported definitions (T23616) When a class method was reexported, it's default methods were also showing up in the generated html page. The simplest and most non-invasive fix is to not look for the default method if we are just exporting the class method.. because the backends are just showing default methods when the whole class is exported. In general it would be worthwhile to rewrite this bit of code I think as the logic and what gets included is split over `lookupDocs` and `availExportDecl` it would be clearer to combine the two. The result of lookupDocs is always just passed to availExportDecl so it seems simpler and more obvious to just write the function directly. - - - - - 6551824d by Finley McIlwaine at 2023-09-05T13:06:57-07:00 Remove fake export of `FUN` from Prelude This prevents `data FUN` from being shown at the top of the Prelude docs. Fixes \#23920 on GHC. - - - - - 9ab5a448 by Alan Zimmerman at 2023-09-08T18:26:53+01:00 Match changes in wip/az/T23885-unicode-funtycon - - - - - 4d08364e by Alan Zimmerman at 2023-10-31T19:46:45+00:00 EPA: match changes in GHC - EPA: Comments in AnchorOperation - EPA: Remove EpaEofComment - - - - - e7da0d25 by Alan Zimmerman at 2023-11-05T11:20:31+00:00 EPA: match changes in GHC, l2l cleanup - - - - - 4ceac14d by Alan Zimmerman at 2023-11-11T15:16:41+00:00 EPA: Replace Anchor with EpaLocation Match GHC - - - - - 94fb8d47 by Alan Zimmerman at 2023-11-29T18:10:26+00:00 Match GHC, No comments in EpaDelta for comments - - - - - 32d208e1 by Vladislav Zavialov at 2023-12-12T20:41:36+03:00 EPA: Match changes to LHsToken removal - - - - - eebdd316 by Apoorv Ingle at 2024-01-23T13:49:12+00:00 Changes for haskell/haddock#18324 - - - - - ae856a82 by Matthew Pickering at 2024-02-05T12:22:39+00:00 ghc-internals fallout - - - - - f8429266 by Jade at 2024-02-08T14:56:50+01:00 Adjust test for ghc MR !10993 - - - - - 6d1e2386 by Alan Zimmerman at 2024-02-13T22:00:28+03:00 EPA: Match changes to HsParTy and HsFunTy - - - - - 9c588f19 by Fendor at 2024-02-14T11:05:36+01:00 Adapt to GHC giving better Name's for linking - - - - - 778e1db3 by Andrei Borzenkov at 2024-02-16T16:12:07+03:00 Namespace specifiers for fixity signatures - - - - - 826c5b47 by Torsten Schmits at 2024-02-21T13:17:05+01:00 rename GHC.Tuple.Prim to GHC.Tuple - - - - - 2cff14d5 by Ben Gamari at 2024-02-22T09:35:56-05:00 Bump bounds - - - - - f49376b3 by Ben Gamari at 2024-02-22T09:35:56-05:00 Allow `@since` annotations in export lists Here we extend Haddock to admit `@since` annotations in export lists. These can be attached to most export list items (although not subordinate lists). These annotations supercede the declaration's `@since` annotation in produced Haddocks. - - - - - b5aa93df by Ben Gamari at 2024-02-22T12:09:06-05:00 Allow package-qualified @since declarations - - - - - 8f5957f2 by Ben Gamari at 2024-02-22T13:55:19-05:00 Documentation changes from ghc-internal restructuring Previously many declarations (e.g. `Int`) were declared to have a "home" in `Prelude`. However, now Haddock instead chooses to put these in more specific homes (e.g. `Data.Int`). Given that the "home" decision is driven by heuristics and in general these changes seem quite reasonable I am accepting them: * `Int` moved from `Prelude` to `Data.Int` * `(~)` moved from `Prelude` to `Data.Type.Equality` * `Type` moved from `GHC.Types` to `Data.Kind` * `Maybe` moved from `Prelude` to `Data.Maybe` * `Bool` moved from `Prelude` to `Data.Bool` * `Ordering` moved from `Prelude` to `Data.Ord` As well, more identifiers are now hyperlinked; it's not immediately clear *why*, but it is an improvement nevertheless. - - - - - ec33fec3 by Ben Gamari at 2024-02-22T20:36:24-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 30cfd251 by Torsten Schmits at 2024-02-24T13:00:42-05:00 rename GHC.Tuple.Prim to GHC.Tuple - - - - - 732db81d by Ben Gamari at 2024-02-24T19:12:18-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 86bf7010 by Ben Gamari at 2024-02-27T19:28:10-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 4b6e76b5 by Patrick at 2024-03-07T22:09:30+08:00 fix haskell/haddock#24493, with module name introduced in hieAst The accompanies haddoc PR with GHC PR https://gitlab.haskell.org/ghc/ghc/-/merge_requests/12153 Two things have been done: 1. Link is introduced to every `X` in `module X where`, since we introduce the module name to HieAst, 2. `{-# LINE 4 "hypsrc-test/src/PositionPragmas.hs" #-}` is added before the `module PositionPragmas where` in ` hypsrc-test/ref/src/PositionPragmas.html `.It ensures only a single hieAst for file `hypsrc-test/src/PositionPragmas.hs` is generated. - - - - - 635abccc by Ben Gamari at 2024-03-08T17:09:06-05:00 Bump ghc version to 9.10 - - - - - 5b934048 by Ben Gamari at 2024-03-08T18:50:12-05:00 Bump base upper bound - - - - - b30d134e by Ben Gamari at 2024-03-08T18:50:44-05:00 Testsuite output update - - - - - 9bdf3586 by Ben Gamari at 2024-03-09T21:37:44-05:00 Merge branch 'ghc-9.10' into ghc-head - - - - - cec76981 by Ben Gamari at 2024-03-09T21:54:00-05:00 Bump GHC version to 9.11 - - - - - 4c59feb7 by Ben Gamari at 2024-03-09T22:15:01-05:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-head - - - - - bee54c24 by Krzysztof Gogolewski at 2024-04-19T11:13:00+02:00 Update quantification order following GHC haskell/haddock#23764 - - - - - 2814eb89 by Ben Gamari at 2024-04-19T18:57:05+02:00 hypsrc-test: Fix output of PositionPragmas.html - - - - - a27c6a49 by Fendor at 2024-04-22T10:13:03+02:00 Adapt to UserData split - - - - - 1efc5a7a by Fendor at 2024-04-22T10:13:03+02:00 Adapt to BinHandle split - - - - - e2094df3 by damhiya at 2024-04-28T23:52:00+09:00 Make read accepts binary integer formats CLC proposal : https://github.com/haskell/core-libraries-committee/issues/177 - - - - - c62239b7 by Sylvain Henry at 2024-04-29T10:35:00+02:00 Fix tests for T22229 - - - - - 1c2fd963 by Alan Zimmerman at 2024-04-29T23:17:00-04:00 EPA: Preserve comments in Match Pats Closes #24708 Closes #24715 Closes #24734 - - - - - 4189d17e by Sylvain Henry at 2024-04-29T23:17:42-04:00 LLVM: better unreachable default destination in Switch (#24717) See added note. Co-authored-by: Siddharth Bhat <siddu.druid at gmail.com> - - - - - a3725c88 by Cheng Shao at 2024-04-29T23:18:20-04:00 ci: enable wasm jobs for MRs with wasm label This patch enables wasm jobs for MRs with wasm label. Previously the wasm label didn't actually have any effect on the CI pipeline, and full-ci needed to be applied to run wasm jobs which was a waste of runners when working on the wasm backend, hence the fix here. - - - - - 702f7964 by Matthew Pickering at 2024-04-29T23:18:56-04:00 Make interface files and object files depend on inplace .conf file A potential fix for #24737 - - - - - 728af21e by Cheng Shao at 2024-04-30T05:30:23-04:00 utils: remove obsolete vagrant scripts Vagrantfile has long been removed in !5288. This commit further removes the obsolete vagrant scripts in the tree. - - - - - 36f2c342 by Cheng Shao at 2024-04-30T05:31:00-04:00 Update autoconf scripts Scripts taken from autoconf 948ae97ca5703224bd3eada06b7a69f40dd15a02 - - - - - ecbf22a6 by Ben Gamari at 2024-04-30T05:31:36-04:00 ghcup-metadata: Drop output_name field This is entirely redundant to the filename of the URL. There is no compelling reason to name the downloaded file differently from its source. - - - - - c56d728e by Zubin Duggal at 2024-04-30T22:45:09-04:00 testsuite: Handle exceptions in framework_fail when testdir is not initialised When `framework_fail` is called before initialising testdir, it would fail with an exception reporting the testdir not being initialised instead of the actual failure. Ensure we report the actual reason for the failure instead of failing in this way. One way this can manifest is when trying to run a test that doesn't exist using `--only` - - - - - d5bea4d6 by Alan Zimmerman at 2024-04-30T22:45:45-04:00 EPA: Fix range for GADT decl with sig only Closes #24714 - - - - - 4d78c53c by Sylvain Henry at 2024-05-01T17:23:06-04:00 Fix TH dependencies (#22229) Add a dependency between Syntax and Internal (via module reexport). - - - - - 37e38db4 by Sylvain Henry at 2024-05-01T17:23:06-04:00 Bump haddock submodule - - - - - ca13075c by Sylvain Henry at 2024-05-01T17:23:47-04:00 JS: cleanup to prepare for #24743 - - - - - 40026ac3 by Alan Zimmerman at 2024-05-01T22:45:07-04:00 EPA: Preserve comments for PrefixCon Preserve comments in fun (Con {- c1 -} a b) = undefined Closes #24736 - - - - - 92134789 by Hécate Moonlight at 2024-05-01T22:45:42-04:00 Correct `@since` metadata in HpcFlags It was introduced in base-4.20, not 4.22. Fix #24721 - - - - - a580722e by Cheng Shao at 2024-05-02T08:18:45-04:00 testsuite: fix req_target_smp predicate - - - - - ac9c5f84 by Andreas Klebinger at 2024-05-02T08:18:45-04:00 STM: Remove (unused)coarse grained locking. The STM code had a coarse grained locking mode guarded by #defines that was unused. This commit removes the code. - - - - - 917ef81b by Andreas Klebinger at 2024-05-02T08:18:45-04:00 STM: Be more optimistic when validating in-flight transactions. * Don't lock tvars when performing non-committal validation. * If we encounter a locked tvar don't consider it a failure. This means in-flight validation will only fail if committing at the moment of validation is *guaranteed* to fail. This prevents in-flight validation from failing spuriously if it happens in parallel on multiple threads or parallel to thread comitting. - - - - - 167a56a0 by Alan Zimmerman at 2024-05-02T08:19:22-04:00 EPA: fix span for empty \case(s) In instance SDecide Nat where SZero %~ (SSucc _) = Disproved (\case) Ensure the span for the HsLam covers the full construct. Closes #24748 - - - - - 9bae34d8 by doyougnu at 2024-05-02T15:41:08-04:00 testsuite: expand size testing infrastructure - closes #24191 - adds windows_skip, wasm_skip, wasm_arch, find_so, _find_so - path_from_ghcPkg, collect_size_ghc_pkg, collect_object_size, find_non_inplace functions to testsuite - adds on_windows and req_dynamic_ghc predicate to testsuite The design is to not make the testsuite too smart and simply offload to ghc-pkg for locations of object files and directories. - - - - - b85b1199 by Sylvain Henry at 2024-05-02T15:41:49-04:00 GHCi: support inlining breakpoints (#24712) When a breakpoint is inlined, its context may change (e.g. tyvars in scope). We must take this into account and not used the breakpoint tick index as its sole identifier. Each instance of a breakpoint (even with the same tick index) now gets a different "info" index. We also need to distinguish modules: - tick module: module with the break array (tick counters, status, etc.) - info module: module having the CgBreakInfo (info at occurrence site) - - - - - 649c24b9 by Oleg Grenrus at 2024-05-03T20:45:42-04:00 Expose constructors of SNat, SChar and SSymbol in ghc-internal - - - - - d603f199 by Mikolaj Konarski at 2024-05-03T20:46:19-04:00 Add DCoVarSet to PluginProv (!12037) - - - - - ba480026 by Serge S. Gulin at 2024-05-03T20:47:01-04:00 JS: Enable more efficient packing of string data (fixes #24706) - - - - - be1e60ee by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Track in-scope variables in ruleCheckProgram This small patch fixes #24726, by tracking in-scope variables properly in -drule-check. Not hard to do! - - - - - 58408c77 by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Add a couple more HasCallStack constraints in SimpleOpt Just for debugging, no effect on normal code - - - - - 70e245e8 by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Add comments to Prep.hs This documentation patch fixes a TODO left over from !12364 - - - - - e5687186 by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Use HasDebugCallStack, rather than HasCallStack - - - - - 631cefec by Cheng Shao at 2024-05-03T20:48:17-04:00 driver: always merge objects when possible This patch makes the driver always merge objects with `ld -r` when possible, and only fall back to calling `ar -L` when merge objects command is unavailable. This completely reverts !8887 and !12313, given more fixes in Cabal seems to be needed to avoid breaking certain configurations and the maintainence cost is exceeding the behefits in this case :/ - - - - - 1dacb506 by Ben Gamari at 2024-05-03T20:48:53-04:00 Bump time submodule to 1.14 As requested in #24528. ------------------------- Metric Decrease: ghc_bignum_so rts_so Metric Increase: cabal_syntax_dir rts_so time_dir time_so ------------------------- - - - - - 4941b90e by Ben Gamari at 2024-05-03T20:48:53-04:00 Bump terminfo submodule to current master - - - - - 43d48b44 by Cheng Shao at 2024-05-03T20:49:30-04:00 wasm: use scheduler.postTask() for context switch when available This patch makes use of scheduler.postTask() for JSFFI context switch when it's available. It's a more principled approach than our MessageChannel based setImmediate() implementation, and it's available in latest version of Chromium based browsers. - - - - - 08207501 by Cheng Shao at 2024-05-03T20:50:08-04:00 testsuite: give pre_cmd for mhu-perf 5x time - - - - - bf3d4db0 by Alan Zimmerman at 2024-05-03T20:50:43-04:00 EPA: Preserve comments for pattern synonym sig Closes #24749 - - - - - c49493f2 by Matthew Pickering at 2024-05-04T06:02:57-04:00 tests: Widen acceptance window for dir and so size tests These are testing things which are sometimes out the control of a GHC developer. Therefore we shouldn't fail CI if something about these dependencies change because we can't do anything about it. It is still useful to have these statistics for visualisation in grafana though. Ticket #24759 - - - - - 9562808d by Matthew Pickering at 2024-05-04T06:02:57-04:00 Disable rts_so test It has already manifested large fluctuations and destabilising CI Fixes #24762 - - - - - fc24c5cf by Ryan Scott at 2024-05-04T06:03:33-04:00 unboxedSum{Type,Data}Name: Use GHC.Types as the module Unboxed sum constructors are now defined in the `GHC.Types` module, so if you manually quote an unboxed sum (e.g., `''Sum2#`), you will get a `Name` like: ```hs GHC.Types.Sum2# ``` The `unboxedSumTypeName` function in `template-haskell`, however, mistakenly believes that unboxed sum constructors are defined in `GHC.Prim`, so `unboxedSumTypeName 2` would return an entirely different `Name`: ```hs GHC.Prim.(#|#) ``` This is a problem for Template Haskell users, as it means that they can't be sure which `Name` is the correct one. (Similarly for `unboxedSumDataName`.) This patch fixes the implementations of `unboxedSum{Type,Data}Name` to use `GHC.Types` as the module. For consistency with `unboxedTupleTypeName`, the `unboxedSumTypeName` function now uses the non-punned syntax for unboxed sums (`Sum<N>#`) as the `OccName`. Fixes #24750. - - - - - 7eab4e01 by Alan Zimmerman at 2024-05-04T16:14:55+01:00 EPA: Widen stmtslist to include last semicolon Closes #24754 - - - - - 06f7db40 by Teo Camarasu at 2024-05-05T00:19:38-04:00 doc: Fix type error in hs_try_putmvar example - - - - - af000532 by Moritz Schuler at 2024-05-05T06:30:58-04:00 Fix parsing of module names in CLI arguments closes issue #24732 - - - - - da74e9c9 by Ben Gamari at 2024-05-05T06:31:34-04:00 ghc-platform: Add Setup.hs The Hadrian bootstrapping script relies upon `Setup.hs` to drive its build. Addresses #24761. - - - - - 35d34fde by Alan Zimmerman at 2024-05-05T12:52:40-04:00 EPA: preserve comments in class and data decls Fix checkTyClHdr which was discarding comments. Closes #24755 - - - - - 03c5dfbf by Simon Peyton Jones at 2024-05-05T12:53:15-04:00 Fix a float-out error Ticket #24768 showed that the Simplifier was accidentally destroying a join point. It turned out to be that we were sending a bottoming join point to the top, accidentally abstracting over /other/ join points. Easily fixed. - - - - - adba68e7 by John Ericson at 2024-05-05T19:35:56-04:00 Substitute bindist files with Hadrian not configure The `ghc-toolchain` overhaul will eventually replace all this stuff with something much more cleaned up, but I think it is still worth making this sort of cleanup in the meantime so other untanglings and dead code cleaning can procede. I was able to delete a fair amount of dead code doing this too. `LLVMTarget_CPP` is renamed to / merged with `LLVMTarget` because it wasn't actually turned into a valid CPP identifier. (Original to 1345c7cc42c45e63ab1726a8fd24a7e4d4222467, actually.) Progress on #23966 Co-Authored-By: Sylvain Henry <hsyl20 at gmail.com> - - - - - 18f4ff84 by Alan Zimmerman at 2024-05-05T19:36:32-04:00 EPA: fix mkHsOpTyPV duplicating comments Closes #24753 - - - - - a19201d4 by Matthew Craven at 2024-05-06T19:54:29-04:00 Add test cases for #24664 ...since none are present in the original MR !12463 fixing this issue. - - - - - 46328a49 by Alan Zimmerman at 2024-05-06T19:55:05-04:00 EPA: preserve comments in data decls Closes #24771 - - - - - 3b51995c by Andrei Borzenkov at 2024-05-07T14:39:40-04:00 Rename Solo# data constructor to MkSolo# (#24673) - data Solo# a = (# a #) + data Solo# a = MkSolo# a And `(# foo #)` syntax now becomes just a syntactic sugar for `MkSolo# a`. - - - - - 4d59abf2 by Arsen Arsenović at 2024-05-07T14:40:24-04:00 Add the cmm_cpp_is_gcc predicate to the testsuite A future C-- test called T24474-cmm-override-g0 relies on the GCC-specific behaviour of -g3 implying -dD, which, in turn, leads to it emitting #defines past the preprocessing stage. Clang, at least, does not do this, so the test would fail if ran on Clang. As the behaviour here being tested is ``-optCmmP-g3'' undoing effects of the workaround we apply as a fix for bug #24474, and the workaround was for GCC-specific behaviour, the test needs to be marked as fragile on other compilers. - - - - - 25b0b404 by Arsen Arsenović at 2024-05-07T14:40:24-04:00 Split out the C-- preprocessor, and make it pass -g0 Previously, C-- was processed with the C preprocessor program. This means that it inherited flags passed via -optc. A flag that is somewhat often passed through -optc is -g. At certain -g levels (>=2), GCC starts emitting defines *after* preprocessing, for the purposes of debug info generation. This is not useful for the C-- compiler, and, in fact, causes lexer errors. We can suppress this effect (safely, if supported) via -g0. As a workaround, in older versions of GCC (<=10), GCC only emitted defines if a certain set of -g*3 flags was passed. Newer versions check the debug level. For the former, we filter out those -g*3 flags and, for the latter, we specify -g0 on top of that. As a compatible and effective solution, this change adds a C-- preprocessor distinct from the C compiler and preprocessor, but that keeps its flags. The command line produced for C-- preprocessing now looks like: $pgmCmmP $optCs_without_g3 $g0_if_supported $optCmmP Closes: https://gitlab.haskell.org/ghc/ghc/-/issues/24474 - - - - - 9b4129a5 by Andreas Klebinger at 2024-05-08T13:24:20-04:00 -fprof-late: Only insert cost centres on functions/non-workfree cafs. They are usually useless and doing so for data values comes with a large compile time/code size overhead. Fixes #24103 - - - - - 259b63d3 by Sebastian Graf at 2024-05-08T13:24:57-04:00 Simplifier: Preserve OccInfo on DataAlt fields when case binder is dead (#24770) See the adjusted `Note [DataAlt occ info]`. This change also has a positive repercussion on `Note [Combine case alts: awkward corner]`. Fixes #24770. We now try not to call `dataConRepStrictness` in `adjustFieldsIdInfo` when all fields are lazy anyway, leading to a 2% ghc/alloc decrease in T9675. Metric Decrease: T9675 - - - - - 31b28cdb by Sebastian Graf at 2024-05-08T13:24:57-04:00 Kill seqRule, discard dead seq# in Prep (#24334) Discarding seq#s in Core land via `seqRule` was problematic; see #24334. So instead we discard certain dead, discardable seq#s in Prep now. See the updated `Note [seq# magic]`. This fixes the symptoms of #24334. - - - - - b2682534 by Rodrigo Mesquita at 2024-05-10T01:47:51-04:00 Document NcgImpl methods Fixes #19914 - - - - - 4d3acbcf by Zejun Wu at 2024-05-10T01:48:28-04:00 Make renamer to be more flexible with parens in the LHS of the rules We used to reject LHS like `(f a) b` in RULES and requires it to be written as `f a b`. It will be handy to allow both as the expression may be more readable with extra parens in some cases when infix operator is involved. Espceially when TemplateHaskell is used, extra parens may be added out of user's control and result in "valid" rules being rejected and there are not always ways to workaround it. Fixes #24621 - - - - - ab840ce6 by Ben Gamari at 2024-05-10T01:49:04-04:00 IPE: Eliminate dependency on Read Instead of encoding the closure type as decimal string we now simply represent it as an integer, eliminating the need for `Read` in `GHC.Internal.InfoProv.Types.peekInfoProv`. Closes #24504. ------------------------- Metric Decrease: T24602_perf_size size_hello_artifact ------------------------- - - - - - a9979f55 by Cheng Shao at 2024-05-10T01:49:43-04:00 testsuite: fix testwsdeque with recent clang This patch fixes compilation of testwsdeque.c with recent versions of clang, which will fail with the error below: ``` testwsdeque.c:95:33: error: warning: format specifies type 'long' but the argument has type 'void *' [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~~ ^ testwsdeque.c:95:39: error: warning: format specifies type 'int' but the argument has type 'StgWord' (aka 'unsigned long') [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~ ^~~ | %lu testwsdeque.c:133:42: error: error: incompatible function pointer types passing 'void (void *)' to parameter of type 'OSThreadProc *' (aka 'void *(*)(void *)') [-Wincompatible-function-pointer-types] 133 | createOSThread(&ids[n], "thief", thief, (void*)(StgWord)n); | ^~~~~ /workspace/ghc/_build/stage1/lib/../lib/x86_64-linux-ghc-9.11.20240502/rts-1.0.2/include/rts/OSThreads.h:193:51: error: note: passing argument to parameter 'startProc' here 193 | OSThreadProc *startProc, void *param); | ^ 2 warnings and 1 error generated. ``` - - - - - c2b33fc9 by Rodrigo Mesquita at 2024-05-10T01:50:20-04:00 Rename pre-processor invocation args Small clean up. Uses proper names for the various groups of arguments that make up the pre-processor invocation. - - - - - 2b1af08b by Cheng Shao at 2024-05-10T01:50:55-04:00 ghc-heap: fix typo in ghc-heap cbits - - - - - fc2d6de1 by Jade at 2024-05-10T21:07:16-04:00 Improve performance of Data.List.sort(By) This patch improves the algorithm to sort lists in base. It does so using two strategies: 1) Use a four-way-merge instead of the 'default' two-way-merge. This is able to save comparisons and allocations. 2) Use `(>) a b` over `compare a b == GT` and allow inlining and specialization. This mainly benefits types with a fast (>). Note that this *may* break instances with a *malformed* Ord instance where `a > b` is *not* equal to `compare a b == GT`. CLC proposal: https://github.com/haskell/core-libraries-committee/issues/236 Fixes #24280 ------------------------- Metric Decrease: MultiLayerModulesTH_Make T10421 T13719 T15164 T18698a T18698b T1969 T9872a T9961 T18730 WWRec T12425 T15703 ------------------------- - - - - - 1012e8aa by Matthew Pickering at 2024-05-10T21:07:52-04:00 Revert "ghcup-metadata: Drop output_name field" This reverts commit ecbf22a6ac397a791204590f94c0afa82e29e79f. This breaks the ghcup metadata generation on the nightly jobs. - - - - - daff1e30 by Jannis at 2024-05-12T13:38:35-04:00 Division by constants optimization - - - - - 413217ba by Andreas Klebinger at 2024-05-12T13:39:11-04:00 Tidy: Add flag to expose unfoldings if they take dictionary arguments. Add the flag `-fexpose-overloaded-unfoldings` to be able to control this behaviour. For ghc's boot libraries file size grew by less than 1% when it was enabled. However I refrained from enabling it by default for now. I've also added a section on specialization more broadly to the users guide. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot Metric Increase: T12425 T13386 hard_hole_fits ------------------------- - - - - - c5d89412 by Zubin Duggal at 2024-05-13T22:19:53-04:00 Don't store a GlobalRdrEnv in `mi_globals` for GHCi. GHCi only needs the `mi_globals` field for modules imported with :module +*SomeModule. It uses this field to make the top level environment in `SomeModule` available to the repl. By default, only the first target in the command line parameters is "star" loaded into GHCi. Other modules have to be manually "star" loaded into the repl. Storing the top level GlobalRdrEnv for each module is very wasteful, especially given that we will most likely never need most of these environments. Instead we store only the information needed to reconstruct the top level environment in a module, which is the `IfaceTopEnv` data structure, consisting of all import statements as well as all top level symbols defined in the module (not taking export lists into account) When a particular module is "star-loaded" into GHCi (as the first commandline target, or via an explicit `:module +*SomeModule`, we reconstruct the top level environment on demand using the `IfaceTopEnv`. - - - - - d65bf4a2 by Fendor at 2024-05-13T22:20:30-04:00 Add perf regression test for `-fwrite-if-simplified-core` - - - - - 2c0f8ddb by Andrei Borzenkov at 2024-05-13T22:21:07-04:00 Improve pattern to type pattern transformation (23739) `pat_to_type_pat` function now can handle more patterns: - TuplePat - ListPat - LitPat - NPat - ConPat Allowing these new constructors in type patterns significantly increases possible shapes of type patterns without `type` keyword. This patch also changes how lookups in `lookupOccRnConstr` are performed, because we need to fall back into types when we didn't find a constructor on data level to perform `ConPat` to type transformation properly. - - - - - be514bb4 by Cheng Shao at 2024-05-13T22:21:43-04:00 hadrian: fix hadrian building with ghc-9.10.1 - - - - - ad38e954 by Cheng Shao at 2024-05-13T22:21:43-04:00 linters: fix lint-whitespace compilation with ghc-9.10.1 - - - - - a593f284 by Andreas Klebinger at 2024-05-15T07:32:10-04:00 Expand the `inline` rule to look through casts/ticks. Fixes #24808 - - - - - b1e0c313 by Cheng Shao at 2024-05-15T07:32:46-04:00 testsuite: bump PartialDownSweep timeout to 5x on wasm32 - - - - - b2227487 by Fendor at 2024-05-15T17:14:06-04:00 Add Eq and Ord instance to `IfaceType` We add an `Ord` instance so that we can store `IfaceType` in a `Data.Map` container. This is required to deduplicate `IfaceType` while writing `.hi` files to disk. Deduplication has many beneficial consequences to both file size and memory usage, as the deduplication enables implicit sharing of values. See issue #24540 for more motivation. The `Ord` instance would be unnecessary if we used a `TrieMap` instead of `Data.Map` for the deduplication process. While in theory this is clerarly the better option, experiments on the agda code base showed that a `TrieMap` implementation has worse run-time performance characteristics. To the change itself, we mostly derive `Eq` and `Ord`. This requires us to change occurrences of `FastString` with `LexicalFastString`, since `FastString` has no `Ord` instance. We change the definition of `IfLclName` to a newtype of `LexicalFastString`, to make such changes in the future easier. Bump haddock submodule for IfLclName changes - - - - - d368f9a6 by Fendor at 2024-05-15T17:14:06-04:00 Move out LiteralMap to avoid cyclic module dependencies - - - - - 2fcc09fd by Fendor at 2024-05-15T17:14:06-04:00 Add deduplication table for `IfaceType` The type `IfaceType` is a highly redundant, tree-like data structure. While benchmarking, we realised that the high redundancy of `IfaceType` causes high memory consumption in GHCi sessions when byte code is embedded into the `.hi` file via `-fwrite-if-simplified-core` or `-fbyte-code-and-object-code`. Loading such `.hi` files from disk introduces many duplicates of memory expensive values in `IfaceType`, such as `IfaceTyCon`, `IfaceTyConApp`, `IA_Arg` and many more. We improve the memory behaviour of GHCi by adding an additional deduplication table for `IfaceType` to the serialisation of `ModIface`, similar to how we deduplicate `Name`s and `FastString`s. When reading the interface file back, the table allows us to automatically share identical values of `IfaceType`. To provide some numbers, we evaluated this patch on the agda code base. We loaded the full library from the `.hi` files, which contained the embedded core expressions (`-fwrite-if-simplified-core`). Before this patch: * Load time: 11.7 s, 2.5 GB maximum residency. After this patch: * Load time: 7.3 s, 1.7 GB maximum residency. This deduplication has the beneficial side effect to additionally reduce the size of the on-disk interface files tremendously. For example, on agda, we reduce the size of `.hi` files (with `-fwrite-if-simplified-core`): * Before: 101 MB on disk * Now: 24 MB on disk This has even a beneficial side effect on the cabal store. We reduce the size of the store on disk: * Before: 341 MB on disk * Now: 310 MB on disk Note, none of the dependencies have been compiled with `-fwrite-if-simplified-core`, but `IfaceType` occurs in multiple locations in a `ModIface`. We also add IfaceType deduplication table to .hie serialisation and refactor .hie file serialisation to use the same infrastrucutre as `putWithTables`. Bump haddock submodule to accomodate for changes to the deduplication table layout and binary interface. - - - - - 36aa7cf1 by Fendor at 2024-05-15T17:14:06-04:00 Add run-time configurability of `.hi` file compression Introduce the flag `-fwrite-if-compression=<n>` which allows to configure the compression level of writing .hi files. The motivation is that some deduplication operations are too expensive for the average use case. Hence, we introduce multiple compression levels with variable impact on performance, but still reduce the memory residency and `.hi` file size on disk considerably. We introduce three compression levels: * `1`: `Normal` mode. This is the least amount of compression. It deduplicates only `Name` and `FastString`s, and is naturally the fastest compression mode. * `2`: `Safe` mode. It has a noticeable impact on .hi file size and is marginally slower than `Normal` mode. In general, it should be safe to always use `Safe` mode. * `3`: `Full` deduplication mode. Deduplicate as much as we can, resulting in minimal .hi files, but at the cost of additional compilation time. Reading .hi files doesn't need to know the initial compression level, and can always deserialise a `ModIface`, as we write out a byte that indicates the next value has been deduplicated. This allows users to experiment with different compression levels for packages, without recompilation of dependencies. Note, the deduplication also has an additional side effect of reduced memory consumption to implicit sharing of deduplicated elements. See https://gitlab.haskell.org/ghc/ghc/-/issues/24540 for example where that matters. ------------------------- Metric Decrease: MultiLayerModulesDefsGhciWithCore T16875 T21839c T24471 hard_hole_fits libdir ------------------------- - - - - - 1e63a6fb by Matthew Pickering at 2024-05-15T17:14:07-04:00 Introduce regression tests for `.hi` file sizes Add regression tests to track how `-fwrite-if-compression` levels affect the size of `.hi` files. - - - - - 639d742b by M Farkas-Dyck at 2024-05-15T17:14:49-04:00 TTG: ApplicativeStatement exist only in Rn and Tc Co-Authored-By: romes <rodrigo.m.mesquita at gmail.com> - - - - - aa7b336b by Jade at 2024-05-15T23:06:17-04:00 Documentation: Improve documentation for symbols exported from System.IO - - - - - c561de8f by Jade at 2024-05-15T23:06:54-04:00 Improve suggestions for language extensions - When suggesting Language extensions, also suggest Extensions which imply them - Suggest ExplicitForAll and GADTSyntax instead of more specific extensions - Rephrase suggestion to include the term 'Extension' - Also moves some flag specific definitions out of Session.hs into Flags.hs (#24478) Fixes: #24477 Fixes: #24448 Fixes: #10893 - - - - - 4c7ae2a1 by Andreas Klebinger at 2024-05-15T23:07:30-04:00 Testsuite: Check if llvm assembler is available for have_llvm - - - - - bc672166 by Torsten Schmits at 2024-05-15T23:08:06-04:00 refactor quadratic search in warnMissingHomeModules - - - - - 7875e8cb by Torsten Schmits at 2024-05-15T23:08:06-04:00 add test that runs MakeDepend on thousands of modules - - - - - b84b91f5 by Adam Gundry at 2024-05-16T15:32:06-04:00 Representation-polymorphic HasField (fixes #22156) This generalises the HasField class to support representation polymorphism, so that instead of type HasField :: forall {k} . k -> Type -> Type -> Constraint we have type HasField :: forall {k} {r_rep} {a_rep} . k -> TYPE r_rep -> TYPE a_rep -> Constraint - - - - - 05285090 by Matthew Pickering at 2024-05-16T15:32:43-04:00 Bump os-string submodule to 2.0.2.2 Closes #24786 - - - - - 886ab43a by Cheng Shao at 2024-05-17T01:34:50-04:00 rts: do not prefetch mark_closure bdescr in non-moving gc when ASSERTS_ENABLED This commit fixes a small an oversight in !12148: the prefetch logic in non-moving GC may trap in debug RTS because it calls Bdescr() for mark_closure which may be a static one. It's fine in non-debug RTS because even invalid bdescr addresses are prefetched, they will not cause segfaults, so this commit implements the most straightforward fix: don't prefetch mark_closure bdescr when assertions are enabled. - - - - - b38dcf39 by Teo Camarasu at 2024-05-17T01:34:50-04:00 rts: Allocate non-moving segments with megablocks Non-moving segments are 8 blocks long and need to be aligned. Previously we serviced allocations by grabbing 15 blocks, finding an aligned 8 block group in it and returning the rest. This proved to lead to high levels of fragmentation as a de-allocating a segment caused an 8 block gap to form, and this could not be reused for allocation. This patch introduces a segment allocator based around using entire megablocks to service segment allocations in bulk. When there are no free segments, we grab an entire megablock and fill it with aligned segments. As the megablock is free, we can easily guarantee alignment. Any unused segments are placed on a free list. It only makes sense to free segments in bulk when all of the segments in a megablock are freeable. After sweeping, we grab the free list, sort it, and find all groups of segments where they cover the megablock and free them. This introduces a period of time when free segments are not available to the mutator, but the risk that this would lead to excessive allocation is low. Right after sweep, we should have an abundance of partially full segments, and this pruning step is relatively quick. In implementing this we drop the logic that kept NONMOVING_MAX_FREE segments on the free list. We also introduce an eventlog event to log the amount of pruned/retained free segments. See Note [Segment allocation strategy] Resolves #24150 ------------------------- Metric Decrease: T13253 T19695 ------------------------- - - - - - 710665bd by Cheng Shao at 2024-05-17T01:35:30-04:00 rts: fix I/O manager compilation errors for win32 target This patch fixes I/O manager compilation errors for win32 target discovered when cross-compiling to win32 using recent clang: ``` rts/win32/ThrIOManager.c:117:7: error: error: call to undeclared function 'is_io_mng_native_p'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 117 | if (is_io_mng_native_p ()) { | ^ | 117 | if (is_io_mng_native_p ()) { | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) rts/fs.c:143:28: error: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes] 143 | int setErrNoFromWin32Error () { | ^ | void | 143 | int setErrNoFromWin32Error () { | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) rts/win32/ConsoleHandler.c:227:9: error: error: call to undeclared function 'interruptIOManagerEvent'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 227 | interruptIOManagerEvent (); | ^ | 227 | interruptIOManagerEvent (); | ^ rts/win32/ConsoleHandler.c:227:9: error: note: did you mean 'getIOManagerEvent'? | 227 | interruptIOManagerEvent (); | ^ rts/include/rts/IOInterface.h:27:10: error: note: 'getIOManagerEvent' declared here 27 | void * getIOManagerEvent (void); | ^ | 27 | void * getIOManagerEvent (void); | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) rts/win32/ConsoleHandler.c:196:9: error: error: call to undeclared function 'setThreadLabel'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 196 | setThreadLabel(cap, t, "signal handler thread"); | ^ | 196 | setThreadLabel(cap, t, "signal handler thread"); | ^ rts/win32/ConsoleHandler.c:196:9: error: note: did you mean 'postThreadLabel'? | 196 | setThreadLabel(cap, t, "signal handler thread"); | ^ rts/eventlog/EventLog.h:118:6: error: note: 'postThreadLabel' declared here 118 | void postThreadLabel(Capability *cap, | ^ | 118 | void postThreadLabel(Capability *cap, | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) ``` - - - - - 28b9cee0 by Rodrigo Mesquita at 2024-05-17T01:36:05-04:00 configure: Check C99-compat for Cmm preprocessor Fixes #24815 - - - - - 8927e0c3 by Andreas Klebinger at 2024-05-17T01:36:41-04:00 Ensure `tcHasFixedRuntimeRep (# #)` returns True. - - - - - 04179044 by doyougnu at 2024-05-17T09:00:32-04:00 testsuite: make find_so regex less general Closes #24759 Background. In MR !12372 we began tracking shared object files and directories sizes for dependencies. However, this broke release builds because release builds alter the filenames swapping "in-place" for a hash. This was not considered in the MR and thus broke release pipelines. Furthermore, the rts_so test was found to be wildly varying and was therefore disabled in !12561. This commit fixes both of these issues: - fix the rts_so test by making the regex less general, now the rts_so test and all other foo.so tests must match "libHS<some-lib>-<version>-<hash|'in-place>-<ghc>". This prevents the rts_so test from accidentally matching different rts variants such as rts_threaded, which was the cause of the wild swings after !12372. - add logic to match either a hash or the string in-place. This should make the find_so function build agnostic. - - - - - 0962b50d by Andreas Klebinger at 2024-05-17T09:01:08-04:00 TagAnalysis: Treat all bottom ids as tagged during analysis. Ticket #24806 showed that we also need to treat dead end thunks as tagged during the analysis. - - - - - 7eb9f184 by Ben Gamari at 2024-05-17T11:23:37-04:00 Remove haddock submodule In preparation for merge into the GHC, as proposed in #23178. - - - - - 47b14dcc by Fendor at 2024-05-17T11:28:17-04:00 Adapt to `IfLclName` newtype changes (cherry picked from commit a711607e29b925f3d69e27c5fde4ba655c711ff1) - - - - - 6cc6681d by Fendor at 2024-05-17T11:28:17-04:00 Add IfaceType deduplication table to interface file serialisation Although we do not really need it in the interface file serialisation, as the deserialisation uses `getWithUserData`, we need to mirror the structure `getWithUserData` expects. Thus, we write essentially an empty `IfaceType` table at the end of the file, as the interface file doesn't reference `IfaceType`. (cherry picked from commit c9bc29c6a708483d2abc3d8ec9262510ce87ca61) - - - - - b9721206 by Ben Gamari at 2024-05-17T11:30:22-04:00 ghc-tags.yaml: Initial commit - - - - - 074e7d8f by Ben Gamari at 2024-05-17T11:31:29-04:00 fourmolu: Add configuration - - - - - 151b1736 by Ben Gamari at 2024-05-17T11:32:52-04:00 Makefile: Rework for use by haddock developers Previously the Makefile was present only for GHC's old make-based build system. Now since the make-based build system is gone we can use it for more useful ends. - - - - - a7dcf13b by Ben Gamari at 2024-05-17T11:36:14-04:00 Reformat with fourmolu Using previously-added configuration and `fourmolu -i .` Note that we exclude the test-cases (`./{hoogle,html-hypsrc,latex}-test`) as they are sensitive to formatting. - - - - - 0ea6017b by Ben Gamari at 2024-05-17T11:40:04-04:00 Add 'utils/haddock/' from commit 'a7dcf13bfbb97b20e75cc8ce650e2bb628db4660' git-subtree-dir: utils/haddock git-subtree-mainline: 7eb9f1849b1c72a1c61dee88462b4244550406f3 git-subtree-split: a7dcf13bfbb97b20e75cc8ce650e2bb628db4660 - - - - - aba1d304 by Hécate Moonlight at 2024-05-17T11:40:48-04:00 Add exceptions to the dangling notes list - - - - - 527bfbfb by Hécate Moonlight at 2024-05-17T11:40:52-04:00 Add haddock to the whitespace lint ignore list - - - - - 43274677 by Ben Gamari at 2024-05-17T11:41:20-04:00 git-blame-ignore-revs: Ignore haddock reformatting - - - - - 0e679e37 by Fendor at 2024-05-18T00:27:24-04:00 Pass cpp options to the CC builder in hadrian - - - - - bb40244e by Sylvain Henry at 2024-05-18T00:28:06-04:00 JS: fix allocation constant (fix #24746) - - - - - 646d30ab by Jade at 2024-05-18T19:23:31+02:00 Add highlighting for inline-code snippets in haddock - - - - - 64459a3e by Hécate Moonlight at 2024-05-19T08:42:27-04:00 haddock: Add a .readthedocs.yml file for online documentation - - - - - 7d3d9bbf by Serge S. Gulin at 2024-05-19T18:47:05+00:00 Unicode: General Category size test (related #24789) Added trivial size performance test which involves unicode general category usage via `read`. The `read` itself uses general category to detect spaces. The purpose for this test is to measure outcome of applying improvements at General Category representation in code discussed at #24789. - - - - - 8e04efcf by Alan Zimmerman at 2024-05-19T21:29:34-04:00 EPA: Remove redundant code Remove unused epAnnAnns function various cases for showAstData that no longer exist - - - - - 071d7a1e by Rodrigo Mesquita at 2024-05-20T10:55:16-04:00 Improve docs on closed type families in hs-boots Fixes #24776 - - - - - d9e2c119 by Torsten Schmits at 2024-05-20T10:55:52-04:00 Use default deviation for large-project test This new performance test has the purpose of detecting regressions in complexity in relation to the number of modules in a project, so 1% deviation is way too small to avoid false positives. - - - - - 20b0136a by Ben Gamari at 2024-05-22T00:31:39-04:00 ghcup-metadata: Various fixes from 9.10.1 Use Debian 12/x86-64, Debian 10/aarch64, and Debian 11/aarch64 bindists where possible. - - - - - 6838a7c3 by Sylvain Henry at 2024-05-22T00:32:23-04:00 Reverse arguments to stgCallocBytes (fix #24828) - - - - - f50f46c3 by Fendor at 2024-05-22T00:32:59-04:00 Add log messages for Iface serialisation compression level Fix the label of the number of 'IfaceType' entries in the log message. Add log message for the compression level that is used to serialise a an interface file. Adds `Outputable` instance for 'CompressionIFace'. - - - - - 3bad5d55 by Hécate Moonlight at 2024-05-22T00:33:40-04:00 base: Update doctests outputs ghc-internal: Update doctests outputs - - - - - 9317c6fb by David Binder at 2024-05-22T00:34:21-04:00 haddock: Fix the testsuites of the haddock-library - Apply all the metadata revisions from Hackage to the cabal file. - Fix the `ParserSpec.hs` file in the `spec` testsuite of haddock-library. - Make `CHANGES.md` an extra-doc-file instead of an extra-source-file. - - - - - 54073b02 by David Binder at 2024-05-22T00:34:21-04:00 haddock: Fix parser of @since pragma The testsuite contained tests for annotations of the form `@since foo-bar-0.5.0`, but the parser was written incorrectly. - - - - - ede6ede3 by Matthew Pickering at 2024-05-22T00:34:57-04:00 Fix nightly pages job It seems likely broken by 9f99126a which moved `index.html` from the root folder into `docs/` folder. Fixes #24840 - - - - - b7bcf729 by Cheng Shao at 2024-05-22T00:35:32-04:00 autoconf: remove unused context diff check This patch removes redundant autoconf check for the context diff program given it isn't actually been used anywhere, especially since make removal. - - - - - ea2fe66e by Hécate Moonlight at 2024-05-22T00:36:13-04:00 haddock: Rework the contributing guide - - - - - 0f302a94 by Hécate Moonlight at 2024-05-22T00:36:52-04:00 haddock: Add module relationships diagrams of haddock-api and haddock-library - - - - - d1a9f34f by Hécate Moonlight at 2024-05-22T00:36:52-04:00 Add instructions - - - - - b880ee80 by Hécate Moonlight at 2024-05-22T00:36:52-04:00 Add SVG outputs - - - - - 6d7e6ad8 by Ben Gamari at 2024-05-22T13:40:05-04:00 rts: Fix size of StgOrigThunkInfo frames Previously the entry code of the `stg_orig_thunk` frame failed to account for the size of the profiling header as it hard-coded the frame size. Fix this. Fixes #24809. - - - - - c645fe40 by Fendor at 2024-05-22T13:40:05-04:00 Add regression test T24809 for stg_orig_thunk_info_frame size - - - - - 4181aa40 by Andreas Klebinger at 2024-05-22T13:40:42-04:00 bindists: Check for existence of share folder before trying to copy it. This folder isn't distributed in windows bindists A lack of doing so resulted us copying loads of files twice. - - - - - d216510e by Matthew Pickering at 2024-05-22T13:40:42-04:00 Remove ad-hoc installation of mingw toolchain in relocatable bindists This reverts 616ac30026e8dd7d2ebb98d92dde071eedf5d951 The choice about whether to install mingw is taken in the installation makefile. This is also broken on non-windows systems. The actual issue was the EnableDistroToolchain variable wasn't declared in mk/config.mk and therefore the check to install mingw was failing. - - - - - 7b4c1998 by Cheng Shao at 2024-05-22T21:52:52-04:00 testsuite: fix T17920 for wasm backend T17920 was marked as fragile on wasm before; it can be trivially fixed by avoiding calling variadic printf() in cmm. - - - - - c739383b by Cheng Shao at 2024-05-22T21:53:29-04:00 testsuite: bump T22744 timeout to 5x - - - - - c4c6d714 by Cheng Shao at 2024-05-22T21:54:06-04:00 testsuite: don't attempt to detect host cpu features when testing cross ghc The testsuite driver CPU feature detection logic only detects host CPU and only makes sense when we are not testing a cross GHC. - - - - - 3d9e4ce6 by Simon Peyton Jones at 2024-05-22T21:54:43-04:00 Better skolemisation As #24810 showed, it is (a little) better to skolemise en-bloc, so that Note [Let-bound skolems] fires more often. See Note [Skolemisation en bloc] in GHC.Tc.Utils.Instantiate. - - - - - a3cd3a1d by Ryan Scott at 2024-05-22T21:55:19-04:00 Add missing parenthesizePat in cvtp We need to ensure that the output of `cvtp` is parenthesized (at precedence `sigPrec`) so that any pattern signatures with a surrounding pattern signature can parse correctly. Fixes #24837. - - - - - 4bb2a7cc by Hécate Moonlight at 2024-05-22T21:55:59-04:00 [base] Document the memory overhead of ByteArray Add a diagram that shows the constituent parts of a ByteArray and their memory overhead. - - - - - 8b2a016a by Hécate Moonlight at 2024-05-22T21:56:38-04:00 Haddock: Add MR template for Haddock - - - - - ead75532 by Peter Trommler at 2024-05-23T02:28:05-04:00 PPC: Support ELF v2 on powerpc64 big-endian Detect ELF v2 on PowerPC 64-bit systems. Check for `_CALL_ELF` preprocessor macro. Fixes #21191 - - - - - 9d4c10f2 by Hécate Kleidukos at 2024-05-23T02:28:44-04:00 gitlab: Add @Kleidukos to CODEOWNERS for utils/haddock - - - - - 28e64170 by Preetham Gujjula at 2024-05-23T07:20:48-04:00 haddock: Add cabal-fmt to tools for `make style` - - - - - 00126a89 by Andrei Borzenkov at 2024-05-23T07:21:24-04:00 haddock: fix verbosity option parsing - - - - - a3e0b68b by Ryan Hendrickson at 2024-05-23T15:52:03-04:00 base: specify tie-breaking behavior of min, max, and related list/Foldable functions - - - - - bdcc0f37 by doyougnu at 2024-05-24T07:51:18-04:00 cmm: add word <-> double/float bitcast - closes: #25331 This is the last step in the project plan described in #25331. This commit: - adds bitcast operands for x86_64, LLVM, aarch64 - For PPC and i386 we resort to using the cmm implementations - renames conversion MachOps from Conv to Round|Truncate - - - - - f0d257f7 by Krzysztof Gogolewski at 2024-05-24T07:51:55-04:00 StgToByteCode: minor refactor Some functions in StgToByteCode were filtering out void arguments. However, StgToByteCode is called after unarisation: the void arguments should have been removed earlier. Instead of filtering out, we assert that the args are non-void. - - - - - 03137fd2 by Krzysztof Gogolewski at 2024-05-24T07:51:55-04:00 StgToByteCode: minor refactor `layoutNativeCall` was always called with a `primRepCmmType platform` callback. Hence we can put it inside of `layoutNativeCall` rather than repeat it. - - - - - 27c430f3 by David Binder at 2024-05-24T07:52:38-04:00 haddock: Remove compatibility shims for GHC < 8.4 from haddock-library - - - - - 8dd8a076 by Cheng Shao at 2024-05-24T07:53:14-04:00 compiler: avoid saving foreign call target to local when there are no caller-save GlobalRegs This patch makes the STG->Cmm backend avoid saving foreign call target to local when there are no caller-save GlobalRegs. Since 321941a8ebe25192cdeece723e1058f2f47809ea, when we lower a foreign call, we unconditionally save the foreign call target to a temporary local first, then rely on cmmSink to clean it up later, which only happens with -fcmm-sink (implied by -O) and not in unoptimized code. And this is troublesome for the wasm backend NCG, which needs to infer a foreign call target symbol's type signature from the Cmm call site. Previously, the NCG has been emitting incorrect type signatures for unoptimized code, which happens to work with `wasm-ld` most of the time, but this is never future-proof against upstream toolchain updates, and it causes horrible breakages when LTO objects are included in linker input. Hence this patch. - - - - - 986df1ab by Cheng Shao at 2024-05-24T07:53:14-04:00 testsuite: add callee-no-local regression test - - - - - 52d62e2a by Sylvain Henry at 2024-05-24T07:53:57-04:00 Fix HasCallStack leftovers from !12514 / #24726 - - - - - c5e00c35 by crumbtoo at 2024-05-24T07:54:38-04:00 user_guide: Fix typo in MultiWayIf chapter Close #24829 - - - - - bd323b0e by Ben Gamari at 2024-05-24T07:55:15-04:00 base: Ensure that CHANGELOG is included in extra-source-files This was missed in the `ghc-internal` split. Closes #24831. - - - - - 1bfd32e8 by Ben Gamari at 2024-05-24T07:55:15-04:00 base: Fix changelog reference to setBacktraceMechanismState (cherry picked from commit b63f7ba01fdfd98a01d2f0dec8d9262b3e595c5d) - - - - - 43e8e4f3 by Sylvain Henry at 2024-05-24T12:16:43-04:00 Float/double unboxed literal support for HexFloatLiterals (fix #22155) - - - - - 4a7f4713 by Fendor at 2024-05-24T12:17:19-04:00 Improve test labels for binary interface file size tests Test labels for binary interface file sizes are hard to read and overly verbose at the same time. Extend the name for the metric title, but shorten it in the actual comparison table. - - - - - 14e554cf by Zubin Duggal at 2024-05-24T12:17:55-04:00 Revert "Fix haskell/haddock#783 Don't show button if --quickjump not present" This reverts commit 7776566531e72c415f66dd3b13da9041c52076aa. - - - - - f56838c3 by Ben Gamari at 2024-05-24T12:17:55-04:00 Fix default hyperlinked sources pattern Previously this didn't include the `%M` token which manifested as broken links to the hyperlinked sources of reexports of declarations defined in other packages. Fixes haddock#1628. (cherry picked from commit 1432bcc943d41736eca491ecec4eb9a6304dab36) - - - - - 42efa62c by Ben Gamari at 2024-05-24T12:17:55-04:00 Make DocPaths a proper data type (cherry picked from commit 7f3a5c4da0023ae47b4c376c9b1ea2d706c94d8c) - - - - - 53d9ceb3 by Ben Gamari at 2024-05-24T12:17:55-04:00 haddock: Bump version to 2.30 (cherry picked from commit 994989ed3d535177e57b778629726aeabe8c7602) - - - - - e4db1112 by Zubin Duggal at 2024-05-24T12:17:55-04:00 haddock-api: allow base 4.20 and ghc 9.11 - - - - - e294f7a2 by PHO at 2024-05-24T12:17:55-04:00 Add a flag "threaded" for building haddock with the threaded RTS GHC isn't guaranteed to have a threaded RTS. There should be a way to build it with the vanilla one. (cherry picked from commit 75a94e010fb5b0236c670d22b04f5472397dc15d) - - - - - 51165bc9 by Andreas Klebinger at 2024-05-25T10:58:03-04:00 Update ticky counter event docs. Add the info about the info table address and json fields. Fixes #23200 - - - - - 98597ad5 by Sylvain Henry at 2024-05-25T10:58:45-04:00 Export extractPromotedList (#24866) This can be useful in plugins. - - - - - 228dcae6 by Teo Camarasu at 2024-05-28T13:12:24+00:00 template-haskell: Move wired-ins to ghc-internal Thus we make `template-haskell` reinstallable and keep it as the public API for Template Haskell. All of the wired-in identifiers are moved to `ghc-internal`. This necessitates also moving much of `ghc-boot-th` into `ghc-internal`. These modules are then re-exported from `ghc-boot-th` and `template-haskell`. To avoid a dependency on `template-haskell` from `lib:ghc`, we instead depend on the TH ASTs via `ghc-boot-th`. As `template-haskell` no longer has special status, we can drop the logic adding an implicit dependency on `template-haskell` when using TH. We can also drop the `template-haskell-next` package, which was previously used when bootstrapping. When bootstrapping, we need to vendor the TH AST modules from `ghc-internal` into `ghc-boot-th`. This is controlled by the `bootstrap` cabal flag as before. See Note [Bootstrapping Template Haskell]. We split out a GHC.Internal.TH.Lift module resolving #24752. This module is only built when not bootstrapping. Resolves #24703 ------------------------- Metric Increase: ghc_boot_th_dir ghc_boot_th_so ------------------------- - - - - - 62dded28 by Teo Camarasu at 2024-05-28T13:12:24+00:00 testsuite: mark tests broken by #24886 Now that `template-haskell` is no longer wired-in. These tests are triggering #24886, and so need to be marked broken. - - - - - 3ca72ad9 by Cheng Shao at 2024-05-30T02:57:06-04:00 rts: fix missing function prototypes in ClosureMacros.h - - - - - e0029e3d by Andreas Klebinger at 2024-05-30T02:57:43-04:00 UnliftedFFITypes: Allow `(# #)` as argument when it's the only argument. This allows representing functions like: int foo(void); to be imported like this: foreign import ccall "a_number_c" c_number :: (# #) -> Int64# Which can be useful when the imported function isn't implicitly stateful. - - - - - d0401335 by Matthew Pickering at 2024-05-30T02:58:19-04:00 ci: Update ci-images commit for fedora38 image The fedora38 nightly job has been failing for quite a while because `diff` was no longer installed. The ci-images bump explicitly installs `diffutils` into these images so hopefully they now pass again. - - - - - 3c97c74a by Jan Hrček at 2024-05-30T02:58:58-04:00 Update exactprint docs - - - - - 77760cd7 by Jan Hrček at 2024-05-30T02:58:58-04:00 Incorporate review feedback - - - - - 87591368 by Jan Hrček at 2024-05-30T02:58:58-04:00 Remove no longer relevant reference to comments - - - - - 05f4f142 by Jan Hrček at 2024-05-30T02:58:59-04:00 Replace outdated code example - - - - - 45a4a5f3 by Andreas Klebinger at 2024-05-30T02:59:34-04:00 Reword error resulting from missing -XBangPatterns. It can be the result of either a bang pattern or strict binding, so now we say so instead of claiming it must be a bang pattern. Fixes #21032 - - - - - e17f2df9 by Cheng Shao at 2024-05-30T03:00:10-04:00 testsuite: bump MultiLayerModulesDefsGhciReload timeout to 10x - - - - - 7a660042 by Cheng Shao at 2024-05-30T14:42:29-04:00 rts: ensure gc_thread/gen_workspace is allocated with proper alignment gc_thread/gen_workspace are required to be aligned by 64 bytes. However, this property has not been properly enforced before, and numerous alignment violations at runtime has been caught by UndefinedBehaviorSanitizer that look like: ``` rts/sm/GC.c:1167:8: runtime error: member access within misaligned address 0x0000027a3390 for type 'gc_thread' (aka 'struct gc_thread_'), which requires 64 byte alignment 0x0000027a3390: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1167:8 rts/sm/GC.c:1184:13: runtime error: member access within misaligned address 0x0000027a3450 for type 'gen_workspace' (aka 'struct gen_workspace_'), which requires 64 byte alignment 0x0000027a3450: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1184:13 ``` This patch fixes the gc_thread/gen_workspace misalignment issue by explicitly allocating them with alignment constraint. - - - - - c77a48af by Cheng Shao at 2024-05-30T14:42:29-04:00 rts: fix an unaligned load in nonmoving gc This patch fixes an unaligned load in nonmoving gc by ensuring the closure address is properly untagged first before attempting to prefetch its header. The unaligned load is reported by UndefinedBehaviorSanitizer: ``` rts/sm/NonMovingMark.c:921:9: runtime error: member access within misaligned address 0x0042005f3a71 for type 'StgClosure' (aka 'struct StgClosure_'), which requires 8 byte alignment 0x0042005f3a71: note: pointer points here 00 00 00 98 43 13 8e 12 7f 00 00 50 3c 5f 00 42 00 00 00 58 17 b7 92 12 7f 00 00 89 cb 5e 00 42 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/NonMovingMark.c:921:9 ``` This issue had previously gone unnoticed since it didn't really harm runtime correctness, the invalid header address directly loaded from a tagged pointer is only used as prefetch address and will not cause segfaults. However, it still should be corrected because the prefetch would be rendered useless by this issue, and untagging only involves a single bitwise operation without memory access so it's cheap enough to add. - - - - - 05c4fafb by Cheng Shao at 2024-05-30T14:42:29-04:00 rts: use __builtin_offsetof to implement STG_FIELD_OFFSET This patch fixes the STG_FIELD_OFFSET macro definition by using __builtin_offsetof, which is what gcc/clang uses to implement offsetof in standard C. The previous definition that uses NULL pointer involves subtle undefined behavior in C and thus reported by UndefinedBehaviorSanitizer as well: ``` rts/Capability.h:243:58: runtime error: member access within null pointer of type 'Capability' (aka 'struct Capability_') SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Capability.h:243:58 ``` - - - - - 5ff83bfc by Sylvain Henry at 2024-05-30T14:43:10-04:00 JS: remove useless h$CLOCK_REALTIME (#23202) - - - - - 95ef2d58 by Matthew Pickering at 2024-05-30T14:43:47-04:00 ghcup-metadata: Fix metadata generation There were some syntax errors in the generation script which were preventing it from running. I have tested this with: ``` nix shell --extra-experimental-features nix-command -f .gitlab/rel_eng -c ghcup-metadata --metadata ghcup-0.0.7.yaml --date="2024-05-27" --pipeline-id=95534 --version=9.11.20240525 ``` which completed successfully. - - - - - 1bc66ee4 by Jakob Bruenker at 2024-05-30T14:44:22-04:00 Add diagrams to Arrows documentation This adds diagrams to the documentation of Arrows, similar to the ones found on https://www.haskell.org/arrows/. It does not add diagrams for ArrowChoice for the time being, mainly because it's not clear to me how to visually distinguish them from the ones for Arrow. Ideally, you might want to do something like highlight the arrows belonging to the same tuple or same Either in common colors, but that's not really possible with unicode. - - - - - d10a1c65 by Matthew Craven at 2024-05-30T23:35:48-04:00 Make UnsafeSNat et al. into pattern synonyms ...so that they do not cause coerce to bypass the nominal role on the corresponding singleton types when they are imported. See Note [Preventing unsafe coercions for singleton types] and the discussion at #23478. This also introduces unsafeWithSNatCo (and analogues for Char and Symbol) so that users can still access the dangerous coercions that importing the real constructors would allow, but only in a very localized way. - - - - - 0958937e by Cheng Shao at 2024-05-30T23:36:25-04:00 hadrian: build C/C++ with split sections when enabled When split sections is enabled, ensure -fsplit-sections is passed to GHC as well when invoking GHC to compile C/C++; and pass -ffunction-sections -fdata-sections to gcc/clang when compiling C/C++ with the hadrian Cc builder. Fixes #23381. - - - - - 02b1f91e by Cheng Shao at 2024-05-30T23:36:25-04:00 driver: build C/C++ with -ffunction-sections -fdata-sections when split sections is enabled When -fsplit-sections is passed to GHC, pass -ffunction-sections -fdata-sections to gcc/clang when building C/C++. Previously, -fsplit-sections was only respected by the NCG/LLVM backends, but not the unregisterised backend; the GHC driver did not pass -fdata-sections and -ffunction-sections to the C compiler, which resulted in excessive executable sizes. Fixes #23381. ------------------------- Metric Decrease: size_hello_artifact size_hello_unicode ------------------------- - - - - - fd47e2e3 by Cheng Shao at 2024-05-30T23:37:00-04:00 testsuite: mark process005 as fragile on JS - - - - - 34a04ea1 by Matthew Pickering at 2024-05-31T06:08:36-04:00 Add -Wderiving-typeable to -Wall Deriving `Typeable` does nothing, and it hasn't done for a long while. There has also been a warning for a long while which warns you about uselessly deriving it but it wasn't enabled in -Wall. Fixes #24784 - - - - - 75fa7b0b by Matthew Pickering at 2024-05-31T06:08:36-04:00 docs: Fix formatting of changelog entries - - - - - 303c4b33 by Preetham Gujjula at 2024-05-31T06:09:21-04:00 docs: Fix link to injective type families paper Closes #24863 - - - - - df97e9a6 by Ben Gamari at 2024-05-31T06:09:57-04:00 ghc-internal: Fix package description The previous description was inherited from `base` and was inappropriate for `ghc-internal`. Also fix the maintainer and bug reporting fields. Closes #24906. - - - - - bf0737c0 by Cheng Shao at 2024-05-31T06:10:33-04:00 compiler: remove ArchWasm32 special case in cmmDoCmmSwitchPlans This patch removes special consideration for ArchWasm32 in cmmDoCmmSwitchPlans, which means the compiler will now disable cmmImplementSwitchPlans for wasm unreg backend, just like unreg backend of other targets. We enabled it in the past to workaround some compile-time panic in older versions of LLVM, but those panics are no longer present, hence no need to keep this workaround. - - - - - 7eda4bd2 by Cheng Shao at 2024-05-31T15:52:04-04:00 utils: add hie.yaml config file for ghc-config Add hie.yaml to ghc-config project directory so it can be edited using HLS. - - - - - 1e5752f6 by Cheng Shao at 2024-05-31T15:52:05-04:00 hadrian: handle findExecutable "" gracefully hadrian may invoke findExecutable "" at run-time due to a certain program is not found by configure script. Which is fine and findExecutable is supposed to return Nothing in this case. However, on Windows there's a directory bug that throws an exception (see https://github.com/haskell/directory/issues/180), so we might as well use a wrapper for findExecutable and handle exceptions gracefully. - - - - - 4eb5ad09 by Cheng Shao at 2024-05-31T15:52:05-04:00 configure: do not set LLC/OPT/LLVMAS fallback values when FIND_LLVM_PROG fails When configure fails to find LLC/OPT/LLVMAS within supported version range, it used to set "llc"/"opt"/"clang" as fallback values. This behavior is particularly troublesome when the user has llc/opt/clang with other versions in their PATH and run the testsuite, since hadrian will incorrectly assume have_llvm=True and pass that to the testsuite driver, resulting in annoying optllvm test failures (#23186). If configure determines llc/opt/clang wouldn't work, then we shouldn't pretend it'll work at all, and the bindist configure will invoke FIND_LLVM_PROG check again at install time anyway. - - - - - 5f1afdf7 by Sylvain Henry at 2024-05-31T15:52:52-04:00 Introduce UniqueSet and use it to replace 'UniqSet Unique' 'UniqSet Unique' represents a set of uniques as a 'Map Unique Unique', which is wasting space (associated key/value are always the same). Fix #23572 and #23605 - - - - - e0aa42b9 by crumbtoo at 2024-05-31T15:53:33-04:00 Improve template-haskell haddocks Closes #15822 - - - - - ae170155 by Olivier Benz at 2024-06-01T09:35:17-04:00 Bump max LLVM version to 19 (not inclusive) - - - - - 92aa65ea by Matthew Pickering at 2024-06-01T09:35:17-04:00 ci: Update CI images to test LLVM 18 The debian12 image in this commit has llvm 18 installed. - - - - - adb1fe42 by Serge S. Gulin at 2024-06-01T09:35:53-04:00 Unicode: make ucd2haskell build-able again ucd2haskell tool used streamly library which version in cabal was out of date. It is updated to the latest version at hackage with deprecated parts rewritten. Also following fixes were applied to existing code in suppose that from its last run the code structure was changed and now it was required to be up to date with actual folder structures: 1. Ghc module path environment got a suffix with `src`. 2. Generated code got 2.1 `GHC.Internal` prefix for `Data.*`. 2.2 `GHC.Unicode.Internal` swapped on `GHC.Internal.Unicode` according to actual structure. - - - - - ad56fd84 by Jade at 2024-06-01T09:36:29-04:00 Replace 'NB' with 'Note' in error messages - - - - - 6346c669 by Cheng Shao at 2024-06-01T09:37:04-04:00 compiler: fix -ddump-cmm-raw when compiling .cmm This patch fixes missing -ddump-cmm-raw output when compiling .cmm, which is useful for debugging cmm related codegen issues. - - - - - 1c834ad4 by Ryan Scott at 2024-06-01T09:37:40-04:00 Print namespace specifiers in FixitySig's Outputable instance For whatever reason, the `Outputable` instance for `FixitySig` simply did not print out namespace specifiers, leading to the confusing `-ddump-splices` output seen in #24911. This patch corrects this oversight. Fixes #24911. - - - - - cf49fb5f by Sylvain Henry at 2024-06-01T09:38:19-04:00 Configure: display C++ compiler path - - - - - f9c1ae12 by Cheng Shao at 2024-06-02T14:01:55-04:00 hadrian: disable PIC for in-tree GMP on wasm32 This patch disables PIC for in-tree GMP on wasm32 target. Enabling PIC unconditionally adds undesired code size and runtime overhead for wasm32. - - - - - 1a32f828 by Cheng Shao at 2024-06-02T14:01:55-04:00 hadrian: disable in-tree gmp fft code path for wasm32 This patch disables in-tree GMP FFT code paths for wasm32 target in order to give up some performance of multiplying very large operands in exchange for reduced code size. - - - - - 06277d56 by Cheng Shao at 2024-06-02T14:01:55-04:00 hadrian: build in-tree GMP with malloc-notreentrant on wasm32 This patch makes hadrian build in-tree GMP with the --enable-alloca=malloc-notreentrant configure option. We will only need malloc-reentrant when we have threaded RTS and SMP support on wasm32, which will take some time to happen, before which we should use malloc-notreentrant to avoid undesired runtime overhead. - - - - - 9f614270 by ARATA Mizuki at 2024-06-02T14:02:35-04:00 Set package include paths when assembling .S files Fixes #24839. Co-authored-by: Sylvain Henry <hsyl20 at gmail.com> - - - - - 4998a6ed by Alex Mason at 2024-06-03T02:09:29-04:00 Improve performance of genericWordQuotRem2Op (#22966) Implements the algorithm from compiler-rt's udiv128by64to64default. This rewrite results in a roughly 24x improvement in runtime on AArch64 (and likely any other arch that uses it). - - - - - ae50a8eb by Cheng Shao at 2024-06-03T02:10:05-04:00 testsuite: mark T7773 as fragile on wasm - - - - - c8ece0df by Fendor at 2024-06-03T19:43:22-04:00 Migrate `Finder` component to `OsPath`, fixed #24616 For each module in a GHCi session, we keep alive one `ModLocation`. A `ModLocation` is fairly inefficiently packed, as `String`s are expensive in memory usage. While benchmarking the agda codebase, we concluded that we keep alive around 11MB of `FilePath`'s, solely retained by `ModLocation`. We provide a more densely packed encoding of `ModLocation`, by moving from `FilePath` to `OsPath`. Further, we migrate the full `Finder` component to `OsPath` to avoid unnecessary transformations. As the `Finder` component is well-encapsulated, this requires only a minimal amount of changes in other modules. We introduce pattern synonym for 'ModLocation' which maintains backwards compatibility and avoids breaking consumers of 'ModLocation'. - - - - - 0cff083a by Cheng Shao at 2024-06-03T19:43:58-04:00 compiler: emit NaturallyAligned when element type & index type are the same width This commit fixes a subtle mistake in alignmentFromTypes that used to generate Unaligned when element type & index type are the same width. Fixes #24930. - - - - - 18f63970 by Sebastian Graf at 2024-06-04T05:05:27-04:00 Parser: Remove unused `apats` rule - - - - - 38757c30 by David Knothe at 2024-06-04T05:05:27-04:00 Implement Or Patterns (#22596) This commit introduces a new language extension, `-XOrPatterns`, as described in GHC Proposal 522. An or-pattern `pat1; ...; patk` succeeds iff one of the patterns `pat1`, ..., `patk` succeed, in this order. See also the summary `Note [Implmentation of OrPatterns]`. Co-Authored-By: Sebastian Graf <sgraf1337 at gmail.com> - - - - - 395412e8 by Cheng Shao at 2024-06-04T05:06:04-04:00 compiler/ghci/rts: remove stdcall support completely We have formally dropped i386 windows support (#18487) a long time ago. The stdcall foreign call convention is only used by i386 windows, and the legacy logic around it is a significant maintenance burden for future work that adds arm64 windows support (#24603). Therefore, this patch removes stdcall support completely from the compiler as well as the RTS (#24883): - stdcall is still recognized as a FFI calling convention in Haskell syntax. GHC will now unconditionally emit a warning (-Wunsupported-calling-conventions) and treat it as ccall. - Apart from minimum logic to support the parsing and warning logic, all other code paths related to stdcall has been completely stripped from the compiler. - ghci only supports FFI_DEFAULT_ABI and ccall convention from now on. - FFI foreign export adjustor code on all platforms no longer handles the stdcall case and only handles ccall from now on. - The Win32 specific parts of RTS no longer has special code paths for stdcall. This commit is the final nail on the coffin for i386 windows support. Further commits will perform more housecleaning to strip the legacy code paths and pave way for future arm64 windows support. - - - - - d1fe9ab6 by Cheng Shao at 2024-06-04T05:06:04-04:00 rts: remove legacy i386 windows code paths This commit removes some legacy i386 windows related code paths in the RTS, given this target is no longer supported. - - - - - a605e4b2 by Cheng Shao at 2024-06-04T05:06:04-04:00 autoconf: remove i386 windows related logic This commit removes legacy i386 windows logic in autoconf scripts. - - - - - 91e5ac5e by Cheng Shao at 2024-06-04T05:06:04-04:00 llvm-targets: remove i386 windows support This commit removes i386 windows from llvm-targets and the script to generate it. - - - - - 65fe75a4 by Cheng Shao at 2024-06-04T05:06:04-04:00 libraries/utils: remove stdcall related legacy logic This commit removes stdcall related legacy logic in libraries and utils. ccall should be used uniformly for all supported windows hosts from now on. - - - - - d2a83302 by Cheng Shao at 2024-06-04T05:06:04-04:00 testsuite: adapt the testsuite for stdcall removal This patch adjusts test cases to handle the stdcall removal: - Some stdcall usages are replaced with ccall since stdcall doesn't make sense anymore. - We also preserve some stdcall usages, and check in the expected warning messages to ensure GHC always warn about stdcall usages (-Wunsupported-calling-conventions) as expected. - Error code testsuite coverage is slightly improved, -Wunsupported-calling-conventions is now tested. - Obsolete code paths related to i386 windows are also removed. - - - - - cef8f47a by Cheng Shao at 2024-06-04T05:06:04-04:00 docs: minor adjustments for stdcall removal This commit include minor adjustments of documentation related to stdcall removal. - - - - - 54332437 by Cheng Shao at 2024-06-04T05:06:04-04:00 docs: mention i386 Windows removal in 9.12 changelog This commit mentions removal of i386 Windows support and stdcall related change in the 9.12 changelog. - - - - - 2aaea8a1 by Cheng Shao at 2024-06-04T05:06:40-04:00 hadrian: improve user settings documentation This patch adds minor improvements to hadrian user settings documentation: - Add missing `ghc.cpp.opts` case - Remove non-existent `cxx` case - Clarify `cc.c.opts` also works for C++, while `cc.deps.opts` doesn't - Add example of passing configure argument to autoconf packages - - - - - 71010381 by Alex Mason at 2024-06-04T12:09:07-04:00 Add AArch64 CLZ, CTZ, RBIT primop implementations. Adds support for emitting the clz and rbit instructions, which are used by GHC.Prim.clz*#, GHC.Prim.ctz*# and GHC.Prim.bitReverse*#. - - - - - 44e2abfb by Cheng Shao at 2024-06-04T12:09:43-04:00 hadrian: add +text_simdutf flavour transformer to allow building text with simdutf This patch adds a +text_simdutf flavour transformer to hadrian to allow downstream packagers and users that build from source to opt-in simdutf support for text, in order to benefit from SIMD speedup at run-time. It's still disabled by default for the time being. - - - - - 077cb2e1 by Cheng Shao at 2024-06-04T12:09:43-04:00 ci: enable +text_simdutf flavour transformer for wasm jobs This commit enables +text_simdutf flavour transformer for wasm jobs, so text is now built with simdutf support for wasm. - - - - - b23746ad by Teo Camarasu at 2024-06-04T22:50:50-04:00 base: Use TemplateHaskellQuotes in instance Lift ByteArray Resolves #24852 - - - - - 3fd25743 by Teo Camarasu at 2024-06-04T22:50:50-04:00 base: Mark addrToByteArray as NOINLINE This function should never be inlined in order to keep code size small. - - - - - 98ad1ea5 by Cheng Shao at 2024-06-04T22:51:26-04:00 compiler: remove unused CompilerInfo/LinkerInfo types This patch removes CompilerInfo/LinkerInfo types from the compiler since they aren't actually used anywhere. - - - - - 11795244 by Cheng Shao at 2024-06-05T06:33:17-04:00 rts: remove unused PowerPC/IA64 native adjustor code This commit removes unused PowerPC/IA64 native adjustor code which is never actually enabled by autoconf/hadrian. Fixes #24920. - - - - - 5132754b by Sylvain Henry at 2024-06-05T06:33:57-04:00 RTS: fix warnings with doing*Profiling (#24918) - - - - - accc8c33 by Cheng Shao at 2024-06-05T11:35:36-04:00 hadrian: don't depend on inplace/mingw when --enable-distro-toolchain on Windows - - - - - 6ffbd678 by Cheng Shao at 2024-06-05T11:35:37-04:00 autoconf: normalize paths of some build-time dependencies on Windows This commit applies path normalization via cygpath -m to some build-time dependencies on Windows. Without this logic, the /clang64/bin prefixed msys2-style paths cause the build to fail with --enable-distro-toolchain. - - - - - 075dc6d4 by Cheng Shao at 2024-06-05T11:36:12-04:00 hadrian: remove OSDarwin mention from speedHack This commit removes mentioning of OSDarwin from speedHack, since speedHack is purely for i386 and we no longer support i386 darwin (#24921). - - - - - 83235c4c by Cheng Shao at 2024-06-05T11:36:12-04:00 compiler: remove 32-bit darwin logic This commit removes all 32-bit darwin logic from the compiler, given we no longer support 32-bit apple systems (#24921). Also contains a bit more cleanup of obsolete i386 windows logic. - - - - - 1eb99bc3 by Cheng Shao at 2024-06-05T11:36:12-04:00 rts: remove 32-bit darwin/ios logic This commit removes 32-bit darwin/ios related logic from the rts, given we no longer support them (#24921). - - - - - 24f65892 by Cheng Shao at 2024-06-05T11:36:12-04:00 llvm-targets: remove 32-bit darwin/ios targets This commit removes 32-bit darwin/ios targets from llvm-targets given we no longer support them (#24921). - - - - - ccdbd689 by Cheng Shao at 2024-06-05T11:36:12-04:00 testsuite: remove 32-bit darwin logic This commit removes 32-bit darwin logic from the testsuite given it's no longer supported (#24921). Also contains more cleanup of obsolete i386 windows logic. - - - - - 11d661c4 by Cheng Shao at 2024-06-05T11:36:13-04:00 docs: mention 32-bit darwin/ios removal in 9.12 changelog This commit mentions removal of 32-bit darwin/ios support (#24921) in the 9.12 changelog. - - - - - 7c173310 by Georgi Lyubenov at 2024-06-05T15:17:22-04:00 Add firstA and secondA to Data.Bitraversable Please see https://github.com/haskell/core-libraries-committee/issues/172 for related discussion - - - - - 3b6f9fd1 by Ben Gamari at 2024-06-05T15:17:59-04:00 base: Fix name of changelog Fixes #24899. Also place it under `extra-doc-files` to better reflect its nature and avoid triggering unnecessary recompilation if it changes. - - - - - 1f4d2ef7 by Sebastian Graf at 2024-06-05T15:18:34-04:00 Announce Or-patterns in the release notes for GHC 9.12 (#22596) Leftover from !9229. - - - - - 8650338d by Jan Hrček at 2024-06-06T10:39:24-04:00 Improve haddocks of Language.Haskell.Syntax.Pat.Pat - - - - - 2eee65e1 by Cheng Shao at 2024-06-06T10:40:00-04:00 testsuite: bump T7653 timeout for wasm - - - - - 990fed60 by Sylvain Henry at 2024-06-07T14:45:23-04:00 StgToCmm: refactor opTranslate and friends - Change arguments order to avoid `\args -> ...` lambdas - Fix documentation - Rename StgToCmm options ("big" doesn't mean anything) - - - - - 1afad514 by Sylvain Henry at 2024-06-07T14:45:23-04:00 NCG x86: remove dead code (#5444) Since 6755d833af8c21bbad6585144b10e20ac4a0a1ab this code is dead. - - - - - 595c0894 by Cheng Shao at 2024-06-07T14:45:58-04:00 testsuite: skip objc-hi/objcxx-hi when cross compiling objc-hi/objcxx-hi should be skipped when cross compiling. The existing opsys('darwin') predicate only asserts the host system is darwin but tells us nothing about the target, hence the oversight. - - - - - edfe6140 by qqwy at 2024-06-08T11:23:54-04:00 Replace '?callStack' implicit param with HasCallStack in GHC.Internal.Exception.throw - - - - - 35a64220 by Cheng Shao at 2024-06-08T11:24:30-04:00 rts: cleanup inlining logic This patch removes pre-C11 legacy code paths related to INLINE_HEADER/STATIC_INLINE/EXTERN_INLINE macros, ensure EXTERN_INLINE is treated as static inline in most cases (fixes #24945), and also corrects the comments accordingly. - - - - - 9ea90ed2 by Andrew Lelechenko at 2024-06-08T11:25:06-04:00 CODEOWNERS: add @core-libraries to track base interface changes A low-tech tactical solution for #24919 - - - - - 580fef7b by Ben Gamari at 2024-06-09T01:27:21-04:00 ghc-internal: Update CHANGELOG to reflect current version - - - - - 391ecff5 by Ben Gamari at 2024-06-09T01:27:21-04:00 ghc-internal: Update prologue.txt to reflect package description - - - - - 3dca3b7d by Ben Gamari at 2024-06-09T01:27:57-04:00 compiler: Clarify comment regarding need for MOVABS The comment wasn't clear in stating that it was only applicable to immediate source and memory target operands. - - - - - 6bd850e8 by doyougnu at 2024-06-09T21:02:14-04:00 JS: establish single source of truth for symbols In pursuit of: #22736. This MR moves ad-hoc symbols used throughout the js backend into a single symbols file. Why? First, this cleans up the code by removing ad-hoc strings created on the fly and therefore makes the code more maintainable. Second, it makes it much easier to eventually type these identifiers. - - - - - f3017dd3 by Cheng Shao at 2024-06-09T21:02:49-04:00 rts: replace ad-hoc MYTASK_USE_TLV with proper CC_SUPPORTS_TLS This patch replaces the ad-hoc `MYTASK_USE_TLV` with the `CC_SUPPORTS_TLS` macro. If TLS support is detected by autoconf, then we should use that for managing `myTask` in the threaded RTS. - - - - - e17d7e8c by Ben Gamari at 2024-06-11T05:25:21-04:00 users-guide: Fix stylistic issues in 9.12 release notes - - - - - 8a8a982a by Hugo Peters at 2024-06-11T05:25:57-04:00 fix typo in the simplifier debug output: baling -> bailing - - - - - 16475bb8 by Hécate Moonlight at 2024-06-12T03:07:55-04:00 haddock: Correct the Makefile to take into account Darwin systems - - - - - a2f60da5 by Hécate Kleidukos at 2024-06-12T03:08:35-04:00 haddock: Remove obsolete links to github.com/haskell/haddock in the docs - - - - - de4395cd by qqwy at 2024-06-12T03:09:12-04:00 Add `__GLASGOW_HASKELL_ASSERTS_IGNORED__` as CPP macro name if `-fasserts-ignored is set. This allows users to create their own Control.Exception.assert-like functionality that does something other than raising an `AssertFailed` exception. Fixes #24967 - - - - - 0e9c4dee by Ryan Hendrickson at 2024-06-12T03:09:53-04:00 compiler: add hint to TcRnBadlyStaged message - - - - - 2747cd34 by Simon Peyton Jones at 2024-06-12T12:51:37-04:00 Fix a QuickLook bug This MR fixes the bug exposed by #24676. The problem was that quickLookArg was trying to avoid calling tcInstFun unnecessarily; but it was in fact necessary. But that in turn forced me into a significant refactoring, putting more fields into EValArgQL. Highlights: see Note [Quick Look overview] in GHC.Tc.Gen.App * Instantiation variables are now distinguishable from ordinary unification variables, by level number = QLInstVar. This is treated like "level infinity". See Note [The QLInstVar TcLevel] in GHC.Tc.Utils.TcType. * In `tcApp`, we don't track the instantiation variables in a set Delta any more; instead, we just tell them apart by their level number. * EValArgQL now much more clearly captures the "half-done" state of typechecking an argument, ready for later resumption. See Note [Quick Look at value arguments] in GHC.Tc.Gen.App * Elminated a bogus (never used) fast-path in GHC.Tc.Utils.Instantiate.instCallConstraints See Note [Possible fast path for equality constraints] Many other small refactorings. - - - - - 1b1523b1 by George Thomas at 2024-06-12T12:52:18-04:00 Fix non-compiling extensible record `HasField` example - - - - - 97b141a3 by Zubin Duggal at 2024-06-12T12:52:55-04:00 haddock: Fix hyperlinker source urls (#24907) This fixes a bug introduced by f56838c36235febb224107fa62334ebfe9941aba Links to external modules in the hyperlinker are uniformly generated using splicing the template given to us instead of attempting to construct the url in an ad-hoc manner. - - - - - 954f864c by Zubin Duggal at 2024-06-12T12:52:55-04:00 haddock: Add name anchor to external source urls from documentation page URLs for external source links from documentation pages were missing a splice location for the name. Fixes #24912 - - - - - b0b64177 by Simon Peyton Jones at 2024-06-12T12:53:31-04:00 Prioritise nominal equalities The main payload of this patch is * Prioritise nominal equalities in the constraint solver. This ameliorates the incompleteness of solving for representational constraints over newtypes: see #24887. See (EX2) in Note [Decomposing newtype equalities] in GHC.Tc.Solver.Equality In doing this patch I tripped over some other things that I refactored: * Move `isCoVarType` from `GHC.Core.Type` to `GHC.Core.Predicate` where it seems more at home. * Clarify the "rewrite role" of a constraint. I was very puzzled about what the role of, say `(Eq a)` might be, but see the new Note [The rewrite-role of a constraint]. In doing so I made predTypeEqRel crash when given a non-equality. Usually it expects an equality; but it was being mis-used for the above rewrite-role stuff. - - - - - cb7c1b83 by Liam Goodacre at 2024-06-12T12:54:09-04:00 compiler: missing-deriving-strategies suggested fix Extends the missing-deriving-strategies warning with a suggested fix that includes which deriving strategies were assumed. For info about the warning, see comments for `TcRnNoDerivStratSpecified`, `TcRnNoDerivingClauseStrategySpecified`, & `TcRnNoStandaloneDerivingStrategySpecified`. For info about the suggested fix, see `SuggestExplicitDerivingClauseStrategies` & `SuggestExplicitStandalanoDerivingStrategy`. docs: Rewords missing-deriving-strategies to mention the suggested fix. Resolves #24955 - - - - - 4e36d3a3 by Jan Hrček at 2024-06-12T12:54:48-04:00 Further haddocks improvements in Language.Haskell.Syntax.Pat.Pat - - - - - 558353f4 by Cheng Shao at 2024-06-12T12:55:24-04:00 rts: use page sized mblocks on wasm This patch changes mblock size to page size on wasm. It allows us to simplify our wasi-libc fork, makes it much easier to test third party libc allocators like emmalloc/mimalloc, as well as experimenting with threaded RTS in wasm. - - - - - b3cc5366 by Matthew Pickering at 2024-06-12T23:06:57-04:00 compiler: Make ghc-experimental not wired in If you need to wire in definitions, then place them in ghc-internal and reexport them from ghc-experimental. Ticket #24903 - - - - - 700eeab9 by Hécate Kleidukos at 2024-06-12T23:07:37-04:00 base: Use a more appropriate unicode arrow for the ByteArray diagram This commit rectifies the usage of a unicode arrow in favour of one that doesn't provoke mis-alignment. - - - - - cca7de25 by Matthew Pickering at 2024-06-12T23:08:14-04:00 ghcup-metadata: Fix debian version ranges This was caught by `ghcup-ci` failing and attempting to install a deb12 bindist on deb11. ``` configure: WARNING: m4/prep_target_file.m4: Expecting YES/NO but got in ArSupportsDashL_STAGE0. Defaulting to False. bin/ghc-toolchain-bin: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by bin/ghc-toolchain-bin) bin/ghc-toolchain-bin: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /tmp/tmp.LBhwvFbVoy/foobarbaz/.ghcup/tmp/ghcup-708d9668d5d82287/ghc-9.11.20240609-x86_64-unknown-linux/bin/../lib/x86_64-linux-ghc-9.11.20240609/libHSunix-2.8.5.1-inplace-ghc9.11.20240609.so) bin/ghc-toolchain-bin: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /tmp/tmp.LBhwvFbVoy/foobarbaz/.ghcup/tmp/ghcup-708d9668d5d82287/ghc-9.11.20240609-x86_64-unknown-linux/bin/../lib/x86_64-linux-ghc-9.11.20240609/libHSunix-2.8.5.1-inplace-ghc9.11.20240609.so) ``` Fixes #24974 - - - - - 7b23ce8b by Pierre Le Marre at 2024-06-13T15:35:04-04:00 ucd2haskell: remove Streamly dependency + misc - Remove dead code. - Remove `streamly` dependency. - Process files with `bytestring`. - Replace Unicode files parsers with the corresponding ones from the package `unicode-data-parser`. - Simplify cabal file and rename module - Regenerate `ghc-internal` Unicode files with new header - - - - - 4570319f by Jacco Krijnen at 2024-06-13T15:35:41-04:00 Document how to run haddocks tests (#24976) Also remove ghc 9.7 requirement - - - - - fb629e24 by amesgen at 2024-06-14T00:28:20-04:00 compiler: refactor lower_CmmExpr_Ptr - - - - - def46c8c by amesgen at 2024-06-14T00:28:20-04:00 compiler: handle CmmRegOff in lower_CmmExpr_Ptr - - - - - ce76bf78 by Simon Peyton Jones at 2024-06-14T00:28:56-04:00 Small documentation update in Quick Look - - - - - 19bcfc9b by Simon Peyton Jones at 2024-06-14T14:44:19-04:00 Add hack for #24623 ..Th bug in #24623 is randomly triggered by this MR!.. - - - - - 7a08a025 by Simon Peyton Jones at 2024-06-14T14:44:19-04:00 Various fixes to type-tidying This MR was triggered by #24868, but I found a number of bugs and infelicities in type-tidying as I went along. Highlights: * Fix to #24868 is in GHC.Tc.Errors.report_unsolved: avoid using the OccNames of /bound/ variables when tidying /free/ variables; see the call to `tidyAvoiding`. That avoid the gratuitous renaming which was the cause of #24868. See Note [tidyAvoiding] in GHC.Core.TyCo.Tidy * Refactor and document the tidying of open types. See GHC.Core.TyCo.Tidy Note [Tidying open types] Note [Tidying is idempotent] * Tidy the coercion variable in HoleCo. That's important so that tidied types have tidied kinds. * Some small renaming to make things consistent. In particular the "X" forms return a new TidyEnv. E.g. tidyOpenType :: TidyEnv -> Type -> Type tidyOpenTypeX :: TidyEnv -> Type -> (TidyEnv, Type) - - - - - 2eac0288 by Simon Peyton Jones at 2024-06-14T14:44:19-04:00 Wibble - - - - - e5d24cc2 by Simon Peyton Jones at 2024-06-14T14:44:20-04:00 Wibbles - - - - - 246bc3a4 by Simon Peyton Jones at 2024-06-14T14:44:56-04:00 Localise a case-binder in SpecConstr.mkSeqs This small change fixes #24944 See (SCF1) in Note [SpecConstr and strict fields] - - - - - a5994380 by Sylvain Henry at 2024-06-15T03:20:29-04:00 PPC: display foreign label in panic message (cf #23969) - - - - - bd95553a by Rodrigo Mesquita at 2024-06-15T03:21:06-04:00 cmm: Parse MO_BSwap primitive operation Parsing this operation allows it to be tested using `test-primops` in a subsequent MR. - - - - - e0099721 by Andrew Lelechenko at 2024-06-16T17:57:38-04:00 Make flip representation polymorphic, similar to ($) and (&) CLC proposal: https://github.com/haskell/core-libraries-committee/issues/245 - - - - - 118a1292 by Alan Zimmerman at 2024-06-16T17:58:15-04:00 EPA: Add location to Match Pats list So we can freely modify the pats and the following item spacing will still be valid when exact printing. Closes #24862 - - - - - db343324 by Fabricio de Sousa Nascimento at 2024-06-17T10:01:51-04:00 compiler: Rejects RULES whose LHS immediately fails to type-check Fixes GHC crashing on `decomposeRuleLhs` due to ignoring coercion values. This happens when we have a RULE that does not type check, and enable `-fdefer-type-errors`. We prevent this to happen by rejecting RULES with an immediately LHS type error. Fixes #24026 - - - - - e7a95662 by Dylan Thinnes at 2024-06-17T10:02:35-04:00 Add hscTypecheckRenameWithDiagnostics, for HLS (#24996) Use runHsc' in runHsc so that both functions can't fall out of sync We're currently copying parts of GHC code to get structured warnings in HLS, so that we can recreate `hscTypecheckRenameWithDiagnostics` locally. Once we get this function into GHC we can drop the copied code in future versions of HLS. - - - - - d70abb49 by sheaf at 2024-06-18T18:47:20-04:00 Clarify -XGADTs enables existential quantification Even though -XGADTs does not turn on -XExistentialQuantification, it does allow the user of existential quantification syntax, without needing to use GADT-style syntax. Fixes #20865 - - - - - 13fdf788 by David Binder at 2024-06-18T18:48:02-04:00 Add RTS flag --read-tix-file (GHC Proposal 612) This commit introduces the RTS flag `--read-tix-file=<yes|no>` which controls whether a preexisting .tix file is read in at the beginning of a program run. The default is currently `--read-tix-file=yes` but will change to `--read-tix-file=no` in a future release of GHC. For this reason, whenever a .tix file is read in a warning is emitted to stderr. This warning can be silenced by explicitly passing the `--read-tix-file=yes` option. Details can be found in the GHC proposal cited below. Users can query whether this flag has been used with the help of the module `GHC.RTS.Flags`. A new field `readTixFile` was added to the record `HpcFlags`. These changes have been discussed and approved in - GHC proposal 612: https://github.com/ghc-proposals/ghc-proposals/pull/612 - CLC proposal 276: https://github.com/haskell/core-libraries-committee/issues/276 - - - - - f0e3cb6a by Fendor at 2024-06-18T18:48:38-04:00 Improve sharing of duplicated values in `ModIface`, fixes #24723 As a `ModIface` often contains duplicated values that are not necessarily shared, we improve sharing by serialising the `ModIface` to an in-memory byte array. Serialisation uses deduplication tables, and deserialisation implicitly shares duplicated values. This helps reducing the peak memory usage while compiling in `--make` mode. The peak memory usage is especially smaller when generating interface files with core expressions (`-fwrite-if-simplified-core`). On agda, this reduces the peak memory usage: * `2.2 GB` to `1.9 GB` for a ghci session. On `lib:Cabal`, we report: * `570 MB` to `500 MB` for a ghci session * `790 MB` to `667 MB` for compiling `lib:Cabal` with ghc There is a small impact on execution time, around 2% on the agda code base. - - - - - 1bab7dde by Fendor at 2024-06-18T18:48:38-04:00 Avoid unneccessarily re-serialising the `ModIface` To reduce memory usage of `ModIface`, we serialise `ModIface` to an in-memory byte array, which implicitly shares duplicated values. This serialised byte array can be reused to avoid work when we actually write the `ModIface` to disk. We introduce a new field to `ModIface` which allows us to save the byte array, and write it direclty to disk if the `ModIface` wasn't changed after the initial serialisation. This requires us to change absolute offsets, for example to jump to the deduplication table for `Name` or `FastString` with relative offsets, as the deduplication byte array doesn't contain header information, such as fingerprints. To allow us to dump the binary blob to disk, we need to replace all absolute offsets with relative ones. We introduce additional helpers for `ModIface` binary serialisation, which construct relocatable binary blobs. We say the binary blob is relocatable, if the binary representation can be moved and does not contain any absolute offsets. Further, we introduce new primitives for `Binary` that allow to create relocatable binaries, such as `forwardGetRel` and `forwardPutRel`. ------------------------- Metric Decrease: MultiLayerModulesDefsGhcWithCore Metric Increase: MultiComponentModules MultiLayerModules T10421 T12150 T12234 T12425 T13035 T13253-spj T13701 T13719 T14697 T15703 T16875 T18698b T18140 T18304 T18698a T18730 T18923 T20049 T24582 T5837 T6048 T9198 T9961 mhu-perf ------------------------- These metric increases may look bad, but they are all completely benign, we simply allocate 1 MB per module for `shareIface`. As this allocation is quite quick, it has a negligible impact on run-time performance. In fact, the performance difference wasn't measurable on my local machine. Reducing the size of the pre-allocated 1 MB buffer avoids these test failures, but also requires us to reallocate the buffer if the interface file is too big. These reallocations *did* have an impact on performance, which is why I have opted to accept all these metric increases, as the number of allocated bytes is merely a guidance. This 1MB allocation increase causes a lot of tests to fail that generally have a low allocation number. E.g., increasing from 40MB to 41MB is a 2.5% increase. In particular, the tests T12150, T13253-spj, T18140, T18304, T18698a, T18923, T20049, T24582, T5837, T6048, and T9961 only fail on i386-darwin job, where the number of allocated bytes seems to be lower than in other jobs. The tests T16875 and T18698b fail on i386-linux for the same reason. - - - - - 099992df by Andreas Klebinger at 2024-06-18T18:49:14-04:00 Improve documentation of @Any@ type. In particular mention possible uses for non-lifted types. Fixes #23100. - - - - - 5e75412b by Jakob Bruenker at 2024-06-18T18:49:51-04:00 Update user guide to indicate support for 64-tuples - - - - - 4f5da595 by Andreas Klebinger at 2024-06-18T18:50:28-04:00 lint notes: Add more info to notes.stdout When fixing a note reference CI fails with a somewhat confusing diff. See #21123. This commit adds a line to the output file being compared which hopefully makes it clear this is the list of broken refs, not all refs. Fixes #21123 - - - - - 1eb15c61 by Jakob Bruenker at 2024-06-18T18:51:04-04:00 docs: Update mention of ($) type in user guide Fixes #24909 - - - - - 1d66c9e3 by Jan Hrček at 2024-06-18T18:51:47-04:00 Remove duplicate Anno instances - - - - - 8ea0ba95 by Sven Tennie at 2024-06-18T18:52:23-04:00 AArch64: Delete unused RegNos This has the additional benefit of getting rid of the -1 encoding (real registers start at 0.) - - - - - 325422e0 by Sjoerd Visscher at 2024-06-18T18:53:04-04:00 Bump stm submodule to current master - - - - - 64fba310 by Cheng Shao at 2024-06-18T18:53:40-04:00 testsuite: bump T17572 timeout on wasm32 - - - - - eb612fbc by Sven Tennie at 2024-06-19T06:46:00-04:00 AArch64: Simplify BL instruction The BL constructor carried unused data in its third argument. - - - - - b0300503 by Alan Zimmerman at 2024-06-19T06:46:36-04:00 TTG: Move SourceText from `Fixity` to `FixitySig` It is only used there, simplifies the use of `Fixity` in the rest of the code, and is moved into a TTG extension point. Precedes !12842, to simplify it - - - - - 842e119b by Rodrigo Mesquita at 2024-06-19T06:47:13-04:00 base: Deprecate some .Internal modules Deprecates the following modules according to clc-proposal #217: https://github.com/haskell/core-libraries-committee/issues/217 * GHC.TypeNats.Internal * GHC.TypeLits.Internal * GHC.ExecutionStack.Internal Closes #24998 - - - - - 24e89c40 by Jacco Krijnen at 2024-06-20T07:21:27-04:00 ttg: Use List instead of Bag in AST for LHsBindsLR Considering that the parser used to create a Bag of binds using a cons-based approach, it can be also done using lists. The operations in the compiler don't really require Bag. By using lists, there is no dependency on GHC.Data.Bag anymore from the AST. Progress towards #21592 - - - - - 04f5bb85 by Simon Peyton Jones at 2024-06-20T07:22:03-04:00 Fix untouchability test This MR fixes #24938. The underlying problem was tha the test for "does this implication bring in scope any equalities" was plain wrong. See Note [Tracking Given equalities] and Note [Let-bound skolems] both in GHC.Tc.Solver.InertSet. Then * Test LocalGivenEqs succeeds for a different reason than before; see (LBS2) in Note [Let-bound skolems] * New test T24938a succeeds because of (LBS2), whereas it failed before. * Test LocalGivenEqs2 now fails, as it should. * Test T224938, the repro from the ticket, fails, as it should. - - - - - 9a757a27 by Simon Peyton Jones at 2024-06-20T07:22:40-04:00 Fix demand signatures for join points This MR tackles #24623 and #23113 The main change is to give a clearer notion of "worker/wrapper arity", esp for join points. See GHC.Core.Opt.DmdAnal Note [Worker/wrapper arity and join points] This Note is a good summary of what this MR does: (1) The "worker/wrapper arity" of an Id is * For non-join-points: idArity * The join points: the join arity (Id part only of course) This is the number of args we will use in worker/wrapper. See `ww_arity` in `dmdAnalRhsSig`, and the function `workWrapArity`. (2) A join point's demand-signature arity may exceed the Id's worker/wrapper arity. See the `arity_ok` assertion in `mkWwBodies`. (3) In `finaliseArgBoxities`, do trimBoxity on any argument demands beyond the worker/wrapper arity. (4) In WorkWrap.splitFun, make sure we split based on the worker/wrapper arity (re)-computed by workWrapArity. - - - - - 5e8faaf1 by Jan Hrček at 2024-06-20T07:23:20-04:00 Update haddocks of Import/Export AST types - - - - - cd512234 by Hécate Kleidukos at 2024-06-20T07:24:02-04:00 haddock: Update bounds in cabal files and remove allow-newer stanza in cabal.project - - - - - 8a8ff8f2 by Rodrigo Mesquita at 2024-06-20T07:24:38-04:00 cmm: Don't parse MO_BSwap for W8 Don't support parsing bswap8, since bswap8 is not really an operation and would have to be implemented as a no-op (and currently is not implemented at all). Fixes #25002 - - - - - 5cc472f5 by sheaf at 2024-06-20T07:25:14-04:00 Delete unused testsuite files These files were committed by mistake in !11902. This commit simply removes them. - - - - - 7b079378 by Matthew Pickering at 2024-06-20T07:25:50-04:00 Remove left over debugging pragma from 2016 This pragma was accidentally introduced in 648fd73a7b8fbb7955edc83330e2910428e76147 The top-level cost centres lead to a lack of optimisation when compiling with profiling. - - - - - c872e09b by Hécate Kleidukos at 2024-06-20T19:28:36-04:00 haddock: Remove unused pragmata, qualify usages of Data.List functions, add more sanity checking flags by default This commit enables some extensions and GHC flags in the cabal file in a way that allows us to reduce the amount of prologuing on top of each file. We also prefix the usage of some List functions that removes ambiguity when they are also exported from the Prelude, like foldl'. In general, this has the effect of pointing out more explicitly that a linked list is used. Metric Increase: haddock.Cabal haddock.base haddock.compiler - - - - - 8c87d4e1 by Arnaud Spiwack at 2024-06-20T19:29:12-04:00 Add test case for #23586 - - - - - 568de8a5 by Arnaud Spiwack at 2024-06-20T19:29:12-04:00 When matching functions in rewrite rules: ignore multiplicity When matching a template variable to an expression, we check that it has the same type as the matched expression. But if the variable `f` has type `A -> B` while the expression `e` has type `A %1 -> B`, the match was previously rejected. A principled solution would have `f` substituted by `\(%Many x) -> e x` or some other appropriate coercion. But since linearity is not properly checked in Core, we can be cheeky and simply ignore multiplicity while matching. Much easier. This has forced a change in the linter which, when `-dlinear-core-lint` is off, must consider that `a -> b` and `a %1 -> b` are equal. This is achieved by adding an argument to configure the behaviour of `nonDetCmpTypeX` and modify `ensureEqTys` to call to the new behaviour which ignores multiplicities when comparing two `FunTy`. Fixes #24725. - - - - - c8a8727e by Simon Peyton Jones at 2024-06-20T19:29:12-04:00 Faster type equality This MR speeds up type equality, triggered by perf regressions that showed up when fixing #24725 by parameterising type equality over whether to ignore multiplicity. The changes are: * Do not use `nonDetCmpType` for type /equality/. Instead use a specialised type-equality function, which we have always had! `nonDetCmpType` remains, but I did not invest effort in refactoring or optimising it. * Type equality is parameterised by - whether to expand synonyms - whether to respect multiplicities - whether it has a RnEnv2 environment In this MR I systematically specialise it for static values of these parameters. Much more direct and predictable than before. See Note [Specialising type equality] * We want to avoid comparing kinds if possible. I refactored how this happens, at least for `eqType`. See Note [Casts and coercions in type comparison] * To make Lint fast, we want to avoid allocating a thunk for <msg> in ensureEqTypes ty1 ty2 <msg> because the test almost always succeeds, and <msg> isn't needed. See Note [INLINE ensureEqTys] Metric Decrease: T13386 T5030 - - - - - 21fc180b by Ryan Hendrickson at 2024-06-22T10:40:55-04:00 base: Add inits1 and tails1 to Data.List - - - - - d640a3b6 by Sebastian Graf at 2024-06-22T10:41:32-04:00 Derive previously hand-written `Lift` instances (#14030) This is possible now that #22229 is fixed. - - - - - 33fee6a2 by Sebastian Graf at 2024-06-22T10:41:32-04:00 Implement the "Derive Lift instances for data types in template-haskell" proposal (#14030) After #22229 had been fixed, we can finally derive the `Lift` instance for the TH AST, as proposed by Ryan Scott in https://mail.haskell.org/pipermail/libraries/2015-September/026117.html. Fixes #14030, #14296, #21759 and #24560. The residency of T24471 increases by 13% because we now load `AnnLookup` from its interface file, which transitively loads the whole TH AST. Unavoidable and not terrible, I think. Metric Increase: T24471 - - - - - 383c01a8 by Matthew Pickering at 2024-06-22T10:42:08-04:00 bindist: Use complete relative paths when cding to directories If a user has configured CDPATH on their system then `cd lib` may change into an unexpected directory during the installation process. If you write `cd ./lib` then it will not consult `CDPATH` to determine what you mean. I have added a check on ghcup-ci to verify that the bindist installation works in this situation. Fixes #24951 - - - - - 5759133f by Hécate Kleidukos at 2024-06-22T10:42:49-04:00 haddock: Use the more precise SDocContext instead of DynFlags The pervasive usage of DynFlags (the parsed command-line options passed to ghc) blurs the border between different components of Haddock, and especially those that focus solely on printing text on the screen. In order to improve the understanding of the real dependencies of a function, the pretty-printer options are made concrete earlier in the pipeline instead of late when pretty-printing happens. This also has the advantage of clarifying which functions actually require DynFlags for purposes other than pretty-printing, thus making the interactions between Haddock and GHC more understandable when exploring the code base. See Henry, Ericson, Young. "Modularizing GHC". https://hsyl20.fr/home/files/papers/2022-ghc-modularity.pdf. 2022 - - - - - 749e089b by Alexander McKenna at 2024-06-22T10:43:24-04:00 Add INLINE [1] pragma to compareInt / compareWord To allow rules to be written on the concrete implementation of `compare` for `Int` and `Word`, we need to have an `INLINE [1]` pragma on these functions, following the `matching_overloaded_methods_in_rules` note in `GHC.Classes`. CLC proposal https://github.com/haskell/core-libraries-committee/issues/179 Fixes https://gitlab.haskell.org/ghc/ghc/-/issues/22643 - - - - - db033639 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 ci: Enable strict ghc-toolchain setting for bindists - - - - - 14308a8f by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 ghc-toolchain: Improve parse failure error Improves the error message for when `ghc-toolchain` fails to read a valid `Target` value from a file (in doFormat mode). - - - - - 6e7cfff1 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 bindist: ghc-toolchain related options in configure - - - - - 958d6931 by Matthew Pickering at 2024-06-24T17:21:15-04:00 ci: Fail when bindist configure fails when installing bindist It is better to fail earlier if the configure step fails rather than carrying on for a more obscure error message. - - - - - f48d157d by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 ghc-toolchain: Fix error logging indentation - - - - - f1397104 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 bindist: Correct default.target substitution The substitution on `default.target.in` must be done after `PREP_TARGET_FILE` is called -- that macro is responsible for setting the variables that will be effectively substituted in the target file. Otherwise, the target file is invalid. Fixes #24792 #24574 - - - - - 665e653e by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 configure: Prefer tool name over tool path It is non-obvious whether the toolchain configuration should use full-paths to tools or simply their names. In addressing #24574, we've decided to prefer executable names over paths, ultimately, because the bindist configure script already does this, thus is the default in ghcs out there. Updates the in-tree configure script to prefer tool names (`AC_CHECK_TOOL` rather than `AC_PATH_TOOL`) and `ghc-toolchain` to ignore the full-path-result of `findExecutable`, which it previously used over the program name. This change doesn't undo the fix in bd92182cd56140ffb2f68ec01492e5aa6333a8fc because `AC_CHECK_TOOL` still takes into account the target triples, unlike `AC_CHECK_PROG/AC_PATH_PROG`. - - - - - 463716c2 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 dist: Don't forget to configure JavascriptCPP We introduced a configuration step for the javascript preprocessor, but only did so for the in-tree configure script. This commit makes it so that we also configure the javascript preprocessor in the configure shipped in the compiler bindist. - - - - - e99cd73d by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 distrib: LlvmTarget in distrib/configure LlvmTarget was being set and substituted in the in-tree configure, but not in the configure shipped in the bindist. We want to set the LlvmTarget to the canonical LLVM name of the platform that GHC is targetting. Currently, that is going to be the boostrapped llvm target (hence the code which sets LlvmTarget=bootstrap_llvm_target). - - - - - 4199aafe by Matthew Pickering at 2024-06-24T17:21:51-04:00 Update bootstrap plans for recent GHC versions (9.6.5, 9.8.2, 9.10.10) - - - - - f599d816 by Matthew Pickering at 2024-06-24T17:21:51-04:00 ci: Add 9_10 bootstrap testing job - - - - - 8f4b799d by Hécate Kleidukos at 2024-06-24T17:22:30-04:00 haddock: Move the usage of mkParserOpts directly to ppHyperlinkedModuleSource in order to avoid passing a whole DynFlags Follow up to !12931 - - - - - 210cf1cd by Hécate Kleidukos at 2024-06-24T17:22:30-04:00 haddock: Remove cabal file linting rule This will be reintroduced with a properly ignored commit when the cabal files are themselves formatted for good. - - - - - 7fe85b13 by Peter Trommler at 2024-06-24T22:03:41-04:00 PPC NCG: Fix sign hints in C calls Sign hints for parameters are in the second component of the pair. Fixes #23034 - - - - - 949a0e0b by Andrew Lelechenko at 2024-06-24T22:04:17-04:00 base: fix missing changelog entries - - - - - 1bfa9111 by Andreas Klebinger at 2024-06-26T21:49:53-04:00 GHCi interpreter: Tag constructor closures when possible. When evaluating PUSH_G try to tag the reference we are pushing if it's a constructor. This is potentially helpful for performance and required to fix #24870. - - - - - caf44a2d by Andrew Lelechenko at 2024-06-26T21:50:30-04:00 Implement Data.List.compareLength and Data.List.NonEmpty.compareLength `compareLength xs n` is a safer and faster alternative to `compare (length xs) n`. The latter would force and traverse the entire spine (potentially diverging), while the former traverses as few elements as possible. The implementation is carefully designed to maintain as much laziness as possible. As per https://github.com/haskell/core-libraries-committee/issues/257 - - - - - f4606ae0 by Serge S. Gulin at 2024-06-26T21:51:05-04:00 Unicode: adding compact version of GeneralCategory (resolves #24789) The following features are applied: 1. Lookup code like Cmm-switches (draft implementation proposed by Sylvain Henry @hsyl20) 2. Nested ifs (logarithmic search vs linear search) (the idea proposed by Sylvain Henry @hsyl20) ------------------------- Metric Decrease: size_hello_artifact size_hello_unicode ------------------------- - - - - - 0e424304 by Hécate Kleidukos at 2024-06-26T21:51:44-04:00 haddock: Restructure import statements This commit removes idiosyncrasies that have accumulated with the years in how import statements were laid out, and defines clear but simple guidelines in the CONTRIBUTING.md file. - - - - - 9b8ddaaf by Arnaud Spiwack at 2024-06-26T21:52:23-04:00 Rename test for #24725 I must have fumbled my tabs when I copy/pasted the issue number in 8c87d4e1136ae6d28e92b8af31d78ed66224ee16. - - - - - b0944623 by Arnaud Spiwack at 2024-06-26T21:52:23-04:00 Add original reproducer for #24725 - - - - - 77ce65a5 by Matthew Pickering at 2024-06-27T07:57:14-04:00 Expand LLVM version matching regex for compability with bsd systems sed on BSD systems (such as darwin) does not support the + operation. Therefore we take the simple minded approach of manually expanding group+ to groupgroup*. Fixes #24999 - - - - - bdfe4a9e by Matthew Pickering at 2024-06-27T07:57:14-04:00 ci: On darwin configure LLVMAS linker to match LLC and OPT toolchain The version check was previously broken so the toolchain was not detected at all. - - - - - 07e03a69 by Matthew Pickering at 2024-06-27T07:57:15-04:00 Update nixpkgs commit for darwin toolchain One dependency (c-ares) changed where it hosted the releases which breaks the build with the old nixpkgs commit. - - - - - 144afed7 by Rodrigo Mesquita at 2024-06-27T07:57:50-04:00 base: Add changelog entry for #24998 - - - - - eebe1658 by Sylvain Henry at 2024-06-28T07:13:26-04:00 X86/DWARF: support no tables-next-to-code and asm-shortcutting (#22792) - Without TNTC (tables-next-to-code), we must be careful to not duplicate labels in pprNatCmmDecl. Especially, as a CmmProc is identified by the label of its entry block (and not of its info table), we can't reuse the same label to delimit the block end and the proc end. - We generate debug infos from Cmm blocks. However, when asm-shortcutting is enabled, some blocks are dropped at the asm codegen stage and some labels in the DebugBlocks become missing. We fix this by filtering the generated debug-info after the asm codegen to only keep valid infos. Also add some related documentation. - - - - - 6e86d82b by Sylvain Henry at 2024-06-28T07:14:06-04:00 PPC NCG: handle JMP to ForeignLabels (#23969) - - - - - 9e4b4b0a by Sylvain Henry at 2024-06-28T07:14:06-04:00 PPC NCG: support loading 64-bit value on 32-bit arch (#23969) - - - - - 50caef3e by Sylvain Henry at 2024-06-28T07:14:46-04:00 Fix warnings in genapply - - - - - 37139b17 by Matthew Pickering at 2024-06-28T07:15:21-04:00 libraries: Update os-string to 2.0.4 This updates the os-string submodule to 2.0.4 which removes the usage of `TemplateHaskell` pragma. - - - - - 0f3d3bd6 by Sylvain Henry at 2024-06-30T00:47:40-04:00 Bump array submodule - - - - - 354c350c by Sylvain Henry at 2024-06-30T00:47:40-04:00 GHCi: Don't use deprecated sizeofMutableByteArray# - - - - - 35d65098 by Ben Gamari at 2024-06-30T00:47:40-04:00 primops: Undeprecate addr2Int# and int2Addr# addr2Int# and int2Addr# were marked as deprecated with the introduction of the OCaml code generator (1dfaee318171836b32f6b33a14231c69adfdef2f) due to its use of tagged integers. However, this backend has long vanished and `base` has all along been using `addr2Int#` in the Show instance for Ptr. While it's unlikely that we will have another backend which has tagged integers, we may indeed support platforms which have tagged pointers. Consequently we undeprecate the operations but warn the user that the operations may not be portable. - - - - - 3157d817 by Sylvain Henry at 2024-06-30T00:47:41-04:00 primops: Undeprecate par# par# is still used in base and it's not clear how to replace it with spark# (see #24825) - - - - - c8d5b959 by Ben Gamari at 2024-06-30T00:47:41-04:00 Primops: Make documentation generation more efficient Previously we would do a linear search through all primop names, doing a String comparison on the name of each when preparing the HsDocStringMap. Fix this. - - - - - 65165fe4 by Ben Gamari at 2024-06-30T00:47:41-04:00 primops: Ensure that deprecations are properly tracked We previously failed to insert DEPRECATION pragmas into GHC.Prim's ModIface, meaning that they would appear in the Haddock documentation but not issue warnings. Fix this. See #19629. Haddock also needs to be fixed: https://github.com/haskell/haddock/issues/223 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - bc1d435e by Mario Blažević at 2024-06-30T00:48:20-04:00 Improved pretty-printing of unboxed TH sums and tuples, fixes #24997 - - - - - 0d170eaf by Zubin Duggal at 2024-07-04T11:08:41-04:00 compiler: Turn `FinderCache` into a record of operations so that GHC API clients can have full control over how its state is managed by overriding `hsc_FC`. Also removes the `uncacheModule` function as this wasn't being used by anything since 1893ba12fe1fa2ade35a62c336594afcd569736e Fixes #23604 - - - - - 4664997d by Teo Camarasu at 2024-07-04T11:09:18-04:00 Add HasCallStack to T23221 This makes the test a bit easier to debug - - - - - 66919dcc by Teo Camarasu at 2024-07-04T11:09:18-04:00 rts: use live words to estimate heap size We use live words rather than live blocks to determine the size of the heap for determining memory retention. Most of the time these two metrics align, but they can come apart in normal usage when using the nonmoving collector. The nonmoving collector leads to a lot of partially occupied blocks. So, using live words is more accurate. They can also come apart when the heap is suffering from high levels fragmentation caused by small pinned objects, but in this case, the block size is the more accurate metric. Since this case is best avoided anyway. It is ok to accept the trade-off that we might try (and probably) fail to return more memory in this case. See also the Note [Statistics for retaining memory] Resolves #23397 - - - - - 8dfca66a by Oleg Grenrus at 2024-07-04T11:09:55-04:00 Add reflections of GHC.TypeLits/Nats type families ------------------------- Metric Increase: ghc_experimental_dir ghc_experimental_so ------------------------- - - - - - 6c469bd2 by Adam Gundry at 2024-07-04T11:10:33-04:00 Correct -Wpartial-fields warning to say "Definition" rather than "Use" Fixes #24710. The message and documentation for `-Wpartial-fields` were misleading as (a) the warning occurs at definition sites rather than use sites, and (b) the warning relates to the definition of a field independently of the selector function (e.g. because record updates are also partial). - - - - - 977b6b64 by Max Ulidtko at 2024-07-04T11:11:11-04:00 GHCi: Support local Prelude Fixes #10920, an issue where GHCi bails out when started alongside a file named Prelude.hs or Prelude.lhs (even empty file suffices). The in-source Note [GHCi and local Preludes] documents core reasoning. Supplementary changes: * add debug traces for module lookups under -ddump-if-trace; * drop stale comment in GHC.Iface.Load; * reduce noise in -v3 traces from GHC.Utils.TmpFs; * new test, which also exercizes HomeModError. - - - - - 87cf4111 by Ryan Scott at 2024-07-04T11:11:47-04:00 Add missing gParPat in cvtp's ViewP case When converting a `ViewP` using `cvtp`, we need to ensure that the view pattern is parenthesized so that the resulting code will parse correctly when roundtripped back through GHC's parser. Fixes #24894. - - - - - b05613c5 by Adam Gundry at 2024-07-04T11:12:23-04:00 Use structured error representation for module cycle errors (see #18516) This removes the re-export of cyclicModuleErr from the top-level GHC module. - - - - - 70389749 by Adam Gundry at 2024-07-04T11:12:23-04:00 Use structured error representation when reloading a nonexistent module - - - - - 680ade3d by sheaf at 2024-07-04T11:12:23-04:00 Use structured errors for a Backpack instantiation error - - - - - 97c6d6de by sheaf at 2024-07-04T11:12:23-04:00 Move mkFileSrcSpan to GHC.Unit.Module.Location - - - - - f9e7bd9b by Adriaan Leijnse at 2024-07-04T11:12:59-04:00 ttg: Remove SourceText from OverloadedLabel Progress towards #21592 - - - - - 00d63245 by Alexander Foremny at 2024-07-04T11:12:59-04:00 AST: GHC.Prelude -> Prelude Refactor occurrences to GHC.Prelude with Prelude within Language/Haskell. Progress towards #21592 - - - - - cc846ea5 by Alexander Foremny at 2024-07-04T11:12:59-04:00 AST: remove occurrences of GHC.Unit.Module.ModuleName `GHC.Unit.Module` re-exports `ModuleName` from `Language.Haskell.Syntax.Module.Name`. Progress towards #21592 - - - - - 24c7d287 by Fabian Kirchner at 2024-07-04T11:12:59-04:00 AST: move Data instance definition for ModuleName to GHC.Unit.Types To remove the dependency on GHC.Utils.Misc inside Language.Haskell.Syntax.Module.Name, the instance definition is moved from there into GHC.Unit.Types. Progress towards #21592 - - - - - 6cbba381 by Fabian Kirchner at 2024-07-04T11:12:59-04:00 AST: move negateOverLitVal into GHC.Hs.Lit The function negateOverLitVal is not used within Language.Haskell and therefore can be moved to the respective module inside GHC.Hs. Progress towards #21592 - - - - - 611aa7c6 by Fabian Kirchner at 2024-07-04T11:12:59-04:00 AST: move conDetailsArity into GHC.Rename.Module The function conDetailsArity is only used inside GHC.Rename.Module. We therefore move it there from Language.Haskell.Syntax.Lit. Progress towards #21592 - - - - - 1b968d16 by Mauricio at 2024-07-04T11:12:59-04:00 AST: Remove GHC.Utils.Assert from GHC Simple cleanup. Progress towards #21592 - - - - - 3d192e5d by Fabian Kirchner at 2024-07-04T11:12:59-04:00 ttg: extract Specificity, ForAllTyFlag and helper functions from GHC.Types.Var Progress towards #21592 Specificity, ForAllTyFlag and its' helper functions are extracted from GHC.Types.Var and moved into a new module Language.Haskell.Syntax.Specificity. Note: Eventually (i.e. after Language.Haskell.Syntax.Decls does not depend on GHC.* anymore) these should be moved into Language.Haskell.Syntax.Decls. At this point, this would cause cyclic dependencies. - - - - - 257d1adc by Adowrath at 2024-07-04T11:12:59-04:00 ttg: Split HsSrcBang, remove ref to DataCon from Syntax.Type Progress towards #21592 This splits HsSrcBang up, creating the new HsBang within `Language.Haskell.Syntax.Basic`. `HsBang` holds the unpackedness and strictness information, while `HsSrcBang` only adds the SourceText for usage within the compiler directly. Inside the AST, to preserve the SourceText, it is hidden behind the pre-existing extension point `XBindTy`. All other occurrences of `HsSrcBang` were adapted to deconstruct the inner `HsBang`, and when interacting with the `BindTy` constructor, the hidden `SourceText` is extracted/inserted into the `XBindTy` extension point. `GHC.Core.DataCon` exports both `HsSrcBang` and `HsBang` for convenience. A constructor function `mkHsSrcBang` that takes all individual components has been added. Two exceptions has been made though: - The `Outputable HsSrcBang` instance is replaced by `Outputable HsBang`. While being only GHC-internal, the only place it's used is in outputting `HsBangTy` constructors -- which already have `HsBang`. It wouldn't make sense to reconstruct a `HsSrcBang` just to ignore the `SourceText` anyway. - The error `TcRnUnexpectedAnnotation` did not use the `SourceText`, so it too now only holds a `HsBang`. - - - - - 24757fec by Mauricio at 2024-07-04T11:12:59-04:00 AST: Moved definitions that use GHC.Utils.Panic to GHC namespace Progress towards #21592 - - - - - 9be49379 by Mike Pilgrem at 2024-07-04T11:13:41-04:00 Fix #25032 Refer to Cabal's `includes` field, not `include-files` - - - - - 9e2ecf14 by Andrew Lelechenko at 2024-07-04T11:14:17-04:00 base: fix more missing changelog entries - - - - - a82121b3 by Peter Trommler at 2024-07-04T11:14:53-04:00 X86 NCG: Fix argument promotion in foreign C calls Promote 8 bit and 16 bit signed arguments by sign extension. Fixes #25018 - - - - - fab13100 by Bryan Richter at 2024-07-04T11:15:29-04:00 Add .gitlab/README.md with creds instructions - - - - - 564981bd by Matthew Pickering at 2024-07-05T07:35:29-04:00 configure: Set LD_STAGE0 appropiately when 9.10.1 is used as a boot compiler In 9.10.1 the "ld command" has been removed, so we fall back to using the more precise "merge objects command" when it's available as LD_STAGE0 is only used to set the object merging command in hadrian. Fixes #24949 - - - - - a949c792 by Matthew Pickering at 2024-07-05T07:35:29-04:00 hadrian: Don't build ghci object files for ./hadrian/ghci target There is some convoluted logic which determines whether we build ghci object files are not. In any case, if you set `ghcDynPrograms = pure False` then it forces them to be built. Given we aren't ever building executables with this flavour it's fine to leave `ghcDynPrograms` as the default and it should be a bit faster to build less. Also fixes #24949 - - - - - 48bd8f8e by Matthew Pickering at 2024-07-05T07:36:06-04:00 hadrian: Remove STG dump from ticky_ghc flavour transformer This adds 10-15 minutes to build time, it is a better strategy to precisely enable dumps for the modules which show up prominently in a ticky profile. Given I am one of the only people regularly building ticky compilers I think it's worthwhile to remove these. Fixes #23635 - - - - - 5b1aefb7 by Matthew Pickering at 2024-07-05T07:36:06-04:00 hadrian: Add dump_stg flavour transformer This allows you to write `--flavour=default+ticky_ghc+dump_stg` if you really want STG for all modules. - - - - - ab2b60b6 by Sven Tennie at 2024-07-08T15:03:41-04:00 AArch64: Simplify stmtToInstrs type There's no need to hand `Nothing`s around... (there was no case with a `BlockId`.) - - - - - 71a7fa8c by Sven Tennie at 2024-07-08T15:03:41-04:00 AArch64: Simplify stmtsToInstrs type The `BlockId` parameter (`bid`) is never used, only handed around. Deleting it simplifies the surrounding code. - - - - - 8bf6fd68 by Simon Peyton Jones at 2024-07-08T15:04:17-04:00 Fix eta-expansion in Prep As #25033 showed, we were eta-expanding in a way that broke a join point, which messed up Note [CorePrep invariants]. The fix is rather easy. See Wrinkle (EA1) of Note [Eta expansion of arguments in CorePrep] - - - - - 96acf823 by Sjoerd Visscher at 2024-07-09T06:16:14-04:00 One-shot Haddock - - - - - 74ec4c06 by Sjoerd Visscher at 2024-07-09T06:16:14-04:00 Remove haddock-stdout test option Superseded by output handling of Hadrian - - - - - ed8a8f0b by Rodrigo Mesquita at 2024-07-09T06:16:51-04:00 ghc-boot: Relax Cabal bound Fixes #25013 - - - - - 3f9548fe by Matthew Pickering at 2024-07-09T06:17:36-04:00 ci: Unset ALEX/HAPPY variables when testing bootstrap jobs Ticket #24826 reports a regression in 9.10.1 when building from a source distribution. This patch is an attempt to reproduce the issue on CI by more aggressively removing `alex` and `happy` from the environment. - - - - - aba2c9d4 by Andrea Bedini at 2024-07-09T06:17:36-04:00 hadrian: Ignore build-tool-depends fields in cabal files hadrian does not utilise the build-tool-depends fields in cabal files and their presence can cause issues when building source distribution (see #24826) Ideally Cabal would support building "full" source distributions which would remove the need for workarounds in hadrian but for now we can patch the build-tool-depends out of the cabal files. Fixes #24826 - - - - - 12bb9e7b by Matthew Pickering at 2024-07-09T06:18:12-04:00 testsuite: Don't attempt to link when checking whether a way is supported It is sufficient to check that the simple test file compiles as it will fail if there are not the relevant library files for the requested way. If you break a way so badly that even a simple executable fails to link (as I did for profiled dynamic way), it will just mean the tests for that way are skipped on CI rather than displayed. - - - - - 46ec0a8e by Torsten Schmits at 2024-07-09T13:37:02+02:00 Improve docs for NondecreasingIndentation The text stated that this affects indentation of layouts nested in do expressions, while it actually affects that of do layouts nested in any other. - - - - - dddc9dff by Zubin Duggal at 2024-07-12T11:41:24-04:00 compiler: Fingerprint -fwrite-if-simplified-core We need to recompile if this flag is changed because later modules might depend on the simplified core for this module if -fprefer-bytecode is enabled. Fixes #24656 - - - - - 145a6477 by Matthew Pickering at 2024-07-12T11:42:00-04:00 Add support for building profiled dynamic way The main payload of this change is to hadrian. * Default settings will produced dynamic profiled objects * `-fexternal-interpreter` is turned on in some situations when there is an incompatibility between host GHC and the way attempting to be built. * Very few changes actually needed to GHC There are also necessary changes to the bootstrap plans to work with the vendored Cabal dependency. These changes should ideally be reverted by the next GHC release. In hadrian support is added for building profiled dynamic libraries (nothing too exciting to see there) Updates hadrian to use a vendored Cabal submodule, it is important that we replace this usage with a released version of Cabal library before the 9.12 release. Fixes #21594 ------------------------- Metric Increase: libdir ------------------------- - - - - - 414a6950 by Matthew Pickering at 2024-07-12T11:42:00-04:00 testsuite: Make find_so regex more precise The hash contains lowercase [a-z0-9] and crucially not _p which meant we sometimes matched on `libHS.._p` profiled shared libraries rather than the normal shared library. - - - - - dee035bf by Alex Mason at 2024-07-12T11:42:41-04:00 ncg(aarch64): Add fsqrt instruction, byteSwap primitives [#24956] Implements the FSQRT machop using native assembly rather than a C call. Implements MO_BSwap by producing assembly to do the byte swapping instead of producing a foreign call a C function. In `tar`, the hot loop for `deserialise` got almost 4x faster by avoiding the foreign call which caused spilling live variables to the stack -- this means the loop did 4x more memory read/writing than necessary in that particular case! - - - - - 5104ee61 by Sylvain Henry at 2024-07-12T11:43:23-04:00 Linker: use m32 allocator for sections when NEED_PLT (#24432) Use M32 allocator to avoid fragmentation when allocating ELF sections. We already did this when NEED_PLT was undefined. Failing to do this led to relocations impossible to fulfil (#24432). - - - - - 52d66984 by Sylvain Henry at 2024-07-12T11:43:23-04:00 RTS: allow M32 allocation outside of 4GB range when assuming -fPIC - - - - - c34fef56 by Sylvain Henry at 2024-07-12T11:43:23-04:00 Linker: fix stub offset Remove unjustified +8 offset that leads to memory corruption (cf discussion in #24432). - - - - - 280e4bf5 by Simon Peyton Jones at 2024-07-12T11:43:59-04:00 Make type-equality on synonyms a bit faster This MR make equality fast for (S tys1 `eqType` S tys2), where S is a non-forgetful type synonym. It doesn't affect compile-time allocation much, but then comparison doesn't allocate anyway. But it seems like a Good Thing anyway. See Note [Comparing type synonyms] in GHC.Core.TyCo.Compare and Note [Forgetful type synonyms] in GHC.Core.TyCon Addresses #25009. - - - - - cb83c347 by Alan Zimmerman at 2024-07-12T11:44:35-04:00 EPA: Bring back SrcSpan in EpaDelta When processing files in ghc-exactprint, the usual workflow is to first normalise it with makeDeltaAst, and then operate on it. But we need the original locations to operate on it, in terms of finding things. So restore the original SrcSpan for reference in EpaDelta - - - - - 7bcda869 by Matthew Pickering at 2024-07-12T11:45:11-04:00 Update alpine release job to 3.20 alpine 3.20 was recently released and uses a new python and sphinx toolchain which could be useful to test. - - - - - 43aa99b8 by Matthew Pickering at 2024-07-12T11:45:11-04:00 testsuite: workaround bug in python-3.12 There is some unexplained change to binding behaviour in python-3.12 which requires moving this import from the top-level into the scope of the function. I didn't feel any particular desire to do a deep investigation as to why this changed as the code works when modified like this. No one in the python IRC channel seemed to know what the problem was. - - - - - e3914028 by Adam Sandberg Ericsson at 2024-07-12T11:45:47-04:00 initialise mmap_32bit_base during RTS startup #24847 - - - - - 86b8ecee by Hécate Kleidukos at 2024-07-12T11:46:27-04:00 haddock: Only fetch supported languages and extensions once per Interface list This reduces the number of operations done on each Interface, because supported languages and extensions are determined from architecture and operating system of the build host. This information remains stable across Interfaces, and as such doesn not need to be recovered for each Interface. - - - - - 4f85366f by sheaf at 2024-07-13T05:58:14-04:00 Testsuite: use py-cpuinfo to compute CPU features This replaces the rather hacky logic we had in place for checking CPU features. In particular, this means that feature availability now works properly on Windows. - - - - - 41f1354d by Matthew Pickering at 2024-07-13T05:58:51-04:00 testsuite: Replace $CC with $TEST_CC The TEST_CC variable should be set based on the test compiler, which may be different to the compiler which is set to CC on your system (for example when cross compiling). Fixes #24946 - - - - - 572fbc44 by sheaf at 2024-07-15T08:30:32-04:00 isIrrefutableHsPat: consider COMPLETE pragmas This patch ensures we taken into account COMPLETE pragmas when we compute whether a pattern is irrefutable. In particular, if a pattern synonym is the sole member of a COMPLETE pragma (without a result TyCon), then we consider a pattern match on that pattern synonym to be irrefutable. This affects the desugaring of do blocks, as it ensures we don't use a "fail" operation. Fixes #15681 #16618 #22004 - - - - - 84dadea9 by Zubin Duggal at 2024-07-15T08:31:09-04:00 haddock: Handle non-hs files, so that haddock can generate documentation for modules with foreign imports and template haskell. Fixes #24964 - - - - - 0b4ff9fa by Zubin Duggal at 2024-07-15T12:12:30-04:00 haddock: Keep track of warnings/deprecations from dependent packages in `InstalledInterface` and use this to propagate these on items re-exported from dependent packages. Fixes #25037 - - - - - b8b4b212 by Zubin Duggal at 2024-07-15T12:12:30-04:00 haddock: Keep track of instance source locations in `InstalledInterface` and use this to add source locations on out of package instances Fixes #24929 - - - - - 559a7a7c by Matthew Pickering at 2024-07-15T12:13:05-04:00 ci: Refactor job_groups definition, split up by platform The groups are now split up so it's easier to see which jobs are generated for each platform No change in behaviour, just refactoring. - - - - - 20383006 by Matthew Pickering at 2024-07-16T11:48:25+01:00 ci: Replace debian 10 with debian 12 on validation jobs Since debian 10 is now EOL we migrate onwards to debian 12 as the basis for most platform independent validation jobs. - - - - - 12d3b66c by Matthew Pickering at 2024-07-17T13:22:37-04:00 ghcup-metadata: Fix use of arch argument The arch argument was ignored when making the jobname, which lead to failures when generating metadata for the alpine_3_18-aarch64 bindist. Fixes #25089 - - - - - bace981e by Matthew Pickering at 2024-07-19T10:14:02-04:00 testsuite: Delay querying ghc-pkg to find .so dirs until test is run The tests which relied on find_so would fail when `test` was run before the tree was built. This was because `find_so` was evaluated too eagerly. We can fix this by waiting to query the location of the libraries until after the compiler has built them. - - - - - 478de1ab by Torsten Schmits at 2024-07-19T10:14:37-04:00 Add `complete` pragmas for backwards compat patsyns `ModLocation` and `ModIface` !12347 and !12582 introduced breaking changes to these two constructors and mitigated that with pattern synonyms. - - - - - b57792a8 by Matthew Pickering at 2024-07-19T10:15:13-04:00 ci: Fix ghcup-metadata generation (again) I made some mistakes in 203830065b81fe29003c1640a354f11661ffc604 * Syntax error * The aarch-deb11 bindist doesn't exist I tested against the latest nightly pipeline locally: ``` nix run .gitlab/generate-ci#generate-job-metadata nix shell -f .gitlab/rel_eng/ -c ghcup-metadata --pipeline-id 98286 --version 9.11.20240715 --fragment --date 2024-07-17 --metadata=/tmp/meta ``` - - - - - 1fa35b64 by Andreas Klebinger at 2024-07-19T17:35:20+02:00 Revert "Allow non-absolute values for bootstrap GHC variable" This broke configure in subtle ways resulting in #25076 where hadrian didn't end up the boot compiler it was configured to use. This reverts commit 209d09f52363b261b900cf042934ae1e81e2caa7. - - - - - 55117e13 by Simon Peyton Jones at 2024-07-24T02:41:12-04:00 Fix bad bug in mkSynonymTyCon, re forgetfulness As #25094 showed, the previous tests for forgetfulness was plain wrong, when there was a forgetful synonym in the RHS of a synonym. - - - - - a8362630 by Sergey Vinokurov at 2024-07-24T12:22:45-04:00 Define Eq1, Ord1, Show1 and Read1 instances for basic Generic representation types This way the Generically1 newtype could be used to derive Eq1 and Ord1 for user types with DerivingVia. The CLC proposal is https://github.com/haskell/core-libraries-committee/issues/273. The GHC issue is https://gitlab.haskell.org/ghc/ghc/-/issues/24312. - - - - - de5d9852 by Simon Peyton Jones at 2024-07-24T12:23:22-04:00 Address #25055, by disabling case-of-runRW# in Gentle phase See Note [Case-of-case and full laziness] in GHC.Driver.Config.Core.Opt.Simplify - - - - - 3f89ab92 by Andreas Klebinger at 2024-07-25T14:12:54+02:00 Fix -freg-graphs for FP and AARch64 NCG (#24941). It seems we reserve 8 registers instead of four for global regs based on the layout in Note [AArch64 Register assignments]. I'm not sure it's neccesary, but for now we just accept this state of affairs and simple update -fregs-graph to account for this. - - - - - f6b4c1c9 by Simon Peyton Jones at 2024-07-27T09:45:44-04:00 Fix nasty bug in occurrence analyser As #25096 showed, the occurrence analyser was getting one-shot info flat out wrong. This commit does two things: * It fixes the bug and actually makes the code a bit tidier too. The work is done in the new function GHC.Core.Opt.OccurAnal.mkRhsOccEnv, especially the bit that prepares the `occ_one_shots` for the RHS. See Note [The OccEnv for a right hand side] * When floating out a binding we must be conservative about one-shot info. But we were zapping the entire demand info, whereas we only really need zap the /top level/ cardinality. See Note [Floatifying demand info when floating] in GHC.Core.Opt.SetLevels For some reason there is a 2.2% improvement in compile-time allocation for CoOpt_Read. Otherwise nickels and dimes. Metric Decrease: CoOpt_Read - - - - - 646ee207 by Torsten Schmits at 2024-07-27T09:46:20-04:00 add missing cell in flavours table - - - - - ec2eafdb by Ben Gamari at 2024-07-28T20:51:12+02:00 users-guide: Drop mention of dead __PARALLEL_HASKELL__ macro This has not existed for over a decade. - - - - - e2f2a56e by Arnaud Spiwack at 2024-07-28T22:21:07-04:00 Add tests for 25081 - - - - - 23f50640 by Arnaud Spiwack at 2024-07-28T22:21:07-04:00 Scale multiplicity in list comprehension Fixes #25081 - - - - - d2648289 by romes at 2024-07-30T01:38:12-04:00 TTG HsCmdArrForm: use Fixity via extension point Also migrate Fixity from GHC.Hs to Language.Haskell.Syntax since it no longer uses any GHC-specific data types. Fixed arrow desugaring bug. (This was dead code before.) Remove mkOpFormRn, it is also dead code, only used in the arrow desugaring now removed. Co-authored-by: Fabian Kirchner <kirchner at posteo.de> Co-authored-by: Alan Zimmerman <alan.zimm at gmail.com> - - - - - e258ad54 by Matthew Pickering at 2024-07-30T01:38:48-04:00 ghcup-metadata: More metadata fixes * Incorrect version range on the alpine bindists * Missing underscore in "unknown_versioning" Fixes #25119 - - - - - 72b54c07 by Rodrigo Mesquita at 2024-08-01T00:47:29-04:00 Deriving-via one-shot strict state Monad instances A small refactor to use deriving via GHC.Utils.Monad.State.Strict Monad instances for state Monads with unboxed/strict results which all re-implemented the one-shot trick in the instance and used unboxed tuples: * CmmOptM in GHC.Cmm.GenericOpt * RegM in GHC.CmmToAsm.Reg.Linear.State * UniqSM in GHC.Types.Unique.Supply - - - - - bfe4b3d3 by doyougnu at 2024-08-01T00:48:06-04:00 Rts linker: add case for pc-rel 64 relocation part of the upstream haskell.nix patches - - - - - 5843c7e3 by doyougnu at 2024-08-01T00:48:42-04:00 RTS linker: aarch64: better debug information Dump better debugging information when a symbol address is null. Part of the haskell.nix patches upstream project Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - c2e9c581 by Rodrigo Mesquita at 2024-08-01T00:49:18-04:00 base: Add haddocks to HasExceptionContext Fixes #25091 - - - - - f954f428 by Sylvain Henry at 2024-08-01T00:49:59-04:00 Only lookup ghcversion.h file in the RTS include-dirs by default. The code was introduced in 3549c952b535803270872adaf87262f2df0295a4. It used `getPackageIncludePath` which name doesn't convey that it looks into all include paths of the preload units too. So this behavior is probably unintentional and it should be ok to change it. Fix #25106 - - - - - 951ce3d5 by Matthew Pickering at 2024-08-01T00:50:35-04:00 driver: Fix -Wmissing-home-modules when multiple units have the same module name It was assumed that module names were unique but that isn't true with multiple units. The fix is quite simple, maintain a set of `(ModuleName, UnitId)` and query that to see whether the module has been specified. Fixes #25122 - - - - - bae1fea4 by sheaf at 2024-08-01T00:51:15-04:00 PMC: suggest in-scope COMPLETE sets when possible This commit modifies GHC.HsToCore.Pmc.Solver.generateInhabitingPatterns to prioritise reporting COMPLETE sets in which all of the ConLikes are in scope. This avoids suggesting out of scope constructors when displaying an incomplete pattern match warning, e.g. in baz :: Ordering -> Int baz = \case EQ -> 5 we prefer: Patterns of type 'Ordering' not matched: LT GT over: Patterns of type 'Ordering' not matched: OutOfScope Fixes #25115 - - - - - ff158fcd by Tommy Bidne at 2024-08-02T01:14:32+12:00 Print exception metadata in default handler CLC proposals 231 and 261: - Add exception type metadata to SomeException's displayException. - Add "Exception" header to default exception handler. See: https://github.com/haskell/core-libraries-committee/issues/231 https://github.com/haskell/core-libraries-committee/issues/261 Update stm submodule for test fixes. - - - - - 8b2f70a2 by Andrei Borzenkov at 2024-08-01T23:00:46-04:00 Type syntax in expressions (#24159, #24572, #24226) This patch extends the grammar of expressions with syntax that is typically found only in types: * function types (a -> b), (a ->. b), (a %m -> b) * constrained types (ctx => t) * forall-quantification (forall tvs. t) The new forms are guarded behind the RequiredTypeArguments extension, as specified in GHC Proposal #281. Examples: {-# LANGUAGE RequiredTypeArguments #-} e1 = f (Int -> String) -- function type e2 = f (Int %1 -> String) -- linear function type e3 = f (forall a. Bounded a => a) -- forall type, constraint The GHC AST and the TH AST have been extended as follows: syntax | HsExpr | TH.Exp ---------------+----------+-------------- a -> b | HsFunArr | ConE (->) a %m -> b | HsFunArr | ConE FUN ctx => t | HsQual | ConstrainedE forall a. t | HsForAll | ForallE forall a -> t | HsForAll | ForallVisE Additionally, a new warning flag -Wview-pattern-signatures has been introduced to aid with migration to the new precedence of (e -> p :: t). Co-authored-by: Vladislav Zavialov <vlad.z.4096 at gmail.com> - - - - - 66e7f57d by Brandon Chinn at 2024-08-01T21:50:58-07:00 Implement MultilineStrings (#24390) This commit adds support for multiline strings, proposed at https://github.com/ghc-proposals/ghc-proposals/pull/569. Multiline strings can now be written as: myString = """ this is a multiline string """ The multiline string will have leading indentation stripped away. Full details of this post-processing may be found at the new GHC.Parser.String module. In order to cleanly implement this and maximize reusability, I broke out the lexing logic for strings out of Lexer.x into a new GHC.Parser.String module, which lexes strings with any provided "get next character" function. This also gave us the opportunity to clean up this logic, and even optimize it a bit. With this change, parsing string literals now takes 25% less time and 25% less space. - - - - - cf47b96f by Rodrigo Mesquita at 2024-08-03T05:59:40-04:00 hi: Stable sort avails Sorting the Avails in DocStructures is required to produce fully deterministic interface files in presence of re-exported modules. Fixes #25104 - - - - - af2ae742 by M. Taimoor Zaeem at 2024-08-03T18:52:50+05:00 haddock: decrease margin on top of small headings - - - - - a1e42e7a by Rodrigo Mesquita at 2024-08-05T21:03:04-04:00 hi: Deterministic ImportedMods in Usages The `mi_usages` field of the interface files must use a deterministic list of `Usage`s to guarantee a deterministic interface. However, this list was, in its origins, constructed from a `ModuleEnv` which uses a non-deterministic ordering that was leaking into the interface. Specifically, ImportedMods = ModuleEnv ... would get converted to a list and then passed to `mkUsageInfo` to construct the Usages. The solution is simple. Back `ImportedMods` with a deterministic map. `Map Module ...` is enough, since the Ord instance for `Module` already uses a stable, deterministic, comparison. Fixes #25131 - - - - - eb1cb536 by Serge S. Gulin at 2024-08-06T08:54:55+00:00 testsuite: extend size performance tests with gzip (fixes #25046) The main purpose is to create tests for minimal app (hello world and its variations, i.e. unicode used) distribution size metric. Many platforms support distribution in compressed form via gzip. It would be nice to collect information on how much size is taken by the executional bundle for each platform at minimal edge case. 2 groups of tests are added: 1. We extend javascript backend size tests with gzip-enabled versions for all cases where an optimizing compiler is used (for now it is google closure compiler). 2. We add trivial hello world tests with gzip-enabled versions for all other platforms at CI pipeline where no external optimizing compiler is used. - - - - - d94410f8 by Rodrigo Mesquita at 2024-08-07T11:49:19-04:00 ghc-internal: @since for backtraceDesired Fixes point 1 in #25052 - - - - - bfe600f5 by Rodrigo Mesquita at 2024-08-07T11:49:19-04:00 ghc-internal: No trailing whitespace in exceptions Fixes #25052 - - - - - 62650d9f by Andreas Klebinger at 2024-08-07T11:49:54-04:00 Add since annotation for -fkeep-auto-rules. This partially addresses #25082. - - - - - 5f0e23fd by Andreas Klebinger at 2024-08-07T11:49:54-04:00 Mention `-fkeep-auto-rules` in release notes. It was added earlier but hadn't appeared in any release notes yet. Partially addresses #25082. - - - - - 7446a09a by Sylvain Henry at 2024-08-07T11:50:35-04:00 Cmm: don't perform unsound optimizations on 32-bit compiler hosts - beef61351b240967b49169d27a9a19565cf3c4af enabled the use of MO_Add/MO_Sub for 64-bit operations in the C and LLVM backends - 6755d833af8c21bbad6585144b10e20ac4a0a1ab did the same for the x86 NCG backend However we store some literal values as `Int` in the compiler. As a result, some Cmm optimizations transformed target 64-bit literals into compiler `Int`. If the compiler is 32-bit, this leads to computing with wrong literals (see #24893 and #24700). This patch disables these Cmm optimizations for 32-bit compilers. This is unsatisfying (optimizations shouldn't be compiler-word-size dependent) but it fixes the bug and it makes the patch easy to backport. A proper fix would be much more invasive but it shall be implemented in the future. Co-authored-by: amesgen <amesgen at amesgen.de> - - - - - d59faaf2 by Vladislav Zavialov at 2024-08-07T11:51:11-04:00 docs: Update info on RequiredTypeArguments Add a section on "types in terms" that were implemented in 8b2f70a202 and remove the now outdated suggestion of using `type` for them. - - - - - 39fd6714 by Sylvain Henry at 2024-08-07T11:51:52-04:00 JS: fix minor typo in base's jsbits - - - - - e7764575 by Sylvain Henry at 2024-08-07T11:51:52-04:00 RTS: remove hack to force old cabal to build a library with only JS sources Need to extend JSC externs with Emscripten RTS definitions to avoid JSC_UNDEFINED_VARIABLE errors when linking without the emcc rts. Fix #25138 Some recompilation avoidance tests now fail. This is tracked with the other instances of this failure in #23013. My hunch is that they were working by chance when we used the emcc linker. Metric Decrease: T24602_perf_size - - - - - d1a40233 by Brandon Chinn at 2024-08-07T11:53:08-04:00 Support multiline strings in type literals (#25132) - - - - - 610840eb by Sylvain Henry at 2024-08-07T11:53:50-04:00 JS: fix callback documentation (#24377) Fix #24377 - - - - - 6ae4b76a by Zubin Duggal at 2024-08-13T13:36:57-04:00 haddock: Build haddock-api and haddock-library using hadrian We build these two packages as regular boot library dependencies rather than using the `in-ghc-tree` flag to include the source files into the haddock executable. The `in-ghc-tree` flag is moved into haddock-api to ensure that haddock built from hackage can still find the location of the GHC bindist using `ghc-paths`. Addresses #24834 This causes a metric decrease under non-release flavours because under these flavours libraries are compiled with optimisation but executables are not. Since we move the bulk of the code from the haddock executable to the haddock-api library, we see a metric decrease on the validate flavours. Metric Decrease: haddock.Cabal haddock.base haddock.compiler - - - - - 51ffba5d by Arnaud Spiwack at 2024-08-13T13:37:50-04:00 Add an extension field to HsRecFields This is the Right Thing to Do™. And it prepares for storing a multiplicity coercion there. First step of the plan outlined here and below https://gitlab.haskell.org/ghc/ghc/-/merge_requests/12947#note_573091 - - - - - 4d2faeeb by Arnaud Spiwack at 2024-08-13T13:37:50-04:00 Add test for #24961 - - - - - 623b4337 by Arnaud Spiwack at 2024-08-13T13:37:50-04:00 Ensures that omitted record fields in pattern have multiplicity Many Omitted fields were simply ignored in the type checker and produced incorrect Core code. Fixes #24961 Metric Increase: RecordUpdPerf - - - - - c749bdfd by Sylvain Henry at 2024-08-13T13:38:41-04:00 AARCH64 linker: skip NONE relocations This patch is part of the patches upstreamed from haskell.nix. See https://github.com/input-output-hk/haskell.nix/pull/1960 for the original report/patch. - - - - - 682a6a41 by Brandon Chinn at 2024-08-13T13:39:17-04:00 Support multiline strings in TH - - - - - ee0a9c18 by Matthew Pickering at 2024-08-14T14:27:39-04:00 Extend -reexported-module flag to support module renaming The -reexported-module flag now supports renaming -rexported-modules. ``` -rexported-module "A as B" ``` This feature is only relevant to multi-component sessions. Fixes #25139 - - - - - e9496000 by Arnaud Spiwack at 2024-08-14T14:28:20-04:00 Don't restrict eta-reduction of linear functions This commit simply removes code. All the supporting implementation has been done as part of !12883. Closes #25129 - - - - - 2bb4156e by sheaf at 2024-08-14T14:28:56-04:00 Allow @ character in C labels Generated symbol names can include the '@' character, for example when using `__attribute__((vectorcall))`. - - - - - 7602ca23 by Sylvain Henry at 2024-08-14T14:29:36-04:00 Linker: replace blind tuple with a datatype + docs - - - - - bdd77b9e by sheaf at 2024-08-16T12:47:11-04:00 isIrrefutableHsPat: look up ConLikes in the HscEnv At GhcRn stage, in isIrrefutableHsPat we only looked up data constructors in the RdrEnv, which meant that we lacked fallibility information for out-of-scope constructors (which can arise from Template Haskell splices). Instead, we use 'lookupGREInfo', which looks up the information in the type environment. This was the correct function to call all along, but was not used in 572fbc44 due to import cycle reasons. The appropriate functions, 'irrefutableConLike{Rn,Tc}' have been moved to 'GHC.Rename.Env', which avoids import cycles. Fixes #25164 - - - - - 4bee377c by Sylvain Henry at 2024-08-16T12:47:53-04:00 Linker: some refactoring to prepare for #24886 - Rename LoadedBCOs into LazyBCOs - Bundle SptEntries with CompiledByteCode and removed [SptEntry] field from the BCOs constructor - Rename Linkable's LM constructor into Linkable: in the past we had LM and LP for Module and Package, now we only have the former. - Rename Unlinked into LinkablePart (and linkableUnlinked into linkableParts) - Use NonEmpty to encode invariant in Linkable's linkableParts type - Add helpers: linkableLibs, linkableBCOs, etc. - Add documentation - Remove partial nameOfObject - Rename nameOfObject_maybe into linkablePartPath - Rename byteCodeOfObject into linkablePartAllBCOs. - Refactor linkablePartAllBCOs to avoid a panic if a LazyBCO has a C stub. Document the fact that LazyBCOs are returned in this case (contrary to linkableBCOs which only returns non-lazy ones) Refactoring done while trying to understand how to adapt the linker code to support the JS backend too (cf #24886). - - - - - fa0dbaca by Mario Blažević at 2024-08-17T03:31:32+00:00 Implements the Exportable Named Default proposal (#24305) This squashed commit adds support for exportable named defaults, the accepted GHC proposal at https://github.com/ghc-proposals/ghc-proposals/pull/409 The proposal extends the Haskell '98 declarations default (Int, Double) which were implicitly always applying to Num class alone, to allow specifying an arbitrary single-parameter class: default IsString (Text, String) The effect of this declaration would be to eliminate the ambiguous type errors around string literals when OverloadedStrings extension is active. The declaration by itself has effect only in its module, so the proposal also adds the ability to export class defaults: module MyModule (default IsIstring) Once the language extension is published and established, we can consider using it in base and other libraries. See Note [Named default declarations] in GHC.Tc.Gen.Default for implementation details. - - - - - 1deba6b2 by Simon Peyton Jones at 2024-08-17T13:58:13-04:00 Make kick-out more selective This MR revised the crucial kick-out criteria in the constraint solver. Ticket #24984 showed an example in which * We were kicking out unnecessarily * That gave rise to extra work, of course * But it /also/ led to exponentially-sized coercions due to lack of sharing in coercions (something we want to fix separately #20264) This MR sharpens up the kick-out criteria; specifially in (KK2) we look only under type family applications if (fs>=fw). This forced me to understand the existing kick-out story, and I ended up rewriting many of the careful Notes in GHC.Tc.Solver.InertSet. Especially look at the new `Note [The KickOut Criteria]` The proof of termination is not air-tight, but it is better than before, and both Richard and I think it's correct :-). - - - - - 88488847 by Cheng Shao at 2024-08-18T04:44:01+02:00 testsuite: remove undesired -fasm flag from test ways This patch removes the -fasm flag from test ways, except ways like optasm that explicitly state they are meant to be compiled with NCG backend. Most test ways should use the default codegen backend, and the precense of -fasm can cause stderr mismatches like this when GHC is configured with the unregisterised backend: ``` --- /dev/null +++ /tmp/ghctest-3hydwldj/test spaces/testsuite/tests/profiling/should_compile/prof-late-cc.run/prof-late-cc.comp.stderr.normalised @@ -0,0 +1,2 @@ +when making flags consistent: warning: [GHC-74335] [-Winconsistent-flags (in -Wdefault)] + Target platform uses unregisterised ABI, so compiling via C *** unexpected failure for prof-late-cc(prof_no_auto) ``` This has been breaking the wasm unreg nightly job since !12595 landed. - - - - - 3a145315 by Cheng Shao at 2024-08-18T13:05:45-04:00 ghci: fix isMinTTY.h casing for Windows targets This commit fixes isMinTTY.h casing in isMinTTY.c that's compiled for Windows targets. While this looks harmless given Windows filesystems are case-insensitive by default, it does cause a compilation warning with recent versions of clang, so we might as well fix the casing: ``` driver\ghci\isMinTTY.c:10:10: error: warning: non-portable path to file '"isMinTTY.h"'; specified path differs in case from file name on disk [-Wnonportable-include-path] | 10 | #include "isMINTTY.h" | ^ #include "isMINTTY.h" ^~~~~~~~~~~~ "isMinTTY.h" 1 warning generated. ``` - - - - - 5f972bfb by Zubin Duggal at 2024-08-21T03:18:15-04:00 compiler: Fix pretty printing of ticked prefix constructors (#24237) - - - - - ef0a08e7 by Mike Pilgrem at 2024-08-21T03:18:57-04:00 Fix #15773 Clarify further -rtsopts 'defaults' in docs - - - - - 05a4be58 by Sebastian Graf at 2024-08-21T03:19:33-04:00 Improve efficiency of `assertError` (#24625) ... by moving `lazy` to the exception-throwing branch. It's all documented in `Note [Strictness of assertError]`. - - - - - c29b2b5a by sheaf at 2024-08-21T13:11:30-04:00 GHCi debugger: drop record name spaces for Ids When binding new local variables at a breakpoint, we should create Ids with variable namespace, and not record field namespace. Otherwise the rest of the compiler falls over because the IdDetails are wrong. Fixes #25109 - - - - - bd82ac9f by Hécate Kleidukos at 2024-08-21T13:12:12-04:00 base: Final deprecation of GHC.Pack The timeline mandated by #21461 has come to its term and after two years and four minor releases, we are finally removing GHC.Pack from base. Closes #21536 - - - - - 5092dbff by Sylvain Henry at 2024-08-21T13:12:54-04:00 JS: support rubbish static literals (#25177) Support for rubbish dynamic literals was added in #24664. This patch does the same for static literals. Fix #25177 - - - - - b5a2c061 by Phil de Joux at 2024-08-21T13:13:33-04:00 haddock docs: prefix comes before, postfix comes after - - - - - 6fde3685 by Marcin Szamotulski at 2024-08-21T23:15:39-04:00 haddock: include package info with --show-interface - - - - - 7e02111b by Andreas Klebinger at 2024-08-21T23:16:15-04:00 Document the (x86) SIMD macros. Fixes #25021. - - - - - 05116c83 by Rodrigo Mesquita at 2024-08-22T10:37:44-04:00 ghc-internal: Derive version from ghc's version Fixes #25005 - - - - - 73f5897d by Ben Gamari at 2024-08-22T10:37:44-04:00 base: Deprecate GHC.Desugar See https://github.com/haskell/core-libraries-committee/issues/216. This will be removed in GHC 9.14. - - - - - 821d0a9a by Cheng Shao at 2024-08-22T10:38:22-04:00 compiler: Store ForeignStubs and foreign C files in interfaces This data is used alongside Core bindings to reconstruct intermediate build products when linking Template Haskell splices with bytecode. Since foreign stubs and files are generated in the pipeline, they were lost with only Core bindings stored in interfaces. The interface codec type `IfaceForeign` contains a simplified representation of `ForeignStubs` and the set of foreign sources that were manually added by the user. When the backend phase writes an interface, `mkFullIface` calls `encodeIfaceForeign` to read foreign source file contents and assemble `IfaceForeign`. After the recompilation status check of an upstream module, `initWholeCoreBindings` calls `decodeIfaceForeign` to restore `ForeignStubs` and write the contents of foreign sources to the file system as temporary files. The restored foreign inputs are then processed by `hscInteractive` in the same manner as in a regular pipeline. When linking the stub objects for splices, they are excluded from suffix adjustment for the interpreter way through a new flag in `Unlinked`. For details about these processes, please consult Note [Foreign stubs and TH bytecode linking]. Metric Decrease: T13701 - - - - - f0408eeb by Cheng Shao at 2024-08-23T10:37:10-04:00 git: remove a.out and include it in .gitignore a.out is a configure script byproduct. It was mistakenly checked into the tree in !13118. This patch removes it, and include it in .gitignore to prevent a similar error in the future. - - - - - 1f95c5e4 by Matthew Pickering at 2024-08-23T10:37:46-04:00 docs: Fix code-block syntax on old sphinx version This code-block directive breaks the deb9 sphinx build. Fixes #25201 - - - - - 27dceb42 by Sylvain Henry at 2024-08-26T11:05:11-04:00 JS: add basic support for POSIX *at functions (#25190) openat/fstatat/unlinkat/dup are now used in the recent release of the `directory` and `file-io` packages. As such, these functions are (indirectly) used in the following tests one we'll bump the `directory` submodule (see !13122): - openFile008 - jsOptimizer - T20509 - bkpcabal02 - bkpcabal03 - bkpcabal04 - - - - - c68be356 by Matthew Pickering at 2024-08-26T11:05:11-04:00 Update directory submodule to latest master The primary reason for this bump is to fix the warning from `ghc-pkg check`: ``` Warning: include-dirs: /data/home/ubuntu/.ghcup/ghc/9.6.2/lib/ghc-9.6.2/lib/../lib/aarch64-linux-ghc-9.6.2/directory-1.3.8.1/include doesn't exist or isn't a directory ``` This also requires adding the `file-io` package as a boot library (which is discussed in #25145) Fixes #23594 #25145 - - - - - 4ee094d4 by Matthew Pickering at 2024-08-26T11:05:47-04:00 Fix aarch64-alpine target platform description We are producing bindists where the target triple is aarch64-alpine-linux when it should be aarch64-unknown-linux This is because the bootstrapped compiler originally set the target triple to `aarch64-alpine-linux` which is when propagated forwards by setting `bootstrap_target` from the bootstrap compiler target. In order to break this chain we explicitly specify build/host/target for aarch64-alpine. This requires a new configure flag `--enable-ignore-` which just switches off a validation check that the target platform of the bootstrap compiler is the same as the build platform. It is the same, but the name is just wrong. These commits can be removed when the bootstrap compiler has the correct target triple (I looked into patching this on ci-images, but it looked hard to do correctly as the build/host platform is not in the settings file). Fixes #25200 - - - - - e0e0f2b2 by Matthew Pickering at 2024-08-26T11:05:47-04:00 Bump nixpkgs commit for gen_ci script - - - - - 63a27091 by doyougnu at 2024-08-26T20:39:30-04:00 rts: win32: emit additional debugging information -- migration from haskell.nix - - - - - aaab3d10 by Vladislav Zavialov at 2024-08-26T20:40:06-04:00 Only export defaults when NamedDefaults are enabled (#25206) This is a reinterpretation of GHC Proposal #409 that avoids a breaking change introduced in fa0dbaca6c "Implements the Exportable Named Default proposal" Consider a module M that has no explicit export list: module M where default (Rational) Should it export the default (Rational)? The proposal says "yes", and there's a test case for that: default/DefaultImport04.hs However, as it turns out, this change in behavior breaks existing programs, e.g. the colour-2.3.6 package can no longer be compiled, as reported in #25206. In this patch, we make implicit exports of defaults conditional on the NamedDefaults extension. This fix is unintrusive and compliant with the existing proposal text (i.e. it does not require a proposal amendment). Should the proposal be amended, we can go for a simpler solution, such as requiring all defaults to be exported explicitly. Test case: testsuite/tests/default/T25206.hs - - - - - 3a5bebf8 by Matthew Pickering at 2024-08-28T14:16:42-04:00 simplifier: Fix space leak during demand analysis The lazy structure (a list) in a strict field in `DmdType` is not fully forced which leads to a very large thunk build-up. It seems there is likely still more work to be done here as it seems we may be trading space usage for work done. For now, this is the right choice as rather than using all the memory on my computer, compilation just takes a little bit longer. See #25196 - - - - - c2525e9e by Ryan Scott at 2024-08-28T14:17:17-04:00 Add missing parenthesizeHsType in cvtp's InvisP case We need to ensure that when we convert an `InvisP` (invisible type pattern) to a `Pat`, we parenthesize it (at precedence `appPrec`) so that patterns such as `@(a :: k)` will parse correctly when roundtripped back through the parser. Fixes #25209. - - - - - 1499764f by Sjoerd Visscher at 2024-08-29T16:52:56+02:00 Haddock: Add no-compilation flag This flag makes sure to avoid recompilation of the code when generating documentation by only reading the .hi and .hie files, and throw an error if it can't find them. - - - - - 768fe644 by Andreas Klebinger at 2024-09-03T13:15:20-04:00 Add functions to check for weakly pinned arrays. This commit adds `isByteArrayWeaklyPinned#` and `isMutableByteArrayWeaklyPinned#` primops. These check if a bytearray is *weakly* pinned. Which means it can still be explicitly moved by the user via compaction but won't be moved by the RTS. This moves us one more stop closer to nailing down #22255. - - - - - b16605e7 by Arsen Arsenović at 2024-09-03T13:16:05-04:00 ghc-toolchain: Don't leave stranded a.outs when testing for -g0 This happened because, when ghc-toolchain tests for -g0, it does so by compiling an empty program. This compilation creates an a.out. Since we create a temporary directory, lets place the test program compilation in it also, so that it gets cleaned up. Fixes: 25b0b40467d0a12601497117c0ad14e1fcab0b74 Closes: https://gitlab.haskell.org/ghc/ghc/-/issues/25203 - - - - - 83e70b14 by Torsten Schmits at 2024-09-03T13:16:41-04:00 Build foreign objects for TH with interpreter's way when loading from iface Fixes #25211 When linking bytecode for TH from interface core bindings with `-fprefer-byte-code`, foreign sources are loaded from the interface as well and compiled to object code in an ad-hoc manner. The results are then loaded by the interpreter, whose way may differ from the current build's target way. This patch ensures that foreign objects are compiled with the interpreter's way. - - - - - 0d3bc2fa by Cheng Shao at 2024-09-04T07:20:06-04:00 rts: fix checkClosure error message This patch fixes an error message in checkClosure() when the closure has already been evacuated. The previous logic was meant to print the evacuated closure's type in the error message, but it was completely wrong, given info was not really an info table, but a tagged pointer that points to the closure's new address. - - - - - fb0a4e5c by Sven Tennie at 2024-09-04T07:20:43-04:00 MO_AcquireFence: Less restrictive barrier GCC and CLang translate the built-in `atomic_thread_fence(memory_order_acquire)` to `dmb ishld`, which is a bit less restrictive than `dmb ish` (which also implies stores.) - - - - - a45f1488 by Fendor at 2024-09-04T20:22:00-04:00 testsuite: Add support to capture performance metrics via 'perf' Performance metrics collected via 'perf' can be more accurate for run-time performance than GHC's rts, due to the usage of hardware counters. We allow performance tests to also record PMU events according to 'perf list'. - - - - - ce61fca5 by Fendor at 2024-09-04T20:22:00-04:00 gitlab-ci: Add nightly job for running the testsuite with perf profiling support - - - - - 6dfb9471 by Fendor at 2024-09-04T20:22:00-04:00 Enable perf profiling for compiler performance tests - - - - - da306610 by sheaf at 2024-09-04T20:22:41-04:00 RecordCon lookup: don't allow a TyCon This commit adds extra logic when looking up a record constructor. If GHC.Rename.Env.lookupOccRnConstr returns a TyCon (as it may, due to the logic explained in Note [Pattern to type (P2T) conversion]), we emit an error saying that the data constructor is not in scope. This avoids the compiler falling over shortly thereafter, in the call to 'lookupConstructorInfo' inside 'GHC.Rename.Env.lookupRecFieldOcc', because the record constructor would not have been a ConLike. Fixes #25056 - - - - - 9c354beb by Matthew Pickering at 2024-09-04T20:23:16-04:00 Use deterministic names for temporary files When there are multiple threads they can race to create a temporary file, in some situations the thread will create ghc_1.c and in some it will create ghc_2.c. This filename ends up in the debug info for object files after compiling a C file, therefore contributes to object nondeterminism. In order to fix this we store a prefix in `TmpFs` which serves to namespace temporary files. The prefix is populated from the counter in TmpFs when the TmpFs is forked. Therefore the TmpFs must be forked outside the thread which consumes it, in a deterministic order, so each thread always receives a TmpFs with the same prefix. This assumes that after the initial TmpFs is created, all other TmpFs are created from forking the original TmpFs. Which should have been try anyway as otherwise there would be file collisions and non-determinism. Fixes #25224 - - - - - 59906975 by Hécate Kleidukos at 2024-09-05T10:57:15-04:00 Silence x-partial in Haddock.Backends.Xhtml This is an unfortunate consequence of two mechanisms: * GHC provides (possibly-empty) lists of names * The functions that retrieve those names are not equipped to do error reporting, and thus accept these lists at face value. They will have to be attached an effect for error reporting in a later refactoring - - - - - 8afbab62 by Hécate Kleidukos at 2024-09-05T10:57:15-04:00 hadrian: Support loading haddock in ghci There is one tricky aspect with wired-in packages where the boot package is built with `-this-unit-id ghc` but the dependency is reported as `-package-id ghc-9.6...`. This has never been fixed in GHC as the situation of loading wired-in packages into the multi-repl seems like quite a niche feature that is always just easier to workaround. - - - - - 6cac9eb8 by Matthew Pickering at 2024-09-05T10:57:15-04:00 hadrian/multi: Load all targets when ./hadrian/ghci-multi is called This seems to make a bit more sense than just loading `ghc` component (and dependencies). - - - - - 7d84df86 by Matthew Pickering at 2024-09-05T10:57:51-04:00 ci: Beef up determinism interface test There have recently been some determinism issues with the simplifier and documentation. We enable more things to test in the ABI test to check that we produce interface files deterministically. - - - - - 5456e02e by Sylvain Henry at 2024-09-06T11:57:01+02:00 Transform some StgRhsClosure into StgRhsCon after unarisation (#25166) Before unarisation we may have code like: Test.foo :: Test.D [GblId, Unf=OtherCon []] = \u [] case (# |_| #) [GHC.Types.(##)] of sat_sAw [Occ=Once1] { __DEFAULT -> Test.D [GHC.Types.True sat_sAw]; }; After unarisation we get: Test.foo :: Test.D [GblId, Unf=OtherCon []] = {} \u [] Test.D [GHC.Types.True 2#]; Notice that it's still an Updatable closure for no reason anymore. This patch transforms appropriate StgRhsClosures into StgRhsCons after unarisation, allowing these closures to be statically allocated. Now we get the expected: Test.foo :: Test.D [GblId, Unf=OtherCon []] = Test.D! [GHC.Types.True 2#]; Fix #25166 To avoid duplicating code, this patch refactors the mk(Top)StgRhs functions and put them in a GHC.Stg.Make module alongside the new mk(Top)StgRhsCon_maybe functions. - - - - - 958b4518 by Hécate Kleidukos at 2024-09-06T16:40:56-04:00 haddock: Add missing requirements.txt for the online manual - - - - - 573f9833 by Sven Tennie at 2024-09-08T09:58:21+00:00 AArch64: Implement takeRegRegMoveInstr This has likely been forgotten. - - - - - 20b0de7d by Hécate Kleidukos at 2024-09-08T14:19:28-04:00 haddock: Configuration fix for ReadTheDocs - - - - - 03055c71 by Sylvain Henry at 2024-09-09T14:58:15-04:00 JS: fake support for native adjustors (#25159) The JS backend doesn't support adjustors (I believe) and in any case if it ever supports them it will be a native support, not one via libffi. - - - - - 5bf0e6bc by Sylvain Henry at 2024-09-09T14:58:56-04:00 JS: remove redundant h$lstat It was introduced a second time by mistake in 27dceb42376c34b99a38e36a33b2abc346ed390f (cf #25190) - - - - - ffbc2ab0 by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Refactor only newSysLocalDs * Change newSysLocalDs to take a scaled type * Add newSysLocalMDs that takes a type and makes a ManyTy local Lots of files touched, nothing deep. - - - - - 7124e4ad by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Don't introduce 'nospec' on the LHS of a RULE This patch address #25160. The main payload is: * When desugaring the LHS of a RULE, do not introduce the `nospec` call for non-canonical evidence. See GHC.Core.InstEnv Note [Coherence and specialisation: overview] The `nospec` call usually introdued in `dsHsWrapper`, but we don't want it on the LHS of a RULE (that's what caused #25160). So now `dsHsWrapper` takes a flag to say if it's on the LHS of a RULE. See wrinkle (NC1) in `Note [Desugaring non-canonical evidence]` in GHC.HsToCore.Binds. But I think this flag will go away again when I have finished with my (entirely separate) speciaise-on-values patch (#24359). All this meant I had to re-understand the `nospec` stuff and coherence, and that in turn made me do some refactoring, and add a lot of new documentation The big change is that in GHC.Core.InstEnv, I changed the /type synonym/ `Canonical` into a /data type/ `CanonicalEvidence` and documented it a lot better. That in turn made me realise that CalLStacks were being treated with a bit of a hack, which I documented in `Note [CallStack and ExecptionContext hack]`. - - - - - 663daf8d by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Add defaulting of equalities This MR adds one new defaulting strategy to the top-level defaulting story: see Note [Defaulting equalities] in GHC.Tc.Solver. This resolves #25029 and #25125, which showed that users were accidentally relying on a GHC bug, which was fixed by commit 04f5bb85c8109843b9ac2af2a3e26544d05e02f4 Author: Simon Peyton Jones <simon.peytonjones at gmail.com> Date: Wed Jun 12 17:44:59 2024 +0100 Fix untouchability test This MR fixes #24938. The underlying problem was tha the test for "does this implication bring in scope any equalities" was plain wrong. This fix gave rise to a number of user complaints; but the improved defaulting story of this MR largely resolves them. On the way I did a bit of refactoring, of course * Completely restructure the extremely messy top-level defaulting code. The new code is in GHC.Tc.Solver.tryDefaulting, and is much, much, much esaier to grok. - - - - - e28cd021 by Andrzej Rybczak at 2024-09-10T00:41:18-04:00 Don't name a binding pattern It's a keyword when PatternSynonyms are set. - - - - - b09571e2 by Simon Peyton Jones at 2024-09-10T00:41:54-04:00 Do not use an error thunk for an absent dictionary In worker/wrapper we were using an error thunk for an absent dictionary, but that works very badly for -XDictsStrict, or even (as #24934 showed) in some complicated cases involving strictness analysis and unfoldings. This MR just uses RubbishLit for dictionaries. Simple. No test case, sadly because our only repro case is rather complicated. - - - - - 8bc9f5f6 by Hécate Kleidukos at 2024-09-10T00:42:34-04:00 haddock: Remove support for applehelp format in the Manual - - - - - 9ca15506 by doyougnu at 2024-09-10T10:46:38-04:00 RTS linker: add support for hidden symbols (#25191) Add linker support for hidden symbols. We basically treat them as weak symbols. Patch upstreamed from haskell.nix Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 3b2dc826 by Sven Tennie at 2024-09-10T10:47:14-04:00 Fix C warnings (#25237) GCC 14 treats the fixed warnings as errors by default. I.e. we're gaining GCC 14 compatibility with these fixes. - - - - - 05715994 by Sylvain Henry at 2024-09-10T10:47:55-04:00 JS: fix codegen of static string data Before this patch, when string literals are made trivial, we would generate `h$("foo")` instead of `h$str("foo")`. This was introduced by mistake in 6bd850e887b82c5a28bdacf5870d3dc2fc0f5091. - - - - - 949ebced by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Re-organise cross-OS compatibility layer - - - - - 84ac9a99 by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Remove CPP for obsolete GHC and Cabal versions - - - - - 370d1599 by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Move the changelog file to the 'extra-doc-files' section in the cabal file - - - - - cfbff65a by Simon Peyton Jones at 2024-09-10T19:20:16-04:00 Add ZonkAny and document it This MR fixed #24817 by adding ZonkAny, which takes a Nat argument. See Note [Any types] in GHC.Builtin.Types, especially wrinkle (Any4). - - - - - 0167e472 by Matthew Pickering at 2024-09-11T02:41:42-04:00 hadrian: Make sure ffi headers are built before using a compiler When we are using ffi adjustors then we rely on `ffi.h` and `ffitarget.h` files during code generation when compiling stubs. Therefore we need to add this dependency to the build system (which this patch does). Reproducer, configure with `--enable-libffi-adjustors` and then build "_build/stage1/libraries/ghc-prim/build/GHC/Types.p_o". Observe that this fails before this patch and works afterwards. Fixes #24864 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 0f696958 by Rodrigo Mesquita at 2024-09-11T02:42:18-04:00 base: Deprecate BCO primops exports from GHC.Exts See https://github.com/haskell/core-libraries-committee/issues/212. These reexports will be removed in GHC 9.14. - - - - - cf0e7729 by Alan Zimmerman at 2024-09-11T02:42:54-04:00 EPA: Remove Anchor = EpaLocation synonym This just causes confusion. - - - - - 8e462f4d by Andrew Lelechenko at 2024-09-11T22:20:37-04:00 Bump submodule deepseq to 1.5.1.0 - - - - - aa4500ae by Sebastian Graf at 2024-09-11T22:21:13-04:00 User's guide: Fix the "no-backtracking" example of -XOrPatterns (#25250) Fixes #25250. - - - - - 1c479c01 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add Native Code Generator (NCG) This architecture wasn't supported before. Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 51b678e1 by Sven Tennie at 2024-09-12T10:39:38+00:00 Adjust test timings for slower computers Increase the delays a bit to be able to run these tests on slower computers. The reference was a Lichee Pi 4a RISCV64 machine. - - - - - a0e41741 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add RTS linker This architecture wasn't supported before. Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - d365b1d4 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Ignore divbyzero test The architecture's behaviour differs from the test's expectations. See comment in code why this is okay. - - - - - abf3d699 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Enable MulMayOflo_full test It works and thus can be tested. - - - - - 38c7ea8c by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: LibffiAdjustor: Ensure code caches are flushed RISCV64 needs a specific code flushing sequence (involving fence.i) when new code is created/loaded. - - - - - 7edc6965 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add additional linker symbols for builtins We're relying on some GCC/Clang builtins. These need to be visible to the linker (and not be stripped away.) - - - - - 92ad3d42 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add GHCi support As we got a RTS linker for this architecture now, we can enable GHCi for it. - - - - - a145f701 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Set codeowners of the NCG - - - - - 8e6d58cf by Sven Tennie at 2024-09-12T10:39:38+00:00 Add test for C calling convention Ensure that parameters and return values are correctly processed. A dedicated test (like this) helps to get the subtleties of calling conventions easily right. The test is failing for WASM32 and marked as fragile to not forget to investigate this (#25249). - - - - - fff55592 by Torsten Schmits at 2024-09-12T21:50:34-04:00 finder: Add `IsBootInterface` to finder cache keys - - - - - cdf530df by Alan Zimmerman at 2024-09-12T21:51:10-04:00 EPA: Sync ghc-exactprint to GHC - - - - - 1374349b by Sebastian Graf at 2024-09-13T07:52:11-04:00 DmdAnal: Fast path for `multDmdType` (#25196) This is in order to counter a regression exposed by SpecConstr. Fixes #25196. - - - - - 80769bc9 by Andrew Lelechenko at 2024-09-13T07:52:47-04:00 Bump submodule array to 0.5.8.0 - - - - - 49ac3fb8 by Sylvain Henry at 2024-09-16T10:33:01-04:00 Linker: add support for extra built-in symbols (#25155) See added Note [Extra RTS symbols] and new user guide entry. Co-authored-by: Hamish Mackenzie <Hamish.K.Mackenzie at gmail.com> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 3939a8bf by Samuel Thibault at 2024-09-16T10:33:44-04:00 GNU/Hurd: Add getExecutablePath support GNU/Hurd exposes it as /proc/self/exe just like on Linux. - - - - - d3b19851 by Sylvain Henry at 2024-09-17T11:03:28-04:00 RTS: expose closure_sizeW_ (#25252) C code using the closure_sizeW macro can't be linked with the RTS linker without this patch. It fails with: ghc-9.11.20240911: Failed to lookup symbol: closure_sizeW_ Fix #25252 Co-authored-by: Hamish Mackenzie <Hamish.K.Mackenzie at gmail.com> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 137bf74d by Sebastian Graf at 2024-09-17T11:04:05-04:00 HsExpr: Inline `HsWrap` into `WrapExpr` This nice refactoring was suggested by Simon during review: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13261#note_583374 Fixes #25264. - - - - - 7fd9e5e2 by Sebastian Graf at 2024-09-17T11:04:05-04:00 Pmc: Improve Desugaring of overloaded list patterns (#25257) This actually makes things simpler. Fixes #25257. - - - - - e4169ba9 by Ben Gamari at 2024-09-18T07:55:28-04:00 configure: Correctly report when subsections-via-symbols is disabled As noted in #24962, currently subsections-via-symbols is disabled on AArch64/Darwin due to alleged breakage. However, `configure` reports to the user that it is enabled. Fix this. - - - - - 9d20a787 by Mario Blažević at 2024-09-18T07:56:08-04:00 Modified the default export implementation to match the amended spec - - - - - 35eb4f42 by Sylvain Henry at 2024-09-18T07:57:00-04:00 FFI: don't ppr Id/Var symbols with debug info (#25255) Even if `-dpp-debug` is enabled we should still generate valid C code. So we disable debug info printing when rendering with Code style. - - - - - 9e96dad8 by Sebastian Graf at 2024-09-21T17:47:59-04:00 Demand: Combine examples into Note (#25107) Just a leftover from !13060. Fixes #25107. - - - - - 21aaa34b by sheaf at 2024-09-21T17:48:36-04:00 Use x86_64-unknown-windows-gnu target for LLVM on Windows - - - - - 992a7624 by sheaf at 2024-09-21T17:48:36-04:00 LLVM: use -relocation-model=pic on Windows This is necessary to avoid the segfaults reported in #22487. Fixes #22487 - - - - - c50d29be by Ryan Hendrickson at 2024-09-21T17:49:15-04:00 compiler: Use type abstractions when deriving For deriving newtype and deriving via, in order to bring type variables needed for the coercions into scope, GHC generates type signatures for derived class methods. As a simplification, drop the type signatures and instead use type abstractions to bring method type variables into scope. - - - - - f04fd0ae by Zubin Duggal at 2024-09-21T17:49:51-04:00 driver: Ensure we run driverPlugin for staticPlugins (#25217) driverPlugins are only run when the plugin state changes. This meant they were never run for static plugins, as their state never changes. We need to keep track of whether a static plugin has been initialised to ensure we run static driver plugins at least once. This necessitates an additional field in the `StaticPlugin` constructor as this state has to be bundled with the plugin itself, as static plugins have no name/identifier we can use to otherwise reference them - - - - - 620becd7 by Andreas Klebinger at 2024-09-21T17:50:27-04:00 Allow unknown fd device types for setNonBlockingMode. This allows fds with a unknown device type to have blocking mode set. This happens for example for fds from the inotify subsystem. Fixes #25199. - - - - - c76e25b3 by Hécate Kleidukos at 2024-09-21T17:51:07-04:00 Use Hackage version of Cabal 3.14.0.0 for Hadrian. We remove the vendored Cabal submodule. Also update the bootstrap plans Fixes #25086 - - - - - 6c83fd7f by Zubin Duggal at 2024-09-21T17:51:07-04:00 ci: Ensure we source ci.sh in any jobs that run commands outside of ci.sh ci.sh sets up the toolchain environment, including paths for the cabal directory, the toolchain binaries etc. If we run any commands outside of ci.sh, unless we source ci.sh we will use the wrong values for these environment variables. In particular, I ran into an issue where the cabal invocation `hadrian/ghci` was using an old index state despite `ci.sh setup` updating and setting the correct index state. This is because `ci.sh` sets the `CABAL_DIR` to a different place, which is where the index was downloaded to, but we were using the default cabal directory outside ci.sh The solution is to source the correct environment `ci.sh` using `. ci.sh setup` - - - - - 9586998d by Sven Tennie at 2024-09-21T17:51:43-04:00 ghc-toolchain: Set -fuse-ld even for ld.bfd This reflects the behaviour of the autoconf scripts. - - - - - d7016e0d by Sylvain Henry at 2024-09-21T17:52:24-04:00 Parser: be more careful when lexing extended literals (#25258) Previously we would lex invalid prefixes like "8#Int3" as [8#Int, 3]. A side-effect of this patch is that we now allow negative unsigned extended literals. They trigger an overflow warning later anyway. - - - - - ca67d7cb by Zubin Duggal at 2024-09-22T02:34:06-04:00 rts: Ensure we dump new Cost Centres added by freshly loaded objects to the eventlog. To do this, we keep track of the ID of the last cost centre we dumped in DUMPED_CC_ID, and call dumpCostCentresToEventLog from refreshProfilingCCSs, which will dump all the new cost centres up to the one we already dumped in DUMPED_CC_ID. Fixes #24148 - - - - - c0df5aa9 by Alan Zimmerman at 2024-09-22T02:34:42-04:00 EPA: Replace AnnsModule am_main with EpTokens Working towards removing `AddEpAnn` - - - - - 2a551cd5 by Matthew Pickering at 2024-09-24T16:33:50+05:30 ci: Run abi-test on test-abi label - - - - - ab4039ac by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 testsuite: Add a test for object determinism Extends the abi_test with an object determinism check Also includes a standalone test to be run by developers manually when debugging issues with determinism. - - - - - d62c18d8 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Sampling uniques in the CG To achieve object determinism, the passes processing Cmm and the rest of the code generation pipeline musn't create new uniques which are non-deterministic. This commit changes occurrences of non-deterministic unique sampling within these code generation passes by a deterministic unique sampling strategy by propagating and threading through a deterministic incrementing counter in them. The threading is done implicitly with `UniqDSM` and `UniqDSMT`. Secondly, the `DUniqSupply` used to run a `UniqDSM` must be threaded through all passes to guarantee uniques in different passes are unique amongst them altogether. Specifically, the same `DUniqSupply` must be threaded through the CG Streaming pipeline, starting with Driver.Main calling `StgToCmm.codeGen`, `cmmPipeline`, `cmmToRawCmm`, and `codeOutput` in sequence. To thread resources through the `Stream` abstraction, we use the `UniqDSMT` transformer on top of `IO` as the Monad underlying the Stream. `UniqDSMT` will thread the `DUniqSupply` through every pass applied to the `Stream`, for every element. We use @type CgStream = Stream (UniqDSMT IO)@ for the Stream used in code generation which that carries through the deterministic unique supply. See Note [Deterministic Uniques in the CG] - - - - - 3bbe4af4 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Cmm unique renaming pass To achieve object determinism, we need to prevent the non-deterministic uniques from leaking into the object code. We can do this by deterministically renaming the non-external uniques in the Cmm groups that are yielded right after StgToCmm. The key to deterministic renaming is observing that the order of declarations, instructions, and data in the Cmm groups are already deterministic (modulo other determinism bugs), regardless of the uniques. We traverse the Cmm AST in this deterministic order and rename the uniques, incrementally, in the order they are found, thus making them deterministic. This renaming is guarded by -fobject-determinism which is disabled by default for now. This is one of the key passes for object determinism. Read about the overview of object determinism and a more detailed explanation of this pass in: * Note [Object determinism] * Note [Renaming uniques deterministically] Significantly closes the gap to #12935 - - - - - 8357ed50 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: DCmmGroup vs CmmGroup Part of our strategy in producing deterministic objects, namely, renaming all Cmm uniques in order, depend on the object code produced having a deterministic order (say, A_closure always comes before B_closure). However, the use of LabelMaps in the Cmm representation invalidated this requirement because the LabelMaps elements would already be in a non-deterministic order (due to the original uniques), and the renaming in sequence wouldn't work because of that non-deterministic order. Therefore, we now start off with lists in CmmGroup (which preserve the original order), and convert them into LabelMaps (for performance in the code generator) after the uniques of the list elements have been renamed. See Note [DCmmGroup vs CmmGroup or: Deterministic Info Tables] and #12935. Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - 0e675fb8 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Don't print unique in pprFullName This unique was leaking as part of the profiling description in info tables when profiling was enabled, despite not providing information relevant to the profile. - - - - - 340f58b0 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: UDFM for distinct-constructor-tables In order to produce deterministic objects when compiling with -distinct-constructor-tables, we also have to update the data constructor map to be backed by a deterministic unique map (UDFM) rather than a non-deterministic one (UniqMap). - - - - - 282f37a0 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: InfoTableMap uniques in generateCgIPEStub Fixes object determinism when using -finfo-table-map Make sure to also deterministically rename the IPE map (as per Note [Renaming uniques deterministically]), and to use a deterministic unique supply when creating new labels for the IPE information to guarantee deterministic objects when IPE information is requested. Note that the Cmm group produced in generateCgIPEStub must /not/ be renamed because renaming uniques is not idempotent, and the references to the previously renamed code in the IPE Cmm group would be renamed twice and become invalid references to non-existent symbols. We do need to det-rename the InfoTableMap that is created in the conversion from Core to Stg. This is not a problem since that map won't refer any already renamed names (since it was created before the renaming). - - - - - 7b37afc9 by Zubin Duggal at 2024-09-24T16:33:50+05:30 ci: Allow abi-test to fail. We are not fully deterministic yet, see #12935 for work that remains to be done. - - - - - a63ee33a by Simon Peyton Jones at 2024-09-25T17:08:24-04:00 Add Given injectivity for built-in type families Ticket #24845 asks (reasonably enough) that if we have [G] a+b ~ 0 then we also know [G] a ~ 0, b ~ 0 and similar injectivity-like facts for other built-in type families. The status quo was that we never generate evidence for injectivity among Givens -- but it is quite reasonnable to do so. All we need is to have /evidence/ for the new constraints This MR implements that goal. I also took the opportunity to * Address #24978: refactoring UnivCo * Fix #25248, which was a consequences of the previous formulation of UnivCo As a result this MR touches a lot of code. The big things are: * Coercion constructor UnivCo now takes a [Coercion] as argument to express the coercions on which the UnivCo depends. A nice consequence is that UnivCoProvenance now has no free variables, simpler in a number of places. * Coercion constructors AxiomInstCo and AxiomRuleCo are combined into AxiomCo. The new AxiomCo, carries a (slightly oddly named) CoAxiomRule, which itself is a sum type of the various forms of built-in axiom. See Note [CoAxiomRule] in GHC.Core.Coercion.Axiom A merit of this is that we can separate the case of open and closed type families, and eliminate the redundant `BranchIndex` in the former case. * Much better representation for data BuiltInSynFamily, which means we no longer need to enumerate built-in axioms as well as built-in tycons. * There is a massive refactor in GHC.Builtin.Types.Literals, which contains all the built-in axioms for type-level operations (arithmetic, append, cons etc). A big change is that instead of redundantly having (a) a hand-written matcher, and (b) a template-based "proves" function, which were hard to keep in sync, the two are derive from one set of human-supplied info. See GHC.Builtin.Types.Literals.mkRewriteAxiom, and friends. * Significant changes in GHC.Tc.Solver.Equality to account for the new opportunity for Given/Given equalities. Smaller things * Improve pretty-printing to avoid parens around atomic coercions. * Do proper eqType in findMatchingIrreds, not `eqTypeNoKindCheck`. Looks like a bug, Richard agrees. * coercionLKind and coercionRKind are hot functions. I refactored the implementation (which I had to change anyway) to increase sharing. See Note [coercionKind performance] in GHC.Core.Coercion * I wrote a new Note [Finding orphan names] in GHC.Core.FVs about orphan names * I improved the `is_concrete` flag in GHC.Core.Type.buildSynTyCon, to avoid calling tyConsOfType. I forget exactly why I did this, but it's definitely better now. * I moved some code from GHC.Tc.Types.Constraint into GHC.Tc.Types.CtLocEnv and I renamed the module GHC.Tc.Types.CtLocEnv to GHC.Tc.Types.CtLoc - - - - - dd8ef342 by Ryan Scott at 2024-09-25T17:09:01-04:00 Resolve ambiguous method-bound type variables in vanilla defaults and GND When defining an instance of a class with a "vanilla" default, such as in the following example (from #14266): ```hs class A t where f :: forall x m. Monoid x => t m -> m f = <blah> instance A [] ``` We have to reckon with the fact that the type of `x` (bound by the type signature for the `f` method) is ambiguous. If we don't deal with the ambiguity somehow, then when we generate the following code: ```hs instance A [] where f = $dmf @[] -- NB: the type of `x` is still ambiguous ``` Then the generated code will not typecheck. (Issue #25148 is a more recent example of the same problem.) To fix this, we bind the type variables from the method's original type signature using `TypeAbstractions` and instantiate `$dmf` with them using `TypeApplications`: ```hs instance A [] where f @x @m = $dmf @[] @x @m -- `x` is no longer ambiguous ``` Note that we only do this for vanilla defaults and not for generic defaults (i.e., defaults using `DefaultSignatures`). For the full details, see `Note [Default methods in instances] (Wrinkle: Ambiguous types from vanilla method type signatures)`. The same problem arose in the code generated by `GeneralizedNewtypeDeriving`, as we also fix it here using the same technique. This time, we can take advantage of the fact that `GeneralizedNewtypeDeriving`-generated code _already_ brings method-bound type variables into scope via `TypeAbstractions` (after !13190), so it is very straightforward to visibly apply the type variables on the right-hand sides of equations. See `Note [GND and ambiguity]`. Fixes #14266. Fixes #25148. - - - - - 0a4da5d2 by ARATA Mizuki at 2024-09-25T17:09:41-04:00 Document primitive string literals and desugaring of string literals Fixes #17474 and #17974 Co-authored-by: Matthew Craven <5086-clyring at users.noreply.gitlab.haskell.org> - - - - - ad0731ad by Zubin Duggal at 2024-09-25T17:10:18-04:00 rts: Fix segfault when using non-moving GC with profiling `nonMovingCollect()` swaps out the `static_flag` value used as a sentinel for `gct->scavenged_static_objects`, but the subsequent call `resetStaticObjectForProfiling()` sees the old value of `static_flag` used as the sentinel and segfaults. So we must call `resetStaticObjectForProfiling()` before calling `nonMovingCollect()` as otherwise it looks for the incorrect sentinel value Fixes #25232 and #23958 Also teach the testsuite driver about nonmoving profiling ways and stop disabling metric collection when nonmoving GC is enabled. - - - - - e7a26d7a by Sylvain Henry at 2024-09-25T17:11:00-04:00 Fix interaction between fork and kqueue (#24672) A kqueue file descriptor isn't inherited by a child created with fork. As such we mustn't try to close this file descriptor as we would close a random one, e.g. the one used by timerfd. Fix #24672 - - - - - 6863503c by Simon Peyton Jones at 2024-09-25T17:11:37-04:00 Improve GHC.Tc.Solver.defaultEquality This MR improves GHC.Tc.Solver.defaultEquality to solve #25251. The main change is to use checkTyEqRhs to check the equality, so that we do promotion properly. But within that we needed a small enhancement to LC_Promote. See Note [Defaulting equalites] (DE4) and (DE5) The tricky case is (alas) hard to trigger, so I have not added a regression test. - - - - - 97a6c6c3 by Sylvain Henry at 2024-09-25T17:12:18-04:00 JS: fix h$withCStringOnHeap helper (#25288) strlen returns the length of the string without the \0 terminating byte, hence CString weren't properly allocated on the heap (ending \0 byte was missing). - - - - - 5f7c20bc by Ben Gamari at 2024-09-26T04:14:05-04:00 base: Propagate `error` CallStack to thrown exception Previously `errorCallWithCallStackException` failed to propagate its `CallStack` argument, which represents the call-chain of the preceding `error` call, to the exception that it returned. Consequently, the call-stack of `error` calls were quite useless. Unfortunately, this is the second time that I have fixed this but it seems the first must have been lost in rebasing. Fixes a bug in the implementation of CLC proposal 164 <https://github.com/haskell/core-libraries-committee/issues/164> Fixes #24807. - - - - - c20d5186 by Matthew Pickering at 2024-09-26T04:14:42-04:00 driver: Fix -working-dir for foreign files -working-dir definitely needs more serious testing, there are some easy ways to test this. * Modify Cabal to call ghc using -working-dir rather than changing directory. * Modify the testsuite to run ghc using `-working-dir` rather than running GHC with cwd = temporary directory. However this will have to wait until after 9.12. Fixes #25150 - - - - - 88eaa7ac by Sylvain Henry at 2024-09-26T04:15:24-04:00 Enum deriving: reuse predError, succError, toEnumError Reuse predError, succError, and toEnumError when deriving Enum instances to avoid generating different error strings per instance. E.g. before this patch for every instance for a type FOO we would generate a string: "pred{FOO}: tried to take `pred' of first tag in enumeration"# - - - - - e9fa1163 by Sylvain Henry at 2024-09-26T04:15:24-04:00 Enum deriving: generate better code (#16364) Generate better code for Enum.toEnum: check both the lower and the upper bounds at once with an unsigned comparison. Initially I've used a type ascription with a call to 'fromIntegral', hence the slight refactoring of nlAscribe. Using 'fromIntegral' was problematic (too low in the module hierarchy) so 'enumIntToWord' was introduced instead. Combined with the previous commit, T21839c ghc/alloc decrease by 5% Metric Decrease: T21839c - - - - - 383af074 by Sylvain Henry at 2024-09-26T04:16:06-04:00 Core: add absorb rules for binary or/and (#16351) Rules: x or (x and y) ==> x x and (x or y) ==> x - - - - - 783c8b29 by Matthew Pickering at 2024-09-26T12:07:44-04:00 Don't compile `asBox` with -fprof-late The `asBox` function is intended to store exactly the closure which the user passes to it. Placing a cost centre on asBox introduces a thunk, which violates this expectation and can change the result of using asBox when profiling is enabled. See #25212 for more details and ample opportunity to discuss if this is a bug or not. - - - - - 0967dcc7 by Matthew Pickering at 2024-09-26T12:07:44-04:00 Fix normalisation of .prof files Fix 1: If a cost centre contained CAF then the normalisation was corrupted, now only check if CAF is at the start of a line. Fix 2: "no location info" contain a space, which messed up the next normalisation logic which assumed that columns didn't have spaced in. - - - - - 9eda1cb9 by Matthew Pickering at 2024-09-26T12:07:44-04:00 testsuite: Fix normalisation of prof_files removing newlines These normalisation steps were collapsing lines together, which made subsequent normalisation steps fail. ``` foo x y z CAF x y z qux x y z ``` was getting normalised to ``` foo x y z qux x y z ``` which means that subsequent line based filters would not work correctly. - - - - - 2b25f9e2 by Matthew Pickering at 2024-09-26T12:07:44-04:00 packaging: Enable late-ccs for release flavour This enables late cost centres when building profiled libraries and subsequently greatly improves the resolution of cost centre stacks when profiling. This patch also introduces the `grep_prof` test modifier which is used to apply a further filter to the .prof file before they are compared. Fixes #21732 ------------------------- Metric Increase: libdir ------------------------- - - - - - bb030d0d by Brandon Chinn at 2024-09-26T12:08:21-04:00 Replace manual string lexing (#25158) Metric Increase: MultilineStringsPerf This commit replaces the manual string lexing logic with native Alex lexing syntax. This aligns the lexer much closer to the Haskell Report, making it easier to see how the implementation and spec relate. This slightly increases memory usage when compiling multiline strings because we now have two distinct phases: lexing the multiline string with Alex and post-processing the string afterwards. Before, these were done at the same time, but separating them allows us to push as much logic into normal Alex lexing as possible. Since multiline strings are a new feature, this regression shouldn't be too noticeable. We can optimize this over time. - - - - - 16742987 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Revert !4655: Stop 'import "base" Prelude' removing implicit Prelude import This behaviour is problematic for the principle reason that `import Prelude` may not refer to the `base` package, and in which case importing an entirely unrelated module causing your implicit prelude to leave the scope is extremely surprising. See the added test for this example. Discussion on #17045. The secondary reason for reverting this patch is that "base" can't be a wired in package any more (see #24903), so we have to remove special logic which singles out base from the compiler. The rule for implicit shadowing is now simply: * If you write import Prelude (..) then you don't get an implicit prelude import * If you write import "foobar" Prelude (..) for all pkgs foobar, you get an implicit import of prelude. If you want to write a package import of Prelude, then you can enable `NoImplicitPrelude` for the module in question to recover the behaviour of ghc-9.2-9.10. Fixes #17045 - - - - - 57c50f41 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Rename COMPILING_BASE_PACKAGE to COMPILING_GHC_INTERNAL_PACKAGE The COMPILING_BASE_PACKAGE macro is concerned with issues defining symbols and using symbols in the same compilation unit. However, these symbols now exist in ghc-internal rather than base, so we should rename the macro accordingly. The code is guards is likely never used as we never produce windows DLLs but it is simpler to just perform the renaming for now. These days there is little doubt that this macro defined in this ad-hoc manner would be permitted to exist, but these days are not those days. Fixes #25221 - - - - - 70764243 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Preload ghc-internal rather than base This occurence of baseUnitId was missed when moving the bulk of internal definitions into `ghc-internal`. We need to remove this preloading of `base` now because `base` should not be wired in. Towards #24903 - - - - - 12915609 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Remove Data.List compat warning There is currently a warning implemented in -Wcompat which warns you when importing Data.List in a non-qualified manner. ``` A.hs:3:8: warning: [-Wcompat-unqualified-imports] To ensure compatibility with future core libraries changes imports to Data.List should be either qualified or have an explicit import list. | 3 | import Data.List | ^^^^^^^^^ Ok, one module loaded. ``` GHC ticket: https://gitlab.haskell.org/ghc/ghc/-/issues/17244 CLC discussion: https://groups.google.com/g/haskell-core-libraries/c/q3zHLmzBa5E This warning was implemented as part of the migration to making Data.List monomorphic again (and to be used like Data.Set, Data.Map etc). That doesn't seem like it happened, and I imagine that the current CLC would require a new proposal anyway in order to do that now. It's not clear in any case what "future core libraries changes" we are waiting to happen before this warning can be removed. Given the first phase of the proposal has lasted 5 years it doesn't seem that anyone is motivated to carry the proposal to completion. It does seem a bit unnecessary to include a warning in the compiler about "future changes to the module" when there's no timeline or volunteer to implement these changes. The removal of this warning was discussed again at: https://github.com/haskell/core-libraries-committee/issues/269 During the discussion there was no new enthusiasm to move onto the next stages of the proposal so we are removing the warning to unblock the reinstallable "base" project (#24903) Fixes #24904 - - - - - d4e4d498 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Move Control.Monad.Zip into ghc-internal mzip is wired in and therefore needs to be in ghc-internal. Fixes #25222 Towards #24903 - - - - - d3dacdfb by Matthew Pickering at 2024-09-26T12:08:57-04:00 Unwire the base package This patch just removes all the functions related to wiring-in the base package and the `-this-unit-id=base` flag from the cabal file. After this commit "base" becomes just like any other package and the door is opened to moving base into an external repo and releasing base on a separate schedule to the rest of ghc. Closes #24903 - - - - - 1b39363b by Patrick at 2024-09-27T06:10:19-04:00 Add entity information to HieFile #24544 Enhanced HieFile to capture entity information for identifiers, enabling better support for language tools and protocols. See issue #24544 for more details. Work have been done: * Introduction of new data type `EntityInfo` in `GHC.Iface.Ext.Types`. * Add extra field `hie_entity_infos :: NameEntityInfo` to `HieFile` to store the mapping from entity name to corresponding entity infos in `GHC.Iface.Ext.Types`. * Compute `EntityInfo` for each entity name in the HieAst from `TyThing, Id, OccName` when generating the `HieFile` in `GHC.Iface.Ext.Ast`. * Add test T24544 to test the generation of `EntityInfo`. - - - - - 4f3618d8 by sheaf at 2024-09-27T06:10:57-04:00 The X86 SIMD patch. This commit adds support for 128 bit wide SIMD vectors and vector operations to GHC's X86 native code generator. Main changes: - Introduction of vector formats (`GHC.CmmToAsm.Format`) - Introduction of 128-bit virtual register (`GHC.Platform.Reg`), and removal of unused Float virtual register. - Refactor of `GHC.Platform.Reg.Class.RegClass`: it now only contains two classes, `RcInteger` (for general purpose registers) and `RcFloatOrVector` (for registers that can be used for scalar floating point values as well as vectors). - Modify `GHC.CmmToAsm.X86.Instr.regUsageOfInstr` to keep track of which format each register is used at, so that the register allocator can know if it needs to spill the entire vector register or just the lower 64 bits. - Modify spill/load/reg-2-reg code to account for vector registers (`GHC.CmmToAsm.X86.Instr.{mkSpillInstr, mkLoadInstr, mkRegRegMoveInstr, takeRegRegMoveInstr}`). - Modify the register allocator code (`GHC.CmmToAsm.Reg.*`) to propagate the format we are storing in any given register, for instance changing `Reg` to `RegFormat` or `GlobalReg` to `GlobalRegUse`. - Add logic to lower vector `MachOp`s to X86 assembly (see `GHC.CmmToAsm.X86.CodeGen`) - Minor cleanups to genprimopcode, to remove the llvm_only attribute which is no longer applicable. Tests for this feature are provided in the "testsuite/tests/simd" directory. Fixes #7741 Keeping track of register formats adds a small memory overhead to the register allocator (in particular, regUsageOfInstr now allocates more to keep track of the `Format` each register is used at). This explains the following metric increases. ------------------------- Metric Increase: T12707 T13035 T13379 T3294 T4801 T5321FD T5321Fun T783 ------------------------- - - - - - 10e431ef by sheaf at 2024-09-27T06:10:57-04:00 Use xmm registers in genapply This commit updates genapply to use xmm, ymm and zmm registers, for stg_ap_v16/stg_ap_v32/stg_ap_v64, respectively. It also updates the Cmm lexer and parser to produce Cmm vectors rather than 128/256/512 bit wide scalars for V16/V32/V64, removing bits128, bits256 and bits512 in favour of vectors. The Cmm Lint check is weakened for vectors, as (in practice, e.g. on X86) it is okay to use a single vector register to hold multiple different types of data, and we don't know just from seeing e.g. "XMM1" how to interpret the 128 bits of data within. Fixes #25062 - - - - - 8238fb2d by sheaf at 2024-09-27T06:10:57-04:00 Add vector fused multiply-add operations This commit adds fused multiply add operations such as `fmaddDoubleX2#`. These are handled both in the X86 NCG and the LLVM backends. - - - - - 2cb7b748 by sheaf at 2024-09-27T06:10:57-04:00 Add vector shuffle primops This adds vector shuffle primops, such as ``` shuffleFloatX4# :: FloatX4# -> FloatX4# -> (# Int#, Int#, Int#, Int# #) -> FloatX4# ``` which shuffle the components of the input two vectors into the output vector. NB: the indices must be compile time literals, to match the X86 SHUFPD instruction immediate and the LLVM shufflevector instruction. These are handled in the X86 NCG and the LLVM backend. Tested in simd009. - - - - - 0d2428d6 by sheaf at 2024-09-27T06:10:57-04:00 Add Broadcast MachOps This adds proper MachOps for broadcast instructions, allowing us to produce better code for broadcasting a value than simply packing that value (doing many vector insertions in a row). These are lowered in the X86 NCG and LLVM backends. In the LLVM backend, it uses the previously introduced shuffle instructions. - - - - - e6c19a41 by sheaf at 2024-09-27T06:10:57-04:00 Fix treatment of signed zero in vector negation This commit fixes the handling of signed zero in floating-point vector negation. A slight hack was introduced to work around the fact that Cmm doesn't currently have a notion of signed floating point literals (see get_float_broadcast_value_reg). This can be removed once CmmFloat can express the value -0.0. The simd006 test has been updated to use a stricter notion of equality of floating-point values, which ensure the validity of this change. - - - - - f496ff7f by sheaf at 2024-09-27T06:10:57-04:00 Add min/max primops This commit adds min/max primops, such as minDouble# :: Double# -> Double# -> Double# minFloatX4# :: FloatX4# -> FloatX4# -> FloatX4# minWord16X8# :: Word16X8# -> Word16X8# -> Word16X8# These are supported in: - the X86, AArch64 and PowerPC NCGs, - the LLVM backend, - the WebAssembly and JavaScript backends. Fixes #25120 - - - - - 5dd2a423 by sheaf at 2024-09-27T06:10:57-04:00 Add test for C calls & SIMD vectors - - - - - f824e1ee by sheaf at 2024-09-27T06:10:58-04:00 Add test for #25169 - - - - - d54db7f3 by sheaf at 2024-09-27T06:10:58-04:00 Fix #25169 using Plan A from the ticket We now compile certain low-level Cmm functions in the RTS multiple times, with different levels of vector support. We then dispatch at runtime in the RTS, based on what instructions are supported. See Note [realArgRegsCover] in GHC.Cmm.CallConv. Fixes #25169 ------------------------- Metric Increase: T10421 T12425 T18730 T1969 T9198 ------------------------- - - - - - d5f8778a by sheaf at 2024-09-27T06:10:58-04:00 Fix C calls with SIMD vectors This commit fixes the code generation for C calls, to take into account the calling convention. This is particularly tricky on Windows, where all vectors are expected to be passed by reference. See Note [The Windows X64 C calling convention] in GHC.CmmToAsm.X86.CodeGen. - - - - - f64bd564 by sheaf at 2024-09-27T06:10:58-04:00 X86 CodeGen: refactor getRegister CmmLit This refactors the code dealing with loading literals into registers, removing duplication and putting all the code in a single place. It also changes which XOR instruction is used to place a zero value into a register, so that we use VPXOR for a 128-bit integer vector when AVX is supported. - - - - - ab12de6b by sheaf at 2024-09-27T06:10:58-04:00 X86 genCCall: promote arg before calling evalArgs The job of evalArgs is to ensure each argument is put into a temporary register, so that it can then be loaded directly into one of the argument registers for the C call, without the generated code clobbering any other register used for argument passing. However, if we promote arguments after calling evalArgs, there is the possibility that the code used for the promotion will clobber a register, defeating the work of evalArgs. To avoid this, we first promote arguments, and only then call evalArgs. - - - - - 8fd12429 by sheaf at 2024-09-27T06:10:58-04:00 X86 genCCall64: simplify loadArg code This commit simplifies the argument loading code by making the assumption that it is safe to directly load the argument into register, because doing so will not clobber any previous assignments. This assumption is borne from the use of 'evalArgs', which evaluates any arguments which might necessitate non-trivial code generation into separate temporary registers. - - - - - 12504a9f by sheaf at 2024-09-27T06:10:58-04:00 LLVM: propagate GlobalRegUse information This commit ensures we keep track of how any particular global register is being used in the LLVM backend. This informs the LLVM type annotations, and avoids type mismatches of the following form: argument is not of expected type '<2 x double>' call ccc <2 x double> (<2 x double>) (<4 x i32> arg) - - - - - 2bb1e8df by Cheng Shao at 2024-09-27T06:11:35-04:00 Link bytecode from interface-stored core bindings in oneshot mode !13042 Part of #T25090 If the flag `-fprefer-byte-code` is given when compiling a module containing TH, GHC will use Core bindings stored in interfaces to compile and link bytecode for splices. This was only implemented for `--make` mode initially, so this commit adds the same mechanism to oneshot mode (`-c`). When an interface is loaded into the EPS in `loadInterface` that has dehydrated Core bindings, an entry is added to the new field `eps_iface_bytecode`, containing an IO action that produces a bytecode `Linkable`, lazily processing the `mi_extra_decls` by calling `loadIfaceByteCode`. When Template Haskell dependencies are resolved in `getLinkDeps`, this action is looked up after loading a module's interface. If it exists, the action is evaluated and the bytecode is added to the set of `Linkable`s used for execution of the splice; otherwise it falls back on the traditional object file. Metric Decrease: MultiLayerModules T13701 - - - - - 7cb7172e by Matthew Pickering at 2024-09-27T06:12:12-04:00 ci: Fix variable inheritence for ghcup-metadata testing job Downstream in ghcup-ci we use the CONFIGURE_ARGS variable to determine how to setup all the different jobs. On the downstream trigger this was being inherited from the default setting in .gitlab.yml file. Therefore this led to job failures as the necessary CONFIGURE_ARGS were not being passed to the configure script when installing the bindist. See docs: * https://docs.gitlab.com/ee/ci/yaml/#inherit * https://docs.gitlab.com/ee/ci/yaml/#triggerforward 1. inherit:variables:fals - This stops the global variables being inherited into the job and hence forwarded onto the downstream job. 2. trigger:forward:* - yaml_variables: true (default) pass yaml variables to downstream, this is important to pass the upstream pipeline id to downstream. - pipeline_variables: false (default) but don't pass pipeline variables (normal environment variables). Fixes #25294 - - - - - 9ffd6163 by Leo at 2024-09-27T16:26:01+05:30 Fix typo in Prelude doc for (>>=) Fix a minor typo ("equivialent" instead of "equivalent") in the documentation for (>>=) in the prelude. - - - - - 5745dbd3 by Vladislav Zavialov at 2024-09-27T16:26:52+05:30 Wildcard binders in type declarations (#23501) Add support for wildcard binders in type declarations: type Const a b = a -- BEFORE: the `b` had to be named -- even if unused on the RHS type Const a _ = a -- AFTER: the compiler accepts -- a wildcard binder `_` The new feature is part of GHC Proposal #425 "Invisible binders in type declarations", and more specifically its amendment #641. Just like a named binder, a wildcard binder `_` may be: * plain: _ * kinded: (_ :: k -> Type) * invisible, plain: @_ * invisible, kinded: @(_ :: k -> Type) Those new forms of binders are allowed to occur on the LHSs of data, newtype, type, class, and type/data family declarations: data D _ = ... newtype N _ = ... type T _ = ... class C _ where ... type family F _ data family DF _ (Test case: testsuite/tests/typecheck/should_compile/T23501a.hs) However, we choose to reject them in forall telescopes and type family result variable binders (the latter being part of the TypeFamilyDependencies extension): type family Fd a = _ -- disallowed (WildcardBndrInTyFamResultVar) fn :: forall _. Int -- disallowed (WildcardBndrInForallTelescope) (Test case: testsuite/tests/rename/should_fail/T23501_fail.hs) See the new Notes: * Note [Type variable binders] * Note [Wildcard binders in disallowed contexts] To accommodate the new forms of binders, HsTyVarBndr was changed as follows (demonstrated without x-fields for clarity) -- BEFORE (ignoring x-fields and locations) data HsTyVarBndr flag = UserTyVar flag Name | KindedTyVar flag Name HsKind -- AFTER (ignoring x-fields and locations) data HsTyVarBndr flag = HsTvb flag HsBndrVar HsBndrKind data HsBndrVar = HsBndrVar Name | HsBndrWildCard data HsBndrKind = HsBndrNoKind | HsBndrKind LHsKind The rest of the patch is downstream from this change. To avoid a breaking change to the TH AST, we generate fresh names to replace wildcard binders instead of adding a dedicated representation for them (as discussed in #641). And to put a cherry on top of the cake, we now allow wildcards in kind-polymorphic type variable binders in constructor patterns, see Note [Type patterns: binders and unifiers] and the tyPatToBndr function in GHC.Tc.Gen.HsType; example: fn (MkT @(_ :: forall k. k -> Type) _ _) = ... (Test case: testsuite/tests/typecheck/should_compile/T23501b.hs) - - - - - ff2bdca2 by Matthew Pickering at 2024-09-27T16:27:08+05:30 ci: Push perf notes from wasm jobs It was observed in #25299 that we were failing to push performance numbers from the wasm jobs. In future we might want to remove this ad-hoc check but for now it's easier to add another special case. Towards #25299 - - - - - 4c76f75c by Zubin Duggal at 2024-09-27T16:44:00+05:30 Bump GHC version to 9.12 - - - - - e4ac1b0d by Zubin Duggal at 2024-09-27T19:12:24+05:30 Bump GHC version to 9.13 - - - - - da20cac1 by Andreas Klebinger at 2024-10-02T22:18:48-04:00 SpecConstr: Introduce a separate argument limit for forced specs. We used to put no limit at all on specializations forced via the SPEC argument. This isn't always reasonable so we introduce a very high limit that applies to forced specializations, a flag to control it, and we now emit a warning if we fail a specialization because we exceed the warning. Fixes #25197 - - - - - 39497eed by Andreas Klebinger at 2024-10-02T22:19:24-04:00 ghc-experimental: Expose primops and ghc extensions via GHC.PrimOps This will be the new place for functions that would have gone into GHC.Exts in the past but are not stable enough to do so now. Addresses #25242 - - - - - e9dc2690 by Sylvain Henry at 2024-10-02T22:20:06-04:00 RTS: cleanup timerfd file descriptors after a fork (#25280) When we init a timerfd-based ticker, we should be careful to cleanup the old file descriptors (e.g. after a fork). - - - - - 64e876bc by Rodrigo Mesquita at 2024-10-02T22:20:43-04:00 determinism: Deterministic MonadGetUnique LlvmM Update LlvmM to thread a unique deterministic supply (using UniqDSMT), and use it in the MonadGetUnique instance. This makes uniques sampled from LlvmM deterministic, which guarantees object determinism with -fllvm. Fixes #25274 - - - - - 36bbb167 by Matthew Pickering at 2024-10-02T22:21:18-04:00 Bump LLVM upper bound to allow LLVM 19 Also bumps the ci-images commit so that the deb12 images uses LLVM 19 for testing. ------------------------- Metric Decrease: size_hello_artifact_gzip size_hello_unicode_gzip ------------------------- Fixes #25295 - - - - - 0029ca91 by Matthew Pickering at 2024-10-02T22:21:54-04:00 configure: Allow happy-2.0.2 happy-2.0.2 can be used to compile GHC. happy-2.0 and 2.0.1 have bugs which make it unsuitable to use. The version bound is now == 1.20.* || >= 2.0.2 && < 2.1 Fixes #25276 - - - - - 92976985 by ARATA Mizuki at 2024-10-02T22:22:35-04:00 Use bundled llc/opt on Windows (#22438) - - - - - af59749a by Matthew Pickering at 2024-10-02T22:23:11-04:00 Fix registerArch for riscv64 The register allocator doesn't support vector registers on riscv64, therefore advertise as NoVectors. Fixes #25314 - - - - - a49e66fc by Matthew Pickering at 2024-10-02T22:23:11-04:00 riscv: Avoid using csrr instruction to test for vector registers The csrr instruction isn't allowed in qemu user-mode, and raises an illegal instruction error when it is encountered. Therefore for now, we just hard-code that there is no support for vector registers since the rest of the compiler doesn't support vector registers for riscv. Fixes #25312 - - - - - 115a30e9 by Andreas Klebinger at 2024-10-02T22:23:11-04:00 Add support for fp min/max to riscv Fixes #25313 - - - - - f28b5992 by Ben Gamari at 2024-10-02T22:23:47-04:00 testsuite/perf: Report better error message on malformed note Previously a malformed perf note resulted in very poor errors. Here we slight improve this situation. - - - - - 51377508 by Ben Gamari at 2024-10-02T22:23:47-04:00 testsuite: Handle division-by-zero more gracefully Previously we would fail with an ZeroDivisionError. Fixes #25321 - - - - - 50490075 by Matthew Pickering at 2024-10-03T05:55:13-04:00 ci: Add nightly & release ubuntu-22.04 jobs This adds build of bindists on ubuntu-22.04 on nightly and release pipelines. We also update ghcup-metadata to provide ubuntu-22.04 bindists on ubuntu-22.04. Fixes #25317 - - - - - 9cf1cef5 by Zubin Duggal at 2024-10-03T05:55:49-04:00 haddock: Bump binary interface version to 46. This allows haddock to give good error messages when being used on mismatched interface files. We bump to 46 since GHC 9.12 uses version 45: https://gitlab.haskell.org/ghc/ghc/-/commit/362afd632032ee8f174690c3ffe0015076b83ce6 This should have been done in e4ac1b0d281b85a0144d1ef6f84a1df00e236052 but was overlooked. - - - - - 2293c0b7 by Andreas Klebinger at 2024-10-03T05:56:25-04:00 Change versionig of ghc-experimental to follow ghc versions. Just like ghc-internal it will now use the @ProjectVersionForLib@ macro for versioning. This means for ghc=9.10.1, ghc-experimental's version will be 9.1001.0 and so on. This fixes #25289 - - - - - 876d6e0e by Ben Gamari at 2024-10-04T15:07:53+01:00 base: Add `HasCallStack` constraint to `ioError` As proposed in core-libraries-committee#275. - - - - - 9bfd9fd0 by Matthew Pickering at 2024-10-04T15:08:03+01:00 Fix toException method for ExceptionWithContext Fixes #25235 - - - - - ac004028 by Matthew Pickering at 2024-10-04T15:09:07+01:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - bcb293f2 by Cheng Shao at 2024-10-04T17:59:28-04:00 testsuite: remove accidentally checked in debug print logic - - - - - 68e2da5a by Rodrigo Mesquita at 2024-10-05T10:36:15-04:00 Deprecation for WarnCompatUnqualifiedImports Fixes #25330 - - - - - 4327f0e8 by Andrew Lelechenko at 2024-10-05T10:36:52-04:00 Restrict Data.List.NonEmpty.unzip to NonEmpty (a, b) -> (NonEmpty a, NonEmpty b) Implementing the final phase of CLC proposal https://github.com/haskell/core-libraries-committee/issues/86 - - - - - ceca9efb by Cheng Shao at 2024-10-06T02:18:31+00:00 driver: fix runWorkerLimit on wasm This commit fixes link-time unresolved symbol errors for sem_open etc on wasm, by making runWorkerLimit always behave single-threaded. This avoids introducing the jobserver logic into the final wasm module and thus avoids referencing the posix semaphore symbols. - - - - - 135fd1ac by Torsten Schmits at 2024-10-06T02:18:31+00:00 Parallelize getRootSummary computations in dep analysis downsweep This reuses the upsweep step's infrastructure to process batches of modules in parallel. I benchmarked this by running `ghc -M` on two sets of 10,000 modules; one with a linear dependency chain and the other with a binary tree. Comparing different values for the number of modules per thread suggested an optimum at `length targets `div` (n_cap * 2)`, with results similar to this one (6 cores, 12 threads): ``` Benchmark 1: linear 1 jobs Time (mean ± σ): 1.775 s ± 0.026 s [User: 1.377 s, System: 0.399 s] Range (min … max): 1.757 s … 1.793 s 2 runs Benchmark 2: linear 6 jobs Time (mean ± σ): 876.2 ms ± 20.9 ms [User: 1833.2 ms, System: 518.6 ms] Range (min … max): 856.2 ms … 898.0 ms 3 runs Benchmark 3: linear 12 jobs Time (mean ± σ): 793.5 ms ± 23.2 ms [User: 2318.9 ms, System: 718.6 ms] Range (min … max): 771.9 ms … 818.0 ms 3 runs ``` Results don't differ much when the batch size is reduced to a quarter of that, but there's significant thread scheduling overhead for a size of 1: ``` Benchmark 1: linear 1 jobs Time (mean ± σ): 2.611 s ± 0.029 s [User: 2.851 s, System: 0.783 s] Range (min … max): 2.591 s … 2.632 s 2 runs Benchmark 2: linear 6 jobs Time (mean ± σ): 1.189 s ± 0.007 s [User: 2.707 s, System: 1.103 s] Range (min … max): 1.184 s … 1.194 s 2 runs Benchmark 3: linear 12 jobs Time (mean ± σ): 1.097 s ± 0.006 s [User: 2.938 s, System: 1.300 s] Range (min … max): 1.093 s … 1.101 s 2 runs ``` Larger batches also slightly worsen performance. - - - - - 535a2117 by Daniel Díaz at 2024-10-06T09:51:46-04:00 Clarify the meaning of "exactly once" in LinearTypes Solves documentaion issue #25084. - - - - - 92f8939a by Krzysztof Gogolewski at 2024-10-06T09:52:22-04:00 Only allow (a => b) :: Constraint rather than CONSTRAINT rep Fixes #25243 - - - - - 4a2f0f13 by Alan Zimmerman at 2024-10-07T05:16:54-04:00 EPA: Remove unused hsCaseAnnsRest We never populate it, so remove it. - - - - - 5099057b by John Paul Adrian Glaubitz at 2024-10-07T05:17:40-04:00 rts: Fix invocation of __ieee_set_fp_control() on alpha-linux Fixes the following error when building GHC on alpha-linux: rts/posix/Signals.c: In function ‘initDefaultHandlers’: rts/posix/Signals.c:709:5: error: error: implicit declaration of function ‘ieee_set_fp_control’ [-Wimplicit-function-declaration] 709 | ieee_set_fp_control(0); | ^~~~~~~~~~~~~~~~~~~ | 709 | ieee_set_fp_control(0); | - - - - - c9590ba0 by Teo Camarasu at 2024-10-07T05:18:17-04:00 Add changelog entries for !12479 - - - - - bf9c9566 by Matthew Pickering at 2024-10-07T13:19:30-04:00 javascript: Read fields of ObjectBlock lazily When linking a module with a large dependency footprint too much of the object files were forced during linking. This lead to a large amount of memory taken up by thunks which would never be forced On the PartialDownsweep test this halves the memory required (from 25G to 13G). Towards #25324 ------------------------- Metric Increase: size_hello_obj ------------------------- - - - - - 571329df by Matthew Pickering at 2024-10-07T13:20:06-04:00 ci: Run the i386 validation job when i386 label is set This is helpful when making changes to base and must update the javascript and i386 base exports files. - - - - - e68f9aaf by Matthew Pickering at 2024-10-07T13:20:42-04:00 Rewrite partitionByWorkerSize to avoid pattern match checker bug With `-g3` the pattern match checker would warn about these incomplete patterns. This affects the debug_info builds on CI. ``` Pattern match(es) are non-exhaustive In an equation for ‘go’: Patterns of type ‘[a]’, ‘[a]’, ‘[SpecFailWarning]’ not matched: (_:_) _ _ | 2514 | go [] small warnings = (small, warnings) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^... ``` Workaround for #25338 - - - - - d915dc8b by Arnaud Spiwack at 2024-10-07T19:23:00-04:00 Remove the wrapper/coercion-passing logic for submultiplicity checks Instead, we use a dedicated DelayedError, which is emitted systematically on submultiplicity checks, but is suppressed if we can indeed solve the submultiplicity constraint with a reflexivity coercion. This way, we don't have to return anything from `tcSubMult`, which now looks like a regular constraint check, the rest is implementation detail. This removes all of the strange boilerplate that I'd been struggling with under the previous implementation. Even if submultiplicity checks are not properly constraints, this way it's contained entirely within a `WantedConstraint`. Much more pleasant. Closes #25128. - - - - - 1d226116 by Sven Tennie at 2024-10-07T19:23:37-04:00 AArch64: Implement switch/jump tables (#19912) This improves the performance of Cmm switch statements (compared to a chain of if statements.) - - - - - 3fe621dd by Mario Blažević at 2024-10-07T19:24:18-04:00 Fixes #25256, missing parens inside TH-printed pattern type signature - - - - - ea4b4391 by ARATA Mizuki at 2024-10-07T19:24:59-04:00 Better documentation for floatRange function Closes #16479 - - - - - ff09205c by Andreas Klebinger at 2024-10-07T19:25:35-04:00 Adjust progress message for hadrian to include cwd. Fixes #25335 - - - - - 5fd320da by Sven Tennie at 2024-10-07T19:26:12-04:00 CCallConv test: Align argument types The C calling convention / standard requires that arguments and their values are of the same type. - - - - - c6e5fd3d by Cheng Shao at 2024-10-07T19:26:47-04:00 hadrian: remove unused ghciWithDebugger field from flavour config This patch removes the ghciWithDebugger field from flavour config since it's actually not used anywhere. - - - - - 9c9c790d by sheaf at 2024-10-07T19:27:23-04:00 user's guide: update docs for X86 CPU flags This commit updates the section of the user's guide pertaining to X86 feature flags with the following changes: - the NCG backend now supports SIMD, so remove all text that says the contrary, - the LLVM backend does not "automatically detect" features, so remove any text that makes that claim. - - - - - a1ecc826 by Sven Tennie at 2024-10-08T13:36:03-04:00 ci: RISCV64 cross-compile testing This adds a validation job which tests that we can build a riscv64 cross compiler and build a simple program using it. We do not currently run the whole testsuite. Towards #25254 Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - d5c2577f by Arnaud Spiwack at 2024-10-08T13:36:44-04:00 Remove unused accumulators in partition_errors - - - - - 55609880 by Andrzej Rybczak at 2024-10-09T16:41:46-04:00 Fix typo in the @since annotation of annotateIO - - - - - ef481813 by Alan Zimmerman at 2024-10-09T16:42:23-04:00 EPA: Remove [AddEpAnn] from (most of) HsExpr EPA: introduce EpAnnLam for lambda annotationsi, and remove `glAA` from `Parser.y`, it is the same as `glR` EPA: Remove unused annotation from XOpApp EPA: Use EpToken for XNPat and XNegApp EPA: specific anns for XExplicitTuple / XTuplePat / sumPatParens. EPA: Use specific annotation for MultiIf EPA: Move annotations into FunRhs EPA: Remove [AddEpAnn] from SigPat and ExprWithTySig EPA: Remove [AddEpAnn] from ArithSeq EPA: Remove [AddEpAnn] from HsProc EPA: Remove [AddEpAnn] from HsStatic EPA: Remove [AddEpAnn] from BindStmt EPA: Remove [AddEpAnn] from TransStmt EPA: Remove [AddEpAnn] from HsTypedSplice EPA: Remove [AddEpAnn] from HsUntypedSpliceExpr - - - - - 69960230 by Fabian Thorand at 2024-10-10T19:03:59+00:00 Handle exceptions from IO manager backend If an IO manager backend throws, it will not actually have registered the file descriptor. However, at that point, the IO manager state was already updated to assume the file descriptor is being tracked, leading to errors and an eventual deadlock down the line as documented in the issue #21969. The fix for this is to undo the IO manager state change in case the backend throws (just as we already do when the backend signals that the file type is not supported). The exception then bubbles up to user code. That way we make sure that 1. the bookkeeping state of the IO manager is consistent with the actions taken by the backend, even in the presence of unexpected failures, and 2. the error is not silent and visible to user code, making failures easier to debug. - - - - - 1587cccf by Hassan Al-Awwadi at 2024-10-11T03:52:36-04:00 Put RdrName in the foExt field of FieldOcc The main purpose of this commit is to rip RdrName out of FieldOcc, in accordance with #21592, and as a side note it has simplified the method we use to deal with ambiguity somewhat. To do the first, we make FieldOccs store (LIdP p) instead of always storing Located RdrName, and moved the readername to the extension points where necessary. For the second, well, we just turn an ambiguous RdrName into a unbound Name through mkUnboundName. Later during disambiguateRecordBinds of the type checking phase, we will try and do type-directed disambiguation based on the rdrName field (for now), so this hack works out fine. See Note [Ambiguous FieldOcc in record updates] for more details. There are two additional minor changes in this commit: * The HsRecSel constructor of HsExpr has been moved to the extension constuctors, since its really GHC specific. * HsProjection no longer has a Located DotFieldOcc as a field, but just a regular DotFieldOcc, since DotFieldOcc already wraps a located FieldLabelString co-authored by: @Jade <Jade512 at proton.me> @alt-romes <rodrigo.m.mesquita at gmail.com> - - - - - 2338a971 by Cheng Shao at 2024-10-11T03:53:13-04:00 driver: bail out when -fllvm is passed to GHC not configured with LLVM This patch makes GHC bail out with an proper error message when it's not configured with LLVM but users attempt to pass -fllvm, see #25011 and added comment for details. Fixes #25011 Co-authored-by: Rodrigo Mesquita <rodrigo.m.mesquita at gmail.com> - - - - - 78ad81ec by Cristiano Moraes at 2024-10-11T03:53:55-04:00 configure: Find C++ probing when GCC version is the latest but G++ is old #23118 - - - - - 083703a1 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Consider Wanteds with rewriters as insoluble This MR fixes #25325 See GHC.Tc.Types.Constraint, Note [Insoluble Wanteds], especially (IW2) There is a small change in the error message for T14172, but it looks entirely acceptable to me. - - - - - 0dfaeb66 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Wibbles - - - - - 09d24d82 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Spelling errors - - - - - 694489ed by sheaf at 2024-10-11T03:55:14-04:00 LLVM: use sse4.2 instead of sse42 LLVM expects the former instead of the latter since version 3.4. Fixes #25019 - - - - - 06ae8507 by sheaf at 2024-10-11T03:55:14-04:00 LLVM: make SSE4.2 imply +popcnt For consistency with the NCG as well as with Clang and GCC, we make the SSE4.2 feature flag imply +popcnt when using the LLVM backend. Fixes #25353 - - - - - 3fe843c7 by Cheng Shao at 2024-10-11T03:55:50-04:00 Drop obsolete libffi Makefile This patch drops obsolete libffi Makefile from the tree, given it's completely unused since removal of make build system in !7094. - - - - - df70405c by Ben Gamari at 2024-10-11T03:56:26-04:00 ghc-internal: Fix incomplete matches on IOError As noted in #25362, these incomplete matches were previously not being warned about. They were easily addressed by use of `GHC.Internal.Event.Windows.withException`. Closes #25362. - - - - - 8584504b by Matthew Pickering at 2024-10-11T03:57:02-04:00 compiler: Fix orientation of GHC.Hs.Doc boot file We should be free to import things from Language.Haskell.Syntax in GHC modules. Therefore the the boot file for the loop between ImpExp and GHC.Hs.Doc was in the wrong place. Issue #21592 - - - - - d029f170 by Ben Gamari at 2024-10-11T23:43:17-04:00 testsuite: Normalise trailing digits from hole fits output The type variables in the holes fit output from `abstract_refinement_hole_fits` is quite sensitive to compiler configuration. Specifically, a slight change in the inlining behavior of `throw` changes type variable naming in `(>>=)` and a few others. Ideally we would make hole fits output more deterministic but in the meantime we simply normalise this difference away as it not relevant to the test's goal. - - - - - da5d7d0d by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Add test for #25066 - - - - - eb7ddae1 by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Fix #25066 As noted in #25066, the exception backtrace proposal introduced a rather subtle performance regression due to simplification producing Core which the demand analyser concludes may diverge with a precise exception. The nature of the problem is more completely described in the new Note [Hiding precise exception signature in throw]. The (rather hacky) solution we use here hides the problematic optimisation through judicious use of `noinline`. Ultimately however we will want a more principled solution (e.g. #23847). Fixes #255066 CLC proposal: https://github.com/haskell/core-libraries-committee/issues/290 Metric Decrease: T9872d - - - - - 0060ece7 by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Improve documentation of Control.Exception.Backtrace - - - - - 18f532f3 by Ben Gamari at 2024-10-11T23:43:53-04:00 Bump process submodule to v1.6.25.0 - - - - - a9a3badf by Hassan Al-Awwadi at 2024-10-11T23:44:29-04:00 Move HsInteger and HsRat to an extension constructor These constructors were only used during the TC stage, or during template haskell. It seemed clear that it was independent of the source syntax represented in L.H.S, and thus we removed it according to #21592. - - - - - 4dd30cba by Artem Pelenitsyn at 2024-10-11T23:45:09-04:00 Docs: Linear types: link Strict Patterns subsection Also, fix a bug in RST with missing newline before a listing. Co-authored-by: Arnaud Spiwack <arnaud at spiwack.net> - - - - - adca5f2b by Ben Gamari at 2024-10-11T23:45:45-04:00 users guide: Address remaining TODOs in eventlog format docs Closes #25296. - - - - - 9291c125 by Sylvain Henry at 2024-10-11T23:46:26-04:00 Fix z-encoding of tuples (#25364) Tuples with prefix/suffix strings weren't always properly encoded with their shortcut notations. Fix this. - - - - - c08b68bc by Sven Tennie at 2024-10-11T23:47:01-04:00 Delete constants that can be deduced There are macros in MachRegs.h to figure those out. - - - - - 8b402da2 by Zubin Duggal at 2024-10-12T20:36:57+00:00 hadrian: Handle broken symlinks properly when creating source dist directories If we have a broken symlink in the repository, don't try to `need` the symlink or the target of the symlink. Attempting to do so has `shake` attempt to read the target to compute its hash, which fails because the target doesn't exist. - - - - - 16f97667 by Zubin Duggal at 2024-10-12T20:36:57+00:00 hadrian: exclude cabal.project.symlink.broken from source archives Cabal 3.14 introduced a broken symlink in its testsuite. Unfortunately, this broke our source distribution as we use use `tar --dereference` to avoid issues with symlink compatibility on windows, and `tar --dereference` chokes when it encounters any broken symlinks. We can't get rid of `--dereference` because symlinks are generally broken on windows, so the only option is to exclude this file from source archives. see also https://github.com/haskell/cabal/issues/10442 - - - - - f1a2c9fc by Zubin Duggal at 2024-10-12T20:36:57+00:00 Bump Cabal submodule to 3.14 Metric Decrease: MultiLayerModulesTH_OneShot Metric Increase: haddock.Cabal - - - - - 745dd590 by Ben Gamari at 2024-10-14T09:13:12-04:00 users-guide: Document GHCi :where command Resolve #24509. - - - - - e9cc4699 by Alan Zimmerman at 2024-10-14T09:13:48-04:00 EPA: Remove [AddEpAnn] from IE, Pat and some Tys EPA: Remove [AddEpAnn] from LazyPat EPA: Remove [AddEpAnn] from RecordCon/RecordUpd/ConPat EPA: Remove [AddEpAnn] from HsFieldBind EPA: Remove [AddEpAnn] from PatSynBind EPA: Remove [AddEpAnn] from IPBind EPA: Remove [AddEpAnn] from FixSig EPA: Remove [AddEpAnn] from activation rules EPA: Remove [AddEpann] from SpecInstSig EPA: Remove [AddEpAnn] from MinimalSig EPA: Remove [AddEpAnn] from SCCFunSig EPA: Remove [AddEpAnn] from CompleteMatchSig EPA: Remove [AddEpAnn] from AnnSig, as used in PatSynSig, ClassOpSig, TypeSig EPA: Remove [AddEpAnn] from IEThingAbs EPA: Remove [AddEpAnn] from IEThingAll / IEThingWith EPA: Remove [AddEpAnn] from IEModuleContents EPA: Remove [AddEpAnn] from HsOpTy EPA: Remove [AddEpAnn] for various binders EPA: Remove [AddEpAnn] for HsIParamTy - - - - - 81a570bf by Sebastian Graf at 2024-10-14T22:15:31-04:00 Desugaring, plus -Wincomplete-record-selectors This commit does several related things: * Major refactor of the handling of applications in the desugarer. Now all applications are handled in `dsApp`, `ds_app` and related functions. This dramatically simplifies the code and removes complicated cruft that had accumulated. Hooray. Fixes #25281. * Improve the handling of -Wincomplete-record-selectors. We now incorporate the result type of unsaturated record selector applications as well as consider long-distance information in getField applications. Plus, the implmentation now builds the improved `dsApp` stuff above, so it is much easier to understand. Plus, incorporates improved error message wording suggested by Adam Gundry in !12685. Fixes #24824, #24891 See the long Note [Detecting incomplete record selectors] * Add -Wincomplete-record-selectors to -Wall, as specified in GHC Proposal 516. To do this, I also had to add -Wno-incomplete-record-selectors to the build flags for Cabal in GHC's CI. See hadrian/src/Settings/Warnings.hs. We can remove this when Cabal is updated so that it doesn't trigger the warning: https://github.com/haskell/cabal/issues/10402 2.6% decrease in compile time allocation in RecordUpPerf Metric Decrease: RecordUpdPerf - - - - - ae7bc08e by Simon Peyton Jones at 2024-10-14T22:15:31-04:00 Elmininate incomplete record selectors This patch is a pure refactor of GHC's source code, to avoid the use of partial record selectors. It was provoked by adding -Wincomplete-record-selectors to -Wall (as the GHC Proposal specified), which in turn showed up lots of places where GHC was using incomplete record selectors. This patch does mostly-simple refactoring to make it clear to the pattern match checker that there is in fact no partiality. There is one externally-visible change: I changed the data type HoleFit to split out the two cases data HoleFit = TcHoleFit TcHoleFit | RawHoleFit SDoc data TcHoleFit = HoleFit { ...lots of fields } There are large swathes of code that just deal with `TcHoleFit`, and having it as a separate data types makes it apparent that `RawHoleFit` can't occur. This makes it much better -- but the change is visible in the HolePlugin interface. I decided that there are so few clients of this API that it's worth the change. I moved several functions from Language.Haskell.Syntax to GHC.Hs. Reason, when instantiated at (GhcPass _), the extension data construtcor is guaranteed unused, and that justifies omitted patterns in these functions. By putting them in GHC.Hs.X I can specialise the type for (GhcPass _) and thereby make the function total. An interesting side-light is that there were a few local function definitions without a type signature, like this one in GHC.Parser.Header convImport (L _ i) = (ideclPkgQual i, reLoc $ ideclName i) This is fully closed, and so is generalised; but that generalises it to any old pass, not (GhcPass _), so GHC rightly complains about the use of the selector `ideclPkgQual`. I added a type signature to `i`, thus convImport (L _ (i::ImportDecl GhcPs)) = (ideclPkgQual i, reLoc $ ideclName i) which specialised the function enough to make the record selector complete. Quite a surprising consequence of local let-generalisation! - - - - - 6a067226 by Simon Peyton Jones at 2024-10-14T22:15:31-04:00 Add -Werror=-Wno-error=incomplete-record-selectors to hadrian-multi In the main MR, -Wall now includes -Wincomplete-record-selectors. However `hadrian-multi` has many, many warnings about incomplete record selectors, so this patch stops those warnings being treated as errors. (See discussion on !13308.) A better fix would be to remove the use of incomplete record selectors, since each of them represents a potential crash. - - - - - edeafc14 by Ben Gamari at 2024-10-14T22:16:08-04:00 users-guide: Document field coalescence - - - - - 55b83587 by ARATA Mizuki at 2024-10-14T22:16:49-04:00 LLVM backend: Use correct rounding for Float literals Fixes #22033 - - - - - e59fe5c6 by Hassan Al-Awwadi at 2024-10-15T08:25:33+00:00 Changed import from Ghc. module to L.H.S module Progresses #21592 For some reason we still imported GHC.Types.Fixity when the definitino of Fixity and LexicalFixity have already been moved to Language.Haskell.Syntax.Basic. This fixes that for - - - - - ab1767d5 by Simon Peyton Jones at 2024-10-15T23:45:04-04:00 Add a release-notes entry for -Wincomplete-record-selectors - - - - - 6f0a62db by ur4t at 2024-10-16T15:33:43+00:00 GHCi: fix improper location of ghci_history file Fixes #24266 - - - - - 5f67db48 by Alan Zimmerman at 2024-10-17T05:18:43-04:00 EPA: Remove [AddEpAnn] commit 3 EPA: Remove [AddEpAnn] from HsDocTy EPA: Remove [AddEpAnn] from HsBangTy EPA: Remove [AddEpAnn] from HsExplicitListTy EPA: Remove [AddEpAnn] from HsExplicitTupleTy EPA: Remove [AddEpAnn] from HsTypedBracket EPA: Remove [AddEpAnn] from HsUntypedBracket EPA: Remove [AddEpAnn] from PatBuilderOpApp EPA: break out 'EpToken "|"' from ClassDecl anns EPA: Remove [AddEpAnn] from ClassDecl EPA: Remove [AddEpAnn] from SynDecl - - - - - fbbbd010 by Daan Rijks at 2024-10-17T05:19:19-04:00 Expand the haddocks for Control.Category - - - - - 076c1a10 by Andrew Lelechenko at 2024-10-17T05:19:19-04:00 documentation: more examples for Control.Category - - - - - 90891962 by Cheng Shao at 2024-10-17T16:41:18+00:00 ghci: mitigate host/target word size mismatch in BCOByteArray serialization This patch mitigates a severe host/target word size mismatch issue in BCOByteArray serialization logic introduced since !12142, see added note for detailed explanation. - - - - - 839ac52e by Cheng Shao at 2024-10-17T16:41:18+00:00 ghci: use plain malloc for mkConInfoTable on non-TNTC platforms This patch avoids using mmap() to allocate executable memory for mkConInfoTable on platforms without tables-next-to-code, see added comment for explanation. - - - - - a998f69d by Cheng Shao at 2024-10-17T16:41:18+00:00 ghc-internal: add missing CPPs for wasm This patch adds some missing CPP guards to ghc-internal, given those functions are non existent on wasm and would cause linking issues. - - - - - 71a471e7 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: rename prelude.js to prelude.mjs This commit renames prelude.js to prelude.mjs for wasm backend rts jsbits, and slightly adjusts the jsbits contents. This is for preparing the implementation of dyld.mjs that contains wasm dynamic linker logic, which needs to import prelude.mjs as a proper ESM module. - - - - - 33d9db17 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: add __wrapped_freeJSVal This commit wraps imported freeJSVal in a __wrapped_freeJSVal C function for wasm backend RTS. In general, wasm imports are only supposed to be directly called by C; they shouldn't be used as function pointers, which confuses wasm-ld at link-time when generating shared libraries. - - - - - 0d0a16a8 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: correct stale link in comment - - - - - 90a35c41 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: drop interpretBCO support from non-dyn ways on wasm This commit drops interpretBCO support from non dynamic rts ways on wasm. The bytecode interpreter is only useful when the RTS linker also works, and on wasm it only works for dynamic ways anyway. An additional benefit of dropping interpretBCO is reduction in code size of linked wasm modules, especially since interpretBCO references ffi_call which is an auto-generated large function in libffi-wasm and unused by most user applications. - - - - - 98a32ec5 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: don't build predefined GloblRegs for wasm PIC mode This commit wraps the predefined GlobalRegs in Wasm.S under a CPP guard to prevent building for PIC mode. When building dynamic ways of RTS, the wasm globals that represent STG GlobalRegs will be created and supplied by dyld.mjs. The current wasm dylink convention doesn't properly support exporting relocatable wasm globals at all, any wasm global exported by a .so is assumed to be a GOT.mem entry. - - - - - bef94bde by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: fix conflicting StgRun definitions on wasm This commit fixes conflicting StgRun definition when building dynamic ways of RTS for wasm in unregisterised mode. - - - - - a6a82cdb by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: use targetSupportsRPaths predicate This commit changes the hostSupportsRPaths predicate to targetSupportsRPaths and use that to decide whether to pass RPATH-related link-time options. It's not applied to stage0, we should just use the default link-time options of stageBoot ghc. - - - - - f232c872 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: disable internal-interpreter of ghc library when cross compiling This commit disable the internal-interpreter flag of ghc library when cross compiling, only external interpreter works in such cases. - - - - - 577c1819 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: enable internal-interpreter for ghc-bin stage0 This commit enables internal-interpreter flag for ghc-bin even when compiling stage0, as long as target supports ghci. It enables ghci functionality for cross targets that support ghci, since cross ghc-bin is really stage0. - - - - - c247f2ee by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: fix CFLAGS for gmp shared objs on wasm This commit adds -fvisibility=default to CFLAGS of gmp when building for wasm. This is required to generate the ghc-bignum shared library without linking errors. Clang defaults to -fvisibility=hidden for wasm targets, which will cause issues when a symbol is expected to be exported in a shared library but without explicit visibility attribute annotation. - - - - - 775410fd by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: re-enable PIC for gmp on wasm This commit re-enables --with-pic=yes configuration option of gmp when building for wasm, given we're about to include support for shared libraries, TH and ghci. - - - - - b45080a3 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: add the host_fully_static flavour transformer This commit adds the host_fully_static flavour transformer to hadrian, which ensures stage0 is fully statically linked while still permitting stage1 libdir to contain shared libraries. This is intended to be used by the wasm backend to build portable linux bindists that contain wasm shared libraries. - - - - - 5043507c by Cheng Shao at 2024-10-17T16:41:18+00:00 ci: update wasm jobs configuration This commit bumps ci-image revision to use updated wasm toolchain, and use host_fully_static instead of fully_static for wasm jobs so to ensure wasm shared libraries can be properly built. - - - - - 2956a3f7 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian/testsuite: implement config.cross logic This commit implements the config.cross field in the testsuite driver. It comes from the "cross compiling" ghc info field for both in-tree/out-of-tree GHC, and is an accurate predicate of whether we're cross-compiling or not (compared to the precense of target emulator), and is useful to implement predicates to assert the precense of internal interpreter (only available on non-cross GHC) for tests that do require it (e.g. plugins). - - - - - 8c74a0ed by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian/compiler: implement targetRTSLinkerOnlySupportsSharedLibs This patch implements the targetRTSLinkerOnlySupportsSharedLibs predicate in hadrian. Its definition in hadrian is the single source of truth, and the information propagates to ghc settings file, ghc driver and testsuite driver. It is used in various places to ensure dynamic dependency is selected when the target RTS linker only supports loading dynamic code. - - - - - b4c3c340 by Cheng Shao at 2024-10-17T16:41:18+00:00 testsuite: don't use host cpu features when testing cross ghc This patch disables CPU feature detection logic when testing cross GHC, since those features don't make sense for the target anyway. - - - - - 3c21b696 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: implement & use req_plugins predicate This commit implements req_plugins predicate to indicate that the test requires plugin functionality. Currently this means cross GHC is disabled since internal-interpreter doesn't work in cross GHC yet. - - - - - 93b8af80 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: make use of config.interp_force_dyn This commit takes config.interp_force_dyn into consideration when setting up TH/ghci way flags. - - - - - 94673d41 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: bump T17572 timeout - - - - - 2b5efc2d by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: bump T22744 pre_cmd timeout - - - - - 45102e2a by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip terminfo_so for cross ghc - - - - - 05e40406 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: fix shared library size tests for cross ghc This commit fixes shared library size tests (e.g. array_so in testsuite/tests/perf/size/all.T) when testing cross ghc. Previously, if shared library file extension of host and target differs, those tests will fail with framework errors due to not finding the right files. - - - - - fa68f833 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip ghc api tests that attempt to spawn processes inside wasm This commit skips a few ghc api tests on wasm, since they would attempt to spawn processes inside wasm, which is not supported at all. - - - - - 1241c04e by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip T22840 due to broken -dtag-inference-checks on wasm - - - - - 78c8b900 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: ensure $(ghciWayFlags) can be overridden This commit revises boilerplate.mk in testsuite as well as a few other places, to ensure the tests that do make use of $(ghciWayFlags) can receive the right $(ghciWayFlags) from testsuite driver config. - - - - - 47989ecc by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: skip rdynamic on wasm - - - - - fefb4ea1 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: skip T2615 on wasm This commit marks T2615 as skip on wasm, given LD_* environment variables aren't supported on wasm anyway. - - - - - 77c79762 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: mark MultiLayerModulesTH_Make/MultiLayerModulesTH_OneShot as fragile on wasm - - - - - 69bb4745 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: fix T16180 on wasm This commit fixes T16180 on wasm once TH support is flipped on. The fix is simply adding right asm code for wasm. - - - - - 621c753d by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: fix -fexternal-interpreter flag for JS backend Previously, -fexternal-interpreter is broken for JS backend, since GHC would attempt to launch a non-existent ghc-iserv* executable. This commit fixes it by adjusting pattern matching order in setTopSessionDynFlags. - - - - - 80aa8983 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: use interpreterDynamic predicate in preloadLib This commit use the interpreterDynamic predicate in preloadLib to decide if we should do dynLoadObjs instead of loadObj. Previously we used hostIsDynamic which was only written with non-cross internal interpreter in mind. The testsuite is also adjusted to remove hard-wired -fPIC flag for cbits (doesn't work in i386 RTS linker in vanilla way, #25260) and properly pass ghc_th_way_flags to ghc. - - - - - 74411461 by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix Cmm dynamic CLabels for wasm This commit fixes the handling of dynamic CLabels for the wasm backend. Just do the simplest handling: preserve the original CLabel, both unreg/NCG backends can handle them properly without issue. - - - - - f6abaf13 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: add necessary compile-time flags for wasm PIC mode This commit adds necessary compile-time flags when compiling for wasm PIC mode, see added comment for detailed explanation. - - - - - 9745fcfb by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: add necessary link-time flags for wasm shared libs This commit adds necessary link-time flags for wasm shared libs, see added comments for detailed explanation. - - - - - 649aae00 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: enforce -fno-use-rpaths for wasm This commit ensures the GHC driver never passes any RPATH-related link-time flags on wasm, which is not supported at all. - - - - - 47baa904 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: ensure static archives are picked when linking static .wasm modules This commit ensures static archives are picked when linking .wasm modules which are supposed to be fully static, even when ghc may be invoked with -dynamic, see added comment for explanation. - - - - - fc3a5591 by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix dynamic_too_enable for targets that require dynamic libraries This commit fixes dynamic_too_enable for targets whose RTS linker can only load dynamic code. - - - - - 94ef949e by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix checkNonStdWay for targets that require dynamic libraries This commit fixes checkNonStdWay to ensure that for targets whose RTS linker can only load dynamic code, the dynamic way of object is selected. - - - - - 88e99248 by Cheng Shao at 2024-10-17T16:41:24+00:00 ghc-bin: enforce dynamic way when the target requires so This commit makes ghc-bin use dynamic way when it is doing interactive stuff on certain targets whose RTS linker can only handle dynamic code. - - - - - 549582ef by Cheng Shao at 2024-10-17T16:41:24+00:00 hadrian/ghci: add wasm dyld This commit adds the wasm dynamic linker implementation, as well as ghci logic to call it and hadrian logic to install it to the correct location. See the top-level note in utils/jsffi/dyld.mjs for more details. - - - - - b562e3a6 by Cheng Shao at 2024-10-17T16:41:29+00:00 driver: fix getGccSearchDirectory for wasm target This commit fixes getGccSearchDirectory logic for wasm target, ensures the correct search directory containing libc.so etc can be found by GHC. getGccSearchDirectory is also exported so it can be used elsewhere to obtain the wasi-sdk libdir and pass to the dyld script. - - - - - 2d6107dc by Cheng Shao at 2024-10-17T16:41:29+00:00 driver: add wasm backend iserv logic This commit adds wasm backend iserv logic to the driver, see added comments for explanation. - - - - - 61f5baa5 by Cheng Shao at 2024-10-17T16:41:29+00:00 compiler: add PIC support to wasm backend NCG This commit adds support for generating PIC to the wasm backend NCG. - - - - - 652e7239 by Cheng Shao at 2024-10-17T16:41:29+00:00 hadrian/compiler: flip on support for shared libs & ghci for wasm This commit flips on the support for shared libs and ghci for the wasm target, given all required support logic has been added in previous commits. - - - - - 74a1f681 by Cheng Shao at 2024-10-17T16:41:29+00:00 testsuite: flip on support for shared libs, TH & ghci for wasm This commit flips on support for shared libs, TH & ghci for wasm in the testsuite, given support has been landed in previous commits. - - - - - 525d451e by Cheng Shao at 2024-10-17T23:03:34-04:00 Revert "compiler: start deprecating cmmToRawCmmHook" This reverts commit 1c064ef1f3e1aa2afc996e962ad53effa99ec5f4. Turns out the GHC-WPC project does use it to observe Cmm in the pipeline, see #25363. - - - - - 5bcfefd5 by Cheng Shao at 2024-10-17T23:04:09-04:00 rts: fix pointer overflow undefined behavior in bytecode interpreter This patch fixes an unnoticed undefined behavior in the bytecode interpreter. It can be caught by building `rts/Interpreter.c` with `-fsanitize=pointer-overflow`, the warning message is something like: ``` rts/Interpreter.c:1369:13: runtime error: addition of unsigned offset to 0x004200197660 overflowed to 0x004200197658 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1369:13 rts/Interpreter.c:1265:13: runtime error: addition of unsigned offset to 0x004200197660 overflowed to 0x004200197658 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1265:13 rts/Interpreter.c:1645:13: runtime error: addition of unsigned offset to 0x0042000b22f8 overflowed to 0x0042000b22f0 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1645:13 ``` Whenever we do something like `SpW(-1)`, the negative argument is implicitly converted to an unsigned integer type and causes pointer arithmetic overflow. It happens to be harmless for most targets since overflowing would wrap the result to desired value, but it's still coincidental and undefined behavior. Furthermore, it causes real damage to the wasm backend, given clang-20 will emit invalid wasm code that crashes at run-time for this kind of C code! (see https://github.com/llvm/llvm-project/issues/108770) The fix here is adding some explicit casts to ensure we always use the signed `ptrdiff_t` type as right hand operand of pointer arithmetic. - - - - - eb67875f by Matthew Craven at 2024-10-18T12:18:35+00:00 Bump transformers submodule The svg image files mentioned in transformers.cabal were previously not checked in, which broke sdist generation. - - - - - 366a1109 by Matthew Craven at 2024-10-18T12:18:35+00:00 Remove reference to non-existent file in haddock.cabal - - - - - 826852e9 by Matthew Craven at 2024-10-18T12:18:35+00:00 Move tests T11462 and T11525 into tests/tcplugins - - - - - dbe27152 by Matthew Craven at 2024-10-18T12:18:35+00:00 Repair the 'build-cabal' hadrian target Fixes #23117. Fixes #23281. Fixes #23490. This required: * Updating the bit-rotted compiler/Setup.hs and its setup-depends * Listing a few recently-added libraries and utilities in cabal.project-reinstall * Setting allow-boot-library-installs to 'True' since Cabal now considers the 'ghc' package itself a boot library for the purposes of this flag Additionally, the allow-newer block in cabal.project-reinstall was removed. This block was probably added because when the libraries/Cabal submodule is too new relative to the cabal-install executable, solving the setup-depends for any package with a custom setup requires building an old Cabal (from Hackage) against the in-tree version of base, and this can fail un-necessarily due to tight version bounds on base. However, the blind allow-newer can also cause the solver to go berserk and choose a stupid build plan that has no business succeeding, and the failures when this happens are dreadfully confusing. (See #23281 and #24363.) Why does setup-depends solving insist on an old version of Cabal? See: https://github.com/haskell/cabal/blob/0a0b33983b0f022b9697f7df3a69358ee9061a89/cabal-install/src/Distribution/Client/ProjectPlanning.hs#L1393-L1410 The right solution here is probably to use the in-tree cabal-install from libraries/Cabal/cabal-install with the build-cabal target rather than whatever the environment happens to provide. But this is left for future work. - - - - - b3c00c62 by Matthew Craven at 2024-10-18T12:18:35+00:00 Revert "CI: Disable the test-cabal-reinstall job" This reverts commit 38c3afb64d3ffc42f12163c6f0f0d5c414aa8255. - - - - - a04959b8 by Daneel Yaitskov at 2024-10-19T09:34:15-04:00 base: speed up traceEventIO and friends when eventlogging is turned off #17949 Check the RTS flag before doing any work with the given lazy string. Fix #17949 Co-authored-by: Michael Peyton Jones <me at michaelpj.com> Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - eff16c22 by Matthew Pickering at 2024-10-19T21:55:55-04:00 ci: Add support for ONLY_JOBS variable to trigger any validation pipeline By setting the ONLY_JOBS variable to the name of the job (or multiple jobs), the resulting pipeline will include a validation job for that pipeline. For example - if you set ONLY_JOBS="x86_64-linux-ubuntu22_04-validate" then a ubuntu22_04 job will be included in the validation pipeline. This is useful for testing specific jobs. Fixes #25332 - - - - - 280b6278 by Zubin Duggal at 2024-10-19T21:56:31-04:00 rel-eng: ghcup metadata generation: generated yaml anchors with meaningful names (cherry picked from commit d83f5bd730a8aef37d8a38b3560590d9798f8e45) - - - - - 25edf849 by Alan Zimmerman at 2024-10-19T21:57:08-04:00 EPA: Remove [AddEpAnn] Commit 4 EPA: Remove [AddEpAnn] from DataDecl This is quite a big change. The most important part is moving the annotations into HsDataDefn, using a specific annotation data type. It has a knock-on to everything that uses HsDataDefn EPA: Remove [AddEpAnn] for FunDep EPA: Remove [AddEpann] from FamilyDecl EPA: Remove [AddEpAnn] From InjectivityAnn EPA: Remove [AddEpAnn] from DefaultDecl EPA: Remove [AddEpAnn] from RuleDecls EPA: Remove [AddEpAnn] from Warnings - - - - - d5f42045 by Luite Stegeman at 2024-10-20T16:34:47-04:00 Interpreter: Add locking for communication with external interpreter This adds locking to communication with the external interpreter to prevent concurrent tasks interfering with each other. This fixes Template Haskell with the external interpreter in parallel (-j) builds. Fixes #25083 - - - - - d6bfea76 by Matthew James Kraai at 2024-10-20T16:35:29-04:00 Use monospace font for "Either a b" in fmap docs The documentation for fmap shows "`Either a b`" in the default font instead of showing "Either a b" in a monospace font. - - - - - 4bc7f9c8 by Luite Stegeman at 2024-10-20T16:36:15-04:00 Parser: remove non-ASCII characters from Parser.y Non-ASCII characters in the source causes a problem with the default Haskell Language Server setup in VSCode. Two characters seems to have been left in by accident. Workaround for #25396 - - - - - 7f61ed4e by Alan Zimmerman at 2024-10-21T06:39:45-04:00 EPA: Remove [AddEpAnn] Commit 5 EPA: Remove [AddEpAnn] from AnnPragma EPA: Remove [AddEpAnn] From ForeignDecl EPA: Remove [AddEpAnn] from RoleAnnotDecl EPA: Remove [AddEpAnn] from StandaloneKindSig EPA: Remove [AddEpAnn] From HsDeriving EPA: Remove [AddEpAnn] from ConDeclField EPA: Remove [AddEpAnn] from ConDeclGADT EPA: Remove [AddEpAnn] from ConDeclH98 EPA: Remove [AddEpAnn] from ClsInstDecl - - - - - f8694fe7 by Cheng Shao at 2024-10-21T06:40:21-04:00 wasm: bump dyld v8 heap size limit This patch adds `--max-old-space-size=8192` to wasm dyld shebang arguments to bump V8 heap size limit. The default limit (`heap_size_limit` returned by `v8.getHeapStatistics()`) is dynamically determined and a bit too low under certain workloads, and V8 would waste too much CPU time to garbage collect old generation heap more aggressively. Bumping the limit to 8G doesn't imply dyld would really take that much memory at run-time, but it lessens V8 heap stress significantly. - - - - - d328d173 by Luite Stegeman at 2024-10-21T12:39:18+00:00 Add requestTickyCounterSamples to GHC.Internal.Profiling This allows the user to request ticky counters to be written to the eventlog at specific times. See #24645 - - - - - 71765b1d by Simon Peyton Jones at 2024-10-21T20:55:00-04:00 Move defaulting code into a new module GHC.Tc.Solver had reached 4,000 lines -- although quite a lot of them are comments. This MR * Adds the new module GHC.Tc.Solver.Default, which has all the complex, but well modularised, defaulting code * Moves a bit of code from GHC.Tc.Solver into the existing GHC.Tc.Solver.Solve. Notably solveWanteds and simplifyWantedsTcM, which are called from GHC.Tc.Solver.Default It's a pure refactor. No code changes. - - - - - a398227b by Simon Peyton Jones at 2024-10-21T20:55:00-04:00 Improve the generalisation code in Solver.simplifyInfer The code in `decideQuantification` has become quite complicated. This MR straightens it out, adds a new Note, and on the way fixes #25266. See especially Note [decideAndPromoteTyVars] which is is where all the action happens in this MR. - - - - - 148059fe by Andrzej Rybczak at 2024-10-21T20:55:40-04:00 Adjust catches to properly rethrow exceptions https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13302 implemented exception rethrowing proposal, but it didn't adjust `catches`. This fixes it. - - - - - 25121dbc by doyougnu at 2024-10-22T09:38:18-04:00 linker: add --optimistic-linking flag This patch adds: - the --optimistic-linking flag which binds unknown symbols in the runtime linker to 0xDEADBEEF instead of exiting with failure - The test T25240 which tests these flags using dead code in the FFI system. - closes #25240 This patch is part of the upstreaming haskell.nix patches project. - - - - - f19e076d by doyougnu at 2024-10-22T09:38:18-04:00 ghc-internal: hide linkerOptimistic in MiscFlags - - - - - edc02197 by Cheng Shao at 2024-10-22T09:38:54-04:00 hadrian: fix bindist executable wrapper logic for cross targets This commit fixes an oversight of hadrian wrapper generation logic: when doing cross compilation, `wrapper` is called on executable names with cross prefix, therefore we must use `isSuffixOf` when matching to take the cross prefix into account. Also add missing cross prefix to ghci wrapper content and fix hsc2hs wrapper logic. - - - - - edf3bdf5 by Andreas Klebinger at 2024-10-22T16:30:42-04:00 mkTick: Push ticks through unsafeCoerce#. unsafeCoerce# doesn't exist at runtime so we should treat it like a Cast for the purpose of mkTick. This means if we have `{-# SCC foo #-} (unsafeCoerce# trivial_expr))` we now push the scope part of the cost centre up to `trivial_expr` at which point we can discard it completely if the expression is trivial enough. This fixes #25212. - - - - - 1bdb1317 by Cheng Shao at 2024-10-22T16:31:17-04:00 hadrian: enable late-CCS for perf flavour as well This patch enables late-CCS for perf flavour so that the testsuite can pass for perf as well. Fixes #25308. - - - - - fde12aba by Cheng Shao at 2024-10-22T16:31:54-04:00 hadrian: make sure ghc-bin internal-interpreter is disabled for stage0 when not cross compiling This patch disables internal-interpreter flag for stage0 ghc-bin when not cross compiling, see added comment for explanation. Fixes #25406. - - - - - 6ab8d751 by ignatiusm at 2024-10-24T01:23:35-04:00 Improve heap overflow exception message (#25198) Catch heap overflow exceptions and suggest using `+RTS -M<size>`. Fix #25198 - - - - - b3f7fb80 by Rodrigo Mesquita at 2024-10-24T01:24:12-04:00 determinism: Interface re-export list det In 'DocStructureItem' we want to make sure the 'Avails' are sorted, for interface file determinism. This commit introduces 'DetOrdAvails', a newtype that should only be constructed by sorting Avails with 'sortAvails' unless the avails are known to be deterministically ordered. This newtype is used by 'DocStructureItem' where 'Avails' was previously used to ensure the list of avails is deterministically sorted by construction. Note: Even though we order the constructors and avails in the interface file, the order of constructors in the haddock output is still determined from the order of declaration in the source. This was also true before, when the list of constructors in the interface file <docs> section was non-deterministic. Some haddock tests such as "ConstructorArgs" observe this (check the order of constructors in out/ConstructorArgs.html vs src/ConstructorArgs.hs vs its interface file) The updated tests are caused by haddock corners where the order in the source is not preserved (and was non-deterministic before this PR): * Module header in the latex backend * Re-export of pattern synonyms associated to a datatype (#25342) Fixes #25304 - - - - - e39c8c99 by Rodrigo Mesquita at 2024-10-24T01:24:12-04:00 Revert "ci: Allow abi-test to fail." After #25304, the abi-test with interface and object determinism succeeds. This reverts commit 7b37afc9f3e79559055488998ee73187886a0e00. - - - - - 7b1b0c6d by Alan Zimmerman at 2024-10-24T13:07:02-04:00 EPA: reduce [AddEpann] in AnnList Remove it from the `al_rest` field, and make `AnnList` parameterized on a type to be used in `al_rest`, for the various use cases. - - - - - 4a00731e by Rodrigo Mesquita at 2024-10-24T13:07:38-04:00 Fix -fobject-determinism flag definition The flag should be defined as an fflag to make sure the -fno-object-determinism flag is also an available option. Fixes #25397 - - - - - 55e4b9f2 by Sebastian Graf at 2024-10-25T07:01:54-04:00 CorePrep: Attach evaldUnfolding to floats to detect more values See `Note [Pin evaluatedness on floats]`. - - - - - 9f57c96d by Sebastian Graf at 2024-10-25T07:01:54-04:00 Make DataCon workers strict in strict fields (#20749) This patch tweaks `exprIsConApp_maybe`, `exprIsHNF` and friends, and Demand Analysis so that they exploit and maintain strictness of DataCon workers. See `Note [Strict fields in Core]` for details. Very little needed to change, and it puts field seq insertion done by Tag Inference into a new perspective: That of *implementing* strict field semantics. Before Tag Inference, DataCon workers are strict. Afterwards they are effectively lazy and field seqs happen around use sites. History has shown that there is no other way to guarantee taggedness and thus the STG Strict Field Invariant. Knock-on changes: * I reworked the whole narrative around "Tag inference". It's now called "EPT enforcement" and I recycyled the different overview Notes into `Note [EPT enforcement]`. * `exprIsHNF` previously used `exprOkForSpeculation` on unlifted arguments instead of recursing into `exprIsHNF`. That regressed the termination analysis in CPR analysis (which simply calls out to `exprIsHNF`), so I made it call `exprOkForSpeculation`, too. * There's a small regression in Demand Analysis, visible in the changed test output of T16859: Previously, a field seq on a variable would give that variable a "used exactly once" demand, now it's "used at least once", because `dmdTransformDataConSig` accounts for future uses of the field that actually all go through the case binder (and hence won't re-enter the potential thunk). The difference should hardly be observable. * The Simplifier's fast path for data constructors only applies to lazy data constructors now. I observed regressions involving Data.Binary.Put's `Pair` data type. * Unfortunately, T21392 does no longer reproduce after this patch, so I marked it as "not broken" in order to track whether we regress again in the future. Fixes #20749, the satisfying conclusion of an annoying saga (cf. the ideas in #21497 and #22475). Compiler perf generally improves, sometimes drastically: Baseline Test Metric value New value Change -------------------------------------------------------------------------------- ManyConstructors(normal) ghc/alloc 3,629,760,116 3,711,852,800 +2.3% BAD MultiLayerModulesTH_OneShot(normal) ghc/alloc 2,502,735,440 2,565,282,888 +2.5% BAD T12707(normal) ghc/alloc 804,399,798 791,807,320 -1.6% GOOD T17516(normal) ghc/alloc 964,987,744 1,008,383,520 +4.5% T18140(normal) ghc/alloc 75,381,152 49,860,560 -33.9% GOOD T18698b(normal) ghc/alloc 232,614,457 184,262,736 -20.8% GOOD T18923(normal) ghc/alloc 62,002,368 58,301,408 -6.0% GOOD T20049(normal) ghc/alloc 75,719,168 70,494,368 -6.9% GOOD T3294(normal) ghc/alloc 1,237,925,833 1,157,638,992 -6.5% GOOD T9233(normal) ghc/alloc 686,490,105 635,166,688 -7.5% GOOD geo. mean -0.7% minimum -33.9% maximum +4.5% I looked at T17516. It seems we do a few more simplifier iterations and end up with a larger program. It seems that some things inline more, while other things inline less. I don't see low-hanging fruit. I also looked at MultiLayerModulesTH_OneShot. It appears we generate a strange join point in the `getUnique` method of `Uniquable GHC.Unit.Types.Module` that should better call-site inline, but does not. Perhaps with !11492. NoFib does not seem affected much either: +-------------------------------++--+------------+-----------+---------------+-----------+ | || | base/ | std. err. | T20749/ (rel) | std. err. | +===============================++==+============+===========+===============+===========+ | spectral/last-piece || | 7.263e8 | 0.0% | +0.62% | 0.0% | +===============================++==+============+===========+===============+===========+ | geom mean || | +0.00% | | | | +-------------------------------++--+------------+-----------+---------------+-----------+ I had a look at last-piece. Nothing changes in stg-final, but there is a bit of ... movement around Data.Map.insert's use of GHC.Exts.lazy that is gone in stg-final. Co-Authored-By: Jaro Reinders <jaro.reinders at gmail.com> Metric Decrease: T12707 T18140 T18698b T18923 T19695 T20049 T3294 T9233 T21839c Metric Increase: ManyConstructors MultiLayerModulesTH_OneShot - - - - - 0225249a by Simon Peyton Jones at 2024-10-25T07:02:32-04:00 Some renaming This is a pure refactor, tidying up some inconsistent naming: isEqPred --> isEqClassPred isEqPrimPred --> isEqPred isReprEqPrimPred --> isReprEqPred mkPrimEqPred --> mkNomEqPred mkReprPrimEqPred --> mkReprEqPred mkPrimEqPredRold --> mkEqPredRole Plus I moved mkNomEqPred, mkReprEqPred, mkEqPredRolek from GHC.Core.Coercion to GHC.Core.Predicate where they belong. That means that Coercion imports Predicate rather than vice versa -- better. - - - - - 15a3456b by Ryan Hendrickson at 2024-10-25T07:02:32-04:00 compiler: Fix deriving with method constraints See Note [Inferred contexts from method constraints] Co-authored-by: Simon Peyton Jones <simon.peytonjones at gmail.com> - - - - - dbc77ce8 by Alan Zimmerman at 2024-10-25T18:20:13+01:00 EPA: Remove AddEpann commit 7 EPA: Remove [AddEpAnn] from HYPHEN in Parser.y The return value is never used, as it is part of the backpack configuration parsing. EPA: Remove last [AddEpAnn] usages Remove residual usage in GHC. It is still used - In haddock TTG extension point definitions (to be removed) - Some check-exact residual, to be removed - Comments around DisambECP in PostProcess EPA: Clean up [AddEpAnn] from check-exact There is one left, to be cleaned up when we remove AddEpann itself EPA: Remove [AddEpAnn] from haddock The TTG extension points need a value, it is not critical what that value is, in most cases. EPA: Remove AddEpAnn from HsRuleAnn EPA: Remove AddEpAnn from HsCmdArrApp - - - - - 23ddcc01 by Simon Peyton Jones at 2024-10-26T12:44:34-04:00 Fix optimisation of InstCo It turned out (#25387) that the fix to #15725 was not quite right: commit 48efbc04bd45d806c52376641e1a7ed7278d1ec7 Date: Mon Oct 15 10:25:02 2018 +0200 Fix #15725 with an extra Sym Optimising InstCo is quite subtle, and the invariants surrounding the LiftingContext in the coercion optimiser were not stated explicitly. This patch refactors the InstCo optimisation, and documents these invariants. See * Note [Optimising InstCo] * Note [The LiftingContext in optCoercion] I also did some refactoring of course: * Instead of a Bool swap-flag, I am not using GHC.Types.Basic.SwapFlag * I added some invariant-checking the coercion-construction functions in GHC.Core.Coercion.Opt. (Sadly these invariants don't hold during typechecking, becuase the types are un-zonked, so I can't put these checks in GHC.Core.Coercion.) - - - - - 589fea7f by Cheng Shao at 2024-10-27T05:36:38-04:00 ghcid: use multi repl for ghcid - - - - - d52a0475 by Andrew Lelechenko at 2024-10-27T05:37:13-04:00 documentation: add motivating section to Control.Monad.Fix - - - - - 301c3b54 by Cheng Shao at 2024-10-27T05:37:49-04:00 wasm: fix safari console error message related to import("node:timers") This patch fixes the wasm backend JSFFI prelude script to avoid calling `import("node:timers")` on non-deno hosts. Safari doesn't like it and would print an error message to the console. Fixes https://gitlab.haskell.org/ghc/ghc-wasm-meta/-/issues/13. - - - - - 9f02dfb5 by Simon Peyton Jones at 2024-10-27T15:10:08-04:00 Add a missing tidy in UnivCo We were failing to tidy the argument coercions of a UnivCo, which led directly to #25391. The fix is, happily, trivial. I don't have a small repro case (it came up when building horde-ad, which uses typechecker plugins). It should be possible to make a repro case, by using a plugin (which builds a UnivCo) but I decided it was not worth the bother. The bug is egregious and easily fixed. - - - - - 853050c3 by Andrew Lelechenko at 2024-10-27T15:10:44-04:00 Bump text submodule to 2.1.2 - - - - - 90746a59 by Andrew Lelechenko at 2024-10-27T15:10:44-04:00 hadrian: allow -Wunused-imports for text package - - - - - 8a6691c3 by Alan Zimmerman at 2024-10-27T19:44:48+00:00 EPA: Remove AddEpAnn Commit 8/final EPA: Remove AddEpAnn from AnnList EPA: Remove AddEpAnn from GrhsAnn This is the last actual use EPA: Remove NameAdornment from NameAnn Also rework AnnContext to use EpToken, and AnnParen EPA: Remove AddEpAnn. Final removal There are now none left, except for in a large note/comment in PostProcess, describing the historical transition to the disambiguation infrastructure - - - - - d5e7990c by Alan Zimmerman at 2024-10-28T21:41:05+00:00 EPA: Remove AnnKeywordId. This was used as part of AddEpAnn, and is no longer needed. Also remove all the haddock comments about which of are attached to the various parts of the AST. This is now clearly captured in the appropriate TTG extension points, and the `ExactPrint.hs` file. - - - - - e08b8370 by Serge S. Gulin at 2024-10-29T23:17:01-04:00 JS: Re-add optimization for literal strings in genApp (fixes #23479) Based on https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10588/ Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Andrei Borzenkov <root at sandwitch.dev> Co-authored-by: Danil Berestov <goosedb at yandex.ru> ------------------------- Metric Decrease: T25046_perf_size_gzip size_hello_artifact size_hello_artifact_gzip size_hello_unicode size_hello_unicode_gzip ------------------------- - - - - - e3496ef6 by Cheng Shao at 2024-10-29T23:17:37-04:00 compiler: remove unused hscDecls/hscDeclsWithLocation This patch removes unused `hscDecls`/`hscDeclsWithLocation` functions from the compiler, to reduce maintenance burden when doing refactorings related to ghci. - - - - - b1eed26f by Cheng Shao at 2024-10-29T23:18:13-04:00 testsuite: add T25414 test case marked as broken This commit adds T25414 test case to demonstrate #25414. It is marked as broken and will be fixed by the next commit. - - - - - e70009bc by Cheng Shao at 2024-10-29T23:18:13-04:00 driver: fix foreign stub handling logic in hscParsedDecls This patch fixes foreign stub handling logic in `hscParsedDecls`. Previously foreign stubs were simply ignored here, so any feature that involve foreign stubs would not work in ghci (e.g. CApiFFI). The patch reuses `generateByteCode` logic and eliminates a large chunk of duplicate logic that implements Core to bytecode generation pipeline here. Fixes #25414. - - - - - 1d7cd7fe by Andreas Klebinger at 2024-10-30T19:14:28-04:00 Add since tag for -fwrite-if-compression in user guide. Partial fix for #25395 - - - - - b349fd1b by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: Remove some unused functions - - - - - f859d61c by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: use explicit vertical bar token for ExplicitSum / SumPat - - - - - 721ac00d by Ben Gamari at 2024-10-31T08:37:38-04:00 rts/Disassembler: Fix encoding of BRK_FUN instruction The offset of the CC field was not updated after the encoding change in b85b11994e0130ff2401dd4bbdf52330e0bcf776. Fix this. Fixes #25374. - - - - - 0bc94360 by Alan Zimmerman at 2024-10-31T08:38:15-04:00 EPA: Bring in last EpToken usages For import declarations, NameAnnCommas and NPlusKPat. And remove anchor, it is the same as epaLocationRealSrcSpan. - - - - - 0b11cdc0 by sheaf at 2024-10-31T08:38:55-04:00 Assert that ctEvCoercion is called on an equality Calling 'ctEvCoercion' on non-equality constraints is always incorrect. We add an assertion to this function to detect such cases; for example a type-checking plugin might erroneously do this. - - - - - ea458779 by doyougnu at 2024-11-01T18:11:33-04:00 ghc-internal: strict, unboxed src loc ranges - closes: #20449 - See CLC proposal: #55 - - - - - 778ac793 by Kazuki Okamoto at 2024-11-01T18:12:13-04:00 No haddock markup in doctest line - - - - - cf0deeaf by Andreas Klebinger at 2024-11-02T17:54:52-04:00 Reword -fexpose-overloaded-unfoldings docs. This should make them slightly clearer. Fixes #24844 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 1c21e7d4 by Andreas Klebinger at 2024-11-02T17:55:29-04:00 Compile T25062 simd tests even if we can't run them. Helps avoid them being utterly broken. Fixes #25341 - - - - - 573cad4b by Cheng Shao at 2024-11-02T17:56:04-04:00 Remove unused USE_REPORT_PRELUDE code paths from the tree This patch removes unused `USE_REPORT_PRELUDE` code paths from the tree. They have been present since the first git revision 4fb94ae5e5d632748fa2e6c35e259eccc5a1a3f4, and might have been useful for debugging purposes many years ago, but these code paths are never actually built. Removing these ease maintenance of relevant modules in the future, and also allows us to get rid of `CPP` extension in those modules as a nice byproduct. - - - - - 97f600c6 by Hassan Al-Awwadi at 2024-11-04T15:52:12+00:00 Refactored BooleanFormula to be in line with TTG (#21592) There are two parts to this commit. * We moved the definition of BooleanFormula over to L.H.S.BooleanFormula * We parameterized the BooleanFormula over the pass The GHC specific details of BooleanFormula remain in Ghc.Data.BooleanFormula. Because its parameterized over the pass its no longer a functor or traversable, but we defined bfMap and bfTraverse for the cases where we needed fmap and traverse originally. Most other changes are just churn. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot ------------------------- - - - - - d4fd3580 by Andreas Klebinger at 2024-11-05T07:36:16-05:00 ghc-heap: Fix incomplete selector warnings. Use utility functions instead of selectors to read partial attributes. Part of fixing #25380. - - - - - fdd9f62a by Peter Trommler at 2024-11-05T07:36:51-05:00 PPC NCG: Implement fmin and fmax - - - - - 8e217256 by Mike Pilgrem at 2024-11-07T04:34:20-05:00 Re CLC #293 - Don't specify Data.List.NonEmpty in terms of partial See https://github.com/haskell/core-libraries-committee/issues/293 `List.init` had already been driven out of `tails1` by 21fc180bec93d964a7f4ffdf2429ef6f74b49ab6 but this specification also avoided partial `fromList`, so I preferred it. The `changelog.md` for `base` is updated, with an entry added under `base-4.22.0.0`. - - - - - 346e4cd1 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: copy zip files into the correct directory Fixes #25446 - - - - - bbdbe225 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: Sign .gz bindists too Fixes #25447 - - - - - 0c722e14 by Hécate Kleidukos at 2024-11-07T04:35:37-05:00 hadrian: Enforce the usage of GHC >=9.8.1 for ghci-multi GHC 9.6 no good when it comes to multi-repl stuff, despite being well within the range of n-2 releases for bootstrapping, when the script was adapted to load haddock, in !12851 - - - - - d8f8a1c3 by Sylvain Henry at 2024-11-07T19:27:46-05:00 Handle the special ghc-prim:GHC.Prim module in the compiler Before this patch, some custom hacks were necessary in ghc-prim's Setup.hs to register the GHC.Prim (virtual) module and in Hadrian to generate haddocks properly. In this patch we special-case this module in the compiler itself instead (which it already is, see ghcPrimIface in GHC.Iface.Load). From Cabal/Hadrian's perspective GHC.Prim is now just a normal autogenerated module. This simplification is worthwhile on its own. It was found while looking into the work needed for #24453 which aims to merge ghc-prim, ghc-bignum, and ghc-internal. It's also one step closer to remove ghc-prim's custom setup. - - - - - a55adc8e by Cheng Shao at 2024-11-07T19:28:22-05:00 Clean up obsolete CPP guarded code paths from the tree This patch cleans up obsolete CPP guarded code paths from the tree. The minimum supported boot GHC version is 9.6, and all the pre-9.6 era code paths can be removed. - - - - - 9ede97f3 by Cheng Shao at 2024-11-07T19:28:58-05:00 Remove obsolete executable wrappers from the tree The executable wrappers are handled by hadrian and bindist Makefile. The various .wrapper scripts in the tree are unused since removal of Make build system, so this patch removes them all. - - - - - 7d42b2df by tristian at 2024-11-07T19:29:40-05:00 TcRnDuplicateDecls now suggests to use the DuplicateRecordFields extension. Fixes: !24627 - - - - - e56ed179 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: normalise some versions in callstacks (cherry picked from commit f230e29f30d0c1c566d4dd251807fcab76a2710e) - - - - - a28fc903 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: use -fhide-source-paths to normalise some backpack tests (cherry picked from commit b19de476bc5ce5c7792e8af1354b94a4286a1a13) - - - - - ed16d303 by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite/haddock: strip version identifiers and unit hashes from html tests (cherry picked from commit fbf0889eadc410d43dd5c1657e320634b6738fa5) - - - - - e45e5836 by Zubin Duggal at 2024-11-11T15:16:36+05:30 haddock: oneshot tests can drop files if they share modtimes. Stop this by including the filename in the key. Ideally we would use `ghc -M` output to do a proper toposort Partially addresses #25372 (cherry picked from commit e78c7ef96e395f1ef41f04790aebecd0409b92b9) - - - - - 9104e6eb by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: fix normalisation of T9930fail so that it doesn't get tripped up by ghc executable (ARGV[0]) differences (cherry picked from commit a79a587e025d42d34bb30e115fc5c7cab6c1e030) - - - - - 2c31264a by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: normalise windows file seperators (cherry picked from commit f858875e03b9609656b542aaaaff85ad0a83878a) - - - - - 2807f91b by Zubin Duggal at 2024-11-11T15:21:30+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites - - - - - c02add17 by Ben Gamari at 2024-11-12T01:22:11-05:00 configure: Check version number validity Here we verify the previously informal invariant that stable release version numbers must have three components, preventing costly failed releases. Specifically, the check fails in the following scenarios: * `version=9.13` while `RELEASE=YES` since this would imply a release made from an unstable branch * `version=9.13.0` since unstable versions should only have two components * `version=9.12` since this has the wrong number of version components for a stable branch Fixes #25390. - - - - - 747fd322 by Teo Camarasu at 2024-11-12T01:22:49-05:00 docs: link to #14474 in the template-haskell docs - - - - - 6d96bb62 by Zubin Duggal at 2024-11-12T01:23:25-05:00 testsuite: normalise execvp vs exec differences in process tests Fixes #25431 - - - - - 502e6711 by Torsten Schmits at 2024-11-12T01:24:01-05:00 fix test lint that accumulated while the checks were broken I didn't fix the issues flagged by the #ifdef linter because it were so many that it seemed like the rule has become obsolete. - - - - - 223a4cb5 by Torsten Schmits at 2024-11-12T01:24:02-05:00 test driver: fix file collection for regex linters When a testsuite linter is executed with the `tracked` strategy, the driver runs `git ls-tree` to collect eligible files. This appears to have ceased producing any paths – `ls-tree` restricts its results to the current working directory, which is `testsuite/tests/linters` in this case. As a quick fix, this patch changes the working directory to match expectations. - - - - - 9ad9ac63 by Alan Zimmerman at 2024-11-12T01:24:39-05:00 EPA: Capture location of '_' for wild card type binder And keep track of promotion status in HsExplicitTupleTy, so the round-trip ppr test works for it. Updates Haddock output too, using the PromotionFlag in HsExplicitTupleTy. Closes #25454 - - - - - c37b96fa by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix setImmediate() implementation for Cloudflare Workers This patch fixes setImmediate() implementation for Cloudflare Workers in the wasm backend's js prelude script. Cloudflare Workers doesn't support the MessageChannel API, and we use a setTimeout() based fallback implementation in this case. - - - - - bea8ea4c by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix FinalizationRegistry logic for Cloudflare Workers This patch fixes FinalizationRegistry related logic for Cloudflare Workers in wasm backend js post linker. Cloudflare Workers doesn't support FinalizationRegistry, in this case we use a dummy implementation that doesn't do anything. - - - - - 00d551bf by Cheng Shao at 2024-11-13T08:48:21-05:00 Remove obsolete cross-port script This patch removes the obsolete cross-port script in the tree. The script was based on the legacy Make build system which has been pruned from the tree long ago. For hadrian, proper support for two-stage bootstrapping onto a new unsupported platform is a work in progress in !11444. - - - - - 75a2eae4 by Cheng Shao at 2024-11-13T08:48:58-05:00 hadrian: fix bindist makefile for wasm32-wasi target This patch fixes one incoherent place between bindist makefile and hadrian logic: I forgot to include wasi/wasm32 in OsSupportsGHCi/ArchSupportsGHCi as well. And this results in incorrect settings file generated after installing the bindist, and "Use interpreter"/"Have interpreter" fields incorrectly have "NO" values where they should be "YES" like --info output of in-tree version. - - - - - 0614abef by Alan Zimmerman at 2024-11-13T08:49:34-05:00 EPA: Correctly capture leading semis in decl list Closes #25467 - - - - - 00d58ae1 by Sebastian Graf at 2024-11-13T15:21:23-05:00 DmdAnal: Make `prompt#` lazy (#25439) This applies the same treatment to `prompt#` as for `catch#`. See `Note [Strictness for mask/unmask/catch/prompt]`. Fixes #25439. - - - - - 93233a66 by Ben Gamari at 2024-11-13T15:21:59-05:00 boot: Do not attempt to update config.sub While Apple ARM hardware was new we found that the autoconf scripts included in some boot packages were too old. As a mitigation for this, we introduced logic in the `boot` script to update the `config.sub` with that from the GHC tree. However, this causes submodules which have `config.sub` committted to appear to be dirty. This is a considerable headache. Now since `config.sub` with full platform support is more common we can remove `boot`'s `config.sub` logic. Fixes #19574. - - - - - fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - d9cf71c4 by Andreas Klebinger at 2024-12-06T16:37:47+01:00 NCG: AArch64 - Add -fhuge-code-sections. 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 enable this by default on mac where the lack of split sections can sometimes cause us to go over this limit - see #24648. This works around #24648 for now. - - - - - 12 changed files: - .ghcid - + .git-blame-ignore-revs - .gitattributes - .gitignore - .gitlab-ci.yml - + .gitlab/README.md - .gitlab/ci.sh - .gitlab/darwin/nix/sources.json - .gitlab/darwin/toolchain.nix - .gitlab/generate-ci/flake.lock - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/78b16a5fb82508add5a29a4e223cd1d69757f115...d9cf71c45cf49dc418d3557771fee297be5cfbe8 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/78b16a5fb82508add5a29a4e223cd1d69757f115...d9cf71c45cf49dc418d3557771fee297be5cfbe8 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 15:49:37 2024 From: gitlab at gitlab.haskell.org (Sjoerd Visscher (@trac-sjoerd_visscher)) Date: Fri, 06 Dec 2024 10:49:37 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T18570 Message-ID: <67531d11b2212_3ee6a1eed440128735@gitlab.mail> Sjoerd Visscher pushed new branch wip/T18570 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T18570 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 16:00:41 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 11:00:41 -0500 Subject: [Git][ghc/ghc][ghc-9.10] Fix eta-expansion in Prep Message-ID: <67531fa91ae92_3ee6a211a9481364ee@gitlab.mail> Ben Gamari pushed to branch ghc-9.10 at Glasgow Haskell Compiler / GHC Commits: 94e008c5 by Simon Peyton Jones at 2024-08-19T09:28:48+02:00 Fix eta-expansion in Prep As #25033 showed, we were eta-expanding in a way that broke a join point, which messed up Note [CorePrep invariants]. The fix is rather easy. See Wrinkle (EA1) of Note [Eta expansion of arguments in CorePrep] (cherry picked from commit 8bf6fd68001bc1dabdd974506fc735e22e8257a9) - - - - - 3 changed files: - compiler/GHC/CoreToStg/Prep.hs - + testsuite/tests/simplCore/should_compile/T25033.hs - testsuite/tests/simplCore/should_compile/all.T Changes: ===================================== compiler/GHC/CoreToStg/Prep.hs ===================================== @@ -1548,7 +1548,7 @@ cpeArgArity env float_decision arg -- See wrinkle (EA2) in Note [Eta expansion of arguments in CorePrep] | Just ao <- cp_arityOpts (cpe_config env) -- Just <=> -O1 or -O2 - , not (has_join_in_tail_context arg) + , not (eta_would_wreck_join arg) -- See Wrinkle (EA1) of Note [Eta expansion of arguments in CorePrep] = case exprEtaExpandArity ao arg of Nothing -> 0 @@ -1557,15 +1557,15 @@ cpeArgArity env float_decision arg | otherwise = exprArity arg -- this is cheap enough for -O0 -has_join_in_tail_context :: CoreExpr -> Bool +eta_would_wreck_join :: CoreExpr -> Bool -- ^ Identify the cases where we'd generate invalid `CpeApp`s as described in -- Wrinkle (EA1) of Note [Eta expansion of arguments in CorePrep] -has_join_in_tail_context (Let bs e) = isJoinBind bs || has_join_in_tail_context e -has_join_in_tail_context (Lam b e) | isTyVar b = has_join_in_tail_context e -has_join_in_tail_context (Cast e _) = has_join_in_tail_context e -has_join_in_tail_context (Tick _ e) = has_join_in_tail_context e -has_join_in_tail_context (Case _ _ _ alts) = any has_join_in_tail_context (rhssOfAlts alts) -has_join_in_tail_context _ = False +eta_would_wreck_join (Let bs e) = isJoinBind bs || eta_would_wreck_join e +eta_would_wreck_join (Lam _ e) = eta_would_wreck_join e +eta_would_wreck_join (Cast e _) = eta_would_wreck_join e +eta_would_wreck_join (Tick _ e) = eta_would_wreck_join e +eta_would_wreck_join (Case _ _ _ alts) = any eta_would_wreck_join (rhssOfAlts alts) +eta_would_wreck_join _ = False maybeSaturate :: Id -> CpeApp -> Int -> [CoreTickish] -> UniqSM CpeRhs maybeSaturate fn expr n_args unsat_ticks @@ -1698,7 +1698,8 @@ There is a nasty Wrinkle: (EA1) When eta expanding an argument headed by a join point, we might get "crap", as Note [Eta expansion for join points] in GHC.Core.Opt.Arity puts - it. + it. This crap means the output does not conform to the syntax in + Note [CorePrep invariants], which then makes later passes crash (#25033). Consider f (join j x = rhs in ...(j 1)...(j 2)...) @@ -1713,16 +1714,23 @@ There is a nasty Wrinkle: In our case, (join j x = rhs in ...(j 1)...(j 2)...) is not a valid `CpeApp` (see Note [CorePrep invariants]) and we'd get a crash in the App case of `coreToStgExpr`. - Hence we simply check for the cases where an intervening join point - binding in the tail context of the argument would lead to the introduction - of such crap via `has_join_in_tail_context`, in which case we abstain from - eta expansion. + + Hence, in `eta_would_wreck_join`, we check for the cases where an + intervening join point binding in the tail context of the argument would + make eta-expansion break Note [CorePrep invariants], in which + case we abstain from eta expansion. This scenario occurs rarely; hence it's OK to generate sub-optimal code. The alternative would be to fix Note [Eta expansion for join points], but that's quite challenging due to unfoldings of (recursive) join points. -(EA2) In cpeArgArity, if float_decision = FloatNone) the `arg` will look like + `eta_would_wreck_join` sees if there are any join points, like `j` above + that would be messed up. It must look inside lambdas (#25033); consider + f (\x. join j y = ... in ...(j 1)...(j 3)...) + We can't eta expand that `\x` any more than we could if the join was at + the top. (And when there's a lambda, we don't have a thunk anyway.) + +(EA2) In cpeArgArity, if float_decision=FloatNone the `arg` will look like let in rhs where is non-empty and can't be floated out of a lazy context (see `wantFloatLocal`). So we can't eta-expand it anyway, so we can return 0 ===================================== testsuite/tests/simplCore/should_compile/T25033.hs ===================================== @@ -0,0 +1,18 @@ +{-# OPTIONS_GHC -fno-do-lambda-eta-expansion #-} +-- It's hard to trigger #25033, because the Simplier eta-expands +-- lambdas. So I switched off that Simplifier ability, and thereby +-- triggered the bug on this nice small example. + +module T25033 where + +{-# NOINLINE woo #-} +woo x = x + +foo v = woo (\xs -> let + j ys = \ws -> xs ++ (reverse . reverse . reverse . reverse . + reverse . reverse . reverse . reverse) ws + in + case v of + "a" -> j "wim" + _ -> j "wam" + ) ===================================== testsuite/tests/simplCore/should_compile/all.T ===================================== @@ -516,3 +516,4 @@ test('T24229b', [ grep_errmsg(r'wfoo') ], compile, ['-O2 -ddump-simpl -dno-typea test('T24370', normal, compile, ['-O']) test('T24551', normal, compile, ['-O -dcore-lint']) test('T24726', normal, compile, ['-dcore-lint -dsuppress-uniques']) +test('T25033', normal, compile, ['-O']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/94e008c5ff66b455c48ededc703942a251e2d52d -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/94e008c5ff66b455c48ededc703942a251e2d52d You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 16:28:21 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Fri, 06 Dec 2024 11:28:21 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/andreask/9.10-backports-1 Message-ID: <67532625d14ea_65b44e04206041a@gitlab.mail> Andreas Klebinger pushed new branch wip/andreask/9.10-backports-1 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/andreask/9.10-backports-1 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 16:56:07 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Fri, 06 Dec 2024 11:56:07 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 9 commits: Use consistent capitalization for "GHC Proposal" in user guide Message-ID: <67532ca717700_65b444c3d80677fe@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 2fd7ade3 by Ben Gamari at 2024-12-06T11:55:52-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - ca1390ca by Ben Gamari at 2024-12-06T11:55:52-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - cbd45044 by Ben Gamari at 2024-12-06T11:55:52-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - d73ed3ed by Ben Gamari at 2024-12-06T11:55:52-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - 23f1e3a7 by Ben Gamari at 2024-12-06T11:55:52-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 22 changed files: - docs/users_guide/exts/primitives.rst - docs/users_guide/exts/rewrite_rules.rst - docs/users_guide/exts/stolen_syntax.rst - docs/users_guide/exts/strict.rst - docs/users_guide/runtime_control.rst - docs/users_guide/using-warnings.rst - docs/users_guide/using.rst - libraries/base/base.cabal.in - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/Data/Enum.hs → libraries/base/src/Data/Bounded.hs - libraries/base/src/Data/Enum.hs - libraries/ghc-internal/ghc-internal.cabal.in - libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs - libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs - rts/IOManager.c - rts/Interpreter.c - 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 Changes: ===================================== docs/users_guide/exts/primitives.rst ===================================== @@ -322,7 +322,7 @@ Unlifted Newtypes Enable the use of newtypes over types with non-lifted runtime representations. GHC implements an :extension:`UnliftedNewtypes` extension as specified in -`the GHC proposal #98 `_. +`the GHC Proposal #98 `_. :extension:`UnliftedNewtypes` relaxes the restrictions around what types can appear inside of a ``newtype``. For example, the type :: @@ -397,7 +397,7 @@ Unlifted Datatypes result kind. GHC implements the :extension:`UnliftedDatatypes` extension as specified in -`the GHC proposal #265 `_. +`the GHC Proposal #265 `_. :extension:`UnliftedDatatypes` relaxes the restrictions around what result kinds are allowed in data declarations. For example, the type :: ===================================== docs/users_guide/exts/rewrite_rules.rst ===================================== @@ -229,7 +229,7 @@ From a semantic point of view: because ``y`` can match against ``0``. - GHC implements **higher order matching** as described by - `GHC proposal #555 `_. + `GHC Proposal #555 `_. When a pattern variable is applied to distinct locally bound variables it forms what we call a **higher order pattern**. When matching, higher order patterns are treated like pattern variables, but they are ===================================== docs/users_guide/exts/stolen_syntax.rst ===================================== @@ -28,8 +28,8 @@ The following syntax is stolen: single: forall Stolen (in types) by default (see :ref:`infelicities-lexical`). ``forall`` is - a reserved keyword and never a type variable, in accordance with `GHC Proposal #43 - `__. + a reserved keyword and never a type variable, in accordance with `GHC Proposal #193 + `__. ``mdo`` ===================================== docs/users_guide/exts/strict.rst ===================================== @@ -528,7 +528,7 @@ that (SPLIT-STRICT) uses a bang-pattern in the ``case`` in the desugared right-h Note that rule (CASE) applies only when any of the *binders* is unlifted; it is irrelevant whether the binding *itself* is unlifted (see -`GHC proposal #35 `__). +`GHC Proposal #35 `__). For example (see :ref:`primitives`):: let (# a::Int, b::Bool #) = e in body ===================================== docs/users_guide/runtime_control.rst ===================================== @@ -1391,7 +1391,7 @@ and can be controlled by the following flags. The default for this flag is currently ``--read-tix-file=yes`` but will change to ``-read-tix-file=no`` in a future version of GHC according to the accepted - `GHC proposal 612 `__. + `GHC Proposal 612 `__. .. rts-flag:: --write-tix-file= ===================================== docs/users_guide/using-warnings.rst ===================================== @@ -1546,7 +1546,7 @@ of ``-W(no-)*``. The use of ``*`` to denote the kind of inhabited types relies on the :extension:`StarIsType` extension, which in a future release will be turned off by default and then possibly removed. The reasons for this and - the deprecation schedule are described in `GHC proposal #143 + the deprecation schedule are described in `GHC Proposal #143 `__. This warning allows to detect such uses of ``*`` before the actual ===================================== docs/users_guide/using.rst ===================================== @@ -752,7 +752,7 @@ search path (see :ref:`search-path`). GHC Jobserver Protocol ~~~~~~~~~~~~~~~~~~~~~~ -The GHC Jobserver Protocol was specified in `GHC proposal #540 `__. +The GHC Jobserver Protocol was specified in `GHC Proposal #540 `__. This protocol allows a server to dynamically invoke many instances of a client process, ===================================== libraries/base/base.cabal.in ===================================== @@ -46,8 +46,10 @@ Library , Data.Bifoldable1 , Data.Bifunctor , Data.Bitraversable + , Data.Bounded , Data.Char , Data.Complex + , Data.Enum , Data.Fixed , Data.Foldable1 , Data.Functor.Classes @@ -95,7 +97,6 @@ Library , Data.Dynamic , Data.Either , Data.Eq - , Data.Enum , Data.Foldable , Data.Function , Data.Functor ===================================== libraries/base/changelog.md ===================================== @@ -7,6 +7,8 @@ * `Data.List.NonEmpty.{init,last,tails1}` are now defined using only total functions (rather than partial ones). ([CLC proposal #293](https://github.com/haskell/core-libraries-committee/issues/293)) ## 4.21.0.0 *TBA* + * Introduce `Data.Bounded` module exporting the `Bounded` typeclass (finishing [CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) + * Deprecate export of `Bounded` class from `Data.Enum` ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * `GHC.Desugar` has been deprecated and should be removed in GHC 9.14. ([CLC proposal #216](https://github.com/haskell/core-libraries-committee/issues/216)) * Add a `readTixFile` field to the `HpcFlags` record in `GHC.RTS.Flags` ([CLC proposal #276](https://github.com/haskell/core-libraries-committee/issues/276)) * Add `compareLength` to `Data.List` and `Data.List.NonEmpty` ([CLC proposal #257](https://github.com/haskell/core-libraries-committee/issues/257)) @@ -51,8 +53,9 @@ `ioError` to prevent leaking the implementation of these error functions into the callstack. -## 4.20.0.0 May 2024 +## 4.20.0.0 *May 2024* * Shipped with GHC 9.10.1 + * Introduce `Data.Enum` module exporting both `Enum` and `Bounded`. Note that the export of `Bounded` will be deprecated in a future release ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * Deprecate `GHC.Pack` ([#21461](https://gitlab.haskell.org/ghc/ghc/-/issues/21461)) * Export `foldl'` from `Prelude` ([CLC proposal #167](https://github.com/haskell/core-libraries-committee/issues/167)) * The top-level handler for uncaught exceptions now displays the output of `displayException` rather than `show` ([CLC proposal #198](https://github.com/haskell/core-libraries-committee/issues/198)) ===================================== libraries/ghc-internal/src/GHC/Internal/Data/Enum.hs → libraries/base/src/Data/Bounded.hs ===================================== @@ -1,22 +1,25 @@ +{-# LANGUAGE Safe #-} {-# LANGUAGE NoImplicitPrelude #-} ----------------------------------------------------------------------------- -- | --- Module : GHC.Internal.Data.Enum +-- Module : Data.Bounded -- Copyright : (c) The University of Glasgow, 1992-2002 -- License : see libraries/base/LICENSE -- --- Maintainer : ghc-devs at haskell.org +-- Maintainer : cvs-ghc at haskell.org -- Stability : stable -- Portability : non-portable (GHC extensions) -- --- The 'Enum' and 'Bounded' classes. +-- The 'Bounded' class. +-- +-- @since 4.22.0.0 -- ----------------------------------------------------------------------------- -module GHC.Internal.Data.Enum +module Data.Bounded ( Bounded(..) - , Enum(..) ) where -import GHC.Internal.Enum +import GHC.Enum + ===================================== libraries/base/src/Data/Enum.hs ===================================== @@ -1,7 +1,8 @@ {-# LANGUAGE Safe #-} +{-# LANGUAGE NoImplicitPrelude #-} +----------------------------------------------------------------------------- -- | --- -- Module : Data.Enum -- Copyright : (c) The University of Glasgow, 1992-2002 -- License : see libraries/base/LICENSE @@ -10,12 +11,16 @@ -- Stability : stable -- Portability : non-portable (GHC extensions) -- --- The 'Enum' and 'Bounded' classes. +-- The 'Enum' class. +-- +-- @since 4.20.0.0 -- +----------------------------------------------------------------------------- module Data.Enum - (Bounded(..), - Enum(..) - ) where + ( Enum(..) + , {-# DEPRECATED "Bounded should be imported from Data.Bounded" #-} + Bounded(..) + ) where -import GHC.Internal.Data.Enum \ No newline at end of file +import GHC.Internal.Enum ===================================== libraries/ghc-internal/ghc-internal.cabal.in ===================================== @@ -117,7 +117,6 @@ Library GHC.Internal.Data.Dynamic GHC.Internal.Data.Either GHC.Internal.Data.Eq - GHC.Internal.Data.Enum GHC.Internal.Data.Foldable GHC.Internal.Data.Function GHC.Internal.Data.Functor ===================================== libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs ===================================== @@ -1,6 +1,7 @@ {-# LANGUAGE Trustworthy #-} -{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE StandaloneDeriving #-} ----------------------------------------------------------------------------- -- | @@ -34,6 +35,8 @@ module GHC.Internal.IO.SubSystem ( ) where import GHC.Internal.Base +import GHC.Internal.Show +import GHC.Internal.Enum #if defined(mingw32_HOST_OS) import GHC.Internal.IO.Unsafe @@ -55,6 +58,10 @@ data IoSubSystem -- native APIs for I/O, including IOCP and RIO. deriving (Eq) +-- N.B. These are currently unused by GHC but is needed for stability of @base at . +deriving instance Enum IoSubSystem +deriving instance Show IoSubSystem + -- | Conditionally execute an action depending on the configured I/O subsystem. -- On POSIX systems always execute the first action. -- On Windows execute the second action if WINIO as active, otherwise fall back to ===================================== libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs ===================================== @@ -18,7 +18,7 @@ import GHC.Generics (Generic) import GHC.Internal.Base import GHC.Internal.Show import GHC.Internal.Generics -import GHC.Internal.Data.Enum +import GHC.Internal.Enum #endif -- | The language extensions known to GHC. ===================================== rts/IOManager.c ===================================== @@ -110,7 +110,6 @@ parseIOManagerFlag(const char *iomgrstr, IO_MANAGER_FLAG *flag) #else return IOManagerUnavailable; #endif - *flag = IO_MNGR_FLAG_MIO; } else if (strcmp("winio", iomgrstr) == 0) { #if defined(IOMGR_ENABLED_WINIO) ===================================== rts/Interpreter.c ===================================== @@ -1785,7 +1785,6 @@ run_BCO: case bci_TESTLT_P: { unsigned int discr = BCO_NEXT; int failto = BCO_GET_LARGE_ARG; - ASSERT(discr <= TAG_MASK); StgClosure* con = UNTAG_CLOSURE((StgClosure*)SpW(0)); if (GET_TAG(con) >= discr) { bciPtr = failto; @@ -1796,7 +1795,6 @@ run_BCO: case bci_TESTEQ_P: { unsigned int discr = BCO_NEXT; int failto = BCO_GET_LARGE_ARG; - ASSERT(discr <= TAG_MASK); StgClosure* con = UNTAG_CLOSURE((StgClosure*)SpW(0)); if (GET_TAG(con) != discr) { bciPtr = failto; ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11536,10 +11544,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11564,6 +11568,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11618,10 +11626,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11634,6 +11638,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11692,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -14571,10 +14579,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -14599,6 +14603,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -14653,10 +14661,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -14669,6 +14673,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -14727,6 +14735,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -15544,6 +15553,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.JS.Prim.JSException -- Defined in ‘GHC.Internal.JS.Prim’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11800,10 +11808,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11828,6 +11832,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11882,10 +11890,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11898,6 +11902,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11957,6 +11965,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12789,6 +12798,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IO.Windows.Handle.CONSOLE_READCONSOLE_CONTROL -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.NativeHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.ConsoleHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11536,10 +11544,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11564,6 +11568,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11618,10 +11626,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11634,6 +11638,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11692,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -10714,6 +10714,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10767,6 +10768,7 @@ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.ProfFlags -- Defined in instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.RTSFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TickyFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TraceFlags -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.Stats.GCDetails -- Defined in ‘GHC.Internal.Stats’ instance GHC.Internal.Show.Show GHC.Internal.Stats.RTSStats -- Defined in ‘GHC.Internal.Stats’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 ===================================== @@ -10717,6 +10717,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10770,6 +10771,7 @@ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.ProfFlags -- Defined in instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.RTSFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TickyFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TraceFlags -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.Stats.GCDetails -- Defined in ‘GHC.Internal.Stats’ instance GHC.Internal.Show.Show GHC.Internal.Stats.RTSStats -- Defined in ‘GHC.Internal.Stats’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/48c9283abcd713104099366b9f7f867ec8ca9299...23f1e3a71c7308bc9bcb7b9816c4daedd5d7e611 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/48c9283abcd713104099366b9f7f867ec8ca9299...23f1e3a71c7308bc9bcb7b9816c4daedd5d7e611 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 17:32:16 2024 From: gitlab at gitlab.haskell.org (Peter Trommler (@trommler)) Date: Fri, 06 Dec 2024 12:32:16 -0500 Subject: [Git][ghc/ghc][wip/ppc64-fix-T25155-T25240] 73 commits: hadrian: Allow haddock options to be passed via key-value settings Message-ID: <67533520d05f3_cf82d1ee5d817e8@gitlab.mail> Peter Trommler pushed to branch wip/ppc64-fix-T25155-T25240 at Glasgow Haskell Compiler / GHC Commits: 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 8405329b by Peter Trommler at 2024-12-06T17:32:09+00:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3674c4b6 by Peter Trommler at 2024-12-06T17:32:09+00:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 30 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Data/Graph/Directed.hs - + compiler/GHC/Data/Graph/Directed/Internal.hs - + compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Backpack.hs - compiler/GHC/Driver/Config/Parser.hs - compiler/GHC/Driver/Config/StgToCmm.hs - compiler/GHC/Driver/DynFlags.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Hooks.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/MakeFile.hs - compiler/GHC/Driver/Phases.hs - compiler/GHC/Driver/Pipeline/Execute.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/HsToCore/Coverage.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ee63b50550a22c83531cc66a55bfba922b5b8310...3674c4b644490136beb96f2b20570eac2be461e9 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ee63b50550a22c83531cc66a55bfba922b5b8310...3674c4b644490136beb96f2b20570eac2be461e9 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 17:38:55 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Fri, 06 Dec 2024 12:38:55 -0500 Subject: [Git][ghc/ghc][wip/T25445b] 16 commits: Add Lint for perf tests Message-ID: <675336af47801_cf82d228d502355@gitlab.mail> Simon Peyton Jones pushed to branch wip/T25445b at Glasgow Haskell Compiler / GHC Commits: a8725ad7 by Simon Peyton Jones at 2024-12-06T17:28:32+00:00 Add Lint for perf tests - - - - - aac9631f by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Start on refactoring Lint Addressing #25445 Does not yet even compile - - - - - 38e49a3b by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Getting there - - - - - 66472aee by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Wibbles - - - - - 28082d1f by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Don't return a kind when linting types - - - - - 1ca1ae28 by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Don't clone Ids - - - - - 5347c352 by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Wibble - - - - - a3e2b7ab by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 More improvements - - - - - 4be31f28 by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Performance-related fixes Addresses #25463 (too much specialisation) and #20825 (Lint is expensive) - - - - - ac3d5aa2 by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Try not returning gubbins from lintCoercion - - - - - 32796783 by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 lintType no longer returns a type - - - - - 2bfdd063 by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Work in progres on linting applications - - - - - 6bc702aa by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Lint applications better Notably lint_app2 - - - - - 70030797 by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Improve forallty/forallco - - - - - 27046aff by Simon Peyton Jones at 2024-12-06T17:36:37+00:00 Wibbles - - - - - 9e9e4117 by Simon Peyton Jones at 2024-12-06T17:36:38+00:00 Wibbles - - - - - 19 changed files: - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/Opt/Specialise.hs - compiler/GHC/Core/SimpleOpt.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/Type.hs - compiler/GHC/Data/Unboxed.hs - compiler/GHC/Hs/Dump.hs - compiler/GHC/Tc/Solver/Equality.hs - compiler/GHC/Tc/TyCl.hs - compiler/GHC/Tc/Utils/TcType.hs - compiler/GHC/Types/Var.hs - testsuite/tests/perf/compiler/T8095.hs - testsuite/tests/perf/compiler/all.T Changes: ===================================== compiler/GHC/Core.hs ===================================== @@ -14,9 +14,10 @@ module GHC.Core ( -- * In/Out type synonyms InId, InBind, InExpr, InAlt, InArg, InType, InKind, - InBndr, InVar, InCoercion, InTyVar, InCoVar, + InBndr, InVar, InCoercion, InTyVar, InCoVar, InTyCoVar, OutId, OutBind, OutExpr, OutAlt, OutArg, OutType, OutKind, - OutBndr, OutVar, OutCoercion, OutTyVar, OutCoVar, MOutCoercion, + OutBndr, OutVar, OutCoercion, OutTyVar, OutCoVar, + OutTyCoVar, MOutCoercion, -- ** 'Expr' construction mkLet, mkLets, mkLetNonRec, mkLetRec, mkLams, ===================================== compiler/GHC/Core/Coercion.hs ===================================== @@ -2283,7 +2283,7 @@ liftCoSubstTyVarBndrUsing view_co fun lc@(LC subst cenv) old_var stuff = fun lc old_kind eta = view_co stuff k1 = coercionLKind eta - new_var = uniqAway (getSubstInScope subst) (setVarType old_var k1) + new_var = uniqAway (substInScopeSet subst) (setVarType old_var k1) lifted = mkGReflRightCo Nominal (TyVarTy new_var) eta -- :: new_var ~ new_var |> eta @@ -2303,7 +2303,7 @@ liftCoSubstCoVarBndrUsing view_co fun lc@(LC subst cenv) old_var stuff = fun lc old_kind eta = view_co stuff k1 = coercionLKind eta - new_var = uniqAway (getSubstInScope subst) (setVarType old_var k1) + new_var = uniqAway (substInScopeSet subst) (setVarType old_var k1) -- old_var :: s1 ~r s2 -- eta :: (s1' ~r s2') ~N (t1 ~r t2) @@ -2387,7 +2387,7 @@ lcLookupCoVar (LC subst _) cv = lookupCoVar subst cv -- | Get the 'InScopeSet' from a 'LiftingContext' lcInScopeSet :: LiftingContext -> InScopeSet -lcInScopeSet (LC subst _) = getSubstInScope subst +lcInScopeSet (LC subst _) = substInScopeSet subst {- %************************************************************************ ===================================== compiler/GHC/Core/Lint.hs ===================================== @@ -82,7 +82,6 @@ import GHC.Types.Demand ( splitDmdSig, isDeadEndDiv ) import GHC.Builtin.Names import GHC.Builtin.Types.Prim -import GHC.Builtin.Types ( multiplicityTy ) import GHC.Data.Bag import GHC.Data.List.SetOps @@ -96,16 +95,16 @@ import GHC.Utils.Error import qualified GHC.Utils.Error as Err import GHC.Utils.Logger +import GHC.Data.Pair +import GHC.Base (oneShot) +import GHC.Data.Unboxed + import Control.Monad import Data.Foldable ( for_, toList ) import Data.List.NonEmpty ( NonEmpty(..), groupWith ) -import Data.List ( partition ) import Data.Maybe import Data.IntMap.Strict ( IntMap ) import qualified Data.IntMap.Strict as IntMap ( lookup, keys, empty, fromList ) -import GHC.Data.Pair -import GHC.Base (oneShot) -import GHC.Data.Unboxed {- Note [Core Lint guarantee] @@ -552,7 +551,7 @@ Check a core binding, returning the list of variables bound. -- Let lintRecBindings :: TopLevelFlag -> [(Id, CoreExpr)] - -> ([LintedId] -> LintM a) -> LintM (a, [UsageEnv]) + -> ([OutId] -> LintM a) -> LintM (a, [UsageEnv]) lintRecBindings top_lvl pairs thing_inside = lintIdBndrs top_lvl bndrs $ \ bndrs' -> do { ues <- zipWithM lint_pair bndrs' rhss @@ -566,14 +565,14 @@ lintRecBindings top_lvl pairs thing_inside ; lintLetBind top_lvl Recursive bndr' rhs rhs_ty ; return ue } -lintLetBody :: LintLocInfo -> [LintedId] -> CoreExpr -> LintM (LintedType, UsageEnv) +lintLetBody :: LintLocInfo -> [OutId] -> CoreExpr -> LintM (OutType, UsageEnv) lintLetBody loc bndrs body = do { (body_ty, body_ue) <- addLoc loc (lintCoreExpr body) ; mapM_ (lintJoinBndrType body_ty) bndrs ; return (body_ty, body_ue) } -lintLetBind :: TopLevelFlag -> RecFlag -> LintedId - -> CoreExpr -> LintedType -> LintM () +lintLetBind :: TopLevelFlag -> RecFlag -> OutId + -> CoreExpr -> OutType -> LintM () -- Binder's type, and the RHS, have already been linted -- This function checks other invariants lintLetBind top_lvl rec_flag binder rhs rhs_ty @@ -664,7 +663,7 @@ lintLetBind top_lvl rec_flag binder rhs rhs_ty -- join point. -- -- See Note [Checking StaticPtrs]. -lintRhs :: Id -> CoreExpr -> LintM (LintedType, UsageEnv) +lintRhs :: Id -> CoreExpr -> LintM (OutType, UsageEnv) -- NB: the Id can be Linted or not -- it's only used for -- its OccInfo and join-pointer-hood lintRhs bndr rhs @@ -696,7 +695,7 @@ lintRhs _bndr rhs = fmap lf_check_static_ptrs getLintFlags >>= go -- | Lint the RHS of a join point with expected join arity of @n@ (see Note -- [Join points] in "GHC.Core"). -lintJoinLams :: JoinArity -> Maybe Id -> CoreExpr -> LintM (LintedType, UsageEnv) +lintJoinLams :: JoinArity -> Maybe Id -> CoreExpr -> LintM (OutType, UsageEnv) lintJoinLams join_arity enforce rhs = go join_arity rhs where @@ -857,26 +856,7 @@ that: it really is a value, albeit a zero-bit value. ************************************************************************ -} --- Linted things: substitution applied, and type is linted -type LintedType = Type -type LintedKind = Kind -type LintedCoercion = Coercion -type LintedTyCoVar = TyCoVar -type LintedId = Id - --- | Lint an expression cast through the given coercion, returning the type --- resulting from the cast. -lintCastExpr :: CoreExpr -> LintedType -> Coercion -> LintM LintedType -lintCastExpr expr expr_ty co - = do { co' <- lintCoercion co - ; let (Pair from_ty to_ty, role) = coercionKindRole co' - ; checkValueType to_ty $ - text "target of cast" <+> quotes (ppr co') - ; lintRole co' Representational role - ; ensureEqTys from_ty expr_ty (mkCastErr expr co' from_ty expr_ty) - ; return to_ty } - -lintCoreExpr :: CoreExpr -> LintM (LintedType, UsageEnv) +lintCoreExpr :: InExpr -> LintM (OutType, UsageEnv) -- The returned type has the substitution from the monad -- already applied to it: -- lintCoreExpr e subst = exprType (subst e) @@ -887,29 +867,32 @@ lintCoreExpr :: CoreExpr -> LintM (LintedType, UsageEnv) -- See Note [GHC Formalism] lintCoreExpr (Var var) - = do - var_pair@(var_ty, _) <- lintIdOcc var 0 - -- See Note [Linting representation-polymorphic builtins] - checkRepPolyBuiltin (Var var) [] var_ty - --checkDataToTagPrimOpTyCon (Var var) [] - return var_pair + = do { var_pair@(var_ty, _) <- lintIdOcc var 0 + -- See Note [Linting representation-polymorphic builtins] + ; checkRepPolyBuiltin (Var var) [] var_ty + --checkDataToTagPrimOpTyCon (Var var) [] + ; return var_pair } lintCoreExpr (Lit lit) = return (literalType lit, zeroUE) lintCoreExpr (Cast expr co) - = do (expr_ty, ue) <- markAllJoinsBad (lintCoreExpr expr) + = do { (expr_ty, ue) <- markAllJoinsBad (lintCoreExpr expr) -- markAllJoinsBad: see Note [Join points and casts] - to_ty <- lintCastExpr expr expr_ty co - return (to_ty, ue) + + ; lintCoercion co + ; lintRole co Representational (coercionRole co) + ; Pair from_ty to_ty <- substCoKindM co + ; checkValueType (typeKind to_ty) $ + text "target of cast" <+> quotes (ppr co) + ; ensureEqTys from_ty expr_ty (mkCastErr expr co from_ty expr_ty) + ; return (to_ty, ue) } lintCoreExpr (Tick tickish expr) - = do case tickish of - Breakpoint _ _ ids _ -> forM_ ids $ \id -> do - checkDeadIdOcc id - lookupIdInScope id - _ -> return () - markAllJoinsBadIf block_joins $ lintCoreExpr expr + = do { case tickish of + Breakpoint _ _ ids _ -> forM_ ids $ \id -> lintIdOcc id 0 + _ -> return () + ; markAllJoinsBadIf block_joins $ lintCoreExpr expr } where block_joins = not (tickish `tickishScopesLike` SoftScope) -- TODO Consider whether this is the correct rule. It is consistent with @@ -921,12 +904,12 @@ lintCoreExpr (Tick tickish expr) lintCoreExpr (Let (NonRec tv (Type ty)) body) | isTyVar tv = -- See Note [Linting type lets] - do { ty' <- lintType ty - ; lintTyBndr tv $ \ tv' -> + do { ty' <- lintTypeAndSubst ty + ; lintTyCoBndr tv $ \ tv' -> do { addLoc (RhsOf tv) $ lintTyKind tv' ty' -- Now extend the substitution so we -- take advantage of it in the body - ; extendTvSubstL tv ty' $ + ; extendTvSubstL tv ty' $ addLoc (BodyOfLet tv) $ lintCoreExpr body } } @@ -939,7 +922,8 @@ lintCoreExpr (Let (NonRec bndr rhs) body) -- Now lint the binder ; lintBinder LetBind bndr $ \bndr' -> do { lintLetBind NotTopLevel NonRecursive bndr' rhs rhs_ty - ; addAliasUE bndr let_ue (lintLetBody (BodyOfLet bndr') [bndr'] body) } } + ; addAliasUE bndr' let_ue $ + lintLetBody (BodyOfLet bndr') [bndr'] body } } | otherwise = failWithL (mkLetErr bndr rhs) -- Not quite accurate @@ -967,20 +951,24 @@ lintCoreExpr e@(Let (Rec pairs) body) lintCoreExpr e@(App _ _) | Var fun <- fun , fun `hasKey` runRWKey + -- See Note [Linting of runRW#] -- N.B. we may have an over-saturated application of the form: -- runRW (\s -> \x -> ...) y - , ty_arg1 : ty_arg2 : arg3 : rest <- args - = do { fun_pair1 <- lintCoreArg (idType fun, zeroUE) ty_arg1 - ; (fun_ty2, ue2) <- lintCoreArg fun_pair1 ty_arg2 - -- See Note [Linting of runRW#] - ; let lintRunRWCont :: CoreArg -> LintM (LintedType, UsageEnv) - lintRunRWCont expr@(Lam _ _) = - lintJoinLams 1 (Just fun) expr - lintRunRWCont other = markAllJoinsBad $ lintCoreExpr other + , ty_arg1 : ty_arg2 : cont_arg : rest <- args + = do { let lint_rw_cont :: CoreArg -> Mult -> UsageEnv -> LintM (OutType, UsageEnv) + lint_rw_cont expr@(Lam _ _) mult fun_ue + = do { (arg_ty, arg_ue) <- lintJoinLams 1 (Just fun) expr + ; let app_ue = addUE fun_ue (scaleUE mult arg_ue) + ; return (arg_ty, app_ue) } + + lint_rw_cont expr mult ue + = lintValArg expr mult ue -- TODO: Look through ticks? - ; (arg3_ty, ue3) <- lintRunRWCont arg3 - ; app_ty <- lintValApp arg3 fun_ty2 arg3_ty ue2 ue3 - ; lintCoreArgs app_ty rest } + + ; runrw_pr <- lintApp (text "runRW# expression") + lintTyArg lint_rw_cont + (idType fun) [ty_arg1,ty_arg2,cont_arg] zeroUE + ; lintCoreArgs runrw_pr rest } | otherwise = do { fun_pair <- lintCoreFun fun (length args) @@ -1016,24 +1004,23 @@ lintCoreExpr (Lam var expr) lintCoreExpr (Case scrut var alt_ty alts) = lintCaseExpr scrut var alt_ty alts --- This case can't happen; linting types in expressions gets routed through --- lintCoreArgs +-- This case can't happen; linting types in expressions gets routed through lintTyArg lintCoreExpr (Type ty) = failWithL (text "Type found as expression" <+> ppr ty) lintCoreExpr (Coercion co) -- See Note [Coercions in terms] - = do { co' <- addLoc (InCo co) $ - lintCoercion co - ; return (coercionType co', zeroUE) } + = do { addLoc (InCo co) $ lintCoercion co + ; ty <- substTyM (coercionType co) + ; return (ty, zeroUE) } ---------------------- -lintIdOcc :: Var -> Int -- Number of arguments (type or value) being passed - -> LintM (LintedType, UsageEnv) -- returns type of the *variable* -lintIdOcc var nargs - = addLoc (OccOf var) $ - do { checkL (isNonCoVarId var) - (text "Non term variable" <+> ppr var) +lintIdOcc :: InId -> Int -- Number of arguments (type or value) being passed + -> LintM (OutType, UsageEnv) -- returns type of the *variable* +lintIdOcc in_id nargs + = addLoc (OccOf in_id) $ + do { checkL (isNonCoVarId in_id) + (text "Non term variable" <+> ppr in_id) -- See GHC.Core Note [Variable occurrences in Core] -- Check that the type of the occurrence is the same @@ -1047,32 +1034,31 @@ lintIdOcc var nargs -- (Maybe a) from the binding site with bogus (Maybe a1) from -- the occurrence site. Comparing un-substituted types finesses -- this altogether - ; (bndr, linted_bndr_ty) <- lookupIdInScope var - ; let occ_ty = idType var - bndr_ty = idType bndr - ; ensureEqTys occ_ty bndr_ty $ - mkBndrOccTypeMismatchMsg bndr var bndr_ty occ_ty + ; out_ty <- lintVarOcc in_id -- Check for a nested occurrence of the StaticPtr constructor. -- See Note [Checking StaticPtrs]. ; lf <- getLintFlags ; when (nargs /= 0 && lf_check_static_ptrs lf /= AllowAnywhere) $ - checkL (idName var /= makeStaticName) $ + checkL (idName in_id /= makeStaticName) $ text "Found makeStatic nested in an expression" - ; checkDeadIdOcc var - ; checkJoinOcc var nargs - ; case isDataConId_maybe var of + ; checkDeadIdOcc in_id + + ; case isDataConId_maybe in_id of Nothing -> return () Just dc -> checkTypeDataConOcc "expression" dc - ; usage <- varCallSiteUsage var + ; checkJoinOcc in_id nargs + ; usage <- varCallSiteUsage in_id + + ; return (out_ty, usage) } + - ; return (linted_bndr_ty, usage) } lintCoreFun :: CoreExpr -> Int -- Number of arguments (type or val) being passed - -> LintM (LintedType, UsageEnv) -- Returns type of the *function* + -> LintM (OutType, UsageEnv) -- Returns type of the *function* lintCoreFun (Var var) nargs = lintIdOcc var nargs @@ -1107,8 +1093,8 @@ checkDeadIdOcc id = return () ------------------ -lintJoinBndrType :: LintedType -- Type of the body - -> LintedId -- Possibly a join Id +lintJoinBndrType :: OutType -- Type of the body + -> OutId -- Possibly a join Id -> LintM () -- Checks that the return type of a join Id matches the body -- E.g. join j x = rhs in body @@ -1195,7 +1181,7 @@ checkDataToTagPrimOpTyCon _ _ = pure () -- See Note [Linting representation-polymorphic builtins]. checkRepPolyBuiltin :: CoreExpr -- ^ the function (head of the application) we are checking -> [CoreArg] -- ^ the arguments to the application - -> LintedType -- ^ the instantiated type of the overall application + -> OutType -- ^ the instantiated type of the overall application -> LintM () checkRepPolyBuiltin (Var fun_id) args app_ty = do { do_rep_poly_checks <- lf_check_fixed_rep <$> getLintFlags @@ -1214,7 +1200,7 @@ checkRepPolyBuiltin (Var fun_id) args app_ty } checkRepPolyBuiltin _ _ _ = return () -checkRepPolyNewtypeApp :: DataCon -> [CoreArg] -> LintedType -> LintM () +checkRepPolyNewtypeApp :: DataCon -> [CoreArg] -> OutType -> LintM () checkRepPolyNewtypeApp nt args app_ty -- If the newtype is saturated, we're OK. | any isValArg args @@ -1333,13 +1319,14 @@ concreteTyVarPositions fun_id conc_tvs -- Check that the usage of var is consistent with var itself, and pop the var -- from the usage environment (this is important because of shadowing). -checkLinearity :: UsageEnv -> Var -> LintM UsageEnv +checkLinearity :: UsageEnv -> OutVar -> LintM UsageEnv checkLinearity body_ue lam_var = case varMultMaybe lam_var of Just mult -> do let (lhs, body_ue') = popUE body_ue lam_var - err_msg = text "Linearity failure in lambda:" <+> ppr lam_var - $$ ppr lhs <+> text "⊈" <+> ppr mult + err_msg = vcat [ text "Linearity failure in lambda:" <+> ppr lam_var + , ppr lhs <+> text "⊈" <+> ppr mult + , ppr body_ue ] ensureSubUsage lhs mult err_msg return body_ue' Nothing -> return body_ue -- A type variable @@ -1461,33 +1448,28 @@ subtype of the required type, as one would expect. -- Takes the functions type and arguments as argument. -- Returns the *result* of applying the function to arguments. -- e.g. f :: Int -> Bool -> Int would return `Int` as result type. -lintCoreArgs :: (LintedType, UsageEnv) -> [CoreArg] -> LintM (LintedType, UsageEnv) -lintCoreArgs (fun_ty, fun_ue) args = foldM lintCoreArg (fun_ty, fun_ue) args +lintCoreArgs :: (OutType, UsageEnv) -> [InExpr] -> LintM (OutType, UsageEnv) +lintCoreArgs (fun_ty, fun_ue) args + = lintApp (text "expression") + lintTyArg lintValArg fun_ty args fun_ue -lintCoreArg :: (LintedType, UsageEnv) -> CoreArg -> LintM (LintedType, UsageEnv) +lintTyArg :: InExpr -> LintM OutType -- Type argument -lintCoreArg (fun_ty, ue) (Type arg_ty) +lintTyArg (Type arg_ty) = do { checkL (not (isCoercionTy arg_ty)) (text "Unnecessary coercion-to-type injection:" <+> ppr arg_ty) - ; arg_ty' <- lintType arg_ty - ; res <- lintTyApp fun_ty arg_ty' - ; return (res, ue) } - --- Coercion argument -lintCoreArg (fun_ty, ue) (Coercion co) - = do { co' <- addLoc (InCo co) $ - lintCoercion co - ; res <- lintCoApp fun_ty co' - ; return (res, ue) } - --- Other value argument -lintCoreArg (fun_ty, fun_ue) arg + ; lintTypeAndSubst arg_ty } +lintTyArg arg + = failWithL (hang (text "Expected type argument but found") 2 (ppr arg)) + +lintValArg :: InExpr -> Mult -> UsageEnv -> LintM (OutType, UsageEnv) +lintValArg arg mult fun_ue = do { (arg_ty, arg_ue) <- markAllJoinsBad $ lintCoreExpr arg -- See Note [Representation polymorphism invariants] in GHC.Core - ; flags <- getLintFlags + ; flags <- getLintFlags ; when (lf_check_fixed_rep flags) $ -- Only check that 'arg_ty' has a fixed RuntimeRep -- if 'lf_check_fixed_rep' is on. @@ -1496,13 +1478,14 @@ lintCoreArg (fun_ty, fun_ue) arg <+> ppr arg <+> dcolon <+> parens (ppr arg_ty <+> dcolon <+> ppr (typeKind arg_ty))) } - ; lintValApp arg fun_ty arg_ty fun_ue arg_ue } + ; let app_ue = addUE fun_ue (scaleUE mult arg_ue) + ; return (arg_ty, app_ue) } ----------------- lintAltBinders :: UsageEnv -> Var -- Case binder - -> LintedType -- Scrutinee type - -> LintedType -- Constructor type + -> OutType -- Scrutinee type + -> OutType -- Constructor type -> [(Mult, OutVar)] -- Binders -> LintM UsageEnv -- If you edit this function, you may need to update the GHC formalism @@ -1545,7 +1528,7 @@ checkCaseLinearity ue case_bndr var_w bndr = do ----------------- -lintTyApp :: LintedType -> LintedType -> LintM LintedType +lintTyApp :: OutType -> OutType -> LintM OutType lintTyApp fun_ty arg_ty | Just (tv,body_ty) <- splitForAllTyVar_maybe fun_ty = do { lintTyKind tv arg_ty @@ -1558,35 +1541,13 @@ lintTyApp fun_ty arg_ty | otherwise = failWithL (mkTyAppMsg fun_ty arg_ty) ------------------ -lintCoApp :: LintedType -> LintedCoercion -> LintM LintedType -lintCoApp fun_ty co - | Just (cv,body_ty) <- splitForAllCoVar_maybe fun_ty - , let co_ty = coercionType co - cv_ty = idType cv - , cv_ty `eqType` co_ty - = do { in_scope <- getInScope - ; let init_subst = mkEmptySubst in_scope - subst = extendCvSubst init_subst cv co - ; return (substTy subst body_ty) } - - | Just (_, _, arg_ty', res_ty') <- splitFunTy_maybe fun_ty - , co_ty `eqType` arg_ty' - = return (res_ty') - - | otherwise - = failWithL (mkCoAppMsg fun_ty co) - - where - co_ty = coercionType co - ----------------- -- | @lintValApp arg fun_ty arg_ty@ lints an application of @fun arg@ -- where @fun :: fun_ty@ and @arg :: arg_ty@, returning the type of the -- application. -lintValApp :: CoreExpr -> LintedType -> LintedType -> UsageEnv -> UsageEnv - -> LintM (LintedType, UsageEnv) +lintValApp :: CoreExpr -> OutType -> OutType -> UsageEnv -> UsageEnv + -> LintM (OutType, UsageEnv) lintValApp arg fun_ty arg_ty fun_ue arg_ue | Just (_, w, arg_ty', res_ty') <- splitFunTy_maybe fun_ty = do { ensureEqTys arg_ty' arg_ty (mkAppMsg arg_ty' arg_ty arg) @@ -1597,7 +1558,7 @@ lintValApp arg fun_ty arg_ty fun_ue arg_ue where err2 = mkNonFunAppMsg fun_ty arg_ty arg -lintTyKind :: OutTyVar -> LintedType -> LintM () +lintTyKind :: OutTyVar -> OutType -> LintM () -- Both args have had substitution applied -- If you edit this function, you may need to update the GHC formalism @@ -1607,7 +1568,7 @@ lintTyKind tyvar arg_ty addErrL (mkKindErrMsg tyvar arg_ty $$ (text "Linted Arg kind:" <+> ppr arg_kind)) where tyvar_kind = tyVarKind tyvar - arg_kind = typeKind arg_ty + arg_kind = typeKind arg_ty {- ************************************************************************ @@ -1617,86 +1578,92 @@ lintTyKind tyvar arg_ty ************************************************************************ -} -lintCaseExpr :: CoreExpr -> Id -> Type -> [CoreAlt] -> LintM (LintedType, UsageEnv) -lintCaseExpr scrut var alt_ty alts = - do { let e = Case scrut var alt_ty alts -- Just for error messages - - -- Check the scrutinee - ; (scrut_ty, scrut_ue) <- markAllJoinsBad $ lintCoreExpr scrut - -- See Note [Join points are less general than the paper] - -- in GHC.Core - ; let scrut_mult = idMult var - - ; alt_ty <- addLoc (CaseTy scrut) $ - lintValueType alt_ty - ; var_ty <- addLoc (IdTy var) $ - lintValueType (idType var) - - -- We used to try to check whether a case expression with no - -- alternatives was legitimate, but this didn't work. - -- See Note [No alternatives lint check] for details. - - -- Check that the scrutinee is not a floating-point type - -- if there are any literal alternatives - -- See GHC.Core Note [Case expression invariants] item (5) - -- See Note [Rules for floating-point comparisons] in GHC.Core.Opt.ConstantFold - ; let isLitPat (Alt (LitAlt _) _ _) = True - isLitPat _ = False - ; checkL (not $ isFloatingPrimTy scrut_ty && any isLitPat alts) - (text "Lint warning: Scrutinising floating-point expression with literal pattern in case analysis (see #9238)." - $$ text "scrut" <+> ppr scrut) - - ; case tyConAppTyCon_maybe (idType var) of - Just tycon - | debugIsOn - , isAlgTyCon tycon - , not (isAbstractTyCon tycon) - , null (tyConDataCons tycon) - , not (exprIsDeadEnd scrut) - -> pprTrace "Lint warning: case binder's type has no constructors" (ppr var <+> ppr (idType var)) - -- This can legitimately happen for type families - $ return () - _otherwise -> return () - - -- Don't use lintIdBndr on var, because unboxed tuple is legitimate - - ; subst <- getSubst - ; ensureEqTys var_ty scrut_ty (mkScrutMsg var var_ty scrut_ty subst) - -- See GHC.Core Note [Case expression invariants] item (7) - - ; lintBinder CaseBind var $ \_ -> - do { -- Check the alternatives - ; alt_ues <- mapM (lintCoreAlt var scrut_ty scrut_mult alt_ty) alts - ; let case_ue = (scaleUE scrut_mult scrut_ue) `addUE` supUEs alt_ues - ; checkCaseAlts e scrut_ty alts - ; return (alt_ty, case_ue) } } - -checkCaseAlts :: CoreExpr -> LintedType -> [CoreAlt] -> LintM () +lintCaseExpr :: CoreExpr -> InId -> InType -> [CoreAlt] -> LintM (OutType, UsageEnv) +lintCaseExpr scrut case_bndr alt_ty alts + = do { let e = Case scrut case_bndr alt_ty alts -- Just for error messages + + -- Check the scrutinee + ; (scrut_ty', scrut_ue) <- markAllJoinsBad $ lintCoreExpr scrut + -- See Note [Join points are less general than the paper] + -- in GHC.Core + + ; alt_ty' <- addLoc (CaseTy scrut) $ lintValueType alt_ty + + ; checkCaseAlts e scrut scrut_ty' alts + + -- Lint the case-binder. Must do this after linting the scrutinee + -- because the case-binder isn't in scope in the scrutineex + ; lintBinder CaseBind case_bndr $ \case_bndr' -> + -- Don't use lintIdBndr on case_bndr, because unboxed tuple is legitimate + + do { let case_bndr_ty' = idType case_bndr' + scrut_mult = idMult case_bndr' + + ; ensureEqTys case_bndr_ty' scrut_ty' (mkScrutMsg case_bndr case_bndr_ty' scrut_ty') + -- See GHC.Core Note [Case expression invariants] item (7) + + ; -- Check the alternatives + ; alt_ues <- mapM (lintCoreAlt case_bndr' scrut_ty' scrut_mult alt_ty') alts + ; let case_ue = (scaleUE scrut_mult scrut_ue) `addUE` supUEs alt_ues + ; return (alt_ty', case_ue) } } + +checkCaseAlts :: InExpr -> InExpr -> OutType -> [CoreAlt] -> LintM () -- a) Check that the alts are non-empty -- b1) Check that the DEFAULT comes first, if it exists -- b2) Check that the others are in increasing order -- c) Check that there's a default for infinite types +-- d) Check that the scrutinee is not a floating-point type +-- if there are any literal alternatives +-- e) Check if the scrutinee type has no constructors +-- +-- We used to try to check whether a case expression with no +-- alternatives was legitimate, but this didn't work. +-- See Note [No alternatives lint check] for details. +-- -- NB: Algebraic cases are not necessarily exhaustive, because -- the simplifier correctly eliminates case that can't -- possibly match. - -checkCaseAlts e ty alts = - do { checkL (all non_deflt con_alts) (mkNonDefltMsg e) - -- See GHC.Core Note [Case expression invariants] item (2) - - ; checkL (increasing_tag con_alts) (mkNonIncreasingAltsMsg e) - -- See GHC.Core Note [Case expression invariants] item (3) - - -- For types Int#, Word# with an infinite (well, large!) number of - -- possible values, there should usually be a DEFAULT case - -- But (see Note [Empty case alternatives] in GHC.Core) it's ok to - -- have *no* case alternatives. - -- In effect, this is a kind of partial test. I suppose it's possible - -- that we might *know* that 'x' was 1 or 2, in which case - -- case x of { 1 -> e1; 2 -> e2 } - -- would be fine. - ; checkL (isJust maybe_deflt || not is_infinite_ty || null alts) - (nonExhaustiveAltsMsg e) } +checkCaseAlts e scrut scrut_ty alts + = do { checkL (all non_deflt con_alts) (mkNonDefltMsg e) + -- See GHC.Core Note [Case expression invariants] item (2) + + ; checkL (increasing_tag con_alts) (mkNonIncreasingAltsMsg e) + -- See GHC.Core Note [Case expression invariants] item (3) + + -- For types Int#, Word# with an infinite (well, large!) number of + -- possible values, there should usually be a DEFAULT case + -- But (see Note [Empty case alternatives] in GHC.Core) it's ok to + -- have *no* case alternatives. + -- In effect, this is a kind of partial test. I suppose it's possible + -- that we might *know* that 'x' was 1 or 2, in which case + -- case x of { 1 -> e1; 2 -> e2 } + -- would be fine. + ; checkL (isJust maybe_deflt || not is_infinite_ty || null alts) + (nonExhaustiveAltsMsg e) + + -- Check that the scrutinee is not a floating-point type + -- if there are any literal alternatives + -- See GHC.Core Note [Case expression invariants] item (5) + -- See Note [Rules for floating-point comparisons] in GHC.Core.Opt.ConstantFold + ; checkL (not $ isFloatingPrimTy scrut_ty && any is_lit_alt alts) + (text "Lint warning: Scrutinising floating-point expression with literal pattern in case analysis (see #9238)." + $$ text "scrut" <+> ppr scrut) + + -- Check if scrutinee type has no constructors + -- Just a trace message for now + ; case tyConAppTyCon_maybe scrut_ty of + Just tycon + | debugIsOn + , isAlgTyCon tycon + , not (isAbstractTyCon tycon) + , null (tyConDataCons tycon) + , not (exprIsDeadEnd scrut) + -> pprTrace "Lint warning: case scrutinee type has no constructors" + (ppr scrut_ty) + -- This can legitimately happen for type families + $ return () + _otherwise -> return () + } where (con_alts, maybe_deflt) = findDefault alts @@ -1707,21 +1674,24 @@ checkCaseAlts e ty alts = non_deflt (Alt DEFAULT _ _) = False non_deflt _ = True - is_infinite_ty = case tyConAppTyCon_maybe ty of + is_lit_alt (Alt (LitAlt _) _ _) = True + is_lit_alt _ = False + + is_infinite_ty = case tyConAppTyCon_maybe scrut_ty of Nothing -> False Just tycon -> isPrimTyCon tycon -lintAltExpr :: CoreExpr -> LintedType -> LintM UsageEnv +lintAltExpr :: CoreExpr -> OutType -> LintM UsageEnv lintAltExpr expr ann_ty = do { (actual_ty, ue) <- lintCoreExpr expr ; ensureEqTys actual_ty ann_ty (mkCaseAltMsg expr actual_ty ann_ty) ; return ue } -- See GHC.Core Note [Case expression invariants] item (6) -lintCoreAlt :: Var -- Case binder - -> LintedType -- Type of scrutinee - -> Mult -- Multiplicity of scrutinee - -> LintedType -- Type of the alternative +lintCoreAlt :: OutId -- Case binder + -> OutType -- Type of scrutinee + -> Mult -- Multiplicity of scrutinee + -> OutType -- Type of the alternative -> CoreAlt -> LintM UsageEnv -- If you edit this function, you may need to update the GHC formalism @@ -1730,8 +1700,8 @@ lintCoreAlt case_bndr _ scrut_mult alt_ty (Alt DEFAULT args rhs) = do { lintL (null args) (mkDefaultArgsMsg args) ; rhs_ue <- lintAltExpr rhs alt_ty ; let (case_bndr_usage, rhs_ue') = popUE rhs_ue case_bndr - err_msg = text "Linearity failure in the DEFAULT clause:" <+> ppr case_bndr - $$ ppr case_bndr_usage <+> text "⊈" <+> ppr scrut_mult + err_msg = vcat [ text "Linearity failure in the DEFAULT clause:" <+> ppr case_bndr + , ppr case_bndr_usage <+> text "⊈" <+> ppr scrut_mult ] ; ensureSubUsage case_bndr_usage scrut_mult err_msg ; return rhs_ue' } @@ -1765,9 +1735,10 @@ lintCoreAlt case_bndr scrut_ty _scrut_mult alt_ty alt@(Alt (DataAlt con) args rh -- And now bring the new binders into scope ; lintBinders CasePatBind args $ \ args' -> do - { - rhs_ue <- lintAltExpr rhs alt_ty - ; rhs_ue' <- addLoc (CasePat alt) (lintAltBinders rhs_ue case_bndr scrut_ty con_payload_ty (zipEqual "lintCoreAlt" multiplicities args')) + { rhs_ue <- lintAltExpr rhs alt_ty + ; rhs_ue' <- addLoc (CasePat alt) $ + lintAltBinders rhs_ue case_bndr scrut_ty con_payload_ty + (zipEqual "lintCoreAlt" multiplicities args') ; return $ deleteUE rhs_ue' case_bndr } } @@ -1812,7 +1783,7 @@ lintLinearBinder doc actual_usage described_usage -- 1. Lint var types or kinds (possibly substituting) -- 2. Add the binder to the in scope set, and if its a coercion var, -- we may extend the substitution to reflect its (possibly) new kind -lintBinders :: BindingSite -> [Var] -> ([Var] -> LintM a) -> LintM a +lintBinders :: HasDebugCallStack => BindingSite -> [InVar] -> ([OutVar] -> LintM a) -> LintM a lintBinders _ [] linterF = linterF [] lintBinders site (var:vars) linterF = lintBinder site var $ \var' -> lintBinders site vars $ \ vars' -> @@ -1820,36 +1791,30 @@ lintBinders site (var:vars) linterF = lintBinder site var $ \var' -> -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] -lintBinder :: BindingSite -> Var -> (Var -> LintM a) -> LintM a +lintBinder :: HasDebugCallStack => BindingSite -> InVar -> (OutVar -> LintM a) -> LintM a lintBinder site var linterF | isTyCoVar var = lintTyCoBndr var linterF | otherwise = lintIdBndr NotTopLevel site var linterF -lintTyBndr :: TyVar -> (LintedTyCoVar -> LintM a) -> LintM a -lintTyBndr = lintTyCoBndr -- We could specialise it, I guess - -lintTyCoBndr :: TyCoVar -> (LintedTyCoVar -> LintM a) -> LintM a +lintTyCoBndr :: HasDebugCallStack => TyCoVar -> (OutTyCoVar -> LintM a) -> LintM a lintTyCoBndr tcv thing_inside - = do { subst <- getSubst - ; tcv_type' <- lintType (varType tcv) - ; let tcv' = uniqAway (getSubstInScope subst) $ - setVarType tcv tcv_type' - subst' = extendTCvSubstWithClone subst tcv tcv' + = do { tcv_type' <- lintTypeAndSubst (varType tcv) + ; let tcv_kind' = typeKind tcv_type' - -- See (FORALL1) and (FORALL2) in GHC.Core.Type + -- See (FORALL1) and (FORALL2) in GHC.Core.Type ; if (isTyVar tcv) then -- Check that in (forall (a:ki). blah) we have ki:Type - lintL (isLiftedTypeKind (typeKind tcv_type')) $ + lintL (isLiftedTypeKind tcv_kind') $ hang (text "TyVar whose kind does not have kind Type:") - 2 (ppr tcv' <+> dcolon <+> ppr tcv_type' <+> dcolon <+> ppr (typeKind tcv_type')) + 2 (ppr tcv <+> dcolon <+> ppr tcv_type' <+> dcolon <+> ppr tcv_kind') else -- Check that in (forall (cv::ty). blah), -- then ty looks like (t1 ~# t2) lintL (isCoVarType tcv_type') $ text "CoVar with non-coercion type:" <+> pprTyVar tcv - ; updateSubst subst' (thing_inside tcv') } + ; addInScopeTyCoVar tcv tcv_type' thing_inside } -lintIdBndrs :: forall a. TopLevelFlag -> [Id] -> ([LintedId] -> LintM a) -> LintM a +lintIdBndrs :: forall a. TopLevelFlag -> [InId] -> ([OutId] -> LintM a) -> LintM a lintIdBndrs top_lvl ids thing_inside = go ids thing_inside where @@ -1900,10 +1865,9 @@ lintIdBndr top_lvl bind_site id thing_inside ; lintL (not (bind_site == LambdaBind && isEvaldUnfolding (idUnfolding id))) (text "Lambda binder with value or OtherCon unfolding.") - ; linted_ty <- addLoc (IdTy id) (lintValueType id_ty) + ; out_ty <- addLoc (IdTy id) (lintValueType id_ty) - ; addInScopeId id linted_ty $ - thing_inside (setIdType id linted_ty) } + ; addInScopeId id out_ty thing_inside } where id_ty = idType id @@ -1920,13 +1884,13 @@ lintIdBndr top_lvl bind_site id thing_inside %************************************************************************ -} -lintValueType :: Type -> LintM LintedType +lintValueType :: Type -> LintM OutType -- Types only, not kinds -- Check the type, and apply the substitution to it -- See Note [Linting type lets] lintValueType ty = addLoc (InType ty) $ - do { ty' <- lintType ty + do { ty' <- lintTypeAndSubst ty ; let sk = typeKind ty' ; lintL (isTYPEorCONSTRAINT sk) $ hang (text "Ill-kinded type:" <+> ppr ty) @@ -1938,14 +1902,18 @@ checkTyCon tc = checkL (not (isTcTyCon tc)) (text "Found TcTyCon:" <+> ppr tc) ------------------- -checkTyCoVarInScope :: Subst -> TyCoVar -> LintM () -checkTyCoVarInScope subst tcv - = checkL (tcv `isInScope` subst) $ - hang (text "The type or coercion variable" <+> pprBndr LetBind tcv) - 2 (text "is out of scope") +lintTypeAndSubst :: InType -> LintM OutType +lintTypeAndSubst ty = do { lintType ty; substTyM ty } + -- In GHCi we may lint an expression with a free + -- type variable. Then it won't be in the + -- substitution, but it should be in scope -------------------- -lintType :: Type -> LintM LintedType +lintType :: InType -> LintM () +-- I experimented with returning the kind along with the type, +-- to avoid a number of calls to typeKind, which might in principle be quadratic +-- (as we recurse over the type). But in fact returning both seems to slow +-- down Lint -- it certainly allocates a lot more. And the code is simpler +-- this way too. -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] @@ -1954,25 +1922,20 @@ lintType (TyVarTy tv) = failWithL (mkBadTyVarMsg tv) | otherwise - = do { subst <- getSubst - ; case lookupTyVar subst tv of - Just linted_ty -> return linted_ty - - -- In GHCi we may lint an expression with a free - -- type variable. Then it won't be in the - -- substitution, but it should be in scope - Nothing -> do { checkTyCoVarInScope subst tv - ; return (TyVarTy tv) } - } + = do { _ <- lintVarOcc tv + ; return () } lintType ty@(AppTy t1 t2) | TyConApp {} <- t1 = failWithL $ text "TyConApp to the left of AppTy:" <+> ppr ty | otherwise - = do { t1' <- lintType t1 - ; t2' <- lintType t2 - ; lint_ty_app ty (typeKind t1') [t2'] - ; return (AppTy t1' t2') } + = do { let (fun_ty, arg_tys) = collect t1 [t2] + ; lintType fun_ty + ; fun_kind <- substTyM (typeKind fun_ty) + ; lint_ty_app ty fun_kind arg_tys } + where + collect (AppTy f a) as = collect f (a:as) + collect fun as = (fun, as) lintType ty@(TyConApp tc tys) | isTypeSynonymTyCon tc || isTypeFamilyTyCon tc @@ -1987,78 +1950,68 @@ lintType ty@(TyConApp tc tys) | otherwise -- Data types, data families, primitive types = do { checkTyCon tc - ; tys' <- mapM lintType tys - ; lint_ty_app ty (tyConKind tc) tys' - ; return (TyConApp tc tys') } + ; lint_ty_app ty (tyConKind tc) tys } -- arrows can related *unlifted* kinds, so this has to be separate from -- a dependent forall. lintType ty@(FunTy af tw t1 t2) - = do { t1' <- lintType t1 - ; t2' <- lintType t2 - ; tw' <- lintType tw - ; lintArrow (text "type or kind" <+> quotes (ppr ty)) t1' t2' tw' - ; let real_af = chooseFunTyFlag t1 t2 - ; unless (real_af == af) $ addErrL $ - hang (text "Bad FunTyFlag in FunTy") - 2 (vcat [ ppr ty - , text "FunTyFlag =" <+> ppr af - , text "Computed FunTyFlag =" <+> ppr real_af ]) - ; return (FunTy af tw' t1' t2') } - -lintType ty@(ForAllTy (Bndr tcv vis) body_ty) - | not (isTyCoVar tcv) - = failWithL (text "Non-Tyvar or Non-Covar bound in type:" <+> ppr ty) - | otherwise - = lintTyCoBndr tcv $ \tcv' -> - do { body_ty' <- lintType body_ty - ; lintForAllBody tcv' body_ty' + = do { lintType t1 + ; lintType t2 + ; lintType tw + ; lintArrow (text "type or kind" <+> quotes (ppr ty)) af t1 t2 tw } + +lintType ty@(ForAllTy {}) + = go [] ty + where + go :: [OutTyCoVar] -> InType -> LintM () + -- Loop, collecting the forall-binders + go tcvs ty@(ForAllTy (Bndr tcv _) body_ty) + | not (isTyCoVar tcv) + = failWithL (text "Non-TyVar or Non-CoVar bound in type:" <+> ppr ty) - ; when (isCoVar tcv) $ - lintL (tcv `elemVarSet` tyCoVarsOfType body_ty) $ - text "Covar does not occur in the body:" <+> (ppr tcv $$ ppr body_ty) - -- See GHC.Core.TyCo.Rep Note [Unused coercion variable in ForAllTy] + | otherwise + = lintTyCoBndr tcv $ \tcv' -> + do { -- See GHC.Core.TyCo.Rep Note [Unused coercion variable in ForAllTy] + -- Suspicious because it works on InTyCoVar; c.f. ForAllCo + when (isCoVar tcv) $ + lintL (anyFreeVarsOfType (== tcv) body_ty) $ + text "Covar does not occur in the body:" <+> (ppr tcv $$ ppr body_ty) - ; return (ForAllTy (Bndr tcv' vis) body_ty') } + ; go (tcv' : tcvs) body_ty } -lintType ty@(LitTy l) - = do { lintTyLit l; return ty } + go tcvs body_ty + = do { lintType body_ty + ; lintForAllBody tcvs body_ty } lintType (CastTy ty co) - = do { ty' <- lintType ty - ; co' <- lintStarCoercion co - ; let tyk = typeKind ty' - cok = coercionLKind co' - ; ensureEqTys tyk cok (mkCastTyErr ty co tyk cok) - ; return (CastTy ty' co') } + = do { lintType ty + ; ty_kind <- substTyM (typeKind ty) + ; co_lk <- lintStarCoercion co + ; ensureEqTys ty_kind co_lk (mkCastTyErr ty co ty_kind co_lk) } -lintType (CoercionTy co) - = do { co' <- lintCoercion co - ; return (CoercionTy co') } +lintType (LitTy l) = lintTyLit l +lintType (CoercionTy co) = lintCoercion co ----------------- -lintForAllBody :: LintedTyCoVar -> LintedType -> LintM () +lintForAllBody :: [OutTyCoVar] -> InType -> LintM () -- Do the checks for the body of a forall-type -lintForAllBody tcv body_ty - = do { checkValueType body_ty (text "the body of forall:" <+> ppr body_ty) - - -- For type variables, check for skolem escape +lintForAllBody tcvs body_ty + = do { -- For type variables, check for skolem escape -- See Note [Phantom type variables in kinds] in GHC.Core.Type -- The kind of (forall cv. th) is liftedTypeKind, so no -- need to check for skolem-escape in the CoVar case - ; let body_kind = typeKind body_ty - ; when (isTyVar tcv) $ - case occCheckExpand [tcv] body_kind of + body_kind <- substTyM (typeKind body_ty) + ; case occCheckExpand tcvs body_kind of Just {} -> return () Nothing -> failWithL $ hang (text "Variable escape in forall:") - 2 (vcat [ text "tyvar:" <+> ppr tcv + 2 (vcat [ text "tycovars (reversed):" <+> ppr tcvs , text "type:" <+> ppr body_ty , text "kind:" <+> ppr body_kind ]) - } + ; checkValueType body_kind (text "the body of forall:" <+> ppr body_ty) } ----------------- -lintTySynFamApp :: Bool -> InType -> TyCon -> [InType] -> LintM LintedType +lintTySynFamApp :: Bool -> InType -> TyCon -> [InType] -> LintM () -- The TyCon is a type synonym or a type family (not a data family) -- See Note [Linting type synonym applications] -- c.f. GHC.Tc.Validity.check_syn_tc_app @@ -2070,63 +2023,51 @@ lintTySynFamApp report_unsat ty tc tys -- Deal with type synonyms | ExpandsSyn tenv rhs tys' <- expandSynTyCon_maybe tc tys , let expanded_ty = mkAppTys (substTy (mkTvSubstPrs tenv) rhs) tys' - = do { -- Kind-check the argument types, but without reporting - -- un-saturated type families/synonyms - tys' <- setReportUnsat False (mapM lintType tys) + = do { when report_unsat $ do { _ <- lintType expanded_ty + ; return () } - ; when report_unsat $ - do { _ <- lintType expanded_ty - ; return () } - - ; lint_ty_app ty (tyConKind tc) tys' - ; return (TyConApp tc tys') } + ; -- Kind-check the argument types, but without reporting + -- un-saturated type families/synonyms + ; setReportUnsat False $ + lint_ty_app ty (tyConKind tc) tys } -- Otherwise this must be a type family | otherwise - = do { tys' <- mapM lintType tys - ; lint_ty_app ty (tyConKind tc) tys' - ; return (TyConApp tc tys') } + = lint_ty_app ty (tyConKind tc) tys ----------------- --- Confirms that a type is really TYPE r or Constraint -checkValueType :: LintedType -> SDoc -> LintM () -checkValueType ty doc +-- Confirms that a kind is really TYPE r or Constraint +checkValueType :: OutKind -> SDoc -> LintM () +checkValueType kind doc = lintL (isTYPEorCONSTRAINT kind) (text "Non-Type-like kind when Type-like expected:" <+> ppr kind $$ text "when checking" <+> doc) - where - kind = typeKind ty ----------------- -lintArrow :: SDoc -> LintedType -> LintedType -> LintedType -> LintM () +lintArrow :: SDoc -> FunTyFlag -> InType -> InType -> InType -> LintM () -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] -lintArrow what t1 t2 tw -- Eg lintArrow "type or kind `blah'" k1 k2 kw - -- or lintArrow "coercion `blah'" k1 k2 kw - = do { unless (isTYPEorCONSTRAINT k1) (report (text "argument") k1) - ; unless (isTYPEorCONSTRAINT k2) (report (text "result") k2) - ; unless (isMultiplicityTy kw) (report (text "multiplicity") kw) } +lintArrow what af t1 t2 tw -- Eg lintArrow "type or kind `blah'" k1 k2 kw + -- or lintArrow "coercion `blah'" k1 k2 kw + = do { k1 <- substTyM (typeKind t1) + ; k2 <- substTyM (typeKind t2) + ; kw <- substTyM (typeKind tw) + ; unless (isTYPEorCONSTRAINT k1) (report (text "argument") t1 k1) + ; unless (isTYPEorCONSTRAINT k2) (report (text "result") t2 k2) + ; unless (isMultiplicityTy kw) (report (text "multiplicity") tw kw) + + ; let real_af = chooseFunTyFlag t1 t2 + ; unless (real_af == af) $ addErrL $ + hang (text "Bad FunTyFlag") + 2 (vcat [ text "FunTyFlag =" <+> ppr af + , text "Computed FunTyFlag =" <+> ppr real_af + , text "in" <+> what ]) } where - k1 = typeKind t1 - k2 = typeKind t2 - kw = typeKind tw - report ar k = addErrL (vcat [ hang (text "Ill-kinded" <+> ar) - 2 (text "in" <+> what) - , what <+> text "kind:" <+> ppr k ]) + report ar t k = addErrL (hang (text "Ill-kinded" <+> ar) + 2 (vcat [ ppr t <+> dcolon <+> ppr k + , text "in" <+> what ])) ----------------- -lint_ty_app :: Type -> LintedKind -> [LintedType] -> LintM () -lint_ty_app msg_ty k tys - -- See Note [Avoiding compiler perf traps when constructing error messages.] - = lint_app (\msg_ty -> text "type" <+> quotes (ppr msg_ty)) msg_ty k tys - ----------------- -lint_co_app :: Coercion -> LintedKind -> [LintedType] -> LintM () -lint_co_app msg_ty k tys - -- See Note [Avoiding compiler perf traps when constructing error messages.] - = lint_app (\msg_ty -> text "coercion" <+> quotes (ppr msg_ty)) msg_ty k tys - ----------------- lintTyLit :: TyLit -> LintM () lintTyLit (NumTyLit n) | n >= 0 = return () @@ -2135,69 +2076,112 @@ lintTyLit (NumTyLit n) lintTyLit (StrTyLit _) = return () lintTyLit (CharTyLit _) = return () -lint_app :: Outputable msg_thing => (msg_thing -> SDoc) -> msg_thing -> LintedKind -> [LintedType] -> LintM () --- (lint_app d fun_kind arg_tys) --- We have an application (f arg_ty1 .. arg_tyn), --- where f :: fun_kind +----------------- +lint_ty_app :: InType -> OutKind -> [InType] -> LintM () +lint_ty_app ty = lint_tyco_app (text "type" <+> quotes (ppr ty)) --- If you edit this function, you may need to update the GHC formalism --- See Note [GHC Formalism] +lint_co_app :: HasDebugCallStack => Coercion -> OutKind -> [InType] -> LintM () +lint_co_app co = lint_tyco_app (text "coercion" <+> quotes (ppr co)) + +lint_tyco_app :: SDoc -> OutKind -> [InType] -> LintM () +lint_tyco_app msg fun_kind arg_tys + -- See Note [Avoiding compiler perf traps when constructing error messages.] + = do { _ <- lintApp msg (\ty -> do { lintType ty; substTyM ty }) + (\ty _ _ -> do { lintType ty; ki <- substTyM (typeKind ty); return (ki,()) }) + fun_kind arg_tys () + ; return () } + +---------------- +lintApp :: forall in_a acc. Outputable in_a => + SDoc + -> (in_a -> LintM OutType) -- Lint the thing and return its value + -> (in_a -> Mult -> acc -> LintM (OutKind, acc)) -- Lint the thing and return its type + -> OutType + -> [in_a] -- The arguments, always "In" things + -> acc -- Used (only) for UsageEnv in /term/ applications + -> LintM (OutType,acc) +-- lintApp is a performance-critical function, which deals with multiple +-- applications such as (/\a./\b./\c. expr) @ta @tb @tc +-- When returning the type of this expression we want to avoid substituting a:=ta, +-- and /then/ substituting b:=tb, etc. That's quadratic, and can be a huge +-- perf hole. So we gather all the arguments [in_a], and then gather the +-- substitution incrementally in the `go` loop. -- --- Being strict in the kind here avoids quite a few pointless thunks --- reducing allocations by ~5% -lint_app mk_msg msg_type !kfn arg_tys +-- lintApp is used: +-- * for term applications (lintCoreArgs) +-- * for type applications (lint_ty_app) +-- * for coercion application (lint_co_app) +-- To deal with these cases `lintApp` has two higher order arguments; +-- but we specialise it for each call site (by inlining) +{-# INLINE lintApp #-} -- INLINE: very few call sites; + -- not recursive; specialised at its call sites + +lintApp msg lint_forall_arg lint_arrow_arg !orig_fun_ty all_args acc = do { !in_scope <- getInScope -- We need the in_scope set to satisfy the invariant in -- Note [The substitution invariant] in GHC.Core.TyCo.Subst -- Forcing the in scope set eagerly here reduces allocations by up to 4%. - ; go_app in_scope kfn arg_tys - } - where - -- We use explicit recursion instead of a fold here to avoid go_app becoming - -- an allocated function closure. This reduced allocations by up to 7% for some - -- modules. - go_app :: InScopeSet -> LintedKind -> [Type] -> LintM () - go_app !in_scope !kfn ta - | Just kfn' <- coreView kfn - = go_app in_scope kfn' ta - - go_app _in_scope _kind [] = return () - - go_app in_scope fun_kind@(FunTy _ _ kfa kfb) (ta:tas) - = do { let ka = typeKind ta - ; unless (ka `eqType` kfa) $ - addErrL (lint_app_fail_msg kfn arg_tys mk_msg msg_type (text "Fun:" <+> (ppr fun_kind $$ ppr ta <+> dcolon <+> ppr ka))) - ; go_app in_scope kfb tas } - - go_app in_scope (ForAllTy (Bndr kv _vis) kfn) (ta:tas) - = do { let kv_kind = varType kv - ka = typeKind ta - ; unless (ka `eqType` kv_kind) $ - addErrL (lint_app_fail_msg kfn arg_tys mk_msg msg_type (text "Forall:" <+> (ppr kv $$ ppr kv_kind $$ - ppr ta <+> dcolon <+> ppr ka))) - ; let kind' = substTy (extendTCvSubst (mkEmptySubst in_scope) kv ta) kfn - ; go_app in_scope kind' tas } - - go_app _ kfn ta - = failWithL (lint_app_fail_msg kfn arg_tys mk_msg msg_type (text "Not a fun:" <+> (ppr kfn $$ ppr ta))) + ; let init_subst = mkEmptySubst in_scope + + go :: Subst -> OutType -> acc -> [in_a] -> LintM (OutType, acc) + -- The Subst applies (only) to the fun_ty + -- c.f. GHC.Core.Type.piResultTys, which has a similar loop + + go subst fun_ty acc [] + = return (substTy subst fun_ty, acc) + + go subst (ForAllTy (Bndr tv _vis) body_ty) acc (arg:args) + = do { arg' <- lint_forall_arg arg + ; let tv_kind = substTy subst (varType tv) + karg' = typeKind arg' + subst' = extendTCvSubst subst tv arg' + ; ensureEqTys karg' tv_kind $ + lint_app_fail_msg msg orig_fun_ty all_args + (hang (text "Forall:" <+> (ppr tv $$ ppr tv_kind)) + 2 (ppr arg' <+> dcolon <+> ppr karg')) + ; go subst' body_ty acc args } + + go subst fun_ty@(FunTy _ mult exp_arg_ty res_ty) acc (arg:args) + = do { (arg_ty, acc') <- lint_arrow_arg arg (substTy subst mult) acc + ; ensureEqTys (substTy subst exp_arg_ty) arg_ty $ + lint_app_fail_msg msg orig_fun_ty all_args + (hang (text "Fun:" <+> ppr fun_ty) + 2 (vcat [ text "exp_arg_ty:" <+> ppr exp_arg_ty + , text "arg:" <+> ppr arg <+> dcolon <+> ppr arg_ty ])) + ; go subst res_ty acc' args } + + go subst fun_ty acc args + | Just fun_ty' <- coreView fun_ty + = go subst fun_ty' acc args + + | not (isEmptyTCvSubst subst) -- See Note [Care with kind instantiation] + = go init_subst (substTy subst fun_ty) acc args + + | otherwise + = failWithL (lint_app_fail_msg msg orig_fun_ty all_args + (text "Not a fun:" <+> (ppr fun_ty $$ ppr args))) + + ; go init_subst orig_fun_ty acc all_args } -- This is a top level definition to ensure we pass all variables of the error message -- explicitly and don't capture them as free variables. Otherwise this binder might -- become a thunk that get's allocated in the hot code path. -- See Note [Avoiding compiler perf traps when constructing error messages.] -lint_app_fail_msg :: (Outputable a1, Outputable a2) => a1 -> a2 -> (t -> SDoc) -> t -> SDoc -> SDoc -lint_app_fail_msg kfn arg_tys mk_msg msg_type extra = vcat [ hang (text "Kind application error in") 2 (mk_msg msg_type) - , nest 2 (text "Function kind =" <+> ppr kfn) - , nest 2 (text "Arg types =" <+> ppr arg_tys) - , extra ] +lint_app_fail_msg :: (Outputable a2) => SDoc -> OutType -> a2 -> SDoc -> SDoc +lint_app_fail_msg msg kfn arg_tys extra + = vcat [ hang (text "Application error in") 2 msg + , nest 2 (text "Function type =" <+> ppr kfn) + , nest 2 (text "Args =" <+> ppr arg_tys) + , extra ] + {- ********************************************************************* * * Linting rules * * ********************************************************************* -} -lintCoreRule :: OutVar -> LintedType -> CoreRule -> LintM () +lintCoreRule :: OutVar -> OutType -> CoreRule -> LintM () lintCoreRule _ _ (BuiltinRule {}) = return () -- Don't bother @@ -2310,18 +2294,26 @@ which is what used to happen. But that proved tricky and error prone -} --- lints a coercion, confirming that its lh kind and its rh kind are both * --- also ensures that the role is Nominal -lintStarCoercion :: InCoercion -> LintM LintedCoercion +-- lintStarCoercion lints a coercion, confirming that its lh kind and +-- its rh kind are both *; also ensures that the role is Nominal +-- Returns the lh kind +lintStarCoercion :: InCoercion -> LintM OutType lintStarCoercion g - = do { g' <- lintCoercion g - ; let Pair t1 t2 = coercionKind g' - ; checkValueType t1 (text "the kind of the left type in" <+> ppr g) - ; checkValueType t2 (text "the kind of the right type in" <+> ppr g) + = do { lintCoercion g + ; Pair t1 t2 <- substCoKindM g + ; checkValueType (typeKind t1) (text "the kind of the left type in" <+> ppr g) + ; checkValueType (typeKind t2) (text "the kind of the right type in" <+> ppr g) ; lintRole g Nominal (coercionRole g) - ; return g' } + ; return t1 } + +substCoKindM :: InCoercion -> LintM (Pair OutType) +substCoKindM co + = do { let !(Pair lk rk) = coercionKind co + ; lk' <- substTyM lk + ; rk' <- substTyM rk + ; return (Pair lk' rk') } -lintCoercion :: InCoercion -> LintM LintedCoercion +lintCoercion :: HasDebugCallStack => InCoercion -> LintM () -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] @@ -2330,33 +2322,21 @@ lintCoercion (CoVarCo cv) = failWithL (hang (text "Bad CoVarCo:" <+> ppr cv) 2 (text "With offending type:" <+> ppr (varType cv))) - | otherwise - = do { subst <- getSubst - ; case lookupCoVar subst cv of - Just linted_co -> return linted_co ; - Nothing -> do { checkTyCoVarInScope subst cv - ; return (CoVarCo cv) } - } - - -lintCoercion (Refl ty) - = do { ty' <- lintType ty - ; return (Refl ty') } - -lintCoercion (GRefl r ty MRefl) - = do { ty' <- lintType ty - ; return (GRefl r ty' MRefl) } - -lintCoercion (GRefl r ty (MCo co)) - = do { ty' <- lintType ty - ; co' <- lintCoercion co - ; let tk = typeKind ty' - tl = coercionLKind co' + | otherwise -- C.f. lintType (TyVarTy tv), which has better docs + = do { _ <- lintVarOcc cv; return () } + +lintCoercion (Refl ty) = lintType ty +lintCoercion (GRefl _r ty MRefl) = lintType ty + +lintCoercion (GRefl _r ty (MCo co)) + = do { lintType ty + ; lintCoercion co + ; tk <- substTyM (typeKind ty) + ; tl <- substTyM (coercionLKind co) ; ensureEqTys tk tl $ hang (text "GRefl coercion kind mis-match:" <+> ppr co) - 2 (vcat [ppr ty', ppr tk, ppr tl]) - ; lintRole co' Nominal (coercionRole co') - ; return (GRefl r ty' (MCo co')) } + 2 (vcat [ppr ty, ppr tk, ppr tl]) + ; lintRole co Nominal (coercionRole co) } lintCoercion co@(TyConAppCo r tc cos) | Just {} <- tyConAppFunCo_maybe r tc cos @@ -2369,12 +2349,12 @@ lintCoercion co@(TyConAppCo r tc cos) | otherwise = do { checkTyCon tc - ; cos' <- mapM lintCoercion cos - ; let (co_kinds, co_roles) = unzip (map coercionKindRole cos') - ; lint_co_app co (tyConKind tc) (map pFst co_kinds) - ; lint_co_app co (tyConKind tc) (map pSnd co_kinds) - ; zipWithM_ (lintRole co) (tyConRoleListX r tc) co_roles - ; return (TyConAppCo r tc cos') } + ; mapM_ lintCoercion cos + ; let tc_kind = tyConKind tc + ; lint_co_app co tc_kind (map coercionLKind cos) + ; lint_co_app co tc_kind (map coercionRKind cos) + ; zipWithM_ (lintRole co) (tyConRoleListX r tc) (map coercionRole cos) } + lintCoercion co@(AppCo co1 co2) | TyConAppCo {} <- co1 @@ -2382,83 +2362,89 @@ lintCoercion co@(AppCo co1 co2) | Just (TyConApp {}, _) <- isReflCo_maybe co1 = failWithL (text "Refl (TyConApp ...) to the left of AppCo:" <+> ppr co) | otherwise - = do { co1' <- lintCoercion co1 - ; co2' <- lintCoercion co2 - ; let (Pair lk1 rk1, r1) = coercionKindRole co1' - (Pair lk2 rk2, r2) = coercionKindRole co2' - ; lint_co_app co (typeKind lk1) [lk2] - ; lint_co_app co (typeKind rk1) [rk2] - - ; if r1 == Phantom + = do { lintCoercion co1 + ; lintCoercion co2 + ; let !(Pair lt1 rt1) = coercionKind co1 + ; lk1 <- substTyM (typeKind lt1) + ; rk1 <- substTyM (typeKind rt1) + ; lint_co_app co lk1 [coercionLKind co2] + ; lint_co_app co rk1 [coercionRKind co2] + + ; let r2 = coercionRole co2 + ; if coercionRole co1 == Phantom then lintL (r2 == Phantom || r2 == Nominal) (text "Second argument in AppCo cannot be R:" $$ ppr co) - else lintRole co Nominal r2 - - ; return (AppCo co1' co2') } + else lintRole co Nominal r2 } ---------- -lintCoercion co@(ForAllCo { fco_tcv = tcv, fco_visL = visL, fco_visR = visR - , fco_kind = kind_co, fco_body = body_co }) --- See Note [ForAllCo] in GHC.Core.TyCo.Rep, --- including the typing rule for ForAllCo - - | not (isTyCoVar tcv) - = failWithL (text "Non tyco binder in ForAllCo:" <+> ppr co) +lintCoercion co@(ForAllCo {}) +-- See Note [ForAllCo] in GHC.Core.TyCo.Rep for the typing rule for ForAllCo + = do { _ <- go [] co; return () } + where + go :: [OutTyCoVar] -- Binders in reverse order + -> InCoercion -> LintM Role + go tcvs co@(ForAllCo { fco_tcv = tcv, fco_visL = visL, fco_visR = visR + , fco_kind = kind_co, fco_body = body_co }) + | not (isTyCoVar tcv) + = failWithL (text "Non tyco binder in ForAllCo:" <+> ppr co) - | otherwise - = do { kind_co' <- lintStarCoercion kind_co - ; lintTyCoBndr tcv $ \tcv' -> - do { body_co' <- lintCoercion body_co - ; ensureEqTys (varType tcv') (coercionLKind kind_co') $ - text "Kind mis-match in ForallCo" <+> ppr co - - -- Assuming kind_co :: k1 ~ k2 - -- Need to check that - -- (forall (tcv:k1). lty) and - -- (forall (tcv:k2). rty[(tcv:k2) |> sym kind_co/tcv]) - -- are both well formed. Easiest way is to call lintForAllBody - -- for each; there is actually no need to do the funky substitution - ; let (Pair lty rty, body_role) = coercionKindRole body_co' - ; lintForAllBody tcv' lty - ; lintForAllBody tcv' rty - - ; when (isCoVar tcv) $ - do { lintL (visL == coreTyLamForAllTyFlag && visR == coreTyLamForAllTyFlag) $ - text "Invalid visibility flags in CoVar ForAllCo" <+> ppr co - -- See (FC7) in Note [ForAllCo] in GHC.Core.TyCo.Rep - ; lintL (almostDevoidCoVarOfCo tcv body_co) $ - text "Covar can only appear in Refl and GRefl: " <+> ppr co - -- See (FC6) in Note [ForAllCo] in GHC.Core.TyCo.Rep - } - - ; when (body_role == Nominal) $ - lintL (visL `eqForAllVis` visR) $ - text "Nominal ForAllCo has mismatched visibilities: " <+> ppr co - - ; return (co { fco_tcv = tcv', fco_kind = kind_co', fco_body = body_co' }) } } - -lintCoercion co@(FunCo { fco_role = r, fco_afl = afl, fco_afr = afr - , fco_mult = cow, fco_arg = co1, fco_res = co2 }) - = do { co1' <- lintCoercion co1 - ; co2' <- lintCoercion co2 - ; cow' <- lintCoercion cow + | otherwise + = do { lk <- lintStarCoercion kind_co + ; lintTyCoBndr tcv $ \tcv' -> + do { ensureEqTys (varType tcv') lk $ + text "Kind mis-match in ForallCo" <+> ppr co + + -- I'm not very sure about this part, because it traverses body_co + -- but at least it's on a cold path (a ForallCo for a CoVar) + -- Also it works on InTyCoVar and InCoercion, which is suspect + ; when (isCoVar tcv) $ + do { lintL (visL == coreTyLamForAllTyFlag && visR == coreTyLamForAllTyFlag) $ + text "Invalid visibility flags in CoVar ForAllCo" <+> ppr co + -- See (FC7) in Note [ForAllCo] in GHC.Core.TyCo.Rep + ; lintL (almostDevoidCoVarOfCo tcv body_co) $ + text "Covar can only appear in Refl and GRefl: " <+> ppr co } + -- See (FC6) in Note [ForAllCo] in GHC.Core.TyCo.Rep + + ; role <- go (tcv':tcvs) body_co + + ; when (role == Nominal) $ + lintL (visL `eqForAllVis` visR) $ + text "Nominal ForAllCo has mismatched visibilities: " <+> ppr co + + ; return role } } + + go tcvs body_co + = do { lintCoercion body_co + + -- Need to check that + -- (forall (tcv:k1). lty) and + -- (forall (tcv:k2). rty[(tcv:k2) |> sym kind_co/tcv]) + -- are both well formed, including the skolem escape check. + -- Easiest way is to call lintForAllBody for each + ; let Pair lty rty = coercionKind body_co + ; lintForAllBody tcvs lty + ; lintForAllBody tcvs rty + + ; return (coercionRole body_co) } + + +lintCoercion (FunCo { fco_role = r, fco_afl = afl, fco_afr = afr + , fco_mult = cow, fco_arg = co1, fco_res = co2 }) + = do { lintCoercion co1 + ; lintCoercion co2 + ; lintCoercion cow ; let Pair lt1 rt1 = coercionKind co1 Pair lt2 rt2 = coercionKind co2 Pair ltw rtw = coercionKind cow - ; lintL (afl == chooseFunTyFlag lt1 lt2) (bad_co_msg "afl") - ; lintL (afr == chooseFunTyFlag rt1 rt2) (bad_co_msg "afr") - ; lintArrow (bad_co_msg "arrowl") lt1 lt2 ltw - ; lintArrow (bad_co_msg "arrowr") rt1 rt2 rtw + ; lintArrow (bad_co_msg "arrowl") afl lt1 lt2 ltw + ; lintArrow (bad_co_msg "arrowr") afr rt1 rt2 rtw ; lintRole co1 r (coercionRole co1) ; lintRole co2 r (coercionRole co2) - ; ensureEqTys (typeKind ltw) multiplicityTy (bad_co_msg "mult-l") - ; ensureEqTys (typeKind rtw) multiplicityTy (bad_co_msg "mult-r") ; let expected_mult_role = case r of Phantom -> Phantom _ -> Nominal - ; lintRole cow expected_mult_role (coercionRole cow) - ; return (co { fco_mult = cow', fco_arg = co1', fco_res = co2' }) } + ; lintRole cow expected_mult_role (coercionRole cow) } where bad_co_msg s = hang (text "Bad coercion" <+> parens (text s)) 2 (vcat [ text "afl:" <+> ppr afl @@ -2475,19 +2461,16 @@ lintCoercion co@(UnivCo { uco_role = r, uco_prov = prov _ -> return () -- Check the to and from types - ; ty1' <- lintType ty1 - ; ty2' <- lintType ty2 + ; lintType ty1 + ; lintType ty2 + ; tk1 <- substTyM (typeKind ty1) + ; tk2 <- substTyM (typeKind ty2) - ; let k1 = typeKind ty1' - k2 = typeKind ty2' - ; when (r /= Phantom && isTYPEorCONSTRAINT k1 - && isTYPEorCONSTRAINT k2) + ; when (r /= Phantom && isTYPEorCONSTRAINT tk1 && isTYPEorCONSTRAINT tk2) (checkTypes ty1 ty2) -- Check the coercions on which this UnivCo depends - ; deps' <- mapM lintCoercion deps - - ; return (co { uco_lty = ty1', uco_rty = ty2', uco_deps = deps' }) } + ; mapM_ lintCoercion deps } where report s = hang (text $ "Unsafe coercion: " ++ s) 2 (vcat [ text "From:" <+> ppr ty1 @@ -2530,24 +2513,21 @@ lintCoercion co@(UnivCo { uco_role = r, uco_prov = prov _ -> return () } -lintCoercion (SymCo co) - = do { co' <- lintCoercion co - ; return (SymCo co') } +lintCoercion (SymCo co) = lintCoercion co lintCoercion co@(TransCo co1 co2) - = do { co1' <- lintCoercion co1 - ; co2' <- lintCoercion co2 - ; let ty1b = coercionRKind co1' - ty2a = coercionLKind co2' - ; ensureEqTys ty1b ty2a + = do { lintCoercion co1 + ; lintCoercion co2 + ; rk1 <- substTyM (coercionRKind co1) + ; lk2 <- substTyM (coercionLKind co2) + ; ensureEqTys rk1 lk2 (hang (text "Trans coercion mis-match:" <+> ppr co) - 2 (vcat [ppr (coercionKind co1'), ppr (coercionKind co2')])) - ; lintRole co (coercionRole co1) (coercionRole co2) - ; return (TransCo co1' co2') } + 2 (vcat [ppr (coercionKind co1), ppr (coercionKind co2)])) + ; lintRole co (coercionRole co1) (coercionRole co2) } lintCoercion the_co@(SelCo cs co) - = do { co' <- lintCoercion co - ; let (Pair s t, co_role) = coercionKindRole co' + = do { lintCoercion co + ; Pair s t <- substCoKindM co ; if -- forall (both TyVar and CoVar) | Just _ <- splitForAllTyCoVar_maybe s @@ -2555,78 +2535,96 @@ lintCoercion the_co@(SelCo cs co) , SelForAll <- cs , (isForAllTy_ty s && isForAllTy_ty t) || (isForAllTy_co s && isForAllTy_co t) - -> return (SelCo cs co') + -> return () -- function | isFunTy s , isFunTy t , SelFun {} <- cs - -> return (SelCo cs co') + -> return () -- TyCon | Just (tc_s, tys_s) <- splitTyConApp_maybe s , Just (tc_t, tys_t) <- splitTyConApp_maybe t , tc_s == tc_t , SelTyCon n r0 <- cs + , let co_role = coercionRole co , isInjectiveTyCon tc_s co_role -- see Note [SelCo and newtypes] in GHC.Core.TyCo.Rep , tys_s `equalLength` tys_t , tys_s `lengthExceeds` n -> do { lintRole the_co (tyConRole co_role tc_s n) r0 - ; return (SelCo cs co') } + ; return () } | otherwise -> failWithL (hang (text "Bad SelCo:") 2 (ppr the_co $$ ppr s $$ ppr t)) } -lintCoercion the_co@(LRCo lr co) - = do { co' <- lintCoercion co - ; let Pair s t = coercionKind co' - r = coercionRole co' - ; lintRole co Nominal r +lintCoercion the_co@(LRCo _lr co) + = do { lintCoercion co + ; Pair s t <- substCoKindM co + ; lintRole co Nominal (coercionRole co) ; case (splitAppTy_maybe s, splitAppTy_maybe t) of - (Just _, Just _) -> return (LRCo lr co') + (Just {}, Just {}) -> return () _ -> failWithL (hang (text "Bad LRCo:") 2 (ppr the_co $$ ppr s $$ ppr t)) } -lintCoercion (InstCo co arg) - = do { co' <- lintCoercion co - ; arg' <- lintCoercion arg - ; let Pair t1 t2 = coercionKind co' - Pair s1 s2 = coercionKind arg' - - ; lintRole arg Nominal (coercionRole arg') - - ; case (splitForAllTyVar_maybe t1, splitForAllTyVar_maybe t2) of - -- forall over tvar - { (Just (tv1,_), Just (tv2,_)) - | typeKind s1 `eqType` tyVarKind tv1 - , typeKind s2 `eqType` tyVarKind tv2 - -> return (InstCo co' arg') - | otherwise - -> failWithL (text "Kind mis-match in inst coercion1" <+> ppr co) - - ; _ -> case (splitForAllCoVar_maybe t1, splitForAllCoVar_maybe t2) of - -- forall over covar - { (Just (cv1, _), Just (cv2, _)) - | typeKind s1 `eqType` varType cv1 - , typeKind s2 `eqType` varType cv2 - , CoercionTy _ <- s1 - , CoercionTy _ <- s2 - -> return (InstCo co' arg') - | otherwise - -> failWithL (text "Kind mis-match in inst coercion2" <+> ppr co) - ; _ -> failWithL (text "Bad argument of inst") }}} +lintCoercion orig_co@(InstCo co arg) + = go co [arg] + where + go (InstCo co arg) args = do { lintCoercion arg; go co (arg:args) } + go co args = do { lintCoercion co + ; let Pair lty rty = coercionKind co + ; lty' <- substTyM lty + ; rty' <- substTyM rty + ; in_scope <- getInScope + ; let subst = mkEmptySubst in_scope + ; go_args (subst, lty') (subst,rty') args } + + ------------- + go_args :: (Subst, OutType) -> (Subst,OutType) -> [InCoercion] + -> LintM () + go_args _ _ [] + = return () + go_args lty rty (arg:args) + = do { (lty1, rty1) <- go_arg lty rty arg + ; go_args lty1 rty1 args } + + ------------- + go_arg :: (Subst, OutType) -> (Subst,OutType) -> InCoercion + -> LintM ((Subst,OutType), (Subst,OutType)) + go_arg (lsubst,lty) (rsubst,rty) arg + = do { lintRole arg Nominal (coercionRole arg) + ; Pair arg_lty arg_rty <- substCoKindM arg + + ; case (splitForAllTyCoVar_maybe lty, splitForAllTyCoVar_maybe rty) of + -- forall over tvar + (Just (ltv,lty1), Just (rtv,rty1)) + | typeKind arg_lty `eqType` substTy lsubst (tyVarKind ltv) + , typeKind arg_rty `eqType` substTy rsubst (tyVarKind rtv) + -> return ( (extendTCvSubst lsubst ltv arg_lty, lty1) + , (extendTCvSubst rsubst rtv arg_rty, rty1) ) + | otherwise + -> failWithL (hang (text "Kind mis-match in inst coercion") + 2 (vcat [ text "arg" <+> ppr arg + , text "lty" <+> ppr lty <+> dcolon <+> ppr (typeKind lty) + , text "rty" <+> ppr rty <+> dcolon <+> ppr (typeKind rty) + , text "arg_lty" <+> ppr arg_lty <+> dcolon <+> ppr (typeKind arg_lty) + , text "arg_rty" <+> ppr arg_rty <+> dcolon <+> ppr (typeKind arg_rty) + , text "ltv" <+> ppr ltv <+> dcolon <+> ppr (tyVarKind ltv) + , text "rtv" <+> ppr rtv <+> dcolon <+> ppr (tyVarKind rtv) ])) + + _ -> failWithL (text "Bad argument of inst" <+> ppr orig_co) } lintCoercion this_co@(AxiomCo ax cos) - = do { cos' <- mapM lintCoercion cos - ; let arg_kinds :: [Pair Type] = map coercionKind cos' - ; lint_roles 0 (coAxiomRuleArgRoles ax) cos' - ; lint_ax ax arg_kinds - ; return (AxiomCo ax cos') } + = do { mapM_ lintCoercion cos + ; lint_roles 0 (coAxiomRuleArgRoles ax) cos + ; prs <- mapM substCoKindM cos + ; lint_ax ax prs } + where - lint_ax :: CoAxiomRule -> [Pair Type] -> LintM () + lint_ax :: CoAxiomRule -> [Pair OutType] -> LintM () lint_ax (BuiltInFamRew bif) prs = checkL (isJust (bifrw_proves bif prs)) bad_bif lint_ax (BuiltInFamInj bif) prs @@ -2647,7 +2645,7 @@ lintCoercion this_co@(AxiomCo ax cos) err m xs = failWithL $ hang (text m) 2 $ vcat (text "Rule:" <+> ppr ax : xs) - lint_roles n (e : es) (co : cos) + lint_roles n (e : es) (co:cos) | e == coercionRole co = lint_roles (n+1) es cos | otherwise = err "Argument roles mismatch" @@ -2663,20 +2661,14 @@ lintCoercion this_co@(AxiomCo ax cos) [ text "Expected:" <+> int (n + length es) , text "Provided:" <+> int n ] +lintCoercion (KindCo co) = lintCoercion co -lintCoercion (KindCo co) - = do { co' <- lintCoercion co - ; return (KindCo co') } - -lintCoercion (SubCo co') - = do { co' <- lintCoercion co' - ; lintRole co' Nominal (coercionRole co') - ; return (SubCo co') } +lintCoercion (SubCo co) + = do { lintCoercion co + ; lintRole co Nominal (coercionRole co) } lintCoercion (HoleCo h) - = do { addErrL $ text "Unfilled coercion hole:" <+> ppr h - ; lintCoercion (CoVarCo (coHoleCoVar h)) } - + = failWithL (text "Unfilled coercion hole:" <+> ppr h) {- Note [Conflict checking for axiom applications] @@ -2851,10 +2843,10 @@ lint_branch ax_tc (CoAxBranch { cab_tvs = tvs, cab_cvs = cvs , cab_lhs = lhs_args, cab_rhs = rhs }) = lintBinders LambdaBind (tvs ++ cvs) $ \_ -> do { let lhs = mkTyConApp ax_tc lhs_args - ; lhs' <- lintType lhs - ; rhs' <- lintType rhs - ; let lhs_kind = typeKind lhs' - rhs_kind = typeKind rhs' + ; lintType lhs + ; lintType rhs + ; lhs_kind <- substTyM (typeKind lhs) + ; rhs_kind <- substTyM (typeKind rhs) ; lintL (not (lhs_kind `typesAreApart` rhs_kind)) $ hang (text "Inhomogeneous axiom") 2 (text "lhs:" <+> ppr lhs <+> dcolon <+> ppr lhs_kind $$ @@ -2937,28 +2929,30 @@ data LintEnv = LE { le_flags :: LintFlags -- Linting the result of this pass , le_loc :: [LintLocInfo] -- Locations - , le_subst :: Subst -- Current TyCo substitution - -- See Note [Linting type lets] - -- /Only/ substitutes for type variables; - -- but might clone CoVars - -- We also use le_subst to keep track of - -- in-scope TyVars and CoVars (but not Ids) - -- Range of the Subst is LintedType/LintedCo - - , le_ids :: VarEnv (Id, LintedType) -- In-scope Ids - -- Used to check that occurrences have an enclosing binder. - -- The Id is /pre-substitution/, used to check that - -- the occurrence has an identical type to the binder - -- The LintedType is used to return the type of the occurrence, - -- without having to lint it again. + , le_subst :: Subst + -- Current substitution, for TyCoVars only. + -- Non-CoVar Ids don't appear in here, not even in the InScopeSet + -- Used for (a) cloning to avoid shadowing of TyCoVars, + -- so that eqType works ok + -- (b) substituting for let-bound tyvars, when we have + -- (let @a = Int -> Int in ...) + + , le_in_vars :: VarEnv (InVar, OutType) + -- Maps an InVar (i.e. its unique) to its binding InVar + -- and to its OutType + -- /All/ in-scope variables are here (term variables, + -- type variables, and coercion variables) + -- Used at an occurrence of the InVar , le_joins :: IdSet -- Join points in scope that are valid -- A subset of the InScopeSet in le_subst -- See Note [Join points] - , le_ue_aliases :: NameEnv UsageEnv -- Assigns usage environments to the - -- alias-like binders, as found in - -- non-recursive lets. + , le_ue_aliases :: NameEnv UsageEnv + -- See Note [Linting linearity] + -- Assigns usage environments to the alias-like binders, + -- as found in non-recursive lets. + -- Domain is OutIds , le_platform :: Platform -- ^ Target platform , le_diagOpts :: DiagOpts -- ^ Target platform @@ -3005,6 +2999,12 @@ type WarnsAndErrs = (Bag SDoc, Bag SDoc) -- Using a unboxed tuple here reduced allocations for a lint heavy -- file by ~6%. Using MaybeUB reduced them further by another ~12%. +-- +-- Warning: if you don't inline the matcher for JustUB etc, Lint becomes +-- /tremendously/ inefficient, and compiling GHC.Tc.Errors.Types (which +-- contains gigantic types) is very very slow indeed. Conclusion: make +-- sure unfoldings are expose in GHC.Data.Unboxed, and that you compile +-- Lint.hs with optimistation on. type LResult a = (# MaybeUB a, WarnsAndErrs #) pattern LResult :: MaybeUB a -> WarnsAndErrs -> LResult a @@ -3089,17 +3089,23 @@ Note [Linting linearity] ~~~~~~~~~~~~~~~~~~~~~~~~ Lint ignores linearity unless `-dlinear-core-lint` is set. For why, see below. -But first, "ignore linearity" specifically means two things. When ignoring linearity: -* In `ensureEqTypes`, use `eqTypeIgnoringMultiplicity` -* In `ensureSubMult`, do nothing +* When do we /check linearity/ in Lint? That is, when is `-dlinear-core-lint` + lint set? Answer: we check linearity in the output of the desugarer, shortly + after type checking. -But why make `-dcore-lint` ignore linearity? Because optimisation passes are -not (yet) guaranteed to maintain linearity. They should do so semantically (GHC -is careful not to duplicate computation) but it is much harder to ensure that -the statically-checkable constraints of Linear Core are maintained. The current -Linear Core is described in the wiki at: +* When so we /not/ check linearity in Lint? On all passes after desugaring. Why? + Because optimisation passes are not (yet) guaranteed to maintain linearity. + They should do so semantically (GHC is careful not to duplicate computation) + but it is much harder to ensure that the statically-checkable constraints of + Linear Core are maintained. See examples below. + +The current Linear Core is described in the wiki at: https://gitlab.haskell.org/ghc/ghc/-/wikis/linear-types/implementation. +Concretely, "ignore linearity in Lint" specifically means two things: +* In `ensureEqTypes`, use `eqTypeIgnoringMultiplicity` +* In `ensureSubMult`, do nothing + Here are some examples of how the optimiser can break linearity checking. Other examples are documented in the linear-type implementation wiki page [https://gitlab.haskell.org/ghc/ghc/-/wikis/linear-types/implementation#core-to-core-passes] @@ -3302,12 +3308,12 @@ initL cfg m | otherwise -> pprPanic ("Bug in Lint: a failure occurred " ++ "without reporting an error message") empty where - (tcvs, ids) = partition isTyCoVar $ l_vars cfg - env = LE { le_flags = l_flags cfg - , le_subst = mkEmptySubst (mkInScopeSetList tcvs) - , le_ids = mkVarEnv [(id, (id,idType id)) | id <- ids] - , le_joins = emptyVarSet - , le_loc = [] + vars = l_vars cfg + env = LE { le_flags = l_flags cfg + , le_subst = mkEmptySubst (mkInScopeSetList vars) + , le_in_vars = mkVarEnv [ (v,(v, varType v)) | v <- vars ] + , le_joins = emptyVarSet + , le_loc = [] , le_ue_aliases = emptyNameEnv , le_platform = l_platform cfg , le_diagOpts = l_diagOpts cfg @@ -3352,10 +3358,10 @@ addErrL msg = LintM $ \ env (warns,errs) -> addWarnL :: SDoc -> LintM () addWarnL msg = LintM $ \ env (warns,errs) -> - fromBoxedLResult (Just (), (addMsg False env warns msg, errs)) + fromBoxedLResult (Just (), (addMsg True env warns msg, errs)) addMsg :: Bool -> LintEnv -> Bag SDoc -> SDoc -> Bag SDoc -addMsg is_error env msgs msg +addMsg show_context env msgs msg = assertPpr (notNull loc_msgs) msg $ msgs `snocBag` mk_msg msg where @@ -3364,8 +3370,9 @@ addMsg is_error env msgs msg cxt_doc = vcat [ vcat $ reverse $ map snd loc_msgs , text "Substitution:" <+> ppr (le_subst env) ] - context | is_error = cxt_doc - | otherwise = whenPprDebug cxt_doc + + context | show_context = cxt_doc + | otherwise = whenPprDebug cxt_doc -- Print voluminous info for Lint errors -- but not for warnings @@ -3389,33 +3396,69 @@ inCasePat = LintM $ \ env errs -> fromBoxedLResult (Just (is_case_pat env), errs is_case_pat (LE { le_loc = CasePat {} : _ }) = True is_case_pat _other = False -addInScopeId :: Id -> LintedType -> LintM a -> LintM a -addInScopeId id linted_ty m - = LintM $ \ env@(LE { le_ids = id_set, le_joins = join_set, le_ue_aliases = aliases }) errs -> - unLintM m (env { le_ids = extendVarEnv id_set id (id, linted_ty) - , le_joins = add_joins join_set - , le_ue_aliases = delFromNameEnv aliases (idName id) }) errs - -- When shadowing an alias, we need to make sure the Id is no longer - -- classified as such. E.g. in - -- let x = in case x of x { _DEFAULT -> } - -- Occurrences of 'x' in e2 shouldn't count as occurrences of e1. - where - add_joins join_set - | isJoinId id = extendVarSet join_set id -- Overwrite with new arity - | otherwise = delVarSet join_set id -- Remove any existing binding +addInScopeId :: InId -> OutType -> (OutId -> LintM a) -> LintM a +-- Unlike addInScopeTyCoVar, this function does no cloning; Ids never get cloned +addInScopeId in_id out_ty thing_inside + = LintM $ \ env errs -> + let !(out_id, env') = add env + in unLintM (thing_inside out_id) env' errs -getInScopeIds :: LintM (VarEnv (Id,LintedType)) -getInScopeIds = LintM (\env errs -> fromBoxedLResult (Just (le_ids env), errs)) + where + add env@(LE { le_in_vars = id_vars, le_joins = join_set + , le_ue_aliases = aliases, le_subst = subst }) + = (out_id, env1) + where + env1 = env { le_in_vars = in_vars', le_joins = join_set', le_ue_aliases = aliases' } + + in_vars' = extendVarEnv id_vars in_id (in_id, out_ty) + aliases' = delFromNameEnv aliases (idName in_id) + -- aliases': when shadowing an alias, we need to make sure the + -- Id is no longer classified as such. E.g. + -- let x = in case x of x { _DEFAULT -> } + -- Occurrences of 'x' in e2 shouldn't count as occurrences of e1. + + -- A very tiny optimisation, not sure if it's really worth it + -- Short-cut when the substitution is a no-op + out_id | isEmptyTCvSubst subst = in_id + | otherwise = setIdType in_id out_ty + + join_set' + | isJoinId out_id = extendVarSet join_set in_id -- Overwrite with new arity + | otherwise = delVarSet join_set in_id -- Remove any existing binding + +addInScopeTyCoVar :: InTyCoVar -> OutType -> (OutTyCoVar -> LintM a) -> LintM a +-- This function clones to avoid shadowing of TyCoVars +addInScopeTyCoVar tcv tcv_type thing_inside + = LintM $ \ env@(LE { le_in_vars = in_vars, le_subst = subst }) errs -> + let (tcv', subst') = subst_bndr subst + env' = env { le_in_vars = extendVarEnv in_vars tcv (tcv, tcv_type) + , le_subst = subst' } + in unLintM (thing_inside tcv') env' errs + where + subst_bndr subst + | isEmptyTCvSubst subst -- No change in kind + , not (tcv `elemInScopeSet` in_scope) -- Not already in scope + = -- Do not extend the substitution, just the in-scope set + (if (varType tcv `eqType` tcv_type) then (\x->x) else + pprTrace "addInScopeTyCoVar" ( + vcat [ text "tcv" <+> ppr tcv <+> dcolon <+> ppr (varType tcv) + , text "tcv_type" <+> ppr tcv_type ])) $ + (tcv, subst `extendSubstInScope` tcv) + + -- Clone, and extend the substitution + | let tcv' = uniqAway in_scope (setVarType tcv tcv_type) + = (tcv', extendTCvSubstWithClone subst tcv tcv') + where + in_scope = substInScopeSet subst + +getInVarEnv :: LintM (VarEnv (InId, OutType)) +getInVarEnv = LintM (\env errs -> fromBoxedLResult (Just (le_in_vars env), errs)) extendTvSubstL :: TyVar -> Type -> LintM a -> LintM a extendTvSubstL tv ty m = LintM $ \ env errs -> unLintM m (env { le_subst = Type.extendTvSubst (le_subst env) tv ty }) errs -updateSubst :: Subst -> LintM a -> LintM a -updateSubst subst' m - = LintM $ \ env errs -> unLintM m (env { le_subst = subst' }) errs - markAllJoinsBad :: LintM a -> LintM a markAllJoinsBad m = LintM $ \ env errs -> unLintM m (env { le_joins = emptyVarSet }) errs @@ -3430,34 +3473,43 @@ getValidJoins = LintM (\ env errs -> fromBoxedLResult (Just (le_joins env), errs getSubst :: LintM Subst getSubst = LintM (\ env errs -> fromBoxedLResult (Just (le_subst env), errs)) +substTyM :: InType -> LintM OutType +-- Apply the substitution to the type +-- The substitution is often empty, in which case it is a no-op +substTyM ty + = do { subst <- getSubst + ; return (substTy subst ty) } + getUEAliases :: LintM (NameEnv UsageEnv) getUEAliases = LintM (\ env errs -> fromBoxedLResult (Just (le_ue_aliases env), errs)) getInScope :: LintM InScopeSet -getInScope = LintM (\ env errs -> fromBoxedLResult (Just (getSubstInScope $ le_subst env), errs)) - -lookupIdInScope :: Id -> LintM (Id, LintedType) -lookupIdInScope id_occ - = do { in_scope_ids <- getInScopeIds - ; case lookupVarEnv in_scope_ids id_occ of - Just (id_bndr, linted_ty) - -> do { checkL (not (bad_global id_bndr)) $ global_in_scope id_bndr - ; return (id_bndr, linted_ty) } - Nothing -> do { checkL (not is_local) local_out_of_scope - ; return (id_occ, idType id_occ) } } - -- We don't bother to lint the type - -- of global (i.e. imported) Ids +getInScope = LintM (\ env errs -> fromBoxedLResult (Just (substInScopeSet $ le_subst env), errs)) + +lintVarOcc :: InVar -> LintM OutType +-- Used at an occurrence of a variable: term variables, type variables, and coercion variables +-- Checks two things: +-- a) that it is in scope +-- b) that the InType at the ocurrences matches the InType at the binding site +lintVarOcc v_occ + = do { in_var_env <- getInVarEnv + ; case lookupVarEnv in_var_env v_occ of + Nothing | isGlobalId v_occ -> return (idType v_occ) + | otherwise -> failWithL (text pp_what <+> quotes (ppr v_occ) + <+> text "is out of scope") + Just (v_bndr, out_ty) -> do { check_bad_global v_bndr + ; ensureEqTys occ_ty bndr_ty $ -- Compares InTypes + mkBndrOccTypeMismatchMsg v_occ bndr_ty occ_ty + ; return out_ty } + where + occ_ty = varType v_occ + bndr_ty = varType v_bndr } where - is_local = mustHaveLocalBinding id_occ - local_out_of_scope = text "Out of scope:" <+> pprBndr LetBind id_occ - global_in_scope id_bndr = hang (text "Occurrence is GlobalId, but binding is LocalId") - 2 $ vcat [hang (text "occurrence:") 2 $ pprBndr LetBind id_occ - ,hang (text "binder :") 2 $ pprBndr LetBind id_bndr - ] - bad_global id_bnd = isGlobalId id_occ - && isLocalId id_bnd - && not (isWiredIn id_occ) - -- 'bad_global' checks for the case where an /occurrence/ is + pp_what | isTyVar v_occ = "The type variable" + | isCoVar v_occ = "The coercion variable" + | otherwise = "The value variable" + + -- 'check_bad_global' checks for the case where an /occurrence/ is -- a GlobalId, but there is an enclosing binding fora a LocalId. -- NB: the in-scope variables are mostly LocalIds, checked by lintIdBndr, -- but GHCi adds GlobalIds from the interactive context. These @@ -3466,6 +3518,15 @@ lookupIdInScope id_occ -- are defined locally, but appear in expressions as (global) -- wired-in Ids after worker/wrapper -- So we simply disable the test in this case + check_bad_global v_bndr + | isGlobalId v_occ + , isLocalId v_bndr + , not (isWiredIn v_occ) + = failWithL $ hang (text "Occurrence is GlobalId, but binding is LocalId") + 2 (vcat [ hang (text "occurrence:") 2 $ pprBndr LetBind v_occ + , hang (text "binder :") 2 $ pprBndr LetBind v_bndr ]) + | otherwise + = return () lookupJoinId :: Id -> LintM JoinPointHood -- Look up an Id which should be a join point, valid here @@ -3476,21 +3537,21 @@ lookupJoinId id Just id' -> return (idJoinPointHood id') Nothing -> return NotJoinPoint } -addAliasUE :: Id -> UsageEnv -> LintM a -> LintM a +addAliasUE :: OutId -> UsageEnv -> LintM a -> LintM a addAliasUE id ue thing_inside = LintM $ \ env errs -> let new_ue_aliases = extendNameEnv (le_ue_aliases env) (getName id) ue in unLintM thing_inside (env { le_ue_aliases = new_ue_aliases }) errs -varCallSiteUsage :: Id -> LintM UsageEnv +varCallSiteUsage :: OutId -> LintM UsageEnv varCallSiteUsage id = do m <- getUEAliases return $ case lookupNameEnv m (getName id) of Nothing -> singleUsageUE id Just id_ue -> id_ue -ensureEqTys :: LintedType -> LintedType -> SDoc -> LintM () +ensureEqTys :: OutType -> OutType -> SDoc -> LintM () -- check ty2 is subtype of ty1 (ie, has same structure but usage -- annotations need only be consistent, not equal) -- Assumes ty1,ty2 are have already had the substitution applied @@ -3639,12 +3700,11 @@ mkCaseAltMsg e ty1 ty2 text "Annotation on case:" <+> ppr ty2, text "Alt Rhs:" <+> ppr e ]) -mkScrutMsg :: Id -> Type -> Type -> Subst -> SDoc -mkScrutMsg var var_ty scrut_ty subst +mkScrutMsg :: Id -> Type -> Type -> SDoc +mkScrutMsg var var_ty scrut_ty = vcat [text "Result binder in case doesn't match scrutinee:" <+> ppr var, text "Result binder type:" <+> ppr var_ty,--(idType var), - text "Scrutinee type:" <+> ppr scrut_ty, - hsep [text "Current TCv subst", ppr subst]] + text "Scrutinee type:" <+> ppr scrut_ty] mkNonDefltMsg, mkNonIncreasingAltsMsg :: CoreExpr -> SDoc mkNonDefltMsg e @@ -3714,7 +3774,7 @@ mkLetErr bndr rhs hang (text "Rhs:") 4 (ppr rhs)] -mkTyAppMsg :: Type -> Type -> SDoc +mkTyAppMsg :: OutType -> Type -> SDoc mkTyAppMsg ty arg_ty = vcat [text "Illegal type application:", hang (text "Function type:") @@ -3722,14 +3782,6 @@ mkTyAppMsg ty arg_ty hang (text "Type argument:") 4 (ppr arg_ty <+> dcolon <+> ppr (typeKind arg_ty))] -mkCoAppMsg :: Type -> Coercion -> SDoc -mkCoAppMsg fun_ty co - = vcat [ text "Illegal coercion application:" - , hang (text "Function type:") - 4 (ppr fun_ty) - , hang (text "Coercion argument:") - 4 (ppr co <+> dcolon <+> ppr (coercionType co))] - emptyRec :: CoreExpr -> SDoc emptyRec e = hang (text "Empty Rec binding:") 2 (ppr e) @@ -3843,12 +3895,11 @@ mkJoinBndrOccMismatchMsg bndr join_arity_bndr join_arity_occ , text "Arity at binding site:" <+> ppr join_arity_bndr , text "Arity at occurrence: " <+> ppr join_arity_occ ] -mkBndrOccTypeMismatchMsg :: Var -> Var -> LintedType -> LintedType -> SDoc -mkBndrOccTypeMismatchMsg bndr var bndr_ty var_ty +mkBndrOccTypeMismatchMsg :: InVar -> InType -> InType -> SDoc +mkBndrOccTypeMismatchMsg var bndr_ty occ_ty = vcat [ text "Mismatch in type between binder and occurrence" - , text "Binder:" <+> ppr bndr <+> dcolon <+> ppr bndr_ty - , text "Occurrence:" <+> ppr var <+> dcolon <+> ppr var_ty - , text " Before subst:" <+> ppr (idType var) ] + , text "Binder: " <+> ppr var <+> dcolon <+> ppr bndr_ty + , text "Occurrence:" <+> ppr var <+> dcolon <+> ppr occ_ty ] mkBadJoinPointRuleMsg :: JoinId -> JoinArity -> CoreRule -> SDoc mkBadJoinPointRuleMsg bndr join_arity rule ===================================== compiler/GHC/Core/Opt/Arity.hs ===================================== @@ -2304,7 +2304,7 @@ mkEtaWW orig_oss ppr_orig_expr in_scope orig_ty go _ [] subst _ ----------- Done! No more expansion needed - = (getSubstInScope subst, EI [] MRefl) + = (substInScopeSet subst, EI [] MRefl) go n oss@(one_shot:oss1) subst ty ----------- Forall types (forall a. ty) @@ -2351,7 +2351,7 @@ mkEtaWW orig_oss ppr_orig_expr in_scope orig_ty -- but its type isn't a function, or a binder -- does not have a fixed runtime representation = warnPprTrace True "mkEtaWW" ((ppr orig_oss <+> ppr orig_ty) $$ ppr_orig_expr) - (getSubstInScope subst, EI [] MRefl) + (substInScopeSet subst, EI [] MRefl) -- This *can* legitimately happen: -- e.g. coerce Int (\x. x) Essentially the programmer is -- playing fast and loose with types (Happy does this a lot). @@ -3246,7 +3246,7 @@ freshEtaId n subst ty = (subst', eta_id') where Scaled mult' ty' = Type.substScaledTyUnchecked subst ty - eta_id' = uniqAway (getSubstInScope subst) $ + eta_id' = uniqAway (substInScopeSet subst) $ mkSysLocalOrCoVar (fsLit "eta") (mkBuiltinUnique n) mult' ty' -- "OrCoVar" since this can be used to eta-expand -- coercion abstractions ===================================== compiler/GHC/Core/Opt/SpecConstr.hs ===================================== @@ -2453,7 +2453,7 @@ callsToNewPats env fn spec_info@(SI { si_specs = done_specs }) bndr_occs calls good_pats :: [CallPat] good_pats = catMaybes mb_pats - in_scope = getSubstInScope (sc_subst env) + in_scope = substInScopeSet (sc_subst env) -- Remove patterns we have already done new_pats = filterOut is_done good_pats @@ -2571,7 +2571,7 @@ callToPat :: ScEnv -> [ArgOcc] -> Call -> UniqSM (Maybe CallPat) -- over the following term variables -- The [CoreExpr] are the argument patterns for the rule callToPat env bndr_occs call@(Call fn args con_env) - = do { let in_scope = getSubstInScope (sc_subst env) + = do { let in_scope = substInScopeSet (sc_subst env) ; arg_triples <- zipWith3M (argToPat env in_scope con_env) args bndr_occs (map (const NotMarkedStrict) args) -- This zip trims the args to be no longer than ===================================== compiler/GHC/Core/Opt/Specialise.hs ===================================== @@ -1824,7 +1824,7 @@ specLookupRule env fn args phase rules = lookupRule ropts in_scope_env is_active fn args rules where dflags = se_dflags env - in_scope = getSubstInScope (se_subst env) + in_scope = substInScopeSet (se_subst env) in_scope_env = ISE in_scope (whenActiveUnfoldingFun is_active) ropts = initRuleOpts dflags is_active = isActive phase @@ -2573,7 +2573,7 @@ specHeader env (bndr : bndrs) (SpecType ty : args) = do { -- Find qvars, the type variables to add to the binders for the rule -- Namely those free in `ty` that aren't in scope -- See (MP2) in Note [Specialising polymorphic dictionaries] - let in_scope = Core.getSubstInScope (se_subst env) + let in_scope = Core.substInScopeSet (se_subst env) qvars = scopedSort $ filterOut (`elemInScopeSet` in_scope) $ tyCoVarsOfTypeList ty @@ -2635,7 +2635,7 @@ specHeader env (bndr : bndrs) (SpecDict d : args) ) } where - in_scope = Core.getSubstInScope (se_subst env) + in_scope = Core.substInScopeSet (se_subst env) -- Finally, we don't want to specialise on this argument 'i': -- - It's an UnSpecArg, or ===================================== compiler/GHC/Core/SimpleOpt.hs ===================================== @@ -219,7 +219,7 @@ soeZapSubst env@(SOE { soe_subst = subst }) = env { soe_inl = emptyVarEnv, soe_subst = zapSubst subst } soeInScope :: SimpleOptEnv -> InScopeSet -soeInScope (SOE { soe_subst = subst }) = getSubstInScope subst +soeInScope (SOE { soe_subst = subst }) = substInScopeSet subst soeSetInScope :: InScopeSet -> SimpleOptEnv -> SimpleOptEnv soeSetInScope in_scope env2@(SOE { soe_subst = subst2 }) @@ -246,7 +246,7 @@ simple_opt_expr env expr where rec_ids = soe_rec_ids env subst = soe_subst env - in_scope = getSubstInScope subst + in_scope = substInScopeSet subst in_scope_env = ISE in_scope alwaysActiveUnfoldingFun --------------- @@ -481,7 +481,7 @@ simple_bind_pair env@(SOE { soe_inl = inl_env, soe_subst = subst }) stable_unf = isStableUnfolding (idUnfolding in_bndr) active = isAlwaysActive (idInlineActivation in_bndr) occ = idOccInfo in_bndr - in_scope = getSubstInScope subst + in_scope = substInScopeSet subst out_rhs | JoinPoint join_arity <- idJoinPointHood in_bndr = simple_join_rhs join_arity @@ -1321,7 +1321,7 @@ exprIsConApp_maybe ise@(ISE in_scope id_unf) expr scrut' = subst_expr subst scrut go (Right sub) floats (Var v) cont - = go (Left (getSubstInScope sub)) + = go (Left (substInScopeSet sub)) floats (lookupIdSubst sub v) cont @@ -1394,7 +1394,7 @@ exprIsConApp_maybe ise@(ISE in_scope id_unf) expr -- The Left case is wildly dominant subst_in_scope (Left in_scope) = in_scope - subst_in_scope (Right s) = getSubstInScope s + subst_in_scope (Right s) = substInScopeSet s subst_extend_in_scope (Left in_scope) v = Left (in_scope `extendInScopeSet` v) subst_extend_in_scope (Right s) v = Right (s `extendSubstInScope` v) ===================================== compiler/GHC/Core/Subst.hs ===================================== @@ -24,7 +24,7 @@ module GHC.Core.Subst ( extendIdSubstWithClone, extendSubst, extendSubstList, extendSubstWithVar, extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, - isInScope, setInScope, getSubstInScope, + isInScope, setInScope, substInScopeSet, extendTvSubst, extendCvSubst, delBndr, delBndrs, zapSubst, ===================================== compiler/GHC/Core/TyCo/Rep.hs ===================================== @@ -1218,14 +1218,15 @@ because the kinds of the bound tyvars can be different. The typing rule is: - kind_co : k1 ~N k2 - tv1:k1 |- co : t1 ~r t2 + G |- kind_co : k1 ~N k2 + tv1 \not\in fv(typeKind(t1),typeKind(t2)) -- Skolem escape + G, tv1:k1 |- co : t1 ~r t2 if r=N, then vis1=vis2 ------------------------------------ - ForAllCo (tv1:k1) vis1 vis2 kind_co co - : forall (tv1:k1) . t1 + G |- ForAllCo (tv1:k1) vis1 vis2 kind_co co + : forall (tv1:k1) . t1 ~r - forall (tv1:k2) . (t2[tv1 |-> (tv1:k2) |> sym kind_co]) + forall (tv1:k2) . (t2[tv1 |-> (tv1:k2) |> sym kind_co]) Several things to note here ===================================== compiler/GHC/Core/TyCo/Subst.hs ===================================== @@ -15,9 +15,9 @@ module GHC.Core.TyCo.Subst emptySubst, mkEmptySubst, isEmptyTCvSubst, isEmptySubst, mkTCvSubst, mkTvSubst, mkCvSubst, mkIdSubst, getTvSubstEnv, getIdSubstEnv, - getCvSubstEnv, getSubstInScope, setInScope, getSubstRangeTyCoFVs, + getCvSubstEnv, substInScopeSet, setInScope, getSubstRangeTyCoFVs, isInScope, elemSubst, notElemSubst, zapSubst, - extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, + extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, delSubstInScope, extendTCvSubst, extendTCvSubstWithClone, extendCvSubst, extendCvSubstWithClone, extendTvSubst, extendTvSubstWithClone, @@ -104,9 +104,9 @@ import Data.List (mapAccumL) data Subst = Subst InScopeSet -- Variables in scope (both Ids and TyVars) /after/ -- applying the substitution - IdSubstEnv -- Substitution from NcIds to CoreExprs - TvSubstEnv -- Substitution from TyVars to Types - CvSubstEnv -- Substitution from CoVars to Coercions + IdSubstEnv -- Substitution from InId to OutExpr + TvSubstEnv -- Substitution from InTyVar to OutType + CvSubstEnv -- Substitution from InCoVar to OutCoercion -- INVARIANT 1: See Note [The substitution invariant] -- This is what lets us deal with name capture properly @@ -115,7 +115,7 @@ data Subst -- see Note [Substitutions apply only once] -- -- INVARIANT 3: See Note [Extending the IdSubstEnv] in "GHC.Core.Subst" - -- and Note [Extending the TvSubstEnv and CvSubstEnv] + -- and Note [Extending the TvSubstEnv and CvSubstEnv] -- -- INVARIANT 4: See Note [Substituting types, coercions, and expressions] @@ -183,8 +183,10 @@ A TCvSubst is not idempotent, but, unlike the non-idempotent substitution we use during unifications, it must not be repeatedly applied. Note [Extending the TvSubstEnv and CvSubstEnv] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -See #tcvsubst_invariant# for the invariants that must hold. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The TvSubstEnv and CvSubstEnv have a binding for each TyCoVar + - whose unique has changed, OR + - whose kind has changed This invariant allows a short-cut when the subst envs are empty: if the TvSubstEnv and CvSubstEnv are empty --- i.e. (isEmptyTCvSubst subst) @@ -207,7 +209,7 @@ This invariant has several crucial consequences: * In substTy, substTheta, we can short-circuit when the TvSubstEnv is empty Note [Substituting types, coercions, and expressions] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Types and coercions are mutually recursive, and either may have variables "belonging" to the other. Thus, every time we wish to substitute in a type, we may also need to substitute in a coercion, and vice versa. @@ -295,8 +297,8 @@ getCvSubstEnv :: Subst -> CvSubstEnv getCvSubstEnv (Subst _ _ _ cenv) = cenv -- | Find the in-scope set: see Note [The substitution invariant] -getSubstInScope :: Subst -> InScopeSet -getSubstInScope (Subst in_scope _ _ _) = in_scope +substInScopeSet :: Subst -> InScopeSet +substInScopeSet (Subst in_scope _ _ _) = in_scope setInScope :: Subst -> InScopeSet -> Subst setInScope (Subst _ ids tvs cvs) in_scope = Subst in_scope ids tvs cvs @@ -337,6 +339,11 @@ extendSubstInScope (Subst in_scope ids tvs cvs) v = Subst (in_scope `extendInScopeSet` v) ids tvs cvs +delSubstInScope :: Subst -> Var -> Subst +delSubstInScope (Subst in_scope ids tvs cvs) v + = Subst (in_scope `delInScopeSet` v) + ids tvs cvs + -- | Add the 'Var's to the in-scope set: see also 'extendInScope' extendSubstInScopeList :: Subst -> [Var] -> Subst extendSubstInScopeList (Subst in_scope ids tvs cvs) vs ===================================== compiler/GHC/Core/Type.hs ===================================== @@ -121,7 +121,7 @@ module GHC.Core.Type ( mkTYPEapp, mkTYPEapp_maybe, mkCONSTRAINTapp, mkCONSTRAINTapp_maybe, mkBoxedRepApp_maybe, mkTupleRepApp_maybe, - typeOrConstraintKind, + typeOrConstraintKind, liftedTypeOrConstraintKind, -- *** Levity and boxity sORTKind_maybe, typeTypeOrConstraint, @@ -201,7 +201,7 @@ module GHC.Core.Type ( zipTCvSubst, notElemSubst, getTvSubstEnv, - zapSubst, getSubstInScope, setInScope, getSubstRangeTyCoFVs, + zapSubst, substInScopeSet, setInScope, getSubstRangeTyCoFVs, extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, extendTCvSubst, extendCvSubst, extendTvSubst, extendTvSubstList, extendTvSubstAndInScope, @@ -2685,9 +2685,7 @@ typeKind :: HasDebugCallStack => Type -> Kind -- No need to expand synonyms typeKind (TyConApp tc tys) = piResultTys (tyConKind tc) tys typeKind (LitTy l) = typeLiteralKind l -typeKind (FunTy { ft_af = af }) = case funTyFlagResultTypeOrConstraint af of - TypeLike -> liftedTypeKind - ConstraintLike -> constraintKind +typeKind (FunTy { ft_af = af }) = liftedTypeOrConstraintKind (funTyFlagResultTypeOrConstraint af) typeKind (TyVarTy tyvar) = tyVarKind tyvar typeKind (CastTy _ty co) = coercionRKind co typeKind (CoercionTy co) = coercionType co @@ -2719,9 +2717,9 @@ typeKind ty@(ForAllTy {}) lifted_kind_from_body -- Implements (FORALL2) = case sORTKind_maybe body_kind of - Just (ConstraintLike, _) -> constraintKind - Just (TypeLike, _) -> liftedTypeKind - Nothing -> pprPanic "typeKind" (ppr body_kind) + Just (torc, _) -> liftedTypeOrConstraintKind torc + Nothing -> pprPanic "typeKind" (ppr body_kind) + --------------------------------------------- @@ -3450,3 +3448,7 @@ mkTupleRepApp_maybe _ = Nothing typeOrConstraintKind :: TypeOrConstraint -> RuntimeRepType -> Kind typeOrConstraintKind TypeLike rep = mkTYPEapp rep typeOrConstraintKind ConstraintLike rep = mkCONSTRAINTapp rep + +liftedTypeOrConstraintKind :: TypeOrConstraint -> Kind +liftedTypeOrConstraintKind TypeLike = liftedTypeKind +liftedTypeOrConstraintKind ConstraintLike = constraintKind ===================================== compiler/GHC/Data/Unboxed.hs ===================================== @@ -4,6 +4,13 @@ {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE UnliftedNewtypes #-} +{-# OPTIONS_GHC -fno-omit-interface-pragmas #-} + -- If you use -fomit-interface-pragmas for your build, we won't + -- inline the matcher for JustUB, and that turns out to have a + -- catastropic effect on Lint, which uses unboxed Maybes. + -- Simple fix: switch off -fomit-interface-pragmas for this tiny + -- and very stable module. + module GHC.Data.Unboxed ( MaybeUB(JustUB, NothingUB), fmapMaybeUB, fromMaybeUB, apMaybeUB, maybeUB ===================================== compiler/GHC/Hs/Dump.hs ===================================== @@ -6,6 +6,10 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE DataKinds #-} +{-# OPTIONS_GHC -fno-specialise #-} + -- Don't do type-class specialisation; it goes mad in this module + -- See #25463 + -- | Contains a debug function to dump parts of the GHC.Hs AST. It uses a syb -- traversal which falls back to displaying based on the constructor name, so -- can be used to dump anything having a @Data.Data@ instance. ===================================== compiler/GHC/Tc/Solver/Equality.hs ===================================== @@ -516,7 +516,7 @@ can_eq_nc_forall ev eq_rel s1 s2 go _ _ _ _ _ = panic "can_eq_nc_forall" -- case (s:ss) [] - init_subst2 = mkEmptySubst (getSubstInScope subst1) + init_subst2 = mkEmptySubst (substInScopeSet subst1) -- Generate the constraints that live in the body of the implication -- See (SF5) in Note [Solving forall equalities] ===================================== compiler/GHC/Tc/TyCl.hs ===================================== @@ -4232,7 +4232,7 @@ mkGADTVars tmpl_tvs dc_tvs subst = choose [] [] empty_subst empty_subst tmpl_tvs where in_scope = mkInScopeSet (mkVarSet tmpl_tvs `unionVarSet` mkVarSet dc_tvs) - `unionInScope` getSubstInScope subst + `unionInScope` substInScopeSet subst empty_subst = mkEmptySubst in_scope choose :: [TyVar] -- accumulator of univ tvs, reversed ===================================== compiler/GHC/Tc/Utils/TcType.hs ===================================== @@ -166,7 +166,7 @@ module GHC.Tc.Utils.TcType ( TvSubstEnv, emptySubst, mkEmptySubst, zipTvSubst, mkTvSubstPrs, notElemSubst, unionSubst, - getTvSubstEnv, getSubstInScope, extendSubstInScope, + getTvSubstEnv, substInScopeSet, extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, extendTvSubstAndInScope, Type.lookupTyVar, Type.extendTCvSubst, Type.substTyVarBndr, Type.extendTvSubst, ===================================== compiler/GHC/Types/Var.hs ===================================== @@ -40,8 +40,8 @@ module GHC.Types.Var ( TyVar, TcTyVar, TypeVar, KindVar, TKVar, TyCoVar, -- * In and Out variants - InVar, InCoVar, InId, InTyVar, - OutVar, OutCoVar, OutId, OutTyVar, + InVar, InCoVar, InId, InTyVar, InTyCoVar, + OutVar, OutCoVar, OutId, OutTyVar, OutTyCoVar, -- ** Taking 'Var's apart varName, varUnique, varType, @@ -205,10 +205,12 @@ type TyCoVar = Id -- Type, *or* coercion variable type InVar = Var type InTyVar = TyVar type InCoVar = CoVar +type InTyCoVar = TyCoVar type InId = Id type OutVar = Var type OutTyVar = TyVar type OutCoVar = CoVar +type OutTyCoVar = TyCoVar type OutId = Id ===================================== testsuite/tests/perf/compiler/T8095.hs ===================================== @@ -17,3 +17,10 @@ instance (xs ~ Replicate1 ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ f X = Y f Y = X test1 = f (X :: Data ( Replicate1 ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Succ ( Zero ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) () )) + +{- +instance (xs ~ Replicate1 ( Succ ( Succ ( Succ ( Succ Zero)))) ()) => Class (Data xs) where + f X = Y + f Y = X +test1 = f (X :: Data ( Replicate1 ( Succ ( Succ ( Succ ( Succ Zero ))) ) ())) +-} ===================================== testsuite/tests/perf/compiler/all.T ===================================== @@ -1,6 +1,6 @@ # Tests that call 'collect_compiler_stats' are skipped when debugging is on. # See testsuite/driver/testlib.py. -setTestOpts(no_lint) +# setTestOpts(no_lint) test('T1969', [# expect_broken(12437), View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f7b87b20aea974d95e3e23565b66844f0f8315dd...9e9e411745d48bf3a485d520147309a93a9a7721 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f7b87b20aea974d95e3e23565b66844f0f8315dd...9e9e411745d48bf3a485d520147309a93a9a7721 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 19:03:07 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 14:03:07 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25560 Message-ID: <67534a6b3c7c3_5297d1556e440424@gitlab.mail> Ben Gamari pushed new branch wip/T25560 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25560 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 20:12:27 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Fri, 06 Dec 2024 15:12:27 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports-1] 4 commits: GHCi: fix improper location of ghci_history file Message-ID: <67535aabcbf82_5297d7764744761d@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports-1 at Glasgow Haskell Compiler / GHC Commits: 9bcf1f1c by ur4t at 2024-12-06T17:10:53+01:00 GHCi: fix improper location of ghci_history file Fixes #24266 (cherry picked from commit 6f0a62db5dc79640433c61e83ea1427665304869) - - - - - 82616fb0 by Andreas Klebinger at 2024-12-06T17:14:58+01:00 Mention .ghci_history XGD changes in changelog. - - - - - 25d72bab by Cheng Shao at 2024-12-06T17:18:03+01:00 rts: do not prefetch mark_closure bdescr in non-moving gc when ASSERTS_ENABLED This commit fixes a small an oversight in !12148: the prefetch logic in non-moving GC may trap in debug RTS because it calls Bdescr() for mark_closure which may be a static one. It's fine in non-debug RTS because even invalid bdescr addresses are prefetched, they will not cause segfaults, so this commit implements the most straightforward fix: don't prefetch mark_closure bdescr when assertions are enabled. (cherry picked from commit 8f74b38148f0d8b9341099cb0edda6f7698a4369) - - - - - 8958612c by Teo Camarasu at 2024-12-06T17:20:07+01:00 rts: Allocate non-moving segments with megablocks Non-moving segments are 8 blocks long and need to be aligned. Previously we serviced allocations by grabbing 15 blocks, finding an aligned 8 block group in it and returning the rest. This proved to lead to high levels of fragmentation as a de-allocating a segment caused an 8 block gap to form, and this could not be reused for allocation. This patch introduces a segment allocator based around using entire megablocks to service segment allocations in bulk. When there are no free segments, we grab an entire megablock and fill it with aligned segments. As the megablock is free, we can easily guarantee alignment. Any unused segments are placed on a free list. It only makes sense to free segments in bulk when all of the segments in a megablock are freeable. After sweeping, we grab the free list, sort it, and find all groups of segments where they cover the megablock and free them. This introduces a period of time when free segments are not available to the mutator, but the risk that this would lead to excessive allocation is low. Right after sweep, we should have an abundance of partially full segments, and this pruning step is relatively quick. In implementing this we drop the logic that kept NONMOVING_MAX_FREE segments on the free list. We also introduce an eventlog event to log the amount of pruned/retained free segments. See Note [Segment allocation strategy] Resolves #24150 ------------------------- Metric Decrease: T13253 T19695 ------------------------- (cherry picked from commit 5e36e7ced6a8aa183762e1df97da20b460e19bcf) - - - - - 19 changed files: - docs/users_guide/9.10.2-notes.rst - docs/users_guide/eventlog-formats.rst - ghc/GHCi/UI.hs - rts/RtsStartup.c - rts/Trace.c - rts/Trace.h - rts/eventlog/EventLog.c - rts/eventlog/EventLog.h - rts/gen_event_types.py - rts/include/rts/storage/Block.h - rts/include/stg/SMP.h - rts/sm/BlockAlloc.c - rts/sm/GC.c - rts/sm/NonMoving.c - rts/sm/NonMoving.h - rts/sm/NonMovingAllocate.c - rts/sm/NonMovingMark.c - rts/sm/Sanity.c - testsuite/tests/rts/atomicinc.c Changes: ===================================== docs/users_guide/9.10.2-notes.rst ===================================== @@ -29,6 +29,7 @@ WebAssembly backend GHCi ~~~~ +- When using XDG directories ``.ghci_history`` now uses the ``$XDG_DATA_HOME`` variable as expected. (#24266) Runtime system ~~~~~~~~~~~~~~ @@ -38,6 +39,9 @@ Runtime system Users who have fine-tuned the :rts-flag:`-F ⟨factor⟩`, :rts-flag:`-Fd ⟨factor⟩`, or :rts-flag:`-O ⟨size⟩` flags, and use the non-moving GC, should see if adjustments are needed in light of this change. +- Reduce fragmentation incurred by the nonmoving GC's segment allocator. In one application this reduced resident set size by 26%. See :ghc-ticket:`24150`. + + ``base`` library ~~~~~~~~~~~~~~~~ ===================================== docs/users_guide/eventlog-formats.rst ===================================== @@ -855,6 +855,9 @@ A typical non-moving collection cycle will look something like the following: 12. A :event-type:`NONMOVING_HEAP_CENSUS` event will be emitted describing the fragmentation state of the non-moving heap. +13. A :event-type:`NONMOVING_PRUNED_SEGMENTS` event will be emitted showing + information about freeing of segments. + .. event-type:: CONC_MARK_BEGIN @@ -929,6 +932,17 @@ heap. Describes the occupancy of the *blk_sz* sub-heap. +.. event-type:: NONMOVING_PRUNED_SEGMENTS + + :tag: 208 + :length: fixed + :field Word32: number of pruned segments. + :field Word32: number of segments remaining on the free list. + + Report the amount of segments pruned and those remaining on the nonmoving + heap's segment free list. Segments will be retained on the free list until + the entire megablock containing them can be freed. + .. _ticky-event-format: Ticky counters ===================================== ghc/GHCi/UI.hs ===================================== @@ -640,30 +640,27 @@ ghciLogAction lastErrLocations old_log_action _ -> return () _ -> return () --- | Takes a file name and prefixes it with the appropriate --- GHC appdir. --- Uses ~/.ghc (getAppUserDataDirectory) if it exists --- If it doesn't, then it uses $XDG_DATA_HOME/ghc --- Earlier we always used to use ~/.ghc, but we want --- to gradually move to $XDG_DATA_HOME to respect the XDG specification --- --- As a migration strategy, we will only create new directories in --- the appropriate XDG location. However, we will use the old directory --- if it already exists. -getAppDataFile :: FilePath -> IO (Maybe FilePath) -getAppDataFile file = do - let new_path = tryIO (getXdgDirectory XdgConfig "ghc") >>= \case - Left _ -> pure Nothing - Right dir -> flip catchIO (const $ return Nothing) $ do - createDirectoryIfMissing False dir - pure $ Just $ dir file - - e_old_path <- tryIO (getAppUserDataDirectory "ghc") - case e_old_path of - Right old_path -> doesDirectoryExist old_path >>= \case - True -> pure $ Just $ old_path file - False -> new_path - Left _ -> new_path +-- | Takes a file name and prefixes it with the appropriate GHC appdir. +-- ~/.ghc (getAppUserDataDirectory) is used if it exists, or XDG directories +-- are used to respect the XDG specification. +-- As a migration strategy, currently we will only create new directories in +-- the appropriate XDG location. +getAppDataFile :: XdgDirectory -> FilePath -> IO (Maybe FilePath) +getAppDataFile xdgDir file = do + xdgAppDir <- + tryIO (getXdgDirectory xdgDir "ghc") >>= \case + Left _ -> pure Nothing + Right dir -> flip catchIO (const $ pure Nothing) $ do + createDirectoryIfMissing False dir + pure $ Just dir + appDir <- + tryIO (getAppUserDataDirectory "ghc") >>= \case + Right dir -> + doesDirectoryExist dir >>= \case + True -> pure $ Just dir + False -> pure xdgAppDir + Left _ -> pure xdgAppDir + pure $ appDir >>= \dir -> Just $ dir file runGHCi :: [(FilePath, Maybe UnitId, Maybe Phase)] -> Maybe [String] -> GHCi () runGHCi paths maybe_exprs = do @@ -671,13 +668,12 @@ runGHCi paths maybe_exprs = do let ignore_dot_ghci = gopt Opt_IgnoreDotGhci dflags - app_user_dir = liftIO $ getAppDataFile "ghci.conf" + appDataCfg = liftIO $ getAppDataFile XdgConfig "ghci.conf" - home_dir = do - either_dir <- liftIO $ tryIO (getEnv "HOME") - case either_dir of - Right home -> return (Just (home ".ghci")) - _ -> return Nothing + homeCfg = do + liftIO $ tryIO (getEnv "HOME") >>= \case + Right home -> pure $ Just $ home ".ghci" + _ -> pure Nothing canonicalizePath' :: FilePath -> IO (Maybe FilePath) canonicalizePath' fp = liftM Just (canonicalizePath fp) @@ -711,7 +707,7 @@ runGHCi paths maybe_exprs = do then pure [] else do userCfgs <- do - paths <- catMaybes <$> sequence [ app_user_dir, home_dir ] + paths <- catMaybes <$> sequence [ appDataCfg, homeCfg ] checkedPaths <- liftIO $ filterM checkFileAndDirPerms paths liftIO . fmap (nub . catMaybes) $ mapM canonicalizePath' checkedPaths @@ -798,12 +794,12 @@ runGHCiInput f = do dflags <- getDynFlags let ghciHistory = gopt Opt_GhciHistory dflags let localGhciHistory = gopt Opt_LocalGhciHistory dflags - currentDirectory <- liftIO $ getCurrentDirectory + currentDirectory <- liftIO getCurrentDirectory histFile <- case (ghciHistory, localGhciHistory) of - (True, True) -> return (Just (currentDirectory ".ghci_history")) - (True, _) -> liftIO $ getAppDataFile "ghci_history" - _ -> return Nothing + (True, True) -> pure $ Just $ currentDirectory ".ghci_history" + (True, _) -> liftIO $ getAppDataFile XdgData "ghci_history" + _ -> pure Nothing runInputT (setComplete ghciCompleteWord $ defaultSettings {historyFile = histFile}) ===================================== rts/RtsStartup.c ===================================== @@ -454,7 +454,7 @@ hs_exit_(bool wait_foreign) uint32_t g, i; // N.B. atomic_dec returns the new value. - StgInt init_count = (StgInt)atomic_dec(&hs_init_count); + StgInt init_count = (StgInt)atomic_dec(&hs_init_count, 1); if (init_count > 0) { // ignore until it's the last one return; ===================================== rts/Trace.c ===================================== @@ -926,6 +926,12 @@ void traceNonmovingHeapCensus(uint16_t blk_size, postNonmovingHeapCensus(blk_size, census); } +void traceNonmovingPrunedSegments(uint32_t pruned_segments, uint32_t free_segments) +{ + if (eventlog_enabled && TRACE_nonmoving_gc) + postNonmovingPrunedSegments(pruned_segments, free_segments); +} + void traceThreadStatus_ (StgTSO *tso USED_IF_DEBUG) { #if defined(DEBUG) ===================================== rts/Trace.h ===================================== @@ -331,6 +331,7 @@ void traceConcSweepEnd(void); void traceConcUpdRemSetFlush(Capability *cap); void traceNonmovingHeapCensus(uint16_t blk_size, const struct NonmovingAllocCensus *census); +void traceNonmovingPrunedSegments(uint32_t pruned_segments, uint32_t free_segments); void traceIPE(const InfoProvEnt *ipe); void flushTrace(void); ===================================== rts/eventlog/EventLog.c ===================================== @@ -1154,6 +1154,15 @@ void postNonmovingHeapCensus(uint16_t blk_size, RELEASE_LOCK(&eventBufMutex); } +void postNonmovingPrunedSegments(uint32_t pruned_segments, uint32_t free_segments) +{ + ACQUIRE_LOCK(&eventBufMutex); + postEventHeader(&eventBuf, EVENT_NONMOVING_PRUNED_SEGMENTS); + postWord32(&eventBuf, pruned_segments); + postWord32(&eventBuf, free_segments); + RELEASE_LOCK(&eventBufMutex); +} + void closeBlockMarker (EventsBuf *ebuf) { if (ebuf->marker) ===================================== rts/eventlog/EventLog.h ===================================== @@ -196,6 +196,7 @@ void postConcUpdRemSetFlush(Capability *cap); void postConcMarkEnd(StgWord32 marked_obj_count); void postNonmovingHeapCensus(uint16_t blk_size, const struct NonmovingAllocCensus *census); +void postNonmovingPrunedSegments(uint32_t pruned_segments, uint32_t free_segments); #if defined(TICKY_TICKY) void postTickyCounterDefs(StgEntCounter *p); ===================================== rts/gen_event_types.py ===================================== @@ -132,6 +132,7 @@ event_types = [ EventType(205, 'CONC_SWEEP_END', [], 'End concurrent sweep phase'), EventType(206, 'CONC_UPD_REM_SET_FLUSH', [CapNo], 'Update remembered set flushed'), EventType(207, 'NONMOVING_HEAP_CENSUS', [Word16, Word32, Word32, Word32], 'Nonmoving heap census'), + EventType(208, 'NONMOVING_PRUNED_SEGMENTS', [Word32, Word32], 'Report the amount of segments pruned and remaining on the free list.'), # Ticky-ticky profiling EventType(210, 'TICKY_COUNTER_DEF', VariableLength, 'Ticky-ticky entry counter definition'), ===================================== rts/include/rts/storage/Block.h ===================================== @@ -323,6 +323,10 @@ bdescr *allocGroupOnNode(uint32_t node, W_ n); // bdescr *allocAlignedGroupOnNode(uint32_t node, W_ n); +// Allocate a MBlock worth of `n` block sized chunks aligned at `n`-block boundry. +// This returns a linked list of `bdescr` of length `BLOCKS_PER_MBLOCK / n`. +bdescr *allocMBlockAlignedGroupOnNode(uint32_t node, W_ n); + EXTERN_INLINE bdescr* allocBlockOnNode(uint32_t node); EXTERN_INLINE bdescr* allocBlockOnNode(uint32_t node) { ===================================== rts/include/stg/SMP.h ===================================== @@ -82,13 +82,13 @@ EXTERN_INLINE StgWord cas_seq_cst_relaxed(StgVolatilePtr p, StgWord o, StgWord n EXTERN_INLINE StgWord atomic_inc(StgVolatilePtr p, StgWord n); /* - * Atomic decrement + * Atomic subtraction by the provided quantity. * - * atomic_dec(p) { - * return --(*p); + * atomic_dec(p, n) { + * return ((*p) -= n); * } */ -EXTERN_INLINE StgWord atomic_dec(StgVolatilePtr p); +EXTERN_INLINE StgWord atomic_dec(StgVolatilePtr p, StgWord n); /* * Busy-wait nop: this is a hint to the CPU that we are currently in a @@ -479,9 +479,9 @@ atomic_inc(StgVolatilePtr p, StgWord incr) } EXTERN_INLINE StgWord -atomic_dec(StgVolatilePtr p) +atomic_dec(StgVolatilePtr p, StgWord decr) { - return __atomic_sub_fetch(p, 1, __ATOMIC_SEQ_CST); + return __atomic_sub_fetch(p, decr, __ATOMIC_SEQ_CST); } /* @@ -628,9 +628,9 @@ atomic_inc(StgVolatilePtr p, StgWord incr) } INLINE_HEADER StgWord -atomic_dec(StgVolatilePtr p) +atomic_dec(StgVolatilePtr p, StgWord decr) { - return --(*p); + return ((*p) -= decr); } #endif ===================================== rts/sm/BlockAlloc.c ===================================== @@ -394,6 +394,53 @@ split_block_low (bdescr *bd, W_ n) } +// A variant of `split_block_high` where we keep both blocks. +// The returned block has size `n`, which is split off `bd`. +static bdescr * +split_block_high_no_free (bdescr *bd, W_ n) +{ + ASSERT(bd->blocks > n); + + bdescr* ret = bd + bd->blocks - n; // take n blocks off the end + ret->blocks = n; + ret->start = ret->free = bd->start + (bd->blocks - n)*BLOCK_SIZE_W; + ret->link = NULL; + + bd->blocks -= n; + + setup_tail(ret); + setup_tail(bd); + + return ret; +} + +// Allocate a MBlock worth of `n` block sized chunks aligned at `n`-block boundry. +// This returns a linked list of `bdescr` of length `BLOCKS_PER_MBLOCK / n`. +// We assume relevant locks are held. +bdescr * +allocMBlockAlignedGroupOnNode(uint32_t node, W_ n) +{ + bdescr *bd = allocGroupOnNode(node, BLOCKS_PER_MBLOCK); + + // Free unaligned blocks, as we can't use these. + ASSERT(bd->blocks == BLOCKS_PER_MBLOCK); + bd = split_block_high(bd, bd->blocks - bd->blocks % n); + ASSERT(bd->blocks % n == 0); + + bdescr *last = NULL; + bdescr *chunk = NULL; + // Chain the aligned groups together into a linked-list + while (bd->blocks > n) { + chunk = split_block_high_no_free(bd, n); + chunk->link = last; + last = chunk; + } + bd->link = chunk; + + return bd; +} + + /* Find a fitting block for the allocation request in the given free list. Returns: - not NULL: when an exact match was found in the free list. ===================================== rts/sm/GC.c ===================================== @@ -1318,7 +1318,7 @@ dec_running (void) ACQUIRE_LOCK(&gc_running_mutex); #endif - StgWord r = atomic_dec(&gc_running_threads); + StgWord r = atomic_dec(&gc_running_threads, 1); #if defined(THREADED_RTS) if (r == 0) { ===================================== rts/sm/NonMoving.c ===================================== @@ -248,6 +248,8 @@ static void nonmovingBumpEpoch(void) { * * - Note [Allocator sizes] goes into detail about our choice of allocator sizes. * + * - Note [Segment allocation strategy] explains our segment allocation strategy. + * * [ueno 2016]: * Katsuhiro Ueno and Atsushi Ohori. 2016. A fully concurrent garbage * collector for functional programs on multicore processors. SIGPLAN Not. 51, @@ -560,6 +562,22 @@ static void nonmovingBumpEpoch(void) { * * See #23340 * + * Note [Segment allocation strategy] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Non-moving segments must be aligned. In order, to efficiently service these + * allocations, we allocate segments in bulk + * We allocate an entire megablocks worth of segments at once. + * All unused segments are placed on the `nonmovingHeap.free` list. + * + * Symmetrically we only de-allocate segments if all the segments in a megablock are free-able, ie, + * are on `nonmovingHeap.free`. We prune the free list in `nonmovingPruneFreeSegmentList`, + * called during concurrent sweep phase. + * Note that during pruning of the free list, free segments are not available for use by the + * mutator. This might lead to extra allocation of segments. But the risk is low as just after sweep + * there is usually a large amount of partially full segments, and pruning the free list is quite + * quick. + * + * See #24150 */ memcount nonmoving_segment_live_words = 0; @@ -578,19 +596,6 @@ static void nonmovingExitConcurrentWorker(void); // Add a segment to the free list. void nonmovingPushFreeSegment(struct NonmovingSegment *seg) { - // See Note [Live data accounting in nonmoving collector]. - if (RELAXED_LOAD(&nonmovingHeap.n_free) > NONMOVING_MAX_FREE) { - bdescr *bd = Bdescr((StgPtr) seg); - ACQUIRE_SM_LOCK; - ASSERT(oldest_gen->n_blocks >= bd->blocks); - ASSERT(oldest_gen->n_words >= BLOCK_SIZE_W * bd->blocks); - oldest_gen->n_blocks -= bd->blocks; - oldest_gen->n_words -= BLOCK_SIZE_W * bd->blocks; - freeGroup(bd); - RELEASE_SM_LOCK; - return; - } - SET_SEGMENT_STATE(seg, FREE); while (true) { struct NonmovingSegment *old = nonmovingHeap.free; @@ -601,6 +606,110 @@ void nonmovingPushFreeSegment(struct NonmovingSegment *seg) __sync_add_and_fetch(&nonmovingHeap.n_free, 1); } +static int +cmp_segment_ptr (const void *x, const void *y) +{ + const struct NonMovingSegment *p1 = *(const struct NonMovingSegment**)x; + const struct NonMovingSegment *p2 = *(const struct NonMovingSegment**)y; + if (p1 > p2) return +1; + else if (p1 < p2) return -1; + else return 0; +} + +// Prune the free list of segments that can be freed. +// Segments can be freed if all segments from a mblock are on the free list. +void nonmovingPruneFreeSegmentList(void) +{ + trace(TRACE_nonmoving_gc, "Pruning free segment list."); + // Atomically grab the entire free list. + struct NonmovingSegment *free; + size_t length; + while (true) { + free = ACQUIRE_LOAD(&nonmovingHeap.free); + length = ACQUIRE_LOAD(&nonmovingHeap.n_free); + if (cas((StgVolatilePtr) &nonmovingHeap.free, + (StgWord) free, + (StgWord) NULL) == (StgWord) free) { + atomic_dec((StgVolatilePtr) &nonmovingHeap.n_free, length); + break; + } + // Save the current free list so the sanity checker can see these segments. + nonmovingHeap.saved_free = free; + } + + // Sort the free list by address. + struct NonmovingSegment **sorted = stgMallocBytes(sizeof(struct NonmovingSegment*) * length, "sorted free segment list"); + for(size_t i = 0; ilink; + } + // we should have reached the end of the free list + ASSERT(free == NULL); + + qsort(sorted, length, sizeof(struct NonmovingSegment*), cmp_segment_ptr); + + // Walk the sorted list and either: + // - free segments if the entire megablock is free + // - put it back on the free list + size_t new_length = 0; + size_t free_in_megablock = 0; + // iterate through segments by megablock + for(size_t i = 0; ilink = last; + new_length++; + } + } else { + // the megablock is free, so let's free all the segments. + ACQUIRE_SM_LOCK; + for(size_t j = 0; j < free_in_megablock;j++){ + bdescr *bd = Bdescr((StgPtr)sorted[i+j]); + freeGroup(bd); + } + RELEASE_SM_LOCK; + } + } + stgFree(sorted); + // If we have any segments left over, then put them back on the free list. + if(free) { + struct NonmovingSegment* tail = free; + while(tail->link) { + tail = tail->link; + } + while (true) { + struct NonmovingSegment* rest = ACQUIRE_LOAD(&nonmovingHeap.free); + tail->link = rest; + if (cas((StgVolatilePtr) &nonmovingHeap.free, + (StgWord) rest, + (StgWord) free) == (StgWord) rest) { + __sync_add_and_fetch(&nonmovingHeap.n_free, new_length); + break; + } + } + } + size_t pruned_segments = length - new_length; + // See Note [Live data accounting in nonmoving collector]. + oldest_gen->n_blocks -= pruned_segments * NONMOVING_SEGMENT_BLOCKS; + oldest_gen->n_words -= pruned_segments * NONMOVING_SEGMENT_SIZE; + nonmovingHeap.saved_free = NULL; + debugTrace(DEBUG_nonmoving_gc, + "Pruned %d free segments, leaving %d on the free segment list.", + pruned_segments, new_length); + traceNonmovingPrunedSegments(pruned_segments, new_length); + trace(TRACE_nonmoving_gc, "Finished pruning free segment list."); + +} + void nonmovingInitAllocator(struct NonmovingAllocator* alloc, uint16_t block_size) { *alloc = (struct NonmovingAllocator) @@ -1216,6 +1325,7 @@ concurrent_marking: nonmovingSweepStableNameTable(); nonmovingSweep(); + nonmovingPruneFreeSegmentList(); ASSERT(nonmovingHeap.sweep_list == NULL); debugTrace(DEBUG_nonmoving_gc, "Finished sweeping."); traceConcSweepEnd(); ===================================== rts/sm/NonMoving.h ===================================== @@ -119,16 +119,16 @@ extern uint8_t nonmoving_alloca_dense_cnt; // NONMOVING_SEGMENT_SIZE (in bytes) extern uint8_t nonmoving_alloca_cnt; -// maximum number of free segments to hold on to -#define NONMOVING_MAX_FREE 16 - struct NonmovingHeap { struct NonmovingAllocator *allocators; - // free segment list. This is a cache where we keep up to - // NONMOVING_MAX_FREE segments to avoid thrashing the block allocator. + // free segment list. This is a cache where we keep segments + // belonging to megablocks that are only partially free. // Note that segments in this list are still counted towards // oldest_gen->n_blocks. struct NonmovingSegment *free; + // saved free segment list, so the sanity checker can + // see the segments while the free list is being pruned. + struct NonmovingSegment *saved_free; // how many segments in free segment list? accessed atomically. unsigned int n_free; @@ -172,6 +172,7 @@ void nonmovingCollect(StgWeak **dead_weaks, bool concurrent); void nonmovingPushFreeSegment(struct NonmovingSegment *seg); +void nonmovingPruneFreeSegmentList(void); INLINE_HEADER unsigned long log2_ceil(unsigned long x) { ===================================== rts/sm/NonMovingAllocate.c ===================================== @@ -65,19 +65,42 @@ static struct NonmovingSegment *nonmovingAllocSegment(enum AllocLockMode mode, u struct NonmovingSegment *ret; ret = nonmovingPopFreeSegment(); - // Nothing in the free list, allocate a new segment... + // Nothing in the free list, allocate a new segment. + // We allocate a full megablock, and add spare segments to our free list. if (ret == NULL) { acquire_alloc_lock(mode); - bdescr *bd = allocAlignedGroupOnNode(node, NONMOVING_SEGMENT_BLOCKS); - // See Note [Live data accounting in nonmoving collector]. - oldest_gen->n_blocks += bd->blocks; - oldest_gen->n_words += BLOCK_SIZE_W * bd->blocks; + // Another thread might have allocated while we were waiting for the lock. + ret = nonmovingPopFreeSegment(); + if (ret != NULL) { + release_alloc_lock(mode); + // Check alignment + ASSERT(((uintptr_t)ret % NONMOVING_SEGMENT_SIZE) == 0); + return ret; + } + + bdescr *bd = allocMBlockAlignedGroupOnNode(node, NONMOVING_SEGMENT_BLOCKS); release_alloc_lock(mode); - for (StgWord32 i = 0; i < bd->blocks; ++i) { + W_ alloc_blocks = BLOCKS_PER_MBLOCK - (BLOCKS_PER_MBLOCK % NONMOVING_SEGMENT_BLOCKS); + + // See Note [Live data accounting in nonmoving collector]. + oldest_gen->n_blocks += alloc_blocks; + oldest_gen->n_words += BLOCK_SIZE_W * alloc_blocks; + + for (StgWord32 i = 0; i < alloc_blocks; ++i) { initBdescr(&bd[i], oldest_gen, oldest_gen); bd[i].flags = BF_NONMOVING; } + + // Push all but the last segment to the free segment list. + while(bd->link) { + bdescr *next_bd = bd->link; + bd->link = NULL; + nonmovingPushFreeSegment((struct NonmovingSegment *)bd->start); + bd = next_bd; + } + + // Use the last segment to service the allocation. ret = (struct NonmovingSegment *)bd->start; } ===================================== rts/sm/NonMovingMark.c ===================================== @@ -919,7 +919,9 @@ static MarkQueueEnt markQueuePop (MarkQueue *q) // MarkQueueEnt encoding always places the pointer to the object to be // marked first. prefetchForRead(&new.mark_closure.p->header.info); +#if !defined(ASSERTS_ENABLED) prefetchForRead(Bdescr((StgPtr) new.mark_closure.p)); +#endif q->prefetch_queue[i] = new; i = (i + 1) % MARK_PREFETCH_QUEUE_DEPTH; } ===================================== rts/sm/Sanity.c ===================================== @@ -1238,6 +1238,7 @@ countNonMovingHeap(struct NonmovingHeap *heap) } ret += countNonMovingSegments(heap->sweep_list); ret += countNonMovingSegments(heap->free); + ret += countNonMovingSegments(heap->saved_free); return ret; } ===================================== testsuite/tests/rts/atomicinc.c ===================================== @@ -11,7 +11,7 @@ int main(int argc, char *argv[]) CHECK(j == 1); CHECK(i == 1); - j = atomic_dec(&i); + j = atomic_dec(&i,1); CHECK(j == 0); CHECK(i == 0); View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6986a1ef635b1a42761b50fdf490b0ba99f99f94...8958612c274531bfe8fd3a033061586610f2c574 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6986a1ef635b1a42761b50fdf490b0ba99f99f94...8958612c274531bfe8fd3a033061586610f2c574 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 20:16:29 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 15:16:29 -0500 Subject: [Git][ghc/ghc][wip/T25560] 3 commits: ghc-internal: Disallow setNumCapabilities beyond MAX_N_CAPABILITIES Message-ID: <67535b9d6c93d_5297d72ae70481eb@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 26f45603 by Ben Gamari at 2024-12-06T15:16:23-05:00 ghc-internal: Disallow setNumCapabilities beyond MAX_N_CAPABILITIES Throw an exception instead of segfault. Fixes #25560. - - - - - fb7d665e by Ben Gamari at 2024-12-06T15:16:23-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 090cc534 by Ben Gamari at 2024-12-06T15:16:23-05:00 testsuite: Add test for #25560 - - - - - 4 changed files: - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - rts/Capability.c - + testsuite/tests/rts/T25560.hs - testsuite/tests/rts/all.T Changes: ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -381,8 +380,15 @@ to avoid contention with other processes in the machine. -} setNumCapabilities :: Int -> IO () setNumCapabilities i - | i <= 0 = failIO $ "setNumCapabilities: Capability count ("++show i++") must be positive" - | otherwise = c_setNumCapabilities (fromIntegral i) + | i <= 0 = failIO $ "setNumCapabilities: Capability count ("++show i++") must be positive" + | i > maxCaps = failIO $ "setNumCapabilities: This GHC build only supports up to "++show maxCaps++" capabilities" + | otherwise = c_setNumCapabilities (fromIntegral i) + +maxCaps :: Int +maxCaps = unsafeDupablePerformIO $ peek c_maxNumCapabilities + +foreign import ccall safe "&maxNumCapabilities" + c_maxNumCapabilities :: Ptr Int foreign import ccall safe "setNumCapabilities" c_setNumCapabilities :: CUInt -> IO () @@ -394,13 +400,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,6 +41,9 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// Referenced by GHC.Internal.Conc.Sync +const StgInt maxNumCapabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,4 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) +test('T25560', exit_code(1), compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bb62c17c93276aba424b3142aa6321726cc1b014...090cc534766667ae0155e12a3ab766641d78be04 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bb62c17c93276aba424b3142aa6321726cc1b014...090cc534766667ae0155e12a3ab766641d78be04 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 20:16:54 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 15:16:54 -0500 Subject: [Git][ghc/ghc][wip/T25560] testsuite: Add test for #25560 Message-ID: <67535bb671104_5297d71aafc48732@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 4a568e9f by Ben Gamari at 2024-12-06T15:16:47-05:00 testsuite: Add test for #25560 - - - - - 3 changed files: - + testsuite/tests/rts/T25560.hs - + testsuite/tests/rts/T25560.stderr - testsuite/tests/rts/all.T Changes: ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/T25560.stderr ===================================== @@ -0,0 +1,3 @@ +T25560: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException: + +user error (setNumCapabilities: This GHC build only supports up to 1 capabilities) ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,4 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) +test('T25560', exit_code(1), compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4a568e9f9e76f2c963f579878d4e49bac7e9bcbd -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4a568e9f9e76f2c963f579878d4e49bac7e9bcbd You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 21:56:31 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Fri, 06 Dec 2024 16:56:31 -0500 Subject: [Git][ghc/ghc][master] 4 commits: ghc-internal: Drop GHC.Internal.Data.Enum Message-ID: <6753730f59116_5297d106b6385639f@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - 10 changed files: - libraries/base/base.cabal.in - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/Data/Enum.hs → libraries/base/src/Data/Bounded.hs - libraries/base/src/Data/Enum.hs - libraries/ghc-internal/ghc-internal.cabal.in - libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs - 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 Changes: ===================================== libraries/base/base.cabal.in ===================================== @@ -46,8 +46,10 @@ Library , Data.Bifoldable1 , Data.Bifunctor , Data.Bitraversable + , Data.Bounded , Data.Char , Data.Complex + , Data.Enum , Data.Fixed , Data.Foldable1 , Data.Functor.Classes @@ -95,7 +97,6 @@ Library , Data.Dynamic , Data.Either , Data.Eq - , Data.Enum , Data.Foldable , Data.Function , Data.Functor ===================================== libraries/base/changelog.md ===================================== @@ -7,6 +7,8 @@ * `Data.List.NonEmpty.{init,last,tails1}` are now defined using only total functions (rather than partial ones). ([CLC proposal #293](https://github.com/haskell/core-libraries-committee/issues/293)) ## 4.21.0.0 *TBA* + * Introduce `Data.Bounded` module exporting the `Bounded` typeclass (finishing [CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) + * Deprecate export of `Bounded` class from `Data.Enum` ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * `GHC.Desugar` has been deprecated and should be removed in GHC 9.14. ([CLC proposal #216](https://github.com/haskell/core-libraries-committee/issues/216)) * Add a `readTixFile` field to the `HpcFlags` record in `GHC.RTS.Flags` ([CLC proposal #276](https://github.com/haskell/core-libraries-committee/issues/276)) * Add `compareLength` to `Data.List` and `Data.List.NonEmpty` ([CLC proposal #257](https://github.com/haskell/core-libraries-committee/issues/257)) @@ -51,8 +53,9 @@ `ioError` to prevent leaking the implementation of these error functions into the callstack. -## 4.20.0.0 May 2024 +## 4.20.0.0 *May 2024* * Shipped with GHC 9.10.1 + * Introduce `Data.Enum` module exporting both `Enum` and `Bounded`. Note that the export of `Bounded` will be deprecated in a future release ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * Deprecate `GHC.Pack` ([#21461](https://gitlab.haskell.org/ghc/ghc/-/issues/21461)) * Export `foldl'` from `Prelude` ([CLC proposal #167](https://github.com/haskell/core-libraries-committee/issues/167)) * The top-level handler for uncaught exceptions now displays the output of `displayException` rather than `show` ([CLC proposal #198](https://github.com/haskell/core-libraries-committee/issues/198)) ===================================== libraries/ghc-internal/src/GHC/Internal/Data/Enum.hs → libraries/base/src/Data/Bounded.hs ===================================== @@ -1,22 +1,25 @@ +{-# LANGUAGE Safe #-} {-# LANGUAGE NoImplicitPrelude #-} ----------------------------------------------------------------------------- -- | --- Module : GHC.Internal.Data.Enum +-- Module : Data.Bounded -- Copyright : (c) The University of Glasgow, 1992-2002 -- License : see libraries/base/LICENSE -- --- Maintainer : ghc-devs at haskell.org +-- Maintainer : cvs-ghc at haskell.org -- Stability : stable -- Portability : non-portable (GHC extensions) -- --- The 'Enum' and 'Bounded' classes. +-- The 'Bounded' class. +-- +-- @since 4.22.0.0 -- ----------------------------------------------------------------------------- -module GHC.Internal.Data.Enum +module Data.Bounded ( Bounded(..) - , Enum(..) ) where -import GHC.Internal.Enum +import GHC.Enum + ===================================== libraries/base/src/Data/Enum.hs ===================================== @@ -1,7 +1,8 @@ {-# LANGUAGE Safe #-} +{-# LANGUAGE NoImplicitPrelude #-} +----------------------------------------------------------------------------- -- | --- -- Module : Data.Enum -- Copyright : (c) The University of Glasgow, 1992-2002 -- License : see libraries/base/LICENSE @@ -10,12 +11,16 @@ -- Stability : stable -- Portability : non-portable (GHC extensions) -- --- The 'Enum' and 'Bounded' classes. +-- The 'Enum' class. +-- +-- @since 4.20.0.0 -- +----------------------------------------------------------------------------- module Data.Enum - (Bounded(..), - Enum(..) - ) where + ( Enum(..) + , {-# DEPRECATED "Bounded should be imported from Data.Bounded" #-} + Bounded(..) + ) where -import GHC.Internal.Data.Enum \ No newline at end of file +import GHC.Internal.Enum ===================================== libraries/ghc-internal/ghc-internal.cabal.in ===================================== @@ -117,7 +117,6 @@ Library GHC.Internal.Data.Dynamic GHC.Internal.Data.Either GHC.Internal.Data.Eq - GHC.Internal.Data.Enum GHC.Internal.Data.Foldable GHC.Internal.Data.Function GHC.Internal.Data.Functor ===================================== libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs ===================================== @@ -18,7 +18,7 @@ import GHC.Generics (Generic) import GHC.Internal.Base import GHC.Internal.Show import GHC.Internal.Generics -import GHC.Internal.Data.Enum +import GHC.Internal.Enum #endif -- | The language extensions known to GHC. ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11536,10 +11544,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11564,6 +11568,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11618,10 +11626,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11634,6 +11638,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -14571,10 +14579,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -14599,6 +14603,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -14653,10 +14661,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -14669,6 +14673,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11800,10 +11808,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11828,6 +11832,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11882,10 +11890,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11898,6 +11902,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11536,10 +11544,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11564,6 +11568,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11618,10 +11626,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11634,6 +11638,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/cad6fede4252aeff3a0a93e81c2188a825ab39c6...dd7ca93903eba8c63261656ca3d245f9e8baa662 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/cad6fede4252aeff3a0a93e81c2188a825ab39c6...dd7ca93903eba8c63261656ca3d245f9e8baa662 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 21:57:00 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Fri, 06 Dec 2024 16:57:00 -0500 Subject: [Git][ghc/ghc][master] base: Reintroduce {Show,Enum} IoSubSystem Message-ID: <6753732cca58f_5297d1299c70593f3@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 7 changed files: - libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs - 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 Changes: ===================================== libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs ===================================== @@ -1,6 +1,7 @@ {-# LANGUAGE Trustworthy #-} -{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE StandaloneDeriving #-} ----------------------------------------------------------------------------- -- | @@ -34,6 +35,8 @@ module GHC.Internal.IO.SubSystem ( ) where import GHC.Internal.Base +import GHC.Internal.Show +import GHC.Internal.Enum #if defined(mingw32_HOST_OS) import GHC.Internal.IO.Unsafe @@ -55,6 +58,10 @@ data IoSubSystem -- native APIs for I/O, including IOCP and RIO. deriving (Eq) +-- N.B. These are currently unused by GHC but is needed for stability of @base at . +deriving instance Enum IoSubSystem +deriving instance Show IoSubSystem + -- | Conditionally execute an action depending on the configured I/O subsystem. -- On POSIX systems always execute the first action. -- On Windows execute the second action if WINIO as active, otherwise fall back to ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -11700,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12522,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -14735,6 +14735,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -15552,6 +15553,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.JS.Prim.JSException -- Defined in ‘GHC.Internal.JS.Prim’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -11965,6 +11965,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12797,6 +12798,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IO.Windows.Handle.CONSOLE_READCONSOLE_CONTROL -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.NativeHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.ConsoleHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -11700,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12522,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -10714,6 +10714,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10767,6 +10768,7 @@ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.ProfFlags -- Defined in instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.RTSFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TickyFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TraceFlags -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.Stats.GCDetails -- Defined in ‘GHC.Internal.Stats’ instance GHC.Internal.Show.Show GHC.Internal.Stats.RTSStats -- Defined in ‘GHC.Internal.Stats’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 ===================================== @@ -10717,6 +10717,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10770,6 +10771,7 @@ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.ProfFlags -- Defined in instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.RTSFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TickyFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TraceFlags -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.Stats.GCDetails -- Defined in ‘GHC.Internal.Stats’ instance GHC.Internal.Show.Show GHC.Internal.Stats.RTSStats -- Defined in ‘GHC.Internal.Stats’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/dfd1db48aaa1ee6c109e9a05ce34672418f17f59 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/dfd1db48aaa1ee6c109e9a05ce34672418f17f59 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 22:13:36 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 17:13:36 -0500 Subject: [Git][ghc/ghc][wip/bco-name] rts: Annotate BCOs with their Name Message-ID: <67537710779e9_5297d15ff6bc59989@gitlab.mail> Ben Gamari pushed to branch wip/bco-name at Glasgow Haskell Compiler / GHC Commits: 9bb9bee0 by Ben Gamari at 2024-12-06T17:13:18-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 11 changed files: - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/StgToByteCode.hs - compiler/ghc.cabal.in - docs/users_guide/debugging.rst - rts/Disassembler.c - rts/Interpreter.c - rts/include/rts/Bytecodes.h - rts/rts.cabal Changes: ===================================== compiler/GHC/ByteCode/Asm.hs ===================================== @@ -106,7 +106,7 @@ assembleBCOs interp profile proto_bcos tycons top_strs modbreaks spt_entries = d bcos' <- mallocStrings interp bcos return CompiledByteCode { bc_bcos = bcos' - , bc_itbls = itblenv + , bc_itbls = itblenv , bc_ffis = concatMap protoBCOFFIs proto_bcos , bc_strs = top_strs , bc_breaks = modbreaks @@ -178,11 +178,12 @@ assembleOneBCO interp profile pbco = do return ubco' assembleBCO :: Platform -> ProtoBCO Name -> IO UnlinkedBCO -assembleBCO platform (ProtoBCO { protoBCOName = nm - , protoBCOInstrs = instrs - , protoBCOBitmap = bitmap - , protoBCOBitmapSize = bsize - , protoBCOArity = arity }) = do +assembleBCO platform + (ProtoBCO { protoBCOName = nm + , protoBCOInstrs = instrs + , protoBCOBitmap = bitmap + , protoBCOBitmapSize = bsize + , protoBCOArity = arity }) = do -- pass 1: collect up the offsets of the local labels. let asm = mapM_ (assembleI platform) instrs @@ -527,6 +528,10 @@ assembleI platform i = case i of , SmallOp tickx, SmallOp infox , Op np ] +#if MIN_VERSION_rts(1,0,3) + BCO_NAME name -> do np <- lit [BCONPtrStr name] + emit bci_BCO_NAME [Op np] +#endif where literal (LitLabel fs _) = litlabel fs ===================================== compiler/GHC/ByteCode/Instr.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -funbox-strict-fields #-} @@ -27,6 +27,8 @@ import GHC.Runtime.Heap.Layout ( StgWord ) import Data.Int import Data.Word +import Data.ByteString (ByteString) + import GHC.Stack.CCS (CostCentre) import GHC.Stg.Syntax @@ -229,6 +231,12 @@ data BCInstr !Word16 -- breakpoint info index (RemotePtr CostCentre) +#if MIN_VERSION_rts(1,0,3) + -- | A "meta"-instruction for recording the name of a BCO for debugging purposes. + -- These are ignored by the interpreter but helpfully printed by the disassmbler. + | BCO_NAME !ByteString +#endif + -- ----------------------------------------------------------------------------- -- Printing bytecode instructions @@ -383,6 +391,9 @@ instance Outputable BCInstr where <+> text "" <+> ppr tickx <+> text "" <+> ppr infox <+> text "" +#if MIN_VERSION_rts(1,0,3) + ppr (BCO_NAME nm) = text "BCO_NAME" <+> text (show nm) +#endif @@ -487,3 +498,6 @@ bciStackUse SLIDE{} = 0 bciStackUse MKAP{} = 0 bciStackUse MKPAP{} = 0 bciStackUse PACK{} = 1 -- worst case is PACK 0 words +#if MIN_VERSION_rts(1,0,3) +bciStackUse BCO_NAME{} = 0 +#endif ===================================== compiler/GHC/Driver/Flags.hs ===================================== @@ -573,6 +573,7 @@ data GeneralFlag | Opt_DoAsmLinting | Opt_DoAnnotationLinting | Opt_DoBoundsChecking + | Opt_AddBcoName | Opt_NoLlvmMangler -- hidden flag | Opt_FastLlvm -- hidden flag | Opt_NoTypeableBinds ===================================== compiler/GHC/Driver/Session.hs ===================================== @@ -2532,6 +2532,7 @@ fFlagsDeps = [ flagSpec "catch-nonexhaustive-cases" Opt_CatchNonexhaustiveCases, flagSpec "alignment-sanitisation" Opt_AlignmentSanitisation, flagSpec "check-prim-bounds" Opt_DoBoundsChecking, + flagSpec "add-bco-name" Opt_AddBcoName, flagSpec "num-constant-folding" Opt_NumConstantFolding, flagSpec "core-constant-folding" Opt_CoreConstantFolding, flagSpec "fast-pap-calls" Opt_FastPAPCalls, ===================================== compiler/GHC/StgToByteCode.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} @@ -81,6 +81,7 @@ import GHC.Unit.Home.ModInfo (lookupHpt) import Data.Array import Data.Coerce (coerce) import Data.ByteString (ByteString) +import qualified Data.ByteString.Char8 as BS import Data.Map (Map) import Data.IntMap (IntMap) import qualified Data.Map as Map @@ -236,7 +237,10 @@ ppBCEnv p -- Create a BCO and do a spot of peephole optimisation on the insns -- at the same time. mkProtoBCO - :: Platform + :: (Outputable name) + => Platform + -> Bool -- ^ True <=> label with @BCO_NAME@ instruction + -- see Note [BCO_NAME] -> name -> BCInstrList -> Either [CgStgAlt] (CgStgRhs) @@ -247,10 +251,10 @@ mkProtoBCO -> Bool -- ^ True <=> is a return point, rather than a function -> [FFIInfo] -> ProtoBCO name -mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis +mkProtoBCO platform _add_bco_name nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis = ProtoBCO { protoBCOName = nm, - protoBCOInstrs = maybe_with_stack_check, + protoBCOInstrs = maybe_add_bco_name $ maybe_add_stack_check peep_d, protoBCOBitmap = bitmap, protoBCOBitmapSize = fromIntegral bitmap_size, protoBCOArity = arity, @@ -258,6 +262,14 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi protoBCOFFIs = ffis } where + maybe_add_bco_name instrs + | not _add_bco_name = instrs +#if MIN_VERSION_rts(1,0,3) + | otherwise = BCO_NAME str : instrs + where + str = BS.pack $ showSDocOneLine defaultSDocContext (ppr nm) +#endif + -- Overestimate the stack usage (in words) of this BCO, -- and if >= iNTERP_STACK_CHECK_THRESH, add an explicit -- stack check. (The interpreter always does a stack check @@ -265,17 +277,17 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi -- BCO anyway, so we only need to add an explicit one in the -- (hopefully rare) cases when the (overestimated) stack use -- exceeds iNTERP_STACK_CHECK_THRESH. - maybe_with_stack_check - | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = peep_d + maybe_add_stack_check instrs + | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = instrs -- don't do stack checks at return points, -- everything is aggregated up to the top BCO -- (which must be a function). -- That is, unless the stack usage is >= AP_STACK_SPLIM, -- see bug #1466. | stack_usage >= fromIntegral iNTERP_STACK_CHECK_THRESH - = STKCHECK stack_usage : peep_d + = STKCHECK stack_usage : instrs | otherwise - = peep_d -- the supposedly common case + = instrs -- the supposedly common case -- We assume that this sum doesn't wrap stack_usage = sum (map bciStackUse peep_d) @@ -308,6 +320,7 @@ schemeTopBind (id, rhs) | Just data_con <- isDataConWorkId_maybe id, isNullaryRepDataCon data_con = do platform <- profilePlatform <$> getProfile + add_bco_name <- shouldAddBcoName -- Special case for the worker of a nullary data con. -- It'll look like this: Nil = /\a -> Nil a -- If we feed it into schemeR, we'll get @@ -316,7 +329,8 @@ schemeTopBind (id, rhs) -- by just re-using the single top-level definition. So -- for the worker itself, we must allocate it directly. -- ioToBc (putStrLn $ "top level BCO") - emitBc (mkProtoBCO platform (getName id) (toOL [PACK data_con 0, RETURN P]) + emitBc (mkProtoBCO platform add_bco_name + (getName id) (toOL [PACK data_con 0, RETURN P]) (Right rhs) 0 0 [{-no bitmap-}] False{-not alts-}) | otherwise @@ -358,6 +372,7 @@ schemeR_wrk -> BcM (ProtoBCO Name) schemeR_wrk fvs nm original_body (args, body) = do + add_bco_name <- shouldAddBcoName profile <- getProfile let platform = profilePlatform profile @@ -379,7 +394,7 @@ schemeR_wrk fvs nm original_body (args, body) bitmap = mkBitmap platform bits body_code <- schemeER_wrk sum_szsb_args p_init body - emitBc (mkProtoBCO platform nm body_code (Right original_body) + emitBc (mkProtoBCO platform add_bco_name nm body_code (Right original_body) arity bitmap_size bitmap False{-not alts-}) -- | Introduce break instructions for ticked expressions. @@ -1069,9 +1084,10 @@ doCase d s p scrut bndr alts | ubx_tuple_frame = SLIDE 0 2 `consOL` alt_final0 | otherwise = alt_final0 + add_bco_name <- shouldAddBcoName let alt_bco_name = getName bndr - alt_bco = mkProtoBCO platform alt_bco_name alt_final (Left alts) + alt_bco = mkProtoBCO platform add_bco_name alt_bco_name alt_final (Left alts) 0{-no arity-} bitmap_size bitmap True{-is alts-} scrut_code <- schemeE (d + ret_frame_size_b + save_ccs_size_b) (d + ret_frame_size_b + save_ccs_size_b) @@ -1379,7 +1395,7 @@ Note [unboxed tuple bytecodes and tuple_BCO] tupleBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name tupleBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -1398,9 +1414,9 @@ tupleBCO platform args_info args = body_code = mkSlideW 0 1 -- pop frame header `snocOL` RETURN_TUPLE -- and add it again -primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name +primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name primCallBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -2337,6 +2353,9 @@ getHscEnv = BcM $ \st -> return (st, bcm_hsc_env st) getProfile :: BcM Profile getProfile = targetProfile <$> getDynFlags +shouldAddBcoName :: BcM Bool +shouldAddBcoName = gopt Opt_AddBcoName <$> getDynFlags + emitBc :: ([FFIInfo] -> ProtoBCO Name) -> BcM (ProtoBCO Name) emitBc bco = BcM $ \st -> return (st{ffis=[]}, bco (ffis st)) ===================================== compiler/ghc.cabal.in ===================================== @@ -130,6 +130,7 @@ Library exceptions == 0.10.*, semaphore-compat, stm, + rts, ghc-boot == @ProjectVersionMunged@, ghc-heap == @ProjectVersionMunged@, ghci == @ProjectVersionMunged@ ===================================== docs/users_guide/debugging.rst ===================================== @@ -1240,8 +1240,7 @@ Other :type: dynamic :since: 9.8.1 - - default: enabled + :default: enabled At the moment, ghci disables optimizations, because not all passes are compatible with the interpreter. @@ -1254,3 +1253,16 @@ Other expressions. Those cannot be stored in breakpoints, so any free variable that refers to optimized code will not be inspectable when this flag is enabled. + +.. ghc-flag:: -fadd-bco-name + :shortdesc: Add ``BCO_NAME`` instructions in generated bytecode. + :reverse: -fno-add-bco-name + :type: dynamic + + :since: 9.14.1 + + Prefix every generated bytecode object with a ``BCO_NAME`` instruction + containing the STG name of the binding from which the BCO originated. + These are printed by the bytecode disassembler, aiding in correlating + bytecode with STG. + ===================================== rts/Disassembler.c ===================================== @@ -452,6 +452,13 @@ disInstr ( StgBCO *bco, int pc ) debugBelch("RETURN_T\n "); break; + case bci_BCO_NAME: { + const char *name = (const char*) literals[instrs[pc]]; + debugBelch("BCO_NAME \"%s\"\n ", name); + pc += 1; + break; + } + default: barf("disInstr: unknown opcode %u", (unsigned int) instr); } @@ -464,10 +471,9 @@ void disassemble( StgBCO *bco ) StgWord16* instrs = (StgWord16*)(bco->instrs->payload); StgMutArrPtrs* ptrs = bco->ptrs; uint32_t nbcs = (uint32_t)(bco->instrs->bytes / sizeof(StgWord16)); - uint32_t pc = 1; + uint32_t pc = 0; debugBelch("BCO\n" ); - pc = 0; while (pc < nbcs) { debugBelch("\t%2d: ", pc ); pc = disInstr ( bco, pc ); ===================================== rts/Interpreter.c ===================================== @@ -2087,6 +2087,10 @@ run_BCO: goto do_return_nonpointer; } + case bci_BCO_NAME: + bciPtr++; + goto nextInsn; + case bci_SWIZZLE: { W_ stkoff = BCO_GET_LARGE_ARG; StgInt n = BCO_GET_LARGE_ARG; ===================================== rts/include/rts/Bytecodes.h ===================================== @@ -112,6 +112,8 @@ #define bci_PRIMCALL 87 +#define bci_BCO_NAME 88 + /* If you need to go past 255 then you will run into the flags */ /* If you need to go below 0x0100 then you will run into the instructions */ ===================================== rts/rts.cabal ===================================== @@ -1,6 +1,6 @@ cabal-version: 3.0 name: rts -version: 1.0.2 +version: 1.0.3 synopsis: The GHC runtime system description: The GHC runtime system. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9bb9bee0001541fc62c9effca8312050d9d56bf2 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9bb9bee0001541fc62c9effca8312050d9d56bf2 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 23:05:28 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 18:05:28 -0500 Subject: [Git][ghc/ghc][wip/freebsd] 2 commits: testsuite: Skip T16992 unless in slow speed Message-ID: <67538338285f5_5297d1b8ee34646b2@gitlab.mail> Ben Gamari pushed to branch wip/freebsd at Glasgow Haskell Compiler / GHC Commits: 838bca2c by Ben Gamari at 2024-12-06T18:05:12-05:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - 0bc18c68 by Ben Gamari at 2024-12-06T18:05:12-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 3 changed files: - .gitlab/ci.sh - libraries/ghc-compact/tests/all.T - testsuite/driver/testlib.py Changes: ===================================== .gitlab/ci.sh ===================================== @@ -960,7 +960,7 @@ if [ "${CI_COMMIT_BRANCH:-}" == "master" ] && [ "${CI_PROJECT_PATH:-}" == "ghc/ fi fi if [ -n "${IGNORE_PERF_FAILURES:-}" ]; then - RUNTEST_ARGS="--ignore-perf-failures=$IGNORE_PERF_FAILURES" + RUNTEST_ARGS=( $RUNTEST_ARGS "--ignore-perf-failures=$IGNORE_PERF_FAILURES" ) fi if [[ -z ${BIGNUM_BACKEND:-} ]]; then BIGNUM_BACKEND=gmp; fi ===================================== libraries/ghc-compact/tests/all.T ===================================== @@ -28,5 +28,8 @@ test('T18757', omit_ghci, compile_and_run, ['']) # N.B. Sanity check times out due to large list. test('T16992', [when(wordsize(32), skip), # Resource limit exceeded on 32-bit high_memory_usage, + # This test has extraordinary memory requirement, + # skip unless testing slow speed + unless(slow(), skip), run_timeout_multiplier(5), omit_ways(['sanity'])], compile_and_run, ['']) ===================================== testsuite/driver/testlib.py ===================================== @@ -970,6 +970,9 @@ def tables_next_to_code() -> bool: def fast() -> bool: return config.speed == 2 +def slow() -> bool: + return config.speed == 0 + def platform( plat: str ) -> bool: return config.platform == plat View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8b86203c1ba732abfe4074d448ce5d9dce66891b...0bc18c689102eb7b826be072ff14f3f99e2f2b1b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8b86203c1ba732abfe4074d448ce5d9dce66891b...0bc18c689102eb7b826be072ff14f3f99e2f2b1b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 23:45:25 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 18:45:25 -0500 Subject: [Git][ghc/ghc][wip/T25560] 3 commits: ghc-internal: Disallow setNumCapabilities beyond MAX_N_CAPABILITIES Message-ID: <67538c952af87_5297d1dd4ef06746b@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 8b8b2b6c by Ben Gamari at 2024-12-06T18:45:08-05:00 ghc-internal: Disallow setNumCapabilities beyond MAX_N_CAPABILITIES Throw an exception instead of segfault. Fixes #25560. - - - - - 58bc17d7 by Ben Gamari at 2024-12-06T18:45:08-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - b327e6af by Ben Gamari at 2024-12-06T18:45:08-05:00 testsuite: Add test for #25560 - - - - - 7 changed files: - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - rts/Capability.c - rts/RtsSymbols.c - rts/include/rts/Threads.h - + testsuite/tests/rts/T25560.hs - + testsuite/tests/rts/T25560.stderr - testsuite/tests/rts/all.T Changes: ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -381,8 +380,15 @@ to avoid contention with other processes in the machine. -} setNumCapabilities :: Int -> IO () setNumCapabilities i - | i <= 0 = failIO $ "setNumCapabilities: Capability count ("++show i++") must be positive" - | otherwise = c_setNumCapabilities (fromIntegral i) + | i <= 0 = failIO $ "setNumCapabilities: Capability count ("++show i++") must be positive" + | i > maxCaps = failIO $ "setNumCapabilities: This GHC build only supports up to "++show maxCaps++" capabilities" + | otherwise = c_setNumCapabilities (fromIntegral i) + +maxCaps :: Int +maxCaps = unsafeDupablePerformIO $ peek c_maxNumCapabilities + +foreign import ccall safe "&maxNumCapabilities" + c_maxNumCapabilities :: Ptr Int foreign import ccall safe "setNumCapabilities" c_setNumCapabilities :: CUInt -> IO () @@ -394,13 +400,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,6 +41,9 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// Referenced by GHC.Internal.Conc.Sync +const StgInt maxNumCapabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use ===================================== rts/RtsSymbols.c ===================================== @@ -910,6 +910,7 @@ extern char **environ; SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ SymI_HasProto(enabled_capabilities) \ + SymI_HasProto(maxNumCapabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ SymI_HasDataProto(stg_traceBinaryEventzh) \ ===================================== rts/include/rts/Threads.h ===================================== @@ -77,6 +77,8 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +extern StgInt maxNumCapabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/T25560.stderr ===================================== @@ -0,0 +1,3 @@ +T25560: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException: + +user error (setNumCapabilities: This GHC build only supports up to 1 capabilities) ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,4 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) +test('T25560', exit_code(1), compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4a568e9f9e76f2c963f579878d4e49bac7e9bcbd...b327e6af20984fed56a42b732982ee8d3e977d5f -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4a568e9f9e76f2c963f579878d4e49bac7e9bcbd...b327e6af20984fed56a42b732982ee8d3e977d5f You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 6 23:51:21 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 18:51:21 -0500 Subject: [Git][ghc/ghc][wip/bco-name] rts: Annotate BCOs with their Name Message-ID: <67538df995537_5297d1e7c1146802@gitlab.mail> Ben Gamari pushed to branch wip/bco-name at Glasgow Haskell Compiler / GHC Commits: 7f15a831 by Ben Gamari at 2024-12-06T18:51:09-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 11 changed files: - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/StgToByteCode.hs - compiler/ghc.cabal.in - docs/users_guide/debugging.rst - rts/Disassembler.c - rts/Interpreter.c - rts/include/rts/Bytecodes.h - rts/rts.cabal Changes: ===================================== compiler/GHC/ByteCode/Asm.hs ===================================== @@ -106,7 +106,7 @@ assembleBCOs interp profile proto_bcos tycons top_strs modbreaks spt_entries = d bcos' <- mallocStrings interp bcos return CompiledByteCode { bc_bcos = bcos' - , bc_itbls = itblenv + , bc_itbls = itblenv , bc_ffis = concatMap protoBCOFFIs proto_bcos , bc_strs = top_strs , bc_breaks = modbreaks @@ -178,11 +178,12 @@ assembleOneBCO interp profile pbco = do return ubco' assembleBCO :: Platform -> ProtoBCO Name -> IO UnlinkedBCO -assembleBCO platform (ProtoBCO { protoBCOName = nm - , protoBCOInstrs = instrs - , protoBCOBitmap = bitmap - , protoBCOBitmapSize = bsize - , protoBCOArity = arity }) = do +assembleBCO platform + (ProtoBCO { protoBCOName = nm + , protoBCOInstrs = instrs + , protoBCOBitmap = bitmap + , protoBCOBitmapSize = bsize + , protoBCOArity = arity }) = do -- pass 1: collect up the offsets of the local labels. let asm = mapM_ (assembleI platform) instrs @@ -527,6 +528,10 @@ assembleI platform i = case i of , SmallOp tickx, SmallOp infox , Op np ] +#if MIN_VERSION_rts(1,0,3) + BCO_NAME name -> do np <- lit [BCONPtrStr name] + emit bci_BCO_NAME [Op np] +#endif where literal (LitLabel fs _) = litlabel fs ===================================== compiler/GHC/ByteCode/Instr.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -funbox-strict-fields #-} @@ -27,6 +27,10 @@ import GHC.Runtime.Heap.Layout ( StgWord ) import Data.Int import Data.Word +#if MIN_VERSION_rts(1,0,3) +import Data.ByteString (ByteString) +#endif + import GHC.Stack.CCS (CostCentre) import GHC.Stg.Syntax @@ -229,6 +233,22 @@ data BCInstr !Word16 -- breakpoint info index (RemotePtr CostCentre) +#if MIN_VERSION_rts(1,0,3) + -- | A "meta"-instruction for recording the name of a BCO for debugging purposes. + -- These are ignored by the interpreter but helpfully printed by the disassmbler. + | BCO_NAME !ByteString +#endif + + +{- Note [BCO_NAME] + ~~~~~~~~~~~~~~~ + The BCO_NAME instruction is a debugging-aid enabled with the -fadd-bco-name flag. + When enabled the bytecode assembler will prepend a BCO_NAME instruction to every + generated bytecode object capturing the STG name of the binding the BCO implements. + This is then printed by the bytecode disassembler, allowing bytecode objects to be + readily correlated with their STG and Core source. + -} + -- ----------------------------------------------------------------------------- -- Printing bytecode instructions @@ -383,6 +403,9 @@ instance Outputable BCInstr where <+> text "" <+> ppr tickx <+> text "" <+> ppr infox <+> text "" +#if MIN_VERSION_rts(1,0,3) + ppr (BCO_NAME nm) = text "BCO_NAME" <+> text (show nm) +#endif @@ -487,3 +510,6 @@ bciStackUse SLIDE{} = 0 bciStackUse MKAP{} = 0 bciStackUse MKPAP{} = 0 bciStackUse PACK{} = 1 -- worst case is PACK 0 words +#if MIN_VERSION_rts(1,0,3) +bciStackUse BCO_NAME{} = 0 +#endif ===================================== compiler/GHC/Driver/Flags.hs ===================================== @@ -573,6 +573,7 @@ data GeneralFlag | Opt_DoAsmLinting | Opt_DoAnnotationLinting | Opt_DoBoundsChecking + | Opt_AddBcoName | Opt_NoLlvmMangler -- hidden flag | Opt_FastLlvm -- hidden flag | Opt_NoTypeableBinds ===================================== compiler/GHC/Driver/Session.hs ===================================== @@ -2532,6 +2532,7 @@ fFlagsDeps = [ flagSpec "catch-nonexhaustive-cases" Opt_CatchNonexhaustiveCases, flagSpec "alignment-sanitisation" Opt_AlignmentSanitisation, flagSpec "check-prim-bounds" Opt_DoBoundsChecking, + flagSpec "add-bco-name" Opt_AddBcoName, flagSpec "num-constant-folding" Opt_NumConstantFolding, flagSpec "core-constant-folding" Opt_CoreConstantFolding, flagSpec "fast-pap-calls" Opt_FastPAPCalls, ===================================== compiler/GHC/StgToByteCode.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} @@ -81,6 +81,7 @@ import GHC.Unit.Home.ModInfo (lookupHpt) import Data.Array import Data.Coerce (coerce) import Data.ByteString (ByteString) +import qualified Data.ByteString.Char8 as BS import Data.Map (Map) import Data.IntMap (IntMap) import qualified Data.Map as Map @@ -236,7 +237,10 @@ ppBCEnv p -- Create a BCO and do a spot of peephole optimisation on the insns -- at the same time. mkProtoBCO - :: Platform + :: (Outputable name) + => Platform + -> Bool -- ^ True <=> label with @BCO_NAME@ instruction + -- see Note [BCO_NAME] -> name -> BCInstrList -> Either [CgStgAlt] (CgStgRhs) @@ -247,10 +251,10 @@ mkProtoBCO -> Bool -- ^ True <=> is a return point, rather than a function -> [FFIInfo] -> ProtoBCO name -mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis +mkProtoBCO platform _add_bco_name nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis = ProtoBCO { protoBCOName = nm, - protoBCOInstrs = maybe_with_stack_check, + protoBCOInstrs = maybe_add_bco_name $ maybe_add_stack_check peep_d, protoBCOBitmap = bitmap, protoBCOBitmapSize = fromIntegral bitmap_size, protoBCOArity = arity, @@ -258,6 +262,14 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi protoBCOFFIs = ffis } where + maybe_add_bco_name instrs + | not _add_bco_name = instrs +#if MIN_VERSION_rts(1,0,3) + | otherwise = BCO_NAME str : instrs + where + str = BS.pack $ showSDocOneLine defaultSDocContext (ppr nm) +#endif + -- Overestimate the stack usage (in words) of this BCO, -- and if >= iNTERP_STACK_CHECK_THRESH, add an explicit -- stack check. (The interpreter always does a stack check @@ -265,17 +277,17 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi -- BCO anyway, so we only need to add an explicit one in the -- (hopefully rare) cases when the (overestimated) stack use -- exceeds iNTERP_STACK_CHECK_THRESH. - maybe_with_stack_check - | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = peep_d + maybe_add_stack_check instrs + | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = instrs -- don't do stack checks at return points, -- everything is aggregated up to the top BCO -- (which must be a function). -- That is, unless the stack usage is >= AP_STACK_SPLIM, -- see bug #1466. | stack_usage >= fromIntegral iNTERP_STACK_CHECK_THRESH - = STKCHECK stack_usage : peep_d + = STKCHECK stack_usage : instrs | otherwise - = peep_d -- the supposedly common case + = instrs -- the supposedly common case -- We assume that this sum doesn't wrap stack_usage = sum (map bciStackUse peep_d) @@ -308,6 +320,7 @@ schemeTopBind (id, rhs) | Just data_con <- isDataConWorkId_maybe id, isNullaryRepDataCon data_con = do platform <- profilePlatform <$> getProfile + add_bco_name <- shouldAddBcoName -- Special case for the worker of a nullary data con. -- It'll look like this: Nil = /\a -> Nil a -- If we feed it into schemeR, we'll get @@ -316,7 +329,8 @@ schemeTopBind (id, rhs) -- by just re-using the single top-level definition. So -- for the worker itself, we must allocate it directly. -- ioToBc (putStrLn $ "top level BCO") - emitBc (mkProtoBCO platform (getName id) (toOL [PACK data_con 0, RETURN P]) + emitBc (mkProtoBCO platform add_bco_name + (getName id) (toOL [PACK data_con 0, RETURN P]) (Right rhs) 0 0 [{-no bitmap-}] False{-not alts-}) | otherwise @@ -358,6 +372,7 @@ schemeR_wrk -> BcM (ProtoBCO Name) schemeR_wrk fvs nm original_body (args, body) = do + add_bco_name <- shouldAddBcoName profile <- getProfile let platform = profilePlatform profile @@ -379,7 +394,7 @@ schemeR_wrk fvs nm original_body (args, body) bitmap = mkBitmap platform bits body_code <- schemeER_wrk sum_szsb_args p_init body - emitBc (mkProtoBCO platform nm body_code (Right original_body) + emitBc (mkProtoBCO platform add_bco_name nm body_code (Right original_body) arity bitmap_size bitmap False{-not alts-}) -- | Introduce break instructions for ticked expressions. @@ -1069,9 +1084,10 @@ doCase d s p scrut bndr alts | ubx_tuple_frame = SLIDE 0 2 `consOL` alt_final0 | otherwise = alt_final0 + add_bco_name <- shouldAddBcoName let alt_bco_name = getName bndr - alt_bco = mkProtoBCO platform alt_bco_name alt_final (Left alts) + alt_bco = mkProtoBCO platform add_bco_name alt_bco_name alt_final (Left alts) 0{-no arity-} bitmap_size bitmap True{-is alts-} scrut_code <- schemeE (d + ret_frame_size_b + save_ccs_size_b) (d + ret_frame_size_b + save_ccs_size_b) @@ -1379,7 +1395,7 @@ Note [unboxed tuple bytecodes and tuple_BCO] tupleBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name tupleBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -1398,9 +1414,9 @@ tupleBCO platform args_info args = body_code = mkSlideW 0 1 -- pop frame header `snocOL` RETURN_TUPLE -- and add it again -primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name +primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name primCallBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -2337,6 +2353,9 @@ getHscEnv = BcM $ \st -> return (st, bcm_hsc_env st) getProfile :: BcM Profile getProfile = targetProfile <$> getDynFlags +shouldAddBcoName :: BcM Bool +shouldAddBcoName = gopt Opt_AddBcoName <$> getDynFlags + emitBc :: ([FFIInfo] -> ProtoBCO Name) -> BcM (ProtoBCO Name) emitBc bco = BcM $ \st -> return (st{ffis=[]}, bco (ffis st)) ===================================== compiler/ghc.cabal.in ===================================== @@ -130,6 +130,7 @@ Library exceptions == 0.10.*, semaphore-compat, stm, + rts, ghc-boot == @ProjectVersionMunged@, ghc-heap == @ProjectVersionMunged@, ghci == @ProjectVersionMunged@ ===================================== docs/users_guide/debugging.rst ===================================== @@ -1240,8 +1240,7 @@ Other :type: dynamic :since: 9.8.1 - - default: enabled + :default: enabled At the moment, ghci disables optimizations, because not all passes are compatible with the interpreter. @@ -1254,3 +1253,16 @@ Other expressions. Those cannot be stored in breakpoints, so any free variable that refers to optimized code will not be inspectable when this flag is enabled. + +.. ghc-flag:: -fadd-bco-name + :shortdesc: Add ``BCO_NAME`` instructions in generated bytecode. + :reverse: -fno-add-bco-name + :type: dynamic + + :since: 9.14.1 + + Prefix every generated bytecode object with a ``BCO_NAME`` instruction + containing the STG name of the binding from which the BCO originated. + These are printed by the bytecode disassembler, aiding in correlating + bytecode with STG. + ===================================== rts/Disassembler.c ===================================== @@ -452,6 +452,13 @@ disInstr ( StgBCO *bco, int pc ) debugBelch("RETURN_T\n "); break; + case bci_BCO_NAME: { + const char *name = (const char*) literals[instrs[pc]]; + debugBelch("BCO_NAME \"%s\"\n ", name); + pc += 1; + break; + } + default: barf("disInstr: unknown opcode %u", (unsigned int) instr); } @@ -464,10 +471,9 @@ void disassemble( StgBCO *bco ) StgWord16* instrs = (StgWord16*)(bco->instrs->payload); StgMutArrPtrs* ptrs = bco->ptrs; uint32_t nbcs = (uint32_t)(bco->instrs->bytes / sizeof(StgWord16)); - uint32_t pc = 1; + uint32_t pc = 0; debugBelch("BCO\n" ); - pc = 0; while (pc < nbcs) { debugBelch("\t%2d: ", pc ); pc = disInstr ( bco, pc ); ===================================== rts/Interpreter.c ===================================== @@ -2087,6 +2087,10 @@ run_BCO: goto do_return_nonpointer; } + case bci_BCO_NAME: + bciPtr++; + goto nextInsn; + case bci_SWIZZLE: { W_ stkoff = BCO_GET_LARGE_ARG; StgInt n = BCO_GET_LARGE_ARG; ===================================== rts/include/rts/Bytecodes.h ===================================== @@ -112,6 +112,8 @@ #define bci_PRIMCALL 87 +#define bci_BCO_NAME 88 + /* If you need to go past 255 then you will run into the flags */ /* If you need to go below 0x0100 then you will run into the instructions */ ===================================== rts/rts.cabal ===================================== @@ -1,6 +1,6 @@ cabal-version: 3.0 name: rts -version: 1.0.2 +version: 1.0.3 synopsis: The GHC runtime system description: The GHC runtime system. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7f15a831555016cd63cb1303c84464d6f038119c -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7f15a831555016cd63cb1303c84464d6f038119c You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 02:22:00 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 21:22:00 -0500 Subject: [Git][ghc/ghc][wip/T25560] 13 commits: Use consistent capitalization for "GHC Proposal" in user guide Message-ID: <6753b1483e236_1679acbcd90744fd@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - c801402a by Ben Gamari at 2024-12-06T21:21:46-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - 36e01d56 by Ben Gamari at 2024-12-06T21:21:46-05:00 ghc-internal: Disallow setNumCapabilities beyond MAX_N_CAPABILITIES Throw an exception instead of segfault. Fixes #25560. - - - - - 193ba179 by Ben Gamari at 2024-12-06T21:21:46-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - a65f7c89 by Ben Gamari at 2024-12-06T21:21:46-05:00 testsuite: Add test for #25560 - - - - - 30 changed files: - docs/users_guide/exts/primitives.rst - docs/users_guide/exts/rewrite_rules.rst - docs/users_guide/exts/stolen_syntax.rst - docs/users_guide/exts/strict.rst - docs/users_guide/runtime_control.rst - docs/users_guide/using-warnings.rst - docs/users_guide/using.rst - libraries/base/base.cabal.in - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/Data/Enum.hs → libraries/base/src/Data/Bounded.hs - libraries/base/src/Data/Enum.hs - libraries/ghc-internal/ghc-internal.cabal.in - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs - libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs - rts/Capability.c - rts/IOManager.c - rts/Interpreter.c - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Threads.h - 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/rts/T25560.hs - + testsuite/tests/rts/T25560.stderr - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/exts/primitives.rst ===================================== @@ -322,7 +322,7 @@ Unlifted Newtypes Enable the use of newtypes over types with non-lifted runtime representations. GHC implements an :extension:`UnliftedNewtypes` extension as specified in -`the GHC proposal #98 `_. +`the GHC Proposal #98 `_. :extension:`UnliftedNewtypes` relaxes the restrictions around what types can appear inside of a ``newtype``. For example, the type :: @@ -397,7 +397,7 @@ Unlifted Datatypes result kind. GHC implements the :extension:`UnliftedDatatypes` extension as specified in -`the GHC proposal #265 `_. +`the GHC Proposal #265 `_. :extension:`UnliftedDatatypes` relaxes the restrictions around what result kinds are allowed in data declarations. For example, the type :: ===================================== docs/users_guide/exts/rewrite_rules.rst ===================================== @@ -229,7 +229,7 @@ From a semantic point of view: because ``y`` can match against ``0``. - GHC implements **higher order matching** as described by - `GHC proposal #555 `_. + `GHC Proposal #555 `_. When a pattern variable is applied to distinct locally bound variables it forms what we call a **higher order pattern**. When matching, higher order patterns are treated like pattern variables, but they are ===================================== docs/users_guide/exts/stolen_syntax.rst ===================================== @@ -28,8 +28,8 @@ The following syntax is stolen: single: forall Stolen (in types) by default (see :ref:`infelicities-lexical`). ``forall`` is - a reserved keyword and never a type variable, in accordance with `GHC Proposal #43 - `__. + a reserved keyword and never a type variable, in accordance with `GHC Proposal #193 + `__. ``mdo`` ===================================== docs/users_guide/exts/strict.rst ===================================== @@ -528,7 +528,7 @@ that (SPLIT-STRICT) uses a bang-pattern in the ``case`` in the desugared right-h Note that rule (CASE) applies only when any of the *binders* is unlifted; it is irrelevant whether the binding *itself* is unlifted (see -`GHC proposal #35 `__). +`GHC Proposal #35 `__). For example (see :ref:`primitives`):: let (# a::Int, b::Bool #) = e in body ===================================== docs/users_guide/runtime_control.rst ===================================== @@ -1391,7 +1391,7 @@ and can be controlled by the following flags. The default for this flag is currently ``--read-tix-file=yes`` but will change to ``-read-tix-file=no`` in a future version of GHC according to the accepted - `GHC proposal 612 `__. + `GHC Proposal 612 `__. .. rts-flag:: --write-tix-file= ===================================== docs/users_guide/using-warnings.rst ===================================== @@ -1546,7 +1546,7 @@ of ``-W(no-)*``. The use of ``*`` to denote the kind of inhabited types relies on the :extension:`StarIsType` extension, which in a future release will be turned off by default and then possibly removed. The reasons for this and - the deprecation schedule are described in `GHC proposal #143 + the deprecation schedule are described in `GHC Proposal #143 `__. This warning allows to detect such uses of ``*`` before the actual ===================================== docs/users_guide/using.rst ===================================== @@ -752,7 +752,7 @@ search path (see :ref:`search-path`). GHC Jobserver Protocol ~~~~~~~~~~~~~~~~~~~~~~ -The GHC Jobserver Protocol was specified in `GHC proposal #540 `__. +The GHC Jobserver Protocol was specified in `GHC Proposal #540 `__. This protocol allows a server to dynamically invoke many instances of a client process, ===================================== libraries/base/base.cabal.in ===================================== @@ -46,8 +46,10 @@ Library , Data.Bifoldable1 , Data.Bifunctor , Data.Bitraversable + , Data.Bounded , Data.Char , Data.Complex + , Data.Enum , Data.Fixed , Data.Foldable1 , Data.Functor.Classes @@ -95,7 +97,6 @@ Library , Data.Dynamic , Data.Either , Data.Eq - , Data.Enum , Data.Foldable , Data.Function , Data.Functor ===================================== libraries/base/changelog.md ===================================== @@ -7,6 +7,8 @@ * `Data.List.NonEmpty.{init,last,tails1}` are now defined using only total functions (rather than partial ones). ([CLC proposal #293](https://github.com/haskell/core-libraries-committee/issues/293)) ## 4.21.0.0 *TBA* + * Introduce `Data.Bounded` module exporting the `Bounded` typeclass (finishing [CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) + * Deprecate export of `Bounded` class from `Data.Enum` ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * `GHC.Desugar` has been deprecated and should be removed in GHC 9.14. ([CLC proposal #216](https://github.com/haskell/core-libraries-committee/issues/216)) * Add a `readTixFile` field to the `HpcFlags` record in `GHC.RTS.Flags` ([CLC proposal #276](https://github.com/haskell/core-libraries-committee/issues/276)) * Add `compareLength` to `Data.List` and `Data.List.NonEmpty` ([CLC proposal #257](https://github.com/haskell/core-libraries-committee/issues/257)) @@ -51,8 +53,9 @@ `ioError` to prevent leaking the implementation of these error functions into the callstack. -## 4.20.0.0 May 2024 +## 4.20.0.0 *May 2024* * Shipped with GHC 9.10.1 + * Introduce `Data.Enum` module exporting both `Enum` and `Bounded`. Note that the export of `Bounded` will be deprecated in a future release ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * Deprecate `GHC.Pack` ([#21461](https://gitlab.haskell.org/ghc/ghc/-/issues/21461)) * Export `foldl'` from `Prelude` ([CLC proposal #167](https://github.com/haskell/core-libraries-committee/issues/167)) * The top-level handler for uncaught exceptions now displays the output of `displayException` rather than `show` ([CLC proposal #198](https://github.com/haskell/core-libraries-committee/issues/198)) ===================================== libraries/ghc-internal/src/GHC/Internal/Data/Enum.hs → libraries/base/src/Data/Bounded.hs ===================================== @@ -1,22 +1,25 @@ +{-# LANGUAGE Safe #-} {-# LANGUAGE NoImplicitPrelude #-} ----------------------------------------------------------------------------- -- | --- Module : GHC.Internal.Data.Enum +-- Module : Data.Bounded -- Copyright : (c) The University of Glasgow, 1992-2002 -- License : see libraries/base/LICENSE -- --- Maintainer : ghc-devs at haskell.org +-- Maintainer : cvs-ghc at haskell.org -- Stability : stable -- Portability : non-portable (GHC extensions) -- --- The 'Enum' and 'Bounded' classes. +-- The 'Bounded' class. +-- +-- @since 4.22.0.0 -- ----------------------------------------------------------------------------- -module GHC.Internal.Data.Enum +module Data.Bounded ( Bounded(..) - , Enum(..) ) where -import GHC.Internal.Enum +import GHC.Enum + ===================================== libraries/base/src/Data/Enum.hs ===================================== @@ -1,7 +1,8 @@ {-# LANGUAGE Safe #-} +{-# LANGUAGE NoImplicitPrelude #-} +----------------------------------------------------------------------------- -- | --- -- Module : Data.Enum -- Copyright : (c) The University of Glasgow, 1992-2002 -- License : see libraries/base/LICENSE @@ -10,12 +11,16 @@ -- Stability : stable -- Portability : non-portable (GHC extensions) -- --- The 'Enum' and 'Bounded' classes. +-- The 'Enum' class. +-- +-- @since 4.20.0.0 -- +----------------------------------------------------------------------------- module Data.Enum - (Bounded(..), - Enum(..) - ) where + ( Enum(..) + , {-# DEPRECATED "Bounded should be imported from Data.Bounded" #-} + Bounded(..) + ) where -import GHC.Internal.Data.Enum \ No newline at end of file +import GHC.Internal.Enum ===================================== libraries/ghc-internal/ghc-internal.cabal.in ===================================== @@ -117,7 +117,6 @@ Library GHC.Internal.Data.Dynamic GHC.Internal.Data.Either GHC.Internal.Data.Eq - GHC.Internal.Data.Enum GHC.Internal.Data.Foldable GHC.Internal.Data.Function GHC.Internal.Data.Functor ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -381,8 +380,15 @@ to avoid contention with other processes in the machine. -} setNumCapabilities :: Int -> IO () setNumCapabilities i - | i <= 0 = failIO $ "setNumCapabilities: Capability count ("++show i++") must be positive" - | otherwise = c_setNumCapabilities (fromIntegral i) + | i <= 0 = failIO $ "setNumCapabilities: Capability count ("++show i++") must be positive" + | i > maxCaps = failIO $ "setNumCapabilities: This GHC build only supports up to "++show maxCaps++" capabilities" + | otherwise = c_setNumCapabilities (fromIntegral i) + +maxCaps :: Int +maxCaps = unsafeDupablePerformIO $ peek c_maxNumCapabilities + +foreign import ccall safe "&maxNumCapabilities" + c_maxNumCapabilities :: Ptr Int foreign import ccall safe "setNumCapabilities" c_setNumCapabilities :: CUInt -> IO () @@ -394,13 +400,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs ===================================== @@ -1,6 +1,7 @@ {-# LANGUAGE Trustworthy #-} -{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE StandaloneDeriving #-} ----------------------------------------------------------------------------- -- | @@ -34,6 +35,8 @@ module GHC.Internal.IO.SubSystem ( ) where import GHC.Internal.Base +import GHC.Internal.Show +import GHC.Internal.Enum #if defined(mingw32_HOST_OS) import GHC.Internal.IO.Unsafe @@ -55,6 +58,10 @@ data IoSubSystem -- native APIs for I/O, including IOCP and RIO. deriving (Eq) +-- N.B. These are currently unused by GHC but is needed for stability of @base at . +deriving instance Enum IoSubSystem +deriving instance Show IoSubSystem + -- | Conditionally execute an action depending on the configured I/O subsystem. -- On POSIX systems always execute the first action. -- On Windows execute the second action if WINIO as active, otherwise fall back to ===================================== libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs ===================================== @@ -18,7 +18,7 @@ import GHC.Generics (Generic) import GHC.Internal.Base import GHC.Internal.Show import GHC.Internal.Generics -import GHC.Internal.Data.Enum +import GHC.Internal.Enum #endif -- | The language extensions known to GHC. ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,6 +41,9 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// Referenced by GHC.Internal.Conc.Sync +const StgInt maxNumCapabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use ===================================== rts/IOManager.c ===================================== @@ -110,7 +110,6 @@ parseIOManagerFlag(const char *iomgrstr, IO_MANAGER_FLAG *flag) #else return IOManagerUnavailable; #endif - *flag = IO_MNGR_FLAG_MIO; } else if (strcmp("winio", iomgrstr) == 0) { #if defined(IOMGR_ENABLED_WINIO) ===================================== rts/Interpreter.c ===================================== @@ -1785,7 +1785,6 @@ run_BCO: case bci_TESTLT_P: { unsigned int discr = BCO_NEXT; int failto = BCO_GET_LARGE_ARG; - ASSERT(discr <= TAG_MASK); StgClosure* con = UNTAG_CLOSURE((StgClosure*)SpW(0)); if (GET_TAG(con) >= discr) { bciPtr = failto; @@ -1796,7 +1795,6 @@ run_BCO: case bci_TESTEQ_P: { unsigned int discr = BCO_NEXT; int failto = BCO_GET_LARGE_ARG; - ASSERT(discr <= TAG_MASK); StgClosure* con = UNTAG_CLOSURE((StgClosure*)SpW(0)); if (GET_TAG(con) != discr) { bciPtr = failto; ===================================== rts/RtsSymbols.c ===================================== @@ -910,6 +910,7 @@ extern char **environ; SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ SymI_HasProto(enabled_capabilities) \ + SymI_HasProto(maxNumCapabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ SymI_HasDataProto(stg_traceBinaryEventzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,11 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; + } else if (new_n_capabilities > MAX_N_CAPABILITIES) { + errorBelch("Attempt to increase capability count beyond MAX_N_CAPABILITIES\n"); + return; } - debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", enabled_capabilities, new_n_capabilities); ===================================== rts/include/rts/Threads.h ===================================== @@ -77,6 +77,9 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +extern const StgInt maxNumCapabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11536,10 +11544,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11564,6 +11568,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11618,10 +11626,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11634,6 +11638,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11692,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -14571,10 +14579,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -14599,6 +14603,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -14653,10 +14661,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -14669,6 +14673,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -14727,6 +14735,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -15544,6 +15553,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.JS.Prim.JSException -- Defined in ‘GHC.Internal.JS.Prim’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11800,10 +11808,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11828,6 +11832,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11882,10 +11890,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11898,6 +11902,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11957,6 +11965,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12789,6 +12798,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IO.Windows.Handle.CONSOLE_READCONSOLE_CONTROL -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.NativeHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.ConsoleHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11536,10 +11544,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11564,6 +11568,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11618,10 +11626,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11634,6 +11638,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11692,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -10714,6 +10714,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10767,6 +10768,7 @@ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.ProfFlags -- Defined in instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.RTSFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TickyFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TraceFlags -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.Stats.GCDetails -- Defined in ‘GHC.Internal.Stats’ instance GHC.Internal.Show.Show GHC.Internal.Stats.RTSStats -- Defined in ‘GHC.Internal.Stats’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 ===================================== @@ -10717,6 +10717,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10770,6 +10771,7 @@ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.ProfFlags -- Defined in instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.RTSFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TickyFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TraceFlags -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.Stats.GCDetails -- Defined in ‘GHC.Internal.Stats’ instance GHC.Internal.Show.Show GHC.Internal.Stats.RTSStats -- Defined in ‘GHC.Internal.Stats’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/T25560.stderr ===================================== @@ -0,0 +1,3 @@ +T25560: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException: + +user error (setNumCapabilities: This GHC build only supports up to 1 capabilities) ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,4 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) +test('T25560', exit_code(1), compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b327e6af20984fed56a42b732982ee8d3e977d5f...a65f7c894eae1f6f165b0c4fac47568a2c670719 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b327e6af20984fed56a42b732982ee8d3e977d5f...a65f7c894eae1f6f165b0c4fac47568a2c670719 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 02:25:23 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 06 Dec 2024 21:25:23 -0500 Subject: [Git][ghc/ghc][wip/bco-name] rts: Annotate BCOs with their Name Message-ID: <6753b21337a95_1679ac1180dc75011@gitlab.mail> Ben Gamari pushed to branch wip/bco-name at Glasgow Haskell Compiler / GHC Commits: ec87cf8a by Ben Gamari at 2024-12-06T21:25:07-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 11 changed files: - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/StgToByteCode.hs - compiler/ghc.cabal.in - docs/users_guide/debugging.rst - rts/Disassembler.c - rts/Interpreter.c - rts/include/rts/Bytecodes.h - rts/rts.cabal Changes: ===================================== compiler/GHC/ByteCode/Asm.hs ===================================== @@ -106,7 +106,7 @@ assembleBCOs interp profile proto_bcos tycons top_strs modbreaks spt_entries = d bcos' <- mallocStrings interp bcos return CompiledByteCode { bc_bcos = bcos' - , bc_itbls = itblenv + , bc_itbls = itblenv , bc_ffis = concatMap protoBCOFFIs proto_bcos , bc_strs = top_strs , bc_breaks = modbreaks @@ -178,11 +178,12 @@ assembleOneBCO interp profile pbco = do return ubco' assembleBCO :: Platform -> ProtoBCO Name -> IO UnlinkedBCO -assembleBCO platform (ProtoBCO { protoBCOName = nm - , protoBCOInstrs = instrs - , protoBCOBitmap = bitmap - , protoBCOBitmapSize = bsize - , protoBCOArity = arity }) = do +assembleBCO platform + (ProtoBCO { protoBCOName = nm + , protoBCOInstrs = instrs + , protoBCOBitmap = bitmap + , protoBCOBitmapSize = bsize + , protoBCOArity = arity }) = do -- pass 1: collect up the offsets of the local labels. let asm = mapM_ (assembleI platform) instrs @@ -527,6 +528,10 @@ assembleI platform i = case i of , SmallOp tickx, SmallOp infox , Op np ] +#if MIN_VERSION_rts(1,0,3) + BCO_NAME name -> do np <- lit [BCONPtrStr name] + emit bci_BCO_NAME [Op np] +#endif where literal (LitLabel fs _) = litlabel fs ===================================== compiler/GHC/ByteCode/Instr.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -funbox-strict-fields #-} @@ -27,6 +27,10 @@ import GHC.Runtime.Heap.Layout ( StgWord ) import Data.Int import Data.Word +#if MIN_VERSION_rts(1,0,3) +import Data.ByteString (ByteString) +#endif + import GHC.Stack.CCS (CostCentre) import GHC.Stg.Syntax @@ -229,6 +233,22 @@ data BCInstr !Word16 -- breakpoint info index (RemotePtr CostCentre) +#if MIN_VERSION_rts(1,0,3) + -- | A "meta"-instruction for recording the name of a BCO for debugging purposes. + -- These are ignored by the interpreter but helpfully printed by the disassmbler. + | BCO_NAME !ByteString +#endif + + +{- Note [BCO_NAME] + ~~~~~~~~~~~~~~~ + The BCO_NAME instruction is a debugging-aid enabled with the -fadd-bco-name flag. + When enabled the bytecode assembler will prepend a BCO_NAME instruction to every + generated bytecode object capturing the STG name of the binding the BCO implements. + This is then printed by the bytecode disassembler, allowing bytecode objects to be + readily correlated with their STG and Core source. + -} + -- ----------------------------------------------------------------------------- -- Printing bytecode instructions @@ -383,6 +403,9 @@ instance Outputable BCInstr where <+> text "" <+> ppr tickx <+> text "" <+> ppr infox <+> text "" +#if MIN_VERSION_rts(1,0,3) + ppr (BCO_NAME nm) = text "BCO_NAME" <+> text (show nm) +#endif @@ -487,3 +510,6 @@ bciStackUse SLIDE{} = 0 bciStackUse MKAP{} = 0 bciStackUse MKPAP{} = 0 bciStackUse PACK{} = 1 -- worst case is PACK 0 words +#if MIN_VERSION_rts(1,0,3) +bciStackUse BCO_NAME{} = 0 +#endif ===================================== compiler/GHC/Driver/Flags.hs ===================================== @@ -573,6 +573,7 @@ data GeneralFlag | Opt_DoAsmLinting | Opt_DoAnnotationLinting | Opt_DoBoundsChecking + | Opt_AddBcoName | Opt_NoLlvmMangler -- hidden flag | Opt_FastLlvm -- hidden flag | Opt_NoTypeableBinds ===================================== compiler/GHC/Driver/Session.hs ===================================== @@ -2532,6 +2532,7 @@ fFlagsDeps = [ flagSpec "catch-nonexhaustive-cases" Opt_CatchNonexhaustiveCases, flagSpec "alignment-sanitisation" Opt_AlignmentSanitisation, flagSpec "check-prim-bounds" Opt_DoBoundsChecking, + flagSpec "add-bco-name" Opt_AddBcoName, flagSpec "num-constant-folding" Opt_NumConstantFolding, flagSpec "core-constant-folding" Opt_CoreConstantFolding, flagSpec "fast-pap-calls" Opt_FastPAPCalls, ===================================== compiler/GHC/StgToByteCode.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} @@ -236,7 +236,10 @@ ppBCEnv p -- Create a BCO and do a spot of peephole optimisation on the insns -- at the same time. mkProtoBCO - :: Platform + :: (Outputable name) + => Platform + -> Bool -- ^ True <=> label with @BCO_NAME@ instruction + -- see Note [BCO_NAME] -> name -> BCInstrList -> Either [CgStgAlt] (CgStgRhs) @@ -247,10 +250,10 @@ mkProtoBCO -> Bool -- ^ True <=> is a return point, rather than a function -> [FFIInfo] -> ProtoBCO name -mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis +mkProtoBCO platform _add_bco_name nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis = ProtoBCO { protoBCOName = nm, - protoBCOInstrs = maybe_with_stack_check, + protoBCOInstrs = maybe_add_bco_name $ maybe_add_stack_check peep_d, protoBCOBitmap = bitmap, protoBCOBitmapSize = fromIntegral bitmap_size, protoBCOArity = arity, @@ -258,6 +261,14 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi protoBCOFFIs = ffis } where + maybe_add_bco_name instrs +#if MIN_VERSION_rts(1,0,3) + | _add_bco_name = BCO_NAME str : instrs + where + str = BS.pack $ showSDocOneLine defaultSDocContext (ppr nm) +#endif + maybe_add_bco_name instrs = instrs + -- Overestimate the stack usage (in words) of this BCO, -- and if >= iNTERP_STACK_CHECK_THRESH, add an explicit -- stack check. (The interpreter always does a stack check @@ -265,17 +276,17 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi -- BCO anyway, so we only need to add an explicit one in the -- (hopefully rare) cases when the (overestimated) stack use -- exceeds iNTERP_STACK_CHECK_THRESH. - maybe_with_stack_check - | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = peep_d + maybe_add_stack_check instrs + | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = instrs -- don't do stack checks at return points, -- everything is aggregated up to the top BCO -- (which must be a function). -- That is, unless the stack usage is >= AP_STACK_SPLIM, -- see bug #1466. | stack_usage >= fromIntegral iNTERP_STACK_CHECK_THRESH - = STKCHECK stack_usage : peep_d + = STKCHECK stack_usage : instrs | otherwise - = peep_d -- the supposedly common case + = instrs -- the supposedly common case -- We assume that this sum doesn't wrap stack_usage = sum (map bciStackUse peep_d) @@ -308,6 +319,7 @@ schemeTopBind (id, rhs) | Just data_con <- isDataConWorkId_maybe id, isNullaryRepDataCon data_con = do platform <- profilePlatform <$> getProfile + add_bco_name <- shouldAddBcoName -- Special case for the worker of a nullary data con. -- It'll look like this: Nil = /\a -> Nil a -- If we feed it into schemeR, we'll get @@ -316,7 +328,8 @@ schemeTopBind (id, rhs) -- by just re-using the single top-level definition. So -- for the worker itself, we must allocate it directly. -- ioToBc (putStrLn $ "top level BCO") - emitBc (mkProtoBCO platform (getName id) (toOL [PACK data_con 0, RETURN P]) + emitBc (mkProtoBCO platform add_bco_name + (getName id) (toOL [PACK data_con 0, RETURN P]) (Right rhs) 0 0 [{-no bitmap-}] False{-not alts-}) | otherwise @@ -358,6 +371,7 @@ schemeR_wrk -> BcM (ProtoBCO Name) schemeR_wrk fvs nm original_body (args, body) = do + add_bco_name <- shouldAddBcoName profile <- getProfile let platform = profilePlatform profile @@ -379,7 +393,7 @@ schemeR_wrk fvs nm original_body (args, body) bitmap = mkBitmap platform bits body_code <- schemeER_wrk sum_szsb_args p_init body - emitBc (mkProtoBCO platform nm body_code (Right original_body) + emitBc (mkProtoBCO platform add_bco_name nm body_code (Right original_body) arity bitmap_size bitmap False{-not alts-}) -- | Introduce break instructions for ticked expressions. @@ -1069,9 +1083,10 @@ doCase d s p scrut bndr alts | ubx_tuple_frame = SLIDE 0 2 `consOL` alt_final0 | otherwise = alt_final0 + add_bco_name <- shouldAddBcoName let alt_bco_name = getName bndr - alt_bco = mkProtoBCO platform alt_bco_name alt_final (Left alts) + alt_bco = mkProtoBCO platform add_bco_name alt_bco_name alt_final (Left alts) 0{-no arity-} bitmap_size bitmap True{-is alts-} scrut_code <- schemeE (d + ret_frame_size_b + save_ccs_size_b) (d + ret_frame_size_b + save_ccs_size_b) @@ -1379,7 +1394,7 @@ Note [unboxed tuple bytecodes and tuple_BCO] tupleBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name tupleBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -1398,9 +1413,9 @@ tupleBCO platform args_info args = body_code = mkSlideW 0 1 -- pop frame header `snocOL` RETURN_TUPLE -- and add it again -primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name +primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name primCallBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -2337,6 +2352,9 @@ getHscEnv = BcM $ \st -> return (st, bcm_hsc_env st) getProfile :: BcM Profile getProfile = targetProfile <$> getDynFlags +shouldAddBcoName :: BcM Bool +shouldAddBcoName = gopt Opt_AddBcoName <$> getDynFlags + emitBc :: ([FFIInfo] -> ProtoBCO Name) -> BcM (ProtoBCO Name) emitBc bco = BcM $ \st -> return (st{ffis=[]}, bco (ffis st)) ===================================== compiler/ghc.cabal.in ===================================== @@ -130,6 +130,7 @@ Library exceptions == 0.10.*, semaphore-compat, stm, + rts, ghc-boot == @ProjectVersionMunged@, ghc-heap == @ProjectVersionMunged@, ghci == @ProjectVersionMunged@ ===================================== docs/users_guide/debugging.rst ===================================== @@ -1240,8 +1240,7 @@ Other :type: dynamic :since: 9.8.1 - - default: enabled + :default: enabled At the moment, ghci disables optimizations, because not all passes are compatible with the interpreter. @@ -1254,3 +1253,16 @@ Other expressions. Those cannot be stored in breakpoints, so any free variable that refers to optimized code will not be inspectable when this flag is enabled. + +.. ghc-flag:: -fadd-bco-name + :shortdesc: Add ``BCO_NAME`` instructions in generated bytecode. + :reverse: -fno-add-bco-name + :type: dynamic + + :since: 9.14.1 + + Prefix every generated bytecode object with a ``BCO_NAME`` instruction + containing the STG name of the binding from which the BCO originated. + These are printed by the bytecode disassembler, aiding in correlating + bytecode with STG. + ===================================== rts/Disassembler.c ===================================== @@ -452,6 +452,13 @@ disInstr ( StgBCO *bco, int pc ) debugBelch("RETURN_T\n "); break; + case bci_BCO_NAME: { + const char *name = (const char*) literals[instrs[pc]]; + debugBelch("BCO_NAME \"%s\"\n ", name); + pc += 1; + break; + } + default: barf("disInstr: unknown opcode %u", (unsigned int) instr); } @@ -464,10 +471,9 @@ void disassemble( StgBCO *bco ) StgWord16* instrs = (StgWord16*)(bco->instrs->payload); StgMutArrPtrs* ptrs = bco->ptrs; uint32_t nbcs = (uint32_t)(bco->instrs->bytes / sizeof(StgWord16)); - uint32_t pc = 1; + uint32_t pc = 0; debugBelch("BCO\n" ); - pc = 0; while (pc < nbcs) { debugBelch("\t%2d: ", pc ); pc = disInstr ( bco, pc ); ===================================== rts/Interpreter.c ===================================== @@ -2087,6 +2087,10 @@ run_BCO: goto do_return_nonpointer; } + case bci_BCO_NAME: + bciPtr++; + goto nextInsn; + case bci_SWIZZLE: { W_ stkoff = BCO_GET_LARGE_ARG; StgInt n = BCO_GET_LARGE_ARG; ===================================== rts/include/rts/Bytecodes.h ===================================== @@ -112,6 +112,8 @@ #define bci_PRIMCALL 87 +#define bci_BCO_NAME 88 + /* If you need to go past 255 then you will run into the flags */ /* If you need to go below 0x0100 then you will run into the instructions */ ===================================== rts/rts.cabal ===================================== @@ -1,6 +1,6 @@ cabal-version: 3.0 name: rts -version: 1.0.2 +version: 1.0.3 synopsis: The GHC runtime system description: The GHC runtime system. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ec87cf8a5a707c3660cbfa8e2e58a15adaae34db -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ec87cf8a5a707c3660cbfa8e2e58a15adaae34db You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 06:01:31 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Sat, 07 Dec 2024 01:01:31 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 8 commits: ghc-internal: Drop GHC.Internal.Data.Enum Message-ID: <6753e4bb471d4_11076aa415a038657@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - c0c3f27b by Peter Trommler at 2024-12-07T01:01:09-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3cebfd5b by Peter Trommler at 2024-12-07T01:01:09-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4b79d862 by Leary at 2024-12-07T01:01:16-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 22 changed files: - libraries/base/base.cabal.in - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/Data/Enum.hs → libraries/base/src/Data/Bounded.hs - libraries/base/src/Data/Enum.hs - libraries/ghc-internal/CHANGELOG.md - libraries/ghc-internal/ghc-internal.cabal.in - libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs - libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs - libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs - libraries/template-haskell/changelog.md - libraries/template-haskell/tests/all.T - + libraries/template-haskell/tests/dataToCodeQUnit.hs - + libraries/template-haskell/tests/dataToCodeQUnit.stdout - testsuite/tests/ghci/linking/T25240/all.T - testsuite/tests/ghci/linking/all.T - 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/interface-stability/template-haskell-exports.stdout Changes: ===================================== libraries/base/base.cabal.in ===================================== @@ -46,8 +46,10 @@ Library , Data.Bifoldable1 , Data.Bifunctor , Data.Bitraversable + , Data.Bounded , Data.Char , Data.Complex + , Data.Enum , Data.Fixed , Data.Foldable1 , Data.Functor.Classes @@ -95,7 +97,6 @@ Library , Data.Dynamic , Data.Either , Data.Eq - , Data.Enum , Data.Foldable , Data.Function , Data.Functor ===================================== libraries/base/changelog.md ===================================== @@ -7,6 +7,8 @@ * `Data.List.NonEmpty.{init,last,tails1}` are now defined using only total functions (rather than partial ones). ([CLC proposal #293](https://github.com/haskell/core-libraries-committee/issues/293)) ## 4.21.0.0 *TBA* + * Introduce `Data.Bounded` module exporting the `Bounded` typeclass (finishing [CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) + * Deprecate export of `Bounded` class from `Data.Enum` ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * `GHC.Desugar` has been deprecated and should be removed in GHC 9.14. ([CLC proposal #216](https://github.com/haskell/core-libraries-committee/issues/216)) * Add a `readTixFile` field to the `HpcFlags` record in `GHC.RTS.Flags` ([CLC proposal #276](https://github.com/haskell/core-libraries-committee/issues/276)) * Add `compareLength` to `Data.List` and `Data.List.NonEmpty` ([CLC proposal #257](https://github.com/haskell/core-libraries-committee/issues/257)) @@ -51,8 +53,9 @@ `ioError` to prevent leaking the implementation of these error functions into the callstack. -## 4.20.0.0 May 2024 +## 4.20.0.0 *May 2024* * Shipped with GHC 9.10.1 + * Introduce `Data.Enum` module exporting both `Enum` and `Bounded`. Note that the export of `Bounded` will be deprecated in a future release ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * Deprecate `GHC.Pack` ([#21461](https://gitlab.haskell.org/ghc/ghc/-/issues/21461)) * Export `foldl'` from `Prelude` ([CLC proposal #167](https://github.com/haskell/core-libraries-committee/issues/167)) * The top-level handler for uncaught exceptions now displays the output of `displayException` rather than `show` ([CLC proposal #198](https://github.com/haskell/core-libraries-committee/issues/198)) ===================================== libraries/ghc-internal/src/GHC/Internal/Data/Enum.hs → libraries/base/src/Data/Bounded.hs ===================================== @@ -1,22 +1,25 @@ +{-# LANGUAGE Safe #-} {-# LANGUAGE NoImplicitPrelude #-} ----------------------------------------------------------------------------- -- | --- Module : GHC.Internal.Data.Enum +-- Module : Data.Bounded -- Copyright : (c) The University of Glasgow, 1992-2002 -- License : see libraries/base/LICENSE -- --- Maintainer : ghc-devs at haskell.org +-- Maintainer : cvs-ghc at haskell.org -- Stability : stable -- Portability : non-portable (GHC extensions) -- --- The 'Enum' and 'Bounded' classes. +-- The 'Bounded' class. +-- +-- @since 4.22.0.0 -- ----------------------------------------------------------------------------- -module GHC.Internal.Data.Enum +module Data.Bounded ( Bounded(..) - , Enum(..) ) where -import GHC.Internal.Enum +import GHC.Enum + ===================================== libraries/base/src/Data/Enum.hs ===================================== @@ -1,7 +1,8 @@ {-# LANGUAGE Safe #-} +{-# LANGUAGE NoImplicitPrelude #-} +----------------------------------------------------------------------------- -- | --- -- Module : Data.Enum -- Copyright : (c) The University of Glasgow, 1992-2002 -- License : see libraries/base/LICENSE @@ -10,12 +11,16 @@ -- Stability : stable -- Portability : non-portable (GHC extensions) -- --- The 'Enum' and 'Bounded' classes. +-- The 'Enum' class. +-- +-- @since 4.20.0.0 -- +----------------------------------------------------------------------------- module Data.Enum - (Bounded(..), - Enum(..) - ) where + ( Enum(..) + , {-# DEPRECATED "Bounded should be imported from Data.Bounded" #-} + Bounded(..) + ) where -import GHC.Internal.Data.Enum \ No newline at end of file +import GHC.Internal.Enum ===================================== libraries/ghc-internal/CHANGELOG.md ===================================== @@ -1,5 +1,9 @@ # Revision history for `ghc-internal` +## 9.1401.0 -- yyyy-mm-dd + +* Introduce `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. + ## 9.1001.0 -- 2024-05-01 * Package created containing implementation moved from `base`. ===================================== libraries/ghc-internal/ghc-internal.cabal.in ===================================== @@ -117,7 +117,6 @@ Library GHC.Internal.Data.Dynamic GHC.Internal.Data.Either GHC.Internal.Data.Eq - GHC.Internal.Data.Enum GHC.Internal.Data.Foldable GHC.Internal.Data.Function GHC.Internal.Data.Functor ===================================== libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs ===================================== @@ -1,6 +1,7 @@ {-# LANGUAGE Trustworthy #-} -{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE StandaloneDeriving #-} ----------------------------------------------------------------------------- -- | @@ -34,6 +35,8 @@ module GHC.Internal.IO.SubSystem ( ) where import GHC.Internal.Base +import GHC.Internal.Show +import GHC.Internal.Enum #if defined(mingw32_HOST_OS) import GHC.Internal.IO.Unsafe @@ -55,6 +58,10 @@ data IoSubSystem -- native APIs for I/O, including IOCP and RIO. deriving (Eq) +-- N.B. These are currently unused by GHC but is needed for stability of @base at . +deriving instance Enum IoSubSystem +deriving instance Show IoSubSystem + -- | Conditionally execute an action depending on the configured I/O subsystem. -- On POSIX systems always execute the first action. -- On Windows execute the second action if WINIO as active, otherwise fall back to ===================================== libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs ===================================== @@ -18,7 +18,7 @@ import GHC.Generics (Generic) import GHC.Internal.Base import GHC.Internal.Show import GHC.Internal.Generics -import GHC.Internal.Data.Enum +import GHC.Internal.Enum #endif -- | The language extensions known to GHC. ===================================== libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs ===================================== @@ -26,7 +26,9 @@ module GHC.Internal.TH.Lift ( Lift(..) -- * Generic Lift implementations , dataToQa + , dataToCodeQ , dataToExpQ + , liftDataTyped , liftData , dataToPatQ -- * Wired-in names @@ -540,6 +542,12 @@ function. Two complications "pack" is defined in a different module than the data type "Text". -} +-- | A typed variant of 'dataToExpQ'. +dataToCodeQ :: (Quote m, Data a) + => (forall b . Data b => b -> Maybe (Code m b)) + -> a -> Code m a +dataToCodeQ f = unsafeCodeCoerce . dataToExpQ (fmap unTypeCode . f) + -- | 'dataToExpQ' converts a value to a 'Exp' representation of the -- same value, in the SYB style. It is generalized to take a function -- override type-specific cases; see 'liftData' for a more commonly @@ -563,6 +571,10 @@ dataToExpQ = dataToQa varOrConE litE (foldl appE) appE x y = do { a <- x; b <- y; return (AppE a b)} litE c = return (LitE c) +-- | A typed variant of 'liftData'. +liftDataTyped :: (Quote m, Data a) => a -> Code m a +liftDataTyped = dataToCodeQ (const Nothing) + -- | 'liftData' is a variant of 'lift' in the 'Lift' type class which -- works for any type with a 'Data' instance. liftData :: (Quote m, Data a) => a -> m Exp ===================================== libraries/template-haskell/changelog.md ===================================== @@ -1,5 +1,9 @@ # Changelog for [`template-haskell` package](http://hackage.haskell.org/package/template-haskell) +## 2.24.0.0 + + * Introduce `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. + ## 2.23.0.0 * Extend `Exp` with `ForallE`, `ForallVisE`, `ConstraintedE`, ===================================== libraries/template-haskell/tests/all.T ===================================== @@ -1,3 +1,4 @@ # difficult to test TH with profiling, because we have to build twice test('dataToExpQUnit', [omit_ways(prof_ways), req_th], compile, ['-v0']) +test('dataToCodeQUnit', [omit_ways(prof_ways), req_th], compile, ['-v0']) test('pragCompletePpr', [omit_ways(prof_ways), req_th], compile_and_run, ['']) ===================================== libraries/template-haskell/tests/dataToCodeQUnit.hs ===================================== @@ -0,0 +1,33 @@ +{-# LANGUAGE TemplateHaskell #-} + +module Foo where + +import Language.Haskell.TH +import Language.Haskell.TH.Quote +import Language.Haskell.TH.Syntax +import System.IO +import Data.Data +import Data.Functor +import Control.Monad + +foo, bar :: (Bool, Bool) +foo = $$(do + let + selectBool :: Data a => a -> Maybe a + selectBool x = guard (sameDataType x False) $> x + where + sameDataType y z = show (dataTypeOf y) == show (dataTypeOf z) + flipBool :: Data a => a -> a + flipBool x + | x ~= False = dataCast True + | x ~= True = dataCast False + | otherwise = x + where + dataCast = fromConstr . toConstr + x ~= y = toConstr x == toConstr y + dataToCodeQ (fmap (liftDataTyped . flipBool) . selectBool) (False, True) + ) +bar = (True, False) + +main :: IO () +main = print (foo == bar) ===================================== libraries/template-haskell/tests/dataToCodeQUnit.stdout ===================================== @@ -0,0 +1 @@ +True ===================================== testsuite/tests/ghci/linking/T25240/all.T ===================================== @@ -1,3 +1,3 @@ # skip on darwin because the leading underscores will make the test fail -test('T25240', [when(leading_underscore(),skip), req_rts_linker, extra_files(['T25240a.hs'])], +test('T25240', [when(leading_underscore(),skip), req_interp, extra_files(['T25240a.hs'])], makefile_test, ['T25240']) ===================================== testsuite/tests/ghci/linking/all.T ===================================== @@ -76,4 +76,4 @@ test('big-obj', [extra_files(['big-obj-c.c', 'big-obj.hs']), unless(doing_ghci, skip), unless(opsys('mingw32'), skip)], makefile_test, ['big-obj']) -test('T25155', [req_c, req_th, req_interp, extra_files(['T25155_iserv_main.c', 'T25155_iserv.hs', 'T25155_TH.hs'])], makefile_test, []) +test('T25155', [req_c, req_th, req_interp, req_rts_linker, extra_files(['T25155_iserv_main.c', 'T25155_iserv.hs', 'T25155_TH.hs'])], makefile_test, []) ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11536,10 +11544,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11564,6 +11568,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11618,10 +11626,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11634,6 +11638,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11692,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1300.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -14571,10 +14579,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -14599,6 +14603,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -14653,10 +14661,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -14669,6 +14673,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -14727,6 +14735,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -15544,6 +15553,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.JS.Prim.JSException -- Defined in ‘GHC.Internal.JS.Prim’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11800,10 +11808,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11828,6 +11832,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11882,10 +11890,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11898,6 +11902,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11957,6 +11965,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12789,6 +12798,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IO.Windows.Handle.CONSOLE_READCONSOLE_CONTROL -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.NativeHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.ConsoleHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11536,10 +11544,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11564,6 +11568,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11618,10 +11626,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11634,6 +11638,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11692,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -10714,6 +10714,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10767,6 +10768,7 @@ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.ProfFlags -- Defined in instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.RTSFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TickyFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TraceFlags -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.Stats.GCDetails -- Defined in ‘GHC.Internal.Stats’ instance GHC.Internal.Show.Show GHC.Internal.Stats.RTSStats -- Defined in ‘GHC.Internal.Stats’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 ===================================== @@ -10717,6 +10717,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10770,6 +10771,7 @@ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.ProfFlags -- Defined in instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.RTSFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TickyFlags -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.TraceFlags -- Defined in ‘GHC.Internal.RTS.Flags’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.Stats.GCDetails -- Defined in ‘GHC.Internal.Stats’ instance GHC.Internal.Show.Show GHC.Internal.Stats.RTSStats -- Defined in ‘GHC.Internal.Stats’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ ===================================== testsuite/tests/interface-stability/template-haskell-exports.stdout ===================================== @@ -2052,8 +2052,8 @@ module Language.Haskell.TH.Syntax where qAddForeignFilePath :: ForeignSrcLang -> GHC.Internal.Base.String -> m () qAddModFinalizer :: Q () -> m () qAddCorePlugin :: GHC.Internal.Base.String -> m () - qGetQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => m (GHC.Internal.Maybe.Maybe a) - qPutQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => a -> m () + qGetQ :: forall a. ghc-internal-9.1300.0:GHC.Internal.Data.Typeable.Internal.Typeable a => m (GHC.Internal.Maybe.Maybe a) + qPutQ :: forall a. ghc-internal-9.1300.0:GHC.Internal.Data.Typeable.Internal.Typeable a => a -> m () qIsExtEnabled :: Extension -> m GHC.Types.Bool qExtsEnabled :: m [Extension] qPutDoc :: DocLoc -> GHC.Internal.Base.String -> m () @@ -2126,6 +2126,7 @@ module Language.Haskell.TH.Syntax where cmpEq :: GHC.Types.Ordering -> GHC.Types.Bool compareBytes :: Bytes -> Bytes -> GHC.Types.Ordering counter :: GHC.Internal.IORef.IORef Uniq + dataToCodeQ :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (Code m b)) -> a -> Code m a dataToExpQ :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m Exp)) -> a -> m Exp dataToPatQ :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m Pat)) -> a -> m Pat dataToQa :: forall (m :: * -> *) a k q. (Quote m, GHC.Internal.Data.Data.Data a) => (Name -> k) -> (Lit -> m q) -> (k -> [m q] -> m q) -> (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m q)) -> a -> m q @@ -2135,7 +2136,7 @@ module Language.Haskell.TH.Syntax where falseName :: Name getDoc :: DocLoc -> Q (GHC.Internal.Maybe.Maybe GHC.Internal.Base.String) getPackageRoot :: Q GHC.Internal.IO.FilePath - getQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => Q (GHC.Internal.Maybe.Maybe a) + getQ :: forall a. ghc-internal-9.1300.0:GHC.Internal.Data.Typeable.Internal.Typeable a => Q (GHC.Internal.Maybe.Maybe a) get_cons_names :: Con -> [Name] hoistCode :: forall (m :: * -> *) (n :: * -> *) (r :: GHC.Types.RuntimeRep) (a :: TYPE r). GHC.Internal.Base.Monad m => (forall x. m x -> n x) -> Code m a -> Code n a isExtEnabled :: Extension -> Q GHC.Types.Bool @@ -2145,6 +2146,7 @@ module Language.Haskell.TH.Syntax where leftName :: Name liftCode :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) (m :: * -> *). m (TExp a) -> Code m a liftData :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => a -> m Exp + liftDataTyped :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => a -> Code m a liftString :: forall (m :: * -> *). Quote m => GHC.Internal.Base.String -> m Exp location :: Q Loc lookupName :: GHC.Types.Bool -> GHC.Internal.Base.String -> Q (GHC.Internal.Maybe.Maybe Name) @@ -2181,7 +2183,7 @@ module Language.Haskell.TH.Syntax where oneName :: Name pkgString :: PkgName -> GHC.Internal.Base.String putDoc :: DocLoc -> GHC.Internal.Base.String -> Q () - putQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => a -> Q () + putQ :: forall a. ghc-internal-9.1300.0:GHC.Internal.Data.Typeable.Internal.Typeable a => a -> Q () recover :: forall a. Q a -> Q a -> Q a reify :: Name -> Q Info reifyAnnotations :: forall a. GHC.Internal.Data.Data.Data a => AnnLookup -> Q [a] View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/23f1e3a71c7308bc9bcb7b9816c4daedd5d7e611...4b79d862e13e50943130f525c403c7ecd7b9459b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/23f1e3a71c7308bc9bcb7b9816c4daedd5d7e611...4b79d862e13e50943130f525c403c7ecd7b9459b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 08:41:44 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Sat, 07 Dec 2024 03:41:44 -0500 Subject: [Git][ghc/ghc][master] 2 commits: Fix requirements on T25240 Message-ID: <67540a4864d07_2b0e576217b84544@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 2 changed files: - testsuite/tests/ghci/linking/T25240/all.T - testsuite/tests/ghci/linking/all.T Changes: ===================================== testsuite/tests/ghci/linking/T25240/all.T ===================================== @@ -1,3 +1,3 @@ # skip on darwin because the leading underscores will make the test fail -test('T25240', [when(leading_underscore(),skip), req_rts_linker, extra_files(['T25240a.hs'])], +test('T25240', [when(leading_underscore(),skip), req_interp, extra_files(['T25240a.hs'])], makefile_test, ['T25240']) ===================================== testsuite/tests/ghci/linking/all.T ===================================== @@ -76,4 +76,4 @@ test('big-obj', [extra_files(['big-obj-c.c', 'big-obj.hs']), unless(doing_ghci, skip), unless(opsys('mingw32'), skip)], makefile_test, ['big-obj']) -test('T25155', [req_c, req_th, req_interp, extra_files(['T25155_iserv_main.c', 'T25155_iserv.hs', 'T25155_TH.hs'])], makefile_test, []) +test('T25155', [req_c, req_th, req_interp, req_rts_linker, extra_files(['T25155_iserv_main.c', 'T25155_iserv.hs', 'T25155_TH.hs'])], makefile_test, []) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/dfd1db48aaa1ee6c109e9a05ce34672418f17f59...3fb5d3990340272c3b3b9cc62c5b0cf30dc21780 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/dfd1db48aaa1ee6c109e9a05ce34672418f17f59...3fb5d3990340272c3b3b9cc62c5b0cf30dc21780 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 08:42:34 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Sat, 07 Dec 2024 03:42:34 -0500 Subject: [Git][ghc/ghc][master] TH: Add typed variants of dataToExpQ and liftData Message-ID: <67540a79e3706_2b0e5762177c8356@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 7 changed files: - libraries/ghc-internal/CHANGELOG.md - libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs - libraries/template-haskell/changelog.md - libraries/template-haskell/tests/all.T - + libraries/template-haskell/tests/dataToCodeQUnit.hs - + libraries/template-haskell/tests/dataToCodeQUnit.stdout - testsuite/tests/interface-stability/template-haskell-exports.stdout Changes: ===================================== libraries/ghc-internal/CHANGELOG.md ===================================== @@ -1,5 +1,9 @@ # Revision history for `ghc-internal` +## 9.1401.0 -- yyyy-mm-dd + +* Introduce `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. + ## 9.1001.0 -- 2024-05-01 * Package created containing implementation moved from `base`. ===================================== libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs ===================================== @@ -26,7 +26,9 @@ module GHC.Internal.TH.Lift ( Lift(..) -- * Generic Lift implementations , dataToQa + , dataToCodeQ , dataToExpQ + , liftDataTyped , liftData , dataToPatQ -- * Wired-in names @@ -540,6 +542,12 @@ function. Two complications "pack" is defined in a different module than the data type "Text". -} +-- | A typed variant of 'dataToExpQ'. +dataToCodeQ :: (Quote m, Data a) + => (forall b . Data b => b -> Maybe (Code m b)) + -> a -> Code m a +dataToCodeQ f = unsafeCodeCoerce . dataToExpQ (fmap unTypeCode . f) + -- | 'dataToExpQ' converts a value to a 'Exp' representation of the -- same value, in the SYB style. It is generalized to take a function -- override type-specific cases; see 'liftData' for a more commonly @@ -563,6 +571,10 @@ dataToExpQ = dataToQa varOrConE litE (foldl appE) appE x y = do { a <- x; b <- y; return (AppE a b)} litE c = return (LitE c) +-- | A typed variant of 'liftData'. +liftDataTyped :: (Quote m, Data a) => a -> Code m a +liftDataTyped = dataToCodeQ (const Nothing) + -- | 'liftData' is a variant of 'lift' in the 'Lift' type class which -- works for any type with a 'Data' instance. liftData :: (Quote m, Data a) => a -> m Exp ===================================== libraries/template-haskell/changelog.md ===================================== @@ -1,5 +1,9 @@ # Changelog for [`template-haskell` package](http://hackage.haskell.org/package/template-haskell) +## 2.24.0.0 + + * Introduce `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. + ## 2.23.0.0 * Extend `Exp` with `ForallE`, `ForallVisE`, `ConstraintedE`, ===================================== libraries/template-haskell/tests/all.T ===================================== @@ -1,3 +1,4 @@ # difficult to test TH with profiling, because we have to build twice test('dataToExpQUnit', [omit_ways(prof_ways), req_th], compile, ['-v0']) +test('dataToCodeQUnit', [omit_ways(prof_ways), req_th], compile, ['-v0']) test('pragCompletePpr', [omit_ways(prof_ways), req_th], compile_and_run, ['']) ===================================== libraries/template-haskell/tests/dataToCodeQUnit.hs ===================================== @@ -0,0 +1,33 @@ +{-# LANGUAGE TemplateHaskell #-} + +module Foo where + +import Language.Haskell.TH +import Language.Haskell.TH.Quote +import Language.Haskell.TH.Syntax +import System.IO +import Data.Data +import Data.Functor +import Control.Monad + +foo, bar :: (Bool, Bool) +foo = $$(do + let + selectBool :: Data a => a -> Maybe a + selectBool x = guard (sameDataType x False) $> x + where + sameDataType y z = show (dataTypeOf y) == show (dataTypeOf z) + flipBool :: Data a => a -> a + flipBool x + | x ~= False = dataCast True + | x ~= True = dataCast False + | otherwise = x + where + dataCast = fromConstr . toConstr + x ~= y = toConstr x == toConstr y + dataToCodeQ (fmap (liftDataTyped . flipBool) . selectBool) (False, True) + ) +bar = (True, False) + +main :: IO () +main = print (foo == bar) ===================================== libraries/template-haskell/tests/dataToCodeQUnit.stdout ===================================== @@ -0,0 +1 @@ +True ===================================== testsuite/tests/interface-stability/template-haskell-exports.stdout ===================================== @@ -2052,8 +2052,8 @@ module Language.Haskell.TH.Syntax where qAddForeignFilePath :: ForeignSrcLang -> GHC.Internal.Base.String -> m () qAddModFinalizer :: Q () -> m () qAddCorePlugin :: GHC.Internal.Base.String -> m () - qGetQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => m (GHC.Internal.Maybe.Maybe a) - qPutQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => a -> m () + qGetQ :: forall a. ghc-internal-9.1300.0:GHC.Internal.Data.Typeable.Internal.Typeable a => m (GHC.Internal.Maybe.Maybe a) + qPutQ :: forall a. ghc-internal-9.1300.0:GHC.Internal.Data.Typeable.Internal.Typeable a => a -> m () qIsExtEnabled :: Extension -> m GHC.Types.Bool qExtsEnabled :: m [Extension] qPutDoc :: DocLoc -> GHC.Internal.Base.String -> m () @@ -2126,6 +2126,7 @@ module Language.Haskell.TH.Syntax where cmpEq :: GHC.Types.Ordering -> GHC.Types.Bool compareBytes :: Bytes -> Bytes -> GHC.Types.Ordering counter :: GHC.Internal.IORef.IORef Uniq + dataToCodeQ :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (Code m b)) -> a -> Code m a dataToExpQ :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m Exp)) -> a -> m Exp dataToPatQ :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m Pat)) -> a -> m Pat dataToQa :: forall (m :: * -> *) a k q. (Quote m, GHC.Internal.Data.Data.Data a) => (Name -> k) -> (Lit -> m q) -> (k -> [m q] -> m q) -> (forall b. GHC.Internal.Data.Data.Data b => b -> GHC.Internal.Maybe.Maybe (m q)) -> a -> m q @@ -2135,7 +2136,7 @@ module Language.Haskell.TH.Syntax where falseName :: Name getDoc :: DocLoc -> Q (GHC.Internal.Maybe.Maybe GHC.Internal.Base.String) getPackageRoot :: Q GHC.Internal.IO.FilePath - getQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => Q (GHC.Internal.Maybe.Maybe a) + getQ :: forall a. ghc-internal-9.1300.0:GHC.Internal.Data.Typeable.Internal.Typeable a => Q (GHC.Internal.Maybe.Maybe a) get_cons_names :: Con -> [Name] hoistCode :: forall (m :: * -> *) (n :: * -> *) (r :: GHC.Types.RuntimeRep) (a :: TYPE r). GHC.Internal.Base.Monad m => (forall x. m x -> n x) -> Code m a -> Code n a isExtEnabled :: Extension -> Q GHC.Types.Bool @@ -2145,6 +2146,7 @@ module Language.Haskell.TH.Syntax where leftName :: Name liftCode :: forall (r :: GHC.Types.RuntimeRep) (a :: TYPE r) (m :: * -> *). m (TExp a) -> Code m a liftData :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => a -> m Exp + liftDataTyped :: forall (m :: * -> *) a. (Quote m, GHC.Internal.Data.Data.Data a) => a -> Code m a liftString :: forall (m :: * -> *). Quote m => GHC.Internal.Base.String -> m Exp location :: Q Loc lookupName :: GHC.Types.Bool -> GHC.Internal.Base.String -> Q (GHC.Internal.Maybe.Maybe Name) @@ -2181,7 +2183,7 @@ module Language.Haskell.TH.Syntax where oneName :: Name pkgString :: PkgName -> GHC.Internal.Base.String putDoc :: DocLoc -> GHC.Internal.Base.String -> Q () - putQ :: forall a. ghc-internal-9.1001.0:GHC.Internal.Data.Typeable.Internal.Typeable a => a -> Q () + putQ :: forall a. ghc-internal-9.1300.0:GHC.Internal.Data.Typeable.Internal.Typeable a => a -> Q () recover :: forall a. Q a -> Q a -> Q a reify :: Name -> Q Info reifyAnnotations :: forall a. GHC.Internal.Data.Data.Data a => AnnLookup -> Q [a] View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4c58bdf63cf18be737ff4feb3b75cf53c7434897 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4c58bdf63cf18be737ff4feb3b75cf53c7434897 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 10:24:14 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Sat, 07 Dec 2024 05:24:14 -0500 Subject: [Git][ghc/ghc][wip/sand-witch/tysyn-info-ppr] 458 commits: Haddock: Add no-compilation flag Message-ID: <6754224ec920e_2e201944ba10448f6@gitlab.mail> Andrei Borzenkov pushed to branch wip/sand-witch/tysyn-info-ppr at Glasgow Haskell Compiler / GHC Commits: 1499764f by Sjoerd Visscher at 2024-08-29T16:52:56+02:00 Haddock: Add no-compilation flag This flag makes sure to avoid recompilation of the code when generating documentation by only reading the .hi and .hie files, and throw an error if it can't find them. - - - - - 768fe644 by Andreas Klebinger at 2024-09-03T13:15:20-04:00 Add functions to check for weakly pinned arrays. This commit adds `isByteArrayWeaklyPinned#` and `isMutableByteArrayWeaklyPinned#` primops. These check if a bytearray is *weakly* pinned. Which means it can still be explicitly moved by the user via compaction but won't be moved by the RTS. This moves us one more stop closer to nailing down #22255. - - - - - b16605e7 by Arsen Arsenović at 2024-09-03T13:16:05-04:00 ghc-toolchain: Don't leave stranded a.outs when testing for -g0 This happened because, when ghc-toolchain tests for -g0, it does so by compiling an empty program. This compilation creates an a.out. Since we create a temporary directory, lets place the test program compilation in it also, so that it gets cleaned up. Fixes: 25b0b40467d0a12601497117c0ad14e1fcab0b74 Closes: https://gitlab.haskell.org/ghc/ghc/-/issues/25203 - - - - - 83e70b14 by Torsten Schmits at 2024-09-03T13:16:41-04:00 Build foreign objects for TH with interpreter's way when loading from iface Fixes #25211 When linking bytecode for TH from interface core bindings with `-fprefer-byte-code`, foreign sources are loaded from the interface as well and compiled to object code in an ad-hoc manner. The results are then loaded by the interpreter, whose way may differ from the current build's target way. This patch ensures that foreign objects are compiled with the interpreter's way. - - - - - 0d3bc2fa by Cheng Shao at 2024-09-04T07:20:06-04:00 rts: fix checkClosure error message This patch fixes an error message in checkClosure() when the closure has already been evacuated. The previous logic was meant to print the evacuated closure's type in the error message, but it was completely wrong, given info was not really an info table, but a tagged pointer that points to the closure's new address. - - - - - fb0a4e5c by Sven Tennie at 2024-09-04T07:20:43-04:00 MO_AcquireFence: Less restrictive barrier GCC and CLang translate the built-in `atomic_thread_fence(memory_order_acquire)` to `dmb ishld`, which is a bit less restrictive than `dmb ish` (which also implies stores.) - - - - - a45f1488 by Fendor at 2024-09-04T20:22:00-04:00 testsuite: Add support to capture performance metrics via 'perf' Performance metrics collected via 'perf' can be more accurate for run-time performance than GHC's rts, due to the usage of hardware counters. We allow performance tests to also record PMU events according to 'perf list'. - - - - - ce61fca5 by Fendor at 2024-09-04T20:22:00-04:00 gitlab-ci: Add nightly job for running the testsuite with perf profiling support - - - - - 6dfb9471 by Fendor at 2024-09-04T20:22:00-04:00 Enable perf profiling for compiler performance tests - - - - - da306610 by sheaf at 2024-09-04T20:22:41-04:00 RecordCon lookup: don't allow a TyCon This commit adds extra logic when looking up a record constructor. If GHC.Rename.Env.lookupOccRnConstr returns a TyCon (as it may, due to the logic explained in Note [Pattern to type (P2T) conversion]), we emit an error saying that the data constructor is not in scope. This avoids the compiler falling over shortly thereafter, in the call to 'lookupConstructorInfo' inside 'GHC.Rename.Env.lookupRecFieldOcc', because the record constructor would not have been a ConLike. Fixes #25056 - - - - - 9c354beb by Matthew Pickering at 2024-09-04T20:23:16-04:00 Use deterministic names for temporary files When there are multiple threads they can race to create a temporary file, in some situations the thread will create ghc_1.c and in some it will create ghc_2.c. This filename ends up in the debug info for object files after compiling a C file, therefore contributes to object nondeterminism. In order to fix this we store a prefix in `TmpFs` which serves to namespace temporary files. The prefix is populated from the counter in TmpFs when the TmpFs is forked. Therefore the TmpFs must be forked outside the thread which consumes it, in a deterministic order, so each thread always receives a TmpFs with the same prefix. This assumes that after the initial TmpFs is created, all other TmpFs are created from forking the original TmpFs. Which should have been try anyway as otherwise there would be file collisions and non-determinism. Fixes #25224 - - - - - 59906975 by Hécate Kleidukos at 2024-09-05T10:57:15-04:00 Silence x-partial in Haddock.Backends.Xhtml This is an unfortunate consequence of two mechanisms: * GHC provides (possibly-empty) lists of names * The functions that retrieve those names are not equipped to do error reporting, and thus accept these lists at face value. They will have to be attached an effect for error reporting in a later refactoring - - - - - 8afbab62 by Hécate Kleidukos at 2024-09-05T10:57:15-04:00 hadrian: Support loading haddock in ghci There is one tricky aspect with wired-in packages where the boot package is built with `-this-unit-id ghc` but the dependency is reported as `-package-id ghc-9.6...`. This has never been fixed in GHC as the situation of loading wired-in packages into the multi-repl seems like quite a niche feature that is always just easier to workaround. - - - - - 6cac9eb8 by Matthew Pickering at 2024-09-05T10:57:15-04:00 hadrian/multi: Load all targets when ./hadrian/ghci-multi is called This seems to make a bit more sense than just loading `ghc` component (and dependencies). - - - - - 7d84df86 by Matthew Pickering at 2024-09-05T10:57:51-04:00 ci: Beef up determinism interface test There have recently been some determinism issues with the simplifier and documentation. We enable more things to test in the ABI test to check that we produce interface files deterministically. - - - - - 5456e02e by Sylvain Henry at 2024-09-06T11:57:01+02:00 Transform some StgRhsClosure into StgRhsCon after unarisation (#25166) Before unarisation we may have code like: Test.foo :: Test.D [GblId, Unf=OtherCon []] = \u [] case (# |_| #) [GHC.Types.(##)] of sat_sAw [Occ=Once1] { __DEFAULT -> Test.D [GHC.Types.True sat_sAw]; }; After unarisation we get: Test.foo :: Test.D [GblId, Unf=OtherCon []] = {} \u [] Test.D [GHC.Types.True 2#]; Notice that it's still an Updatable closure for no reason anymore. This patch transforms appropriate StgRhsClosures into StgRhsCons after unarisation, allowing these closures to be statically allocated. Now we get the expected: Test.foo :: Test.D [GblId, Unf=OtherCon []] = Test.D! [GHC.Types.True 2#]; Fix #25166 To avoid duplicating code, this patch refactors the mk(Top)StgRhs functions and put them in a GHC.Stg.Make module alongside the new mk(Top)StgRhsCon_maybe functions. - - - - - 958b4518 by Hécate Kleidukos at 2024-09-06T16:40:56-04:00 haddock: Add missing requirements.txt for the online manual - - - - - 573f9833 by Sven Tennie at 2024-09-08T09:58:21+00:00 AArch64: Implement takeRegRegMoveInstr This has likely been forgotten. - - - - - 20b0de7d by Hécate Kleidukos at 2024-09-08T14:19:28-04:00 haddock: Configuration fix for ReadTheDocs - - - - - 03055c71 by Sylvain Henry at 2024-09-09T14:58:15-04:00 JS: fake support for native adjustors (#25159) The JS backend doesn't support adjustors (I believe) and in any case if it ever supports them it will be a native support, not one via libffi. - - - - - 5bf0e6bc by Sylvain Henry at 2024-09-09T14:58:56-04:00 JS: remove redundant h$lstat It was introduced a second time by mistake in 27dceb42376c34b99a38e36a33b2abc346ed390f (cf #25190) - - - - - ffbc2ab0 by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Refactor only newSysLocalDs * Change newSysLocalDs to take a scaled type * Add newSysLocalMDs that takes a type and makes a ManyTy local Lots of files touched, nothing deep. - - - - - 7124e4ad by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Don't introduce 'nospec' on the LHS of a RULE This patch address #25160. The main payload is: * When desugaring the LHS of a RULE, do not introduce the `nospec` call for non-canonical evidence. See GHC.Core.InstEnv Note [Coherence and specialisation: overview] The `nospec` call usually introdued in `dsHsWrapper`, but we don't want it on the LHS of a RULE (that's what caused #25160). So now `dsHsWrapper` takes a flag to say if it's on the LHS of a RULE. See wrinkle (NC1) in `Note [Desugaring non-canonical evidence]` in GHC.HsToCore.Binds. But I think this flag will go away again when I have finished with my (entirely separate) speciaise-on-values patch (#24359). All this meant I had to re-understand the `nospec` stuff and coherence, and that in turn made me do some refactoring, and add a lot of new documentation The big change is that in GHC.Core.InstEnv, I changed the /type synonym/ `Canonical` into a /data type/ `CanonicalEvidence` and documented it a lot better. That in turn made me realise that CalLStacks were being treated with a bit of a hack, which I documented in `Note [CallStack and ExecptionContext hack]`. - - - - - 663daf8d by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Add defaulting of equalities This MR adds one new defaulting strategy to the top-level defaulting story: see Note [Defaulting equalities] in GHC.Tc.Solver. This resolves #25029 and #25125, which showed that users were accidentally relying on a GHC bug, which was fixed by commit 04f5bb85c8109843b9ac2af2a3e26544d05e02f4 Author: Simon Peyton Jones <simon.peytonjones at gmail.com> Date: Wed Jun 12 17:44:59 2024 +0100 Fix untouchability test This MR fixes #24938. The underlying problem was tha the test for "does this implication bring in scope any equalities" was plain wrong. This fix gave rise to a number of user complaints; but the improved defaulting story of this MR largely resolves them. On the way I did a bit of refactoring, of course * Completely restructure the extremely messy top-level defaulting code. The new code is in GHC.Tc.Solver.tryDefaulting, and is much, much, much esaier to grok. - - - - - e28cd021 by Andrzej Rybczak at 2024-09-10T00:41:18-04:00 Don't name a binding pattern It's a keyword when PatternSynonyms are set. - - - - - b09571e2 by Simon Peyton Jones at 2024-09-10T00:41:54-04:00 Do not use an error thunk for an absent dictionary In worker/wrapper we were using an error thunk for an absent dictionary, but that works very badly for -XDictsStrict, or even (as #24934 showed) in some complicated cases involving strictness analysis and unfoldings. This MR just uses RubbishLit for dictionaries. Simple. No test case, sadly because our only repro case is rather complicated. - - - - - 8bc9f5f6 by Hécate Kleidukos at 2024-09-10T00:42:34-04:00 haddock: Remove support for applehelp format in the Manual - - - - - 9ca15506 by doyougnu at 2024-09-10T10:46:38-04:00 RTS linker: add support for hidden symbols (#25191) Add linker support for hidden symbols. We basically treat them as weak symbols. Patch upstreamed from haskell.nix Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 3b2dc826 by Sven Tennie at 2024-09-10T10:47:14-04:00 Fix C warnings (#25237) GCC 14 treats the fixed warnings as errors by default. I.e. we're gaining GCC 14 compatibility with these fixes. - - - - - 05715994 by Sylvain Henry at 2024-09-10T10:47:55-04:00 JS: fix codegen of static string data Before this patch, when string literals are made trivial, we would generate `h$("foo")` instead of `h$str("foo")`. This was introduced by mistake in 6bd850e887b82c5a28bdacf5870d3dc2fc0f5091. - - - - - 949ebced by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Re-organise cross-OS compatibility layer - - - - - 84ac9a99 by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Remove CPP for obsolete GHC and Cabal versions - - - - - 370d1599 by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Move the changelog file to the 'extra-doc-files' section in the cabal file - - - - - cfbff65a by Simon Peyton Jones at 2024-09-10T19:20:16-04:00 Add ZonkAny and document it This MR fixed #24817 by adding ZonkAny, which takes a Nat argument. See Note [Any types] in GHC.Builtin.Types, especially wrinkle (Any4). - - - - - 0167e472 by Matthew Pickering at 2024-09-11T02:41:42-04:00 hadrian: Make sure ffi headers are built before using a compiler When we are using ffi adjustors then we rely on `ffi.h` and `ffitarget.h` files during code generation when compiling stubs. Therefore we need to add this dependency to the build system (which this patch does). Reproducer, configure with `--enable-libffi-adjustors` and then build "_build/stage1/libraries/ghc-prim/build/GHC/Types.p_o". Observe that this fails before this patch and works afterwards. Fixes #24864 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 0f696958 by Rodrigo Mesquita at 2024-09-11T02:42:18-04:00 base: Deprecate BCO primops exports from GHC.Exts See https://github.com/haskell/core-libraries-committee/issues/212. These reexports will be removed in GHC 9.14. - - - - - cf0e7729 by Alan Zimmerman at 2024-09-11T02:42:54-04:00 EPA: Remove Anchor = EpaLocation synonym This just causes confusion. - - - - - 8e462f4d by Andrew Lelechenko at 2024-09-11T22:20:37-04:00 Bump submodule deepseq to 1.5.1.0 - - - - - aa4500ae by Sebastian Graf at 2024-09-11T22:21:13-04:00 User's guide: Fix the "no-backtracking" example of -XOrPatterns (#25250) Fixes #25250. - - - - - 1c479c01 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add Native Code Generator (NCG) This architecture wasn't supported before. Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 51b678e1 by Sven Tennie at 2024-09-12T10:39:38+00:00 Adjust test timings for slower computers Increase the delays a bit to be able to run these tests on slower computers. The reference was a Lichee Pi 4a RISCV64 machine. - - - - - a0e41741 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add RTS linker This architecture wasn't supported before. Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - d365b1d4 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Ignore divbyzero test The architecture's behaviour differs from the test's expectations. See comment in code why this is okay. - - - - - abf3d699 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Enable MulMayOflo_full test It works and thus can be tested. - - - - - 38c7ea8c by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: LibffiAdjustor: Ensure code caches are flushed RISCV64 needs a specific code flushing sequence (involving fence.i) when new code is created/loaded. - - - - - 7edc6965 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add additional linker symbols for builtins We're relying on some GCC/Clang builtins. These need to be visible to the linker (and not be stripped away.) - - - - - 92ad3d42 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add GHCi support As we got a RTS linker for this architecture now, we can enable GHCi for it. - - - - - a145f701 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Set codeowners of the NCG - - - - - 8e6d58cf by Sven Tennie at 2024-09-12T10:39:38+00:00 Add test for C calling convention Ensure that parameters and return values are correctly processed. A dedicated test (like this) helps to get the subtleties of calling conventions easily right. The test is failing for WASM32 and marked as fragile to not forget to investigate this (#25249). - - - - - fff55592 by Torsten Schmits at 2024-09-12T21:50:34-04:00 finder: Add `IsBootInterface` to finder cache keys - - - - - cdf530df by Alan Zimmerman at 2024-09-12T21:51:10-04:00 EPA: Sync ghc-exactprint to GHC - - - - - 1374349b by Sebastian Graf at 2024-09-13T07:52:11-04:00 DmdAnal: Fast path for `multDmdType` (#25196) This is in order to counter a regression exposed by SpecConstr. Fixes #25196. - - - - - 80769bc9 by Andrew Lelechenko at 2024-09-13T07:52:47-04:00 Bump submodule array to 0.5.8.0 - - - - - 49ac3fb8 by Sylvain Henry at 2024-09-16T10:33:01-04:00 Linker: add support for extra built-in symbols (#25155) See added Note [Extra RTS symbols] and new user guide entry. Co-authored-by: Hamish Mackenzie <Hamish.K.Mackenzie at gmail.com> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 3939a8bf by Samuel Thibault at 2024-09-16T10:33:44-04:00 GNU/Hurd: Add getExecutablePath support GNU/Hurd exposes it as /proc/self/exe just like on Linux. - - - - - d3b19851 by Sylvain Henry at 2024-09-17T11:03:28-04:00 RTS: expose closure_sizeW_ (#25252) C code using the closure_sizeW macro can't be linked with the RTS linker without this patch. It fails with: ghc-9.11.20240911: Failed to lookup symbol: closure_sizeW_ Fix #25252 Co-authored-by: Hamish Mackenzie <Hamish.K.Mackenzie at gmail.com> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 137bf74d by Sebastian Graf at 2024-09-17T11:04:05-04:00 HsExpr: Inline `HsWrap` into `WrapExpr` This nice refactoring was suggested by Simon during review: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13261#note_583374 Fixes #25264. - - - - - 7fd9e5e2 by Sebastian Graf at 2024-09-17T11:04:05-04:00 Pmc: Improve Desugaring of overloaded list patterns (#25257) This actually makes things simpler. Fixes #25257. - - - - - e4169ba9 by Ben Gamari at 2024-09-18T07:55:28-04:00 configure: Correctly report when subsections-via-symbols is disabled As noted in #24962, currently subsections-via-symbols is disabled on AArch64/Darwin due to alleged breakage. However, `configure` reports to the user that it is enabled. Fix this. - - - - - 9d20a787 by Mario Blažević at 2024-09-18T07:56:08-04:00 Modified the default export implementation to match the amended spec - - - - - 35eb4f42 by Sylvain Henry at 2024-09-18T07:57:00-04:00 FFI: don't ppr Id/Var symbols with debug info (#25255) Even if `-dpp-debug` is enabled we should still generate valid C code. So we disable debug info printing when rendering with Code style. - - - - - 9e96dad8 by Sebastian Graf at 2024-09-21T17:47:59-04:00 Demand: Combine examples into Note (#25107) Just a leftover from !13060. Fixes #25107. - - - - - 21aaa34b by sheaf at 2024-09-21T17:48:36-04:00 Use x86_64-unknown-windows-gnu target for LLVM on Windows - - - - - 992a7624 by sheaf at 2024-09-21T17:48:36-04:00 LLVM: use -relocation-model=pic on Windows This is necessary to avoid the segfaults reported in #22487. Fixes #22487 - - - - - c50d29be by Ryan Hendrickson at 2024-09-21T17:49:15-04:00 compiler: Use type abstractions when deriving For deriving newtype and deriving via, in order to bring type variables needed for the coercions into scope, GHC generates type signatures for derived class methods. As a simplification, drop the type signatures and instead use type abstractions to bring method type variables into scope. - - - - - f04fd0ae by Zubin Duggal at 2024-09-21T17:49:51-04:00 driver: Ensure we run driverPlugin for staticPlugins (#25217) driverPlugins are only run when the plugin state changes. This meant they were never run for static plugins, as their state never changes. We need to keep track of whether a static plugin has been initialised to ensure we run static driver plugins at least once. This necessitates an additional field in the `StaticPlugin` constructor as this state has to be bundled with the plugin itself, as static plugins have no name/identifier we can use to otherwise reference them - - - - - 620becd7 by Andreas Klebinger at 2024-09-21T17:50:27-04:00 Allow unknown fd device types for setNonBlockingMode. This allows fds with a unknown device type to have blocking mode set. This happens for example for fds from the inotify subsystem. Fixes #25199. - - - - - c76e25b3 by Hécate Kleidukos at 2024-09-21T17:51:07-04:00 Use Hackage version of Cabal 3.14.0.0 for Hadrian. We remove the vendored Cabal submodule. Also update the bootstrap plans Fixes #25086 - - - - - 6c83fd7f by Zubin Duggal at 2024-09-21T17:51:07-04:00 ci: Ensure we source ci.sh in any jobs that run commands outside of ci.sh ci.sh sets up the toolchain environment, including paths for the cabal directory, the toolchain binaries etc. If we run any commands outside of ci.sh, unless we source ci.sh we will use the wrong values for these environment variables. In particular, I ran into an issue where the cabal invocation `hadrian/ghci` was using an old index state despite `ci.sh setup` updating and setting the correct index state. This is because `ci.sh` sets the `CABAL_DIR` to a different place, which is where the index was downloaded to, but we were using the default cabal directory outside ci.sh The solution is to source the correct environment `ci.sh` using `. ci.sh setup` - - - - - 9586998d by Sven Tennie at 2024-09-21T17:51:43-04:00 ghc-toolchain: Set -fuse-ld even for ld.bfd This reflects the behaviour of the autoconf scripts. - - - - - d7016e0d by Sylvain Henry at 2024-09-21T17:52:24-04:00 Parser: be more careful when lexing extended literals (#25258) Previously we would lex invalid prefixes like "8#Int3" as [8#Int, 3]. A side-effect of this patch is that we now allow negative unsigned extended literals. They trigger an overflow warning later anyway. - - - - - ca67d7cb by Zubin Duggal at 2024-09-22T02:34:06-04:00 rts: Ensure we dump new Cost Centres added by freshly loaded objects to the eventlog. To do this, we keep track of the ID of the last cost centre we dumped in DUMPED_CC_ID, and call dumpCostCentresToEventLog from refreshProfilingCCSs, which will dump all the new cost centres up to the one we already dumped in DUMPED_CC_ID. Fixes #24148 - - - - - c0df5aa9 by Alan Zimmerman at 2024-09-22T02:34:42-04:00 EPA: Replace AnnsModule am_main with EpTokens Working towards removing `AddEpAnn` - - - - - 2a551cd5 by Matthew Pickering at 2024-09-24T16:33:50+05:30 ci: Run abi-test on test-abi label - - - - - ab4039ac by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 testsuite: Add a test for object determinism Extends the abi_test with an object determinism check Also includes a standalone test to be run by developers manually when debugging issues with determinism. - - - - - d62c18d8 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Sampling uniques in the CG To achieve object determinism, the passes processing Cmm and the rest of the code generation pipeline musn't create new uniques which are non-deterministic. This commit changes occurrences of non-deterministic unique sampling within these code generation passes by a deterministic unique sampling strategy by propagating and threading through a deterministic incrementing counter in them. The threading is done implicitly with `UniqDSM` and `UniqDSMT`. Secondly, the `DUniqSupply` used to run a `UniqDSM` must be threaded through all passes to guarantee uniques in different passes are unique amongst them altogether. Specifically, the same `DUniqSupply` must be threaded through the CG Streaming pipeline, starting with Driver.Main calling `StgToCmm.codeGen`, `cmmPipeline`, `cmmToRawCmm`, and `codeOutput` in sequence. To thread resources through the `Stream` abstraction, we use the `UniqDSMT` transformer on top of `IO` as the Monad underlying the Stream. `UniqDSMT` will thread the `DUniqSupply` through every pass applied to the `Stream`, for every element. We use @type CgStream = Stream (UniqDSMT IO)@ for the Stream used in code generation which that carries through the deterministic unique supply. See Note [Deterministic Uniques in the CG] - - - - - 3bbe4af4 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Cmm unique renaming pass To achieve object determinism, we need to prevent the non-deterministic uniques from leaking into the object code. We can do this by deterministically renaming the non-external uniques in the Cmm groups that are yielded right after StgToCmm. The key to deterministic renaming is observing that the order of declarations, instructions, and data in the Cmm groups are already deterministic (modulo other determinism bugs), regardless of the uniques. We traverse the Cmm AST in this deterministic order and rename the uniques, incrementally, in the order they are found, thus making them deterministic. This renaming is guarded by -fobject-determinism which is disabled by default for now. This is one of the key passes for object determinism. Read about the overview of object determinism and a more detailed explanation of this pass in: * Note [Object determinism] * Note [Renaming uniques deterministically] Significantly closes the gap to #12935 - - - - - 8357ed50 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: DCmmGroup vs CmmGroup Part of our strategy in producing deterministic objects, namely, renaming all Cmm uniques in order, depend on the object code produced having a deterministic order (say, A_closure always comes before B_closure). However, the use of LabelMaps in the Cmm representation invalidated this requirement because the LabelMaps elements would already be in a non-deterministic order (due to the original uniques), and the renaming in sequence wouldn't work because of that non-deterministic order. Therefore, we now start off with lists in CmmGroup (which preserve the original order), and convert them into LabelMaps (for performance in the code generator) after the uniques of the list elements have been renamed. See Note [DCmmGroup vs CmmGroup or: Deterministic Info Tables] and #12935. Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - 0e675fb8 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Don't print unique in pprFullName This unique was leaking as part of the profiling description in info tables when profiling was enabled, despite not providing information relevant to the profile. - - - - - 340f58b0 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: UDFM for distinct-constructor-tables In order to produce deterministic objects when compiling with -distinct-constructor-tables, we also have to update the data constructor map to be backed by a deterministic unique map (UDFM) rather than a non-deterministic one (UniqMap). - - - - - 282f37a0 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: InfoTableMap uniques in generateCgIPEStub Fixes object determinism when using -finfo-table-map Make sure to also deterministically rename the IPE map (as per Note [Renaming uniques deterministically]), and to use a deterministic unique supply when creating new labels for the IPE information to guarantee deterministic objects when IPE information is requested. Note that the Cmm group produced in generateCgIPEStub must /not/ be renamed because renaming uniques is not idempotent, and the references to the previously renamed code in the IPE Cmm group would be renamed twice and become invalid references to non-existent symbols. We do need to det-rename the InfoTableMap that is created in the conversion from Core to Stg. This is not a problem since that map won't refer any already renamed names (since it was created before the renaming). - - - - - 7b37afc9 by Zubin Duggal at 2024-09-24T16:33:50+05:30 ci: Allow abi-test to fail. We are not fully deterministic yet, see #12935 for work that remains to be done. - - - - - a63ee33a by Simon Peyton Jones at 2024-09-25T17:08:24-04:00 Add Given injectivity for built-in type families Ticket #24845 asks (reasonably enough) that if we have [G] a+b ~ 0 then we also know [G] a ~ 0, b ~ 0 and similar injectivity-like facts for other built-in type families. The status quo was that we never generate evidence for injectivity among Givens -- but it is quite reasonnable to do so. All we need is to have /evidence/ for the new constraints This MR implements that goal. I also took the opportunity to * Address #24978: refactoring UnivCo * Fix #25248, which was a consequences of the previous formulation of UnivCo As a result this MR touches a lot of code. The big things are: * Coercion constructor UnivCo now takes a [Coercion] as argument to express the coercions on which the UnivCo depends. A nice consequence is that UnivCoProvenance now has no free variables, simpler in a number of places. * Coercion constructors AxiomInstCo and AxiomRuleCo are combined into AxiomCo. The new AxiomCo, carries a (slightly oddly named) CoAxiomRule, which itself is a sum type of the various forms of built-in axiom. See Note [CoAxiomRule] in GHC.Core.Coercion.Axiom A merit of this is that we can separate the case of open and closed type families, and eliminate the redundant `BranchIndex` in the former case. * Much better representation for data BuiltInSynFamily, which means we no longer need to enumerate built-in axioms as well as built-in tycons. * There is a massive refactor in GHC.Builtin.Types.Literals, which contains all the built-in axioms for type-level operations (arithmetic, append, cons etc). A big change is that instead of redundantly having (a) a hand-written matcher, and (b) a template-based "proves" function, which were hard to keep in sync, the two are derive from one set of human-supplied info. See GHC.Builtin.Types.Literals.mkRewriteAxiom, and friends. * Significant changes in GHC.Tc.Solver.Equality to account for the new opportunity for Given/Given equalities. Smaller things * Improve pretty-printing to avoid parens around atomic coercions. * Do proper eqType in findMatchingIrreds, not `eqTypeNoKindCheck`. Looks like a bug, Richard agrees. * coercionLKind and coercionRKind are hot functions. I refactored the implementation (which I had to change anyway) to increase sharing. See Note [coercionKind performance] in GHC.Core.Coercion * I wrote a new Note [Finding orphan names] in GHC.Core.FVs about orphan names * I improved the `is_concrete` flag in GHC.Core.Type.buildSynTyCon, to avoid calling tyConsOfType. I forget exactly why I did this, but it's definitely better now. * I moved some code from GHC.Tc.Types.Constraint into GHC.Tc.Types.CtLocEnv and I renamed the module GHC.Tc.Types.CtLocEnv to GHC.Tc.Types.CtLoc - - - - - dd8ef342 by Ryan Scott at 2024-09-25T17:09:01-04:00 Resolve ambiguous method-bound type variables in vanilla defaults and GND When defining an instance of a class with a "vanilla" default, such as in the following example (from #14266): ```hs class A t where f :: forall x m. Monoid x => t m -> m f = <blah> instance A [] ``` We have to reckon with the fact that the type of `x` (bound by the type signature for the `f` method) is ambiguous. If we don't deal with the ambiguity somehow, then when we generate the following code: ```hs instance A [] where f = $dmf @[] -- NB: the type of `x` is still ambiguous ``` Then the generated code will not typecheck. (Issue #25148 is a more recent example of the same problem.) To fix this, we bind the type variables from the method's original type signature using `TypeAbstractions` and instantiate `$dmf` with them using `TypeApplications`: ```hs instance A [] where f @x @m = $dmf @[] @x @m -- `x` is no longer ambiguous ``` Note that we only do this for vanilla defaults and not for generic defaults (i.e., defaults using `DefaultSignatures`). For the full details, see `Note [Default methods in instances] (Wrinkle: Ambiguous types from vanilla method type signatures)`. The same problem arose in the code generated by `GeneralizedNewtypeDeriving`, as we also fix it here using the same technique. This time, we can take advantage of the fact that `GeneralizedNewtypeDeriving`-generated code _already_ brings method-bound type variables into scope via `TypeAbstractions` (after !13190), so it is very straightforward to visibly apply the type variables on the right-hand sides of equations. See `Note [GND and ambiguity]`. Fixes #14266. Fixes #25148. - - - - - 0a4da5d2 by ARATA Mizuki at 2024-09-25T17:09:41-04:00 Document primitive string literals and desugaring of string literals Fixes #17474 and #17974 Co-authored-by: Matthew Craven <5086-clyring at users.noreply.gitlab.haskell.org> - - - - - ad0731ad by Zubin Duggal at 2024-09-25T17:10:18-04:00 rts: Fix segfault when using non-moving GC with profiling `nonMovingCollect()` swaps out the `static_flag` value used as a sentinel for `gct->scavenged_static_objects`, but the subsequent call `resetStaticObjectForProfiling()` sees the old value of `static_flag` used as the sentinel and segfaults. So we must call `resetStaticObjectForProfiling()` before calling `nonMovingCollect()` as otherwise it looks for the incorrect sentinel value Fixes #25232 and #23958 Also teach the testsuite driver about nonmoving profiling ways and stop disabling metric collection when nonmoving GC is enabled. - - - - - e7a26d7a by Sylvain Henry at 2024-09-25T17:11:00-04:00 Fix interaction between fork and kqueue (#24672) A kqueue file descriptor isn't inherited by a child created with fork. As such we mustn't try to close this file descriptor as we would close a random one, e.g. the one used by timerfd. Fix #24672 - - - - - 6863503c by Simon Peyton Jones at 2024-09-25T17:11:37-04:00 Improve GHC.Tc.Solver.defaultEquality This MR improves GHC.Tc.Solver.defaultEquality to solve #25251. The main change is to use checkTyEqRhs to check the equality, so that we do promotion properly. But within that we needed a small enhancement to LC_Promote. See Note [Defaulting equalites] (DE4) and (DE5) The tricky case is (alas) hard to trigger, so I have not added a regression test. - - - - - 97a6c6c3 by Sylvain Henry at 2024-09-25T17:12:18-04:00 JS: fix h$withCStringOnHeap helper (#25288) strlen returns the length of the string without the \0 terminating byte, hence CString weren't properly allocated on the heap (ending \0 byte was missing). - - - - - 5f7c20bc by Ben Gamari at 2024-09-26T04:14:05-04:00 base: Propagate `error` CallStack to thrown exception Previously `errorCallWithCallStackException` failed to propagate its `CallStack` argument, which represents the call-chain of the preceding `error` call, to the exception that it returned. Consequently, the call-stack of `error` calls were quite useless. Unfortunately, this is the second time that I have fixed this but it seems the first must have been lost in rebasing. Fixes a bug in the implementation of CLC proposal 164 <https://github.com/haskell/core-libraries-committee/issues/164> Fixes #24807. - - - - - c20d5186 by Matthew Pickering at 2024-09-26T04:14:42-04:00 driver: Fix -working-dir for foreign files -working-dir definitely needs more serious testing, there are some easy ways to test this. * Modify Cabal to call ghc using -working-dir rather than changing directory. * Modify the testsuite to run ghc using `-working-dir` rather than running GHC with cwd = temporary directory. However this will have to wait until after 9.12. Fixes #25150 - - - - - 88eaa7ac by Sylvain Henry at 2024-09-26T04:15:24-04:00 Enum deriving: reuse predError, succError, toEnumError Reuse predError, succError, and toEnumError when deriving Enum instances to avoid generating different error strings per instance. E.g. before this patch for every instance for a type FOO we would generate a string: "pred{FOO}: tried to take `pred' of first tag in enumeration"# - - - - - e9fa1163 by Sylvain Henry at 2024-09-26T04:15:24-04:00 Enum deriving: generate better code (#16364) Generate better code for Enum.toEnum: check both the lower and the upper bounds at once with an unsigned comparison. Initially I've used a type ascription with a call to 'fromIntegral', hence the slight refactoring of nlAscribe. Using 'fromIntegral' was problematic (too low in the module hierarchy) so 'enumIntToWord' was introduced instead. Combined with the previous commit, T21839c ghc/alloc decrease by 5% Metric Decrease: T21839c - - - - - 383af074 by Sylvain Henry at 2024-09-26T04:16:06-04:00 Core: add absorb rules for binary or/and (#16351) Rules: x or (x and y) ==> x x and (x or y) ==> x - - - - - 783c8b29 by Matthew Pickering at 2024-09-26T12:07:44-04:00 Don't compile `asBox` with -fprof-late The `asBox` function is intended to store exactly the closure which the user passes to it. Placing a cost centre on asBox introduces a thunk, which violates this expectation and can change the result of using asBox when profiling is enabled. See #25212 for more details and ample opportunity to discuss if this is a bug or not. - - - - - 0967dcc7 by Matthew Pickering at 2024-09-26T12:07:44-04:00 Fix normalisation of .prof files Fix 1: If a cost centre contained CAF then the normalisation was corrupted, now only check if CAF is at the start of a line. Fix 2: "no location info" contain a space, which messed up the next normalisation logic which assumed that columns didn't have spaced in. - - - - - 9eda1cb9 by Matthew Pickering at 2024-09-26T12:07:44-04:00 testsuite: Fix normalisation of prof_files removing newlines These normalisation steps were collapsing lines together, which made subsequent normalisation steps fail. ``` foo x y z CAF x y z qux x y z ``` was getting normalised to ``` foo x y z qux x y z ``` which means that subsequent line based filters would not work correctly. - - - - - 2b25f9e2 by Matthew Pickering at 2024-09-26T12:07:44-04:00 packaging: Enable late-ccs for release flavour This enables late cost centres when building profiled libraries and subsequently greatly improves the resolution of cost centre stacks when profiling. This patch also introduces the `grep_prof` test modifier which is used to apply a further filter to the .prof file before they are compared. Fixes #21732 ------------------------- Metric Increase: libdir ------------------------- - - - - - bb030d0d by Brandon Chinn at 2024-09-26T12:08:21-04:00 Replace manual string lexing (#25158) Metric Increase: MultilineStringsPerf This commit replaces the manual string lexing logic with native Alex lexing syntax. This aligns the lexer much closer to the Haskell Report, making it easier to see how the implementation and spec relate. This slightly increases memory usage when compiling multiline strings because we now have two distinct phases: lexing the multiline string with Alex and post-processing the string afterwards. Before, these were done at the same time, but separating them allows us to push as much logic into normal Alex lexing as possible. Since multiline strings are a new feature, this regression shouldn't be too noticeable. We can optimize this over time. - - - - - 16742987 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Revert !4655: Stop 'import "base" Prelude' removing implicit Prelude import This behaviour is problematic for the principle reason that `import Prelude` may not refer to the `base` package, and in which case importing an entirely unrelated module causing your implicit prelude to leave the scope is extremely surprising. See the added test for this example. Discussion on #17045. The secondary reason for reverting this patch is that "base" can't be a wired in package any more (see #24903), so we have to remove special logic which singles out base from the compiler. The rule for implicit shadowing is now simply: * If you write import Prelude (..) then you don't get an implicit prelude import * If you write import "foobar" Prelude (..) for all pkgs foobar, you get an implicit import of prelude. If you want to write a package import of Prelude, then you can enable `NoImplicitPrelude` for the module in question to recover the behaviour of ghc-9.2-9.10. Fixes #17045 - - - - - 57c50f41 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Rename COMPILING_BASE_PACKAGE to COMPILING_GHC_INTERNAL_PACKAGE The COMPILING_BASE_PACKAGE macro is concerned with issues defining symbols and using symbols in the same compilation unit. However, these symbols now exist in ghc-internal rather than base, so we should rename the macro accordingly. The code is guards is likely never used as we never produce windows DLLs but it is simpler to just perform the renaming for now. These days there is little doubt that this macro defined in this ad-hoc manner would be permitted to exist, but these days are not those days. Fixes #25221 - - - - - 70764243 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Preload ghc-internal rather than base This occurence of baseUnitId was missed when moving the bulk of internal definitions into `ghc-internal`. We need to remove this preloading of `base` now because `base` should not be wired in. Towards #24903 - - - - - 12915609 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Remove Data.List compat warning There is currently a warning implemented in -Wcompat which warns you when importing Data.List in a non-qualified manner. ``` A.hs:3:8: warning: [-Wcompat-unqualified-imports] To ensure compatibility with future core libraries changes imports to Data.List should be either qualified or have an explicit import list. | 3 | import Data.List | ^^^^^^^^^ Ok, one module loaded. ``` GHC ticket: https://gitlab.haskell.org/ghc/ghc/-/issues/17244 CLC discussion: https://groups.google.com/g/haskell-core-libraries/c/q3zHLmzBa5E This warning was implemented as part of the migration to making Data.List monomorphic again (and to be used like Data.Set, Data.Map etc). That doesn't seem like it happened, and I imagine that the current CLC would require a new proposal anyway in order to do that now. It's not clear in any case what "future core libraries changes" we are waiting to happen before this warning can be removed. Given the first phase of the proposal has lasted 5 years it doesn't seem that anyone is motivated to carry the proposal to completion. It does seem a bit unnecessary to include a warning in the compiler about "future changes to the module" when there's no timeline or volunteer to implement these changes. The removal of this warning was discussed again at: https://github.com/haskell/core-libraries-committee/issues/269 During the discussion there was no new enthusiasm to move onto the next stages of the proposal so we are removing the warning to unblock the reinstallable "base" project (#24903) Fixes #24904 - - - - - d4e4d498 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Move Control.Monad.Zip into ghc-internal mzip is wired in and therefore needs to be in ghc-internal. Fixes #25222 Towards #24903 - - - - - d3dacdfb by Matthew Pickering at 2024-09-26T12:08:57-04:00 Unwire the base package This patch just removes all the functions related to wiring-in the base package and the `-this-unit-id=base` flag from the cabal file. After this commit "base" becomes just like any other package and the door is opened to moving base into an external repo and releasing base on a separate schedule to the rest of ghc. Closes #24903 - - - - - 1b39363b by Patrick at 2024-09-27T06:10:19-04:00 Add entity information to HieFile #24544 Enhanced HieFile to capture entity information for identifiers, enabling better support for language tools and protocols. See issue #24544 for more details. Work have been done: * Introduction of new data type `EntityInfo` in `GHC.Iface.Ext.Types`. * Add extra field `hie_entity_infos :: NameEntityInfo` to `HieFile` to store the mapping from entity name to corresponding entity infos in `GHC.Iface.Ext.Types`. * Compute `EntityInfo` for each entity name in the HieAst from `TyThing, Id, OccName` when generating the `HieFile` in `GHC.Iface.Ext.Ast`. * Add test T24544 to test the generation of `EntityInfo`. - - - - - 4f3618d8 by sheaf at 2024-09-27T06:10:57-04:00 The X86 SIMD patch. This commit adds support for 128 bit wide SIMD vectors and vector operations to GHC's X86 native code generator. Main changes: - Introduction of vector formats (`GHC.CmmToAsm.Format`) - Introduction of 128-bit virtual register (`GHC.Platform.Reg`), and removal of unused Float virtual register. - Refactor of `GHC.Platform.Reg.Class.RegClass`: it now only contains two classes, `RcInteger` (for general purpose registers) and `RcFloatOrVector` (for registers that can be used for scalar floating point values as well as vectors). - Modify `GHC.CmmToAsm.X86.Instr.regUsageOfInstr` to keep track of which format each register is used at, so that the register allocator can know if it needs to spill the entire vector register or just the lower 64 bits. - Modify spill/load/reg-2-reg code to account for vector registers (`GHC.CmmToAsm.X86.Instr.{mkSpillInstr, mkLoadInstr, mkRegRegMoveInstr, takeRegRegMoveInstr}`). - Modify the register allocator code (`GHC.CmmToAsm.Reg.*`) to propagate the format we are storing in any given register, for instance changing `Reg` to `RegFormat` or `GlobalReg` to `GlobalRegUse`. - Add logic to lower vector `MachOp`s to X86 assembly (see `GHC.CmmToAsm.X86.CodeGen`) - Minor cleanups to genprimopcode, to remove the llvm_only attribute which is no longer applicable. Tests for this feature are provided in the "testsuite/tests/simd" directory. Fixes #7741 Keeping track of register formats adds a small memory overhead to the register allocator (in particular, regUsageOfInstr now allocates more to keep track of the `Format` each register is used at). This explains the following metric increases. ------------------------- Metric Increase: T12707 T13035 T13379 T3294 T4801 T5321FD T5321Fun T783 ------------------------- - - - - - 10e431ef by sheaf at 2024-09-27T06:10:57-04:00 Use xmm registers in genapply This commit updates genapply to use xmm, ymm and zmm registers, for stg_ap_v16/stg_ap_v32/stg_ap_v64, respectively. It also updates the Cmm lexer and parser to produce Cmm vectors rather than 128/256/512 bit wide scalars for V16/V32/V64, removing bits128, bits256 and bits512 in favour of vectors. The Cmm Lint check is weakened for vectors, as (in practice, e.g. on X86) it is okay to use a single vector register to hold multiple different types of data, and we don't know just from seeing e.g. "XMM1" how to interpret the 128 bits of data within. Fixes #25062 - - - - - 8238fb2d by sheaf at 2024-09-27T06:10:57-04:00 Add vector fused multiply-add operations This commit adds fused multiply add operations such as `fmaddDoubleX2#`. These are handled both in the X86 NCG and the LLVM backends. - - - - - 2cb7b748 by sheaf at 2024-09-27T06:10:57-04:00 Add vector shuffle primops This adds vector shuffle primops, such as ``` shuffleFloatX4# :: FloatX4# -> FloatX4# -> (# Int#, Int#, Int#, Int# #) -> FloatX4# ``` which shuffle the components of the input two vectors into the output vector. NB: the indices must be compile time literals, to match the X86 SHUFPD instruction immediate and the LLVM shufflevector instruction. These are handled in the X86 NCG and the LLVM backend. Tested in simd009. - - - - - 0d2428d6 by sheaf at 2024-09-27T06:10:57-04:00 Add Broadcast MachOps This adds proper MachOps for broadcast instructions, allowing us to produce better code for broadcasting a value than simply packing that value (doing many vector insertions in a row). These are lowered in the X86 NCG and LLVM backends. In the LLVM backend, it uses the previously introduced shuffle instructions. - - - - - e6c19a41 by sheaf at 2024-09-27T06:10:57-04:00 Fix treatment of signed zero in vector negation This commit fixes the handling of signed zero in floating-point vector negation. A slight hack was introduced to work around the fact that Cmm doesn't currently have a notion of signed floating point literals (see get_float_broadcast_value_reg). This can be removed once CmmFloat can express the value -0.0. The simd006 test has been updated to use a stricter notion of equality of floating-point values, which ensure the validity of this change. - - - - - f496ff7f by sheaf at 2024-09-27T06:10:57-04:00 Add min/max primops This commit adds min/max primops, such as minDouble# :: Double# -> Double# -> Double# minFloatX4# :: FloatX4# -> FloatX4# -> FloatX4# minWord16X8# :: Word16X8# -> Word16X8# -> Word16X8# These are supported in: - the X86, AArch64 and PowerPC NCGs, - the LLVM backend, - the WebAssembly and JavaScript backends. Fixes #25120 - - - - - 5dd2a423 by sheaf at 2024-09-27T06:10:57-04:00 Add test for C calls & SIMD vectors - - - - - f824e1ee by sheaf at 2024-09-27T06:10:58-04:00 Add test for #25169 - - - - - d54db7f3 by sheaf at 2024-09-27T06:10:58-04:00 Fix #25169 using Plan A from the ticket We now compile certain low-level Cmm functions in the RTS multiple times, with different levels of vector support. We then dispatch at runtime in the RTS, based on what instructions are supported. See Note [realArgRegsCover] in GHC.Cmm.CallConv. Fixes #25169 ------------------------- Metric Increase: T10421 T12425 T18730 T1969 T9198 ------------------------- - - - - - d5f8778a by sheaf at 2024-09-27T06:10:58-04:00 Fix C calls with SIMD vectors This commit fixes the code generation for C calls, to take into account the calling convention. This is particularly tricky on Windows, where all vectors are expected to be passed by reference. See Note [The Windows X64 C calling convention] in GHC.CmmToAsm.X86.CodeGen. - - - - - f64bd564 by sheaf at 2024-09-27T06:10:58-04:00 X86 CodeGen: refactor getRegister CmmLit This refactors the code dealing with loading literals into registers, removing duplication and putting all the code in a single place. It also changes which XOR instruction is used to place a zero value into a register, so that we use VPXOR for a 128-bit integer vector when AVX is supported. - - - - - ab12de6b by sheaf at 2024-09-27T06:10:58-04:00 X86 genCCall: promote arg before calling evalArgs The job of evalArgs is to ensure each argument is put into a temporary register, so that it can then be loaded directly into one of the argument registers for the C call, without the generated code clobbering any other register used for argument passing. However, if we promote arguments after calling evalArgs, there is the possibility that the code used for the promotion will clobber a register, defeating the work of evalArgs. To avoid this, we first promote arguments, and only then call evalArgs. - - - - - 8fd12429 by sheaf at 2024-09-27T06:10:58-04:00 X86 genCCall64: simplify loadArg code This commit simplifies the argument loading code by making the assumption that it is safe to directly load the argument into register, because doing so will not clobber any previous assignments. This assumption is borne from the use of 'evalArgs', which evaluates any arguments which might necessitate non-trivial code generation into separate temporary registers. - - - - - 12504a9f by sheaf at 2024-09-27T06:10:58-04:00 LLVM: propagate GlobalRegUse information This commit ensures we keep track of how any particular global register is being used in the LLVM backend. This informs the LLVM type annotations, and avoids type mismatches of the following form: argument is not of expected type '<2 x double>' call ccc <2 x double> (<2 x double>) (<4 x i32> arg) - - - - - 2bb1e8df by Cheng Shao at 2024-09-27T06:11:35-04:00 Link bytecode from interface-stored core bindings in oneshot mode !13042 Part of #T25090 If the flag `-fprefer-byte-code` is given when compiling a module containing TH, GHC will use Core bindings stored in interfaces to compile and link bytecode for splices. This was only implemented for `--make` mode initially, so this commit adds the same mechanism to oneshot mode (`-c`). When an interface is loaded into the EPS in `loadInterface` that has dehydrated Core bindings, an entry is added to the new field `eps_iface_bytecode`, containing an IO action that produces a bytecode `Linkable`, lazily processing the `mi_extra_decls` by calling `loadIfaceByteCode`. When Template Haskell dependencies are resolved in `getLinkDeps`, this action is looked up after loading a module's interface. If it exists, the action is evaluated and the bytecode is added to the set of `Linkable`s used for execution of the splice; otherwise it falls back on the traditional object file. Metric Decrease: MultiLayerModules T13701 - - - - - 7cb7172e by Matthew Pickering at 2024-09-27T06:12:12-04:00 ci: Fix variable inheritence for ghcup-metadata testing job Downstream in ghcup-ci we use the CONFIGURE_ARGS variable to determine how to setup all the different jobs. On the downstream trigger this was being inherited from the default setting in .gitlab.yml file. Therefore this led to job failures as the necessary CONFIGURE_ARGS were not being passed to the configure script when installing the bindist. See docs: * https://docs.gitlab.com/ee/ci/yaml/#inherit * https://docs.gitlab.com/ee/ci/yaml/#triggerforward 1. inherit:variables:fals - This stops the global variables being inherited into the job and hence forwarded onto the downstream job. 2. trigger:forward:* - yaml_variables: true (default) pass yaml variables to downstream, this is important to pass the upstream pipeline id to downstream. - pipeline_variables: false (default) but don't pass pipeline variables (normal environment variables). Fixes #25294 - - - - - 9ffd6163 by Leo at 2024-09-27T16:26:01+05:30 Fix typo in Prelude doc for (>>=) Fix a minor typo ("equivialent" instead of "equivalent") in the documentation for (>>=) in the prelude. - - - - - 5745dbd3 by Vladislav Zavialov at 2024-09-27T16:26:52+05:30 Wildcard binders in type declarations (#23501) Add support for wildcard binders in type declarations: type Const a b = a -- BEFORE: the `b` had to be named -- even if unused on the RHS type Const a _ = a -- AFTER: the compiler accepts -- a wildcard binder `_` The new feature is part of GHC Proposal #425 "Invisible binders in type declarations", and more specifically its amendment #641. Just like a named binder, a wildcard binder `_` may be: * plain: _ * kinded: (_ :: k -> Type) * invisible, plain: @_ * invisible, kinded: @(_ :: k -> Type) Those new forms of binders are allowed to occur on the LHSs of data, newtype, type, class, and type/data family declarations: data D _ = ... newtype N _ = ... type T _ = ... class C _ where ... type family F _ data family DF _ (Test case: testsuite/tests/typecheck/should_compile/T23501a.hs) However, we choose to reject them in forall telescopes and type family result variable binders (the latter being part of the TypeFamilyDependencies extension): type family Fd a = _ -- disallowed (WildcardBndrInTyFamResultVar) fn :: forall _. Int -- disallowed (WildcardBndrInForallTelescope) (Test case: testsuite/tests/rename/should_fail/T23501_fail.hs) See the new Notes: * Note [Type variable binders] * Note [Wildcard binders in disallowed contexts] To accommodate the new forms of binders, HsTyVarBndr was changed as follows (demonstrated without x-fields for clarity) -- BEFORE (ignoring x-fields and locations) data HsTyVarBndr flag = UserTyVar flag Name | KindedTyVar flag Name HsKind -- AFTER (ignoring x-fields and locations) data HsTyVarBndr flag = HsTvb flag HsBndrVar HsBndrKind data HsBndrVar = HsBndrVar Name | HsBndrWildCard data HsBndrKind = HsBndrNoKind | HsBndrKind LHsKind The rest of the patch is downstream from this change. To avoid a breaking change to the TH AST, we generate fresh names to replace wildcard binders instead of adding a dedicated representation for them (as discussed in #641). And to put a cherry on top of the cake, we now allow wildcards in kind-polymorphic type variable binders in constructor patterns, see Note [Type patterns: binders and unifiers] and the tyPatToBndr function in GHC.Tc.Gen.HsType; example: fn (MkT @(_ :: forall k. k -> Type) _ _) = ... (Test case: testsuite/tests/typecheck/should_compile/T23501b.hs) - - - - - ff2bdca2 by Matthew Pickering at 2024-09-27T16:27:08+05:30 ci: Push perf notes from wasm jobs It was observed in #25299 that we were failing to push performance numbers from the wasm jobs. In future we might want to remove this ad-hoc check but for now it's easier to add another special case. Towards #25299 - - - - - 4c76f75c by Zubin Duggal at 2024-09-27T16:44:00+05:30 Bump GHC version to 9.12 - - - - - e4ac1b0d by Zubin Duggal at 2024-09-27T19:12:24+05:30 Bump GHC version to 9.13 - - - - - da20cac1 by Andreas Klebinger at 2024-10-02T22:18:48-04:00 SpecConstr: Introduce a separate argument limit for forced specs. We used to put no limit at all on specializations forced via the SPEC argument. This isn't always reasonable so we introduce a very high limit that applies to forced specializations, a flag to control it, and we now emit a warning if we fail a specialization because we exceed the warning. Fixes #25197 - - - - - 39497eed by Andreas Klebinger at 2024-10-02T22:19:24-04:00 ghc-experimental: Expose primops and ghc extensions via GHC.PrimOps This will be the new place for functions that would have gone into GHC.Exts in the past but are not stable enough to do so now. Addresses #25242 - - - - - e9dc2690 by Sylvain Henry at 2024-10-02T22:20:06-04:00 RTS: cleanup timerfd file descriptors after a fork (#25280) When we init a timerfd-based ticker, we should be careful to cleanup the old file descriptors (e.g. after a fork). - - - - - 64e876bc by Rodrigo Mesquita at 2024-10-02T22:20:43-04:00 determinism: Deterministic MonadGetUnique LlvmM Update LlvmM to thread a unique deterministic supply (using UniqDSMT), and use it in the MonadGetUnique instance. This makes uniques sampled from LlvmM deterministic, which guarantees object determinism with -fllvm. Fixes #25274 - - - - - 36bbb167 by Matthew Pickering at 2024-10-02T22:21:18-04:00 Bump LLVM upper bound to allow LLVM 19 Also bumps the ci-images commit so that the deb12 images uses LLVM 19 for testing. ------------------------- Metric Decrease: size_hello_artifact_gzip size_hello_unicode_gzip ------------------------- Fixes #25295 - - - - - 0029ca91 by Matthew Pickering at 2024-10-02T22:21:54-04:00 configure: Allow happy-2.0.2 happy-2.0.2 can be used to compile GHC. happy-2.0 and 2.0.1 have bugs which make it unsuitable to use. The version bound is now == 1.20.* || >= 2.0.2 && < 2.1 Fixes #25276 - - - - - 92976985 by ARATA Mizuki at 2024-10-02T22:22:35-04:00 Use bundled llc/opt on Windows (#22438) - - - - - af59749a by Matthew Pickering at 2024-10-02T22:23:11-04:00 Fix registerArch for riscv64 The register allocator doesn't support vector registers on riscv64, therefore advertise as NoVectors. Fixes #25314 - - - - - a49e66fc by Matthew Pickering at 2024-10-02T22:23:11-04:00 riscv: Avoid using csrr instruction to test for vector registers The csrr instruction isn't allowed in qemu user-mode, and raises an illegal instruction error when it is encountered. Therefore for now, we just hard-code that there is no support for vector registers since the rest of the compiler doesn't support vector registers for riscv. Fixes #25312 - - - - - 115a30e9 by Andreas Klebinger at 2024-10-02T22:23:11-04:00 Add support for fp min/max to riscv Fixes #25313 - - - - - f28b5992 by Ben Gamari at 2024-10-02T22:23:47-04:00 testsuite/perf: Report better error message on malformed note Previously a malformed perf note resulted in very poor errors. Here we slight improve this situation. - - - - - 51377508 by Ben Gamari at 2024-10-02T22:23:47-04:00 testsuite: Handle division-by-zero more gracefully Previously we would fail with an ZeroDivisionError. Fixes #25321 - - - - - 50490075 by Matthew Pickering at 2024-10-03T05:55:13-04:00 ci: Add nightly & release ubuntu-22.04 jobs This adds build of bindists on ubuntu-22.04 on nightly and release pipelines. We also update ghcup-metadata to provide ubuntu-22.04 bindists on ubuntu-22.04. Fixes #25317 - - - - - 9cf1cef5 by Zubin Duggal at 2024-10-03T05:55:49-04:00 haddock: Bump binary interface version to 46. This allows haddock to give good error messages when being used on mismatched interface files. We bump to 46 since GHC 9.12 uses version 45: https://gitlab.haskell.org/ghc/ghc/-/commit/362afd632032ee8f174690c3ffe0015076b83ce6 This should have been done in e4ac1b0d281b85a0144d1ef6f84a1df00e236052 but was overlooked. - - - - - 2293c0b7 by Andreas Klebinger at 2024-10-03T05:56:25-04:00 Change versionig of ghc-experimental to follow ghc versions. Just like ghc-internal it will now use the @ProjectVersionForLib@ macro for versioning. This means for ghc=9.10.1, ghc-experimental's version will be 9.1001.0 and so on. This fixes #25289 - - - - - 876d6e0e by Ben Gamari at 2024-10-04T15:07:53+01:00 base: Add `HasCallStack` constraint to `ioError` As proposed in core-libraries-committee#275. - - - - - 9bfd9fd0 by Matthew Pickering at 2024-10-04T15:08:03+01:00 Fix toException method for ExceptionWithContext Fixes #25235 - - - - - ac004028 by Matthew Pickering at 2024-10-04T15:09:07+01:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - bcb293f2 by Cheng Shao at 2024-10-04T17:59:28-04:00 testsuite: remove accidentally checked in debug print logic - - - - - 68e2da5a by Rodrigo Mesquita at 2024-10-05T10:36:15-04:00 Deprecation for WarnCompatUnqualifiedImports Fixes #25330 - - - - - 4327f0e8 by Andrew Lelechenko at 2024-10-05T10:36:52-04:00 Restrict Data.List.NonEmpty.unzip to NonEmpty (a, b) -> (NonEmpty a, NonEmpty b) Implementing the final phase of CLC proposal https://github.com/haskell/core-libraries-committee/issues/86 - - - - - ceca9efb by Cheng Shao at 2024-10-06T02:18:31+00:00 driver: fix runWorkerLimit on wasm This commit fixes link-time unresolved symbol errors for sem_open etc on wasm, by making runWorkerLimit always behave single-threaded. This avoids introducing the jobserver logic into the final wasm module and thus avoids referencing the posix semaphore symbols. - - - - - 135fd1ac by Torsten Schmits at 2024-10-06T02:18:31+00:00 Parallelize getRootSummary computations in dep analysis downsweep This reuses the upsweep step's infrastructure to process batches of modules in parallel. I benchmarked this by running `ghc -M` on two sets of 10,000 modules; one with a linear dependency chain and the other with a binary tree. Comparing different values for the number of modules per thread suggested an optimum at `length targets `div` (n_cap * 2)`, with results similar to this one (6 cores, 12 threads): ``` Benchmark 1: linear 1 jobs Time (mean ± σ): 1.775 s ± 0.026 s [User: 1.377 s, System: 0.399 s] Range (min … max): 1.757 s … 1.793 s 2 runs Benchmark 2: linear 6 jobs Time (mean ± σ): 876.2 ms ± 20.9 ms [User: 1833.2 ms, System: 518.6 ms] Range (min … max): 856.2 ms … 898.0 ms 3 runs Benchmark 3: linear 12 jobs Time (mean ± σ): 793.5 ms ± 23.2 ms [User: 2318.9 ms, System: 718.6 ms] Range (min … max): 771.9 ms … 818.0 ms 3 runs ``` Results don't differ much when the batch size is reduced to a quarter of that, but there's significant thread scheduling overhead for a size of 1: ``` Benchmark 1: linear 1 jobs Time (mean ± σ): 2.611 s ± 0.029 s [User: 2.851 s, System: 0.783 s] Range (min … max): 2.591 s … 2.632 s 2 runs Benchmark 2: linear 6 jobs Time (mean ± σ): 1.189 s ± 0.007 s [User: 2.707 s, System: 1.103 s] Range (min … max): 1.184 s … 1.194 s 2 runs Benchmark 3: linear 12 jobs Time (mean ± σ): 1.097 s ± 0.006 s [User: 2.938 s, System: 1.300 s] Range (min … max): 1.093 s … 1.101 s 2 runs ``` Larger batches also slightly worsen performance. - - - - - 535a2117 by Daniel Díaz at 2024-10-06T09:51:46-04:00 Clarify the meaning of "exactly once" in LinearTypes Solves documentaion issue #25084. - - - - - 92f8939a by Krzysztof Gogolewski at 2024-10-06T09:52:22-04:00 Only allow (a => b) :: Constraint rather than CONSTRAINT rep Fixes #25243 - - - - - 4a2f0f13 by Alan Zimmerman at 2024-10-07T05:16:54-04:00 EPA: Remove unused hsCaseAnnsRest We never populate it, so remove it. - - - - - 5099057b by John Paul Adrian Glaubitz at 2024-10-07T05:17:40-04:00 rts: Fix invocation of __ieee_set_fp_control() on alpha-linux Fixes the following error when building GHC on alpha-linux: rts/posix/Signals.c: In function ‘initDefaultHandlers’: rts/posix/Signals.c:709:5: error: error: implicit declaration of function ‘ieee_set_fp_control’ [-Wimplicit-function-declaration] 709 | ieee_set_fp_control(0); | ^~~~~~~~~~~~~~~~~~~ | 709 | ieee_set_fp_control(0); | - - - - - c9590ba0 by Teo Camarasu at 2024-10-07T05:18:17-04:00 Add changelog entries for !12479 - - - - - bf9c9566 by Matthew Pickering at 2024-10-07T13:19:30-04:00 javascript: Read fields of ObjectBlock lazily When linking a module with a large dependency footprint too much of the object files were forced during linking. This lead to a large amount of memory taken up by thunks which would never be forced On the PartialDownsweep test this halves the memory required (from 25G to 13G). Towards #25324 ------------------------- Metric Increase: size_hello_obj ------------------------- - - - - - 571329df by Matthew Pickering at 2024-10-07T13:20:06-04:00 ci: Run the i386 validation job when i386 label is set This is helpful when making changes to base and must update the javascript and i386 base exports files. - - - - - e68f9aaf by Matthew Pickering at 2024-10-07T13:20:42-04:00 Rewrite partitionByWorkerSize to avoid pattern match checker bug With `-g3` the pattern match checker would warn about these incomplete patterns. This affects the debug_info builds on CI. ``` Pattern match(es) are non-exhaustive In an equation for ‘go’: Patterns of type ‘[a]’, ‘[a]’, ‘[SpecFailWarning]’ not matched: (_:_) _ _ | 2514 | go [] small warnings = (small, warnings) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^... ``` Workaround for #25338 - - - - - d915dc8b by Arnaud Spiwack at 2024-10-07T19:23:00-04:00 Remove the wrapper/coercion-passing logic for submultiplicity checks Instead, we use a dedicated DelayedError, which is emitted systematically on submultiplicity checks, but is suppressed if we can indeed solve the submultiplicity constraint with a reflexivity coercion. This way, we don't have to return anything from `tcSubMult`, which now looks like a regular constraint check, the rest is implementation detail. This removes all of the strange boilerplate that I'd been struggling with under the previous implementation. Even if submultiplicity checks are not properly constraints, this way it's contained entirely within a `WantedConstraint`. Much more pleasant. Closes #25128. - - - - - 1d226116 by Sven Tennie at 2024-10-07T19:23:37-04:00 AArch64: Implement switch/jump tables (#19912) This improves the performance of Cmm switch statements (compared to a chain of if statements.) - - - - - 3fe621dd by Mario Blažević at 2024-10-07T19:24:18-04:00 Fixes #25256, missing parens inside TH-printed pattern type signature - - - - - ea4b4391 by ARATA Mizuki at 2024-10-07T19:24:59-04:00 Better documentation for floatRange function Closes #16479 - - - - - ff09205c by Andreas Klebinger at 2024-10-07T19:25:35-04:00 Adjust progress message for hadrian to include cwd. Fixes #25335 - - - - - 5fd320da by Sven Tennie at 2024-10-07T19:26:12-04:00 CCallConv test: Align argument types The C calling convention / standard requires that arguments and their values are of the same type. - - - - - c6e5fd3d by Cheng Shao at 2024-10-07T19:26:47-04:00 hadrian: remove unused ghciWithDebugger field from flavour config This patch removes the ghciWithDebugger field from flavour config since it's actually not used anywhere. - - - - - 9c9c790d by sheaf at 2024-10-07T19:27:23-04:00 user's guide: update docs for X86 CPU flags This commit updates the section of the user's guide pertaining to X86 feature flags with the following changes: - the NCG backend now supports SIMD, so remove all text that says the contrary, - the LLVM backend does not "automatically detect" features, so remove any text that makes that claim. - - - - - a1ecc826 by Sven Tennie at 2024-10-08T13:36:03-04:00 ci: RISCV64 cross-compile testing This adds a validation job which tests that we can build a riscv64 cross compiler and build a simple program using it. We do not currently run the whole testsuite. Towards #25254 Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - d5c2577f by Arnaud Spiwack at 2024-10-08T13:36:44-04:00 Remove unused accumulators in partition_errors - - - - - 55609880 by Andrzej Rybczak at 2024-10-09T16:41:46-04:00 Fix typo in the @since annotation of annotateIO - - - - - ef481813 by Alan Zimmerman at 2024-10-09T16:42:23-04:00 EPA: Remove [AddEpAnn] from (most of) HsExpr EPA: introduce EpAnnLam for lambda annotationsi, and remove `glAA` from `Parser.y`, it is the same as `glR` EPA: Remove unused annotation from XOpApp EPA: Use EpToken for XNPat and XNegApp EPA: specific anns for XExplicitTuple / XTuplePat / sumPatParens. EPA: Use specific annotation for MultiIf EPA: Move annotations into FunRhs EPA: Remove [AddEpAnn] from SigPat and ExprWithTySig EPA: Remove [AddEpAnn] from ArithSeq EPA: Remove [AddEpAnn] from HsProc EPA: Remove [AddEpAnn] from HsStatic EPA: Remove [AddEpAnn] from BindStmt EPA: Remove [AddEpAnn] from TransStmt EPA: Remove [AddEpAnn] from HsTypedSplice EPA: Remove [AddEpAnn] from HsUntypedSpliceExpr - - - - - 69960230 by Fabian Thorand at 2024-10-10T19:03:59+00:00 Handle exceptions from IO manager backend If an IO manager backend throws, it will not actually have registered the file descriptor. However, at that point, the IO manager state was already updated to assume the file descriptor is being tracked, leading to errors and an eventual deadlock down the line as documented in the issue #21969. The fix for this is to undo the IO manager state change in case the backend throws (just as we already do when the backend signals that the file type is not supported). The exception then bubbles up to user code. That way we make sure that 1. the bookkeeping state of the IO manager is consistent with the actions taken by the backend, even in the presence of unexpected failures, and 2. the error is not silent and visible to user code, making failures easier to debug. - - - - - 1587cccf by Hassan Al-Awwadi at 2024-10-11T03:52:36-04:00 Put RdrName in the foExt field of FieldOcc The main purpose of this commit is to rip RdrName out of FieldOcc, in accordance with #21592, and as a side note it has simplified the method we use to deal with ambiguity somewhat. To do the first, we make FieldOccs store (LIdP p) instead of always storing Located RdrName, and moved the readername to the extension points where necessary. For the second, well, we just turn an ambiguous RdrName into a unbound Name through mkUnboundName. Later during disambiguateRecordBinds of the type checking phase, we will try and do type-directed disambiguation based on the rdrName field (for now), so this hack works out fine. See Note [Ambiguous FieldOcc in record updates] for more details. There are two additional minor changes in this commit: * The HsRecSel constructor of HsExpr has been moved to the extension constuctors, since its really GHC specific. * HsProjection no longer has a Located DotFieldOcc as a field, but just a regular DotFieldOcc, since DotFieldOcc already wraps a located FieldLabelString co-authored by: @Jade <Jade512 at proton.me> @alt-romes <rodrigo.m.mesquita at gmail.com> - - - - - 2338a971 by Cheng Shao at 2024-10-11T03:53:13-04:00 driver: bail out when -fllvm is passed to GHC not configured with LLVM This patch makes GHC bail out with an proper error message when it's not configured with LLVM but users attempt to pass -fllvm, see #25011 and added comment for details. Fixes #25011 Co-authored-by: Rodrigo Mesquita <rodrigo.m.mesquita at gmail.com> - - - - - 78ad81ec by Cristiano Moraes at 2024-10-11T03:53:55-04:00 configure: Find C++ probing when GCC version is the latest but G++ is old #23118 - - - - - 083703a1 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Consider Wanteds with rewriters as insoluble This MR fixes #25325 See GHC.Tc.Types.Constraint, Note [Insoluble Wanteds], especially (IW2) There is a small change in the error message for T14172, but it looks entirely acceptable to me. - - - - - 0dfaeb66 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Wibbles - - - - - 09d24d82 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Spelling errors - - - - - 694489ed by sheaf at 2024-10-11T03:55:14-04:00 LLVM: use sse4.2 instead of sse42 LLVM expects the former instead of the latter since version 3.4. Fixes #25019 - - - - - 06ae8507 by sheaf at 2024-10-11T03:55:14-04:00 LLVM: make SSE4.2 imply +popcnt For consistency with the NCG as well as with Clang and GCC, we make the SSE4.2 feature flag imply +popcnt when using the LLVM backend. Fixes #25353 - - - - - 3fe843c7 by Cheng Shao at 2024-10-11T03:55:50-04:00 Drop obsolete libffi Makefile This patch drops obsolete libffi Makefile from the tree, given it's completely unused since removal of make build system in !7094. - - - - - df70405c by Ben Gamari at 2024-10-11T03:56:26-04:00 ghc-internal: Fix incomplete matches on IOError As noted in #25362, these incomplete matches were previously not being warned about. They were easily addressed by use of `GHC.Internal.Event.Windows.withException`. Closes #25362. - - - - - 8584504b by Matthew Pickering at 2024-10-11T03:57:02-04:00 compiler: Fix orientation of GHC.Hs.Doc boot file We should be free to import things from Language.Haskell.Syntax in GHC modules. Therefore the the boot file for the loop between ImpExp and GHC.Hs.Doc was in the wrong place. Issue #21592 - - - - - d029f170 by Ben Gamari at 2024-10-11T23:43:17-04:00 testsuite: Normalise trailing digits from hole fits output The type variables in the holes fit output from `abstract_refinement_hole_fits` is quite sensitive to compiler configuration. Specifically, a slight change in the inlining behavior of `throw` changes type variable naming in `(>>=)` and a few others. Ideally we would make hole fits output more deterministic but in the meantime we simply normalise this difference away as it not relevant to the test's goal. - - - - - da5d7d0d by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Add test for #25066 - - - - - eb7ddae1 by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Fix #25066 As noted in #25066, the exception backtrace proposal introduced a rather subtle performance regression due to simplification producing Core which the demand analyser concludes may diverge with a precise exception. The nature of the problem is more completely described in the new Note [Hiding precise exception signature in throw]. The (rather hacky) solution we use here hides the problematic optimisation through judicious use of `noinline`. Ultimately however we will want a more principled solution (e.g. #23847). Fixes #255066 CLC proposal: https://github.com/haskell/core-libraries-committee/issues/290 Metric Decrease: T9872d - - - - - 0060ece7 by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Improve documentation of Control.Exception.Backtrace - - - - - 18f532f3 by Ben Gamari at 2024-10-11T23:43:53-04:00 Bump process submodule to v1.6.25.0 - - - - - a9a3badf by Hassan Al-Awwadi at 2024-10-11T23:44:29-04:00 Move HsInteger and HsRat to an extension constructor These constructors were only used during the TC stage, or during template haskell. It seemed clear that it was independent of the source syntax represented in L.H.S, and thus we removed it according to #21592. - - - - - 4dd30cba by Artem Pelenitsyn at 2024-10-11T23:45:09-04:00 Docs: Linear types: link Strict Patterns subsection Also, fix a bug in RST with missing newline before a listing. Co-authored-by: Arnaud Spiwack <arnaud at spiwack.net> - - - - - adca5f2b by Ben Gamari at 2024-10-11T23:45:45-04:00 users guide: Address remaining TODOs in eventlog format docs Closes #25296. - - - - - 9291c125 by Sylvain Henry at 2024-10-11T23:46:26-04:00 Fix z-encoding of tuples (#25364) Tuples with prefix/suffix strings weren't always properly encoded with their shortcut notations. Fix this. - - - - - c08b68bc by Sven Tennie at 2024-10-11T23:47:01-04:00 Delete constants that can be deduced There are macros in MachRegs.h to figure those out. - - - - - 8b402da2 by Zubin Duggal at 2024-10-12T20:36:57+00:00 hadrian: Handle broken symlinks properly when creating source dist directories If we have a broken symlink in the repository, don't try to `need` the symlink or the target of the symlink. Attempting to do so has `shake` attempt to read the target to compute its hash, which fails because the target doesn't exist. - - - - - 16f97667 by Zubin Duggal at 2024-10-12T20:36:57+00:00 hadrian: exclude cabal.project.symlink.broken from source archives Cabal 3.14 introduced a broken symlink in its testsuite. Unfortunately, this broke our source distribution as we use use `tar --dereference` to avoid issues with symlink compatibility on windows, and `tar --dereference` chokes when it encounters any broken symlinks. We can't get rid of `--dereference` because symlinks are generally broken on windows, so the only option is to exclude this file from source archives. see also https://github.com/haskell/cabal/issues/10442 - - - - - f1a2c9fc by Zubin Duggal at 2024-10-12T20:36:57+00:00 Bump Cabal submodule to 3.14 Metric Decrease: MultiLayerModulesTH_OneShot Metric Increase: haddock.Cabal - - - - - 745dd590 by Ben Gamari at 2024-10-14T09:13:12-04:00 users-guide: Document GHCi :where command Resolve #24509. - - - - - e9cc4699 by Alan Zimmerman at 2024-10-14T09:13:48-04:00 EPA: Remove [AddEpAnn] from IE, Pat and some Tys EPA: Remove [AddEpAnn] from LazyPat EPA: Remove [AddEpAnn] from RecordCon/RecordUpd/ConPat EPA: Remove [AddEpAnn] from HsFieldBind EPA: Remove [AddEpAnn] from PatSynBind EPA: Remove [AddEpAnn] from IPBind EPA: Remove [AddEpAnn] from FixSig EPA: Remove [AddEpAnn] from activation rules EPA: Remove [AddEpann] from SpecInstSig EPA: Remove [AddEpAnn] from MinimalSig EPA: Remove [AddEpAnn] from SCCFunSig EPA: Remove [AddEpAnn] from CompleteMatchSig EPA: Remove [AddEpAnn] from AnnSig, as used in PatSynSig, ClassOpSig, TypeSig EPA: Remove [AddEpAnn] from IEThingAbs EPA: Remove [AddEpAnn] from IEThingAll / IEThingWith EPA: Remove [AddEpAnn] from IEModuleContents EPA: Remove [AddEpAnn] from HsOpTy EPA: Remove [AddEpAnn] for various binders EPA: Remove [AddEpAnn] for HsIParamTy - - - - - 81a570bf by Sebastian Graf at 2024-10-14T22:15:31-04:00 Desugaring, plus -Wincomplete-record-selectors This commit does several related things: * Major refactor of the handling of applications in the desugarer. Now all applications are handled in `dsApp`, `ds_app` and related functions. This dramatically simplifies the code and removes complicated cruft that had accumulated. Hooray. Fixes #25281. * Improve the handling of -Wincomplete-record-selectors. We now incorporate the result type of unsaturated record selector applications as well as consider long-distance information in getField applications. Plus, the implmentation now builds the improved `dsApp` stuff above, so it is much easier to understand. Plus, incorporates improved error message wording suggested by Adam Gundry in !12685. Fixes #24824, #24891 See the long Note [Detecting incomplete record selectors] * Add -Wincomplete-record-selectors to -Wall, as specified in GHC Proposal 516. To do this, I also had to add -Wno-incomplete-record-selectors to the build flags for Cabal in GHC's CI. See hadrian/src/Settings/Warnings.hs. We can remove this when Cabal is updated so that it doesn't trigger the warning: https://github.com/haskell/cabal/issues/10402 2.6% decrease in compile time allocation in RecordUpPerf Metric Decrease: RecordUpdPerf - - - - - ae7bc08e by Simon Peyton Jones at 2024-10-14T22:15:31-04:00 Elmininate incomplete record selectors This patch is a pure refactor of GHC's source code, to avoid the use of partial record selectors. It was provoked by adding -Wincomplete-record-selectors to -Wall (as the GHC Proposal specified), which in turn showed up lots of places where GHC was using incomplete record selectors. This patch does mostly-simple refactoring to make it clear to the pattern match checker that there is in fact no partiality. There is one externally-visible change: I changed the data type HoleFit to split out the two cases data HoleFit = TcHoleFit TcHoleFit | RawHoleFit SDoc data TcHoleFit = HoleFit { ...lots of fields } There are large swathes of code that just deal with `TcHoleFit`, and having it as a separate data types makes it apparent that `RawHoleFit` can't occur. This makes it much better -- but the change is visible in the HolePlugin interface. I decided that there are so few clients of this API that it's worth the change. I moved several functions from Language.Haskell.Syntax to GHC.Hs. Reason, when instantiated at (GhcPass _), the extension data construtcor is guaranteed unused, and that justifies omitted patterns in these functions. By putting them in GHC.Hs.X I can specialise the type for (GhcPass _) and thereby make the function total. An interesting side-light is that there were a few local function definitions without a type signature, like this one in GHC.Parser.Header convImport (L _ i) = (ideclPkgQual i, reLoc $ ideclName i) This is fully closed, and so is generalised; but that generalises it to any old pass, not (GhcPass _), so GHC rightly complains about the use of the selector `ideclPkgQual`. I added a type signature to `i`, thus convImport (L _ (i::ImportDecl GhcPs)) = (ideclPkgQual i, reLoc $ ideclName i) which specialised the function enough to make the record selector complete. Quite a surprising consequence of local let-generalisation! - - - - - 6a067226 by Simon Peyton Jones at 2024-10-14T22:15:31-04:00 Add -Werror=-Wno-error=incomplete-record-selectors to hadrian-multi In the main MR, -Wall now includes -Wincomplete-record-selectors. However `hadrian-multi` has many, many warnings about incomplete record selectors, so this patch stops those warnings being treated as errors. (See discussion on !13308.) A better fix would be to remove the use of incomplete record selectors, since each of them represents a potential crash. - - - - - edeafc14 by Ben Gamari at 2024-10-14T22:16:08-04:00 users-guide: Document field coalescence - - - - - 55b83587 by ARATA Mizuki at 2024-10-14T22:16:49-04:00 LLVM backend: Use correct rounding for Float literals Fixes #22033 - - - - - e59fe5c6 by Hassan Al-Awwadi at 2024-10-15T08:25:33+00:00 Changed import from Ghc. module to L.H.S module Progresses #21592 For some reason we still imported GHC.Types.Fixity when the definitino of Fixity and LexicalFixity have already been moved to Language.Haskell.Syntax.Basic. This fixes that for - - - - - ab1767d5 by Simon Peyton Jones at 2024-10-15T23:45:04-04:00 Add a release-notes entry for -Wincomplete-record-selectors - - - - - 6f0a62db by ur4t at 2024-10-16T15:33:43+00:00 GHCi: fix improper location of ghci_history file Fixes #24266 - - - - - 5f67db48 by Alan Zimmerman at 2024-10-17T05:18:43-04:00 EPA: Remove [AddEpAnn] commit 3 EPA: Remove [AddEpAnn] from HsDocTy EPA: Remove [AddEpAnn] from HsBangTy EPA: Remove [AddEpAnn] from HsExplicitListTy EPA: Remove [AddEpAnn] from HsExplicitTupleTy EPA: Remove [AddEpAnn] from HsTypedBracket EPA: Remove [AddEpAnn] from HsUntypedBracket EPA: Remove [AddEpAnn] from PatBuilderOpApp EPA: break out 'EpToken "|"' from ClassDecl anns EPA: Remove [AddEpAnn] from ClassDecl EPA: Remove [AddEpAnn] from SynDecl - - - - - fbbbd010 by Daan Rijks at 2024-10-17T05:19:19-04:00 Expand the haddocks for Control.Category - - - - - 076c1a10 by Andrew Lelechenko at 2024-10-17T05:19:19-04:00 documentation: more examples for Control.Category - - - - - 90891962 by Cheng Shao at 2024-10-17T16:41:18+00:00 ghci: mitigate host/target word size mismatch in BCOByteArray serialization This patch mitigates a severe host/target word size mismatch issue in BCOByteArray serialization logic introduced since !12142, see added note for detailed explanation. - - - - - 839ac52e by Cheng Shao at 2024-10-17T16:41:18+00:00 ghci: use plain malloc for mkConInfoTable on non-TNTC platforms This patch avoids using mmap() to allocate executable memory for mkConInfoTable on platforms without tables-next-to-code, see added comment for explanation. - - - - - a998f69d by Cheng Shao at 2024-10-17T16:41:18+00:00 ghc-internal: add missing CPPs for wasm This patch adds some missing CPP guards to ghc-internal, given those functions are non existent on wasm and would cause linking issues. - - - - - 71a471e7 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: rename prelude.js to prelude.mjs This commit renames prelude.js to prelude.mjs for wasm backend rts jsbits, and slightly adjusts the jsbits contents. This is for preparing the implementation of dyld.mjs that contains wasm dynamic linker logic, which needs to import prelude.mjs as a proper ESM module. - - - - - 33d9db17 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: add __wrapped_freeJSVal This commit wraps imported freeJSVal in a __wrapped_freeJSVal C function for wasm backend RTS. In general, wasm imports are only supposed to be directly called by C; they shouldn't be used as function pointers, which confuses wasm-ld at link-time when generating shared libraries. - - - - - 0d0a16a8 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: correct stale link in comment - - - - - 90a35c41 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: drop interpretBCO support from non-dyn ways on wasm This commit drops interpretBCO support from non dynamic rts ways on wasm. The bytecode interpreter is only useful when the RTS linker also works, and on wasm it only works for dynamic ways anyway. An additional benefit of dropping interpretBCO is reduction in code size of linked wasm modules, especially since interpretBCO references ffi_call which is an auto-generated large function in libffi-wasm and unused by most user applications. - - - - - 98a32ec5 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: don't build predefined GloblRegs for wasm PIC mode This commit wraps the predefined GlobalRegs in Wasm.S under a CPP guard to prevent building for PIC mode. When building dynamic ways of RTS, the wasm globals that represent STG GlobalRegs will be created and supplied by dyld.mjs. The current wasm dylink convention doesn't properly support exporting relocatable wasm globals at all, any wasm global exported by a .so is assumed to be a GOT.mem entry. - - - - - bef94bde by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: fix conflicting StgRun definitions on wasm This commit fixes conflicting StgRun definition when building dynamic ways of RTS for wasm in unregisterised mode. - - - - - a6a82cdb by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: use targetSupportsRPaths predicate This commit changes the hostSupportsRPaths predicate to targetSupportsRPaths and use that to decide whether to pass RPATH-related link-time options. It's not applied to stage0, we should just use the default link-time options of stageBoot ghc. - - - - - f232c872 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: disable internal-interpreter of ghc library when cross compiling This commit disable the internal-interpreter flag of ghc library when cross compiling, only external interpreter works in such cases. - - - - - 577c1819 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: enable internal-interpreter for ghc-bin stage0 This commit enables internal-interpreter flag for ghc-bin even when compiling stage0, as long as target supports ghci. It enables ghci functionality for cross targets that support ghci, since cross ghc-bin is really stage0. - - - - - c247f2ee by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: fix CFLAGS for gmp shared objs on wasm This commit adds -fvisibility=default to CFLAGS of gmp when building for wasm. This is required to generate the ghc-bignum shared library without linking errors. Clang defaults to -fvisibility=hidden for wasm targets, which will cause issues when a symbol is expected to be exported in a shared library but without explicit visibility attribute annotation. - - - - - 775410fd by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: re-enable PIC for gmp on wasm This commit re-enables --with-pic=yes configuration option of gmp when building for wasm, given we're about to include support for shared libraries, TH and ghci. - - - - - b45080a3 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: add the host_fully_static flavour transformer This commit adds the host_fully_static flavour transformer to hadrian, which ensures stage0 is fully statically linked while still permitting stage1 libdir to contain shared libraries. This is intended to be used by the wasm backend to build portable linux bindists that contain wasm shared libraries. - - - - - 5043507c by Cheng Shao at 2024-10-17T16:41:18+00:00 ci: update wasm jobs configuration This commit bumps ci-image revision to use updated wasm toolchain, and use host_fully_static instead of fully_static for wasm jobs so to ensure wasm shared libraries can be properly built. - - - - - 2956a3f7 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian/testsuite: implement config.cross logic This commit implements the config.cross field in the testsuite driver. It comes from the "cross compiling" ghc info field for both in-tree/out-of-tree GHC, and is an accurate predicate of whether we're cross-compiling or not (compared to the precense of target emulator), and is useful to implement predicates to assert the precense of internal interpreter (only available on non-cross GHC) for tests that do require it (e.g. plugins). - - - - - 8c74a0ed by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian/compiler: implement targetRTSLinkerOnlySupportsSharedLibs This patch implements the targetRTSLinkerOnlySupportsSharedLibs predicate in hadrian. Its definition in hadrian is the single source of truth, and the information propagates to ghc settings file, ghc driver and testsuite driver. It is used in various places to ensure dynamic dependency is selected when the target RTS linker only supports loading dynamic code. - - - - - b4c3c340 by Cheng Shao at 2024-10-17T16:41:18+00:00 testsuite: don't use host cpu features when testing cross ghc This patch disables CPU feature detection logic when testing cross GHC, since those features don't make sense for the target anyway. - - - - - 3c21b696 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: implement & use req_plugins predicate This commit implements req_plugins predicate to indicate that the test requires plugin functionality. Currently this means cross GHC is disabled since internal-interpreter doesn't work in cross GHC yet. - - - - - 93b8af80 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: make use of config.interp_force_dyn This commit takes config.interp_force_dyn into consideration when setting up TH/ghci way flags. - - - - - 94673d41 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: bump T17572 timeout - - - - - 2b5efc2d by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: bump T22744 pre_cmd timeout - - - - - 45102e2a by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip terminfo_so for cross ghc - - - - - 05e40406 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: fix shared library size tests for cross ghc This commit fixes shared library size tests (e.g. array_so in testsuite/tests/perf/size/all.T) when testing cross ghc. Previously, if shared library file extension of host and target differs, those tests will fail with framework errors due to not finding the right files. - - - - - fa68f833 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip ghc api tests that attempt to spawn processes inside wasm This commit skips a few ghc api tests on wasm, since they would attempt to spawn processes inside wasm, which is not supported at all. - - - - - 1241c04e by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip T22840 due to broken -dtag-inference-checks on wasm - - - - - 78c8b900 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: ensure $(ghciWayFlags) can be overridden This commit revises boilerplate.mk in testsuite as well as a few other places, to ensure the tests that do make use of $(ghciWayFlags) can receive the right $(ghciWayFlags) from testsuite driver config. - - - - - 47989ecc by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: skip rdynamic on wasm - - - - - fefb4ea1 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: skip T2615 on wasm This commit marks T2615 as skip on wasm, given LD_* environment variables aren't supported on wasm anyway. - - - - - 77c79762 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: mark MultiLayerModulesTH_Make/MultiLayerModulesTH_OneShot as fragile on wasm - - - - - 69bb4745 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: fix T16180 on wasm This commit fixes T16180 on wasm once TH support is flipped on. The fix is simply adding right asm code for wasm. - - - - - 621c753d by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: fix -fexternal-interpreter flag for JS backend Previously, -fexternal-interpreter is broken for JS backend, since GHC would attempt to launch a non-existent ghc-iserv* executable. This commit fixes it by adjusting pattern matching order in setTopSessionDynFlags. - - - - - 80aa8983 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: use interpreterDynamic predicate in preloadLib This commit use the interpreterDynamic predicate in preloadLib to decide if we should do dynLoadObjs instead of loadObj. Previously we used hostIsDynamic which was only written with non-cross internal interpreter in mind. The testsuite is also adjusted to remove hard-wired -fPIC flag for cbits (doesn't work in i386 RTS linker in vanilla way, #25260) and properly pass ghc_th_way_flags to ghc. - - - - - 74411461 by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix Cmm dynamic CLabels for wasm This commit fixes the handling of dynamic CLabels for the wasm backend. Just do the simplest handling: preserve the original CLabel, both unreg/NCG backends can handle them properly without issue. - - - - - f6abaf13 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: add necessary compile-time flags for wasm PIC mode This commit adds necessary compile-time flags when compiling for wasm PIC mode, see added comment for detailed explanation. - - - - - 9745fcfb by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: add necessary link-time flags for wasm shared libs This commit adds necessary link-time flags for wasm shared libs, see added comments for detailed explanation. - - - - - 649aae00 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: enforce -fno-use-rpaths for wasm This commit ensures the GHC driver never passes any RPATH-related link-time flags on wasm, which is not supported at all. - - - - - 47baa904 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: ensure static archives are picked when linking static .wasm modules This commit ensures static archives are picked when linking .wasm modules which are supposed to be fully static, even when ghc may be invoked with -dynamic, see added comment for explanation. - - - - - fc3a5591 by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix dynamic_too_enable for targets that require dynamic libraries This commit fixes dynamic_too_enable for targets whose RTS linker can only load dynamic code. - - - - - 94ef949e by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix checkNonStdWay for targets that require dynamic libraries This commit fixes checkNonStdWay to ensure that for targets whose RTS linker can only load dynamic code, the dynamic way of object is selected. - - - - - 88e99248 by Cheng Shao at 2024-10-17T16:41:24+00:00 ghc-bin: enforce dynamic way when the target requires so This commit makes ghc-bin use dynamic way when it is doing interactive stuff on certain targets whose RTS linker can only handle dynamic code. - - - - - 549582ef by Cheng Shao at 2024-10-17T16:41:24+00:00 hadrian/ghci: add wasm dyld This commit adds the wasm dynamic linker implementation, as well as ghci logic to call it and hadrian logic to install it to the correct location. See the top-level note in utils/jsffi/dyld.mjs for more details. - - - - - b562e3a6 by Cheng Shao at 2024-10-17T16:41:29+00:00 driver: fix getGccSearchDirectory for wasm target This commit fixes getGccSearchDirectory logic for wasm target, ensures the correct search directory containing libc.so etc can be found by GHC. getGccSearchDirectory is also exported so it can be used elsewhere to obtain the wasi-sdk libdir and pass to the dyld script. - - - - - 2d6107dc by Cheng Shao at 2024-10-17T16:41:29+00:00 driver: add wasm backend iserv logic This commit adds wasm backend iserv logic to the driver, see added comments for explanation. - - - - - 61f5baa5 by Cheng Shao at 2024-10-17T16:41:29+00:00 compiler: add PIC support to wasm backend NCG This commit adds support for generating PIC to the wasm backend NCG. - - - - - 652e7239 by Cheng Shao at 2024-10-17T16:41:29+00:00 hadrian/compiler: flip on support for shared libs & ghci for wasm This commit flips on the support for shared libs and ghci for the wasm target, given all required support logic has been added in previous commits. - - - - - 74a1f681 by Cheng Shao at 2024-10-17T16:41:29+00:00 testsuite: flip on support for shared libs, TH & ghci for wasm This commit flips on support for shared libs, TH & ghci for wasm in the testsuite, given support has been landed in previous commits. - - - - - 525d451e by Cheng Shao at 2024-10-17T23:03:34-04:00 Revert "compiler: start deprecating cmmToRawCmmHook" This reverts commit 1c064ef1f3e1aa2afc996e962ad53effa99ec5f4. Turns out the GHC-WPC project does use it to observe Cmm in the pipeline, see #25363. - - - - - 5bcfefd5 by Cheng Shao at 2024-10-17T23:04:09-04:00 rts: fix pointer overflow undefined behavior in bytecode interpreter This patch fixes an unnoticed undefined behavior in the bytecode interpreter. It can be caught by building `rts/Interpreter.c` with `-fsanitize=pointer-overflow`, the warning message is something like: ``` rts/Interpreter.c:1369:13: runtime error: addition of unsigned offset to 0x004200197660 overflowed to 0x004200197658 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1369:13 rts/Interpreter.c:1265:13: runtime error: addition of unsigned offset to 0x004200197660 overflowed to 0x004200197658 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1265:13 rts/Interpreter.c:1645:13: runtime error: addition of unsigned offset to 0x0042000b22f8 overflowed to 0x0042000b22f0 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1645:13 ``` Whenever we do something like `SpW(-1)`, the negative argument is implicitly converted to an unsigned integer type and causes pointer arithmetic overflow. It happens to be harmless for most targets since overflowing would wrap the result to desired value, but it's still coincidental and undefined behavior. Furthermore, it causes real damage to the wasm backend, given clang-20 will emit invalid wasm code that crashes at run-time for this kind of C code! (see https://github.com/llvm/llvm-project/issues/108770) The fix here is adding some explicit casts to ensure we always use the signed `ptrdiff_t` type as right hand operand of pointer arithmetic. - - - - - eb67875f by Matthew Craven at 2024-10-18T12:18:35+00:00 Bump transformers submodule The svg image files mentioned in transformers.cabal were previously not checked in, which broke sdist generation. - - - - - 366a1109 by Matthew Craven at 2024-10-18T12:18:35+00:00 Remove reference to non-existent file in haddock.cabal - - - - - 826852e9 by Matthew Craven at 2024-10-18T12:18:35+00:00 Move tests T11462 and T11525 into tests/tcplugins - - - - - dbe27152 by Matthew Craven at 2024-10-18T12:18:35+00:00 Repair the 'build-cabal' hadrian target Fixes #23117. Fixes #23281. Fixes #23490. This required: * Updating the bit-rotted compiler/Setup.hs and its setup-depends * Listing a few recently-added libraries and utilities in cabal.project-reinstall * Setting allow-boot-library-installs to 'True' since Cabal now considers the 'ghc' package itself a boot library for the purposes of this flag Additionally, the allow-newer block in cabal.project-reinstall was removed. This block was probably added because when the libraries/Cabal submodule is too new relative to the cabal-install executable, solving the setup-depends for any package with a custom setup requires building an old Cabal (from Hackage) against the in-tree version of base, and this can fail un-necessarily due to tight version bounds on base. However, the blind allow-newer can also cause the solver to go berserk and choose a stupid build plan that has no business succeeding, and the failures when this happens are dreadfully confusing. (See #23281 and #24363.) Why does setup-depends solving insist on an old version of Cabal? See: https://github.com/haskell/cabal/blob/0a0b33983b0f022b9697f7df3a69358ee9061a89/cabal-install/src/Distribution/Client/ProjectPlanning.hs#L1393-L1410 The right solution here is probably to use the in-tree cabal-install from libraries/Cabal/cabal-install with the build-cabal target rather than whatever the environment happens to provide. But this is left for future work. - - - - - b3c00c62 by Matthew Craven at 2024-10-18T12:18:35+00:00 Revert "CI: Disable the test-cabal-reinstall job" This reverts commit 38c3afb64d3ffc42f12163c6f0f0d5c414aa8255. - - - - - a04959b8 by Daneel Yaitskov at 2024-10-19T09:34:15-04:00 base: speed up traceEventIO and friends when eventlogging is turned off #17949 Check the RTS flag before doing any work with the given lazy string. Fix #17949 Co-authored-by: Michael Peyton Jones <me at michaelpj.com> Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - eff16c22 by Matthew Pickering at 2024-10-19T21:55:55-04:00 ci: Add support for ONLY_JOBS variable to trigger any validation pipeline By setting the ONLY_JOBS variable to the name of the job (or multiple jobs), the resulting pipeline will include a validation job for that pipeline. For example - if you set ONLY_JOBS="x86_64-linux-ubuntu22_04-validate" then a ubuntu22_04 job will be included in the validation pipeline. This is useful for testing specific jobs. Fixes #25332 - - - - - 280b6278 by Zubin Duggal at 2024-10-19T21:56:31-04:00 rel-eng: ghcup metadata generation: generated yaml anchors with meaningful names (cherry picked from commit d83f5bd730a8aef37d8a38b3560590d9798f8e45) - - - - - 25edf849 by Alan Zimmerman at 2024-10-19T21:57:08-04:00 EPA: Remove [AddEpAnn] Commit 4 EPA: Remove [AddEpAnn] from DataDecl This is quite a big change. The most important part is moving the annotations into HsDataDefn, using a specific annotation data type. It has a knock-on to everything that uses HsDataDefn EPA: Remove [AddEpAnn] for FunDep EPA: Remove [AddEpann] from FamilyDecl EPA: Remove [AddEpAnn] From InjectivityAnn EPA: Remove [AddEpAnn] from DefaultDecl EPA: Remove [AddEpAnn] from RuleDecls EPA: Remove [AddEpAnn] from Warnings - - - - - d5f42045 by Luite Stegeman at 2024-10-20T16:34:47-04:00 Interpreter: Add locking for communication with external interpreter This adds locking to communication with the external interpreter to prevent concurrent tasks interfering with each other. This fixes Template Haskell with the external interpreter in parallel (-j) builds. Fixes #25083 - - - - - d6bfea76 by Matthew James Kraai at 2024-10-20T16:35:29-04:00 Use monospace font for "Either a b" in fmap docs The documentation for fmap shows "`Either a b`" in the default font instead of showing "Either a b" in a monospace font. - - - - - 4bc7f9c8 by Luite Stegeman at 2024-10-20T16:36:15-04:00 Parser: remove non-ASCII characters from Parser.y Non-ASCII characters in the source causes a problem with the default Haskell Language Server setup in VSCode. Two characters seems to have been left in by accident. Workaround for #25396 - - - - - 7f61ed4e by Alan Zimmerman at 2024-10-21T06:39:45-04:00 EPA: Remove [AddEpAnn] Commit 5 EPA: Remove [AddEpAnn] from AnnPragma EPA: Remove [AddEpAnn] From ForeignDecl EPA: Remove [AddEpAnn] from RoleAnnotDecl EPA: Remove [AddEpAnn] from StandaloneKindSig EPA: Remove [AddEpAnn] From HsDeriving EPA: Remove [AddEpAnn] from ConDeclField EPA: Remove [AddEpAnn] from ConDeclGADT EPA: Remove [AddEpAnn] from ConDeclH98 EPA: Remove [AddEpAnn] from ClsInstDecl - - - - - f8694fe7 by Cheng Shao at 2024-10-21T06:40:21-04:00 wasm: bump dyld v8 heap size limit This patch adds `--max-old-space-size=8192` to wasm dyld shebang arguments to bump V8 heap size limit. The default limit (`heap_size_limit` returned by `v8.getHeapStatistics()`) is dynamically determined and a bit too low under certain workloads, and V8 would waste too much CPU time to garbage collect old generation heap more aggressively. Bumping the limit to 8G doesn't imply dyld would really take that much memory at run-time, but it lessens V8 heap stress significantly. - - - - - d328d173 by Luite Stegeman at 2024-10-21T12:39:18+00:00 Add requestTickyCounterSamples to GHC.Internal.Profiling This allows the user to request ticky counters to be written to the eventlog at specific times. See #24645 - - - - - 71765b1d by Simon Peyton Jones at 2024-10-21T20:55:00-04:00 Move defaulting code into a new module GHC.Tc.Solver had reached 4,000 lines -- although quite a lot of them are comments. This MR * Adds the new module GHC.Tc.Solver.Default, which has all the complex, but well modularised, defaulting code * Moves a bit of code from GHC.Tc.Solver into the existing GHC.Tc.Solver.Solve. Notably solveWanteds and simplifyWantedsTcM, which are called from GHC.Tc.Solver.Default It's a pure refactor. No code changes. - - - - - a398227b by Simon Peyton Jones at 2024-10-21T20:55:00-04:00 Improve the generalisation code in Solver.simplifyInfer The code in `decideQuantification` has become quite complicated. This MR straightens it out, adds a new Note, and on the way fixes #25266. See especially Note [decideAndPromoteTyVars] which is is where all the action happens in this MR. - - - - - 148059fe by Andrzej Rybczak at 2024-10-21T20:55:40-04:00 Adjust catches to properly rethrow exceptions https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13302 implemented exception rethrowing proposal, but it didn't adjust `catches`. This fixes it. - - - - - 25121dbc by doyougnu at 2024-10-22T09:38:18-04:00 linker: add --optimistic-linking flag This patch adds: - the --optimistic-linking flag which binds unknown symbols in the runtime linker to 0xDEADBEEF instead of exiting with failure - The test T25240 which tests these flags using dead code in the FFI system. - closes #25240 This patch is part of the upstreaming haskell.nix patches project. - - - - - f19e076d by doyougnu at 2024-10-22T09:38:18-04:00 ghc-internal: hide linkerOptimistic in MiscFlags - - - - - edc02197 by Cheng Shao at 2024-10-22T09:38:54-04:00 hadrian: fix bindist executable wrapper logic for cross targets This commit fixes an oversight of hadrian wrapper generation logic: when doing cross compilation, `wrapper` is called on executable names with cross prefix, therefore we must use `isSuffixOf` when matching to take the cross prefix into account. Also add missing cross prefix to ghci wrapper content and fix hsc2hs wrapper logic. - - - - - edf3bdf5 by Andreas Klebinger at 2024-10-22T16:30:42-04:00 mkTick: Push ticks through unsafeCoerce#. unsafeCoerce# doesn't exist at runtime so we should treat it like a Cast for the purpose of mkTick. This means if we have `{-# SCC foo #-} (unsafeCoerce# trivial_expr))` we now push the scope part of the cost centre up to `trivial_expr` at which point we can discard it completely if the expression is trivial enough. This fixes #25212. - - - - - 1bdb1317 by Cheng Shao at 2024-10-22T16:31:17-04:00 hadrian: enable late-CCS for perf flavour as well This patch enables late-CCS for perf flavour so that the testsuite can pass for perf as well. Fixes #25308. - - - - - fde12aba by Cheng Shao at 2024-10-22T16:31:54-04:00 hadrian: make sure ghc-bin internal-interpreter is disabled for stage0 when not cross compiling This patch disables internal-interpreter flag for stage0 ghc-bin when not cross compiling, see added comment for explanation. Fixes #25406. - - - - - 6ab8d751 by ignatiusm at 2024-10-24T01:23:35-04:00 Improve heap overflow exception message (#25198) Catch heap overflow exceptions and suggest using `+RTS -M<size>`. Fix #25198 - - - - - b3f7fb80 by Rodrigo Mesquita at 2024-10-24T01:24:12-04:00 determinism: Interface re-export list det In 'DocStructureItem' we want to make sure the 'Avails' are sorted, for interface file determinism. This commit introduces 'DetOrdAvails', a newtype that should only be constructed by sorting Avails with 'sortAvails' unless the avails are known to be deterministically ordered. This newtype is used by 'DocStructureItem' where 'Avails' was previously used to ensure the list of avails is deterministically sorted by construction. Note: Even though we order the constructors and avails in the interface file, the order of constructors in the haddock output is still determined from the order of declaration in the source. This was also true before, when the list of constructors in the interface file <docs> section was non-deterministic. Some haddock tests such as "ConstructorArgs" observe this (check the order of constructors in out/ConstructorArgs.html vs src/ConstructorArgs.hs vs its interface file) The updated tests are caused by haddock corners where the order in the source is not preserved (and was non-deterministic before this PR): * Module header in the latex backend * Re-export of pattern synonyms associated to a datatype (#25342) Fixes #25304 - - - - - e39c8c99 by Rodrigo Mesquita at 2024-10-24T01:24:12-04:00 Revert "ci: Allow abi-test to fail." After #25304, the abi-test with interface and object determinism succeeds. This reverts commit 7b37afc9f3e79559055488998ee73187886a0e00. - - - - - 7b1b0c6d by Alan Zimmerman at 2024-10-24T13:07:02-04:00 EPA: reduce [AddEpann] in AnnList Remove it from the `al_rest` field, and make `AnnList` parameterized on a type to be used in `al_rest`, for the various use cases. - - - - - 4a00731e by Rodrigo Mesquita at 2024-10-24T13:07:38-04:00 Fix -fobject-determinism flag definition The flag should be defined as an fflag to make sure the -fno-object-determinism flag is also an available option. Fixes #25397 - - - - - 55e4b9f2 by Sebastian Graf at 2024-10-25T07:01:54-04:00 CorePrep: Attach evaldUnfolding to floats to detect more values See `Note [Pin evaluatedness on floats]`. - - - - - 9f57c96d by Sebastian Graf at 2024-10-25T07:01:54-04:00 Make DataCon workers strict in strict fields (#20749) This patch tweaks `exprIsConApp_maybe`, `exprIsHNF` and friends, and Demand Analysis so that they exploit and maintain strictness of DataCon workers. See `Note [Strict fields in Core]` for details. Very little needed to change, and it puts field seq insertion done by Tag Inference into a new perspective: That of *implementing* strict field semantics. Before Tag Inference, DataCon workers are strict. Afterwards they are effectively lazy and field seqs happen around use sites. History has shown that there is no other way to guarantee taggedness and thus the STG Strict Field Invariant. Knock-on changes: * I reworked the whole narrative around "Tag inference". It's now called "EPT enforcement" and I recycyled the different overview Notes into `Note [EPT enforcement]`. * `exprIsHNF` previously used `exprOkForSpeculation` on unlifted arguments instead of recursing into `exprIsHNF`. That regressed the termination analysis in CPR analysis (which simply calls out to `exprIsHNF`), so I made it call `exprOkForSpeculation`, too. * There's a small regression in Demand Analysis, visible in the changed test output of T16859: Previously, a field seq on a variable would give that variable a "used exactly once" demand, now it's "used at least once", because `dmdTransformDataConSig` accounts for future uses of the field that actually all go through the case binder (and hence won't re-enter the potential thunk). The difference should hardly be observable. * The Simplifier's fast path for data constructors only applies to lazy data constructors now. I observed regressions involving Data.Binary.Put's `Pair` data type. * Unfortunately, T21392 does no longer reproduce after this patch, so I marked it as "not broken" in order to track whether we regress again in the future. Fixes #20749, the satisfying conclusion of an annoying saga (cf. the ideas in #21497 and #22475). Compiler perf generally improves, sometimes drastically: Baseline Test Metric value New value Change -------------------------------------------------------------------------------- ManyConstructors(normal) ghc/alloc 3,629,760,116 3,711,852,800 +2.3% BAD MultiLayerModulesTH_OneShot(normal) ghc/alloc 2,502,735,440 2,565,282,888 +2.5% BAD T12707(normal) ghc/alloc 804,399,798 791,807,320 -1.6% GOOD T17516(normal) ghc/alloc 964,987,744 1,008,383,520 +4.5% T18140(normal) ghc/alloc 75,381,152 49,860,560 -33.9% GOOD T18698b(normal) ghc/alloc 232,614,457 184,262,736 -20.8% GOOD T18923(normal) ghc/alloc 62,002,368 58,301,408 -6.0% GOOD T20049(normal) ghc/alloc 75,719,168 70,494,368 -6.9% GOOD T3294(normal) ghc/alloc 1,237,925,833 1,157,638,992 -6.5% GOOD T9233(normal) ghc/alloc 686,490,105 635,166,688 -7.5% GOOD geo. mean -0.7% minimum -33.9% maximum +4.5% I looked at T17516. It seems we do a few more simplifier iterations and end up with a larger program. It seems that some things inline more, while other things inline less. I don't see low-hanging fruit. I also looked at MultiLayerModulesTH_OneShot. It appears we generate a strange join point in the `getUnique` method of `Uniquable GHC.Unit.Types.Module` that should better call-site inline, but does not. Perhaps with !11492. NoFib does not seem affected much either: +-------------------------------++--+------------+-----------+---------------+-----------+ | || | base/ | std. err. | T20749/ (rel) | std. err. | +===============================++==+============+===========+===============+===========+ | spectral/last-piece || | 7.263e8 | 0.0% | +0.62% | 0.0% | +===============================++==+============+===========+===============+===========+ | geom mean || | +0.00% | | | | +-------------------------------++--+------------+-----------+---------------+-----------+ I had a look at last-piece. Nothing changes in stg-final, but there is a bit of ... movement around Data.Map.insert's use of GHC.Exts.lazy that is gone in stg-final. Co-Authored-By: Jaro Reinders <jaro.reinders at gmail.com> Metric Decrease: T12707 T18140 T18698b T18923 T19695 T20049 T3294 T9233 T21839c Metric Increase: ManyConstructors MultiLayerModulesTH_OneShot - - - - - 0225249a by Simon Peyton Jones at 2024-10-25T07:02:32-04:00 Some renaming This is a pure refactor, tidying up some inconsistent naming: isEqPred --> isEqClassPred isEqPrimPred --> isEqPred isReprEqPrimPred --> isReprEqPred mkPrimEqPred --> mkNomEqPred mkReprPrimEqPred --> mkReprEqPred mkPrimEqPredRold --> mkEqPredRole Plus I moved mkNomEqPred, mkReprEqPred, mkEqPredRolek from GHC.Core.Coercion to GHC.Core.Predicate where they belong. That means that Coercion imports Predicate rather than vice versa -- better. - - - - - 15a3456b by Ryan Hendrickson at 2024-10-25T07:02:32-04:00 compiler: Fix deriving with method constraints See Note [Inferred contexts from method constraints] Co-authored-by: Simon Peyton Jones <simon.peytonjones at gmail.com> - - - - - dbc77ce8 by Alan Zimmerman at 2024-10-25T18:20:13+01:00 EPA: Remove AddEpann commit 7 EPA: Remove [AddEpAnn] from HYPHEN in Parser.y The return value is never used, as it is part of the backpack configuration parsing. EPA: Remove last [AddEpAnn] usages Remove residual usage in GHC. It is still used - In haddock TTG extension point definitions (to be removed) - Some check-exact residual, to be removed - Comments around DisambECP in PostProcess EPA: Clean up [AddEpAnn] from check-exact There is one left, to be cleaned up when we remove AddEpann itself EPA: Remove [AddEpAnn] from haddock The TTG extension points need a value, it is not critical what that value is, in most cases. EPA: Remove AddEpAnn from HsRuleAnn EPA: Remove AddEpAnn from HsCmdArrApp - - - - - 23ddcc01 by Simon Peyton Jones at 2024-10-26T12:44:34-04:00 Fix optimisation of InstCo It turned out (#25387) that the fix to #15725 was not quite right: commit 48efbc04bd45d806c52376641e1a7ed7278d1ec7 Date: Mon Oct 15 10:25:02 2018 +0200 Fix #15725 with an extra Sym Optimising InstCo is quite subtle, and the invariants surrounding the LiftingContext in the coercion optimiser were not stated explicitly. This patch refactors the InstCo optimisation, and documents these invariants. See * Note [Optimising InstCo] * Note [The LiftingContext in optCoercion] I also did some refactoring of course: * Instead of a Bool swap-flag, I am not using GHC.Types.Basic.SwapFlag * I added some invariant-checking the coercion-construction functions in GHC.Core.Coercion.Opt. (Sadly these invariants don't hold during typechecking, becuase the types are un-zonked, so I can't put these checks in GHC.Core.Coercion.) - - - - - 589fea7f by Cheng Shao at 2024-10-27T05:36:38-04:00 ghcid: use multi repl for ghcid - - - - - d52a0475 by Andrew Lelechenko at 2024-10-27T05:37:13-04:00 documentation: add motivating section to Control.Monad.Fix - - - - - 301c3b54 by Cheng Shao at 2024-10-27T05:37:49-04:00 wasm: fix safari console error message related to import("node:timers") This patch fixes the wasm backend JSFFI prelude script to avoid calling `import("node:timers")` on non-deno hosts. Safari doesn't like it and would print an error message to the console. Fixes https://gitlab.haskell.org/ghc/ghc-wasm-meta/-/issues/13. - - - - - 9f02dfb5 by Simon Peyton Jones at 2024-10-27T15:10:08-04:00 Add a missing tidy in UnivCo We were failing to tidy the argument coercions of a UnivCo, which led directly to #25391. The fix is, happily, trivial. I don't have a small repro case (it came up when building horde-ad, which uses typechecker plugins). It should be possible to make a repro case, by using a plugin (which builds a UnivCo) but I decided it was not worth the bother. The bug is egregious and easily fixed. - - - - - 853050c3 by Andrew Lelechenko at 2024-10-27T15:10:44-04:00 Bump text submodule to 2.1.2 - - - - - 90746a59 by Andrew Lelechenko at 2024-10-27T15:10:44-04:00 hadrian: allow -Wunused-imports for text package - - - - - 8a6691c3 by Alan Zimmerman at 2024-10-27T19:44:48+00:00 EPA: Remove AddEpAnn Commit 8/final EPA: Remove AddEpAnn from AnnList EPA: Remove AddEpAnn from GrhsAnn This is the last actual use EPA: Remove NameAdornment from NameAnn Also rework AnnContext to use EpToken, and AnnParen EPA: Remove AddEpAnn. Final removal There are now none left, except for in a large note/comment in PostProcess, describing the historical transition to the disambiguation infrastructure - - - - - d5e7990c by Alan Zimmerman at 2024-10-28T21:41:05+00:00 EPA: Remove AnnKeywordId. This was used as part of AddEpAnn, and is no longer needed. Also remove all the haddock comments about which of are attached to the various parts of the AST. This is now clearly captured in the appropriate TTG extension points, and the `ExactPrint.hs` file. - - - - - e08b8370 by Serge S. Gulin at 2024-10-29T23:17:01-04:00 JS: Re-add optimization for literal strings in genApp (fixes #23479) Based on https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10588/ Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Andrei Borzenkov <root at sandwitch.dev> Co-authored-by: Danil Berestov <goosedb at yandex.ru> ------------------------- Metric Decrease: T25046_perf_size_gzip size_hello_artifact size_hello_artifact_gzip size_hello_unicode size_hello_unicode_gzip ------------------------- - - - - - e3496ef6 by Cheng Shao at 2024-10-29T23:17:37-04:00 compiler: remove unused hscDecls/hscDeclsWithLocation This patch removes unused `hscDecls`/`hscDeclsWithLocation` functions from the compiler, to reduce maintenance burden when doing refactorings related to ghci. - - - - - b1eed26f by Cheng Shao at 2024-10-29T23:18:13-04:00 testsuite: add T25414 test case marked as broken This commit adds T25414 test case to demonstrate #25414. It is marked as broken and will be fixed by the next commit. - - - - - e70009bc by Cheng Shao at 2024-10-29T23:18:13-04:00 driver: fix foreign stub handling logic in hscParsedDecls This patch fixes foreign stub handling logic in `hscParsedDecls`. Previously foreign stubs were simply ignored here, so any feature that involve foreign stubs would not work in ghci (e.g. CApiFFI). The patch reuses `generateByteCode` logic and eliminates a large chunk of duplicate logic that implements Core to bytecode generation pipeline here. Fixes #25414. - - - - - 1d7cd7fe by Andreas Klebinger at 2024-10-30T19:14:28-04:00 Add since tag for -fwrite-if-compression in user guide. Partial fix for #25395 - - - - - b349fd1b by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: Remove some unused functions - - - - - f859d61c by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: use explicit vertical bar token for ExplicitSum / SumPat - - - - - 721ac00d by Ben Gamari at 2024-10-31T08:37:38-04:00 rts/Disassembler: Fix encoding of BRK_FUN instruction The offset of the CC field was not updated after the encoding change in b85b11994e0130ff2401dd4bbdf52330e0bcf776. Fix this. Fixes #25374. - - - - - 0bc94360 by Alan Zimmerman at 2024-10-31T08:38:15-04:00 EPA: Bring in last EpToken usages For import declarations, NameAnnCommas and NPlusKPat. And remove anchor, it is the same as epaLocationRealSrcSpan. - - - - - 0b11cdc0 by sheaf at 2024-10-31T08:38:55-04:00 Assert that ctEvCoercion is called on an equality Calling 'ctEvCoercion' on non-equality constraints is always incorrect. We add an assertion to this function to detect such cases; for example a type-checking plugin might erroneously do this. - - - - - ea458779 by doyougnu at 2024-11-01T18:11:33-04:00 ghc-internal: strict, unboxed src loc ranges - closes: #20449 - See CLC proposal: #55 - - - - - 778ac793 by Kazuki Okamoto at 2024-11-01T18:12:13-04:00 No haddock markup in doctest line - - - - - cf0deeaf by Andreas Klebinger at 2024-11-02T17:54:52-04:00 Reword -fexpose-overloaded-unfoldings docs. This should make them slightly clearer. Fixes #24844 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 1c21e7d4 by Andreas Klebinger at 2024-11-02T17:55:29-04:00 Compile T25062 simd tests even if we can't run them. Helps avoid them being utterly broken. Fixes #25341 - - - - - 573cad4b by Cheng Shao at 2024-11-02T17:56:04-04:00 Remove unused USE_REPORT_PRELUDE code paths from the tree This patch removes unused `USE_REPORT_PRELUDE` code paths from the tree. They have been present since the first git revision 4fb94ae5e5d632748fa2e6c35e259eccc5a1a3f4, and might have been useful for debugging purposes many years ago, but these code paths are never actually built. Removing these ease maintenance of relevant modules in the future, and also allows us to get rid of `CPP` extension in those modules as a nice byproduct. - - - - - 97f600c6 by Hassan Al-Awwadi at 2024-11-04T15:52:12+00:00 Refactored BooleanFormula to be in line with TTG (#21592) There are two parts to this commit. * We moved the definition of BooleanFormula over to L.H.S.BooleanFormula * We parameterized the BooleanFormula over the pass The GHC specific details of BooleanFormula remain in Ghc.Data.BooleanFormula. Because its parameterized over the pass its no longer a functor or traversable, but we defined bfMap and bfTraverse for the cases where we needed fmap and traverse originally. Most other changes are just churn. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot ------------------------- - - - - - d4fd3580 by Andreas Klebinger at 2024-11-05T07:36:16-05:00 ghc-heap: Fix incomplete selector warnings. Use utility functions instead of selectors to read partial attributes. Part of fixing #25380. - - - - - fdd9f62a by Peter Trommler at 2024-11-05T07:36:51-05:00 PPC NCG: Implement fmin and fmax - - - - - 8e217256 by Mike Pilgrem at 2024-11-07T04:34:20-05:00 Re CLC #293 - Don't specify Data.List.NonEmpty in terms of partial See https://github.com/haskell/core-libraries-committee/issues/293 `List.init` had already been driven out of `tails1` by 21fc180bec93d964a7f4ffdf2429ef6f74b49ab6 but this specification also avoided partial `fromList`, so I preferred it. The `changelog.md` for `base` is updated, with an entry added under `base-4.22.0.0`. - - - - - 346e4cd1 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: copy zip files into the correct directory Fixes #25446 - - - - - bbdbe225 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: Sign .gz bindists too Fixes #25447 - - - - - 0c722e14 by Hécate Kleidukos at 2024-11-07T04:35:37-05:00 hadrian: Enforce the usage of GHC >=9.8.1 for ghci-multi GHC 9.6 no good when it comes to multi-repl stuff, despite being well within the range of n-2 releases for bootstrapping, when the script was adapted to load haddock, in !12851 - - - - - d8f8a1c3 by Sylvain Henry at 2024-11-07T19:27:46-05:00 Handle the special ghc-prim:GHC.Prim module in the compiler Before this patch, some custom hacks were necessary in ghc-prim's Setup.hs to register the GHC.Prim (virtual) module and in Hadrian to generate haddocks properly. In this patch we special-case this module in the compiler itself instead (which it already is, see ghcPrimIface in GHC.Iface.Load). From Cabal/Hadrian's perspective GHC.Prim is now just a normal autogenerated module. This simplification is worthwhile on its own. It was found while looking into the work needed for #24453 which aims to merge ghc-prim, ghc-bignum, and ghc-internal. It's also one step closer to remove ghc-prim's custom setup. - - - - - a55adc8e by Cheng Shao at 2024-11-07T19:28:22-05:00 Clean up obsolete CPP guarded code paths from the tree This patch cleans up obsolete CPP guarded code paths from the tree. The minimum supported boot GHC version is 9.6, and all the pre-9.6 era code paths can be removed. - - - - - 9ede97f3 by Cheng Shao at 2024-11-07T19:28:58-05:00 Remove obsolete executable wrappers from the tree The executable wrappers are handled by hadrian and bindist Makefile. The various .wrapper scripts in the tree are unused since removal of Make build system, so this patch removes them all. - - - - - 7d42b2df by tristian at 2024-11-07T19:29:40-05:00 TcRnDuplicateDecls now suggests to use the DuplicateRecordFields extension. Fixes: !24627 - - - - - e56ed179 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: normalise some versions in callstacks (cherry picked from commit f230e29f30d0c1c566d4dd251807fcab76a2710e) - - - - - a28fc903 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: use -fhide-source-paths to normalise some backpack tests (cherry picked from commit b19de476bc5ce5c7792e8af1354b94a4286a1a13) - - - - - ed16d303 by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite/haddock: strip version identifiers and unit hashes from html tests (cherry picked from commit fbf0889eadc410d43dd5c1657e320634b6738fa5) - - - - - e45e5836 by Zubin Duggal at 2024-11-11T15:16:36+05:30 haddock: oneshot tests can drop files if they share modtimes. Stop this by including the filename in the key. Ideally we would use `ghc -M` output to do a proper toposort Partially addresses #25372 (cherry picked from commit e78c7ef96e395f1ef41f04790aebecd0409b92b9) - - - - - 9104e6eb by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: fix normalisation of T9930fail so that it doesn't get tripped up by ghc executable (ARGV[0]) differences (cherry picked from commit a79a587e025d42d34bb30e115fc5c7cab6c1e030) - - - - - 2c31264a by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: normalise windows file seperators (cherry picked from commit f858875e03b9609656b542aaaaff85ad0a83878a) - - - - - 2807f91b by Zubin Duggal at 2024-11-11T15:21:30+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites - - - - - c02add17 by Ben Gamari at 2024-11-12T01:22:11-05:00 configure: Check version number validity Here we verify the previously informal invariant that stable release version numbers must have three components, preventing costly failed releases. Specifically, the check fails in the following scenarios: * `version=9.13` while `RELEASE=YES` since this would imply a release made from an unstable branch * `version=9.13.0` since unstable versions should only have two components * `version=9.12` since this has the wrong number of version components for a stable branch Fixes #25390. - - - - - 747fd322 by Teo Camarasu at 2024-11-12T01:22:49-05:00 docs: link to #14474 in the template-haskell docs - - - - - 6d96bb62 by Zubin Duggal at 2024-11-12T01:23:25-05:00 testsuite: normalise execvp vs exec differences in process tests Fixes #25431 - - - - - 502e6711 by Torsten Schmits at 2024-11-12T01:24:01-05:00 fix test lint that accumulated while the checks were broken I didn't fix the issues flagged by the #ifdef linter because it were so many that it seemed like the rule has become obsolete. - - - - - 223a4cb5 by Torsten Schmits at 2024-11-12T01:24:02-05:00 test driver: fix file collection for regex linters When a testsuite linter is executed with the `tracked` strategy, the driver runs `git ls-tree` to collect eligible files. This appears to have ceased producing any paths – `ls-tree` restricts its results to the current working directory, which is `testsuite/tests/linters` in this case. As a quick fix, this patch changes the working directory to match expectations. - - - - - 9ad9ac63 by Alan Zimmerman at 2024-11-12T01:24:39-05:00 EPA: Capture location of '_' for wild card type binder And keep track of promotion status in HsExplicitTupleTy, so the round-trip ppr test works for it. Updates Haddock output too, using the PromotionFlag in HsExplicitTupleTy. Closes #25454 - - - - - c37b96fa by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix setImmediate() implementation for Cloudflare Workers This patch fixes setImmediate() implementation for Cloudflare Workers in the wasm backend's js prelude script. Cloudflare Workers doesn't support the MessageChannel API, and we use a setTimeout() based fallback implementation in this case. - - - - - bea8ea4c by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix FinalizationRegistry logic for Cloudflare Workers This patch fixes FinalizationRegistry related logic for Cloudflare Workers in wasm backend js post linker. Cloudflare Workers doesn't support FinalizationRegistry, in this case we use a dummy implementation that doesn't do anything. - - - - - 00d551bf by Cheng Shao at 2024-11-13T08:48:21-05:00 Remove obsolete cross-port script This patch removes the obsolete cross-port script in the tree. The script was based on the legacy Make build system which has been pruned from the tree long ago. For hadrian, proper support for two-stage bootstrapping onto a new unsupported platform is a work in progress in !11444. - - - - - 75a2eae4 by Cheng Shao at 2024-11-13T08:48:58-05:00 hadrian: fix bindist makefile for wasm32-wasi target This patch fixes one incoherent place between bindist makefile and hadrian logic: I forgot to include wasi/wasm32 in OsSupportsGHCi/ArchSupportsGHCi as well. And this results in incorrect settings file generated after installing the bindist, and "Use interpreter"/"Have interpreter" fields incorrectly have "NO" values where they should be "YES" like --info output of in-tree version. - - - - - 0614abef by Alan Zimmerman at 2024-11-13T08:49:34-05:00 EPA: Correctly capture leading semis in decl list Closes #25467 - - - - - 00d58ae1 by Sebastian Graf at 2024-11-13T15:21:23-05:00 DmdAnal: Make `prompt#` lazy (#25439) This applies the same treatment to `prompt#` as for `catch#`. See `Note [Strictness for mask/unmask/catch/prompt]`. Fixes #25439. - - - - - 93233a66 by Ben Gamari at 2024-11-13T15:21:59-05:00 boot: Do not attempt to update config.sub While Apple ARM hardware was new we found that the autoconf scripts included in some boot packages were too old. As a mitigation for this, we introduced logic in the `boot` script to update the `config.sub` with that from the GHC tree. However, this causes submodules which have `config.sub` committted to appear to be dirty. This is a considerable headache. Now since `config.sub` with full platform support is more common we can remove `boot`'s `config.sub` logic. Fixes #19574. - - - - - fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 113e9481 by Andrei Borzenkov at 2024-12-07T14:06:37+04:00 Update GHCi :info type declaration printing (24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declaration (type synonyms and type families) there is one additional criteria: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 7 changed files: - .ghcid - .gitattributes - .gitignore - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2bbf032989a145ddba354339fca5a1ccf96ae639...113e9481c892c593b2e169cbdce4a0ed9c64187a -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2bbf032989a145ddba354339fca5a1ccf96ae639...113e9481c892c593b2e169cbdce4a0ed9c64187a You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 12:20:02 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Sat, 07 Dec 2024 07:20:02 -0500 Subject: [Git][ghc/ghc][wip/sand-witch/tysyn-info-ppr] Update GHCi :info type declaration printing (24459) Message-ID: <67543d72d1b72_37a77b19d6c474823@gitlab.mail> Andrei Borzenkov pushed to branch wip/sand-witch/tysyn-info-ppr at Glasgow Haskell Compiler / GHC Commits: 1f29710f by Andrei Borzenkov at 2024-12-07T16:19:31+04:00 Update GHCi :info type declaration printing (24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declaration (type synonyms and type families) there is one additional criteria: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 25 changed files: - compiler/GHC/Core/TyCon.hs - compiler/GHC/Iface/Syntax.hs - compiler/GHC/Iface/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/ghci.rst - testsuite/tests/backpack/should_fail/T19244a.stderr - testsuite/tests/backpack/should_fail/T19244b.stderr - testsuite/tests/backpack/should_fail/bkpfail46.stderr - testsuite/tests/ghci/T18060/T18060.stdout - testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout - testsuite/tests/ghci/scripts/T15941.stdout - testsuite/tests/ghci/scripts/T19310.stdout - testsuite/tests/ghci/scripts/T21294a.stdout - + testsuite/tests/ghci/scripts/T24459.script - + testsuite/tests/ghci/scripts/T24459.stdout - testsuite/tests/ghci/scripts/T8535.stdout - testsuite/tests/ghci/scripts/T9181.stdout - testsuite/tests/ghci/scripts/all.T - testsuite/tests/ghci/scripts/ghci020.stdout - testsuite/tests/ghci/should_run/T10145.stdout - testsuite/tests/ghci/should_run/T18594.stdout - testsuite/tests/interface-stability/base-exports.stdout - testsuite/tests/interface-stability/ghc-experimental-exports.stdout - testsuite/tests/interface-stability/template-haskell-exports.stdout - testsuite/tests/rep-poly/RepPolyBackpack3.stderr Changes: ===================================== compiler/GHC/Core/TyCon.hs ===================================== @@ -24,7 +24,8 @@ module GHC.Core.TyCon( mkRequiredTyConBinder, mkAnonTyConBinder, mkAnonTyConBinders, tyConBinderForAllTyFlag, tyConBndrVisForAllTyFlag, isNamedTyConBinder, - isVisibleTyConBinder, isInvisibleTyConBinder, + isVisibleTyConBinder, isInvisSpecTyConBinder, isInvisibleTyConBinder, + isInferredTyConBinder, isVisibleTcbVis, isInvisSpecTcbVis, -- ** Field labels @@ -487,7 +488,7 @@ mkRequiredTyConBinder dep_set tv | tv `elemVarSet` dep_set = mkNamedTyConBinder Required tv | otherwise = mkAnonTyConBinder tv -tyConBinderForAllTyFlag :: TyConBinder -> ForAllTyFlag +tyConBinderForAllTyFlag :: VarBndr a TyConBndrVis -> ForAllTyFlag tyConBinderForAllTyFlag (Bndr _ vis) = tyConBndrVisForAllTyFlag vis tyConBndrVisForAllTyFlag :: TyConBndrVis -> ForAllTyFlag @@ -513,10 +514,22 @@ isInvisSpecTcbVis :: TyConBndrVis -> Bool isInvisSpecTcbVis (NamedTCB Specified) = True isInvisSpecTcbVis _ = False +isInvisInferTcbVis :: TyConBndrVis -> Bool +isInvisInferTcbVis (NamedTCB Inferred) = True +isInvisInferTcbVis _ = False + +isInvisSpecTyConBinder :: VarBndr tv TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInvisSpecTyConBinder (Bndr _ tcb_vis) = isInvisSpecTcbVis tcb_vis + isInvisibleTyConBinder :: VarBndr tv TyConBndrVis -> Bool -- Works for IfaceTyConBinder too isInvisibleTyConBinder tcb = not (isVisibleTyConBinder tcb) +isInferredTyConBinder :: VarBndr var TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInferredTyConBinder (Bndr _ tcb_vis) = isInvisInferTcbVis tcb_vis + -- Build the 'tyConKind' from the binders and the result kind. -- Keep in sync with 'mkTyConKind' in GHC.Iface.Type. mkTyConKind :: [TyConBinder] -> Kind -> Kind ===================================== compiler/GHC/Iface/Syntax.hs ===================================== @@ -100,6 +100,7 @@ import Control.Monad import System.IO.Unsafe import Control.DeepSeq import Data.Proxy +import qualified Data.Set as Set infixl 3 &&& @@ -912,15 +913,167 @@ constraintIfaceKind :: IfaceKind constraintIfaceKind = IfaceTyConApp (IfaceTyCon constraintKindTyConName (mkIfaceTyConInfo NotPromoted IfaceNormalTyCon)) IA_Nil +{- Note [Print invisible binders in interface declarations] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Starting from GHC 9.8 it is possible to write invisible @-binders +in type-level declarations. That feature introduced several challenges +in interface declaration pretty printing (:info command inside GHCi) +to overcome. + +User-written invisible binders and "system" binders introduced by GHC +are indistinctable at this stage, hence we try to print +semantically significant binders only by default. + +An invisible binder is considered significant when it meets at least +one of the following two criteria: + - It visibly occurs in the declaration's body (See more about that below) + - It is followed by a significant binder, + so it affects positioning +For non-generative type declaration (type synonyms and type families) +there is one additional criteria: + - It is not followed by a visible binder, so it + affects the arity of a type declaration + +Overall solution consists of three functions +- `iface_decl_non_generative` decides whether current declaration is + generative or not + +- `iface_decl_mentioned_vars` gives a Set of variables that + visibly occurs in the declaration's body + +- `suppressIfaceInsignificantInvisibles` uses information provided + by the first two functions to actually filter out insignificant + @-binders + +Here is what we consider "visibly occurs" in general and for +each declaration type: + +- Variables that visibly occur in IfaceType are collected by + `visibleTypeVarOccurencies` function. + +- Variables that visibly occur in IfaceAT are collected by `iface_at_mentioned_vars` + function. It accounts visible binders for associated data and type + family and invisible binders that affect arity for type families only. + Associated types can't have definition, so it's safe to drop all other + binders. + +- IfaceData declared using GADT syntax doesn't have visibly occured type + variables. This is because each constructor has its own variables, e.g.: + + type D :: forall (a :: Type). Type + data D @a where + MkD :: D @b + +- For IfaceData declared using Haskell98 syntax variable is considered visible + if it's visibly occured at least in one argument's type in at least one constructor. + +- For IfaceSynonym variable is considered visible if it's visibly occured + at the RHS type. + +- For IfaceFamily variable is considered visible if it's occured inside + injectivity annotation, e.g. + + type family F @a = r | r -> a + +- For IfaceClass variable is considered visible if it's occured at least + once inside functional dependency annotation or at least in one method's + type signature or visibly occured in at least one associated type's + declaration (Visible occurences in associated types are described above). + +- IfacePatSyn, IfaceId and IfaceAxiom are irrelevant to this problem. +-} + +iface_decl_non_generative :: IfaceDecl -> Bool +iface_decl_non_generative IfaceSynonym{} = True +iface_decl_non_generative IfaceFamily{ifFamFlav = rhs} + | IfaceDataFamilyTyCon <- rhs = False + | otherwise = True +iface_decl_non_generative IfaceData{} = False +iface_decl_non_generative IfaceId{} = False +iface_decl_non_generative IfaceClass{} = False +iface_decl_non_generative IfaceAxiom{} = False +iface_decl_non_generative IfacePatSyn{} = False + +iface_at_mentioned_vars :: IfaceAT -> Set.Set IfLclName +iface_at_mentioned_vars (IfaceAT decl _) + = Set.fromList . map ifTyConBinderName . suppress_vars $ binders + where + -- ifBinders is not total, so we assume here that associated types + -- cannot be IfaceId, IfaceAxiom or IfacePatSyn + binders = case decl of + IfaceFamily {ifBinders} -> ifBinders + IfaceData{ifBinders} -> ifBinders + IfaceSynonym{ifBinders} -> ifBinders + IfaceClass{ifBinders} -> ifBinders + IfaceId{} -> panic "IfaceId shoudn't be an associated type!" + IfaceAxiom{} -> panic "IfaceAxiom shoudn't be an associated type!" + IfacePatSyn {} -> panic "IfacePatSyn shoudn't be an associated type!" + + suppress_arity = iface_decl_non_generative decl + + suppress_vars = + suppressIfaceInsignificantInvisibles + -- We need to count trailing invisibles for type families + (MkPrintArityInvisibles suppress_arity) + -- But this setting will simply count all invisibles + (PrintExplicitKinds False) + -- ...and associated types can't have RHS + mempty + +-- See Note [Print invisible binders in interface declarations] +-- in particular parts about collecting visible occurences +iface_decl_mentioned_vars :: IfaceDecl -> Set.Set IfLclName +iface_decl_mentioned_vars (IfaceData { ifCons = condecls, ifGadtSyntax = gadt }) + | gadt = mempty + -- Get visible occurences in each constructor in each alternative + | otherwise = Set.unions (map mentioned_con_vars cons) + where + mentioned_con_vars = Set.unions . map (visibleTypeVarOccurencies . snd) . ifConArgTys + cons = visibleIfConDecls condecls + +iface_decl_mentioned_vars (IfaceClass { ifFDs = fds, ifBody = IfAbstractClass }) + = Set.unions (map fundep_names fds) + where + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars + (IfaceClass { ifFDs = fds + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs + }}) + = Set.unions + [ Set.unions (map fundep_names fds) + , Set.unions (map iface_at_mentioned_vars ats) + , Set.unions (map (visibleTypeVarOccurencies . class_op_type) sigs) + ] + where + class_op_type (IfaceClassOp _bndr ty _default) = ty + + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars (IfaceSynonym {ifSynRhs = poly_ty}) + = visibleTypeVarOccurencies poly_ty + +iface_decl_mentioned_vars (IfaceFamily { ifBinders = binders, ifResVar = res_var, ifFamInj = inj }) + | Just{} <- res_var + , Injective injectivity <- inj + = Set.fromList . map (ifTyConBinderName . snd) . filter fst $ zip injectivity binders + | otherwise = mempty + +iface_decl_mentioned_vars IfacePatSyn{} = mempty +iface_decl_mentioned_vars IfaceId{} = mempty +iface_decl_mentioned_vars IfaceAxiom{} = mempty + pprIfaceDecl :: ShowSub -> IfaceDecl -> SDoc -- NB: pprIfaceDecl is also used for pretty-printing TyThings in GHCi -- See Note [Pretty printing via Iface syntax] in GHC.Types.TyThing.Ppr -pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, - ifCtxt = context, ifResKind = kind, - ifRoles = roles, ifCons = condecls, - ifParent = parent, - ifGadtSyntax = gadt, - ifBinders = binders }) +pprIfaceDecl ss decl@(IfaceData { ifName = tycon, ifCType = ctype, + ifCtxt = context, ifResKind = kind, + ifRoles = roles, ifCons = condecls, + ifParent = parent, + ifGadtSyntax = gadt, + ifBinders = binders }) | gadt = vcat [ pp_roles , pp_ki_sig @@ -946,8 +1099,10 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_kind = ppUnless (ki_sig_printable || isIfaceLiftedTypeKind kind) (dcolon <+> ppr kind) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss tycon binders + pp_lhs = case parent of - IfNoParent -> pprIfaceDeclHead suppress_bndr_sig context ss tycon binders + IfNoParent -> decl_head IfDataInstance{} -> text "instance" <+> pp_data_inst_forall <+> pprIfaceTyConParent parent @@ -994,36 +1149,40 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_extra = vcat [pprCType ctype] -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfAbstractClass }) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfAbstractClass }) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig [] ss clas binders <+> pprFundeps fds ] + , text "class" <+> decl_head <+> pprFundeps fds ] where + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss clas binders + -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfConcreteClass { - ifATs = ats, - ifSigs = sigs, - ifClassCtxt = context, - ifMinDef = minDef - }}) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs, + ifClassCtxt = context, + ifMinDef = minDef + }}) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig context ss clas binders <+> pprFundeps fds <+> pp_where + , text "class" <+> decl_head <+> pprFundeps fds <+> pp_where , nest 2 (vcat [ vcat asocs, vcat dsigs , ppShowAllSubs ss (pprMinDef $ fromIfaceBooleanFormula minDef)])] where pp_where = ppShowRhs ss $ ppUnless (null sigs && null ats) (text "where") + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss clas binders + asocs = ppr_trim $ map maybeShowAssoc ats dsigs = ppr_trim $ map maybeShowSig sigs @@ -1055,19 +1214,20 @@ pprIfaceDecl ss (IfaceClass { ifName = clas -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceSynonym { ifName = tc - , ifBinders = binders - , ifSynRhs = mono_ty - , ifResKind = res_kind}) +pprIfaceDecl ss decl@(IfaceSynonym { ifName = tc + , ifBinders = binders + , ifSynRhs = poly_ty + , ifResKind = res_kind}) = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tc binders <+> equals) - 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau - , ppUnless (isIfaceLiftedTypeKind res_kind) (dcolon <+> ppr res_kind) ]) + , hang (text "type" <+> decl_head <+> equals) + 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau ]) ] where - (tvs, theta, tau) = splitIfaceSigmaTy mono_ty + (tvs, theta, tau) = splitIfaceSigmaTy poly_ty name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tc) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tc binders + -- See Note [Printing type abbreviations] in GHC.Iface.Type ppr_tau | tc `hasKey` liftedTypeKindTyConKey || tc `hasKey` unrestrictedFunTyConKey || @@ -1078,20 +1238,18 @@ pprIfaceDecl ss (IfaceSynonym { ifName = tc -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceFamily { ifName = tycon - , ifFamFlav = rhs, ifBinders = binders - , ifResKind = res_kind - , ifResVar = res_var, ifFamInj = inj }) +pprIfaceDecl ss decl@(IfaceFamily { ifName = tycon + , ifFamFlav = rhs, ifBinders = binders + , ifResKind = res_kind + , ifResVar = res_var, ifFamInj = inj }) | IfaceDataFamilyTyCon <- rhs = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , text "data family" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders + , text "data family" <+> decl_head ] | otherwise = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type family" - <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders - <+> pp_inj res_var inj + , hang (text "type family" <+> decl_head <+> pp_inj res_var inj <+> ppShowRhs ss (pp_where rhs)) 2 (ppShowRhs ss (pp_rhs rhs)) $$ @@ -1100,6 +1258,8 @@ pprIfaceDecl ss (IfaceFamily { ifName = tycon where name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tycon) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tycon binders + pp_where (IfaceClosedSynFamilyTyCon {}) = text "where" pp_where _ = empty @@ -1245,16 +1405,24 @@ pprIfaceTyConParent IfNoParent pprIfaceTyConParent (IfDataInstance _ tc tys) = pprIfaceTypeApp topPrec tc tys -pprIfaceDeclHead :: SuppressBndrSig +pprIfaceDeclHead :: IfaceDecl + -> SuppressBndrSig -> IfaceContext -> ShowSub -> Name -> [IfaceTyConBinder] -- of the tycon, for invisible-suppression -> SDoc -pprIfaceDeclHead suppress_sig context ss tc_occ bndrs +pprIfaceDeclHead decl suppress_sig context ss tc_occ bndrs = sdocOption sdocPrintExplicitKinds $ \print_kinds -> sep [ pprIfaceContextArr context , pprPrefixIfDeclBndr (ss_how_much ss) (occName tc_occ) <+> pprIfaceTyConBinders suppress_sig - (suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs bndrs) ] + (suppressIfaceInsignificantInvisibles + (MkPrintArityInvisibles print_arity) + (PrintExplicitKinds print_kinds) + mentioned_vars bndrs) ] + where + -- See Note [Print invisible binders in interface declarations] + mentioned_vars = iface_decl_mentioned_vars decl + print_arity = iface_decl_non_generative decl pprIfaceConDecl :: ShowSub -> Bool -> IfaceTopBndr ===================================== compiler/GHC/Iface/Type.hs ===================================== @@ -44,6 +44,7 @@ module GHC.Iface.Type ( SuppressBndrSig(..), UseBndrParens(..), PrintExplicitKinds(..), + PrintArityInvisibles(..), pprIfaceType, pprParendIfaceType, pprPrecIfaceType, pprIfaceContext, pprIfaceContextArr, pprIfaceIdBndr, pprIfaceLamBndr, pprIfaceTvBndr, pprIfaceTyConBinders, @@ -55,7 +56,8 @@ module GHC.Iface.Type ( pprIfaceCoTcApp, pprTyTcApp, pprIfacePrefixApp, isIfaceRhoType, - suppressIfaceInvisibles, + suppressIfaceInvisibles, suppressIfaceInsignificantInvisibles, + visibleTypeVarOccurencies, stripIfaceInvisVars, stripInvisArgs, @@ -98,6 +100,9 @@ import Data.Word (Word8) import Control.Arrow (first) import Control.DeepSeq import Control.Monad ((<$!>)) +import Data.List (dropWhileEnd) +import qualified Data.List.NonEmpty as NonEmpty +import qualified Data.Set as Set {- ************************************************************************ @@ -619,6 +624,51 @@ suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs | isInvisibleTyConBinder k = suppress ks xs | otherwise = x : suppress ks xs +newtype PrintArityInvisibles = MkPrintArityInvisibles Bool + +-- See Note [Print invisible binders in interface declarations] +-- for the definition what binders are considered insignificant +suppressIfaceInsignificantInvisibles :: PrintArityInvisibles + -> PrintExplicitKinds + -> Set.Set IfLclName + -> [IfaceTyConBinder] + -> [IfaceTyConBinder] +suppressIfaceInsignificantInvisibles _ (PrintExplicitKinds True) _ tys = tys +suppressIfaceInsignificantInvisibles + (MkPrintArityInvisibles arity_invisibles) + (PrintExplicitKinds False) mentioned_vars tys + = suppress tys + where + -- Consider this example: + -- type T :: forall k1 k2. Type + -- type T @a @b = b + -- `@a` is not mentioned on the RHS however we can't just + -- drop it because implicit argument positioning matters. + -- + -- Hence just drop the end + only_mentioned_binders = dropWhileEnd (not . is_binder_mentioned) + + is_binder_mentioned bndr = ifTyConBinderName bndr `Set.member` mentioned_vars + + suppress_invisibles group = + applyWhen invis_group only_mentioned_binders bndrs + where + bndrs = NonEmpty.toList group + invis_group = isInvisibleTyConBinder (NonEmpty.head group) + + suppress_invisible_groups [] = [] + suppress_invisible_groups [group] = + if arity_invisibles + then NonEmpty.toList group -- the last group affects arity + else suppress_invisibles group + suppress_invisible_groups (group : groups) + = suppress_invisibles group ++ suppress_invisible_groups groups + + suppress + = suppress_invisible_groups -- Filter out insignificant invisible binders + . NonEmpty.groupWith isInvisibleTyConBinder -- Find chunks of @-binders + . filterOut isInferredTyConBinder -- We don't want to display @{binders} + stripIfaceInvisVars :: PrintExplicitKinds -> [IfaceTyConBinder] -> [IfaceTyConBinder] stripIfaceInvisVars (PrintExplicitKinds True) tyvars = tyvars stripIfaceInvisVars (PrintExplicitKinds False) tyvars @@ -659,6 +709,29 @@ ifTypeIsVarFree ty = go ty go_args IA_Nil = True go_args (IA_Arg arg _ args) = go arg && go_args args +visibleTypeVarOccurencies :: IfaceType -> Set.Set IfLclName +-- Returns True if the type contains this name. Doesn't count +-- invisible application +-- Just used to control pretty printing +visibleTypeVarOccurencies = go + where + (<>) = Set.union + + go (IfaceTyVar var) = Set.singleton var + go (IfaceFreeTyVar {}) = mempty + go (IfaceAppTy fun args) = go fun <> go_args args + go (IfaceFunTy _ w arg res) = go w <> go arg <> go res + go (IfaceForAllTy bndr ty) = go (ifaceBndrType $ binderVar bndr) <> go ty + go (IfaceTyConApp _ args) = go_args args + go (IfaceTupleTy _ _ args) = go_args args + go (IfaceLitTy _) = mempty + go (IfaceCastTy {}) = mempty -- Safe + go (IfaceCoercionTy {}) = mempty -- Safe + + go_args IA_Nil = mempty + go_args (IA_Arg arg Required args) = go arg <> go_args args + go_args (IA_Arg _arg _ args) = go_args args + {- Note [Substitution on IfaceType] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Substitutions on IfaceType are done only during pretty-printing to ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -33,6 +33,10 @@ Compiler GHCi ~~~~ +- :ghci-cmd:`:info` now outputs type declarations with @-binders that are + considered semantically significant. See documentation about :ghci-cmd:`:info` + itself for more detailed explanation. + Runtime system ~~~~~~~~~~~~~~ ===================================== docs/users_guide/ghci.rst ===================================== @@ -2516,6 +2516,22 @@ commonly used commands. ⟨name⟩ has been loaded from a source file, then GHCi will also display the location of its definition in the source. + GHCi outputs type declarations (type synonyms, newtypes and datatypes, + classes, type and data families) with semantically significant invisible + @-binders. + + An invisible binder is considered significant when it meets at least + one of the following two criteria: + + - It visibly occurs in the declaration's body (See more about that below) + + - It is followed by a significant binder, so it affects positioning + + For non-generative type declaration (type synonyms and type families) + there is one additional criteria: + + - It is not followed by a visible binder, so it affects the arity of a type declaration + For types and classes, GHCi also summarises instances that mention them. To avoid showing irrelevant information, an instance is shown only if (a) its head mentions ⟨name⟩, and (b) all the other things ===================================== testsuite/tests/backpack/should_fail/T19244a.stderr ===================================== @@ -17,7 +17,7 @@ T19244a.bkp:22:9: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/T19244b.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing user - [1 of 2] Compiling Map[sig] ( user\Map.hsig, nothing ) - [2 of 2] Compiling User ( user\User.hs, nothing ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, nothing ) + [2 of 2] Compiling User ( user/User.hs, nothing ) [2 of 3] Processing ordmap Instantiating ordmap - [1 of 1] Compiling Map ( ordmap\Map.hs, T19244b.out\ordmap\Map.o ) + [1 of 1] Compiling Map ( ordmap/Map.hs, T19244b.out/ordmap/Map.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including user[Map=ordmap:Map] Instantiating user[Map=ordmap:Map] - [1 of 2] Compiling Map[sig] ( user\Map.hsig, T19244b.out\user\user-GzloW2NeDdA2M0V8qzN4g2\Map.o ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, T19244b.out/user/user-GzloW2NeDdA2M0V8qzN4g2/Map.o ) T19244b.bkp:11:27: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/bkpfail46.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing p - [1 of 2] Compiling A[sig] ( p\A.hsig, nothing ) - [2 of 2] Compiling M ( p\M.hs, nothing ) + [1 of 2] Compiling A[sig] ( p/A.hsig, nothing ) + [2 of 2] Compiling M ( p/M.hs, nothing ) [2 of 3] Processing q Instantiating q - [1 of 1] Compiling A ( q\A.hs, bkpfail46.out\q\A.o ) + [1 of 1] Compiling A ( q/A.hs, bkpfail46.out/q/A.o ) [3 of 3] Processing r Instantiating r [1 of 1] Including p[A=q:A] Instantiating p[A=q:A] - [1 of 2] Compiling A[sig] ( p\A.hsig, bkpfail46.out\p\p-HVmFlcYSefiK5n1aDP1v7x\A.o ) + [1 of 2] Compiling A[sig] ( p/A.hsig, bkpfail46.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o ) bkpfail46.bkp:16:9: error: [GHC-15843] • Type constructor ‘K’ has conflicting definitions in the module and its hsig file. Main module: type K :: * -> Constraint - type K a = GHC.Classes.Eq a :: Constraint + type K a = GHC.Classes.Eq a Hsig file: type K :: * -> Constraint class K a Illegal parameterized type synonym in implementation of abstract data. ===================================== testsuite/tests/ghci/T18060/T18060.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout ===================================== @@ -74,13 +74,13 @@ data Tuple2# a b = (#,#) a b (# , #) :: a -> b -> Tuple2# a b (Int, Int) :: Tuple2 (*) (*) type T :: Tuple2 (*) (*) -type T = (Int, Int) :: Tuple2 (*) (*) +type T = (Int, Int) -- Defined at :19:1 type S :: Solo (*) -type S = MkSolo Int :: Solo (*) +type S = MkSolo Int -- Defined at :20:1 type L :: List (*) -type L = [Int] :: List (*) +type L = [Int] -- Defined at :21:1 f :: Int -> Tuple2 Int Int -> Int (\ (_, _) -> ()) :: Tuple2 a b -> Unit ===================================== testsuite/tests/ghci/scripts/T15941.stdout ===================================== @@ -1,4 +1,3 @@ type T :: * -> * -> * -type T = - (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} :: * -> * -> * +type T = (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} -- Defined at :2:1 ===================================== testsuite/tests/ghci/scripts/T19310.stdout ===================================== @@ -1,3 +1,3 @@ type T :: * -> * -> * -type T = (->) @{LiftedRep} @{LiftedRep} :: * -> * -> * +type T = (->) @{LiftedRep} @{LiftedRep} -- Defined at :3:1 ===================================== testsuite/tests/ghci/scripts/T21294a.stdout ===================================== @@ -1,5 +1,5 @@ type L0 :: * -> * -type L0 = [] :: * -> * +type L0 = [] -- Defined at :1:1 type L1 :: * -> * type L1 a = [a] ===================================== testsuite/tests/ghci/scripts/T24459.script ===================================== @@ -0,0 +1,250 @@ +:{ +{-# LANGUAGE TypeFamilies, TypeFamilyDependencies, DataKinds, TypeAbstractions, FunctionalDependencies, AllowAmbiguousTypes #-} + +import Data.Kind +import Data.Data + +-- Check that we don't print what don't belong to arity +type T0 :: forall k. k -> Type +type T0 = Proxy :: forall k. k -> Type + +-- ...and that doesn't affected by type signature +type T1 :: forall k. k -> Type +type T1 = Proxy + +-- ...and that we print variables that are belong to arity +type T2 :: forall k. k -> Type +type T2 @k = Proxy + +-- ...but don't print invisibles that don't visibly occur and don't affect arity +type T3 :: forall k. k -> Type +type T3 a = Proxy a + +-- ...and print invisibles that do visibly occur +type T4 :: forall a. Type -> Type +type T4 @a _b = Proxy a + +-- ...one more check that it is not affected by user's input +type T5 :: forall a. Type -> Type +type T5 @a _b = Proxy _b + +-- ...and once again +type T6 :: forall k. Type -> Type +type T6 _a = () + +-- ...now check that we don't mess up with positioning +type T7 :: forall a b c. b -> forall d. Type +type T7 @a @b @c f @d = b + +-- ...and that we count occurences in theta +type T8 :: forall (a :: Constraint). Type -> Type +type T8 @a _ = forall x. a => x + +-- ...and in forall binder signatures +type T9 :: forall (a :: Type). Type -> Type +type T9 @a _ = forall (x :: a). Int + +-- That's all with type synonyms, let's check other sorts of type declarations + +-- Equatuions should not affect invisibles for type families, but arity matters +type TF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +type family TF1 @a @b c @d where + forall b d. TF1 @Type @b Int @d = () + forall a b d. TF1 @a @b (_ :: a) @d = Bool + +-- Injectivity annotations should affect invisibles. Also check that positioning works +type TF2 :: forall (a :: Type) (b :: Type). Type -> forall (d :: Type). Type +type family TF2 @a @b c @d = r | r -> b + +-- Data families are generative and can't have injectivity annotations +-- hence no invisibles should be printed +type DF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +data family DF1 @a @b c @d + +-- Data families are generative, so invisible @b isn't a visible usage +type C1 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C1 @a @b c where + data AD a @b + +-- But type families aren't generative, hense trailing @b occurs visibly +type C2 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C2 @a @b c where + type AF a @b + +-- Check that trailing invisibles are handled properly +type C3 :: forall x. Constraint +class C3 @x where {} + +-- And check that signatures are visible occurences +type C4 :: forall (a :: Type) (b :: Type). Constraint +class C4 @a @b where + x :: a + y :: b + +-- Also check functional dependencies +type C5 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C5 @a @b c | a -> c where {} + +-- GADTs should not have "visible" mentiones of binders at a declaration's head +type D1 :: forall a. Type +data D1 @a where + MkD :: b -> D1 @b + +-- Haskell98-style declarations should work properly +type D2 :: forall a (b :: Type). Type -> forall d. Type +data D2 @a @b c @d = MkD2_1 | MkD2_2 Int b + +-- And now a lot of stuff suggested by @int-index + +data P a b + +type F1 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k1 + +type F2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k2 + +type F3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k3 + +type F4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k4 + +type F5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k5 + +type F6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k6 + +type F1x2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k2) + +type F1x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k3) + +type F1x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k4) + +type F1x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k5) + +type F1x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k6) + +type F2x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k3) + +type F2x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k4) + +type F2x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k5) + +type F2x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k6) + +type F3x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k4) + +type F3x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k5) + +type F3x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k6) + +type F4x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k5) + +type F4x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k6) + +type F5x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k5,k6) + +:} + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 + +:set -fprint-explicit-kinds + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 ===================================== testsuite/tests/ghci/scripts/T24459.stdout ===================================== @@ -0,0 +1,313 @@ +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 a = Proxy a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @a _b = Proxy a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 _b = Proxy _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @a @b f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 c @d where + TF1 Int = () + forall a (_1 :: a) b d. TF1 _1 = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 c + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a c where + type AD :: * -> forall b. * + data family AD a + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a c | a -> c + -- Defined at :86:1 +type D1 :: forall {k} (a :: k). * +data D1 where + MkD :: b -> D1 + -- Defined at :90:1 +type role D2 phantom +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @a @b c = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 a b c d e @k6 = P k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b c d e @k6 = P k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 a b @k3 c d e @k6 = P k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 a b @k3 @k4 c d e @k6 = P k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 a b @k3 @k4 @k5 c d e @k6 = P k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 a b c d e @k6 = P k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b c d e @k6 = P (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 a b @k3 c d e @k6 = P (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 a b @k3 @k4 c d e @k6 = P (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 a b @k3 @k4 @k5 c d e @k6 = P (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 a b c d e @k6 = P (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 c d e @k6 = P (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 c d e @k6 = P (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b c d e @k6 = P (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 a b @k3 @k4 c d e @k6 = P (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 a b @k3 @k4 @k5 c d e @k6 = P (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 a b @k3 c d e @k6 = P (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 a b @k3 @k4 @k5 c d e @k6 = P (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 a b @k3 @k4 c d e @k6 = P (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 a b @k3 @k4 @k5 c d e @k6 = P (k5, k6) + -- Defined at :162:1 +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy @{k} + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 @k a = Proxy @{k} a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @{k} @a _b = Proxy @{k} a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 @{k} @a _b = Proxy @{*} _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 @{k} @k1 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @{k} @{k1} @{k2} @a @b @c f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 @a @b c @d where + TF1 @(*) @b Int @d = () + forall a (_1 :: a) b d. TF1 @a @b _1 @d = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 @a @b c @d + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a @b c where + type AD :: * -> forall b. * + data family AD a @b + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 @{k} @x + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a @b c | a -> c + -- Defined at :86:1 +type role D1 nominal nominal +type D1 :: forall {k} (a :: k). * +data D1 @{k} @a where + MkD :: b -> D1 @{*} @b + -- Defined at :90:1 +type role D2 nominal nominal nominal nominal phantom nominal +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @{k} @{k1} @a @b c @d = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k5, k6) + -- Defined at :162:1 ===================================== testsuite/tests/ghci/scripts/T8535.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/T9181.stdout ===================================== @@ -13,12 +13,10 @@ type (GHC.Internal.Data.Type.Ord.<=) x y = GHC.Internal.TypeError.Assert (x GHC.Internal.Data.Type.Ord.<=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) - :: Constraint type (GHC.Internal.Data.Type.Ord.<=?) :: forall k. k -> k -> Bool type (GHC.Internal.Data.Type.Ord.<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) True True False - :: Bool type GHC.Internal.TypeLits.AppendSymbol :: GHC.Types.Symbol -> GHC.Types.Symbol -> GHC.Types.Symbol type family GHC.Internal.TypeLits.AppendSymbol a b ===================================== testsuite/tests/ghci/scripts/all.T ===================================== @@ -385,3 +385,4 @@ test('T23686', normal, ghci_script, ['T23686.script']) test('T13869', extra_files(['T13869a.hs', 'T13869b.hs']), ghci_script, ['T13869.script']) test('ListTuplePunsPpr', normal, ghci_script, ['ListTuplePunsPpr.script']) test('ListTuplePunsPprNoAbbrevTuple', [expect_broken(23135), limit_stdout_lines(13)], ghci_script, ['ListTuplePunsPprNoAbbrevTuple.script']) +test('T24459', normal, ghci_script, ['T24459.script']) ===================================== testsuite/tests/ghci/scripts/ghci020.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T10145.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T18594.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5406,7 +5406,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5533,7 +5533,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5608,7 +5608,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5616,7 +5616,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5662,7 +5662,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7397,7 +7397,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7407,7 +7407,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7454,14 +7454,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7478,24 +7478,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8583,7 +8583,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9357,7 +9357,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9418,7 +9418,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9573,9 +9573,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9692,9 +9692,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) @@ -4341,7 +4341,7 @@ module GHC.PrimOps where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -4468,7 +4468,7 @@ module GHC.PrimOps where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -4543,7 +4543,7 @@ module GHC.PrimOps where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -4551,7 +4551,7 @@ module GHC.PrimOps where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -4597,7 +4597,7 @@ module GHC.PrimOps where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -6329,9 +6329,9 @@ module Prelude.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -8960,11 +8960,11 @@ module Prelude.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) ===================================== testsuite/tests/interface-stability/template-haskell-exports.stdout ===================================== @@ -31,7 +31,7 @@ module Language.Haskell.TH where type Code :: (* -> *) -> forall (r :: GHC.Types.RuntimeRep). TYPE r -> * newtype Code m a = Code {examineCode :: m (TExp a)} type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = Code Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = Code Q type Con :: * data Con = NormalC Name [BangType] | RecC Name [VarBangType] | InfixC BangType Name BangType | ForallC [TyVarBndr Specificity] Cxt Con | GadtC [Name] [BangType] Type | RecGadtC [Name] [VarBangType] Type type ConQ :: * @@ -881,7 +881,7 @@ module Language.Haskell.TH.Lib where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * @@ -1220,7 +1220,7 @@ module Language.Haskell.TH.Lib.Internal where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * ===================================== testsuite/tests/rep-poly/RepPolyBackpack3.stderr ===================================== @@ -1,19 +1,19 @@ [1 of 3] Processing sig - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, nothing ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, nothing ) [2 of 3] Processing impl Instantiating impl - [1 of 1] Compiling Impl ( impl\Impl.hs, RepPolyBackpack3.out\impl\Impl.o ) + [1 of 1] Compiling Impl ( impl/Impl.hs, RepPolyBackpack3.out/impl/Impl.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including sig[Sig=impl:Impl] Instantiating sig[Sig=impl:Impl] - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, RepPolyBackpack3.out\sig\sig-Absk5cIXTXe6UYhGMYGber\Sig.o ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, RepPolyBackpack3.out/sig/sig-Absk5cIXTXe6UYhGMYGber/Sig.o ) RepPolyBackpack3.bkp:17:5: error: [GHC-15843] • Type constructor ‘Rep’ has conflicting definitions in the module and its hsig file. Main module: type Rep :: GHC.Types.RuntimeRep - type Rep = T :: GHC.Types.RuntimeRep + type Rep = T Hsig file: type Rep :: GHC.Types.RuntimeRep data Rep Illegal implementation of abstract data: Invalid type family ‘T’. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1f29710f8c9bbb91e8bbb1aab08968085f9339b4 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1f29710f8c9bbb91e8bbb1aab08968085f9339b4 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 13:10:25 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Sat, 07 Dec 2024 08:10:25 -0500 Subject: [Git][ghc/ghc][wip/bco-name] rts: Annotate BCOs with their Name Message-ID: <6754494168413_37a77b6970bc80545@gitlab.mail> Ben Gamari pushed to branch wip/bco-name at Glasgow Haskell Compiler / GHC Commits: cb2ea9b8 by Ben Gamari at 2024-12-07T08:10:16-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 11 changed files: - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/StgToByteCode.hs - compiler/ghc.cabal.in - docs/users_guide/debugging.rst - rts/Disassembler.c - rts/Interpreter.c - rts/include/rts/Bytecodes.h - rts/rts.cabal Changes: ===================================== compiler/GHC/ByteCode/Asm.hs ===================================== @@ -106,7 +106,7 @@ assembleBCOs interp profile proto_bcos tycons top_strs modbreaks spt_entries = d bcos' <- mallocStrings interp bcos return CompiledByteCode { bc_bcos = bcos' - , bc_itbls = itblenv + , bc_itbls = itblenv , bc_ffis = concatMap protoBCOFFIs proto_bcos , bc_strs = top_strs , bc_breaks = modbreaks @@ -178,11 +178,12 @@ assembleOneBCO interp profile pbco = do return ubco' assembleBCO :: Platform -> ProtoBCO Name -> IO UnlinkedBCO -assembleBCO platform (ProtoBCO { protoBCOName = nm - , protoBCOInstrs = instrs - , protoBCOBitmap = bitmap - , protoBCOBitmapSize = bsize - , protoBCOArity = arity }) = do +assembleBCO platform + (ProtoBCO { protoBCOName = nm + , protoBCOInstrs = instrs + , protoBCOBitmap = bitmap + , protoBCOBitmapSize = bsize + , protoBCOArity = arity }) = do -- pass 1: collect up the offsets of the local labels. let asm = mapM_ (assembleI platform) instrs @@ -527,6 +528,10 @@ assembleI platform i = case i of , SmallOp tickx, SmallOp infox , Op np ] +#if MIN_VERSION_rts(1,0,3) + BCO_NAME name -> do np <- lit [BCONPtrStr name] + emit bci_BCO_NAME [Op np] +#endif where literal (LitLabel fs _) = litlabel fs ===================================== compiler/GHC/ByteCode/Instr.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -funbox-strict-fields #-} @@ -27,6 +27,10 @@ import GHC.Runtime.Heap.Layout ( StgWord ) import Data.Int import Data.Word +#if MIN_VERSION_rts(1,0,3) +import Data.ByteString (ByteString) +#endif + import GHC.Stack.CCS (CostCentre) import GHC.Stg.Syntax @@ -229,6 +233,22 @@ data BCInstr !Word16 -- breakpoint info index (RemotePtr CostCentre) +#if MIN_VERSION_rts(1,0,3) + -- | A "meta"-instruction for recording the name of a BCO for debugging purposes. + -- These are ignored by the interpreter but helpfully printed by the disassmbler. + | BCO_NAME !ByteString +#endif + + +{- Note [BCO_NAME] + ~~~~~~~~~~~~~~~ + The BCO_NAME instruction is a debugging-aid enabled with the -fadd-bco-name flag. + When enabled the bytecode assembler will prepend a BCO_NAME instruction to every + generated bytecode object capturing the STG name of the binding the BCO implements. + This is then printed by the bytecode disassembler, allowing bytecode objects to be + readily correlated with their STG and Core source. + -} + -- ----------------------------------------------------------------------------- -- Printing bytecode instructions @@ -383,6 +403,9 @@ instance Outputable BCInstr where <+> text "" <+> ppr tickx <+> text "" <+> ppr infox <+> text "" +#if MIN_VERSION_rts(1,0,3) + ppr (BCO_NAME nm) = text "BCO_NAME" <+> text (show nm) +#endif @@ -487,3 +510,6 @@ bciStackUse SLIDE{} = 0 bciStackUse MKAP{} = 0 bciStackUse MKPAP{} = 0 bciStackUse PACK{} = 1 -- worst case is PACK 0 words +#if MIN_VERSION_rts(1,0,3) +bciStackUse BCO_NAME{} = 0 +#endif ===================================== compiler/GHC/Driver/Flags.hs ===================================== @@ -573,6 +573,7 @@ data GeneralFlag | Opt_DoAsmLinting | Opt_DoAnnotationLinting | Opt_DoBoundsChecking + | Opt_AddBcoName | Opt_NoLlvmMangler -- hidden flag | Opt_FastLlvm -- hidden flag | Opt_NoTypeableBinds ===================================== compiler/GHC/Driver/Session.hs ===================================== @@ -2532,6 +2532,7 @@ fFlagsDeps = [ flagSpec "catch-nonexhaustive-cases" Opt_CatchNonexhaustiveCases, flagSpec "alignment-sanitisation" Opt_AlignmentSanitisation, flagSpec "check-prim-bounds" Opt_DoBoundsChecking, + flagSpec "add-bco-name" Opt_AddBcoName, flagSpec "num-constant-folding" Opt_NumConstantFolding, flagSpec "core-constant-folding" Opt_CoreConstantFolding, flagSpec "fast-pap-calls" Opt_FastPAPCalls, ===================================== compiler/GHC/StgToByteCode.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} @@ -236,7 +236,10 @@ ppBCEnv p -- Create a BCO and do a spot of peephole optimisation on the insns -- at the same time. mkProtoBCO - :: Platform + :: (Outputable name) + => Platform + -> Bool -- ^ True <=> label with @BCO_NAME@ instruction + -- see Note [BCO_NAME] -> name -> BCInstrList -> Either [CgStgAlt] (CgStgRhs) @@ -247,10 +250,10 @@ mkProtoBCO -> Bool -- ^ True <=> is a return point, rather than a function -> [FFIInfo] -> ProtoBCO name -mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis +mkProtoBCO platform _add_bco_name nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis = ProtoBCO { protoBCOName = nm, - protoBCOInstrs = maybe_with_stack_check, + protoBCOInstrs = maybe_add_bco_name $ maybe_add_stack_check peep_d, protoBCOBitmap = bitmap, protoBCOBitmapSize = fromIntegral bitmap_size, protoBCOArity = arity, @@ -258,6 +261,14 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi protoBCOFFIs = ffis } where +#if MIN_VERSION_rts(1,0,3) + maybe_add_bco_name instrs + | _add_bco_name = BCO_NAME str : instrs + where + str = BS.pack $ showSDocOneLine defaultSDocContext (ppr nm) +#endif + maybe_add_bco_name instrs = instrs + -- Overestimate the stack usage (in words) of this BCO, -- and if >= iNTERP_STACK_CHECK_THRESH, add an explicit -- stack check. (The interpreter always does a stack check @@ -265,17 +276,17 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi -- BCO anyway, so we only need to add an explicit one in the -- (hopefully rare) cases when the (overestimated) stack use -- exceeds iNTERP_STACK_CHECK_THRESH. - maybe_with_stack_check - | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = peep_d + maybe_add_stack_check instrs + | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = instrs -- don't do stack checks at return points, -- everything is aggregated up to the top BCO -- (which must be a function). -- That is, unless the stack usage is >= AP_STACK_SPLIM, -- see bug #1466. | stack_usage >= fromIntegral iNTERP_STACK_CHECK_THRESH - = STKCHECK stack_usage : peep_d + = STKCHECK stack_usage : instrs | otherwise - = peep_d -- the supposedly common case + = instrs -- the supposedly common case -- We assume that this sum doesn't wrap stack_usage = sum (map bciStackUse peep_d) @@ -308,6 +319,7 @@ schemeTopBind (id, rhs) | Just data_con <- isDataConWorkId_maybe id, isNullaryRepDataCon data_con = do platform <- profilePlatform <$> getProfile + add_bco_name <- shouldAddBcoName -- Special case for the worker of a nullary data con. -- It'll look like this: Nil = /\a -> Nil a -- If we feed it into schemeR, we'll get @@ -316,7 +328,8 @@ schemeTopBind (id, rhs) -- by just re-using the single top-level definition. So -- for the worker itself, we must allocate it directly. -- ioToBc (putStrLn $ "top level BCO") - emitBc (mkProtoBCO platform (getName id) (toOL [PACK data_con 0, RETURN P]) + emitBc (mkProtoBCO platform add_bco_name + (getName id) (toOL [PACK data_con 0, RETURN P]) (Right rhs) 0 0 [{-no bitmap-}] False{-not alts-}) | otherwise @@ -358,6 +371,7 @@ schemeR_wrk -> BcM (ProtoBCO Name) schemeR_wrk fvs nm original_body (args, body) = do + add_bco_name <- shouldAddBcoName profile <- getProfile let platform = profilePlatform profile @@ -379,7 +393,7 @@ schemeR_wrk fvs nm original_body (args, body) bitmap = mkBitmap platform bits body_code <- schemeER_wrk sum_szsb_args p_init body - emitBc (mkProtoBCO platform nm body_code (Right original_body) + emitBc (mkProtoBCO platform add_bco_name nm body_code (Right original_body) arity bitmap_size bitmap False{-not alts-}) -- | Introduce break instructions for ticked expressions. @@ -1069,9 +1083,10 @@ doCase d s p scrut bndr alts | ubx_tuple_frame = SLIDE 0 2 `consOL` alt_final0 | otherwise = alt_final0 + add_bco_name <- shouldAddBcoName let alt_bco_name = getName bndr - alt_bco = mkProtoBCO platform alt_bco_name alt_final (Left alts) + alt_bco = mkProtoBCO platform add_bco_name alt_bco_name alt_final (Left alts) 0{-no arity-} bitmap_size bitmap True{-is alts-} scrut_code <- schemeE (d + ret_frame_size_b + save_ccs_size_b) (d + ret_frame_size_b + save_ccs_size_b) @@ -1379,7 +1394,7 @@ Note [unboxed tuple bytecodes and tuple_BCO] tupleBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name tupleBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -1398,9 +1413,9 @@ tupleBCO platform args_info args = body_code = mkSlideW 0 1 -- pop frame header `snocOL` RETURN_TUPLE -- and add it again -primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name +primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name primCallBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -2337,6 +2352,9 @@ getHscEnv = BcM $ \st -> return (st, bcm_hsc_env st) getProfile :: BcM Profile getProfile = targetProfile <$> getDynFlags +shouldAddBcoName :: BcM Bool +shouldAddBcoName = gopt Opt_AddBcoName <$> getDynFlags + emitBc :: ([FFIInfo] -> ProtoBCO Name) -> BcM (ProtoBCO Name) emitBc bco = BcM $ \st -> return (st{ffis=[]}, bco (ffis st)) ===================================== compiler/ghc.cabal.in ===================================== @@ -130,6 +130,7 @@ Library exceptions == 0.10.*, semaphore-compat, stm, + rts, ghc-boot == @ProjectVersionMunged@, ghc-heap == @ProjectVersionMunged@, ghci == @ProjectVersionMunged@ ===================================== docs/users_guide/debugging.rst ===================================== @@ -1240,8 +1240,7 @@ Other :type: dynamic :since: 9.8.1 - - default: enabled + :default: enabled At the moment, ghci disables optimizations, because not all passes are compatible with the interpreter. @@ -1254,3 +1253,16 @@ Other expressions. Those cannot be stored in breakpoints, so any free variable that refers to optimized code will not be inspectable when this flag is enabled. + +.. ghc-flag:: -fadd-bco-name + :shortdesc: Add ``BCO_NAME`` instructions in generated bytecode. + :reverse: -fno-add-bco-name + :type: dynamic + + :since: 9.14.1 + + Prefix every generated bytecode object with a ``BCO_NAME`` instruction + containing the STG name of the binding from which the BCO originated. + These are printed by the bytecode disassembler, aiding in correlating + bytecode with STG. + ===================================== rts/Disassembler.c ===================================== @@ -452,6 +452,13 @@ disInstr ( StgBCO *bco, int pc ) debugBelch("RETURN_T\n "); break; + case bci_BCO_NAME: { + const char *name = (const char*) literals[instrs[pc]]; + debugBelch("BCO_NAME \"%s\"\n ", name); + pc += 1; + break; + } + default: barf("disInstr: unknown opcode %u", (unsigned int) instr); } @@ -464,10 +471,9 @@ void disassemble( StgBCO *bco ) StgWord16* instrs = (StgWord16*)(bco->instrs->payload); StgMutArrPtrs* ptrs = bco->ptrs; uint32_t nbcs = (uint32_t)(bco->instrs->bytes / sizeof(StgWord16)); - uint32_t pc = 1; + uint32_t pc = 0; debugBelch("BCO\n" ); - pc = 0; while (pc < nbcs) { debugBelch("\t%2d: ", pc ); pc = disInstr ( bco, pc ); ===================================== rts/Interpreter.c ===================================== @@ -2087,6 +2087,10 @@ run_BCO: goto do_return_nonpointer; } + case bci_BCO_NAME: + bciPtr++; + goto nextInsn; + case bci_SWIZZLE: { W_ stkoff = BCO_GET_LARGE_ARG; StgInt n = BCO_GET_LARGE_ARG; ===================================== rts/include/rts/Bytecodes.h ===================================== @@ -112,6 +112,8 @@ #define bci_PRIMCALL 87 +#define bci_BCO_NAME 88 + /* If you need to go past 255 then you will run into the flags */ /* If you need to go below 0x0100 then you will run into the instructions */ ===================================== rts/rts.cabal ===================================== @@ -1,6 +1,6 @@ cabal-version: 3.0 name: rts -version: 1.0.2 +version: 1.0.3 synopsis: The GHC runtime system description: The GHC runtime system. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cb2ea9b8b9db9ae0fbfd09b402b1124aabe116b9 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cb2ea9b8b9db9ae0fbfd09b402b1124aabe116b9 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 14:30:58 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Sat, 07 Dec 2024 09:30:58 -0500 Subject: [Git][ghc/ghc][wip/sand-witch/tysyn-info-ppr] Update GHCi :info type declaration printing (24459) Message-ID: <67545c21e6bf9_23369353cd4818268@gitlab.mail> Andrei Borzenkov pushed to branch wip/sand-witch/tysyn-info-ppr at Glasgow Haskell Compiler / GHC Commits: eb0131c1 by Andrei Borzenkov at 2024-12-07T18:30:35+04:00 Update GHCi :info type declaration printing (24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declaration (type synonyms and type families) there is one additional criteria: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 25 changed files: - compiler/GHC/Core/TyCon.hs - compiler/GHC/Iface/Syntax.hs - compiler/GHC/Iface/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/ghci.rst - testsuite/tests/backpack/should_fail/T19244a.stderr - testsuite/tests/backpack/should_fail/T19244b.stderr - testsuite/tests/backpack/should_fail/bkpfail46.stderr - testsuite/tests/ghci/T18060/T18060.stdout - testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout - testsuite/tests/ghci/scripts/T15941.stdout - testsuite/tests/ghci/scripts/T19310.stdout - testsuite/tests/ghci/scripts/T21294a.stdout - + testsuite/tests/ghci/scripts/T24459.script - + testsuite/tests/ghci/scripts/T24459.stdout - testsuite/tests/ghci/scripts/T8535.stdout - testsuite/tests/ghci/scripts/T9181.stdout - testsuite/tests/ghci/scripts/all.T - testsuite/tests/ghci/scripts/ghci020.stdout - testsuite/tests/ghci/should_run/T10145.stdout - testsuite/tests/ghci/should_run/T18594.stdout - testsuite/tests/interface-stability/base-exports.stdout - testsuite/tests/interface-stability/ghc-experimental-exports.stdout - testsuite/tests/interface-stability/template-haskell-exports.stdout - testsuite/tests/rep-poly/RepPolyBackpack3.stderr Changes: ===================================== compiler/GHC/Core/TyCon.hs ===================================== @@ -24,7 +24,8 @@ module GHC.Core.TyCon( mkRequiredTyConBinder, mkAnonTyConBinder, mkAnonTyConBinders, tyConBinderForAllTyFlag, tyConBndrVisForAllTyFlag, isNamedTyConBinder, - isVisibleTyConBinder, isInvisibleTyConBinder, + isVisibleTyConBinder, isInvisSpecTyConBinder, isInvisibleTyConBinder, + isInferredTyConBinder, isVisibleTcbVis, isInvisSpecTcbVis, -- ** Field labels @@ -487,7 +488,7 @@ mkRequiredTyConBinder dep_set tv | tv `elemVarSet` dep_set = mkNamedTyConBinder Required tv | otherwise = mkAnonTyConBinder tv -tyConBinderForAllTyFlag :: TyConBinder -> ForAllTyFlag +tyConBinderForAllTyFlag :: VarBndr a TyConBndrVis -> ForAllTyFlag tyConBinderForAllTyFlag (Bndr _ vis) = tyConBndrVisForAllTyFlag vis tyConBndrVisForAllTyFlag :: TyConBndrVis -> ForAllTyFlag @@ -513,10 +514,22 @@ isInvisSpecTcbVis :: TyConBndrVis -> Bool isInvisSpecTcbVis (NamedTCB Specified) = True isInvisSpecTcbVis _ = False +isInvisInferTcbVis :: TyConBndrVis -> Bool +isInvisInferTcbVis (NamedTCB Inferred) = True +isInvisInferTcbVis _ = False + +isInvisSpecTyConBinder :: VarBndr tv TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInvisSpecTyConBinder (Bndr _ tcb_vis) = isInvisSpecTcbVis tcb_vis + isInvisibleTyConBinder :: VarBndr tv TyConBndrVis -> Bool -- Works for IfaceTyConBinder too isInvisibleTyConBinder tcb = not (isVisibleTyConBinder tcb) +isInferredTyConBinder :: VarBndr var TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInferredTyConBinder (Bndr _ tcb_vis) = isInvisInferTcbVis tcb_vis + -- Build the 'tyConKind' from the binders and the result kind. -- Keep in sync with 'mkTyConKind' in GHC.Iface.Type. mkTyConKind :: [TyConBinder] -> Kind -> Kind ===================================== compiler/GHC/Iface/Syntax.hs ===================================== @@ -100,6 +100,7 @@ import Control.Monad import System.IO.Unsafe import Control.DeepSeq import Data.Proxy +import qualified Data.Set as Set infixl 3 &&& @@ -912,15 +913,167 @@ constraintIfaceKind :: IfaceKind constraintIfaceKind = IfaceTyConApp (IfaceTyCon constraintKindTyConName (mkIfaceTyConInfo NotPromoted IfaceNormalTyCon)) IA_Nil +{- Note [Print invisible binders in interface declarations] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Starting from GHC 9.8 it is possible to write invisible @-binders +in type-level declarations. That feature introduced several challenges +in interface declaration pretty printing (:info command inside GHCi) +to overcome. + +User-written invisible binders and "system" binders introduced by GHC +are indistinctable at this stage, hence we try to print +semantically significant binders only by default. + +An invisible binder is considered significant when it meets at least +one of the following two criteria: + - It visibly occurs in the declaration's body (See more about that below) + - It is followed by a significant binder, + so it affects positioning +For non-generative type declaration (type synonyms and type families) +there is one additional criteria: + - It is not followed by a visible binder, so it + affects the arity of a type declaration + +Overall solution consists of three functions +- `iface_decl_non_generative` decides whether current declaration is + generative or not + +- `iface_decl_mentioned_vars` gives a Set of variables that + visibly occurs in the declaration's body + +- `suppressIfaceInsignificantInvisibles` uses information provided + by the first two functions to actually filter out insignificant + @-binders + +Here is what we consider "visibly occurs" in general and for +each declaration type: + +- Variables that visibly occur in IfaceType are collected by + `visibleTypeVarOccurencies` function. + +- Variables that visibly occur in IfaceAT are collected by `iface_at_mentioned_vars` + function. It accounts visible binders for associated data and type + family and invisible binders that affect arity for type families only. + Associated types can't have definition, so it's safe to drop all other + binders. + +- IfaceData declared using GADT syntax doesn't have visibly occured type + variables. This is because each constructor has its own variables, e.g.: + + type D :: forall (a :: Type). Type + data D @a where + MkD :: D @b + +- For IfaceData declared using Haskell98 syntax variable is considered visible + if it's visibly occured at least in one argument's type in at least one constructor. + +- For IfaceSynonym variable is considered visible if it's visibly occured + at the RHS type. + +- For IfaceFamily variable is considered visible if it's occured inside + injectivity annotation, e.g. + + type family F @a = r | r -> a + +- For IfaceClass variable is considered visible if it's occured at least + once inside functional dependency annotation or at least in one method's + type signature or visibly occured in at least one associated type's + declaration (Visible occurences in associated types are described above). + +- IfacePatSyn, IfaceId and IfaceAxiom are irrelevant to this problem. +-} + +iface_decl_non_generative :: IfaceDecl -> Bool +iface_decl_non_generative IfaceSynonym{} = True +iface_decl_non_generative IfaceFamily{ifFamFlav = rhs} + | IfaceDataFamilyTyCon <- rhs = False + | otherwise = True +iface_decl_non_generative IfaceData{} = False +iface_decl_non_generative IfaceId{} = False +iface_decl_non_generative IfaceClass{} = False +iface_decl_non_generative IfaceAxiom{} = False +iface_decl_non_generative IfacePatSyn{} = False + +iface_at_mentioned_vars :: IfaceAT -> Set.Set IfLclName +iface_at_mentioned_vars (IfaceAT decl _) + = Set.fromList . map ifTyConBinderName . suppress_vars $ binders + where + -- ifBinders is not total, so we assume here that associated types + -- cannot be IfaceId, IfaceAxiom or IfacePatSyn + binders = case decl of + IfaceFamily {ifBinders} -> ifBinders + IfaceData{ifBinders} -> ifBinders + IfaceSynonym{ifBinders} -> ifBinders + IfaceClass{ifBinders} -> ifBinders + IfaceId{} -> panic "IfaceId shoudn't be an associated type!" + IfaceAxiom{} -> panic "IfaceAxiom shoudn't be an associated type!" + IfacePatSyn {} -> panic "IfacePatSyn shoudn't be an associated type!" + + suppress_arity = iface_decl_non_generative decl + + suppress_vars = + suppressIfaceInsignificantInvisibles + -- We need to count trailing invisibles for type families + (MkPrintArityInvisibles suppress_arity) + -- But this setting will simply count all invisibles + (PrintExplicitKinds False) + -- ...and associated types can't have RHS + mempty + +-- See Note [Print invisible binders in interface declarations] +-- in particular parts about collecting visible occurences +iface_decl_mentioned_vars :: IfaceDecl -> Set.Set IfLclName +iface_decl_mentioned_vars (IfaceData { ifCons = condecls, ifGadtSyntax = gadt }) + | gadt = mempty + -- Get visible occurences in each constructor in each alternative + | otherwise = Set.unions (map mentioned_con_vars cons) + where + mentioned_con_vars = Set.unions . map (visibleTypeVarOccurencies . snd) . ifConArgTys + cons = visibleIfConDecls condecls + +iface_decl_mentioned_vars (IfaceClass { ifFDs = fds, ifBody = IfAbstractClass }) + = Set.unions (map fundep_names fds) + where + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars + (IfaceClass { ifFDs = fds + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs + }}) + = Set.unions + [ Set.unions (map fundep_names fds) + , Set.unions (map iface_at_mentioned_vars ats) + , Set.unions (map (visibleTypeVarOccurencies . class_op_type) sigs) + ] + where + class_op_type (IfaceClassOp _bndr ty _default) = ty + + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars (IfaceSynonym {ifSynRhs = poly_ty}) + = visibleTypeVarOccurencies poly_ty + +iface_decl_mentioned_vars (IfaceFamily { ifBinders = binders, ifResVar = res_var, ifFamInj = inj }) + | Just{} <- res_var + , Injective injectivity <- inj + = Set.fromList . map (ifTyConBinderName . snd) . filter fst $ zip injectivity binders + | otherwise = mempty + +iface_decl_mentioned_vars IfacePatSyn{} = mempty +iface_decl_mentioned_vars IfaceId{} = mempty +iface_decl_mentioned_vars IfaceAxiom{} = mempty + pprIfaceDecl :: ShowSub -> IfaceDecl -> SDoc -- NB: pprIfaceDecl is also used for pretty-printing TyThings in GHCi -- See Note [Pretty printing via Iface syntax] in GHC.Types.TyThing.Ppr -pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, - ifCtxt = context, ifResKind = kind, - ifRoles = roles, ifCons = condecls, - ifParent = parent, - ifGadtSyntax = gadt, - ifBinders = binders }) +pprIfaceDecl ss decl@(IfaceData { ifName = tycon, ifCType = ctype, + ifCtxt = context, ifResKind = kind, + ifRoles = roles, ifCons = condecls, + ifParent = parent, + ifGadtSyntax = gadt, + ifBinders = binders }) | gadt = vcat [ pp_roles , pp_ki_sig @@ -946,8 +1099,10 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_kind = ppUnless (ki_sig_printable || isIfaceLiftedTypeKind kind) (dcolon <+> ppr kind) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss tycon binders + pp_lhs = case parent of - IfNoParent -> pprIfaceDeclHead suppress_bndr_sig context ss tycon binders + IfNoParent -> decl_head IfDataInstance{} -> text "instance" <+> pp_data_inst_forall <+> pprIfaceTyConParent parent @@ -994,36 +1149,40 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_extra = vcat [pprCType ctype] -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfAbstractClass }) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfAbstractClass }) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig [] ss clas binders <+> pprFundeps fds ] + , text "class" <+> decl_head <+> pprFundeps fds ] where + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss clas binders + -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfConcreteClass { - ifATs = ats, - ifSigs = sigs, - ifClassCtxt = context, - ifMinDef = minDef - }}) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs, + ifClassCtxt = context, + ifMinDef = minDef + }}) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig context ss clas binders <+> pprFundeps fds <+> pp_where + , text "class" <+> decl_head <+> pprFundeps fds <+> pp_where , nest 2 (vcat [ vcat asocs, vcat dsigs , ppShowAllSubs ss (pprMinDef $ fromIfaceBooleanFormula minDef)])] where pp_where = ppShowRhs ss $ ppUnless (null sigs && null ats) (text "where") + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss clas binders + asocs = ppr_trim $ map maybeShowAssoc ats dsigs = ppr_trim $ map maybeShowSig sigs @@ -1055,19 +1214,20 @@ pprIfaceDecl ss (IfaceClass { ifName = clas -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceSynonym { ifName = tc - , ifBinders = binders - , ifSynRhs = mono_ty - , ifResKind = res_kind}) +pprIfaceDecl ss decl@(IfaceSynonym { ifName = tc + , ifBinders = binders + , ifSynRhs = poly_ty + , ifResKind = res_kind}) = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tc binders <+> equals) - 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau - , ppUnless (isIfaceLiftedTypeKind res_kind) (dcolon <+> ppr res_kind) ]) + , hang (text "type" <+> decl_head <+> equals) + 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau ]) ] where - (tvs, theta, tau) = splitIfaceSigmaTy mono_ty + (tvs, theta, tau) = splitIfaceSigmaTy poly_ty name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tc) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tc binders + -- See Note [Printing type abbreviations] in GHC.Iface.Type ppr_tau | tc `hasKey` liftedTypeKindTyConKey || tc `hasKey` unrestrictedFunTyConKey || @@ -1078,20 +1238,18 @@ pprIfaceDecl ss (IfaceSynonym { ifName = tc -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceFamily { ifName = tycon - , ifFamFlav = rhs, ifBinders = binders - , ifResKind = res_kind - , ifResVar = res_var, ifFamInj = inj }) +pprIfaceDecl ss decl@(IfaceFamily { ifName = tycon + , ifFamFlav = rhs, ifBinders = binders + , ifResKind = res_kind + , ifResVar = res_var, ifFamInj = inj }) | IfaceDataFamilyTyCon <- rhs = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , text "data family" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders + , text "data family" <+> decl_head ] | otherwise = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type family" - <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders - <+> pp_inj res_var inj + , hang (text "type family" <+> decl_head <+> pp_inj res_var inj <+> ppShowRhs ss (pp_where rhs)) 2 (ppShowRhs ss (pp_rhs rhs)) $$ @@ -1100,6 +1258,8 @@ pprIfaceDecl ss (IfaceFamily { ifName = tycon where name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tycon) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tycon binders + pp_where (IfaceClosedSynFamilyTyCon {}) = text "where" pp_where _ = empty @@ -1245,16 +1405,24 @@ pprIfaceTyConParent IfNoParent pprIfaceTyConParent (IfDataInstance _ tc tys) = pprIfaceTypeApp topPrec tc tys -pprIfaceDeclHead :: SuppressBndrSig +pprIfaceDeclHead :: IfaceDecl + -> SuppressBndrSig -> IfaceContext -> ShowSub -> Name -> [IfaceTyConBinder] -- of the tycon, for invisible-suppression -> SDoc -pprIfaceDeclHead suppress_sig context ss tc_occ bndrs +pprIfaceDeclHead decl suppress_sig context ss tc_occ bndrs = sdocOption sdocPrintExplicitKinds $ \print_kinds -> sep [ pprIfaceContextArr context , pprPrefixIfDeclBndr (ss_how_much ss) (occName tc_occ) <+> pprIfaceTyConBinders suppress_sig - (suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs bndrs) ] + (suppressIfaceInsignificantInvisibles + (MkPrintArityInvisibles print_arity) + (PrintExplicitKinds print_kinds) + mentioned_vars bndrs) ] + where + -- See Note [Print invisible binders in interface declarations] + mentioned_vars = iface_decl_mentioned_vars decl + print_arity = iface_decl_non_generative decl pprIfaceConDecl :: ShowSub -> Bool -> IfaceTopBndr ===================================== compiler/GHC/Iface/Type.hs ===================================== @@ -44,6 +44,7 @@ module GHC.Iface.Type ( SuppressBndrSig(..), UseBndrParens(..), PrintExplicitKinds(..), + PrintArityInvisibles(..), pprIfaceType, pprParendIfaceType, pprPrecIfaceType, pprIfaceContext, pprIfaceContextArr, pprIfaceIdBndr, pprIfaceLamBndr, pprIfaceTvBndr, pprIfaceTyConBinders, @@ -55,7 +56,8 @@ module GHC.Iface.Type ( pprIfaceCoTcApp, pprTyTcApp, pprIfacePrefixApp, isIfaceRhoType, - suppressIfaceInvisibles, + suppressIfaceInvisibles, suppressIfaceInsignificantInvisibles, + visibleTypeVarOccurencies, stripIfaceInvisVars, stripInvisArgs, @@ -98,6 +100,9 @@ import Data.Word (Word8) import Control.Arrow (first) import Control.DeepSeq import Control.Monad ((<$!>)) +import Data.List (dropWhileEnd) +import qualified Data.List.NonEmpty as NonEmpty +import qualified Data.Set as Set {- ************************************************************************ @@ -619,6 +624,51 @@ suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs | isInvisibleTyConBinder k = suppress ks xs | otherwise = x : suppress ks xs +newtype PrintArityInvisibles = MkPrintArityInvisibles Bool + +-- See Note [Print invisible binders in interface declarations] +-- for the definition what binders are considered insignificant +suppressIfaceInsignificantInvisibles :: PrintArityInvisibles + -> PrintExplicitKinds + -> Set.Set IfLclName + -> [IfaceTyConBinder] + -> [IfaceTyConBinder] +suppressIfaceInsignificantInvisibles _ (PrintExplicitKinds True) _ tys = tys +suppressIfaceInsignificantInvisibles + (MkPrintArityInvisibles arity_invisibles) + (PrintExplicitKinds False) mentioned_vars tys + = suppress tys + where + -- Consider this example: + -- type T :: forall k1 k2. Type + -- type T @a @b = b + -- `@a` is not mentioned on the RHS however we can't just + -- drop it because implicit argument positioning matters. + -- + -- Hence just drop the end + only_mentioned_binders = dropWhileEnd (not . is_binder_mentioned) + + is_binder_mentioned bndr = ifTyConBinderName bndr `Set.member` mentioned_vars + + suppress_invisibles group = + applyWhen invis_group only_mentioned_binders bndrs + where + bndrs = NonEmpty.toList group + invis_group = isInvisibleTyConBinder (NonEmpty.head group) + + suppress_invisible_groups [] = [] + suppress_invisible_groups [group] = + if arity_invisibles + then NonEmpty.toList group -- the last group affects arity + else suppress_invisibles group + suppress_invisible_groups (group : groups) + = suppress_invisibles group ++ suppress_invisible_groups groups + + suppress + = suppress_invisible_groups -- Filter out insignificant invisible binders + . NonEmpty.groupWith isInvisibleTyConBinder -- Find chunks of @-binders + . filterOut isInferredTyConBinder -- We don't want to display @{binders} + stripIfaceInvisVars :: PrintExplicitKinds -> [IfaceTyConBinder] -> [IfaceTyConBinder] stripIfaceInvisVars (PrintExplicitKinds True) tyvars = tyvars stripIfaceInvisVars (PrintExplicitKinds False) tyvars @@ -659,6 +709,29 @@ ifTypeIsVarFree ty = go ty go_args IA_Nil = True go_args (IA_Arg arg _ args) = go arg && go_args args +visibleTypeVarOccurencies :: IfaceType -> Set.Set IfLclName +-- Returns True if the type contains this name. Doesn't count +-- invisible application +-- Just used to control pretty printing +visibleTypeVarOccurencies = go + where + (<>) = Set.union + + go (IfaceTyVar var) = Set.singleton var + go (IfaceFreeTyVar {}) = mempty + go (IfaceAppTy fun args) = go fun <> go_args args + go (IfaceFunTy _ w arg res) = go w <> go arg <> go res + go (IfaceForAllTy bndr ty) = go (ifaceBndrType $ binderVar bndr) <> go ty + go (IfaceTyConApp _ args) = go_args args + go (IfaceTupleTy _ _ args) = go_args args + go (IfaceLitTy _) = mempty + go (IfaceCastTy {}) = mempty -- Safe + go (IfaceCoercionTy {}) = mempty -- Safe + + go_args IA_Nil = mempty + go_args (IA_Arg arg Required args) = go arg <> go_args args + go_args (IA_Arg _arg _ args) = go_args args + {- Note [Substitution on IfaceType] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Substitutions on IfaceType are done only during pretty-printing to ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -33,6 +33,10 @@ Compiler GHCi ~~~~ +- :ghci-cmd:`:info` now outputs type declarations with @-binders that are + considered semantically significant. See documentation about :ghci-cmd:`:info` + itself for more detailed explanation. + Runtime system ~~~~~~~~~~~~~~ ===================================== docs/users_guide/ghci.rst ===================================== @@ -2516,6 +2516,22 @@ commonly used commands. ⟨name⟩ has been loaded from a source file, then GHCi will also display the location of its definition in the source. + GHCi outputs type declarations (type synonyms, newtypes and datatypes, + classes, type and data families) with semantically significant invisible + @-binders. + + An invisible binder is considered significant when it meets at least + one of the following two criteria: + + - It visibly occurs in the declaration's body (See more about that below) + + - It is followed by a significant binder, so it affects positioning + + For non-generative type declaration (type synonyms and type families) + there is one additional criteria: + + - It is not followed by a visible binder, so it affects the arity of a type declaration + For types and classes, GHCi also summarises instances that mention them. To avoid showing irrelevant information, an instance is shown only if (a) its head mentions ⟨name⟩, and (b) all the other things ===================================== testsuite/tests/backpack/should_fail/T19244a.stderr ===================================== @@ -17,7 +17,7 @@ T19244a.bkp:22:9: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/T19244b.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing user - [1 of 2] Compiling Map[sig] ( user\Map.hsig, nothing ) - [2 of 2] Compiling User ( user\User.hs, nothing ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, nothing ) + [2 of 2] Compiling User ( user/User.hs, nothing ) [2 of 3] Processing ordmap Instantiating ordmap - [1 of 1] Compiling Map ( ordmap\Map.hs, T19244b.out\ordmap\Map.o ) + [1 of 1] Compiling Map ( ordmap/Map.hs, T19244b.out/ordmap/Map.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including user[Map=ordmap:Map] Instantiating user[Map=ordmap:Map] - [1 of 2] Compiling Map[sig] ( user\Map.hsig, T19244b.out\user\user-GzloW2NeDdA2M0V8qzN4g2\Map.o ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, T19244b.out/user/user-GzloW2NeDdA2M0V8qzN4g2/Map.o ) T19244b.bkp:11:27: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/bkpfail46.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing p - [1 of 2] Compiling A[sig] ( p\A.hsig, nothing ) - [2 of 2] Compiling M ( p\M.hs, nothing ) + [1 of 2] Compiling A[sig] ( p/A.hsig, nothing ) + [2 of 2] Compiling M ( p/M.hs, nothing ) [2 of 3] Processing q Instantiating q - [1 of 1] Compiling A ( q\A.hs, bkpfail46.out\q\A.o ) + [1 of 1] Compiling A ( q/A.hs, bkpfail46.out/q/A.o ) [3 of 3] Processing r Instantiating r [1 of 1] Including p[A=q:A] Instantiating p[A=q:A] - [1 of 2] Compiling A[sig] ( p\A.hsig, bkpfail46.out\p\p-HVmFlcYSefiK5n1aDP1v7x\A.o ) + [1 of 2] Compiling A[sig] ( p/A.hsig, bkpfail46.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o ) bkpfail46.bkp:16:9: error: [GHC-15843] • Type constructor ‘K’ has conflicting definitions in the module and its hsig file. Main module: type K :: * -> Constraint - type K a = GHC.Classes.Eq a :: Constraint + type K a = GHC.Classes.Eq a Hsig file: type K :: * -> Constraint class K a Illegal parameterized type synonym in implementation of abstract data. ===================================== testsuite/tests/ghci/T18060/T18060.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout ===================================== @@ -74,13 +74,13 @@ data Tuple2# a b = (#,#) a b (# , #) :: a -> b -> Tuple2# a b (Int, Int) :: Tuple2 (*) (*) type T :: Tuple2 (*) (*) -type T = (Int, Int) :: Tuple2 (*) (*) +type T = (Int, Int) -- Defined at :19:1 type S :: Solo (*) -type S = MkSolo Int :: Solo (*) +type S = MkSolo Int -- Defined at :20:1 type L :: List (*) -type L = [Int] :: List (*) +type L = [Int] -- Defined at :21:1 f :: Int -> Tuple2 Int Int -> Int (\ (_, _) -> ()) :: Tuple2 a b -> Unit ===================================== testsuite/tests/ghci/scripts/T15941.stdout ===================================== @@ -1,4 +1,3 @@ type T :: * -> * -> * -type T = - (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} :: * -> * -> * +type T = (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} -- Defined at :2:1 ===================================== testsuite/tests/ghci/scripts/T19310.stdout ===================================== @@ -1,3 +1,3 @@ type T :: * -> * -> * -type T = (->) @{LiftedRep} @{LiftedRep} :: * -> * -> * +type T = (->) @{LiftedRep} @{LiftedRep} -- Defined at :3:1 ===================================== testsuite/tests/ghci/scripts/T21294a.stdout ===================================== @@ -1,5 +1,5 @@ type L0 :: * -> * -type L0 = [] :: * -> * +type L0 = [] -- Defined at :1:1 type L1 :: * -> * type L1 a = [a] ===================================== testsuite/tests/ghci/scripts/T24459.script ===================================== @@ -0,0 +1,250 @@ +:{ +{-# LANGUAGE TypeFamilies, TypeFamilyDependencies, DataKinds, TypeAbstractions, FunctionalDependencies, AllowAmbiguousTypes #-} + +import Data.Kind +import Data.Data + +-- Check that we don't print what don't belong to arity +type T0 :: forall k. k -> Type +type T0 = Proxy :: forall k. k -> Type + +-- ...and that doesn't affected by type signature +type T1 :: forall k. k -> Type +type T1 = Proxy + +-- ...and that we print variables that are belong to arity +type T2 :: forall k. k -> Type +type T2 @k = Proxy + +-- ...but don't print invisibles that don't visibly occur and don't affect arity +type T3 :: forall k. k -> Type +type T3 a = Proxy a + +-- ...and print invisibles that do visibly occur +type T4 :: forall a. Type -> Type +type T4 @a _b = Proxy a + +-- ...one more check that it is not affected by user's input +type T5 :: forall a. Type -> Type +type T5 @a _b = Proxy _b + +-- ...and once again +type T6 :: forall k. Type -> Type +type T6 _a = () + +-- ...now check that we don't mess up with positioning +type T7 :: forall a b c. b -> forall d. Type +type T7 @a @b @c f @d = b + +-- ...and that we count occurences in theta +type T8 :: forall (a :: Constraint). Type -> Type +type T8 @a _ = forall x. a => x + +-- ...and in forall binder signatures +type T9 :: forall (a :: Type). Type -> Type +type T9 @a _ = forall (x :: a). Int + +-- That's all with type synonyms, let's check other sorts of type declarations + +-- Equatuions should not affect invisibles for type families, but arity matters +type TF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +type family TF1 @a @b c @d where + forall b d. TF1 @Type @b Int @d = () + forall a b d. TF1 @a @b (_ :: a) @d = Bool + +-- Injectivity annotations should affect invisibles. Also check that positioning works +type TF2 :: forall (a :: Type) (b :: Type). Type -> forall (d :: Type). Type +type family TF2 @a @b c @d = r | r -> b + +-- Data families are generative and can't have injectivity annotations +-- hence no invisibles should be printed +type DF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +data family DF1 @a @b c @d + +-- Data families are generative, so invisible @b isn't a visible usage +type C1 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C1 @a @b c where + data AD a @b + +-- But type families aren't generative, hense trailing @b occurs visibly +type C2 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C2 @a @b c where + type AF a @b + +-- Check that trailing invisibles are handled properly +type C3 :: forall x. Constraint +class C3 @x where {} + +-- And check that signatures are visible occurences +type C4 :: forall (a :: Type) (b :: Type). Constraint +class C4 @a @b where + x :: a + y :: b + +-- Also check functional dependencies +type C5 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C5 @a @b c | a -> c where {} + +-- GADTs should not have "visible" mentiones of binders at a declaration's head +type D1 :: forall a. Type +data D1 @a where + MkD :: b -> D1 @b + +-- Haskell98-style declarations should work properly +type D2 :: forall a (b :: Type). Type -> forall d. Type +data D2 @a @b c @d = MkD2_1 | MkD2_2 Int b + +-- And now a lot of stuff suggested by @int-index + +data P a b + +type F1 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k1 + +type F2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k2 + +type F3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k3 + +type F4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k4 + +type F5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k5 + +type F6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k6 + +type F1x2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k2) + +type F1x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k3) + +type F1x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k4) + +type F1x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k5) + +type F1x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k6) + +type F2x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k3) + +type F2x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k4) + +type F2x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k5) + +type F2x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k6) + +type F3x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k4) + +type F3x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k5) + +type F3x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k6) + +type F4x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k5) + +type F4x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k6) + +type F5x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k5,k6) + +:} + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 + +:set -fprint-explicit-kinds + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 ===================================== testsuite/tests/ghci/scripts/T24459.stdout ===================================== @@ -0,0 +1,313 @@ +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 a = Proxy a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @a _b = Proxy a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 _b = Proxy _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @a @b f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 c @d where + TF1 Int = () + forall a (_1 :: a) b d. TF1 _1 = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 c + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a c where + type AD :: * -> forall b. * + data family AD a + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a c | a -> c + -- Defined at :86:1 +type D1 :: forall {k} (a :: k). * +data D1 where + MkD :: b -> D1 + -- Defined at :90:1 +type role D2 phantom +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @a @b c = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 a b c d e @k6 = P k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b c d e @k6 = P k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 a b @k3 c d e @k6 = P k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 a b @k3 @k4 c d e @k6 = P k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 a b @k3 @k4 @k5 c d e @k6 = P k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 a b c d e @k6 = P k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b c d e @k6 = P (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 a b @k3 c d e @k6 = P (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 a b @k3 @k4 c d e @k6 = P (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 a b @k3 @k4 @k5 c d e @k6 = P (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 a b c d e @k6 = P (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 c d e @k6 = P (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 c d e @k6 = P (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b c d e @k6 = P (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 a b @k3 @k4 c d e @k6 = P (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 a b @k3 @k4 @k5 c d e @k6 = P (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 a b @k3 c d e @k6 = P (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 a b @k3 @k4 @k5 c d e @k6 = P (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 a b @k3 @k4 c d e @k6 = P (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 a b @k3 @k4 @k5 c d e @k6 = P (k5, k6) + -- Defined at :162:1 +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy @{k} + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 @k a = Proxy @{k} a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @{k} @a _b = Proxy @{k} a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 @{k} @a _b = Proxy @{*} _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 @{k} @k1 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @{k} @{k1} @{k2} @a @b @c f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 @a @b c @d where + TF1 @(*) @b Int @d = () + forall a (_1 :: a) b d. TF1 @a @b _1 @d = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 @a @b c @d + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a @b c where + type AD :: * -> forall b. * + data family AD a @b + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 @{k} @x + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a @b c | a -> c + -- Defined at :86:1 +type role D1 nominal nominal +type D1 :: forall {k} (a :: k). * +data D1 @{k} @a where + MkD :: b -> D1 @{*} @b + -- Defined at :90:1 +type role D2 nominal nominal nominal nominal phantom nominal +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @{k} @{k1} @a @b c @d = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k5, k6) + -- Defined at :162:1 ===================================== testsuite/tests/ghci/scripts/T8535.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/T9181.stdout ===================================== @@ -13,12 +13,10 @@ type (GHC.Internal.Data.Type.Ord.<=) x y = GHC.Internal.TypeError.Assert (x GHC.Internal.Data.Type.Ord.<=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) - :: Constraint type (GHC.Internal.Data.Type.Ord.<=?) :: forall k. k -> k -> Bool type (GHC.Internal.Data.Type.Ord.<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) True True False - :: Bool type GHC.Internal.TypeLits.AppendSymbol :: GHC.Types.Symbol -> GHC.Types.Symbol -> GHC.Types.Symbol type family GHC.Internal.TypeLits.AppendSymbol a b ===================================== testsuite/tests/ghci/scripts/all.T ===================================== @@ -385,3 +385,4 @@ test('T23686', normal, ghci_script, ['T23686.script']) test('T13869', extra_files(['T13869a.hs', 'T13869b.hs']), ghci_script, ['T13869.script']) test('ListTuplePunsPpr', normal, ghci_script, ['ListTuplePunsPpr.script']) test('ListTuplePunsPprNoAbbrevTuple', [expect_broken(23135), limit_stdout_lines(13)], ghci_script, ['ListTuplePunsPprNoAbbrevTuple.script']) +test('T24459', normal, ghci_script, ['T24459.script']) ===================================== testsuite/tests/ghci/scripts/ghci020.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T10145.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T18594.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5406,7 +5406,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5533,7 +5533,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5608,7 +5608,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5616,7 +5616,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5662,7 +5662,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7397,7 +7397,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7407,7 +7407,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7429,7 +7429,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7454,14 +7454,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7478,24 +7478,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8583,7 +8583,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9357,7 +9357,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9418,7 +9418,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9573,9 +9573,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9692,9 +9692,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) @@ -4341,7 +4341,7 @@ module GHC.PrimOps where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -4468,7 +4468,7 @@ module GHC.PrimOps where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -4543,7 +4543,7 @@ module GHC.PrimOps where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -4551,7 +4551,7 @@ module GHC.PrimOps where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -4597,7 +4597,7 @@ module GHC.PrimOps where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -6329,9 +6329,9 @@ module Prelude.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -8960,11 +8960,11 @@ module Prelude.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) ===================================== testsuite/tests/interface-stability/template-haskell-exports.stdout ===================================== @@ -31,7 +31,7 @@ module Language.Haskell.TH where type Code :: (* -> *) -> forall (r :: GHC.Types.RuntimeRep). TYPE r -> * newtype Code m a = Code {examineCode :: m (TExp a)} type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = Code Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = Code Q type Con :: * data Con = NormalC Name [BangType] | RecC Name [VarBangType] | InfixC BangType Name BangType | ForallC [TyVarBndr Specificity] Cxt Con | GadtC [Name] [BangType] Type | RecGadtC [Name] [VarBangType] Type type ConQ :: * @@ -881,7 +881,7 @@ module Language.Haskell.TH.Lib where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * @@ -1220,7 +1220,7 @@ module Language.Haskell.TH.Lib.Internal where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * ===================================== testsuite/tests/rep-poly/RepPolyBackpack3.stderr ===================================== @@ -1,19 +1,19 @@ [1 of 3] Processing sig - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, nothing ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, nothing ) [2 of 3] Processing impl Instantiating impl - [1 of 1] Compiling Impl ( impl\Impl.hs, RepPolyBackpack3.out\impl\Impl.o ) + [1 of 1] Compiling Impl ( impl/Impl.hs, RepPolyBackpack3.out/impl/Impl.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including sig[Sig=impl:Impl] Instantiating sig[Sig=impl:Impl] - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, RepPolyBackpack3.out\sig\sig-Absk5cIXTXe6UYhGMYGber\Sig.o ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, RepPolyBackpack3.out/sig/sig-Absk5cIXTXe6UYhGMYGber/Sig.o ) RepPolyBackpack3.bkp:17:5: error: [GHC-15843] • Type constructor ‘Rep’ has conflicting definitions in the module and its hsig file. Main module: type Rep :: GHC.Types.RuntimeRep - type Rep = T :: GHC.Types.RuntimeRep + type Rep = T Hsig file: type Rep :: GHC.Types.RuntimeRep data Rep Illegal implementation of abstract data: Invalid type family ‘T’. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/eb0131c16679a02762899735da44c0519eb81620 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/eb0131c16679a02762899735da44c0519eb81620 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 19:43:58 2024 From: gitlab at gitlab.haskell.org (Serge S. Gulin (@gulin.serge)) Date: Sat, 07 Dec 2024 14:43:58 -0500 Subject: [Git][ghc/ghc][wip/T24744] 35 commits: ghc-experimental: expose GHC.RTS.Flags, GHC.Stats Message-ID: <6754a57e5daf8_b16ee21c410167f3@gitlab.mail> Serge S. Gulin pushed to branch wip/T24744 at Glasgow Haskell Compiler / GHC Commits: 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 88b9c6dc by Serge S. Gulin at 2024-12-07T22:27:37+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - dd021c5f by Serge S. Gulin at 2024-12-07T22:27:37+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b333788e by Serge S. Gulin at 2024-12-07T22:27:37+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - 30 changed files: - .gitlab-ci.yml - .gitlab/ci.sh - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/StgToJS/Apply.hs - compiler/GHC/StgToJS/Arg.hs - compiler/GHC/StgToJS/CodeGen.hs - compiler/GHC/StgToJS/Expr.hs - compiler/GHC/StgToJS/Ids.hs - compiler/GHC/StgToJS/Linker/Linker.hs - compiler/GHC/StgToJS/Monad.hs - compiler/GHC/StgToJS/Object.hs - compiler/GHC/StgToJS/Symbols.hs - compiler/GHC/StgToJS/Types.hs - compiler/GHC/SysTools/Process.hs - compiler/GHC/Tc/Errors/Ppr.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Tc/Gen/Bind.hs - compiler/GHC/Types/Error/Codes.hs - compiler/GHC/Unit/Module/Graph.hs - compiler/GHC/Unit/Module/ModSummary.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a420e23fbc4874e8dadd7794d7163a2c89a1e442...b333788e516103be5863461fa0ca5008dc7a9287 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a420e23fbc4874e8dadd7794d7163a2c89a1e442...b333788e516103be5863461fa0ca5008dc7a9287 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 20:01:12 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Sat, 07 Dec 2024 15:01:12 -0500 Subject: [Git][ghc/ghc][wip/bco-name] rts: Annotate BCOs with their Name Message-ID: <6754a988950a_b16ee21c3c01916b@gitlab.mail> Ben Gamari pushed to branch wip/bco-name at Glasgow Haskell Compiler / GHC Commits: 8ab2c97a by Ben Gamari at 2024-12-07T15:00:33-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 15 changed files: - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/StgToByteCode.hs - compiler/GHC/Unit/Info.hs - compiler/ghc.cabal.in - docs/users_guide/debugging.rst - hadrian/src/Rules/Rts.hs - rts/Disassembler.c - rts/Interpreter.c - rts/include/rts/Bytecodes.h - rts/rts.cabal - testsuite/tests/th/T10279.hs - testsuite/tests/th/T10279.stderr Changes: ===================================== compiler/GHC/ByteCode/Asm.hs ===================================== @@ -106,7 +106,7 @@ assembleBCOs interp profile proto_bcos tycons top_strs modbreaks spt_entries = d bcos' <- mallocStrings interp bcos return CompiledByteCode { bc_bcos = bcos' - , bc_itbls = itblenv + , bc_itbls = itblenv , bc_ffis = concatMap protoBCOFFIs proto_bcos , bc_strs = top_strs , bc_breaks = modbreaks @@ -178,11 +178,12 @@ assembleOneBCO interp profile pbco = do return ubco' assembleBCO :: Platform -> ProtoBCO Name -> IO UnlinkedBCO -assembleBCO platform (ProtoBCO { protoBCOName = nm - , protoBCOInstrs = instrs - , protoBCOBitmap = bitmap - , protoBCOBitmapSize = bsize - , protoBCOArity = arity }) = do +assembleBCO platform + (ProtoBCO { protoBCOName = nm + , protoBCOInstrs = instrs + , protoBCOBitmap = bitmap + , protoBCOBitmapSize = bsize + , protoBCOArity = arity }) = do -- pass 1: collect up the offsets of the local labels. let asm = mapM_ (assembleI platform) instrs @@ -527,6 +528,10 @@ assembleI platform i = case i of , SmallOp tickx, SmallOp infox , Op np ] +#if MIN_VERSION_rts(1,0,3) + BCO_NAME name -> do np <- lit [BCONPtrStr name] + emit bci_BCO_NAME [Op np] +#endif where literal (LitLabel fs _) = litlabel fs ===================================== compiler/GHC/ByteCode/Instr.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -funbox-strict-fields #-} @@ -27,6 +27,10 @@ import GHC.Runtime.Heap.Layout ( StgWord ) import Data.Int import Data.Word +#if MIN_VERSION_rts(1,0,3) +import Data.ByteString (ByteString) +#endif + import GHC.Stack.CCS (CostCentre) import GHC.Stg.Syntax @@ -229,6 +233,22 @@ data BCInstr !Word16 -- breakpoint info index (RemotePtr CostCentre) +#if MIN_VERSION_rts(1,0,3) + -- | A "meta"-instruction for recording the name of a BCO for debugging purposes. + -- These are ignored by the interpreter but helpfully printed by the disassmbler. + | BCO_NAME !ByteString +#endif + + +{- Note [BCO_NAME] + ~~~~~~~~~~~~~~~ + The BCO_NAME instruction is a debugging-aid enabled with the -fadd-bco-name flag. + When enabled the bytecode assembler will prepend a BCO_NAME instruction to every + generated bytecode object capturing the STG name of the binding the BCO implements. + This is then printed by the bytecode disassembler, allowing bytecode objects to be + readily correlated with their STG and Core source. + -} + -- ----------------------------------------------------------------------------- -- Printing bytecode instructions @@ -383,6 +403,9 @@ instance Outputable BCInstr where <+> text "" <+> ppr tickx <+> text "" <+> ppr infox <+> text "" +#if MIN_VERSION_rts(1,0,3) + ppr (BCO_NAME nm) = text "BCO_NAME" <+> text (show nm) +#endif @@ -487,3 +510,6 @@ bciStackUse SLIDE{} = 0 bciStackUse MKAP{} = 0 bciStackUse MKPAP{} = 0 bciStackUse PACK{} = 1 -- worst case is PACK 0 words +#if MIN_VERSION_rts(1,0,3) +bciStackUse BCO_NAME{} = 0 +#endif ===================================== compiler/GHC/Driver/Flags.hs ===================================== @@ -573,6 +573,7 @@ data GeneralFlag | Opt_DoAsmLinting | Opt_DoAnnotationLinting | Opt_DoBoundsChecking + | Opt_AddBcoName | Opt_NoLlvmMangler -- hidden flag | Opt_FastLlvm -- hidden flag | Opt_NoTypeableBinds ===================================== compiler/GHC/Driver/Session.hs ===================================== @@ -2532,6 +2532,7 @@ fFlagsDeps = [ flagSpec "catch-nonexhaustive-cases" Opt_CatchNonexhaustiveCases, flagSpec "alignment-sanitisation" Opt_AlignmentSanitisation, flagSpec "check-prim-bounds" Opt_DoBoundsChecking, + flagSpec "add-bco-name" Opt_AddBcoName, flagSpec "num-constant-folding" Opt_NumConstantFolding, flagSpec "core-constant-folding" Opt_CoreConstantFolding, flagSpec "fast-pap-calls" Opt_FastPAPCalls, ===================================== compiler/GHC/StgToByteCode.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} @@ -236,7 +236,10 @@ ppBCEnv p -- Create a BCO and do a spot of peephole optimisation on the insns -- at the same time. mkProtoBCO - :: Platform + :: (Outputable name) + => Platform + -> Bool -- ^ True <=> label with @BCO_NAME@ instruction + -- see Note [BCO_NAME] -> name -> BCInstrList -> Either [CgStgAlt] (CgStgRhs) @@ -247,10 +250,10 @@ mkProtoBCO -> Bool -- ^ True <=> is a return point, rather than a function -> [FFIInfo] -> ProtoBCO name -mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis +mkProtoBCO platform _add_bco_name nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis = ProtoBCO { protoBCOName = nm, - protoBCOInstrs = maybe_with_stack_check, + protoBCOInstrs = maybe_add_bco_name $ maybe_add_stack_check peep_d, protoBCOBitmap = bitmap, protoBCOBitmapSize = fromIntegral bitmap_size, protoBCOArity = arity, @@ -258,6 +261,14 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi protoBCOFFIs = ffis } where +#if MIN_VERSION_rts(1,0,3) + maybe_add_bco_name instrs + | _add_bco_name = BCO_NAME str : instrs + where + str = BS.pack $ showSDocOneLine defaultSDocContext (ppr nm) +#endif + maybe_add_bco_name instrs = instrs + -- Overestimate the stack usage (in words) of this BCO, -- and if >= iNTERP_STACK_CHECK_THRESH, add an explicit -- stack check. (The interpreter always does a stack check @@ -265,17 +276,17 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi -- BCO anyway, so we only need to add an explicit one in the -- (hopefully rare) cases when the (overestimated) stack use -- exceeds iNTERP_STACK_CHECK_THRESH. - maybe_with_stack_check - | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = peep_d + maybe_add_stack_check instrs + | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = instrs -- don't do stack checks at return points, -- everything is aggregated up to the top BCO -- (which must be a function). -- That is, unless the stack usage is >= AP_STACK_SPLIM, -- see bug #1466. | stack_usage >= fromIntegral iNTERP_STACK_CHECK_THRESH - = STKCHECK stack_usage : peep_d + = STKCHECK stack_usage : instrs | otherwise - = peep_d -- the supposedly common case + = instrs -- the supposedly common case -- We assume that this sum doesn't wrap stack_usage = sum (map bciStackUse peep_d) @@ -308,6 +319,7 @@ schemeTopBind (id, rhs) | Just data_con <- isDataConWorkId_maybe id, isNullaryRepDataCon data_con = do platform <- profilePlatform <$> getProfile + add_bco_name <- shouldAddBcoName -- Special case for the worker of a nullary data con. -- It'll look like this: Nil = /\a -> Nil a -- If we feed it into schemeR, we'll get @@ -316,7 +328,8 @@ schemeTopBind (id, rhs) -- by just re-using the single top-level definition. So -- for the worker itself, we must allocate it directly. -- ioToBc (putStrLn $ "top level BCO") - emitBc (mkProtoBCO platform (getName id) (toOL [PACK data_con 0, RETURN P]) + emitBc (mkProtoBCO platform add_bco_name + (getName id) (toOL [PACK data_con 0, RETURN P]) (Right rhs) 0 0 [{-no bitmap-}] False{-not alts-}) | otherwise @@ -358,6 +371,7 @@ schemeR_wrk -> BcM (ProtoBCO Name) schemeR_wrk fvs nm original_body (args, body) = do + add_bco_name <- shouldAddBcoName profile <- getProfile let platform = profilePlatform profile @@ -379,7 +393,7 @@ schemeR_wrk fvs nm original_body (args, body) bitmap = mkBitmap platform bits body_code <- schemeER_wrk sum_szsb_args p_init body - emitBc (mkProtoBCO platform nm body_code (Right original_body) + emitBc (mkProtoBCO platform add_bco_name nm body_code (Right original_body) arity bitmap_size bitmap False{-not alts-}) -- | Introduce break instructions for ticked expressions. @@ -1069,9 +1083,10 @@ doCase d s p scrut bndr alts | ubx_tuple_frame = SLIDE 0 2 `consOL` alt_final0 | otherwise = alt_final0 + add_bco_name <- shouldAddBcoName let alt_bco_name = getName bndr - alt_bco = mkProtoBCO platform alt_bco_name alt_final (Left alts) + alt_bco = mkProtoBCO platform add_bco_name alt_bco_name alt_final (Left alts) 0{-no arity-} bitmap_size bitmap True{-is alts-} scrut_code <- schemeE (d + ret_frame_size_b + save_ccs_size_b) (d + ret_frame_size_b + save_ccs_size_b) @@ -1379,7 +1394,7 @@ Note [unboxed tuple bytecodes and tuple_BCO] tupleBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name tupleBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -1398,9 +1413,9 @@ tupleBCO platform args_info args = body_code = mkSlideW 0 1 -- pop frame header `snocOL` RETURN_TUPLE -- and add it again -primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name +primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name primCallBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -2337,6 +2352,9 @@ getHscEnv = BcM $ \st -> return (st, bcm_hsc_env st) getProfile :: BcM Profile getProfile = targetProfile <$> getDynFlags +shouldAddBcoName :: BcM Bool +shouldAddBcoName = gopt Opt_AddBcoName <$> getDynFlags + emitBc :: ([FFIInfo] -> ProtoBCO Name) -> BcM (ProtoBCO Name) emitBc bco = BcM $ \st -> return (st{ffis=[]}, bco (ffis st)) ===================================== compiler/GHC/Unit/Info.hs ===================================== @@ -236,7 +236,7 @@ unitHsLibs namever ways0 p = map (mkDynName . addSuffix . ST.unpack) (unitLibrar -- This change elevates the need to add custom hooks -- and handling specifically for the `rts` package. addSuffix rts@"HSrts" = rts ++ (expandTag rts_tag) - addSuffix rts@"HSrts-1.0.2" = rts ++ (expandTag rts_tag) + addSuffix rts@"HSrts-1.0.3" = rts ++ (expandTag rts_tag) addSuffix other_lib = other_lib ++ (expandTag tag) expandTag t | null t = "" ===================================== compiler/ghc.cabal.in ===================================== @@ -130,6 +130,7 @@ Library exceptions == 0.10.*, semaphore-compat, stm, + rts, ghc-boot == @ProjectVersionMunged@, ghc-heap == @ProjectVersionMunged@, ghci == @ProjectVersionMunged@ ===================================== docs/users_guide/debugging.rst ===================================== @@ -1240,8 +1240,7 @@ Other :type: dynamic :since: 9.8.1 - - default: enabled + :default: enabled At the moment, ghci disables optimizations, because not all passes are compatible with the interpreter. @@ -1254,3 +1253,16 @@ Other expressions. Those cannot be stored in breakpoints, so any free variable that refers to optimized code will not be inspectable when this flag is enabled. + +.. ghc-flag:: -fadd-bco-name + :shortdesc: Add ``BCO_NAME`` instructions in generated bytecode. + :reverse: -fno-add-bco-name + :type: dynamic + + :since: 9.14.1 + + Prefix every generated bytecode object with a ``BCO_NAME`` instruction + containing the STG name of the binding from which the BCO originated. + These are printed by the bytecode disassembler, aiding in correlating + bytecode with STG. + ===================================== hadrian/src/Rules/Rts.hs ===================================== @@ -165,7 +165,7 @@ needRtsSymLinks stage rtsWays prefix, versionlessPrefix :: String versionlessPrefix = "libHSrts" -prefix = versionlessPrefix ++ "-1.0.2" +prefix = versionlessPrefix ++ "-1.0.3" -- removeRtsDummyVersion "a/libHSrts-1.0-ghc1.2.3.4.so" -- == "a/libHSrts-ghc1.2.3.4.so" ===================================== rts/Disassembler.c ===================================== @@ -452,6 +452,13 @@ disInstr ( StgBCO *bco, int pc ) debugBelch("RETURN_T\n "); break; + case bci_BCO_NAME: { + const char *name = (const char*) literals[instrs[pc]]; + debugBelch("BCO_NAME \"%s\"\n ", name); + pc += 1; + break; + } + default: barf("disInstr: unknown opcode %u", (unsigned int) instr); } @@ -464,10 +471,9 @@ void disassemble( StgBCO *bco ) StgWord16* instrs = (StgWord16*)(bco->instrs->payload); StgMutArrPtrs* ptrs = bco->ptrs; uint32_t nbcs = (uint32_t)(bco->instrs->bytes / sizeof(StgWord16)); - uint32_t pc = 1; + uint32_t pc = 0; debugBelch("BCO\n" ); - pc = 0; while (pc < nbcs) { debugBelch("\t%2d: ", pc ); pc = disInstr ( bco, pc ); ===================================== rts/Interpreter.c ===================================== @@ -2087,6 +2087,10 @@ run_BCO: goto do_return_nonpointer; } + case bci_BCO_NAME: + bciPtr++; + goto nextInsn; + case bci_SWIZZLE: { W_ stkoff = BCO_GET_LARGE_ARG; StgInt n = BCO_GET_LARGE_ARG; ===================================== rts/include/rts/Bytecodes.h ===================================== @@ -112,6 +112,8 @@ #define bci_PRIMCALL 87 +#define bci_BCO_NAME 88 + /* If you need to go past 255 then you will run into the flags */ /* If you need to go below 0x0100 then you will run into the instructions */ ===================================== rts/rts.cabal ===================================== @@ -1,6 +1,6 @@ cabal-version: 3.0 name: rts -version: 1.0.2 +version: 1.0.3 synopsis: The GHC runtime system description: The GHC runtime system. ===================================== testsuite/tests/th/T10279.hs ===================================== @@ -7,4 +7,4 @@ import Language.Haskell.TH.Syntax -- error message doesn't recognize it as a source package ID, -- (This is OK, since it will look obviously wrong when they -- try to find the package in their package database.) -blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) +blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) ===================================== testsuite/tests/th/T10279.stderr ===================================== @@ -1,11 +1,11 @@ T10279.hs:10:9: error: [GHC-51294] • Failed to load interface for ‘A’. - no unit id matching ‘rts-1.0.2’ was found + no unit id matching ‘rts-1.0.3’ was found (This unit ID looks like the source package ID; the real unit ID is ‘rts’) • In the untyped splice: $(conE (Name (mkOccName "Foo") - (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) + (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8ab2c97af3fcb19a7754786d0fa93a63f9ad7b96 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8ab2c97af3fcb19a7754786d0fa93a63f9ad7b96 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 7 23:19:17 2024 From: gitlab at gitlab.haskell.org (Brandon Chinn (@brandonchinn178)) Date: Sat, 07 Dec 2024 18:19:17 -0500 Subject: [Git][ghc/ghc][wip/T25530] 22 commits: Remove TcRnDeprecatedInvisTyArgInConPat mechanism Message-ID: <6754d7f575582_b16ee11a914423758@gitlab.mail> Brandon Chinn pushed to branch wip/T25530 at Glasgow Haskell Compiler / GHC Commits: 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - c1db79cd by Brandon Chinn at 2024-12-07T15:18:59-08:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 7eff737d by Brandon Chinn at 2024-12-07T15:18:59-08:00 Add test case for unterminated multiline string - - - - - 30 changed files: - compiler/GHC.hs - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Parser/Lexer.x - compiler/GHC/Rename/Pat.hs - compiler/GHC/SysTools/Process.hs - compiler/GHC/Tc/Errors/Ppr.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Types/Error/Codes.hs - compiler/GHC/Unit/Module/Graph.hs - compiler/GHC/Unit/Module/ModSummary.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/primitives.rst - docs/users_guide/exts/rewrite_rules.rst - docs/users_guide/exts/stolen_syntax.rst - docs/users_guide/exts/strict.rst - docs/users_guide/runtime_control.rst - docs/users_guide/using-warnings.rst - docs/users_guide/using.rst - hadrian/src/Hadrian/Utilities.hs - hadrian/src/Rules/CabalReinstall.hs - hadrian/src/Rules/Test.hs - hadrian/src/Settings/Builders/Cabal.hs - hadrian/src/Settings/Builders/Ghc.hs - libraries/base/base.cabal.in - libraries/base/changelog.md The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f61d6f250105c162e40c4555b0d4c43ab7408ed4...7eff737df8b63638529bdbb4da98f8b4f6eb3b37 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f61d6f250105c162e40c4555b0d4c43ab7408ed4...7eff737df8b63638529bdbb4da98f8b4f6eb3b37 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 8 01:29:57 2024 From: gitlab at gitlab.haskell.org (Brandon Chinn (@brandonchinn178)) Date: Sat, 07 Dec 2024 20:29:57 -0500 Subject: [Git][ghc/ghc][wip/interpolated-strings] 60 commits: gitlab-ci: Bump ci-images Message-ID: <6754f69568edd_b16ee1cb3f30297c9@gitlab.mail> Brandon Chinn pushed to branch wip/interpolated-strings at Glasgow Haskell Compiler / GHC Commits: 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 07659861 by Brandon Chinn at 2024-12-07T17:29:39-08:00 Unify ITstring + ITstringMulti - - - - - c942afa9 by Brandon Chinn at 2024-12-07T17:29:48-08:00 Unify HsString + HsMultilineString - - - - - 0444e794 by Brandon Chinn at 2024-12-07T17:29:48-08:00 Move multiline string processing functions to top-level - - - - - 390d6947 by Brandon Chinn at 2024-12-07T17:29:48-08:00 Always use processCharsSingle to get StringLexError - - - - - 6a45e95d by Brandon Chinn at 2024-12-07T17:29:48-08:00 Implement interpolated strings - - - - - 30 changed files: - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Backpack.hs - compiler/GHC/Driver/Config/Parser.hs - compiler/GHC/Driver/DynFlags.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/Pipeline/Execute.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Hs/Expr.hs - compiler/GHC/Hs/Lit.hs - compiler/GHC/Hs/Syn/Type.hs - compiler/GHC/Hs/Utils.hs - compiler/GHC/HsToCore/Match/Literal.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Linker/Loader.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/HaddockLex.x - compiler/GHC/Parser/Header.hs - compiler/GHC/Parser/Lexer.x The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f7cdd5a88193dee78d9603217645f99ff8be9727...6a45e95ddc5b2535bf0e7b85f4c44f30b5f9a0ca -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f7cdd5a88193dee78d9603217645f99ff8be9727...6a45e95ddc5b2535bf0e7b85f4c44f30b5f9a0ca You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 8 01:35:33 2024 From: gitlab at gitlab.haskell.org (Brandon Chinn (@brandonchinn178)) Date: Sat, 07 Dec 2024 20:35:33 -0500 Subject: [Git][ghc/ghc][wip/interpolated-strings] 5 commits: Unify ITstring + ITstringMulti Message-ID: <6754f7e551447_b16ee1ddb32c29989@gitlab.mail> Brandon Chinn pushed to branch wip/interpolated-strings at Glasgow Haskell Compiler / GHC Commits: 15518abc by Brandon Chinn at 2024-12-07T17:34:40-08:00 Unify ITstring + ITstringMulti - - - - - c7f8b397 by Brandon Chinn at 2024-12-07T17:34:41-08:00 Unify HsString + HsMultilineString - - - - - 4fdd42d0 by Brandon Chinn at 2024-12-07T17:34:41-08:00 Move multiline string processing functions to top-level - - - - - 495aef26 by Brandon Chinn at 2024-12-07T17:34:41-08:00 Always use processCharsSingle to get StringLexError - - - - - f560c8b4 by Brandon Chinn at 2024-12-07T17:34:58-08:00 Implement interpolated strings - - - - - 18 changed files: - compiler/GHC/Hs/Expr.hs - compiler/GHC/Hs/Lit.hs - compiler/GHC/Hs/Syn/Type.hs - compiler/GHC/Hs/Utils.hs - compiler/GHC/HsToCore/Match/Literal.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/Lexer.x - compiler/GHC/Parser/String.hs - compiler/GHC/Rename/Expr.hs - compiler/GHC/Tc/Gen/HsType.hs - compiler/GHC/Tc/Utils/TcMType.hs - compiler/GHC/ThToHs.hs - compiler/Language/Haskell/Syntax/Expr.hs - compiler/Language/Haskell/Syntax/Extension.hs - compiler/Language/Haskell/Syntax/Lit.hs - utils/check-exact/ExactPrint.hs - utils/haddock/haddock-api/src/Haddock/Backends/Hyperlinker/Parser.hs Changes: ===================================== compiler/GHC/Hs/Expr.hs ===================================== @@ -130,7 +130,7 @@ data SyntaxExprTc = SyntaxExprTc { syn_expr :: HsExpr GhcTc -- | This is used for rebindable-syntax pieces that are too polymorphic -- for tcSyntaxOp (trS_fmap and the mzip in ParStmt) noExpr :: HsExpr (GhcPass p) -noExpr = HsLit noExtField (HsString (SourceText $ fsLit "noExpr") (fsLit "noExpr")) +noExpr = HsLit noExtField (HsString (SourceText $ fsLit "noExpr") HsStringTypeSingle (fsLit "noExpr")) noSyntaxExpr :: forall p. IsPass p => SyntaxExpr (GhcPass p) -- Before renaming, and sometimes after @@ -254,6 +254,9 @@ type instance XIPVar GhcRn = NoExtField type instance XIPVar GhcTc = DataConCantHappen type instance XOverLitE (GhcPass _) = NoExtField type instance XLitE (GhcPass _) = NoExtField +type instance XInterString (GhcPass _) = [SourceText] +type instance XInterStringRaw (GhcPass _) = NoExtField +type instance XInterStringExp (GhcPass _) = NoExtField type instance XLam (GhcPass _) = EpAnnLam type instance XApp (GhcPass _) = NoExtField ===================================== compiler/GHC/Hs/Lit.hs ===================================== @@ -49,7 +49,6 @@ import Language.Haskell.Syntax.Lit type instance XHsChar (GhcPass _) = SourceText type instance XHsCharPrim (GhcPass _) = SourceText type instance XHsString (GhcPass _) = SourceText -type instance XHsMultilineString (GhcPass _) = SourceText type instance XHsStringPrim (GhcPass _) = SourceText type instance XHsInt (GhcPass _) = NoExtField type instance XHsIntPrim (GhcPass _) = SourceText @@ -151,7 +150,6 @@ hsLitNeedsParens p = go go (HsChar {}) = False go (HsCharPrim {}) = False go (HsString {}) = False - go (HsMultilineString {}) = False go (HsStringPrim {}) = False go (HsInt _ x) = p > topPrec && il_neg x go (HsFloatPrim {}) = False @@ -180,8 +178,7 @@ hsLitNeedsParens p = go convertLit :: XXLit (GhcPass p)~DataConCantHappen => HsLit (GhcPass p) -> HsLit (GhcPass p') convertLit (HsChar a x) = HsChar a x convertLit (HsCharPrim a x) = HsCharPrim a x -convertLit (HsString a x) = HsString a x -convertLit (HsMultilineString a x) = HsMultilineString a x +convertLit (HsString a ty x) = HsString a ty x convertLit (HsStringPrim a x) = HsStringPrim a x convertLit (HsInt a x) = HsInt a x convertLit (HsIntPrim a x) = HsIntPrim a x @@ -216,11 +213,11 @@ Equivalently it's True if instance IsPass p => Outputable (HsLit (GhcPass p)) where ppr (HsChar st c) = pprWithSourceText st (pprHsChar c) ppr (HsCharPrim st c) = pprWithSourceText st (pprPrimChar c) - ppr (HsString st s) = pprWithSourceText st (pprHsString s) - ppr (HsMultilineString st s) = - case st of - NoSourceText -> pprHsString s - SourceText src -> vcat $ map text $ split '\n' (unpackFS src) + ppr (HsString st ty s) = + case (ty, st) of + (HsStringTypeSingle, _) -> pprWithSourceText st (pprHsString s) + (HsStringTypeMulti, NoSourceText) -> pprHsString s + (HsStringTypeMulti, SourceText src) -> vcat $ map text $ split '\n' (unpackFS src) ppr (HsStringPrim st s) = pprWithSourceText st (pprHsBytes s) ppr (HsInt _ i) = pprWithSourceText (il_text i) (integer (il_value i)) @@ -261,8 +258,7 @@ instance Outputable OverLitVal where pmPprHsLit :: forall p. IsPass p => HsLit (GhcPass p) -> SDoc pmPprHsLit (HsChar _ c) = pprHsChar c pmPprHsLit (HsCharPrim _ c) = pprHsChar c -pmPprHsLit (HsString st s) = pprWithSourceText st (pprHsString s) -pmPprHsLit (HsMultilineString st s) = pprWithSourceText st (pprHsString s) +pmPprHsLit (HsString st _ s) = pprWithSourceText st (pprHsString s) pmPprHsLit (HsStringPrim _ s) = pprHsBytes s pmPprHsLit (HsInt _ i) = integer (il_value i) pmPprHsLit (HsIntPrim _ i) = integer i ===================================== compiler/GHC/Hs/Syn/Type.hs ===================================== @@ -74,8 +74,7 @@ hsPatType (SplicePat v _) = dataConCantHappen v hsLitType :: forall p. IsPass p => HsLit (GhcPass p) -> Type hsLitType (HsChar _ _) = charTy hsLitType (HsCharPrim _ _) = charPrimTy -hsLitType (HsString _ _) = stringTy -hsLitType (HsMultilineString _ _) = stringTy +hsLitType (HsString _ _ _) = stringTy hsLitType (HsStringPrim _ _) = addrPrimTy hsLitType (HsInt _ _) = intTy hsLitType (HsIntPrim _ _) = intPrimTy ===================================== compiler/GHC/Hs/Utils.hs ===================================== @@ -478,10 +478,10 @@ mkHsOpApp :: LHsExpr GhcPs -> IdP GhcPs -> LHsExpr GhcPs -> HsExpr GhcPs mkHsOpApp e1 op e2 = OpApp noExtField e1 (noLocA (HsVar noExtField (noLocA op))) e2 mkHsString :: String -> HsLit (GhcPass p) -mkHsString s = HsString NoSourceText (mkFastString s) +mkHsString s = HsString NoSourceText HsStringTypeSingle (mkFastString s) mkHsStringFS :: FastString -> HsLit (GhcPass p) -mkHsStringFS s = HsString NoSourceText s +mkHsStringFS s = HsString NoSourceText HsStringTypeSingle s mkHsStringPrimLit :: FastString -> HsLit (GhcPass p) mkHsStringPrimLit fs = HsStringPrim NoSourceText (bytesFS fs) ===================================== compiler/GHC/HsToCore/Match/Literal.hs ===================================== @@ -121,7 +121,6 @@ dsLit l = do HsDoublePrim _ fl -> return (Lit (LitDouble (rationalFromFractionalLit fl))) HsChar _ c -> return (mkCharExpr c) HsString _ str -> mkStringExprFS str - HsMultilineString _ str -> mkStringExprFS str HsInt _ i -> return (mkIntExpr platform (il_value i)) XLit x -> case ghcPass @p of GhcTc -> case x of @@ -467,7 +466,6 @@ getSimpleIntegralLit (XLit (HsInteger _ i ty)) = Just (i, ty) getSimpleIntegralLit HsChar{} = Nothing getSimpleIntegralLit HsCharPrim{} = Nothing getSimpleIntegralLit HsString{} = Nothing -getSimpleIntegralLit HsMultilineString{} = Nothing getSimpleIntegralLit HsStringPrim{} = Nothing getSimpleIntegralLit (XLit (HsRat{})) = Nothing getSimpleIntegralLit HsFloatPrim{} = Nothing ===================================== compiler/GHC/HsToCore/Quote.hs ===================================== @@ -3040,8 +3040,7 @@ repLiteral lit HsDoublePrim _ _ -> Just doublePrimLName HsChar _ _ -> Just charLName HsCharPrim _ _ -> Just charPrimLName - HsString _ _ -> Just stringLName - HsMultilineString _ _ -> Just stringLName + HsString _ _ _ -> Just stringLName _ -> Nothing mk_integer :: Integer -> MetaM (HsLit GhcTc) ===================================== compiler/GHC/Parser.y ===================================== @@ -88,6 +88,7 @@ import GHC.Parser.HaddockLex import GHC.Parser.Annotation import GHC.Parser.Errors.Types import GHC.Parser.Errors.Ppr () +import GHC.Parser.String (StringType(..)) import GHC.Builtin.Types ( unitTyCon, unitDataCon, sumTyCon, tupleTyCon, tupleDataCon, nilDataCon, @@ -727,8 +728,15 @@ are the most common patterns, rewritten as regular expressions for clarity: LABELVARID { L _ (ITlabelvarid _ _) } CHAR { L _ (ITchar _ _) } - STRING { L _ (ITstring _ _) } - STRING_MULTI { L _ (ITstringMulti _ _) } + STRING { L _ (ITstring _ StringTypeSingle _) } + STRING_MULTI { L _ (ITstring _ StringTypeMulti _) } + STRING_INTER_BEGIN { L _ (ITstringInterBegin StringTypeSingle) } + STRING_INTER_END { L _ (ITstringInterEnd StringTypeSingle) } + STRING_INTER_MULTI_BEGIN { L _ (ITstringInterBegin StringTypeMulti) } + STRING_INTER_MULTI_END { L _ (ITstringInterEnd StringTypeMulti) } + STRING_INTER_RAW { L _ (ITstringInterRaw _ _) } + STRING_INTER_EXP_OPEN { L _ ITstringInterExpOpen } + STRING_INTER_EXP_CLOSE { L _ ITstringInterExpClose } INTEGER { L _ (ITinteger _) } RATIONAL { L _ (ITrational _) } @@ -3113,6 +3121,7 @@ aexp2 :: { ECP } -- into HsOverLit when -XOverloadedStrings is on. -- | STRING { sL (getLoc $1) (HsOverLit $! mkHsIsString (getSTRINGs $1) -- (getSTRING $1) noExtField) } + | stringInter { ecpFromExp $1 } | INTEGER { ECP $ mkHsOverLitPV (sL1a $1 $ mkHsIntegral (getINTEGER $1)) } | RATIONAL { ECP $ mkHsOverLitPV (sL1a $1 $ mkHsFractional (getRATIONAL $1)) } @@ -3707,6 +3716,22 @@ ipvar :: { Located HsIPName } overloaded_label :: { Located (SourceText, FastString) } : LABELVARID { sL1 $1 (getLABELVARIDs $1, getLABELVARID $1) } +----------------------------------------------------------------------------- +-- Interpolated strings +-- See Note [Interpolated strings] in GHC.Parser.String + +stringInter :: { LHsExpr GhcPs } + : STRING_INTER_BEGIN stringInterParts STRING_INTER_END { processStringInter StringTypeSingle $1 $2 $3 } + | STRING_INTER_MULTI_BEGIN stringInterParts STRING_INTER_MULTI_END { processStringInter StringTypeMulti $1 $2 $3 } + +stringInterParts :: { [Either (SourceText, RawLexedString) (LHsExpr GhcPs)] } + : stringInterPart { [$1] } + | stringInterPart stringInterParts { $1 : $2 } + +stringInterPart :: { Either (SourceText, RawLexedString) (LHsExpr GhcPs) } + : STRING_INTER_RAW { Left (getStringInterRaw $1) } + | STRING_INTER_EXP_OPEN exp STRING_INTER_EXP_CLOSE { Right $2 } + ----------------------------------------------------------------------------- -- Warnings and deprecations @@ -4076,8 +4101,10 @@ consym :: { LocatedN RdrName } literal :: { Located (HsLit GhcPs) } : CHAR { sL1 $1 $ HsChar (getCHARs $1) $ getCHAR $1 } | STRING { sL1 $1 $ HsString (getSTRINGs $1) + HsStringTypeSingle $ getSTRING $1 } - | STRING_MULTI { sL1 $1 $ HsMultilineString (getSTRINGMULTIs $1) + | STRING_MULTI { sL1 $1 $ HsString (getSTRINGMULTIs $1) + HsStringTypeMulti $ getSTRINGMULTI $1 } | PRIMINTEGER { sL1 $1 $ HsIntPrim (getPRIMINTEGERs $1) $ getPRIMINTEGER $1 } @@ -4183,8 +4210,8 @@ getQCONSYM (L _ (ITqconsym x)) = x getIPDUPVARID (L _ (ITdupipvarid x)) = x getLABELVARID (L _ (ITlabelvarid _ x)) = x getCHAR (L _ (ITchar _ x)) = x -getSTRING (L _ (ITstring _ x)) = x -getSTRINGMULTI (L _ (ITstringMulti _ x)) = x +getSTRING (L _ (ITstring _ StringTypeSingle x)) = x +getSTRINGMULTI (L _ (ITstring _ StringTypeMulti x)) = x getINTEGER (L _ (ITinteger x)) = x getRATIONAL (L _ (ITrational x)) = x getPRIMCHAR (L _ (ITprimchar _ x)) = x @@ -4209,8 +4236,8 @@ getVOCURLY (L (RealSrcSpan l _) ITvocurly) = srcSpanStartCol l getINTEGERs (L _ (ITinteger (IL src _ _))) = src getCHARs (L _ (ITchar src _)) = src -getSTRINGs (L _ (ITstring src _)) = src -getSTRINGMULTIs (L _ (ITstringMulti src _)) = src +getSTRINGs (L _ (ITstring src StringTypeSingle _)) = src +getSTRINGMULTIs (L _ (ITstring src StringTypeMulti _)) = src getPRIMCHARs (L _ (ITprimchar src _)) = src getPRIMSTRINGs (L _ (ITprimstring src _)) = src getPRIMINTEGERs (L _ (ITprimint src _)) = src @@ -4281,6 +4308,49 @@ getSCC lt = do let s = getSTRING lt stringLiteralToHsDocWst :: Located StringLiteral -> LocatedE (WithHsDocIdentifiers StringLiteral GhcPs) stringLiteralToHsDocWst sl = reLoc $ lexStringLiteral parseIdentifier sl +getStringInterRaw :: Located Token -> (SourceText, RawLexedString) +getStringInterRaw (L _ (ITstringInterRaw src s)) = (src, s) + +processStringInter :: + StringType + -> Located Token + -> Located Token + -> [Either (SourceText, RawLexedString) (LHsExpr GhcPs)] + -> LHsExpr GhcPs +processStringInter strType tokBegin tokEnd rawParts = + L (comb2 tokBegin tokEnd) $ + HsInterString srcTexts strType $ processParts parts + where + -- Extract out the SourceText from the list of Eithers + srcTexts = [src | Left (src, _) <- rawParts] + parts = map (first snd) rawParts + + processParts = + case strType of + StringTypeSingle -> map (first (fsLit . fromRawLexedStringSingle)) + StringTypeMulti -> map (first fsLit) . fromAlt . fromRawLexedStringMulti . toAlt + + toAlt :: Monoid s => [Either s x] -> (s, [(x, s)]) + toAlt = + let go = \case + [] -> (mempty, []) + Left s : [] -> (s, []) + Left s1 : Left s2 : rest -> go $ Left (s1 <> s2) : rest + Left s : Right x : rest -> + let (s', rest') = go rest + in (s, (x, s') : rest') + Right x : rest -> + let (s, rest') = go rest + in (mempty, (x, s) : rest') + in go + + fromAlt :: Foldable s => (s, [(x, s)]) -> [Either s x] + fromAlt (s, xs) = + let notEmpty = \case + Left s -> null s + Right _ -> True + in filter notEmpty $ Left s : concatMap (\(x, s') -> [Right x, Left s']) xs + -- Utilities for combining source spans comb2 :: (HasLoc a, HasLoc b) => a -> b -> SrcSpan comb2 !a !b = combineHasLocs a b ===================================== compiler/GHC/Parser/Lexer.x ===================================== @@ -170,7 +170,7 @@ $idchar = [$small $large $digit $uniidchar \'] $unigraphic = \x06 -- Trick Alex into handling Unicode. See Note [Unicode in Alex]. $graphic = [$small $large $symbol $digit $idchar $special $unigraphic \"\'] -$charesc = [a b f n r t v \\ \" \' \&] +$charesc = [a b f n r t v \\ \" \' \& \$] $binit = 0-1 $octit = 0-7 @@ -228,8 +228,9 @@ $docsym = [\| \^ \* \$] -- character sets can be subtracted, not strings @escape = \\ ( $charesc | @ascii | @decimal | o @octal | x @hexadecimal ) @escapechar = \\ ( $charesc # \& | @ascii | @decimal | o @octal | x @hexadecimal ) - at stringchar = ($graphic # [\\ \"]) | $space | @escape | @gap - at char = ($graphic # [\\ \']) | $space | @escapechar + at stringchar = ($graphic # [\\ \"]) | $space | @escape | @gap + at char = ($graphic # [\\ \']) | $space | @escapechar + at stringinterchar = ($graphic # [\\ \" \$]) | $space | @escape | @gap -- normal signed numerical literals can only be explicitly negative, -- not explicitly positive (contrast @exponent) @@ -629,6 +630,21 @@ $unigraphic / { isSmartQuote } { smart_quote_error } (\" | \"\") / ([\n .] # \") { tok_string_multi_content } } +-- See Note [Interpolated strings] +<0> { + s \" { \span _ _ _ -> pushLexState string_inter_content >> pure (L span (ITstringInterBegin StringTypeSingle)) } + -- TODO(bchinn): interpolated multiline strings +} + +-- TODO(bchinn): add string_inter state to all <0> states that can be in an interpolated string + { + @stringinterchar* { tok_string_inter_raw } + \$ \{ { \span _ _ _ -> pushLexState string_inter >> pure (L span ITstringInterExpOpen) } + \" { \span _ _ _ -> popLexState >> pure (L span (ITstringInterEnd StringTypeSingle)) } + + -- TODO(bchinn): check for smart quotes +} + <0> { \'\' { token ITtyQuote } @@ -920,9 +936,16 @@ data Token -- have a string literal as a label -- Note [Literal source text] in "GHC.Types.SourceText" - | ITchar SourceText Char -- Note [Literal source text] in "GHC.Types.SourceText" - | ITstring SourceText FastString -- Note [Literal source text] in "GHC.Types.SourceText" - | ITstringMulti SourceText FastString -- Note [Literal source text] in "GHC.Types.SourceText" + | ITchar SourceText Char -- Note [Literal source text] in "GHC.Types.SourceText" + | ITstring SourceText StringType FastString -- Note [Literal source text] in "GHC.Types.SourceText" + + -- See Note [Interpolated strings] + | ITstringInterBegin StringType + | ITstringInterRaw SourceText RawLexedString -- Note [Literal source text] in "GHC.Types.SourceText" + | ITstringInterExpOpen + | ITstringInterExpClose + | ITstringInterEnd StringType + | ITinteger IntegralLit -- Note [Literal source text] in "GHC.Types.SourceText" | ITrational FractionalLit @@ -1672,8 +1695,11 @@ open_brace span _str _len _buf2 = do setContext (NoLayout:ctx) return (L span ITocurly) close_brace span _str _len _buf2 = do - popContext - return (L span ITccurly) + ctx <- getContext + sc <- getLexState + if null ctx && sc == string_inter + then popLexState >> pure (L span ITstringInterExpClose) + else popContext >> pure (L span ITccurly) qvarid, qconid :: StringBuffer -> Int -> Token qvarid buf len = ITqvarid $! splitQualName buf len False @@ -2166,11 +2192,19 @@ tok_string span buf len _buf2 = do addError err pure $ L span (ITprimstring src (unsafeMkByteString s)) else - pure $ L span (ITstring src (mkFastString s)) + pure $ L span (ITstring src StringTypeSingle (mkFastString s)) where src = SourceText $ lexemeToFastString buf len endsInHash = currentChar (offsetBytes (len - 1) buf) == '#' +tok_string_inter_raw :: Action +tok_string_inter_raw span buf len _ = do + s <- either (throwStringLexError i0) pure $ lexStringRaw len buf + pure $ L span (ITstringInterRaw src s) + where + i0 = AI (psSpanStart span) buf + src = SourceText $ lexemeToFastString buf len + -- | Ideally, we would define this completely with Alex syntax, like normal strings. -- Instead, this is defined as a hybrid solution by manually invoking lex states, which -- we're doing for two reasons: @@ -2195,10 +2229,10 @@ tok_string_multi startSpan startBuf _len _buf2 = do let contentLen = byteDiff contentStartBuf contentEndBuf s <- either (throwStringLexError (AI startLoc startBuf)) pure $ - lexMultilineString contentLen contentStartBuf + lexString StringTypeMulti contentLen contentStartBuf setInput i' - pure $ L span $ ITstringMulti src (mkFastString s) + pure $ L span $ ITstring src StringTypeMulti (mkFastString s) where goContent i0 = case alexScan i0 string_multi_content of @@ -2242,7 +2276,7 @@ tok_string_multi_content = panic "tok_string_multi_content unexpectedly invoked" lex_chars :: (String, String) -> PsSpan -> StringBuffer -> Int -> P String lex_chars (startDelim, endDelim) span buf len = either (throwStringLexError i0) pure $ - lexString contentLen contentBuf + lexString StringTypeSingle contentLen contentBuf where i0@(AI _ contentBuf) = advanceInputBytes (length startDelim) $ AI (psSpanStart span) buf ===================================== compiler/GHC/Parser/String.hs ===================================== @@ -5,8 +5,12 @@ module GHC.Parser.String ( StringLexError (..), + StringType (..), lexString, - lexMultilineString, + + -- * Raw strings + RawLexedString, + lexStringRaw, -- * Unicode smart quote helpers isDoubleSmartQuote, @@ -17,8 +21,11 @@ import GHC.Prelude hiding (getChar) import Control.Arrow ((>>>)) import Control.Monad (when) +import Data.Bifunctor (first) import Data.Char (chr, ord) import qualified Data.Foldable1 as Foldable1 +import Data.Functor.Identity (Identity (..)) +import Data.List (unsnoc) import qualified Data.List.NonEmpty as NonEmpty import Data.Maybe (listToMaybe, mapMaybe) import GHC.Data.StringBuffer (StringBuffer) @@ -37,13 +44,16 @@ import GHC.Utils.Panic (panic) type BufPos = Int data StringLexError = StringLexError LexErr BufPos -lexString :: Int -> StringBuffer -> Either StringLexError String -lexString = lexStringWith processChars processChars +data StringType = StringTypeSingle | StringTypeMulti deriving (Show) + +lexString :: StringType -> Int -> StringBuffer -> Either StringLexError String +lexString strType = lexStringWith processChars where - processChars :: HasChar c => [c] -> Either (c, LexErr) [c] + processChars :: HasChar c => [c] -> Maybe [c] processChars = - collapseGaps - >>> resolveEscapes + case strType of + StringTypeSingle -> fromRight . processCharsSingle + StringTypeMulti -> processCharsMulti -- ----------------------------------------------------------------------------- -- Lexing interface @@ -66,26 +76,27 @@ So what we'll do is do two passes. The first pass is optimistic; just convert to a plain String and process it. If this results in an error, we do a second pass, this time where each character is annotated with its position. Now, the error has all the information it needs. - -Ideally, lexStringWith would take a single (forall c. HasChar c => ...) function, -but to help the specializer, we pass it in twice to concretize it for the two -types we actually use. -} -- | See Note [Lexing strings] -lexStringWith :: - ([Char] -> Either (Char, LexErr) [Char]) - -> ([CharPos] -> Either (CharPos, LexErr) [CharPos]) - -> Int - -> StringBuffer - -> Either StringLexError String -lexStringWith processChars processCharsPos len buf = +lexStringWith :: (String -> Maybe String) -> Int -> StringBuffer -> Either StringLexError String +lexStringWith processChars len buf = case processChars $ bufferChars buf len of - Right s -> Right s - Left _ -> - case processCharsPos $ bufferLocatedChars buf len of - Right _ -> panic "expected lex error on second pass" - Left ((_, pos), e) -> Left $ StringLexError e pos + Just s -> Right s + Nothing -> do + validateString len buf -- should return Left + panic "expected lex error on second pass" + +-- | Find any lexical errors in the string. +-- +-- Can validate both single- and multi-line strings, since multi-line strings +-- have the same validation logic as single-line strings, and none of the +-- multi-line string processing steps affect the validity of the string. +validateString :: Int -> StringBuffer -> Either StringLexError () +validateString len buf = + case processCharsSingle $ bufferLocatedChars buf len of + Right _ -> Right () + Left ((_, pos), e) -> Left $ StringLexError e pos class HasChar c where getChar :: c -> Char @@ -122,6 +133,11 @@ bufferLocatedChars initialBuf len = go initialBuf -- ----------------------------------------------------------------------------- -- Lexing phases +processCharsSingle :: HasChar c => [c] -> Either (c, LexErr) [c] +processCharsSingle = + collapseGaps + >>> resolveEscapes + collapseGaps :: HasChar c => [c] -> [c] collapseGaps = go where @@ -149,6 +165,9 @@ resolveEscapes = go dlistEmpty Left (c, e) -> Left (c, e) c : cs -> go (acc `dlistSnoc` c) cs +resolveEscapesMaybe :: HasChar c => [c] -> Maybe [c] +resolveEscapesMaybe = fromRight . resolveEscapes + -- ----------------------------------------------------------------------------- -- Escape characters @@ -247,6 +266,76 @@ isSingleSmartQuote = \case '’' -> True _ -> False +-- ----------------------------------------------------------------------------- +-- Interpolated strings + +-- | A string that's been validated to be lexically correct, but still +-- contains the raw string lexed, without anything resolved. +newtype RawLexedString = RawLexedString {unRawLexedString :: String} + deriving (Foldable, Semigroup, Monoid) + +-- | Load and validate the string in the given StringBuffer. +-- +-- e.g. Lexing "a\nb" will return RawLexedString ['a', '\\', 'n', 'b']. +lexStringRaw :: Int -> StringBuffer -> Either StringLexError RawLexedString +lexStringRaw len buf = RawLexedString (bufferChars len buf) <$ validateString len buf + +fromRawLexedStringSingle :: RawLexedString -> String +fromRawLexedStringSingle (RawLexedString s) = + case processCharsSingle s of + Right s' -> s' + Left _ -> panic "Unexpectedly got an error when re-lexing the string" + +fromRawLexedStringMulti :: (RawLexedString, [(x, RawLexedString)]) -> (String, [(x, String)]) +fromRawLexedStringMulti s = + case processCharsMulti' (to s) of + Just s' -> from s' + Nothing -> panic "Unexpectedly got an error when re-lexing the string" + where + to (pre, parts) = InterMultiString pre parts + from (InterMultiString pre parts) = (pre, parts) + +{- +Note [Interpolated strings] +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Interpolated string syntax was accepted in this proposal: +https://github.com/ghc-proposals/ghc-proposals/pull/570 + +Interpolated strings are syntax sugar for + +Interpolated strings are implemented in the following manner: + +1. Lexer takes the string as input: + + s"Hello ${Text.toUpper name}!" + + and outputs the following tokens: + + [ ITstringInterBegin src StringTypeSingle + , ITstringInterRaw src "Hello " + , ITstringInterExpOpen src + , ITqvarid ("Text.toUpper", "name") + , ITvarid "name" + , ITstringInterExpClose src + , ITstringInterRaw src "!" + , ITstringInterEnd src StringTypeSingle + ] + +2. The parser will then parse the tokens into the following HsExpr: + + HsInterString ext + [ HsInterRaw ext "Hello " + , HsInterExp ext $ + HsApp ext + (HsVar ext 'Text.toUpper) + (HsVar ext 'name) + , HsInterRaw ext "!" + ] + +3. This will then be desugared into +-} + -- ----------------------------------------------------------------------------- -- Multiline strings @@ -255,89 +344,98 @@ isSingleSmartQuote = \case -- Assumes string is lexically valid. Skips the steps about splitting -- and rejoining lines, and instead manually find newline characters, -- for performance. -lexMultilineString :: Int -> StringBuffer -> Either StringLexError String -lexMultilineString = lexStringWith processChars processChars +processCharsMulti :: String -> Maybe String +processCharsMulti = fmap from . processCharsMulti' . to where - processChars :: HasChar c => [c] -> Either (c, LexErr) [c] - processChars = - collapseGaps -- Step 1 - >>> normalizeEOL - >>> expandLeadingTabs -- Step 3 - >>> rmCommonWhitespacePrefix -- Step 4 - >>> collapseOnlyWsLines -- Step 5 - >>> rmFirstNewline -- Step 7a - >>> rmLastNewline -- Step 7b - >>> resolveEscapes -- Step 8 - - -- Normalize line endings to LF. The spec dictates that lines should be - -- split on newline characters and rejoined with ``\n``. But because we - -- aren't actually splitting/rejoining, we'll manually normalize here - normalizeEOL :: HasChar c => [c] -> [c] - normalizeEOL = - let go = \case - Char '\r' : c@(Char '\n') : cs -> c : go cs - c@(Char '\r') : cs -> setChar '\n' c : go cs - c@(Char '\f') : cs -> setChar '\n' c : go cs - c : cs -> c : go cs - [] -> [] - in go - - -- expands all tabs, since the lexer will verify that tabs can only appear - -- as leading indentation - expandLeadingTabs :: HasChar c => [c] -> [c] - expandLeadingTabs = - let go !col = \case - c@(Char '\t') : cs -> - let fill = 8 - (col `mod` 8) - in replicate fill (setChar ' ' c) ++ go (col + fill) cs - c : cs -> c : go (if getChar c == '\n' then 0 else col + 1) cs - [] -> [] - in go 0 + -- Convert a normal multiline string to/from an interpolated multiline string + -- with no interpolated expressions. + to s = InterMultiString s [] + from = \case + InterMultiString s [] -> s + _ -> panic "Got unexpected result when processing characters in multiline string" + +-- | An interpolated, multiline string to be processed. +-- +-- `x` here will only ever be instantiated as `HsExpr`, but we'll leave it general to ensure +-- we never modify it, we only ever propagate it. +-- +-- We represent this as a list of (x, String) tuples instead of [Either x String] to guarantee +-- that we don't have to handle two raw Strings next to each other. +data InterMultiString x = + InterMultiString + String -- ^ beginning of the string before the first interpolated expr + [(x, String)] -- ^ (expr, raw string) interleaved groups + +-- Run the given function over all raw strings, ignoring expressions +overRaw :: (String -> String) -> InterMultiString x -> InterMultiString x +overRaw f = runIdentity . overRawM (Identity . f) + +overRawM :: Monad m => (String -> m String) -> InterMultiString x -> m (InterMultiString x) +overRawM f (InterMultiString pre parts) = InterMultiString <$> f pre <*> (traverse . traverse) f parts + +-- | Process multiline characters generally, for both normal multiline strings and interpolated +-- multiline strings. +processCharsMulti' :: InterMultiString x -> Maybe (InterMultiString x) +processCharsMulti' = + overRaw collapseGaps -- Step 1 + >>> overRaw normalizeEOL + >>> expandLeadingTabs -- Step 3 + >>> rmCommonWhitespacePrefix -- Step 4 + >>> collapseOnlyWsLines -- Step 5 + >>> rmFirstNewline -- Step 7a + >>> rmLastNewline -- Step 7b + >>> overRawM resolveEscapesMaybe -- Step 8 + +-- | Expands all tabs blindly, since the lexer will verify that tabs can only appear +-- as leading indentation +expandLeadingTabs :: InterMultiString x -> InterMultiString x +expandLeadingTabs = + -- we can expand each raw string part independently, because leading + -- indentation will never contain an interpolated expression + overRaw $ go 0 + where + go !col = \case + c@'\t' : cs -> + let fill = 8 - (col `mod` 8) + in replicate fill ' ' ++ go (col + fill) cs + c : cs -> c : go (if c == '\n' then 0 else col + 1) cs + [] -> [] + +-- Normalize line endings to LF. The spec dictates that lines should be +-- split on newline characters and rejoined with ``\n``. But because we +-- aren't actually splitting/rejoining, we'll manually normalize here +normalizeEOL :: String -> String +normalizeEOL = go + where + go = \case + Char '\r' : c@(Char '\n') : cs -> c : go cs + c@(Char '\r') : cs -> setChar '\n' c : go cs + c@(Char '\f') : cs -> setChar '\n' c : go cs + c : cs -> c : go cs + [] -> [] + +rmCommonWhitespacePrefix :: InterMultiString x -> InterMultiString x +rmCommonWhitespacePrefix s0 = + -- Whitespace prefix, by definition, only comes after newline characters, and there can + -- never be an interpolated expr within a whitespace prefix (since the expr would end + -- the prefix). So we can use a plain `map` to just process the string parts, because + -- the "drop prefix" logic will never span over multiple parts. + map (first go) parts + where + -- treat interpolated exprs as a single, non-space character string + commonWSPrefix = getCommonWsPrefix $ case s0 of InterMultiString pre parts -> pre ++ concatMap snd parts + + go = \case + c@'\n' : cs -> c : go (dropPrefix commonWSPrefix cs) + c : cs -> c : go cs + [] -> [] - rmCommonWhitespacePrefix :: HasChar c => [c] -> [c] - rmCommonWhitespacePrefix cs0 = - let commonWSPrefix = getCommonWsPrefix (map getChar cs0) - go = \case - c@(Char '\n') : cs -> c : go (dropLine commonWSPrefix cs) - c : cs -> c : go cs - [] -> [] - -- drop x characters from the string, or up to a newline, whichever - -- comes first - dropLine !x = \case - cs | x <= 0 -> cs - cs@(Char '\n' : _) -> cs - _ : cs -> dropLine (x - 1) cs - [] -> [] - in go cs0 - - collapseOnlyWsLines :: HasChar c => [c] -> [c] - collapseOnlyWsLines = - let go = \case - c@(Char '\n') : cs | Just cs' <- checkAllWs cs -> c : go cs' - c : cs -> c : go cs - [] -> [] - checkAllWs = \case - -- got all the way to a newline or the end of the string, return - cs@(Char '\n' : _) -> Just cs - cs@[] -> Just cs - -- found whitespace, continue - Char c : cs | is_space c -> checkAllWs cs - -- anything else, stop - _ -> Nothing - in go - - rmFirstNewline :: HasChar c => [c] -> [c] - rmFirstNewline = \case - Char '\n' : cs -> cs - cs -> cs - - rmLastNewline :: HasChar c => [c] -> [c] - rmLastNewline = - let go = \case - [] -> [] - [Char '\n'] -> [] - c : cs -> c : go cs - in go + -- drop x characters from the string, or up to a newline, whichever comes first + dropPrefix !x = \case + cs | x <= 0 -> cs + cs@('\n' : _) -> cs + _ : cs -> dropPrefix (x - 1) cs + [] -> [] -- | See step 4 in Note [Multiline string literals] -- @@ -353,6 +451,48 @@ getCommonWsPrefix s = . drop 1 -- ignore first line in calculation $ lines s +collapseOnlyWsLines :: InterMultiString x -> InterMultiString x +collapseOnlyWsLines (InterMultiString pre parts) = + let pre' = go (null parts) pre + parts' = [(expr, go isLast s) | ((expr, s), isLast) <- withIsLast parts] + in InterMultiString pre' parts' + where + go isLast = \case + c@'\n' : cs | Just cs' <- checkAllWs isLast cs -> c : go cs' + c : cs -> c : go cs + [] -> [] + + checkAllWs isLast = \case + -- got all the way to a newline or the end of the string, return + cs@('\n' : _) -> Just cs + cs@[] | isLast -> Just cs + -- found whitespace, continue + c : cs | is_space c -> checkAllWs cs + -- anything else, stop + _ -> Nothing + + -- annotate every element with a Bool indicating if it's the last element + withIsLast :: [a] -> [(a, Bool)] + withIsLast xs = zip xs $ (False <$ init xs) ++ [True] + +rmFirstNewline :: InterMultiString x -> InterMultiString x +rmFirstNewline = \case + InterMultiString ('\n' : pre) parts -> InterMultiString pre parts + s -> s + +rmLastNewline :: InterMultiString x -> InterMultiString x +rmLastNewline (InterMultiString pre parts) = + case unsnoc parts of + Nothing -> + InterMultiString (go pre) parts + Just (parts0, (x, lastLine)) -> + InterMultiString pre (parts0 ++ [(x, go lastLine)]) + where + go = \case + [] -> [] + ['\n'] -> [] + c : cs -> c : go cs + {- Note [Multiline string literals] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -362,8 +502,8 @@ proposal: https://github.com/ghc-proposals/ghc-proposals/pull/569 Multiline string literals are syntax sugar for normal string literals, with an extra post processing step. This all happens in the Lexer; that -is, HsMultilineString will contain the post-processed string. This matches -the same behavior as HsString, which contains the normalized string +is, HsString will contain the post-processed string. This matches the same +behavior as single-line HsString, which contains the normalized string (see Note [Literal source text]). The canonical steps for post processing a multiline string are: @@ -405,3 +545,9 @@ dlistToList (DList f) = f [] dlistSnoc :: DList a -> a -> DList a dlistSnoc (DList f) x = DList (f . (x :)) + +-- ----------------------------------------------------------------------------- +-- Other utilities + +fromRight :: Either e a -> Maybe a +fromRight = either (const Nothing) Just ===================================== compiler/GHC/Rename/Expr.hs ===================================== @@ -375,8 +375,7 @@ rnExpr (HsLit x lit) | Just (src, s) <- stringLike lit ; return (HsLit x (convertLit lit), emptyFVs) } } where stringLike = \case - HsString src s -> Just (src, s) - HsMultilineString src s -> Just (src, s) + HsString src _ s -> Just (src, s) _ -> Nothing rnExpr (HsLit x lit) @@ -391,6 +390,9 @@ rnExpr (HsOverLit x lit) return (HsApp noExtField (noLocA neg) (noLocA (HsOverLit x lit')) , fvs ) } +rnExpr (HsInterString x ty parts) + = undefined -- TODO(bchinn) + rnExpr (HsApp x fun arg) = do { (fun',fvFun) <- rnLExpr fun ; (arg',fvArg) <- rnLExpr arg ===================================== compiler/GHC/Tc/Gen/HsType.hs ===================================== @@ -4774,8 +4774,7 @@ addTyConFlavCtxt name flav tyLitFromLit :: HsLit GhcRn -> Maybe (HsTyLit GhcRn) -tyLitFromLit (HsString x str) = Just (HsStrTy x str) -tyLitFromLit (HsMultilineString x str) = Just (HsStrTy x str) +tyLitFromLit (HsString x _ str) = Just (HsStrTy x str) tyLitFromLit (HsChar x char) = Just (HsCharTy x char) tyLitFromLit _ = Nothing ===================================== compiler/GHC/Tc/Utils/TcMType.hs ===================================== @@ -2379,7 +2379,7 @@ shortCutLit platform val res_ty -- is less than 100, which ensures desugaring isn't slow. go_string src s - | isStringTy res_ty = Just (HsLit noExtField (HsString src s)) + | isStringTy res_ty = Just (HsLit noExtField (HsString src HsStringTypeSingle s)) | otherwise = Nothing mkLit :: DataCon -> HsLit GhcTc -> HsExpr GhcTc ===================================== compiler/GHC/ThToHs.hs ===================================== @@ -1428,7 +1428,7 @@ cvtLit (CharL c) = do { force c; return $ HsChar NoSourceText c } cvtLit (CharPrimL c) = do { force c; return $ HsCharPrim NoSourceText c } cvtLit (StringL s) = do { let { s' = mkFastString s } ; force s' - ; return $ HsString (quotedSourceText s) s' } + ; return $ HsString (quotedSourceText s) HsStringTypeSingle s' } cvtLit (StringPrimL s) = do { let { !s' = BS.pack s } ; return $ HsStringPrim NoSourceText s' } cvtLit (BytesPrimL (Bytes fptr off sz)) = do ===================================== compiler/Language/Haskell/Syntax/Expr.hs ===================================== @@ -346,19 +346,24 @@ data HsExpr p -- erroring expression will be written after -- solving. See Note [Holes] in GHC.Tc.Types.Constraint. - - | HsOverLabel (XOverLabel p) FastString -- ^ Overloaded label (Note [Overloaded labels] in GHC.OverloadedLabels) | HsIPVar (XIPVar p) HsIPName -- ^ Implicit parameter (not in use after typechecking) + | HsOverLit (XOverLitE p) (HsOverLit p) -- ^ Overloaded literals | HsLit (XLitE p) (HsLit p) -- ^ Simple (non-overloaded) literals + | -- | See Note [Interpolated strings] + HsInterString + (XInterString p) + HsStringType + [Either FastString (LHsExpr p)] + -- | Lambda, Lambda-case, and Lambda-cases | HsLam (XLam p) HsLamVariant -- ^ Tells whether this is for lambda, \case, or \cases ===================================== compiler/Language/Haskell/Syntax/Extension.hs ===================================== @@ -410,6 +410,9 @@ type family XOverLabel x type family XIPVar x type family XOverLitE x type family XLitE x +type family XInterString x +type family XInterStringRaw x +type family XInterStringExp x type family XLam x type family XLamCase x type family XApp x @@ -550,7 +553,6 @@ type family XXParStmtBlock x x' type family XHsChar x type family XHsCharPrim x type family XHsString x -type family XHsMultilineString x type family XHsStringPrim x type family XHsInt x type family XHsIntPrim x ===================================== compiler/Language/Haskell/Syntax/Lit.hs ===================================== @@ -50,9 +50,7 @@ data HsLit x -- ^ Character | HsCharPrim (XHsCharPrim x) {- SourceText -} Char -- ^ Unboxed character - | HsString (XHsString x) {- SourceText -} FastString - -- ^ String - | HsMultilineString (XHsMultilineString x) {- SourceText -} FastString + | HsString (XHsString x) {- SourceText -} HsStringType FastString -- ^ String | HsStringPrim (XHsStringPrim x) {- SourceText -} !ByteString -- ^ Packed bytes @@ -88,7 +86,7 @@ data HsLit x instance (Eq (XXLit x)) => Eq (HsLit x) where (HsChar _ x1) == (HsChar _ x2) = x1==x2 (HsCharPrim _ x1) == (HsCharPrim _ x2) = x1==x2 - (HsString _ x1) == (HsString _ x2) = x1==x2 + (HsString _ _ x1) == (HsString _ _ x2) = x1==x2 (HsStringPrim _ x1) == (HsStringPrim _ x2) = x1==x2 (HsInt _ x1) == (HsInt _ x2) = x1==x2 (HsIntPrim _ x1) == (HsIntPrim _ x2) = x1==x2 @@ -134,3 +132,6 @@ instance Ord OverLitVal where compare (HsIsString _ s1) (HsIsString _ s2) = s1 `lexicalCompareFS` s2 compare (HsIsString _ _) (HsIntegral _) = GT compare (HsIsString _ _) (HsFractional _) = GT + +data HsStringType = HsStringTypeSingle | HsStringTypeMulti + deriving Data ===================================== utils/check-exact/ExactPrint.hs ===================================== @@ -4768,8 +4768,7 @@ hsLit2String lit = case lit of HsChar src v -> toSourceTextWithSuffix src v "" HsCharPrim src p -> toSourceTextWithSuffix src p "" - HsString src v -> toSourceTextWithSuffix src v "" - HsMultilineString src v -> toSourceTextWithSuffix src v "" + HsString src _ v -> toSourceTextWithSuffix src v "" HsStringPrim src v -> toSourceTextWithSuffix src v "" HsInt _ (IL src _ v) -> toSourceTextWithSuffix src v "" HsIntPrim src v -> toSourceTextWithSuffix src v "" ===================================== utils/haddock/haddock-api/src/Haddock/Backends/Hyperlinker/Parser.hs ===================================== @@ -23,6 +23,7 @@ import GHC.Parser.Lexer as Lexer , initParserState , lexer ) +import GHC.Parser.String (StringType (..)) import qualified GHC.Types.Error as E import GHC.Types.SourceText import GHC.Types.SrcLoc @@ -118,7 +119,7 @@ parse parserOpts sDocContext fpath bs = case unP (go False []) initState of -- Update internal line + file position if this is a LINE pragma ITline_prag _ -> tryOrElse (bEnd, inPragDef) $ do L _ (ITinteger (IL{il_value = line})) <- tryP wrappedLexer - L _ (ITstring _ file) <- tryP wrappedLexer + L _ (ITstring _ file StringTypeSingle) <- tryP wrappedLexer L spF ITclose_prag <- tryP wrappedLexer let newLoc = mkRealSrcLoc file (fromIntegral line - 1) (srcSpanEndCol spF) @@ -320,7 +321,6 @@ classify tok = ITlabelvarid{} -> TkUnknown ITchar{} -> TkChar ITstring{} -> TkString - ITstringMulti{} -> TkString ITinteger{} -> TkNumber ITrational{} -> TkNumber ITprimchar{} -> TkChar View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6a45e95ddc5b2535bf0e7b85f4c44f30b5f9a0ca...f560c8b4cc972354a489872b78b6078c4392cfe3 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6a45e95ddc5b2535bf0e7b85f4c44f30b5f9a0ca...f560c8b4cc972354a489872b78b6078c4392cfe3 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 8 06:26:56 2024 From: gitlab at gitlab.haskell.org (Serge S. Gulin (@gulin.serge)) Date: Sun, 08 Dec 2024 01:26:56 -0500 Subject: [Git][ghc/ghc][wip/T24744] JS: Specialize unpackCString# CAFs (fixes #24744) Message-ID: <67553c3067302_b16ee31721ec38922@gitlab.mail> Serge S. Gulin pushed to branch wip/T24744 at Glasgow Haskell Compiler / GHC Commits: bd303047 by Serge S. Gulin at 2024-12-08T09:26:35+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - 10 changed files: - compiler/GHC/StgToJS/Apply.hs - compiler/GHC/StgToJS/CodeGen.hs - compiler/GHC/StgToJS/Ids.hs - compiler/GHC/StgToJS/Monad.hs - testsuite/tests/javascript/Makefile - testsuite/tests/javascript/T23479_1.hs → testsuite/tests/javascript/T23479.hs - testsuite/tests/javascript/T23479_1.stdout → testsuite/tests/javascript/T23479.stdout - testsuite/tests/javascript/T23479_2.hs → testsuite/tests/javascript/T24744.hs - testsuite/tests/javascript/T23479_2.stdout → testsuite/tests/javascript/T24744.stdout - testsuite/tests/javascript/all.T Changes: ===================================== compiler/GHC/StgToJS/Apply.hs ===================================== @@ -100,7 +100,7 @@ genApp -> [StgArg] -> G (JStgStat, ExprResult) genApp ctx i args - -- Test case T23479_2 + -- Test case moved to T24744 -- See: https://github.com/ghcjs/ghcjs/blob/b7711fbca7c3f43a61f1dba526e6f2a2656ef44c/src/Gen2/Generator.hs#L876 -- Comment by Luite Stegeman -- Special cases for JSString literals. @@ -119,7 +119,7 @@ genApp ctx i args , [top] <- concatMap typex_expr (ctxTarget ctx) = (,ExprInline) . (|=) top . app hdDecodeUtf8Z <$> varsForId v - -- Test case T23479_1 + -- Test case T23479 | [StgLitArg (LitString bs)] <- args , Just d <- decodeModifiedUTF8 bs , idName i == unsafeUnpackJSStringUtf8ShShName ===================================== compiler/GHC/StgToJS/CodeGen.hs ===================================== @@ -327,10 +327,11 @@ genToplevelRhs i rhs = case rhs of eid <- identForEntryId i idt <- identFS <$> identForId i body <- genBody (initExprCtx i) R2 args body typ - global_occs <- globalOccs body + lids <- globalOccs body + -- Regenerate idents from lids to restore right order of representatives. + -- Representatives have occurrence order which can be mixed. + lidents <- concat <$> traverse identsForId lids let eidt = identFS eid - let lidents = map global_ident global_occs - let lids = map global_id global_occs let lidents' = map identFS lidents CIStaticRefs sr0 <- genStaticRefsRhs rhs let sri = filter (`notElem` lidents') sr0 ===================================== compiler/GHC/StgToJS/Ids.hs ===================================== @@ -155,7 +155,7 @@ cachedIdentForId i mi id_type = do -- Now update the GlobalId cache, if required - let update_global_cache = isGlobalId i && isNothing mi && id_type == IdPlain + let update_global_cache = isGlobalId i && id_type == IdPlain -- fixme also allow caching entries for lifting? when (update_global_cache) $ do ===================================== compiler/GHC/StgToJS/Monad.hs ===================================== @@ -153,29 +153,28 @@ getGlobalIdCache = State.gets (ggsGlobalIdCache . gsGroup) setGlobalIdCache :: GlobalIdCache -> G () setGlobalIdCache v = State.modify (\s -> s { gsGroup = (gsGroup s) { ggsGlobalIdCache = v}}) - data GlobalOcc = GlobalOcc - { global_ident :: !Ident - , global_id :: !Id + { global_id :: !Id , global_count :: !Word } instance Outputable GlobalOcc where ppr g = hang (text "GlobalOcc") 2 $ vcat - [ hcat [text "Ident: ", ppr (global_ident g)] - , hcat [text "Id:", ppr (global_id g)] + [ hcat [text "Id:", ppr (global_id g)] , hcat [text "Count:", ppr (global_count g)] ] --- | Return number of occurrences of every global id used in the given JStgStat. +-- | Return occurrences of every global id used in the given JStgStat. -- Sort by increasing occurrence count. -globalOccs :: JStgStat -> G [GlobalOcc] +globalOccs :: JStgStat -> G [Id] globalOccs jst = do GlobalIdCache gidc <- getGlobalIdCache - -- build a map form Ident Unique to (Ident, Id, Count) + -- build a map form Ident Unique to (Id, Count) let cmp_cnt g1 g2 = compare (global_count g1) (global_count g2) inc g1 g2 = g1 { global_count = global_count g1 + global_count g2 } + + go :: UniqFM Id GlobalOcc -> [Ident] -> [GlobalOcc] go gids = \case [] -> -- return global Ids used locally sorted by increased use L.sortBy cmp_cnt $ nonDetEltsUFM gids @@ -186,7 +185,7 @@ globalOccs jst = do Just (_k,gid) -> -- add it to the list of already found global ids. Increasing -- count by 1 - let g = GlobalOcc i gid 1 - in go (addToUFM_C inc gids i g) is + let g = GlobalOcc gid 1 + in go (addToUFM_C inc gids gid g) is - pure $ go emptyUFM (identsS jst) + pure $ map global_id $ go emptyUFM $ identsS jst ===================================== testsuite/tests/javascript/Makefile ===================================== @@ -13,20 +13,21 @@ T24495: # check that the optimization occurred for -02 1 time (1 for unfloated lits) grep -c appendToHsStringA T24495.dump-js -T23479_1: - '$(TEST_HC)' $(TEST_HC_OPTS) T23479_1.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file - ./T23479_1 +T23479: + '$(TEST_HC)' $(TEST_HC_OPTS) T23479.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file + ./T23479 # check that the optimization occurred - grep -c "h\$$r1 = \"test_val_1\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_2\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_3\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_80_local" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_80_global" T23479_1.dump-js || true + grep -c "h\$$r1 = \"test_val_1\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_2\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_3\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_80_local" T23479.dump-js + grep -c "h\$$r1 = \"test_val_80_global" T23479.dump-js || true -T23479_2: - '$(TEST_HC)' $(TEST_HC_OPTS) T23479_2.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file - ./T23479_2 - grep -c "h\$$r1 = \"test_val_1\"" T23479_2.dump-js - grep -c "h\$$r1 = \"test_val_80_local_once" T23479_2.dump-js +T24744: + '$(TEST_HC)' $(TEST_HC_OPTS) T24744.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file + ./T24744 + grep -c "h\$$r1 = \"test_val_1\"" T24744.dump-js + grep -c "h\$$r1 = \"test_val_80_local_once" T24744.dump-js # check that the optimization occurred - grep -c "h\$$r1 = h\$$decodeUtf8z" T23479_2.dump-js + grep -c "h\$$r1 = h\$$decodeUtf8z" T24744.dump-js + grep -c "h\$$stc(h\$$mainZCMainzitestzuvalzu80zulocal,h\$$mainZCMainzitestzuvalzu80zulocal_e,\[h\$$ghczmprimZCGHCziCStringziunpackCStringzh,h\$$mainZCMainzimain7_1,h\$$mainZCMainzimain7_2\])" T24744.jsexe/out.js ===================================== testsuite/tests/javascript/T23479_1.hs → testsuite/tests/javascript/T23479.hs ===================================== ===================================== testsuite/tests/javascript/T23479_1.stdout → testsuite/tests/javascript/T23479.stdout ===================================== ===================================== testsuite/tests/javascript/T23479_2.hs → testsuite/tests/javascript/T24744.hs ===================================== ===================================== testsuite/tests/javascript/T23479_2.stdout → testsuite/tests/javascript/T24744.stdout ===================================== @@ -6,3 +6,4 @@ testFn:test_val_1 1 1 1 +1 ===================================== testsuite/tests/javascript/all.T ===================================== @@ -23,5 +23,5 @@ test('T22455', normal, compile_and_run, ['-ddisable-js-minifier']) test('T23565', normal, compile_and_run, ['']) test('T24495', normal, makefile_test, ['T24495']) -test('T23479_1', normal, makefile_test, ['T23479_1']) -test('T23479_2', normal, makefile_test, ['T23479_2']) +test('T23479', normal, makefile_test, ['T23479']) +test('T24744', normal, makefile_test, ['T24744']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/bd3030470597c5cb7a9206fb1b9420fc1b1ea4ea -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/bd3030470597c5cb7a9206fb1b9420fc1b1ea4ea You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 8 11:14:04 2024 From: gitlab at gitlab.haskell.org (Serge S. Gulin (@gulin.serge)) Date: Sun, 08 Dec 2024 06:14:04 -0500 Subject: [Git][ghc/ghc][wip/T24744] 3 commits: JS: Basic cleanup for unused stuff to simplify things. Message-ID: <67557f7c8e02e_2e276825655c1486b@gitlab.mail> Serge S. Gulin pushed to branch wip/T24744 at Glasgow Haskell Compiler / GHC Commits: 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - 0c6bcea4 by Serge S. Gulin at 2024-12-08T14:11:00+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - 17 changed files: - compiler/GHC/StgToJS/Apply.hs - compiler/GHC/StgToJS/Arg.hs - compiler/GHC/StgToJS/CodeGen.hs - compiler/GHC/StgToJS/Expr.hs - compiler/GHC/StgToJS/Ids.hs - compiler/GHC/StgToJS/Linker/Linker.hs - compiler/GHC/StgToJS/Monad.hs - compiler/GHC/StgToJS/Object.hs - compiler/GHC/StgToJS/Symbols.hs - compiler/GHC/StgToJS/Types.hs - rts/js/string.js - testsuite/tests/javascript/Makefile - testsuite/tests/javascript/T23479_1.hs → testsuite/tests/javascript/T23479.hs - testsuite/tests/javascript/T23479_1.stdout → testsuite/tests/javascript/T23479.stdout - testsuite/tests/javascript/T23479_2.hs → testsuite/tests/javascript/T24744.hs - testsuite/tests/javascript/T23479_2.stdout → testsuite/tests/javascript/T24744.stdout - testsuite/tests/javascript/all.T Changes: ===================================== compiler/GHC/StgToJS/Apply.hs ===================================== @@ -100,7 +100,7 @@ genApp -> [StgArg] -> G (JStgStat, ExprResult) genApp ctx i args - -- Test case T23479_2 + -- Test case moved to T24744 -- See: https://github.com/ghcjs/ghcjs/blob/b7711fbca7c3f43a61f1dba526e6f2a2656ef44c/src/Gen2/Generator.hs#L876 -- Comment by Luite Stegeman -- Special cases for JSString literals. @@ -119,7 +119,7 @@ genApp ctx i args , [top] <- concatMap typex_expr (ctxTarget ctx) = (,ExprInline) . (|=) top . app hdDecodeUtf8Z <$> varsForId v - -- Test case T23479_1 + -- Test case T23479 | [StgLitArg (LitString bs)] <- args , Just d <- decodeModifiedUTF8 bs , idName i == unsafeUnpackJSStringUtf8ShShName @@ -157,6 +157,28 @@ genApp ctx i args , ExprInline ) + -- Case: unpackCString# "some string"# + -- + -- Generates h$toHsString("some string"), which has a faster + -- decoding loop. + -- + Utf8 version below + | [StgLitArg (LitString bs)] <- args + , Just d <- decodeModifiedUTF8 bs + , idName i == unpackCStringName + , [top] <- concatMap typex_expr (ctxTarget ctx) + = return + ( top |= app "h$toHsStringA" [toJExpr d] + , ExprInline + ) + | [StgLitArg (LitString bs)] <- args + , Just d <- decodeModifiedUTF8 bs + , idName i == unpackCStringUtf8Name + , [top] <- concatMap typex_expr (ctxTarget ctx) + = return + ( top |= app "h$toHsString" [toJExpr d] + , ExprInline + ) + -- let-no-escape | Just n <- ctxLneBindingStackSize ctx i = do ===================================== compiler/GHC/StgToJS/Arg.hs ===================================== @@ -22,9 +22,6 @@ module GHC.StgToJS.Arg , genIdArgI , genIdStackArgI , allocConStatic - , allocUnboxedConStatic - , allocateStaticList - , jsStaticArg , jsStaticArgs ) where @@ -215,7 +212,7 @@ allocConStatic (identFS -> to) cc con args = do emitStatic to (StaticUnboxed $ StaticUnboxedBool True) cc' | otherwise = do e <- identFS <$> identForDataConWorker con - emitStatic to (StaticData e []) cc' + emitStatic to (StaticApp SAKData e []) cc' allocConStatic' cc' [x] | isUnboxableCon con = case x of @@ -234,7 +231,7 @@ allocConStatic (identFS -> to) cc con args = do _ -> panic "allocConStatic: invalid args for consDataCon" else do e <- identFS <$> identForDataConWorker con - emitStatic to (StaticData e xs) cc' + emitStatic to (StaticApp SAKData e xs) cc' -- | Allocate unboxed constructors allocUnboxedConStatic :: DataCon -> [StaticArg] -> StaticArg ===================================== compiler/GHC/StgToJS/CodeGen.hs ===================================== @@ -327,25 +327,26 @@ genToplevelRhs i rhs = case rhs of eid <- identForEntryId i idt <- identFS <$> identForId i body <- genBody (initExprCtx i) R2 args body typ - global_occs <- globalOccs body + lids <- globalOccs body + -- Regenerate idents from lids to restore right order of representatives. + -- Representatives have occurrence order which can be mixed. + lidents <- concat <$> traverse identsForId lids let eidt = identFS eid - let lidents = map global_ident global_occs - let lids = map global_id global_occs let lidents' = map identFS lidents CIStaticRefs sr0 <- genStaticRefsRhs rhs let sri = filter (`notElem` lidents') sr0 sr = CIStaticRefs sri et <- genEntryType args ll <- loadLiveFun lids - (static, regs, upd) <- + (appK, regs, upd) <- if et == CIThunk then do r <- updateThunk - pure (StaticThunk (Just (eidt, map StaticObjArg lidents')), CIRegs 0 [PtrV],r) - else return (StaticFun eidt (map StaticObjArg lidents'), - (if null lidents then CIRegs 1 (concatMap idJSRep args) - else CIRegs 0 (PtrV : concatMap idJSRep args)) - , mempty) + pure (SAKThunk, CIRegs 0 [PtrV], r) + else + let regs = if null lidents then CIRegs 1 (concatMap idJSRep args) + else CIRegs 0 (PtrV : concatMap idJSRep args) + in pure (SAKFun, regs, mempty) setcc <- ifProfiling $ if et == CIThunk then enterCostCentreThunk @@ -359,5 +360,5 @@ genToplevelRhs i rhs = case rhs of , ciStatic = sr } ccId <- costCentreStackLbl cc - emitStatic idt static ccId + emitStatic idt (StaticApp appK eidt $ map StaticObjArg lidents') ccId return $ (FuncStat eid [] (ll <> upd <> setcc <> body)) ===================================== compiler/GHC/StgToJS/Expr.hs ===================================== @@ -606,6 +606,38 @@ genCase ctx bnd e at alts l , ExprInline ) + -- The latter has a faster decoding loop. + -- + -- case "some string"# of b { + -- DEFAULT -> unpackCString# b + -- } + -- + -- + Utf8 version below + | StgLit (LitString bs) <- e + , [GenStgAlt DEFAULT _ rhs] <- alts + , StgApp i args <- rhs + , idName i == unpackCStringName + , [StgVarArg b'] <- args + , bnd == b' + , Just d <- decodeModifiedUTF8 bs + , [top] <- concatMap typex_expr (ctxTarget ctx) + = return + ( top |= app "h$toHsStringA" [toJExpr d] + , ExprInline + ) + | StgLit (LitString bs) <- e + , [GenStgAlt DEFAULT _ rhs] <- alts + , StgApp i args <- rhs + , idName i == unpackCStringUtf8Name + , [StgVarArg b'] <- args + , bnd == b' + , Just d <- decodeModifiedUTF8 bs + , [top] <- concatMap typex_expr (ctxTarget ctx) + = return + ( top |= app "h$toHsString" [toJExpr d] + , ExprInline + ) + | isInlineExpr e = do bndi <- identsForId bnd let ctx' = ctxSetTop bnd ===================================== compiler/GHC/StgToJS/Ids.hs ===================================== @@ -155,7 +155,7 @@ cachedIdentForId i mi id_type = do -- Now update the GlobalId cache, if required - let update_global_cache = isGlobalId i && isNothing mi && id_type == IdPlain + let update_global_cache = isGlobalId i && id_type == IdPlain -- fixme also allow caching entries for lifting? when (update_global_cache) $ do ===================================== compiler/GHC/StgToJS/Linker/Linker.hs ===================================== @@ -24,8 +24,6 @@ module GHC.StgToJS.Linker.Linker ( jsLinkBinary , jsLink , embedJsFile - , staticInitStat - , staticDeclStat , mkExportedFuns , mkExportedModFuns , computeLinkDependencies @@ -1253,27 +1251,22 @@ staticInitStat :: StaticInfo -> JS.JStat staticInitStat (StaticInfo i sv mcc) = jStgStatToJS $ case sv of - StaticData con args -> appS hdStiStr $ add_cc_arg - [ global i - , global con - , jsStaticArgs args - ] - StaticFun f args -> appS hdStiStr $ add_cc_arg - [ global i - , global f - , jsStaticArgs args - ] - StaticList args mt -> appS hdStlStr $ add_cc_arg - [ global i - , jsStaticArgs args - , toJExpr $ maybe null_ (toJExpr . TxtI) mt - ] - StaticThunk (Just (f,args)) -> appS hdStcStr $ add_cc_arg - [ global i - , global f - , jsStaticArgs args - ] - _ -> mempty + (StaticApp k app args) -> appS + (if k == SAKThunk then hdStcStr else hdStiStr) + $ add_cc_arg + [ global i + , global app + , jsStaticArgs args + ] + + StaticList args mt -> appS hdStlStr + $ add_cc_arg + [ global i + , jsStaticArgs args + , toJExpr $ maybe null_ (toJExpr . TxtI) mt + ] + + StaticUnboxed _ -> mempty where -- add optional cost-center argument add_cc_arg as = case mcc of @@ -1286,20 +1279,15 @@ staticDeclStat (StaticInfo global_name static_value _) = jStgStatToJS decl where global_ident = name global_name decl_init v = global_ident ||= v - decl_no_init = appS hdDiStr [toJExpr global_ident] decl = case static_value of StaticUnboxed u -> decl_init (unboxed_expr u) - StaticThunk Nothing -> decl_no_init -- CAF initialized in an alternative way _ -> decl_init (app hdDStr []) unboxed_expr = \case StaticUnboxedBool b -> app hdPStr [toJExpr b] StaticUnboxedInt i -> app hdPStr [toJExpr i] StaticUnboxedDouble d -> app hdPStr [toJExpr (unSaneDouble d)] - -- GHCJS used a function wrapper for this: - -- StaticUnboxedString str -> ApplExpr (initStr str) [] - -- But we are defining it statically for now. StaticUnboxedString str -> initStr str StaticUnboxedStringOffset {} -> 0 ===================================== compiler/GHC/StgToJS/Monad.hs ===================================== @@ -153,29 +153,28 @@ getGlobalIdCache = State.gets (ggsGlobalIdCache . gsGroup) setGlobalIdCache :: GlobalIdCache -> G () setGlobalIdCache v = State.modify (\s -> s { gsGroup = (gsGroup s) { ggsGlobalIdCache = v}}) - data GlobalOcc = GlobalOcc - { global_ident :: !Ident - , global_id :: !Id + { global_id :: !Id , global_count :: !Word } instance Outputable GlobalOcc where ppr g = hang (text "GlobalOcc") 2 $ vcat - [ hcat [text "Ident: ", ppr (global_ident g)] - , hcat [text "Id:", ppr (global_id g)] + [ hcat [text "Id:", ppr (global_id g)] , hcat [text "Count:", ppr (global_count g)] ] --- | Return number of occurrences of every global id used in the given JStgStat. +-- | Return occurrences of every global id used in the given JStgStat. -- Sort by increasing occurrence count. -globalOccs :: JStgStat -> G [GlobalOcc] +globalOccs :: JStgStat -> G [Id] globalOccs jst = do GlobalIdCache gidc <- getGlobalIdCache - -- build a map form Ident Unique to (Ident, Id, Count) + -- build a map form Ident Unique to (Id, Count) let cmp_cnt g1 g2 = compare (global_count g1) (global_count g2) inc g1 g2 = g1 { global_count = global_count g1 + global_count g2 } + + go :: UniqFM Id GlobalOcc -> [Ident] -> [GlobalOcc] go gids = \case [] -> -- return global Ids used locally sorted by increased use L.sortBy cmp_cnt $ nonDetEltsUFM gids @@ -186,7 +185,7 @@ globalOccs jst = do Just (_k,gid) -> -- add it to the list of already found global ids. Increasing -- count by 1 - let g = GlobalOcc i gid 1 - in go (addToUFM_C inc gids i g) is + let g = GlobalOcc gid 1 + in go (addToUFM_C inc gids gid g) is - pure $ go emptyUFM (identsS jst) + pure $ map global_id $ go emptyUFM $ identsS jst ===================================== compiler/GHC/StgToJS/Object.hs ===================================== @@ -615,16 +615,16 @@ instance Binary StaticInfo where get bh = StaticInfo <$> get bh <*> get bh <*> get bh instance Binary StaticVal where - put_ bh (StaticFun f args) = putByte bh 1 >> put_ bh f >> put_ bh args - put_ bh (StaticThunk t) = putByte bh 2 >> put_ bh t - put_ bh (StaticUnboxed u) = putByte bh 3 >> put_ bh u - put_ bh (StaticData dc args) = putByte bh 4 >> put_ bh dc >> put_ bh args - put_ bh (StaticList xs t) = putByte bh 5 >> put_ bh xs >> put_ bh t + put_ bh (StaticApp SAKFun f args) = putByte bh 1 >> put_ bh f >> put_ bh args + put_ bh (StaticApp SAKThunk f args) = putByte bh 2 >> put_ bh f >> put_ bh args + put_ bh (StaticUnboxed u) = putByte bh 3 >> put_ bh u + put_ bh (StaticApp SAKData dc args) = putByte bh 4 >> put_ bh dc >> put_ bh args + put_ bh (StaticList xs t) = putByte bh 5 >> put_ bh xs >> put_ bh t get bh = getByte bh >>= \case - 1 -> StaticFun <$> get bh <*> get bh - 2 -> StaticThunk <$> get bh + 1 -> StaticApp SAKFun <$> get bh <*> get bh + 2 -> StaticApp SAKThunk <$> get bh <*> get bh 3 -> StaticUnboxed <$> get bh - 4 -> StaticData <$> get bh <*> get bh + 4 -> StaticApp SAKData <$> get bh <*> get bh 5 -> StaticList <$> get bh <*> get bh n -> error ("Binary get bh StaticVal: invalid tag " ++ show n) ===================================== compiler/GHC/StgToJS/Symbols.hs ===================================== @@ -849,9 +849,6 @@ unknown = fsLit "" typeof :: FastString typeof = fsLit "typeof" -hdRawStr :: FastString -hdRawStr = fsLit "h$rstr" - throwStr :: FastString throwStr = fsLit "throw" @@ -1213,8 +1210,6 @@ hdStlStr = fsLit "h$stl" hdStiStr :: FastString hdStiStr = fsLit "h$sti" -hdStrStr :: FastString -hdStrStr = fsLit "h$str" ------------------------------ Pack/Unpack -------------------------------------------- hdDecodeUtf8Z :: FastString ===================================== compiler/GHC/StgToJS/Types.hs ===================================== @@ -231,18 +231,22 @@ data StaticInfo = StaticInfo , siCC :: !(Maybe Ident) -- ^ optional CCS name } deriving stock (Eq, Show) +data StaticAppKind + = SAKFun + -- ^ heap object for function + | SAKThunk + -- ^ heap object for CAF + | SAKData + -- ^ regular datacon app + deriving stock (Eq, Show) + data StaticVal - = StaticFun !FastString [StaticArg] - -- ^ heap object for function - | StaticThunk !(Maybe (FastString,[StaticArg])) - -- ^ heap object for CAF (field is Nothing when thunk is initialized in an - -- alternative way, like string thunks through h$str) - | StaticUnboxed !StaticUnboxed + = StaticUnboxed !StaticUnboxed -- ^ unboxed constructor (Bool, Int, Double etc) - | StaticData !FastString [StaticArg] - -- ^ regular datacon app | StaticList [StaticArg] (Maybe FastString) -- ^ list initializer (with optional tail) + | StaticApp StaticAppKind !FastString [StaticArg] + -- ^ static application of static args. Can be a CAF, a FUN, or a CON app. deriving stock (Eq, Show) data StaticUnboxed ===================================== rts/js/string.js ===================================== @@ -1,53 +1,5 @@ //#OPTIONS: CPP -// encode a string constant -function h$str(s) { - var enc = null; - return function() { - if(enc === null) { - enc = h$encodeModifiedUtf8(s); - } - return enc; - } -} - -// encode a packed string -// since \0 is used to separate strings (and a common occurrence) -// we add the following mapping: -// - \0 -> \cz\0 -// - \cz -> \cz\cz -// -// decoding to bytes, the following is produced: -// - \cz\0 -> C0 80 -// - \cz\cz -> 1A -// -// additionally, for dealing with raw binary data we have an escape sequence -// to pack base64 encoded runs: -// -// - \cz\xNN -> followed by NN-0x1f (31 decimal) bytes of base64 encoded -// data. supported range: 0x20 .. 0x9f (1-128 bytes data) -// - -function h$pstr(s) { - var enc = null; - return function() { - if(enc === null) { - enc = h$encodePackedUtf8(s); - } - return enc; - } -} -// encode a raw string from bytes -function h$rstr(d) { - var enc = null; - return function() { - if(enc === null) { - enc = h$rawStringData(d); - } - return enc; - } -} - // these aren't added to the CAFs, so the list stays in mem indefinitely, is that a problem? #ifdef GHCJS_PROF function h$strt(str, cc) { return MK_LAZY_CC(function() { return h$toHsString(str, cc); }, cc); } @@ -265,10 +217,27 @@ function h$encodeUtf8(str) { return h$encodeUtf8Internal(str, false, false); } +// encode a string constant function h$encodeModifiedUtf8(str) { return h$encodeUtf8Internal(str, true, false); } +// encode a packed string +// since \0 is used to separate strings (and a common occurrence) +// we add the following mapping: +// - \0 -> \cz\0 +// - \cz -> \cz\cz +// +// decoding to bytes, the following is produced: +// - \cz\0 -> C0 80 +// - \cz\cz -> 1A +// +// additionally, for dealing with raw binary data we have an escape sequence +// to pack base64 encoded runs: +// +// - \cz\xNN -> followed by NN-0x1f (31 decimal) bytes of base64 encoded +// data. supported range: 0x20 .. 0x9f (1-128 bytes data) +// function h$encodePackedUtf8(str) { return h$encodeUtf8Internal(str, false, true); } ===================================== testsuite/tests/javascript/Makefile ===================================== @@ -13,20 +13,21 @@ T24495: # check that the optimization occurred for -02 1 time (1 for unfloated lits) grep -c appendToHsStringA T24495.dump-js -T23479_1: - '$(TEST_HC)' $(TEST_HC_OPTS) T23479_1.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file - ./T23479_1 +T23479: + '$(TEST_HC)' $(TEST_HC_OPTS) T23479.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file + ./T23479 # check that the optimization occurred - grep -c "h\$$r1 = \"test_val_1\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_2\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_3\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_80_local" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_80_global" T23479_1.dump-js || true + grep -c "h\$$r1 = \"test_val_1\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_2\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_3\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_80_local" T23479.dump-js + grep -c "h\$$r1 = \"test_val_80_global" T23479.dump-js || true -T23479_2: - '$(TEST_HC)' $(TEST_HC_OPTS) T23479_2.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file - ./T23479_2 - grep -c "h\$$r1 = \"test_val_1\"" T23479_2.dump-js - grep -c "h\$$r1 = \"test_val_80_local_once" T23479_2.dump-js +T24744: + '$(TEST_HC)' $(TEST_HC_OPTS) T24744.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file + ./T24744 + grep -c "h\$$r1 = \"test_val_1\"" T24744.dump-js + grep -c "h\$$r1 = \"test_val_80_local_once" T24744.dump-js # check that the optimization occurred - grep -c "h\$$r1 = h\$$decodeUtf8z" T23479_2.dump-js + grep -c "h\$$r1 = h\$$decodeUtf8z" T24744.dump-js + grep -c "h\$$stc(h\$$mainZCMainzitestzuvalzu80zulocal,h\$$mainZCMainzitestzuvalzu80zulocal_e,\[h\$$ghczmprimZCGHCziCStringziunpackCStringzh,h\$$mainZCMainzimain7_1,h\$$mainZCMainzimain7_2\])" T24744.jsexe/out.js ===================================== testsuite/tests/javascript/T23479_1.hs → testsuite/tests/javascript/T23479.hs ===================================== ===================================== testsuite/tests/javascript/T23479_1.stdout → testsuite/tests/javascript/T23479.stdout ===================================== ===================================== testsuite/tests/javascript/T23479_2.hs → testsuite/tests/javascript/T24744.hs ===================================== ===================================== testsuite/tests/javascript/T23479_2.stdout → testsuite/tests/javascript/T24744.stdout ===================================== ===================================== testsuite/tests/javascript/all.T ===================================== @@ -23,5 +23,5 @@ test('T22455', normal, compile_and_run, ['-ddisable-js-minifier']) test('T23565', normal, compile_and_run, ['']) test('T24495', normal, makefile_test, ['T24495']) -test('T23479_1', normal, makefile_test, ['T23479_1']) -test('T23479_2', normal, makefile_test, ['T23479_2']) +test('T23479', normal, makefile_test, ['T23479']) +test('T24744', normal, makefile_test, ['T24744']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bd3030470597c5cb7a9206fb1b9420fc1b1ea4ea...0c6bcea42e46dc693185327795d86f8db2fbc0aa -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bd3030470597c5cb7a9206fb1b9420fc1b1ea4ea...0c6bcea42e46dc693185327795d86f8db2fbc0aa You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 8 11:26:41 2024 From: gitlab at gitlab.haskell.org (Serge S. Gulin (@gulin.serge)) Date: Sun, 08 Dec 2024 06:26:41 -0500 Subject: [Git][ghc/ghc][wip/T24744] JS: Specialize unpackCString# CAFs (fixes #24744) Message-ID: <675582718a940_2e276835da541522f@gitlab.mail> Serge S. Gulin pushed to branch wip/T24744 at Glasgow Haskell Compiler / GHC Commits: b5e57b55 by Serge S. Gulin at 2024-12-08T14:24:13+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - 10 changed files: - compiler/GHC/StgToJS/Apply.hs - compiler/GHC/StgToJS/CodeGen.hs - compiler/GHC/StgToJS/Ids.hs - compiler/GHC/StgToJS/Monad.hs - testsuite/tests/javascript/Makefile - testsuite/tests/javascript/T23479_1.hs → testsuite/tests/javascript/T23479.hs - testsuite/tests/javascript/T23479_1.stdout → testsuite/tests/javascript/T23479.stdout - testsuite/tests/javascript/T23479_2.hs → testsuite/tests/javascript/T24744.hs - testsuite/tests/javascript/T23479_2.stdout → testsuite/tests/javascript/T24744.stdout - testsuite/tests/javascript/all.T Changes: ===================================== compiler/GHC/StgToJS/Apply.hs ===================================== @@ -100,7 +100,7 @@ genApp -> [StgArg] -> G (JStgStat, ExprResult) genApp ctx i args - -- Test case T23479_2 + -- Test case moved to T24744 -- See: https://github.com/ghcjs/ghcjs/blob/b7711fbca7c3f43a61f1dba526e6f2a2656ef44c/src/Gen2/Generator.hs#L876 -- Comment by Luite Stegeman -- Special cases for JSString literals. @@ -119,7 +119,7 @@ genApp ctx i args , [top] <- concatMap typex_expr (ctxTarget ctx) = (,ExprInline) . (|=) top . app hdDecodeUtf8Z <$> varsForId v - -- Test case T23479_1 + -- Test case T23479 | [StgLitArg (LitString bs)] <- args , Just d <- decodeModifiedUTF8 bs , idName i == unsafeUnpackJSStringUtf8ShShName ===================================== compiler/GHC/StgToJS/CodeGen.hs ===================================== @@ -48,6 +48,7 @@ import GHC.Types.ForeignStubs (ForeignStubs (..), getCHeader, getCStub) import GHC.Types.RepType import GHC.Types.Id import GHC.Types.Unique +import GHC.Types.Unique.FM (nonDetEltsUFM) import GHC.Data.FastString import GHC.Utils.Encoding @@ -60,6 +61,7 @@ import GHC.Utils.Outputable hiding ((<>)) import qualified Data.Set as S import Data.Monoid +import Data.List (sortBy) import Control.Monad import System.Directory import System.FilePath @@ -327,10 +329,12 @@ genToplevelRhs i rhs = case rhs of eid <- identForEntryId i idt <- identFS <$> identForId i body <- genBody (initExprCtx i) R2 args body typ - global_occs <- globalOccs body + occs <- globalOccs body + let lids = global_id <$> (sortBy cmp_cnt $ nonDetEltsUFM occs) + -- Regenerate idents from lids to restore right order of representatives. + -- Representatives have occurrence order which can be mixed. + lidents <- concat <$> traverse identsForId lids let eidt = identFS eid - let lidents = map global_ident global_occs - let lids = map global_id global_occs let lidents' = map identFS lidents CIStaticRefs sr0 <- genStaticRefsRhs rhs let sri = filter (`notElem` lidents') sr0 @@ -361,3 +365,6 @@ genToplevelRhs i rhs = case rhs of ccId <- costCentreStackLbl cc emitStatic idt (StaticApp appK eidt $ map StaticObjArg lidents') ccId return $ (FuncStat eid [] (ll <> upd <> setcc <> body)) + where + cmp_cnt :: GlobalOcc -> GlobalOcc -> Ordering + cmp_cnt g1 g2 = compare (global_count g1) (global_count g2) ===================================== compiler/GHC/StgToJS/Ids.hs ===================================== @@ -155,7 +155,7 @@ cachedIdentForId i mi id_type = do -- Now update the GlobalId cache, if required - let update_global_cache = isGlobalId i && isNothing mi && id_type == IdPlain + let update_global_cache = isGlobalId i && id_type == IdPlain -- fixme also allow caching entries for lifting? when (update_global_cache) $ do ===================================== compiler/GHC/StgToJS/Monad.hs ===================================== @@ -45,7 +45,6 @@ import GHC.Data.FastMutInt import qualified Data.Map as M import qualified Data.Set as S -import qualified Data.List as L runG :: StgToJSConfig -> Module -> UniqFM Id CgStgExpr -> G a -> IO a runG config m unfloat action = State.evalStateT action =<< initState config m unfloat @@ -153,32 +152,30 @@ getGlobalIdCache = State.gets (ggsGlobalIdCache . gsGroup) setGlobalIdCache :: GlobalIdCache -> G () setGlobalIdCache v = State.modify (\s -> s { gsGroup = (gsGroup s) { ggsGlobalIdCache = v}}) - data GlobalOcc = GlobalOcc - { global_ident :: !Ident - , global_id :: !Id + { global_id :: !Id , global_count :: !Word } instance Outputable GlobalOcc where ppr g = hang (text "GlobalOcc") 2 $ vcat - [ hcat [text "Ident: ", ppr (global_ident g)] - , hcat [text "Id:", ppr (global_id g)] + [ hcat [text "Id:", ppr (global_id g)] , hcat [text "Count:", ppr (global_count g)] ] --- | Return number of occurrences of every global id used in the given JStgStat. +-- | Return occurrences of every global id used in the given JStgStat. -- Sort by increasing occurrence count. -globalOccs :: JStgStat -> G [GlobalOcc] +globalOccs :: JStgStat -> G (UniqFM Id GlobalOcc) globalOccs jst = do GlobalIdCache gidc <- getGlobalIdCache - -- build a map form Ident Unique to (Ident, Id, Count) + -- build a map form Ident Unique to (Id, Count) + -- Note that different Idents can map to the same Id (e.g. string payload and string offset idents) let - cmp_cnt g1 g2 = compare (global_count g1) (global_count g2) inc g1 g2 = g1 { global_count = global_count g1 + global_count g2 } + + go :: UniqFM Id GlobalOcc -> [Ident] -> UniqFM Id GlobalOcc go gids = \case - [] -> -- return global Ids used locally sorted by increased use - L.sortBy cmp_cnt $ nonDetEltsUFM gids + [] -> gids (i:is) -> -- check if the Id is global case lookupUFM gidc i of @@ -186,7 +183,7 @@ globalOccs jst = do Just (_k,gid) -> -- add it to the list of already found global ids. Increasing -- count by 1 - let g = GlobalOcc i gid 1 - in go (addToUFM_C inc gids i g) is + let g = GlobalOcc gid 1 + in go (addToUFM_C inc gids gid g) is - pure $ go emptyUFM (identsS jst) + pure $ go emptyUFM $ identsS jst ===================================== testsuite/tests/javascript/Makefile ===================================== @@ -13,20 +13,21 @@ T24495: # check that the optimization occurred for -02 1 time (1 for unfloated lits) grep -c appendToHsStringA T24495.dump-js -T23479_1: - '$(TEST_HC)' $(TEST_HC_OPTS) T23479_1.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file - ./T23479_1 +T23479: + '$(TEST_HC)' $(TEST_HC_OPTS) T23479.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file + ./T23479 # check that the optimization occurred - grep -c "h\$$r1 = \"test_val_1\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_2\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_3\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_80_local" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_80_global" T23479_1.dump-js || true + grep -c "h\$$r1 = \"test_val_1\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_2\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_3\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_80_local" T23479.dump-js + grep -c "h\$$r1 = \"test_val_80_global" T23479.dump-js || true -T23479_2: - '$(TEST_HC)' $(TEST_HC_OPTS) T23479_2.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file - ./T23479_2 - grep -c "h\$$r1 = \"test_val_1\"" T23479_2.dump-js - grep -c "h\$$r1 = \"test_val_80_local_once" T23479_2.dump-js +T24744: + '$(TEST_HC)' $(TEST_HC_OPTS) T24744.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file + ./T24744 + grep -c "h\$$r1 = \"test_val_1\"" T24744.dump-js + grep -c "h\$$r1 = \"test_val_80_local_once" T24744.dump-js # check that the optimization occurred - grep -c "h\$$r1 = h\$$decodeUtf8z" T23479_2.dump-js + grep -c "h\$$r1 = h\$$decodeUtf8z" T24744.dump-js + grep -c "h\$$stc(h\$$mainZCMainzitestzuvalzu80zulocal,h\$$mainZCMainzitestzuvalzu80zulocal_e,\[h\$$ghczmprimZCGHCziCStringziunpackCStringzh,h\$$mainZCMainzimain7_1,h\$$mainZCMainzimain7_2\])" T24744.jsexe/out.js ===================================== testsuite/tests/javascript/T23479_1.hs → testsuite/tests/javascript/T23479.hs ===================================== ===================================== testsuite/tests/javascript/T23479_1.stdout → testsuite/tests/javascript/T23479.stdout ===================================== ===================================== testsuite/tests/javascript/T23479_2.hs → testsuite/tests/javascript/T24744.hs ===================================== ===================================== testsuite/tests/javascript/T23479_2.stdout → testsuite/tests/javascript/T24744.stdout ===================================== ===================================== testsuite/tests/javascript/all.T ===================================== @@ -23,5 +23,5 @@ test('T22455', normal, compile_and_run, ['-ddisable-js-minifier']) test('T23565', normal, compile_and_run, ['']) test('T24495', normal, makefile_test, ['T24495']) -test('T23479_1', normal, makefile_test, ['T23479_1']) -test('T23479_2', normal, makefile_test, ['T23479_2']) +test('T23479', normal, makefile_test, ['T23479']) +test('T24744', normal, makefile_test, ['T24744']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b5e57b557c5740906118087ceffdd042c1efb6bb -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b5e57b557c5740906118087ceffdd042c1efb6bb You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 8 18:39:49 2024 From: gitlab at gitlab.haskell.org (Serge S. Gulin (@gulin.serge)) Date: Sun, 08 Dec 2024 13:39:49 -0500 Subject: [Git][ghc/ghc][wip/T24744] JS: Specialize unpackCString# CAFs (fixes #24744) Message-ID: <6755e7f518712_91610150f360366af@gitlab.mail> Serge S. Gulin pushed to branch wip/T24744 at Glasgow Haskell Compiler / GHC Commits: b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - 10 changed files: - compiler/GHC/StgToJS/Apply.hs - compiler/GHC/StgToJS/CodeGen.hs - compiler/GHC/StgToJS/Ids.hs - compiler/GHC/StgToJS/Monad.hs - testsuite/tests/javascript/Makefile - testsuite/tests/javascript/T23479_1.hs → testsuite/tests/javascript/T23479.hs - testsuite/tests/javascript/T23479_1.stdout → testsuite/tests/javascript/T23479.stdout - testsuite/tests/javascript/T23479_2.hs → testsuite/tests/javascript/T24744.hs - testsuite/tests/javascript/T23479_2.stdout → testsuite/tests/javascript/T24744.stdout - testsuite/tests/javascript/all.T Changes: ===================================== compiler/GHC/StgToJS/Apply.hs ===================================== @@ -100,7 +100,7 @@ genApp -> [StgArg] -> G (JStgStat, ExprResult) genApp ctx i args - -- Test case T23479_2 + -- Test case moved to T24744 -- See: https://github.com/ghcjs/ghcjs/blob/b7711fbca7c3f43a61f1dba526e6f2a2656ef44c/src/Gen2/Generator.hs#L876 -- Comment by Luite Stegeman -- Special cases for JSString literals. @@ -119,7 +119,7 @@ genApp ctx i args , [top] <- concatMap typex_expr (ctxTarget ctx) = (,ExprInline) . (|=) top . app hdDecodeUtf8Z <$> varsForId v - -- Test case T23479_1 + -- Test case T23479 | [StgLitArg (LitString bs)] <- args , Just d <- decodeModifiedUTF8 bs , idName i == unsafeUnpackJSStringUtf8ShShName ===================================== compiler/GHC/StgToJS/CodeGen.hs ===================================== @@ -48,6 +48,7 @@ import GHC.Types.ForeignStubs (ForeignStubs (..), getCHeader, getCStub) import GHC.Types.RepType import GHC.Types.Id import GHC.Types.Unique +import GHC.Types.Unique.FM (nonDetEltsUFM) import GHC.Data.FastString import GHC.Utils.Encoding @@ -60,6 +61,7 @@ import GHC.Utils.Outputable hiding ((<>)) import qualified Data.Set as S import Data.Monoid +import Data.List (sortBy) import Control.Monad import System.Directory import System.FilePath @@ -327,10 +329,12 @@ genToplevelRhs i rhs = case rhs of eid <- identForEntryId i idt <- identFS <$> identForId i body <- genBody (initExprCtx i) R2 args body typ - global_occs <- globalOccs body + occs <- globalOccs body + let lids = global_id <$> (sortBy cmp_cnt $ nonDetEltsUFM occs) + -- Regenerate idents from lids to restore right order of representatives. + -- Representatives have occurrence order which can be mixed. + lidents <- concat <$> traverse identsForId lids let eidt = identFS eid - let lidents = map global_ident global_occs - let lids = map global_id global_occs let lidents' = map identFS lidents CIStaticRefs sr0 <- genStaticRefsRhs rhs let sri = filter (`notElem` lidents') sr0 @@ -361,3 +365,6 @@ genToplevelRhs i rhs = case rhs of ccId <- costCentreStackLbl cc emitStatic idt (StaticApp appK eidt $ map StaticObjArg lidents') ccId return $ (FuncStat eid [] (ll <> upd <> setcc <> body)) + where + cmp_cnt :: GlobalOcc -> GlobalOcc -> Ordering + cmp_cnt g1 g2 = compare (global_count g1) (global_count g2) ===================================== compiler/GHC/StgToJS/Ids.hs ===================================== @@ -155,7 +155,7 @@ cachedIdentForId i mi id_type = do -- Now update the GlobalId cache, if required - let update_global_cache = isGlobalId i && isNothing mi && id_type == IdPlain + let update_global_cache = isGlobalId i && id_type == IdPlain -- fixme also allow caching entries for lifting? when (update_global_cache) $ do ===================================== compiler/GHC/StgToJS/Monad.hs ===================================== @@ -45,7 +45,6 @@ import GHC.Data.FastMutInt import qualified Data.Map as M import qualified Data.Set as S -import qualified Data.List as L runG :: StgToJSConfig -> Module -> UniqFM Id CgStgExpr -> G a -> IO a runG config m unfloat action = State.evalStateT action =<< initState config m unfloat @@ -153,32 +152,30 @@ getGlobalIdCache = State.gets (ggsGlobalIdCache . gsGroup) setGlobalIdCache :: GlobalIdCache -> G () setGlobalIdCache v = State.modify (\s -> s { gsGroup = (gsGroup s) { ggsGlobalIdCache = v}}) - data GlobalOcc = GlobalOcc - { global_ident :: !Ident - , global_id :: !Id + { global_id :: !Id , global_count :: !Word } instance Outputable GlobalOcc where ppr g = hang (text "GlobalOcc") 2 $ vcat - [ hcat [text "Ident: ", ppr (global_ident g)] - , hcat [text "Id:", ppr (global_id g)] + [ hcat [text "Id:", ppr (global_id g)] , hcat [text "Count:", ppr (global_count g)] ] --- | Return number of occurrences of every global id used in the given JStgStat. +-- | Return occurrences of every global id used in the given JStgStat. -- Sort by increasing occurrence count. -globalOccs :: JStgStat -> G [GlobalOcc] +globalOccs :: JStgStat -> G (UniqFM Id GlobalOcc) globalOccs jst = do GlobalIdCache gidc <- getGlobalIdCache - -- build a map form Ident Unique to (Ident, Id, Count) + -- build a map form Ident Unique to (Id, Count) + -- Note that different Idents can map to the same Id (e.g. string payload and string offset idents) let - cmp_cnt g1 g2 = compare (global_count g1) (global_count g2) inc g1 g2 = g1 { global_count = global_count g1 + global_count g2 } + + go :: UniqFM Id GlobalOcc -> [Ident] -> UniqFM Id GlobalOcc go gids = \case - [] -> -- return global Ids used locally sorted by increased use - L.sortBy cmp_cnt $ nonDetEltsUFM gids + [] -> gids (i:is) -> -- check if the Id is global case lookupUFM gidc i of @@ -186,7 +183,7 @@ globalOccs jst = do Just (_k,gid) -> -- add it to the list of already found global ids. Increasing -- count by 1 - let g = GlobalOcc i gid 1 - in go (addToUFM_C inc gids i g) is + let g = GlobalOcc gid 1 + in go (addToUFM_C inc gids gid g) is - pure $ go emptyUFM (identsS jst) + pure $ go emptyUFM $ identsS jst ===================================== testsuite/tests/javascript/Makefile ===================================== @@ -13,20 +13,21 @@ T24495: # check that the optimization occurred for -02 1 time (1 for unfloated lits) grep -c appendToHsStringA T24495.dump-js -T23479_1: - '$(TEST_HC)' $(TEST_HC_OPTS) T23479_1.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file - ./T23479_1 +T23479: + '$(TEST_HC)' $(TEST_HC_OPTS) T23479.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file + ./T23479 # check that the optimization occurred - grep -c "h\$$r1 = \"test_val_1\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_2\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_3\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_80_local" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_80_global" T23479_1.dump-js || true + grep -c "h\$$r1 = \"test_val_1\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_2\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_3\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_80_local" T23479.dump-js + grep -c "h\$$r1 = \"test_val_80_global" T23479.dump-js || true -T23479_2: - '$(TEST_HC)' $(TEST_HC_OPTS) T23479_2.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file - ./T23479_2 - grep -c "h\$$r1 = \"test_val_1\"" T23479_2.dump-js - grep -c "h\$$r1 = \"test_val_80_local_once" T23479_2.dump-js +T24744: + '$(TEST_HC)' $(TEST_HC_OPTS) T24744.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file + ./T24744 + grep -c "h\$$r1 = \"test_val_1\"" T24744.dump-js + grep -c "h\$$r1 = \"test_val_80_local_once" T24744.dump-js # check that the optimization occurred - grep -c "h\$$r1 = h\$$decodeUtf8z" T23479_2.dump-js + grep -c "h\$$r1 = h\$$decodeUtf8z" T24744.dump-js + grep -c "h\$$stc(h\$$mainZCMainzitestzuvalzu80zulocal,h\$$mainZCMainzitestzuvalzu80zulocal_e,\[h\$$ghczmprimZCGHCziCStringziunpackCStringzh,h\$$mainZCMainzimain7_1,h\$$mainZCMainzimain7_2\])" T24744.jsexe/out.js ===================================== testsuite/tests/javascript/T23479_1.hs → testsuite/tests/javascript/T23479.hs ===================================== ===================================== testsuite/tests/javascript/T23479_1.stdout → testsuite/tests/javascript/T23479.stdout ===================================== ===================================== testsuite/tests/javascript/T23479_2.hs → testsuite/tests/javascript/T24744.hs ===================================== ===================================== testsuite/tests/javascript/T23479_2.stdout → testsuite/tests/javascript/T24744.stdout ===================================== @@ -6,3 +6,4 @@ testFn:test_val_1 1 1 1 +1 ===================================== testsuite/tests/javascript/all.T ===================================== @@ -23,5 +23,5 @@ test('T22455', normal, compile_and_run, ['-ddisable-js-minifier']) test('T23565', normal, compile_and_run, ['']) test('T24495', normal, makefile_test, ['T24495']) -test('T23479_1', normal, makefile_test, ['T23479_1']) -test('T23479_2', normal, makefile_test, ['T23479_2']) +test('T23479', normal, makefile_test, ['T23479']) +test('T24744', normal, makefile_test, ['T24744']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b519c06b889139f7e24f1e84d2e30461cc6cf4a5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b519c06b889139f7e24f1e84d2e30461cc6cf4a5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 10:22:59 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Mon, 09 Dec 2024 05:22:59 -0500 Subject: [Git][ghc/ghc][wip/romes/refator-modulegraph] 42 commits: driver: Always link against "base" package when one shot linking Message-ID: <6756c503dec0e_1f502c222f11c7339e@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/refator-modulegraph at Glasgow Haskell Compiler / GHC Commits: 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - c5bc85f9 by Rodrigo Mesquita at 2024-12-09T10:22:41+00:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 30 changed files: - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - compiler/GHC/Builtin/Names.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Backpack.hs - compiler/GHC/Driver/Config/Parser.hs - compiler/GHC/Driver/DynFlags.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/Pipeline/Execute.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Parser/HaddockLex.x - compiler/GHC/Parser/Header.hs - compiler/GHC/Parser/Lexer.x - compiler/GHC/Rename/Pat.hs - compiler/GHC/Settings.hs - compiler/GHC/Settings/IO.hs - compiler/GHC/SysTools/Process.hs - compiler/GHC/Tc/Errors/Ppr.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Tc/Gen/Bind.hs - compiler/GHC/Tc/Gen/Expr.hs - compiler/GHC/Types/Error/Codes.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b6656976228dad970bbab4a7ab144b5e07f83882...c5bc85f9ab93debb98a177c284dd560d0fc2adce -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b6656976228dad970bbab4a7ab144b5e07f83882...c5bc85f9ab93debb98a177c284dd560d0fc2adce You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 13:02:14 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Mon, 09 Dec 2024 08:02:14 -0500 Subject: [Git][ghc/ghc][ghc-9.10] 6 commits: Add HasCallStack to T23221 Message-ID: <6756ea568dfa1_13d5a84e0584651e7@gitlab.mail> Andreas Klebinger pushed to branch ghc-9.10 at Glasgow Haskell Compiler / GHC Commits: 13f3cc8f by Teo Camarasu at 2024-12-06T16:59:29+01:00 Add HasCallStack to T23221 This makes the test a bit easier to debug (cherry picked from commit 18c495c1bf3e37daf0030c983ffdd7697eb4072b) - - - - - 6986a1ef by Teo Camarasu at 2024-12-06T17:07:50+01:00 rts: use live words to estimate heap size We use live words rather than live blocks to determine the size of the heap for determining memory retention. Most of the time these two metrics align, but they can come apart in normal usage when using the nonmoving collector. The nonmoving collector leads to a lot of partially occupied blocks. So, using live words is more accurate. They can also come apart when the heap is suffering from high levels fragmentation caused by small pinned objects, but in this case, the block size is the more accurate metric. Since this case is best avoided anyway. It is ok to accept the trade-off that we might try (and probably) fail to return more memory in this case. See also the Note [Statistics for retaining memory] Resolves #23397 (cherry picked from commit 2f71e8b0dc346d3b74cf1ea6da8c63f9c9fe2073) - - - - - 9bcf1f1c by ur4t at 2024-12-06T17:10:53+01:00 GHCi: fix improper location of ghci_history file Fixes #24266 (cherry picked from commit 6f0a62db5dc79640433c61e83ea1427665304869) - - - - - 82616fb0 by Andreas Klebinger at 2024-12-06T17:14:58+01:00 Mention .ghci_history XGD changes in changelog. - - - - - 25d72bab by Cheng Shao at 2024-12-06T17:18:03+01:00 rts: do not prefetch mark_closure bdescr in non-moving gc when ASSERTS_ENABLED This commit fixes a small an oversight in !12148: the prefetch logic in non-moving GC may trap in debug RTS because it calls Bdescr() for mark_closure which may be a static one. It's fine in non-debug RTS because even invalid bdescr addresses are prefetched, they will not cause segfaults, so this commit implements the most straightforward fix: don't prefetch mark_closure bdescr when assertions are enabled. (cherry picked from commit 8f74b38148f0d8b9341099cb0edda6f7698a4369) - - - - - 8958612c by Teo Camarasu at 2024-12-06T17:20:07+01:00 rts: Allocate non-moving segments with megablocks Non-moving segments are 8 blocks long and need to be aligned. Previously we serviced allocations by grabbing 15 blocks, finding an aligned 8 block group in it and returning the rest. This proved to lead to high levels of fragmentation as a de-allocating a segment caused an 8 block gap to form, and this could not be reused for allocation. This patch introduces a segment allocator based around using entire megablocks to service segment allocations in bulk. When there are no free segments, we grab an entire megablock and fill it with aligned segments. As the megablock is free, we can easily guarantee alignment. Any unused segments are placed on a free list. It only makes sense to free segments in bulk when all of the segments in a megablock are freeable. After sweeping, we grab the free list, sort it, and find all groups of segments where they cover the megablock and free them. This introduces a period of time when free segments are not available to the mutator, but the risk that this would lead to excessive allocation is low. Right after sweep, we should have an abundance of partially full segments, and this pruning step is relatively quick. In implementing this we drop the logic that kept NONMOVING_MAX_FREE segments on the free list. We also introduce an eventlog event to log the amount of pruned/retained free segments. See Note [Segment allocation strategy] Resolves #24150 ------------------------- Metric Decrease: T13253 T19695 ------------------------- (cherry picked from commit 5e36e7ced6a8aa183762e1df97da20b460e19bcf) - - - - - 22 changed files: - + docs/users_guide/9.10.2-notes.rst - docs/users_guide/eventlog-formats.rst - ghc/GHCi/UI.hs - rts/RtsStartup.c - rts/Trace.c - rts/Trace.h - rts/eventlog/EventLog.c - rts/eventlog/EventLog.h - rts/gen_event_types.py - rts/include/rts/storage/Block.h - rts/include/stg/SMP.h - rts/sm/BlockAlloc.c - rts/sm/GC.c - rts/sm/NonMoving.c - rts/sm/NonMoving.h - rts/sm/NonMovingAllocate.c - rts/sm/NonMovingMark.c - rts/sm/Sanity.c - rts/sm/Storage.c - rts/sm/Storage.h - testsuite/tests/rts/T23221.hs - testsuite/tests/rts/atomicinc.c Changes: ===================================== docs/users_guide/9.10.2-notes.rst ===================================== @@ -0,0 +1,74 @@ +.. _release-9-10-1: + +Version 9.10.2 +============== +The significant changes to the various parts of the compiler are listed in the +following sections. See the `migration guide +`_ on the GHC Wiki +for specific guidance on migrating programs to this release. + +Language +~~~~~~~~ + + + +Compiler +~~~~~~~~ + + + +JavaScript backend +~~~~~~~~~~~~~~~~~~ + + + +WebAssembly backend +~~~~~~~~~~~~~~~~~~~ + + +GHCi +~~~~ + +- When using XDG directories ``.ghci_history`` now uses the ``$XDG_DATA_HOME`` variable as expected. (#24266) + +Runtime system +~~~~~~~~~~~~~~ + +- Memory return logic now uses live bytes rather than live blocks to measure the size of the heap. + This primarily affects the non-moving GC, which should now be more willing to return memory to the OS. + Users who have fine-tuned the :rts-flag:`-F ⟨factor⟩`, :rts-flag:`-Fd ⟨factor⟩`, or :rts-flag:`-O ⟨size⟩` flags, + and use the non-moving GC, should see if adjustments are needed in light of this change. + +- Reduce fragmentation incurred by the nonmoving GC's segment allocator. In one application this reduced resident set size by 26%. See :ghc-ticket:`24150`. + + +``base`` library +~~~~~~~~~~~~~~~~ + + + + +``ghc-prim`` library +~~~~~~~~~~~~~~~~~~~~ + + +``ghc`` library +~~~~~~~~~~~~~~~ + +``ghc-heap`` library +~~~~~~~~~~~~~~~~~~~~ + +``ghc-experimental`` library +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +``template-haskell`` library +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Included libraries +~~~~~~~~~~~~~~~~~~ + +The package database provided with this distribution also contains a number of +packages other than GHC itself. See the changelogs provided with these packages +for further change information. ===================================== docs/users_guide/eventlog-formats.rst ===================================== @@ -855,6 +855,9 @@ A typical non-moving collection cycle will look something like the following: 12. A :event-type:`NONMOVING_HEAP_CENSUS` event will be emitted describing the fragmentation state of the non-moving heap. +13. A :event-type:`NONMOVING_PRUNED_SEGMENTS` event will be emitted showing + information about freeing of segments. + .. event-type:: CONC_MARK_BEGIN @@ -929,6 +932,17 @@ heap. Describes the occupancy of the *blk_sz* sub-heap. +.. event-type:: NONMOVING_PRUNED_SEGMENTS + + :tag: 208 + :length: fixed + :field Word32: number of pruned segments. + :field Word32: number of segments remaining on the free list. + + Report the amount of segments pruned and those remaining on the nonmoving + heap's segment free list. Segments will be retained on the free list until + the entire megablock containing them can be freed. + .. _ticky-event-format: Ticky counters ===================================== ghc/GHCi/UI.hs ===================================== @@ -640,30 +640,27 @@ ghciLogAction lastErrLocations old_log_action _ -> return () _ -> return () --- | Takes a file name and prefixes it with the appropriate --- GHC appdir. --- Uses ~/.ghc (getAppUserDataDirectory) if it exists --- If it doesn't, then it uses $XDG_DATA_HOME/ghc --- Earlier we always used to use ~/.ghc, but we want --- to gradually move to $XDG_DATA_HOME to respect the XDG specification --- --- As a migration strategy, we will only create new directories in --- the appropriate XDG location. However, we will use the old directory --- if it already exists. -getAppDataFile :: FilePath -> IO (Maybe FilePath) -getAppDataFile file = do - let new_path = tryIO (getXdgDirectory XdgConfig "ghc") >>= \case - Left _ -> pure Nothing - Right dir -> flip catchIO (const $ return Nothing) $ do - createDirectoryIfMissing False dir - pure $ Just $ dir file - - e_old_path <- tryIO (getAppUserDataDirectory "ghc") - case e_old_path of - Right old_path -> doesDirectoryExist old_path >>= \case - True -> pure $ Just $ old_path file - False -> new_path - Left _ -> new_path +-- | Takes a file name and prefixes it with the appropriate GHC appdir. +-- ~/.ghc (getAppUserDataDirectory) is used if it exists, or XDG directories +-- are used to respect the XDG specification. +-- As a migration strategy, currently we will only create new directories in +-- the appropriate XDG location. +getAppDataFile :: XdgDirectory -> FilePath -> IO (Maybe FilePath) +getAppDataFile xdgDir file = do + xdgAppDir <- + tryIO (getXdgDirectory xdgDir "ghc") >>= \case + Left _ -> pure Nothing + Right dir -> flip catchIO (const $ pure Nothing) $ do + createDirectoryIfMissing False dir + pure $ Just dir + appDir <- + tryIO (getAppUserDataDirectory "ghc") >>= \case + Right dir -> + doesDirectoryExist dir >>= \case + True -> pure $ Just dir + False -> pure xdgAppDir + Left _ -> pure xdgAppDir + pure $ appDir >>= \dir -> Just $ dir file runGHCi :: [(FilePath, Maybe UnitId, Maybe Phase)] -> Maybe [String] -> GHCi () runGHCi paths maybe_exprs = do @@ -671,13 +668,12 @@ runGHCi paths maybe_exprs = do let ignore_dot_ghci = gopt Opt_IgnoreDotGhci dflags - app_user_dir = liftIO $ getAppDataFile "ghci.conf" + appDataCfg = liftIO $ getAppDataFile XdgConfig "ghci.conf" - home_dir = do - either_dir <- liftIO $ tryIO (getEnv "HOME") - case either_dir of - Right home -> return (Just (home ".ghci")) - _ -> return Nothing + homeCfg = do + liftIO $ tryIO (getEnv "HOME") >>= \case + Right home -> pure $ Just $ home ".ghci" + _ -> pure Nothing canonicalizePath' :: FilePath -> IO (Maybe FilePath) canonicalizePath' fp = liftM Just (canonicalizePath fp) @@ -711,7 +707,7 @@ runGHCi paths maybe_exprs = do then pure [] else do userCfgs <- do - paths <- catMaybes <$> sequence [ app_user_dir, home_dir ] + paths <- catMaybes <$> sequence [ appDataCfg, homeCfg ] checkedPaths <- liftIO $ filterM checkFileAndDirPerms paths liftIO . fmap (nub . catMaybes) $ mapM canonicalizePath' checkedPaths @@ -798,12 +794,12 @@ runGHCiInput f = do dflags <- getDynFlags let ghciHistory = gopt Opt_GhciHistory dflags let localGhciHistory = gopt Opt_LocalGhciHistory dflags - currentDirectory <- liftIO $ getCurrentDirectory + currentDirectory <- liftIO getCurrentDirectory histFile <- case (ghciHistory, localGhciHistory) of - (True, True) -> return (Just (currentDirectory ".ghci_history")) - (True, _) -> liftIO $ getAppDataFile "ghci_history" - _ -> return Nothing + (True, True) -> pure $ Just $ currentDirectory ".ghci_history" + (True, _) -> liftIO $ getAppDataFile XdgData "ghci_history" + _ -> pure Nothing runInputT (setComplete ghciCompleteWord $ defaultSettings {historyFile = histFile}) ===================================== rts/RtsStartup.c ===================================== @@ -454,7 +454,7 @@ hs_exit_(bool wait_foreign) uint32_t g, i; // N.B. atomic_dec returns the new value. - StgInt init_count = (StgInt)atomic_dec(&hs_init_count); + StgInt init_count = (StgInt)atomic_dec(&hs_init_count, 1); if (init_count > 0) { // ignore until it's the last one return; ===================================== rts/Trace.c ===================================== @@ -926,6 +926,12 @@ void traceNonmovingHeapCensus(uint16_t blk_size, postNonmovingHeapCensus(blk_size, census); } +void traceNonmovingPrunedSegments(uint32_t pruned_segments, uint32_t free_segments) +{ + if (eventlog_enabled && TRACE_nonmoving_gc) + postNonmovingPrunedSegments(pruned_segments, free_segments); +} + void traceThreadStatus_ (StgTSO *tso USED_IF_DEBUG) { #if defined(DEBUG) ===================================== rts/Trace.h ===================================== @@ -331,6 +331,7 @@ void traceConcSweepEnd(void); void traceConcUpdRemSetFlush(Capability *cap); void traceNonmovingHeapCensus(uint16_t blk_size, const struct NonmovingAllocCensus *census); +void traceNonmovingPrunedSegments(uint32_t pruned_segments, uint32_t free_segments); void traceIPE(const InfoProvEnt *ipe); void flushTrace(void); ===================================== rts/eventlog/EventLog.c ===================================== @@ -1154,6 +1154,15 @@ void postNonmovingHeapCensus(uint16_t blk_size, RELEASE_LOCK(&eventBufMutex); } +void postNonmovingPrunedSegments(uint32_t pruned_segments, uint32_t free_segments) +{ + ACQUIRE_LOCK(&eventBufMutex); + postEventHeader(&eventBuf, EVENT_NONMOVING_PRUNED_SEGMENTS); + postWord32(&eventBuf, pruned_segments); + postWord32(&eventBuf, free_segments); + RELEASE_LOCK(&eventBufMutex); +} + void closeBlockMarker (EventsBuf *ebuf) { if (ebuf->marker) ===================================== rts/eventlog/EventLog.h ===================================== @@ -196,6 +196,7 @@ void postConcUpdRemSetFlush(Capability *cap); void postConcMarkEnd(StgWord32 marked_obj_count); void postNonmovingHeapCensus(uint16_t blk_size, const struct NonmovingAllocCensus *census); +void postNonmovingPrunedSegments(uint32_t pruned_segments, uint32_t free_segments); #if defined(TICKY_TICKY) void postTickyCounterDefs(StgEntCounter *p); ===================================== rts/gen_event_types.py ===================================== @@ -132,6 +132,7 @@ event_types = [ EventType(205, 'CONC_SWEEP_END', [], 'End concurrent sweep phase'), EventType(206, 'CONC_UPD_REM_SET_FLUSH', [CapNo], 'Update remembered set flushed'), EventType(207, 'NONMOVING_HEAP_CENSUS', [Word16, Word32, Word32, Word32], 'Nonmoving heap census'), + EventType(208, 'NONMOVING_PRUNED_SEGMENTS', [Word32, Word32], 'Report the amount of segments pruned and remaining on the free list.'), # Ticky-ticky profiling EventType(210, 'TICKY_COUNTER_DEF', VariableLength, 'Ticky-ticky entry counter definition'), ===================================== rts/include/rts/storage/Block.h ===================================== @@ -323,6 +323,10 @@ bdescr *allocGroupOnNode(uint32_t node, W_ n); // bdescr *allocAlignedGroupOnNode(uint32_t node, W_ n); +// Allocate a MBlock worth of `n` block sized chunks aligned at `n`-block boundry. +// This returns a linked list of `bdescr` of length `BLOCKS_PER_MBLOCK / n`. +bdescr *allocMBlockAlignedGroupOnNode(uint32_t node, W_ n); + EXTERN_INLINE bdescr* allocBlockOnNode(uint32_t node); EXTERN_INLINE bdescr* allocBlockOnNode(uint32_t node) { ===================================== rts/include/stg/SMP.h ===================================== @@ -82,13 +82,13 @@ EXTERN_INLINE StgWord cas_seq_cst_relaxed(StgVolatilePtr p, StgWord o, StgWord n EXTERN_INLINE StgWord atomic_inc(StgVolatilePtr p, StgWord n); /* - * Atomic decrement + * Atomic subtraction by the provided quantity. * - * atomic_dec(p) { - * return --(*p); + * atomic_dec(p, n) { + * return ((*p) -= n); * } */ -EXTERN_INLINE StgWord atomic_dec(StgVolatilePtr p); +EXTERN_INLINE StgWord atomic_dec(StgVolatilePtr p, StgWord n); /* * Busy-wait nop: this is a hint to the CPU that we are currently in a @@ -479,9 +479,9 @@ atomic_inc(StgVolatilePtr p, StgWord incr) } EXTERN_INLINE StgWord -atomic_dec(StgVolatilePtr p) +atomic_dec(StgVolatilePtr p, StgWord decr) { - return __atomic_sub_fetch(p, 1, __ATOMIC_SEQ_CST); + return __atomic_sub_fetch(p, decr, __ATOMIC_SEQ_CST); } /* @@ -628,9 +628,9 @@ atomic_inc(StgVolatilePtr p, StgWord incr) } INLINE_HEADER StgWord -atomic_dec(StgVolatilePtr p) +atomic_dec(StgVolatilePtr p, StgWord decr) { - return --(*p); + return ((*p) -= decr); } #endif ===================================== rts/sm/BlockAlloc.c ===================================== @@ -394,6 +394,53 @@ split_block_low (bdescr *bd, W_ n) } +// A variant of `split_block_high` where we keep both blocks. +// The returned block has size `n`, which is split off `bd`. +static bdescr * +split_block_high_no_free (bdescr *bd, W_ n) +{ + ASSERT(bd->blocks > n); + + bdescr* ret = bd + bd->blocks - n; // take n blocks off the end + ret->blocks = n; + ret->start = ret->free = bd->start + (bd->blocks - n)*BLOCK_SIZE_W; + ret->link = NULL; + + bd->blocks -= n; + + setup_tail(ret); + setup_tail(bd); + + return ret; +} + +// Allocate a MBlock worth of `n` block sized chunks aligned at `n`-block boundry. +// This returns a linked list of `bdescr` of length `BLOCKS_PER_MBLOCK / n`. +// We assume relevant locks are held. +bdescr * +allocMBlockAlignedGroupOnNode(uint32_t node, W_ n) +{ + bdescr *bd = allocGroupOnNode(node, BLOCKS_PER_MBLOCK); + + // Free unaligned blocks, as we can't use these. + ASSERT(bd->blocks == BLOCKS_PER_MBLOCK); + bd = split_block_high(bd, bd->blocks - bd->blocks % n); + ASSERT(bd->blocks % n == 0); + + bdescr *last = NULL; + bdescr *chunk = NULL; + // Chain the aligned groups together into a linked-list + while (bd->blocks > n) { + chunk = split_block_high_no_free(bd, n); + chunk->link = last; + last = chunk; + } + bd->link = chunk; + + return bd; +} + + /* Find a fitting block for the allocation request in the given free list. Returns: - not NULL: when an exact match was found in the free list. ===================================== rts/sm/GC.c ===================================== @@ -1004,10 +1004,15 @@ GarbageCollect (struct GcConfig config, need_copied_live = 0; need_uncopied_live = 0; for (i = 0; i < RtsFlags.GcFlags.generations; i++) { - need_copied_live += genLiveCopiedBlocks(&generations[i]); - need_uncopied_live += genLiveUncopiedBlocks(&generations[i]); + need_copied_live += genLiveCopiedWords(&generations[i]); + need_uncopied_live += genLiveUncopiedWords(&generations[i]); } + // Convert the live words into live blocks + // See Note [Statistics for retaining memory] + need_copied_live = BLOCK_ROUND_UP(need_copied_live) / BLOCK_SIZE_W; + need_uncopied_live = BLOCK_ROUND_UP(need_uncopied_live) / BLOCK_SIZE_W; + debugTrace(DEBUG_gc, "(before) copied_live: %d; uncopied_live: %d", need_copied_live, need_uncopied_live ); @@ -1031,7 +1036,7 @@ GarbageCollect (struct GcConfig config, ASSERT(need_uncopied_live + need_copied_live >= RtsFlags.GcFlags.minOldGenSize ); - debugTrace(DEBUG_gc, "(after) copyied_live: %d; uncopied_live: %d", need_copied_live, need_uncopied_live ); + debugTrace(DEBUG_gc, "(after) copied_live: %d; uncopied_live: %d", need_copied_live, need_uncopied_live ); need_prealloc = 0; for (i = 0; i < n_nurseries; i++) { @@ -1069,7 +1074,7 @@ GarbageCollect (struct GcConfig config, W_ scaled_needed = ((scaled_factor + unavoidable_copied_need_factor) * need_copied_live) + ((scaled_factor + unavoidable_uncopied_need_factor) * need_uncopied_live); - debugTrace(DEBUG_gc, "factors_2: %f %d", ((scaled_factor + unavoidable_copied_need_factor) * need_copied_live), ((scaled_factor + unavoidable_uncopied_need_factor) * need_uncopied_live)); + debugTrace(DEBUG_gc, "factors_2: %f %f", ((scaled_factor + unavoidable_copied_need_factor) * need_copied_live), ((scaled_factor + unavoidable_uncopied_need_factor) * need_uncopied_live)); need = need_prealloc + scaled_needed; /* Also, if user set heap size, do not drop below it. @@ -1313,7 +1318,7 @@ dec_running (void) ACQUIRE_LOCK(&gc_running_mutex); #endif - StgWord r = atomic_dec(&gc_running_threads); + StgWord r = atomic_dec(&gc_running_threads, 1); #if defined(THREADED_RTS) if (r == 0) { @@ -2424,3 +2429,39 @@ bool doIdleGCWork(Capability *cap STG_UNUSED, bool all) * */ + +/* Note [Statistics for retaining memory] +* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* +* At the end of GC, we want to determine the size of the heap in order to +* determine the amount of memory we wish to return to the OS, or if we want +* to increase the heap size to the minimum. +* +* There's two promising candidates for this metric: live words, and live blocks. +* +* Measuring live blocks is promising because blocks are the smallest unit +* that the storage manager can (de)allocate. +* Most of the time live words and live blocks are very similar. +* +* But the two metrics can come apart when the heap is dominated +* by small pinned objects, or when using the non-moving collector. +* +* In both cases, this happens because objects cannot be copied, so +* block occupancy can fall as objects in a block become garbage. +* In situations like this, using live blocks to determine memory +* retention behaviour can lead to us being overly conservative. +* +* Instead we use live words rounded up to the block size to measure +* heap size. This gives us a more accurate picture of the heap. +* +* This works particularly well with the nonmoving collector as we +* can reuse the space taken up by dead heap objects. This choice is less good +* for fragmentation caused by a few pinned objects retaining blocks. +* In that case, the block can only be reused if it is deallocated in its entirety. +* And therefore using live blocks would be more accurate in this case. +* We assume that this is relatively rare and when it does happen, +* this fragmentation is a problem that should be addressed in its own right. +* +* See: #23397 +* +*/ ===================================== rts/sm/NonMoving.c ===================================== @@ -248,6 +248,8 @@ static void nonmovingBumpEpoch(void) { * * - Note [Allocator sizes] goes into detail about our choice of allocator sizes. * + * - Note [Segment allocation strategy] explains our segment allocation strategy. + * * [ueno 2016]: * Katsuhiro Ueno and Atsushi Ohori. 2016. A fully concurrent garbage * collector for functional programs on multicore processors. SIGPLAN Not. 51, @@ -560,6 +562,22 @@ static void nonmovingBumpEpoch(void) { * * See #23340 * + * Note [Segment allocation strategy] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Non-moving segments must be aligned. In order, to efficiently service these + * allocations, we allocate segments in bulk + * We allocate an entire megablocks worth of segments at once. + * All unused segments are placed on the `nonmovingHeap.free` list. + * + * Symmetrically we only de-allocate segments if all the segments in a megablock are free-able, ie, + * are on `nonmovingHeap.free`. We prune the free list in `nonmovingPruneFreeSegmentList`, + * called during concurrent sweep phase. + * Note that during pruning of the free list, free segments are not available for use by the + * mutator. This might lead to extra allocation of segments. But the risk is low as just after sweep + * there is usually a large amount of partially full segments, and pruning the free list is quite + * quick. + * + * See #24150 */ memcount nonmoving_segment_live_words = 0; @@ -578,19 +596,6 @@ static void nonmovingExitConcurrentWorker(void); // Add a segment to the free list. void nonmovingPushFreeSegment(struct NonmovingSegment *seg) { - // See Note [Live data accounting in nonmoving collector]. - if (RELAXED_LOAD(&nonmovingHeap.n_free) > NONMOVING_MAX_FREE) { - bdescr *bd = Bdescr((StgPtr) seg); - ACQUIRE_SM_LOCK; - ASSERT(oldest_gen->n_blocks >= bd->blocks); - ASSERT(oldest_gen->n_words >= BLOCK_SIZE_W * bd->blocks); - oldest_gen->n_blocks -= bd->blocks; - oldest_gen->n_words -= BLOCK_SIZE_W * bd->blocks; - freeGroup(bd); - RELEASE_SM_LOCK; - return; - } - SET_SEGMENT_STATE(seg, FREE); while (true) { struct NonmovingSegment *old = nonmovingHeap.free; @@ -601,6 +606,110 @@ void nonmovingPushFreeSegment(struct NonmovingSegment *seg) __sync_add_and_fetch(&nonmovingHeap.n_free, 1); } +static int +cmp_segment_ptr (const void *x, const void *y) +{ + const struct NonMovingSegment *p1 = *(const struct NonMovingSegment**)x; + const struct NonMovingSegment *p2 = *(const struct NonMovingSegment**)y; + if (p1 > p2) return +1; + else if (p1 < p2) return -1; + else return 0; +} + +// Prune the free list of segments that can be freed. +// Segments can be freed if all segments from a mblock are on the free list. +void nonmovingPruneFreeSegmentList(void) +{ + trace(TRACE_nonmoving_gc, "Pruning free segment list."); + // Atomically grab the entire free list. + struct NonmovingSegment *free; + size_t length; + while (true) { + free = ACQUIRE_LOAD(&nonmovingHeap.free); + length = ACQUIRE_LOAD(&nonmovingHeap.n_free); + if (cas((StgVolatilePtr) &nonmovingHeap.free, + (StgWord) free, + (StgWord) NULL) == (StgWord) free) { + atomic_dec((StgVolatilePtr) &nonmovingHeap.n_free, length); + break; + } + // Save the current free list so the sanity checker can see these segments. + nonmovingHeap.saved_free = free; + } + + // Sort the free list by address. + struct NonmovingSegment **sorted = stgMallocBytes(sizeof(struct NonmovingSegment*) * length, "sorted free segment list"); + for(size_t i = 0; ilink; + } + // we should have reached the end of the free list + ASSERT(free == NULL); + + qsort(sorted, length, sizeof(struct NonmovingSegment*), cmp_segment_ptr); + + // Walk the sorted list and either: + // - free segments if the entire megablock is free + // - put it back on the free list + size_t new_length = 0; + size_t free_in_megablock = 0; + // iterate through segments by megablock + for(size_t i = 0; ilink = last; + new_length++; + } + } else { + // the megablock is free, so let's free all the segments. + ACQUIRE_SM_LOCK; + for(size_t j = 0; j < free_in_megablock;j++){ + bdescr *bd = Bdescr((StgPtr)sorted[i+j]); + freeGroup(bd); + } + RELEASE_SM_LOCK; + } + } + stgFree(sorted); + // If we have any segments left over, then put them back on the free list. + if(free) { + struct NonmovingSegment* tail = free; + while(tail->link) { + tail = tail->link; + } + while (true) { + struct NonmovingSegment* rest = ACQUIRE_LOAD(&nonmovingHeap.free); + tail->link = rest; + if (cas((StgVolatilePtr) &nonmovingHeap.free, + (StgWord) rest, + (StgWord) free) == (StgWord) rest) { + __sync_add_and_fetch(&nonmovingHeap.n_free, new_length); + break; + } + } + } + size_t pruned_segments = length - new_length; + // See Note [Live data accounting in nonmoving collector]. + oldest_gen->n_blocks -= pruned_segments * NONMOVING_SEGMENT_BLOCKS; + oldest_gen->n_words -= pruned_segments * NONMOVING_SEGMENT_SIZE; + nonmovingHeap.saved_free = NULL; + debugTrace(DEBUG_nonmoving_gc, + "Pruned %d free segments, leaving %d on the free segment list.", + pruned_segments, new_length); + traceNonmovingPrunedSegments(pruned_segments, new_length); + trace(TRACE_nonmoving_gc, "Finished pruning free segment list."); + +} + void nonmovingInitAllocator(struct NonmovingAllocator* alloc, uint16_t block_size) { *alloc = (struct NonmovingAllocator) @@ -1216,6 +1325,7 @@ concurrent_marking: nonmovingSweepStableNameTable(); nonmovingSweep(); + nonmovingPruneFreeSegmentList(); ASSERT(nonmovingHeap.sweep_list == NULL); debugTrace(DEBUG_nonmoving_gc, "Finished sweeping."); traceConcSweepEnd(); ===================================== rts/sm/NonMoving.h ===================================== @@ -119,16 +119,16 @@ extern uint8_t nonmoving_alloca_dense_cnt; // NONMOVING_SEGMENT_SIZE (in bytes) extern uint8_t nonmoving_alloca_cnt; -// maximum number of free segments to hold on to -#define NONMOVING_MAX_FREE 16 - struct NonmovingHeap { struct NonmovingAllocator *allocators; - // free segment list. This is a cache where we keep up to - // NONMOVING_MAX_FREE segments to avoid thrashing the block allocator. + // free segment list. This is a cache where we keep segments + // belonging to megablocks that are only partially free. // Note that segments in this list are still counted towards // oldest_gen->n_blocks. struct NonmovingSegment *free; + // saved free segment list, so the sanity checker can + // see the segments while the free list is being pruned. + struct NonmovingSegment *saved_free; // how many segments in free segment list? accessed atomically. unsigned int n_free; @@ -172,6 +172,7 @@ void nonmovingCollect(StgWeak **dead_weaks, bool concurrent); void nonmovingPushFreeSegment(struct NonmovingSegment *seg); +void nonmovingPruneFreeSegmentList(void); INLINE_HEADER unsigned long log2_ceil(unsigned long x) { ===================================== rts/sm/NonMovingAllocate.c ===================================== @@ -65,19 +65,42 @@ static struct NonmovingSegment *nonmovingAllocSegment(enum AllocLockMode mode, u struct NonmovingSegment *ret; ret = nonmovingPopFreeSegment(); - // Nothing in the free list, allocate a new segment... + // Nothing in the free list, allocate a new segment. + // We allocate a full megablock, and add spare segments to our free list. if (ret == NULL) { acquire_alloc_lock(mode); - bdescr *bd = allocAlignedGroupOnNode(node, NONMOVING_SEGMENT_BLOCKS); - // See Note [Live data accounting in nonmoving collector]. - oldest_gen->n_blocks += bd->blocks; - oldest_gen->n_words += BLOCK_SIZE_W * bd->blocks; + // Another thread might have allocated while we were waiting for the lock. + ret = nonmovingPopFreeSegment(); + if (ret != NULL) { + release_alloc_lock(mode); + // Check alignment + ASSERT(((uintptr_t)ret % NONMOVING_SEGMENT_SIZE) == 0); + return ret; + } + + bdescr *bd = allocMBlockAlignedGroupOnNode(node, NONMOVING_SEGMENT_BLOCKS); release_alloc_lock(mode); - for (StgWord32 i = 0; i < bd->blocks; ++i) { + W_ alloc_blocks = BLOCKS_PER_MBLOCK - (BLOCKS_PER_MBLOCK % NONMOVING_SEGMENT_BLOCKS); + + // See Note [Live data accounting in nonmoving collector]. + oldest_gen->n_blocks += alloc_blocks; + oldest_gen->n_words += BLOCK_SIZE_W * alloc_blocks; + + for (StgWord32 i = 0; i < alloc_blocks; ++i) { initBdescr(&bd[i], oldest_gen, oldest_gen); bd[i].flags = BF_NONMOVING; } + + // Push all but the last segment to the free segment list. + while(bd->link) { + bdescr *next_bd = bd->link; + bd->link = NULL; + nonmovingPushFreeSegment((struct NonmovingSegment *)bd->start); + bd = next_bd; + } + + // Use the last segment to service the allocation. ret = (struct NonmovingSegment *)bd->start; } ===================================== rts/sm/NonMovingMark.c ===================================== @@ -919,7 +919,9 @@ static MarkQueueEnt markQueuePop (MarkQueue *q) // MarkQueueEnt encoding always places the pointer to the object to be // marked first. prefetchForRead(&new.mark_closure.p->header.info); +#if !defined(ASSERTS_ENABLED) prefetchForRead(Bdescr((StgPtr) new.mark_closure.p)); +#endif q->prefetch_queue[i] = new; i = (i + 1) % MARK_PREFETCH_QUEUE_DEPTH; } ===================================== rts/sm/Sanity.c ===================================== @@ -1238,6 +1238,7 @@ countNonMovingHeap(struct NonmovingHeap *heap) } ret += countNonMovingSegments(heap->sweep_list); ret += countNonMovingSegments(heap->free); + ret += countNonMovingSegments(heap->saved_free); return ret; } ===================================== rts/sm/Storage.c ===================================== @@ -1643,11 +1643,36 @@ W_ countOccupied (bdescr *bd) return words; } -// Returns the total number of live blocks +// Returns the total number of live words W_ genLiveWords (generation *gen) { - return (gen->live_estimate ? gen->live_estimate : gen->n_words) + - gen->n_large_words + gen->n_compact_blocks * BLOCK_SIZE_W; + return genLiveCopiedWords(gen) + genLiveUncopiedWords(gen); +} + +// The number of live words which will be copied by the copying collector. +W_ genLiveCopiedWords (generation *gen) +{ + if (gen == oldest_gen && RtsFlags.GcFlags.useNonmoving){ + // the non-moving generation doesn't contain any copied data + return 0; + } else { + return gen->live_estimate ? gen->live_estimate : gen->n_words; + } +} + +// The number of live words which will not be copied by the copying collector +// This includes data living in non-moving collector segments, compact blocks and large/pinned blocks. +W_ genLiveUncopiedWords(generation *gen) +{ + W_ nonmoving_blocks = 0; + // The nonmoving heap contains some blocks that live outside the regular generation structure. + if (gen == oldest_gen && RtsFlags.GcFlags.useNonmoving){ + nonmoving_blocks = + (gen->live_estimate ? gen->live_estimate : gen->n_words) + + nonmoving_large_words + + nonmoving_compact_words; + } + return gen->n_large_words + gen->n_compact_blocks * BLOCK_SIZE_W + nonmoving_blocks; } // The number of live blocks which will be copied by the copying collector. ===================================== rts/sm/Storage.h ===================================== @@ -111,6 +111,8 @@ StgWord gcThreadLiveWords (uint32_t i, uint32_t g); StgWord gcThreadLiveBlocks (uint32_t i, uint32_t g); StgWord genLiveWords (generation *gen); +StgWord genLiveCopiedWords (generation *gen); +StgWord genLiveUncopiedWords (generation *gen); StgWord genLiveBlocks (generation *gen); StgWord genLiveCopiedBlocks (generation *gen); StgWord genLiveUncopiedBlocks (generation *gen); ===================================== testsuite/tests/rts/T23221.hs ===================================== @@ -10,6 +10,7 @@ import Debug.Trace import Control.Monad import GHC.Stats import Data.Word +import GHC.Stack (HasCallStack) -- This test is for checking the memory return behaviour of blocks which will be -- copied and blocks which are not copied (#23221) @@ -25,6 +26,7 @@ main = do -- The upper_bound is the upper bound on how much total memory should be live at the end -- of the test as a factor of the expected live bytes. +loop :: HasCallStack => (Int -> IO a) -> Double -> Double -> Int -> IO () loop f lower_bound upper_bound n = do ba <- mapM (\_ -> f 128) [0..n] traceMarkerIO "Allocated_all" @@ -39,7 +41,7 @@ loop f lower_bound upper_bound n = do evaluate (length (reverse ba')) return total_mem -checkStats :: Double -> Double -> Int -> IO () +checkStats :: HasCallStack => Double -> Double -> Int -> IO () checkStats lower_bound upper_bound n = do stats <- getRTSStats let expected_live_memory = fromIntegral n -- How many objects ===================================== testsuite/tests/rts/atomicinc.c ===================================== @@ -11,7 +11,7 @@ int main(int argc, char *argv[]) CHECK(j == 1); CHECK(i == 1); - j = atomic_dec(&i); + j = atomic_dec(&i,1); CHECK(j == 0); CHECK(i == 0); View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/94e008c5ff66b455c48ededc703942a251e2d52d...8958612c274531bfe8fd3a033061586610f2c574 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/94e008c5ff66b455c48ededc703942a251e2d52d...8958612c274531bfe8fd3a033061586610f2c574 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 14:05:37 2024 From: gitlab at gitlab.haskell.org (Sjoerd Visscher (@trac-sjoerd_visscher)) Date: Mon, 09 Dec 2024 09:05:37 -0500 Subject: [Git][ghc/ghc][wip/T18570] Make selectors mult. polym. when possible Message-ID: <6756f9313f744_13d5a8ca22cc75330@gitlab.mail> Sjoerd Visscher pushed to branch wip/T18570 at Glasgow Haskell Compiler / GHC Commits: bb329d8a by Sjoerd Visscher at 2024-12-09T15:05:21+01:00 Make selectors mult. polym. when possible - - - - - 4 changed files: - compiler/GHC/Core/DataCon.hs - compiler/GHC/Tc/TyCl/Utils.hs - + testsuite/tests/linear/should_compile/LinearRecordSelector.hs - testsuite/tests/linear/should_compile/all.T Changes: ===================================== compiler/GHC/Core/DataCon.hs ===================================== @@ -43,7 +43,7 @@ module GHC.Core.DataCon ( dataConInstArgTys, dataConOrigArgTys, dataConOrigResTy, dataConInstOrigArgTys, dataConRepArgTys, dataConResRepTyArgs, dataConInstUnivs, - dataConFieldLabels, dataConFieldType, dataConFieldType_maybe, + dataConFieldLabels, dataConFieldType, dataConFieldType_maybe, dataConOtherFieldsAllMultMany, dataConSrcBangs, dataConSourceArity, dataConRepArity, dataConIsInfix, @@ -1392,6 +1392,11 @@ dataConFieldType_maybe :: DataCon -> FieldLabelString dataConFieldType_maybe con label = find ((== label) . flLabel . fst) (dcFields con `zip` (scaledThing <$> dcOrigArgTys con)) + +dataConOtherFieldsAllMultMany :: DataCon -> FieldLabelString -> Bool +dataConOtherFieldsAllMultMany con label + = all (\(fld, mult) -> flLabel fld == label || isManyTy mult) (dcFields con `zip` (scaledMult <$> dcOrigArgTys con)) + -- | Strictness/unpack annotations, from user; or, for imported -- DataCons, from the interface file -- The list is in one-to-one correspondence with the arity of the 'DataCon' ===================================== compiler/GHC/Tc/TyCl/Utils.hs ===================================== @@ -34,7 +34,7 @@ import GHC.Tc.Utils.Env import GHC.Tc.Gen.Bind( tcValBinds ) import GHC.Tc.Utils.TcType -import GHC.Builtin.Types( unitTy ) +import GHC.Builtin.Types( unitTy, manyDataConTy, multiplicityTy ) import GHC.Builtin.Uniques ( mkBuiltinUnique ) import GHC.Hs @@ -73,6 +73,7 @@ import GHC.Types.Name.Env import GHC.Types.Name.Reader ( mkRdrUnqual ) import GHC.Types.Id import GHC.Types.Id.Info +import GHC.Types.Var (mkTyVar) import GHC.Types.Var.Env import GHC.Types.Var.Set import GHC.Types.Unique.Set @@ -917,17 +918,23 @@ mkOneRecordSelector all_cons idDetails fl has_sel -- thus suppressing making a binding -- A slight hack! + all_fields_unrestricted = all all_unrestricted all_cons + where + all_unrestricted PatSynCon{} = False + all_unrestricted (RealDataCon dc) = dataConOtherFieldsAllMultMany dc lbl + sel_ty | is_naughty = unitTy -- See Note [Naughty record selectors] - | otherwise = mkForAllTys (tyVarSpecToBinders sel_tvbs) $ + | otherwise = mkForAllTys (tyVarSpecToBinders (sel_tvbs ++ mult_tvb)) $ -- Urgh! See Note [The stupid context] in GHC.Core.DataCon - mkPhiTy (conLikeStupidTheta con1) $ + mkPhiTy (conLikeStupidTheta con1) $ -- req_theta is empty for normal DataCon - mkPhiTy req_theta $ - mkVisFunTyMany data_ty $ - -- Record selectors are always typed with Many. We - -- could improve on it in the case where all the - -- fields in all the constructor have multiplicity Many. + mkPhiTy req_theta $ + mkVisFunTy sel_mult data_ty $ field_ty + (mult_tvb, sel_mult) = if complete && all_fields_unrestricted + then ([mkForAllTyBinder InferredSpec mult_var], mkTyVarTy mult_var) + else ([], manyDataConTy) + mult_var = mkTyVar (mkSysTvName (mkBuiltinUnique 1) (fsLit "m")) multiplicityTy -- make the binding: sel (C2 { fld = x }) = x -- sel (C7 { fld = x }) = x @@ -953,7 +960,7 @@ mkOneRecordSelector all_cons idDetails fl has_sel -- Add catch-all default case unless the case is exhaustive -- We do this explicitly so that we get a nice error message that -- mentions this particular record selector - deflt | all dealt_with all_cons = [] + deflt | complete = [] | otherwise = [mkSimpleMatch match_ctxt (wrapGenSpan [genWildPat]) (genLHsApp (genHsVar (getName rEC_SEL_ERROR_ID)) @@ -968,6 +975,7 @@ mkOneRecordSelector all_cons idDetails fl has_sel -- data instance T Int a where -- A :: { fld :: Int } -> T Int Bool -- B :: { fld :: Int } -> T Int Char + complete = all dealt_with all_cons dealt_with :: ConLike -> Bool dealt_with (PatSynCon _) = False -- We can't predict overlap dealt_with con@(RealDataCon dc) ===================================== testsuite/tests/linear/should_compile/LinearRecordSelector.hs ===================================== @@ -0,0 +1,12 @@ +{-# LANGUAGE LinearTypes, DataKinds #-} +module LinearRecordSelector where + +import GHC.Exts (Multiplicity(..)) + +data Test = A { test :: Int, test2 %Many :: String } | B { test :: Int, test3 %Many :: Char } + +test1 :: Test %1 -> Int +test1 a = test a + +testM :: Test -> Int +testM = test ===================================== testsuite/tests/linear/should_compile/all.T ===================================== @@ -36,6 +36,7 @@ test('LinearTH3', normal, compile, ['']) test('LinearTH4', req_th, compile, ['']) test('LinearHole', normal, compile, ['']) test('LinearDataConSections', normal, compile, ['']) +test('LinearRecordSelector', normal, compile, ['']) test('T18731', normal, compile, ['']) test('T19400', unless(compiler_debugged(), skip), compile, ['']) test('T20023', normal, compile, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/bb329d8a81c1e08bd4ce09b39a4a8e2fe7a09fa5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/bb329d8a81c1e08bd4ce09b39a4a8e2fe7a09fa5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 14:34:35 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 09 Dec 2024 09:34:35 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 21 commits: Fix requirements on T25240 Message-ID: <6756fffbb2c3e_13d5a8112b7948788f@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - 2c278245 by Ben Gamari at 2024-12-09T09:34:23-05:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - 86fa07cc by Ben Gamari at 2024-12-09T09:34:23-05:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 547cf62d by Ben Gamari at 2024-12-09T09:34:23-05:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 75371106 by Ben Gamari at 2024-12-09T09:34:23-05:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - 6fca0f91 by Ben Gamari at 2024-12-09T09:34:23-05:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - 639ed0a4 by Ben Gamari at 2024-12-09T09:34:23-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 864fa9a0 by Ben Gamari at 2024-12-09T09:34:24-05:00 gitlab-ci: Use system libffi on FreeBSD - - - - - d7674243 by Ben Gamari at 2024-12-09T09:34:24-05:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - 82153d2e by Ben Gamari at 2024-12-09T09:34:24-05:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - 24bfdf9e by Ben Gamari at 2024-12-09T09:34:24-05:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 6c978d77 by Ben Gamari at 2024-12-09T09:34:24-05:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 1db925ef by Ben Gamari at 2024-12-09T09:34:24-05:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 7ae70fa6 by Ben Gamari at 2024-12-09T09:34:24-05:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - 6e93245e by Ben Gamari at 2024-12-09T09:34:24-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - de0304c9 by Rodrigo Mesquita at 2024-12-09T09:34:24-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 30 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC.hs - compiler/GHC/StgToJS/Apply.hs - compiler/GHC/StgToJS/Arg.hs - compiler/GHC/StgToJS/CodeGen.hs - compiler/GHC/StgToJS/Expr.hs - compiler/GHC/StgToJS/Ids.hs - compiler/GHC/StgToJS/Linker/Linker.hs - compiler/GHC/StgToJS/Monad.hs - compiler/GHC/StgToJS/Object.hs - compiler/GHC/StgToJS/Symbols.hs - compiler/GHC/StgToJS/Types.hs - compiler/GHC/Unit/Module/Graph.hs - libraries/ghc-compact/tests/all.T - libraries/ghc-internal/CHANGELOG.md - libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs - libraries/template-haskell/changelog.md - libraries/template-haskell/tests/all.T - + libraries/template-haskell/tests/dataToCodeQUnit.hs - + libraries/template-haskell/tests/dataToCodeQUnit.stdout - m4/find_ld.m4 - rts/js/string.js - testsuite/driver/testlib.py - testsuite/tests/concurrent/should_run/all.T - testsuite/tests/ghci/linking/T25240/all.T - testsuite/tests/ghci/linking/all.T - testsuite/tests/interface-stability/template-haskell-exports.stdout - testsuite/tests/javascript/Makefile The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4b79d862e13e50943130f525c403c7ecd7b9459b...de0304c9e844ee29fd4d2d9dea99b94950fdc4e6 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4b79d862e13e50943130f525c403c7ecd7b9459b...de0304c9e844ee29fd4d2d9dea99b94950fdc4e6 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 14:57:49 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 09:57:49 -0500 Subject: [Git][ghc/ghc][wip/T25560] 4 commits: ghc-internal: Disallow setNumCapabilities beyond MAX_N_CAPABILITIES Message-ID: <6757056d96e4b_215dca185b50607e7@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 68e8a7e0 by Ben Gamari at 2024-12-09T09:57:33-05:00 ghc-internal: Disallow setNumCapabilities beyond MAX_N_CAPABILITIES Throw an exception instead of segfault. Fixes #25560. - - - - - d87c68d5 by Ben Gamari at 2024-12-09T09:57:37-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 1a122939 by Ben Gamari at 2024-12-09T09:57:37-05:00 testsuite: Add test for #25560 - - - - - 98a3599e by Ben Gamari at 2024-12-09T09:57:37-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - 10 changed files: - docs/users_guide/using-concurrent.rst - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - + testsuite/tests/rts/T25560.hs - + testsuite/tests/rts/T25560.stderr - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -153,6 +153,13 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. changed while the program is running by calling ``Control.Concurrent.setNumCapabilities``. + +.. note:: + + The maximum number of capabilities supported by the GHC runtime system is + determined when the compiler is built and currently defaults to 256 + capabilities. + The following options affect the way the runtime schedules threads on CPUs: ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -381,8 +380,15 @@ to avoid contention with other processes in the machine. -} setNumCapabilities :: Int -> IO () setNumCapabilities i - | i <= 0 = failIO $ "setNumCapabilities: Capability count ("++show i++") must be positive" - | otherwise = c_setNumCapabilities (fromIntegral i) + | i <= 0 = failIO $ "setNumCapabilities: Capability count ("++show i++") must be positive" + | i > maxCaps = failIO $ "setNumCapabilities: This GHC build only supports up to "++show maxCaps++" capabilities" + | otherwise = c_setNumCapabilities (fromIntegral i) + +maxCaps :: Int +maxCaps = unsafeDupablePerformIO $ peek c_maxNumCapabilities + +foreign import ccall safe "&max_n_capabilities" + c_maxNumCapabilities :: Ptr Int foreign import ccall safe "setNumCapabilities" c_setNumCapabilities :: CUInt -> IO () @@ -394,13 +400,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,6 +41,9 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// Referenced by GHC.Internal.Conc.Sync +const StgInt max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use ===================================== rts/Capability.h ===================================== @@ -270,6 +270,7 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern const uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/include/rts/Config.h ===================================== @@ -78,6 +78,9 @@ code. #endif #if defined(THREADED_RTS) +/* + * Update the note in docs/users_guide/using-concurrent.rst when updating this. + */ #define MAX_N_CAPABILITIES 256 #else #define MAX_N_CAPABILITIES 1 ===================================== rts/include/rts/Threads.h ===================================== @@ -77,6 +77,9 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +extern const StgInt max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/T25560.stderr ===================================== @@ -0,0 +1,3 @@ +T25560: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException: + +user error (setNumCapabilities: This GHC build only supports up to 1 capabilities) ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,4 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) +test('T25560', exit_code(1), compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a65f7c894eae1f6f165b0c4fac47568a2c670719...98a3599ecc6bb617f7619bc814cff613f80d67d1 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a65f7c894eae1f6f165b0c4fac47568a2c670719...98a3599ecc6bb617f7619bc814cff613f80d67d1 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 15:14:00 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 10:14:00 -0500 Subject: [Git][ghc/ghc][wip/T25560] 2 commits: rts/Capability: Move induction variable declaration into `for`s Message-ID: <675709384a5df_215dca4b9b78645c7@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 405df370 by Ben Gamari at 2024-12-09T10:01:33-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 2cebe954 by Ben Gamari at 2024-12-09T10:10:37-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 4 changed files: - docs/users_guide/using-concurrent.rst - rts/Capability.c - rts/Capability.h - rts/include/rts/Threads.h Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -157,8 +157,8 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. .. note:: The maximum number of capabilities supported by the GHC runtime system is - determined when the compiler is built and currently defaults to 256 - capabilities. + determined when at RTS startup to be either 256 or the number of logical + CPU cores, whichever is greater. The following options affect the way the runtime schedules threads on CPUs: ===================================== rts/Capability.c ===================================== @@ -41,15 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; -// Referenced by GHC.Internal.Conc.Sync -const StgInt max_n_capabilities = MAX_N_CAPABILITIES; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +StgInt max_n_capabilities = MAX_N_CAPABILITIES; // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -348,7 +349,11 @@ initCapability (Capability *cap, uint32_t i) * ------------------------------------------------------------------------- */ void initCapabilities (void) { - uint32_t i; + if (getNumberOfProcessors() > max_n_capabilities) { + max_n_capabilities = getNumberOfProcessors(); + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); /* Declare a couple capability sets representing the process and clock domain. Each capability will get added to these capsets. */ @@ -358,7 +363,7 @@ void initCapabilities (void) // Initialise NUMA if (!RtsFlags.GcFlags.numa) { n_numa_nodes = 1; - for (i = 0; i < MAX_NUMA_NODES; i++) { + for (uint32_t i = 0; i < MAX_NUMA_NODES; i++) { numa_map[i] = 0; } } else if (RtsFlags.DebugFlags.numa) { @@ -416,7 +421,7 @@ void initCapabilities (void) // There are no free capabilities to begin with. We will start // a worker Task to each Capability, which will quickly put the // Capability on the free list when it finds nothing to do. - for (i = 0; i < n_numa_nodes; i++) { + for (uint32_t i = 0; i < n_numa_nodes; i++) { last_free_capability[i] = getCapability(0); } } ===================================== rts/Capability.h ===================================== @@ -270,16 +270,16 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: -// extern const uint32_t max_n_capabilities; +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { - return RELAXED_LOAD(&capabilities[i]); + return RELAXED_LOAD(capabilities[i]); } // ===================================== rts/include/rts/Threads.h ===================================== @@ -78,7 +78,7 @@ INLINE_HEADER unsigned int getNumCapabilities(void) extern uint32_t enabled_capabilities; // The maximum number of Capabilities supported by the RTS. -extern const StgInt max_n_capabilities; +extern StgInt max_n_capabilities; #if !IN_STG_CODE extern Capability MainCapability; View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/98a3599ecc6bb617f7619bc814cff613f80d67d1...2cebe9545c3fed08c2aafe6f63053251156a9ec2 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/98a3599ecc6bb617f7619bc814cff613f80d67d1...2cebe9545c3fed08c2aafe6f63053251156a9ec2 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 15:28:18 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 10:28:18 -0500 Subject: [Git][ghc/ghc][wip/T25560] 5 commits: ghc-internal: Fix inconsistent FFI import types Message-ID: <67570c91f3eec_215dca8f126868930@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 4e8c1a6c by Ben Gamari at 2024-12-09T10:22:38-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - bd16ca5e by Ben Gamari at 2024-12-09T10:22:38-05:00 testsuite: Add test for #25560 - - - - - a7642753 by Ben Gamari at 2024-12-09T10:22:38-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - 98a0bfa8 by Ben Gamari at 2024-12-09T10:22:38-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 6f9d5f96 by Ben Gamari at 2024-12-09T10:28:07-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 11 changed files: - docs/users_guide/using-concurrent.rst - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - + testsuite/tests/rts/T25560.hs - + testsuite/tests/rts/T25560.stderr - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -153,6 +153,14 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. changed while the program is running by calling ``Control.Concurrent.setNumCapabilities``. + +.. note:: + + The maximum number of capabilities supported by the GHC runtime system is + determined when at RTS startup to be either 256, the value given by + :rts-flags:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. + The following options affect the way the runtime schedules threads on CPUs: ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -394,13 +393,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +StgInt max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -344,8 +349,6 @@ initCapability (Capability *cap, uint32_t i) * ------------------------------------------------------------------------- */ void initCapabilities (void) { - uint32_t i; - /* Declare a couple capability sets representing the process and clock domain. Each capability will get added to these capsets. */ traceCapsetCreate(CAPSET_OSPROCESS_DEFAULT, CapsetTypeOsProcess); @@ -354,7 +357,7 @@ void initCapabilities (void) // Initialise NUMA if (!RtsFlags.GcFlags.numa) { n_numa_nodes = 1; - for (i = 0; i < MAX_NUMA_NODES; i++) { + for (uint32_t i = 0; i < MAX_NUMA_NODES; i++) { numa_map[i] = 0; } } else if (RtsFlags.DebugFlags.numa) { @@ -388,12 +391,29 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the number of processors + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + if (getNumberOfProcessors() > max_n_capabilities) { + max_n_capabilities = getNumberOfProcessors(); } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; @@ -412,7 +432,7 @@ void initCapabilities (void) // There are no free capabilities to begin with. We will start // a worker Task to each Capability, which will quickly put the // Capability on the free list when it finds nothing to do. - for (i = 0; i < n_numa_nodes; i++) { + for (uint32_t i = 0; i < n_numa_nodes; i++) { last_free_capability[i] = getCapability(0); } } ===================================== rts/Capability.h ===================================== @@ -270,15 +270,17 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { - return RELAXED_LOAD(&capabilities[i]); + return RELAXED_LOAD(capabilities[i]); } // ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,8 +2288,9 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; - } else if (new_n_capabilities > MAX_N_CAPABILITIES) { - errorBelch("Attempt to increase capability count beyond MAX_N_CAPABILITIES\n"); + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count\n"); return; } ===================================== rts/include/rts/Config.h ===================================== @@ -78,6 +78,10 @@ code. #endif #if defined(THREADED_RTS) +/* + * See Note [Capabilities array sizing] in rts/Capability.c. + * Update the note in docs/users_guide/using-concurrent.rst when updating this. + */ #define MAX_N_CAPABILITIES 256 #else #define MAX_N_CAPABILITIES 1 ===================================== rts/include/rts/Threads.h ===================================== @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern StgInt max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/T25560.stderr ===================================== @@ -0,0 +1,3 @@ +T25560: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException: + +user error (setNumCapabilities: This GHC build only supports up to 1 capabilities) ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,4 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) +test('T25560', exit_code(1), compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2cebe9545c3fed08c2aafe6f63053251156a9ec2...6f9d5f96278bed7b9591fdac1d7d47e39fe48538 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2cebe9545c3fed08c2aafe6f63053251156a9ec2...6f9d5f96278bed7b9591fdac1d7d47e39fe48538 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 15:34:19 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 10:34:19 -0500 Subject: [Git][ghc/ghc][wip/T25560] rts: Determine max_n_capabilities at RTS startup Message-ID: <67570dfb10d3a_215dca6f2278699bc@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 32623812 by Ben Gamari at 2024-12-09T10:34:10-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 7 changed files: - docs/users_guide/using-concurrent.rst - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -157,8 +157,9 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. .. note:: The maximum number of capabilities supported by the GHC runtime system is - determined when the compiler is built and currently defaults to 256 - capabilities. + determined when at RTS startup to be either 256, the value given by + :rts-flags:`-N ⟨x⟩`, or the 1.2 times number of logical CPU cores, + whichever is greater. The following options affect the way the runtime schedules threads on CPUs: ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +StgInt max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -386,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * 120% the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + int32_t core_count = 12 * getNumberOfProcessors / 10; + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; ===================================== rts/Capability.h ===================================== @@ -270,15 +270,17 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { - return RELAXED_LOAD(&capabilities[i]); + return RELAXED_LOAD(capabilities[i]); } // ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,8 +2288,9 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; - } else if (new_n_capabilities > MAX_N_CAPABILITIES) { - errorBelch("Attempt to increase capability count beyond MAX_N_CAPABILITIES\n"); + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count\n"); return; } ===================================== rts/include/rts/Config.h ===================================== @@ -79,6 +79,7 @@ code. #if defined(THREADED_RTS) /* + * See Note [Capabilities array sizing] in rts/Capability.c. * Update the note in docs/users_guide/using-concurrent.rst when updating this. */ #define MAX_N_CAPABILITIES 256 ===================================== rts/include/rts/Threads.h ===================================== @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern StgInt max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/326238128c6dac7dc87ba332901f76934d975a58 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/326238128c6dac7dc87ba332901f76934d975a58 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 15:37:15 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 10:37:15 -0500 Subject: [Git][ghc/ghc][wip/T25560] 4 commits: rts: Mention maximum capability count in users guide Message-ID: <67570eabe1cd8_215dcab3d10c72484@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 1d31f55c by Ben Gamari at 2024-12-09T10:37:04-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - e3f52ae7 by Ben Gamari at 2024-12-09T10:37:04-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 7b89fb50 by Ben Gamari at 2024-12-09T10:37:04-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - df3015ce by Ben Gamari at 2024-12-09T10:37:04-05:00 testsuite: Add test for #25560 - - - - - 10 changed files: - docs/users_guide/using-concurrent.rst - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - + testsuite/tests/rts/T25560.hs - + testsuite/tests/rts/T25560.stderr - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -153,6 +153,14 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. changed while the program is running by calling ``Control.Concurrent.setNumCapabilities``. + +.. note:: + + The maximum number of capabilities supported by the GHC runtime system is + determined when at RTS startup to be either 256, the value given by + :rts-flags:`-N ⟨x⟩`, or the 1.2 times number of logical CPU cores, + whichever is greater. + The following options affect the way the runtime schedules threads on CPUs: ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +StgInt max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -344,8 +349,6 @@ initCapability (Capability *cap, uint32_t i) * ------------------------------------------------------------------------- */ void initCapabilities (void) { - uint32_t i; - /* Declare a couple capability sets representing the process and clock domain. Each capability will get added to these capsets. */ traceCapsetCreate(CAPSET_OSPROCESS_DEFAULT, CapsetTypeOsProcess); @@ -354,7 +357,7 @@ void initCapabilities (void) // Initialise NUMA if (!RtsFlags.GcFlags.numa) { n_numa_nodes = 1; - for (i = 0; i < MAX_NUMA_NODES; i++) { + for (uint32_t i = 0; i < MAX_NUMA_NODES; i++) { numa_map[i] = 0; } } else if (RtsFlags.DebugFlags.numa) { @@ -388,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * 120% the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + int32_t core_count = 12 * getNumberOfProcessors / 10; + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; @@ -412,7 +433,7 @@ void initCapabilities (void) // There are no free capabilities to begin with. We will start // a worker Task to each Capability, which will quickly put the // Capability on the free list when it finds nothing to do. - for (i = 0; i < n_numa_nodes; i++) { + for (uint32_t i = 0; i < n_numa_nodes; i++) { last_free_capability[i] = getCapability(0); } } ===================================== rts/Capability.h ===================================== @@ -270,15 +270,17 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { - return RELAXED_LOAD(&capabilities[i]); + return RELAXED_LOAD(capabilities[i]); } // ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,8 +2288,9 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; - } else if (new_n_capabilities > MAX_N_CAPABILITIES) { - errorBelch("Attempt to increase capability count beyond MAX_N_CAPABILITIES\n"); + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count\n"); return; } ===================================== rts/include/rts/Config.h ===================================== @@ -78,6 +78,10 @@ code. #endif #if defined(THREADED_RTS) +/* + * See Note [Capabilities array sizing] in rts/Capability.c. + * Update the note in docs/users_guide/using-concurrent.rst when updating this. + */ #define MAX_N_CAPABILITIES 256 #else #define MAX_N_CAPABILITIES 1 ===================================== rts/include/rts/Threads.h ===================================== @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern StgInt max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/T25560.stderr ===================================== @@ -0,0 +1,3 @@ +T25560: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException: + +user error (setNumCapabilities: This GHC build only supports up to 1 capabilities) ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [normal, ignore_stderr], compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/326238128c6dac7dc87ba332901f76934d975a58...df3015ce11617cf8ae20170695c299432d238295 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/326238128c6dac7dc87ba332901f76934d975a58...df3015ce11617cf8ae20170695c299432d238295 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 15:53:00 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 10:53:00 -0500 Subject: [Git][ghc/ghc][wip/T25560] 2 commits: rts: Determine max_n_capabilities at RTS startup Message-ID: <6757125cbdd4c_215dcad37ef878187@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: bca74a7f by Ben Gamari at 2024-12-09T10:52:50-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 8fdf194e by Ben Gamari at 2024-12-09T10:52:50-05:00 testsuite: Add test for #25560 - - - - - 10 changed files: - docs/users_guide/using-concurrent.rst - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - + testsuite/tests/rts/T25560.hs - + testsuite/tests/rts/T25560.stderr - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -157,8 +157,9 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. .. note:: The maximum number of capabilities supported by the GHC runtime system is - determined when the compiler is built and currently defaults to 256 - capabilities. + determined when at RTS startup to be either 256, the value given by + :rts-flags:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. The following options affect the way the runtime schedules threads on CPUs: ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +StgInt max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -386,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + int32_t core_count = getNumberOfProcessors(); + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; ===================================== rts/Capability.h ===================================== @@ -270,15 +270,17 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { - return RELAXED_LOAD(&capabilities[i]); + return RELAXED_LOAD(capabilities[i]); } // ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,10 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; - } else if (new_n_capabilities > MAX_N_CAPABILITIES) { - errorBelch("Attempt to increase capability count beyond MAX_N_CAPABILITIES\n"); - return; + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count %d; clamping...\n", max_n_capabilities); + new_n_capabilities = max_n_capabilities; } debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", ===================================== rts/include/rts/Config.h ===================================== @@ -79,6 +79,7 @@ code. #if defined(THREADED_RTS) /* + * See Note [Capabilities array sizing] in rts/Capability.c. * Update the note in docs/users_guide/using-concurrent.rst when updating this. */ #define MAX_N_CAPABILITIES 256 ===================================== rts/include/rts/Threads.h ===================================== @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern StgInt max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/T25560.stderr ===================================== @@ -0,0 +1,3 @@ +T25560: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException: + +user error (setNumCapabilities: This GHC build only supports up to 1 capabilities) ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [normal, ignore_stderr], compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/df3015ce11617cf8ae20170695c299432d238295...8fdf194e19294f55802be99d65af69a224a69d35 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/df3015ce11617cf8ae20170695c299432d238295...8fdf194e19294f55802be99d65af69a224a69d35 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 17:04:22 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Mon, 09 Dec 2024 12:04:22 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports-1] 18 commits: Remove unused ghc-internal module "GHC.Internal.Constants" Message-ID: <67572316aaeff_215dca16bfe449449e@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports-1 at Glasgow Haskell Compiler / GHC Commits: 8cb44392 by Matthew Craven at 2024-12-09T13:36:25+01:00 Remove unused ghc-internal module "GHC.Internal.Constants" (cherry picked from commit c6c190718972330504c048b013e5c2596b3c0c1e) - - - - - c16c0dea by Matthew Craven at 2024-12-09T14:25:07+01:00 CorePrep: Rework lowering of BigNat# literals Don't use bigNatFromWord#, because that's terrible: * We shouldn't have to traverse a linked list at run-time to build a BigNat# literal. That's just silly! * The static List object we have to create is much larger than the actual BigNat#'s contents, bloating code size. * We have to read the corresponding interface file, which causes un-tracked implicit dependencies. (#23942) Instead, encode them into the appropriate platform-dependent sequence of bytes, and generate code that copies these bytes at run-time from an Addr# literal into a new ByteArray#. A ByteArray# literal would be the correct thing to generate, but these are not yet supported; see also #17747. Somewhat surprisingly, this change results in a slight reduction in compiler allocations, averaging around 0.5% on ghc's compiler performance tests, including when compiling programs that contain no bignum literals to begin with. The specific cause of this has not been investigated. Since this lowering no longer reads the interface file for GHC.Num.BigNat, the reasoning in Note [Depend on GHC.Num.Integer] is obsoleted. But the story of un-tracked built-in dependencies remains complex, and Note [Tracking dependencies on primitives] now exists to explain this complexity. Additionally, many empty imports have been modified to refer to this new note and comply with its guidance. Several empty imports necessary for other reasons have also been given brief explanations. Metric Decrease: MultiLayerModulesTH_OneShot (cherry picked from commit 6d8f274b8677fcf9519d569875145f9f5434d779) - - - - - 0b3c9d24 by Andreas Klebinger at 2024-12-09T14:27:39+01:00 Add changelog entry for BigNat# lowering changes. - - - - - 53d78e35 by Fendor at 2024-12-09T17:11:34+01:00 Replace `SizedSeq` with `FlatBag` for flattened structure LinkedLists are notoriously memory ineffiecient when all we do is traversing a structure. As 'UnlinkedBCO' has been identified as a data structure that impacts the overall memory usage of GHCi sessions, we avoid linked lists and prefer flattened structure for storing. We introduce a new memory efficient representation of sequential elements that has special support for the cases: * Empty * Singleton * Tuple Elements This improves sharing in the 'Empty' case and avoids the overhead of 'Array' until its constant overhead is justified. (cherry picked from commit 5f085d3af61e3f7a73652dfc1ae57e7ed7d691f2) - - - - - d4cf1dc7 by Fendor at 2024-12-09T17:11:34+01:00 Compact FlatBag array representation `Array` contains three additional `Word`'s we do not need in `FlatBag`. Move `FlatBag` to `SmallArray`. Expand the API of SmallArray by `sizeofSmallArray` and add common traversal functions, such as `mapSmallArray` and `foldMapSmallArray`. Additionally, allow users to force the elements of a `SmallArray` via `rnfSmallArray`. (cherry picked from commit 82cfe10c8c3ec68e1b054e2d6b88e1a8830c60bf) - - - - - a90fac71 by Fendor at 2024-12-09T17:11:34+01:00 Avoid UArray when indexing is not required `UnlinkedBCO`'s can occur many times in the heap. Each `UnlinkedBCO` references two `UArray`'s but never indexes them. They are only needed to encode the elements into a `ByteArray#`. The three words for the lower bound, upper bound and number of elements are essentially unused, thus we replace `UArray` with a wrapper around `ByteArray#`. This saves us up to three words for each `UnlinkedBCO`. Further, to avoid re-allocating these words for `ResolvedBCO`, we repeat the procedure for `ResolvedBCO` and add custom `Binary` and `Show` instances. For example, agda's repl session has around 360_000 UnlinkedBCO's, so avoiding these three words is already saving us around 8MB residency. (cherry picked from commit 88cb3e1079e88ba10065ce260a96095ae96d58e8) - - - - - 68a1c9dd by Andreas Klebinger at 2024-12-09T17:11:34+01:00 Changelog for !12170 and !12142 - - - - - 73f25e46 by Rodrigo Mesquita at 2024-12-09T17:11:34+01:00 rts: free error message before returning Fixes a memory leak in rts/linker/PEi386.c (cherry picked from commit dd530bb7e22e953e4cec64a5fd6c39fddc152c6f) - - - - - c9979fed by Alexis King at 2024-12-09T17:11:34+01:00 linker: Avoid linear search when looking up Haskell symbols via dlsym See the primary Note [Looking up symbols in the relevant objects] for a more in-depth explanation. When dynamically loading a Haskell symbol (typical when running a splice or GHCi expression), before this commit we would search for the symbol in all dynamic libraries that were loaded. However, this could be very inefficient when too many packages are loaded (which can happen if there are many package dependencies) because the time to lookup the would be linear in the number of packages loaded. This commit drastically improves symbol loading performance by introducing a mapping from units to the handles of corresponding loaded dlls. These handles are returned by dlopen when we load a dll, and can then be used to look up in a specific dynamic library. Looking up a given Name is now much more precise because we can get lookup its unit in the mapping and lookup the symbol solely in the handles of the dynamic libraries loaded for that unit. In one measurement, the wait time before the expression was executed went from +-38 seconds down to +-2s. This commit also includes Note [Symbols may not be found in pkgs_loaded], explaining the fallback to the old behaviour in case no dll can be found in the unit mapping for a given Name. Fixes #23415 Co-authored-by: Rodrigo Mesquita (@alt-romes) (cherry picked from commit e008a19a7f9e8f22aada0b4e1049744f49d39aad) - - - - - b663c9e0 by Rodrigo Mesquita at 2024-12-09T17:11:34+01:00 rts: Make addDLL a wrapper around loadNativeObj Rewrite the implementation of `addDLL` as a wrapper around the more principled `loadNativeObj` rts linker function. The latter should be preferred while the former is preserved for backwards compatibility. `loadNativeObj` was previously only available on ELF platforms, so this commit further refactors the rts linker to transform loadNativeObj_ELF into loadNativeObj_POSIX, which is available in ELF and MachO platforms. The refactor made it possible to remove the `dl_mutex` mutex in favour of always using `linker_mutex` (rather than a combination of both). Lastly, we implement `loadNativeObj` for Windows too. (cherry picked from commit dcfaa190e1e1182a2efe4e2f601affbb832a49bb) - - - - - 67890fdb by Rodrigo Mesquita at 2024-12-09T17:11:34+01:00 Use symbol cache in internal interpreter too This commit makes the symbol cache that was used by the external interpreter available for the internal interpreter too. This follows from the analysis in #23415 that suggests the internal interpreter could benefit from this cache too, and that there is no good reason not to have the cache for it too. It also makes it a bit more uniform to have the symbol cache range over both the internal and external interpreter. This commit also refactors the cache into a function which is used by both `lookupSymbol` and also by `lookupSymbolInDLL`, extending the caching logic to `lookupSymbolInDLL` too. (cherry picked from commit 12931698261a1cee6a00b731d143270cd60e5f2d) - - - - - 353b6ec1 by Ben Gamari at 2024-12-09T17:11:34+01:00 testsuite: Add test for lookupSymbolInNativeObj (cherry picked from commit dccd3ea159b03cc1972cf47ee3cf8bda73ec0c5a) - - - - - 920ccafc by Andreas Klebinger at 2024-12-09T17:11:34+01:00 Changelog for !12264 (Lookup symbols in relevant DLLs only) - - - - - 99399b92 by Andreas Klebinger at 2024-12-09T17:12:58+01:00 NCG: Fix a bug where we errounously removed a required jump instruction. Add a new method to the Instruction class to check if we can eliminate a jump in favour of fallthrough control flow. Fixes #24507 (cherry picked from commit 0fe2b410ac0d8951f07ffcc9f3c6c97bc312df48) - - - - - 6ea0d4f7 by Andreas Klebinger at 2024-12-09T17:13:42+01:00 Add changelog for !12370 - Bug in jump shortcutting. - - - - - 8692ced5 by Simon Peyton Jones at 2024-12-09T17:18:17+01:00 Don't generate wrappers for `type data` constructors with StrictData Previously, the logic for checking if a data constructor needs a wrapper or not would take into account whether the constructor's fields have explicit strictness (e.g., `data T = MkT !Int`), but the logic would _not_ take into account whether `StrictData` was enabled. This meant that something like `type data T = MkT Int` would incorrectly generate a wrapper for `MkT` if `StrictData` was enabled, leading to the horrible errors seen in #24620. To fix this, we disable generating wrappers for `type data` constructors altogether. Fixes #24620. Co-authored-by: Ryan Scott <ryan.gl.scott at gmail.com> (cherry picked from commit 5e4f4ba835fd24135759ee7a2d0d5c636a8a1505) - - - - - c52e8047 by Andreas Klebinger at 2024-12-09T17:19:50+01:00 Changelog for !12416 Entry for "Don't generate wrappers for `type data` constructors with StrictData." - - - - - 8e13b22e by Matthew Pickering at 2024-12-09T17:21:24+01:00 Linearise ghc-internal and base build This is achieved by requesting the final package database for ghc-internal, which mandates it is fully built as a dependency of configuring the `base` package. This is at the expense of cross-package parrallelism between ghc-internal and the base package. Fixes #24436 (cherry picked from commit 8a06ddf68bb5a9985e3a7b8464dd04b928c36b90) - - - - - 30 changed files: - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/PrimOps.hs-boot - compiler/GHC/Builtin/Types/Prim.hs - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Linker.hs - compiler/GHC/ByteCode/Types.hs - compiler/GHC/Cmm/Dominators.hs - compiler/GHC/CmmToAsm/AArch64.hs - compiler/GHC/CmmToAsm/AArch64/Instr.hs - compiler/GHC/CmmToAsm/BlockLayout.hs - compiler/GHC/CmmToAsm/Instr.hs - compiler/GHC/CmmToAsm/Monad.hs - compiler/GHC/CmmToAsm/PPC.hs - compiler/GHC/CmmToAsm/PPC/Instr.hs - compiler/GHC/CmmToAsm/Reg/Liveness.hs - compiler/GHC/CmmToAsm/X86.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/CoreToStg/Prep.hs - + compiler/GHC/Data/FlatBag.hs - compiler/GHC/Data/SmallArray.hs - compiler/GHC/Data/Word64Map/Strict.hs - compiler/GHC/Driver/CmdLine.hs - compiler/GHC/Driver/Config/CoreToStg/Prep.hs - compiler/GHC/Driver/Config/Diagnostic.hs - compiler/GHC/Driver/Errors/Ppr.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Plugins.hs - compiler/GHC/Iface/Errors/Ppr.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8958612c274531bfe8fd3a033061586610f2c574...8e13b22ed5229c45a735c06bb3c838bc577d30c3 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8958612c274531bfe8fd3a033061586610f2c574...8e13b22ed5229c45a735c06bb3c838bc577d30c3 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 17:05:03 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Mon, 09 Dec 2024 12:05:03 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/andreask/9.10-backports Message-ID: <6757233f8d545_215dca16381d895841@gitlab.mail> Andreas Klebinger pushed new branch wip/andreask/9.10-backports at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/andreask/9.10-backports You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 17:05:53 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 09 Dec 2024 12:05:53 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 4 commits: Fix panic in multiline string with unterminated gap (#25530) Message-ID: <67572371ba6a6_215dca1624840102123@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 72ab8861 by Brandon Chinn at 2024-12-09T12:04:45-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 54c59b73 by Brandon Chinn at 2024-12-09T12:04:45-05:00 Add test case for unterminated multiline string - - - - - 9c7b9889 by Rodrigo Mesquita at 2024-12-09T12:04:46-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - bcee6f20 by Sylvain Henry at 2024-12-09T12:05:00-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - 9 changed files: - compiler/GHC.hs - compiler/GHC/Parser/Lexer.x - compiler/GHC/Unit/Module/Graph.hs - rts/rts.cabal - + testsuite/tests/parser/should_fail/MultilineStringsUnterminated.hs - + testsuite/tests/parser/should_fail/MultilineStringsUnterminated.stderr - + testsuite/tests/parser/should_fail/T25530.hs - + testsuite/tests/parser/should_fail/T25530.stderr - testsuite/tests/parser/should_fail/all.T Changes: ===================================== compiler/GHC.hs ===================================== @@ -74,7 +74,7 @@ module GHC ( compileToCoreModule, compileToCoreSimplified, -- * Inspecting the module structure of the program - ModuleGraph, emptyMG, mgMap, mkModuleGraph, mgModSummaries, + ModuleGraph, emptyMG, mapMG, mkModuleGraph, mgModSummaries, mgLookupModule, ModSummary(..), ms_mod_name, ModLocation(..), pattern ModLocation, @@ -874,7 +874,7 @@ setProgramDynFlags_ invalidate_needed dflags = do -- invalidateModSummaryCache :: GhcMonad m => m () invalidateModSummaryCache = - modifySession $ \h -> h { hsc_mod_graph = mgMap inval (hsc_mod_graph h) } + modifySession $ \h -> h { hsc_mod_graph = mapMG inval (hsc_mod_graph h) } where inval ms = ms { ms_hs_hash = fingerprint0 } ===================================== compiler/GHC/Parser/Lexer.x ===================================== @@ -2204,14 +2204,15 @@ tok_string_multi startSpan startBuf _len _buf2 = do case alexScan i0 string_multi_content of AlexToken i1 len _ | Just i2 <- lexDelim i1 -> pure (i1, i2) - | -- is the next token a tab character? - -- need this explicitly because there's a global rule matching $tab - Just ('\t', _) <- alexGetChar' i1 -> setInput i1 >> lexError LexError - | isEOF i1 -> checkSmartQuotes >> lexError LexError - | len == 0 -> panic $ "parsing multiline string got into infinite loop at: " ++ show i0 + | isEOF i1 -> checkSmartQuotes >> setInput i1 >> lexError LexError + -- is the next token a tab character? + -- need this explicitly because there's a global rule matching $tab + | Just ('\t', _) <- alexGetChar' i1 -> setInput i1 >> lexError LexError + -- Can happen if no patterns match, e.g. an unterminated gap + | len == 0 -> setInput i1 >> lexError LexError | otherwise -> goContent i1 AlexSkip i1 _ -> goContent i1 - _ -> lexError LexError + _ -> setInput i0 >> lexError LexError lexDelim = let go 0 i = Just i ===================================== compiler/GHC/Unit/Module/Graph.hs ===================================== @@ -46,7 +46,7 @@ module GHC.Unit.Module.Graph -- (without changing the 'ModuleGraph' structure itself!). -- 'mgModSummaries' lists out all 'ModSummary's, and -- 'mgLookupModule' looks up a 'ModSummary' for a given module. - , mgMap, mgMapM + , mapMG, mgMapM , mgModSummaries , mgLookupModule @@ -239,8 +239,8 @@ lengthMG = length . mg_mss -- | Map a function 'f' over all the 'ModSummaries'. -- To preserve invariants, 'f' can't change the isBoot status. -mgMap :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph -mgMap f mg at ModuleGraph{..} = mg +mapMG :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph +mapMG f mg at ModuleGraph{..} = mg { mg_mss = flip fmap mg_mss $ \case InstantiationNode uid iuid -> InstantiationNode uid iuid LinkNode uid nks -> LinkNode uid nks ===================================== rts/rts.cabal ===================================== @@ -30,38 +30,55 @@ source-repository head flag libm default: False + manual: True flag librt default: False + manual: True flag libdl default: False + manual: True flag use-system-libffi default: False + manual: True flag libffi-adjustors default: False + manual: True flag need-pthread default: False + manual: True flag libbfd default: False + manual: True flag need-atomic default: False + manual: True flag libdw default: False + manual: True flag libnuma default: False + manual: True flag libzstd default: False + manual: True flag static-libzstd default: False + manual: True flag leading-underscore default: False + manual: True flag unregisterised default: False + manual: True flag tables-next-to-code default: False + manual: True flag smp default: True + manual: True flag find-ptr default: False + manual: True -- Some cabal flags used to control the flavours we want to produce -- for libHSrts in hadrian. By default, we just produce vanilla and -- threaded. The flags "compose": if you enable debug and profiling, @@ -69,18 +86,23 @@ flag find-ptr -- _thr_debug_p and so on. flag profiling default: False + manual: True flag debug default: False + manual: True flag dynamic default: False + manual: True flag threaded default: False + manual: True flag thread-sanitizer description: Enable checking for data races using the ThreadSanitizer (TSAN) mechanism supported by GCC and Clang. See Note [ThreadSanitizer] in @rts/include/rts/TSANUtils.h at . default: False + manual: True library -- rts is a wired in package and ===================================== testsuite/tests/parser/should_fail/MultilineStringsUnterminated.hs ===================================== @@ -0,0 +1,9 @@ +{-# LANGUAGE MultilineStrings #-} + +x :: String +x = + """ + test + +y :: Int +y = 0 ===================================== testsuite/tests/parser/should_fail/MultilineStringsUnterminated.stderr ===================================== @@ -0,0 +1,3 @@ +MultilineStringsUnterminated.hs:10:1: error: [GHC-21231] + lexical error at end of input + ===================================== testsuite/tests/parser/should_fail/T25530.hs ===================================== @@ -0,0 +1,9 @@ +{-# LANGUAGE MultilineStrings #-} + +foo = + """ + a\ + b + """ + +main = print foo ===================================== testsuite/tests/parser/should_fail/T25530.stderr ===================================== @@ -0,0 +1,2 @@ +T25530.hs:5:4: error: [GHC-21231] lexical error at character '\\' + ===================================== testsuite/tests/parser/should_fail/all.T ===================================== @@ -231,9 +231,13 @@ test('T17879a', normal, compile_fail, ['']) test('T17879b', normal, compile_fail, ['']) test('Or1', normal, compile_fail, ['']) test('OrPatInExprErr', normal, compile_fail, ['']) + +# Multiline Strings test('MultilineStringsError', [normalise_whitespace_fun(lambda s: s)], compile_fail, ['']) test('MultilineStringsSmartQuotes', normal, compile_fail, ['']) test('MultilineStringsInnerTab', normal, compile_fail, ['']) +test('MultilineStringsUnterminated', normal, compile_fail, ['']) test('T25258a', normal, compile_fail, ['']) test('T25258b', normal, compile_fail, ['']) test('T25258c', normal, compile_fail, ['']) +test('T25530', normal, compile_fail, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/de0304c9e844ee29fd4d2d9dea99b94950fdc4e6...bcee6f20f4c86fad233d2aea35b8453adb8093e3 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/de0304c9e844ee29fd4d2d9dea99b94950fdc4e6...bcee6f20f4c86fad233d2aea35b8453adb8093e3 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 20:11:37 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Mon, 09 Dec 2024 15:11:37 -0500 Subject: [Git][ghc/ghc][wip/sand-witch/tysyn-info-ppr] Update GHCi :info type declaration printing (24459) Message-ID: <67574ef980309_1f47d67fcd809733@gitlab.mail> Andrei Borzenkov pushed to branch wip/sand-witch/tysyn-info-ppr at Glasgow Haskell Compiler / GHC Commits: 7a305320 by Andrei Borzenkov at 2024-12-10T00:10:34+04:00 Update GHCi :info type declaration printing (24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 25 changed files: - compiler/GHC/Core/TyCon.hs - compiler/GHC/Iface/Syntax.hs - compiler/GHC/Iface/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/ghci.rst - testsuite/tests/backpack/should_fail/T19244a.stderr - testsuite/tests/backpack/should_fail/T19244b.stderr - testsuite/tests/backpack/should_fail/bkpfail46.stderr - testsuite/tests/ghci/T18060/T18060.stdout - testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout - testsuite/tests/ghci/scripts/T15941.stdout - testsuite/tests/ghci/scripts/T19310.stdout - testsuite/tests/ghci/scripts/T21294a.stdout - + testsuite/tests/ghci/scripts/T24459.script - + testsuite/tests/ghci/scripts/T24459.stdout - testsuite/tests/ghci/scripts/T8535.stdout - testsuite/tests/ghci/scripts/T9181.stdout - testsuite/tests/ghci/scripts/all.T - testsuite/tests/ghci/scripts/ghci020.stdout - testsuite/tests/ghci/should_run/T10145.stdout - testsuite/tests/ghci/should_run/T18594.stdout - testsuite/tests/interface-stability/base-exports.stdout - testsuite/tests/interface-stability/ghc-experimental-exports.stdout - testsuite/tests/interface-stability/template-haskell-exports.stdout - testsuite/tests/rep-poly/RepPolyBackpack3.stderr Changes: ===================================== compiler/GHC/Core/TyCon.hs ===================================== @@ -24,7 +24,8 @@ module GHC.Core.TyCon( mkRequiredTyConBinder, mkAnonTyConBinder, mkAnonTyConBinders, tyConBinderForAllTyFlag, tyConBndrVisForAllTyFlag, isNamedTyConBinder, - isVisibleTyConBinder, isInvisibleTyConBinder, + isVisibleTyConBinder, isInvisSpecTyConBinder, isInvisibleTyConBinder, + isInferredTyConBinder, isVisibleTcbVis, isInvisSpecTcbVis, -- ** Field labels @@ -487,7 +488,7 @@ mkRequiredTyConBinder dep_set tv | tv `elemVarSet` dep_set = mkNamedTyConBinder Required tv | otherwise = mkAnonTyConBinder tv -tyConBinderForAllTyFlag :: TyConBinder -> ForAllTyFlag +tyConBinderForAllTyFlag :: VarBndr a TyConBndrVis -> ForAllTyFlag tyConBinderForAllTyFlag (Bndr _ vis) = tyConBndrVisForAllTyFlag vis tyConBndrVisForAllTyFlag :: TyConBndrVis -> ForAllTyFlag @@ -513,10 +514,22 @@ isInvisSpecTcbVis :: TyConBndrVis -> Bool isInvisSpecTcbVis (NamedTCB Specified) = True isInvisSpecTcbVis _ = False +isInvisInferTcbVis :: TyConBndrVis -> Bool +isInvisInferTcbVis (NamedTCB Inferred) = True +isInvisInferTcbVis _ = False + +isInvisSpecTyConBinder :: VarBndr tv TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInvisSpecTyConBinder (Bndr _ tcb_vis) = isInvisSpecTcbVis tcb_vis + isInvisibleTyConBinder :: VarBndr tv TyConBndrVis -> Bool -- Works for IfaceTyConBinder too isInvisibleTyConBinder tcb = not (isVisibleTyConBinder tcb) +isInferredTyConBinder :: VarBndr var TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInferredTyConBinder (Bndr _ tcb_vis) = isInvisInferTcbVis tcb_vis + -- Build the 'tyConKind' from the binders and the result kind. -- Keep in sync with 'mkTyConKind' in GHC.Iface.Type. mkTyConKind :: [TyConBinder] -> Kind -> Kind ===================================== compiler/GHC/Iface/Syntax.hs ===================================== @@ -100,6 +100,7 @@ import Control.Monad import System.IO.Unsafe import Control.DeepSeq import Data.Proxy +import qualified Data.Set as Set infixl 3 &&& @@ -912,15 +913,170 @@ constraintIfaceKind :: IfaceKind constraintIfaceKind = IfaceTyConApp (IfaceTyCon constraintKindTyConName (mkIfaceTyConInfo NotPromoted IfaceNormalTyCon)) IA_Nil +{- Note [Print invisible binders in interface declarations] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Starting from GHC 9.8 it is possible to write invisible @-binders +in type-level declarations. That feature introduced several challenges +in interface declaration pretty printing (e.g. using the :info command +inside GHCi) to overcome. + +User-written invisible binders and "system" binders introduced by GHC +are indistinguishable at this stage, hence we try to only print +semantically significant binders by default. + +An invisible binder is considered significant when it meets at least +one of the following two criteria: + - It visibly occurs in the declaration's body + - It is followed by a significant binder, + so it affects positioning +For non-generative type declarations (type synonyms and type families), +there is one additional criterion: + - It is not followed by a visible binder, so it + affects the arity of a type declaration + +The overall solution consists of three functions: +- `iface_decl_non_generative` decides whether the current declaration is + generative or not + +- `iface_decl_mentioned_vars` gives a Set of variables that + visibly occur in the declaration's body + +- `suppressIfaceInvisibles` uses information provided + by the first two functions to actually filter out insignificant + @-binders + +Here is what we consider "visibly occurs" in general and for +each declaration type: + +- Variables that visibly occur in IfaceType are collected by the + `visibleTypeVarOccurencies` function. + +- Variables that visibly occur in IfaceAT are collected by `iface_at_mentioned_vars` + function. It accounts visible binders for associated data and type + families and for type families only, it counts invisible binders. + Associated types can't have definitions, so it's safe to drop all other + binders. + +- None of the type variables in IfaceData declared using GADT syntax doesn't are considered + as visibe occurrences. This is because each constructor has its own variables, e.g.: + + type D :: forall (a :: Type). Type + data D @a where + MkD :: D @b + -- This is shorthand for: + -- MkD :: forall b. D @b + +- For IfaceData declared using Haskell98 syntax, a variable is considered visible + if it visibly occurs in at least one argument's type in at least one constructor. + +- For IfaceSynonym, a variable is considered visible if it visibly occurs + in the RHS type. + +- For IfaceFamily, a variable is considered visible if i occurs inside + an injectivity annotation, e.g. + + type family F @a = r | r -> a + +- For IfaceClass, a variable is considered visible if it occurs at least + once inside a functional dependency annotation or in at least one method's + type signature, or if it visibly occurs in at least one associated type's + declaration (Visible occurrences in associated types are described above.) + +- IfacePatSyn, IfaceId and IfaceAxiom are irrelevant to this problem. +-} + +iface_decl_generative :: IfaceDecl -> Bool +iface_decl_generative IfaceSynonym{} = False +iface_decl_generative IfaceFamily{ifFamFlav = rhs} + | IfaceDataFamilyTyCon <- rhs = True + | otherwise = False +iface_decl_generative IfaceData{} = True +iface_decl_generative IfaceId{} = True +iface_decl_generative IfaceClass{} = True +iface_decl_generative IfaceAxiom{} = True +iface_decl_generative IfacePatSyn{} = True + +iface_at_mentioned_vars :: IfaceAT -> Set.Set IfLclName +iface_at_mentioned_vars (IfaceAT decl _) + = Set.fromList . map ifTyConBinderName . suppress_vars $ binders + where + -- ifBinders is not total, so we assume here that associated types + -- cannot be IfaceId, IfaceAxiom or IfacePatSyn + binders = case decl of + IfaceFamily {ifBinders} -> ifBinders + IfaceData{ifBinders} -> ifBinders + IfaceSynonym{ifBinders} -> ifBinders + IfaceClass{ifBinders} -> ifBinders + IfaceId{} -> panic "IfaceId shoudn't be an associated type!" + IfaceAxiom{} -> panic "IfaceAxiom shoudn't be an associated type!" + IfacePatSyn {} -> panic "IfacePatSyn shoudn't be an associated type!" + + suppress_arity = not (iface_decl_generative decl) + + suppress_vars = + suppressIfaceInvisibles + -- We need to count trailing invisible binders for type families + (MkPrintArityInvisibles suppress_arity) + -- But this setting will simply count all invisible binderss + (PrintExplicitKinds False) + -- ...and associated types can't have a RHS + mempty + +-- See Note [Print invisible binders in interface declarations] +-- in particular, the parts about collecting visible occurrences +iface_decl_mentioned_vars :: IfaceDecl -> Set.Set IfLclName +iface_decl_mentioned_vars (IfaceData { ifCons = condecls, ifGadtSyntax = gadt }) + | gadt = mempty + -- Get visible occurrences in each constructor in each alternative + | otherwise = Set.unions (map mentioned_con_vars cons) + where + mentioned_con_vars = Set.unions . map (visibleTypeVarOccurencies . snd) . ifConArgTys + cons = visibleIfConDecls condecls + +iface_decl_mentioned_vars (IfaceClass { ifFDs = fds, ifBody = IfAbstractClass }) + = Set.unions (map fundep_names fds) + where + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars + (IfaceClass { ifFDs = fds + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs + }}) + = Set.unions + [ Set.unions (map fundep_names fds) + , Set.unions (map iface_at_mentioned_vars ats) + , Set.unions (map (visibleTypeVarOccurencies . class_op_type) sigs) + ] + where + class_op_type (IfaceClassOp _bndr ty _default) = ty + + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars (IfaceSynonym {ifSynRhs = poly_ty}) + = visibleTypeVarOccurencies poly_ty + +-- Consider a binder to be a visible occurrence if it occurs inside an injectivity annotation. +iface_decl_mentioned_vars (IfaceFamily { ifBinders = binders, ifResVar = res_var, ifFamInj = inj }) + | Just{} <- res_var + , Injective injectivity <- inj + = Set.fromList . map (ifTyConBinderName . snd) . filter fst $ zip injectivity binders + | otherwise = mempty + +iface_decl_mentioned_vars IfacePatSyn{} = mempty +iface_decl_mentioned_vars IfaceId{} = mempty +iface_decl_mentioned_vars IfaceAxiom{} = mempty + pprIfaceDecl :: ShowSub -> IfaceDecl -> SDoc -- NB: pprIfaceDecl is also used for pretty-printing TyThings in GHCi -- See Note [Pretty printing via Iface syntax] in GHC.Types.TyThing.Ppr -pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, - ifCtxt = context, ifResKind = kind, - ifRoles = roles, ifCons = condecls, - ifParent = parent, - ifGadtSyntax = gadt, - ifBinders = binders }) +pprIfaceDecl ss decl@(IfaceData { ifName = tycon, ifCType = ctype, + ifCtxt = context, ifResKind = kind, + ifRoles = roles, ifCons = condecls, + ifParent = parent, + ifGadtSyntax = gadt, + ifBinders = binders }) | gadt = vcat [ pp_roles , pp_ki_sig @@ -946,8 +1102,10 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_kind = ppUnless (ki_sig_printable || isIfaceLiftedTypeKind kind) (dcolon <+> ppr kind) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss tycon binders + pp_lhs = case parent of - IfNoParent -> pprIfaceDeclHead suppress_bndr_sig context ss tycon binders + IfNoParent -> decl_head IfDataInstance{} -> text "instance" <+> pp_data_inst_forall <+> pprIfaceTyConParent parent @@ -994,36 +1152,40 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_extra = vcat [pprCType ctype] -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfAbstractClass }) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfAbstractClass }) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig [] ss clas binders <+> pprFundeps fds ] + , text "class" <+> decl_head <+> pprFundeps fds ] where + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss clas binders + -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfConcreteClass { - ifATs = ats, - ifSigs = sigs, - ifClassCtxt = context, - ifMinDef = minDef - }}) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs, + ifClassCtxt = context, + ifMinDef = minDef + }}) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig context ss clas binders <+> pprFundeps fds <+> pp_where + , text "class" <+> decl_head <+> pprFundeps fds <+> pp_where , nest 2 (vcat [ vcat asocs, vcat dsigs , ppShowAllSubs ss (pprMinDef $ fromIfaceBooleanFormula minDef)])] where pp_where = ppShowRhs ss $ ppUnless (null sigs && null ats) (text "where") + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss clas binders + asocs = ppr_trim $ map maybeShowAssoc ats dsigs = ppr_trim $ map maybeShowSig sigs @@ -1055,19 +1217,20 @@ pprIfaceDecl ss (IfaceClass { ifName = clas -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceSynonym { ifName = tc - , ifBinders = binders - , ifSynRhs = mono_ty - , ifResKind = res_kind}) +pprIfaceDecl ss decl@(IfaceSynonym { ifName = tc + , ifBinders = binders + , ifSynRhs = poly_ty + , ifResKind = res_kind}) = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tc binders <+> equals) - 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau - , ppUnless (isIfaceLiftedTypeKind res_kind) (dcolon <+> ppr res_kind) ]) + , hang (text "type" <+> decl_head <+> equals) + 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau ]) ] where - (tvs, theta, tau) = splitIfaceSigmaTy mono_ty + (tvs, theta, tau) = splitIfaceSigmaTy poly_ty name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tc) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tc binders + -- See Note [Printing type abbreviations] in GHC.Iface.Type ppr_tau | tc `hasKey` liftedTypeKindTyConKey || tc `hasKey` unrestrictedFunTyConKey || @@ -1078,20 +1241,18 @@ pprIfaceDecl ss (IfaceSynonym { ifName = tc -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceFamily { ifName = tycon - , ifFamFlav = rhs, ifBinders = binders - , ifResKind = res_kind - , ifResVar = res_var, ifFamInj = inj }) +pprIfaceDecl ss decl@(IfaceFamily { ifName = tycon + , ifFamFlav = rhs, ifBinders = binders + , ifResKind = res_kind + , ifResVar = res_var, ifFamInj = inj }) | IfaceDataFamilyTyCon <- rhs = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , text "data family" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders + , text "data family" <+> decl_head ] | otherwise = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type family" - <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders - <+> pp_inj res_var inj + , hang (text "type family" <+> decl_head <+> pp_inj res_var inj <+> ppShowRhs ss (pp_where rhs)) 2 (ppShowRhs ss (pp_rhs rhs)) $$ @@ -1100,6 +1261,8 @@ pprIfaceDecl ss (IfaceFamily { ifName = tycon where name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tycon) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tycon binders + pp_where (IfaceClosedSynFamilyTyCon {}) = text "where" pp_where _ = empty @@ -1188,7 +1351,12 @@ pprRoles :: (Role -> Bool) -> SDoc -> [IfaceTyConBinder] -> [Role] -> SDoc pprRoles suppress_if tyCon bndrs roles = sdocOption sdocPrintExplicitKinds $ \print_kinds -> - let froles = suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs roles + let froles = + suppressIfaceInvisibles + (MkPrintArityInvisibles False) + (PrintExplicitKinds print_kinds) + mempty + bndrs roles in ppUnless (all suppress_if froles || null froles) $ text "type role" <+> tyCon <+> hsep (map ppr froles) @@ -1245,16 +1413,24 @@ pprIfaceTyConParent IfNoParent pprIfaceTyConParent (IfDataInstance _ tc tys) = pprIfaceTypeApp topPrec tc tys -pprIfaceDeclHead :: SuppressBndrSig +pprIfaceDeclHead :: IfaceDecl + -> SuppressBndrSig -> IfaceContext -> ShowSub -> Name -> [IfaceTyConBinder] -- of the tycon, for invisible-suppression -> SDoc -pprIfaceDeclHead suppress_sig context ss tc_occ bndrs +pprIfaceDeclHead decl suppress_sig context ss tc_occ bndrs = sdocOption sdocPrintExplicitKinds $ \print_kinds -> sep [ pprIfaceContextArr context , pprPrefixIfDeclBndr (ss_how_much ss) (occName tc_occ) <+> pprIfaceTyConBinders suppress_sig - (suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs bndrs) ] + (suppressIfaceInvisibles + (MkPrintArityInvisibles print_arity) + (PrintExplicitKinds print_kinds) + mentioned_vars bndrs) ] + where + -- See Note [Print invisible binders in interface declarations] + mentioned_vars = iface_decl_mentioned_vars decl + print_arity = not (iface_decl_generative decl) pprIfaceConDecl :: ShowSub -> Bool -> IfaceTopBndr ===================================== compiler/GHC/Iface/Type.hs ===================================== @@ -44,6 +44,7 @@ module GHC.Iface.Type ( SuppressBndrSig(..), UseBndrParens(..), PrintExplicitKinds(..), + PrintArityInvisibles(..), pprIfaceType, pprParendIfaceType, pprPrecIfaceType, pprIfaceContext, pprIfaceContextArr, pprIfaceIdBndr, pprIfaceLamBndr, pprIfaceTvBndr, pprIfaceTyConBinders, @@ -56,6 +57,7 @@ module GHC.Iface.Type ( isIfaceRhoType, suppressIfaceInvisibles, + visibleTypeVarOccurencies, stripIfaceInvisVars, stripInvisArgs, @@ -98,6 +100,9 @@ import Data.Word (Word8) import Control.Arrow (first) import Control.DeepSeq import Control.Monad ((<$!>)) +import Data.List (dropWhileEnd) +import qualified Data.List.NonEmpty as NonEmpty +import qualified Data.Set as Set {- ************************************************************************ @@ -609,9 +614,21 @@ splitIfaceReqForallTy (IfaceForAllTy bndr ty) = case splitIfaceReqForallTy ty of { (bndrs, rho) -> (bndr:bndrs, rho) } splitIfaceReqForallTy rho = ([], rho) -suppressIfaceInvisibles :: PrintExplicitKinds -> [IfaceTyConBinder] -> [a] -> [a] -suppressIfaceInvisibles (PrintExplicitKinds True) _tys xs = xs -suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs +newtype PrintArityInvisibles = MkPrintArityInvisibles Bool + +-- See Note [Print invisible binders in interface declarations] +-- for the definition of what binders are considered insignificant +suppressIfaceInvisibles :: PrintArityInvisibles + -> PrintExplicitKinds + -> Set.Set IfLclName + -> [IfaceTyConBinder] + -> [a] + -> [a] +suppressIfaceInvisibles _ (PrintExplicitKinds True) _ _tys xs = xs + +suppressIfaceInvisibles -- This case is semantically the same as the third case, but it should be way f + (MkPrintArityInvisibles False) (PrintExplicitKinds False) mentioned_vars tys xs + | Set.null mentioned_vars = suppress tys xs where suppress _ [] = [] suppress [] a = a @@ -619,6 +636,44 @@ suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs | isInvisibleTyConBinder k = suppress ks xs | otherwise = x : suppress ks xs +suppressIfaceInvisibles + (MkPrintArityInvisibles arity_invisibles) + (PrintExplicitKinds False) mentioned_vars tys xs + = map snd (suppress (zip tys xs)) + where + -- Consider this example: + -- type T :: forall k1 k2. Type + -- type T @a @b = b + -- `@a` is not mentioned on the RHS. However, we can't just + -- drop it because implicit argument positioning matters. + -- + -- Hence just drop the end + only_mentioned_binders = dropWhileEnd (not . is_binder_mentioned) + + is_binder_mentioned (bndr, _) = ifTyConBinderName bndr `Set.member` mentioned_vars + + suppress_invisibles group = + applyWhen invis_group only_mentioned_binders bndrs + where + bndrs = NonEmpty.toList group + invis_group = is_invisible_bndr (NonEmpty.head group) + + suppress_invisible_groups [] = [] + suppress_invisible_groups [group] = + if arity_invisibles + then NonEmpty.toList group -- the last group affects arity + else suppress_invisibles group + suppress_invisible_groups (group : groups) + = suppress_invisibles group ++ suppress_invisible_groups groups + + suppress + = suppress_invisible_groups -- Filter out insignificant invisible binders + . NonEmpty.groupWith is_invisible_bndr -- Find chunks of @-binders + . filterOut is_inferred_bndr -- We don't want to display @{binders} + + is_inferred_bndr = isInferredTyConBinder . fst + is_invisible_bndr = isInvisibleTyConBinder . fst + stripIfaceInvisVars :: PrintExplicitKinds -> [IfaceTyConBinder] -> [IfaceTyConBinder] stripIfaceInvisVars (PrintExplicitKinds True) tyvars = tyvars stripIfaceInvisVars (PrintExplicitKinds False) tyvars @@ -659,6 +714,29 @@ ifTypeIsVarFree ty = go ty go_args IA_Nil = True go_args (IA_Arg arg _ args) = go arg && go_args args +visibleTypeVarOccurencies :: IfaceType -> Set.Set IfLclName +-- Returns True if the type contains this name. Doesn't count +-- invisible application +-- Just used to control pretty printing +visibleTypeVarOccurencies = go + where + (<>) = Set.union + + go (IfaceTyVar var) = Set.singleton var + go (IfaceFreeTyVar {}) = mempty + go (IfaceAppTy fun args) = go fun <> go_args args + go (IfaceFunTy _ w arg res) = go w <> go arg <> go res + go (IfaceForAllTy bndr ty) = go (ifaceBndrType $ binderVar bndr) <> go ty + go (IfaceTyConApp _ args) = go_args args + go (IfaceTupleTy _ _ args) = go_args args + go (IfaceLitTy _) = mempty + go (IfaceCastTy {}) = mempty -- Safe + go (IfaceCoercionTy {}) = mempty -- Safe + + go_args IA_Nil = mempty + go_args (IA_Arg arg Required args) = go arg <> go_args args + go_args (IA_Arg _arg _ args) = go_args args + {- Note [Substitution on IfaceType] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Substitutions on IfaceType are done only during pretty-printing to ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -33,6 +33,10 @@ Compiler GHCi ~~~~ +- :ghci-cmd:`:info` now outputs type declarations with @-binders that are + considered semantically significant. See the documentation for :ghci-cmd:`:info` + itself for a more detailed explanation. + Runtime system ~~~~~~~~~~~~~~ ===================================== docs/users_guide/ghci.rst ===================================== @@ -2516,6 +2516,22 @@ commonly used commands. ⟨name⟩ has been loaded from a source file, then GHCi will also display the location of its definition in the source. + GHCi outputs type declarations (type synonyms, newtypes and datatypes, + classes, type and data families) with semantically significant invisible + @-binders. + + An invisible binder is considered significant when it meets at least + one of the following two criteria: + + - It visibly occurs in the declaration's body (See more about that below) + + - It is followed by a significant binder, so it affects positioning + + For non-generative type declarations (type synonyms and type families) + there is one additional criterion: + + - It is not followed by a visible binder, so it affects the arity of a type declaration + For types and classes, GHCi also summarises instances that mention them. To avoid showing irrelevant information, an instance is shown only if (a) its head mentions ⟨name⟩, and (b) all the other things ===================================== testsuite/tests/backpack/should_fail/T19244a.stderr ===================================== @@ -17,7 +17,7 @@ T19244a.bkp:22:9: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/T19244b.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing user - [1 of 2] Compiling Map[sig] ( user\Map.hsig, nothing ) - [2 of 2] Compiling User ( user\User.hs, nothing ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, nothing ) + [2 of 2] Compiling User ( user/User.hs, nothing ) [2 of 3] Processing ordmap Instantiating ordmap - [1 of 1] Compiling Map ( ordmap\Map.hs, T19244b.out\ordmap\Map.o ) + [1 of 1] Compiling Map ( ordmap/Map.hs, T19244b.out/ordmap/Map.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including user[Map=ordmap:Map] Instantiating user[Map=ordmap:Map] - [1 of 2] Compiling Map[sig] ( user\Map.hsig, T19244b.out\user\user-GzloW2NeDdA2M0V8qzN4g2\Map.o ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, T19244b.out/user/user-GzloW2NeDdA2M0V8qzN4g2/Map.o ) T19244b.bkp:11:27: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/bkpfail46.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing p - [1 of 2] Compiling A[sig] ( p\A.hsig, nothing ) - [2 of 2] Compiling M ( p\M.hs, nothing ) + [1 of 2] Compiling A[sig] ( p/A.hsig, nothing ) + [2 of 2] Compiling M ( p/M.hs, nothing ) [2 of 3] Processing q Instantiating q - [1 of 1] Compiling A ( q\A.hs, bkpfail46.out\q\A.o ) + [1 of 1] Compiling A ( q/A.hs, bkpfail46.out/q/A.o ) [3 of 3] Processing r Instantiating r [1 of 1] Including p[A=q:A] Instantiating p[A=q:A] - [1 of 2] Compiling A[sig] ( p\A.hsig, bkpfail46.out\p\p-HVmFlcYSefiK5n1aDP1v7x\A.o ) + [1 of 2] Compiling A[sig] ( p/A.hsig, bkpfail46.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o ) bkpfail46.bkp:16:9: error: [GHC-15843] • Type constructor ‘K’ has conflicting definitions in the module and its hsig file. Main module: type K :: * -> Constraint - type K a = GHC.Classes.Eq a :: Constraint + type K a = GHC.Classes.Eq a Hsig file: type K :: * -> Constraint class K a Illegal parameterized type synonym in implementation of abstract data. ===================================== testsuite/tests/ghci/T18060/T18060.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout ===================================== @@ -74,13 +74,13 @@ data Tuple2# a b = (#,#) a b (# , #) :: a -> b -> Tuple2# a b (Int, Int) :: Tuple2 (*) (*) type T :: Tuple2 (*) (*) -type T = (Int, Int) :: Tuple2 (*) (*) +type T = (Int, Int) -- Defined at :19:1 type S :: Solo (*) -type S = MkSolo Int :: Solo (*) +type S = MkSolo Int -- Defined at :20:1 type L :: List (*) -type L = [Int] :: List (*) +type L = [Int] -- Defined at :21:1 f :: Int -> Tuple2 Int Int -> Int (\ (_, _) -> ()) :: Tuple2 a b -> Unit ===================================== testsuite/tests/ghci/scripts/T15941.stdout ===================================== @@ -1,4 +1,3 @@ type T :: * -> * -> * -type T = - (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} :: * -> * -> * +type T = (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} -- Defined at :2:1 ===================================== testsuite/tests/ghci/scripts/T19310.stdout ===================================== @@ -1,3 +1,3 @@ type T :: * -> * -> * -type T = (->) @{LiftedRep} @{LiftedRep} :: * -> * -> * +type T = (->) @{LiftedRep} @{LiftedRep} -- Defined at :3:1 ===================================== testsuite/tests/ghci/scripts/T21294a.stdout ===================================== @@ -1,5 +1,5 @@ type L0 :: * -> * -type L0 = [] :: * -> * +type L0 = [] -- Defined at :1:1 type L1 :: * -> * type L1 a = [a] ===================================== testsuite/tests/ghci/scripts/T24459.script ===================================== @@ -0,0 +1,250 @@ +:{ +{-# LANGUAGE TypeFamilies, TypeFamilyDependencies, DataKinds, TypeAbstractions, FunctionalDependencies, AllowAmbiguousTypes #-} + +import Data.Kind +import Data.Data + +-- Check that we don't print binders that aren't included in the arity +type T0 :: forall k. k -> Type +type T0 = Proxy :: forall k. k -> Type + +-- ...and a variant where the arity isn't affected by the type signature +type T1 :: forall k. k -> Type +type T1 = Proxy + +-- ...and that we do print variables that are included in the arity +type T2 :: forall k. k -> Type +type T2 @k = Proxy + +-- ...but don't print invisible binders that don't visibly occur and don't affect the arity +type T3 :: forall k. k -> Type +type T3 a = Proxy a + +-- ...and print invisible binders that do visibly occur +type T4 :: forall a. Type -> Type +type T4 @a _b = Proxy a + +-- ...one more check that it is not affected by the user's input +type T5 :: forall a. Type -> Type +type T5 @a _b = Proxy _b + +-- ...and once again +type T6 :: forall k. Type -> Type +type T6 _a = () + +-- ...now check that we don't mess up with positioning +type T7 :: forall a b c. b -> forall d. Type +type T7 @a @b @c f @d = b + +-- ...and that we count occurrences in theta +type T8 :: forall (a :: Constraint). Type -> Type +type T8 @a _ = forall x. a => x + +-- ...and in forall binder signatures +type T9 :: forall (a :: Type). Type -> Type +type T9 @a _ = forall (x :: a). Int + +-- That's all with type synonyms, let's check other sorts of type declarations + +-- Equatuions should not affect invisible binders for type families, but the arity matters +type TF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +type family TF1 @a @b c @d where + forall b d. TF1 @Type @b Int @d = () + forall a b d. TF1 @a @b (_ :: a) @d = Bool + +-- Injectivity annotations should affect invisible binders. Also check that positioning works +type TF2 :: forall (a :: Type) (b :: Type). Type -> forall (d :: Type). Type +type family TF2 @a @b c @d = r | r -> b + +-- Data families are generative and can't have injectivity annotations +-- hence no invisible binders should be printed +type DF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +data family DF1 @a @b c @d + +-- Data families are generative, so the invisible binder @b isn't a visible usage +type C1 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C1 @a @b c where + data AD a @b + +-- But type families aren't generative, hence the trailing binder @b occurs visibly +type C2 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C2 @a @b c where + type AF a @b + +-- Check that trailing invisible binders are handled properly +type C3 :: forall x. Constraint +class C3 @x where {} + +-- And check that signatures are visible occurrences +type C4 :: forall (a :: Type) (b :: Type). Constraint +class C4 @a @b where + x :: a + y :: b + +-- Also check functional dependencies +type C5 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C5 @a @b c | a -> c where {} + +-- GADTs should not have "visible" mentions of binders at a declaration's head +type D1 :: forall a. Type +data D1 @a where + MkD :: b -> D1 @b + +-- Haskell98-style declarations should work properly +type D2 :: forall a (b :: Type). Type -> forall d. Type +data D2 @a @b c @d = MkD2_1 | MkD2_2 Int b + +-- And now a lot of stuff suggested by @int-index + +data P a b + +type F1 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k1 + +type F2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k2 + +type F3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k3 + +type F4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k4 + +type F5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k5 + +type F6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k6 + +type F1x2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k2) + +type F1x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k3) + +type F1x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k4) + +type F1x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k5) + +type F1x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k6) + +type F2x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k3) + +type F2x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k4) + +type F2x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k5) + +type F2x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k6) + +type F3x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k4) + +type F3x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k5) + +type F3x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k6) + +type F4x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k5) + +type F4x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k6) + +type F5x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k5,k6) + +:} + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 + +:set -fprint-explicit-kinds + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 ===================================== testsuite/tests/ghci/scripts/T24459.stdout ===================================== @@ -0,0 +1,313 @@ +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 a = Proxy a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @a _b = Proxy a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 _b = Proxy _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @a @b f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 c @d where + TF1 Int = () + forall a (_1 :: a) b d. TF1 _1 = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 c + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a c where + type AD :: * -> forall b. * + data family AD a + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a c | a -> c + -- Defined at :86:1 +type D1 :: forall {k} (a :: k). * +data D1 where + MkD :: b -> D1 + -- Defined at :90:1 +type role D2 phantom +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @a @b c = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 a b c d e @k6 = P k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b c d e @k6 = P k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 a b @k3 c d e @k6 = P k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 a b @k3 @k4 c d e @k6 = P k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 a b @k3 @k4 @k5 c d e @k6 = P k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 a b c d e @k6 = P k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b c d e @k6 = P (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 a b @k3 c d e @k6 = P (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 a b @k3 @k4 c d e @k6 = P (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 a b @k3 @k4 @k5 c d e @k6 = P (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 a b c d e @k6 = P (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 c d e @k6 = P (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 c d e @k6 = P (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b c d e @k6 = P (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 a b @k3 @k4 c d e @k6 = P (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 a b @k3 @k4 @k5 c d e @k6 = P (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 a b @k3 c d e @k6 = P (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 a b @k3 @k4 @k5 c d e @k6 = P (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 a b @k3 @k4 c d e @k6 = P (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 a b @k3 @k4 @k5 c d e @k6 = P (k5, k6) + -- Defined at :162:1 +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy @{k} + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 @k a = Proxy @{k} a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @{k} @a _b = Proxy @{k} a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 @{k} @a _b = Proxy @{*} _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 @{k} @k1 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @{k} @{k1} @{k2} @a @b @c f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 @a @b c @d where + TF1 @(*) @b Int @d = () + forall a (_1 :: a) b d. TF1 @a @b _1 @d = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 @a @b c @d + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a @b c where + type AD :: * -> forall b. * + data family AD a @b + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 @{k} @x + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a @b c | a -> c + -- Defined at :86:1 +type role D1 nominal nominal +type D1 :: forall {k} (a :: k). * +data D1 @{k} @a where + MkD :: b -> D1 @{*} @b + -- Defined at :90:1 +type role D2 nominal nominal nominal nominal phantom nominal +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @{k} @{k1} @a @b c @d = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k5, k6) + -- Defined at :162:1 ===================================== testsuite/tests/ghci/scripts/T8535.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/T9181.stdout ===================================== @@ -13,12 +13,10 @@ type (GHC.Internal.Data.Type.Ord.<=) x y = GHC.Internal.TypeError.Assert (x GHC.Internal.Data.Type.Ord.<=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) - :: Constraint type (GHC.Internal.Data.Type.Ord.<=?) :: forall k. k -> k -> Bool type (GHC.Internal.Data.Type.Ord.<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) True True False - :: Bool type GHC.Internal.TypeLits.AppendSymbol :: GHC.Types.Symbol -> GHC.Types.Symbol -> GHC.Types.Symbol type family GHC.Internal.TypeLits.AppendSymbol a b ===================================== testsuite/tests/ghci/scripts/all.T ===================================== @@ -385,3 +385,4 @@ test('T23686', normal, ghci_script, ['T23686.script']) test('T13869', extra_files(['T13869a.hs', 'T13869b.hs']), ghci_script, ['T13869.script']) test('ListTuplePunsPpr', normal, ghci_script, ['ListTuplePunsPpr.script']) test('ListTuplePunsPprNoAbbrevTuple', [expect_broken(23135), limit_stdout_lines(13)], ghci_script, ['ListTuplePunsPprNoAbbrevTuple.script']) +test('T24459', normal, ghci_script, ['T24459.script']) ===================================== testsuite/tests/ghci/scripts/ghci020.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T10145.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T18594.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5406,7 +5406,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5533,7 +5533,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5608,7 +5608,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5616,7 +5616,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5662,7 +5662,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7397,7 +7397,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7407,7 +7407,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7429,7 +7429,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7454,14 +7454,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7478,24 +7478,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8583,7 +8583,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9357,7 +9357,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9418,7 +9418,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9573,9 +9573,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9692,9 +9692,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) @@ -4341,7 +4341,7 @@ module GHC.PrimOps where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -4468,7 +4468,7 @@ module GHC.PrimOps where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -4543,7 +4543,7 @@ module GHC.PrimOps where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -4551,7 +4551,7 @@ module GHC.PrimOps where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -4597,7 +4597,7 @@ module GHC.PrimOps where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -6329,9 +6329,9 @@ module Prelude.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -8960,11 +8960,11 @@ module Prelude.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) ===================================== testsuite/tests/interface-stability/template-haskell-exports.stdout ===================================== @@ -31,7 +31,7 @@ module Language.Haskell.TH where type Code :: (* -> *) -> forall (r :: GHC.Types.RuntimeRep). TYPE r -> * newtype Code m a = Code {examineCode :: m (TExp a)} type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = Code Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = Code Q type Con :: * data Con = NormalC Name [BangType] | RecC Name [VarBangType] | InfixC BangType Name BangType | ForallC [TyVarBndr Specificity] Cxt Con | GadtC [Name] [BangType] Type | RecGadtC [Name] [VarBangType] Type type ConQ :: * @@ -881,7 +881,7 @@ module Language.Haskell.TH.Lib where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * @@ -1220,7 +1220,7 @@ module Language.Haskell.TH.Lib.Internal where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * ===================================== testsuite/tests/rep-poly/RepPolyBackpack3.stderr ===================================== @@ -1,19 +1,19 @@ [1 of 3] Processing sig - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, nothing ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, nothing ) [2 of 3] Processing impl Instantiating impl - [1 of 1] Compiling Impl ( impl\Impl.hs, RepPolyBackpack3.out\impl\Impl.o ) + [1 of 1] Compiling Impl ( impl/Impl.hs, RepPolyBackpack3.out/impl/Impl.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including sig[Sig=impl:Impl] Instantiating sig[Sig=impl:Impl] - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, RepPolyBackpack3.out\sig\sig-Absk5cIXTXe6UYhGMYGber\Sig.o ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, RepPolyBackpack3.out/sig/sig-Absk5cIXTXe6UYhGMYGber/Sig.o ) RepPolyBackpack3.bkp:17:5: error: [GHC-15843] • Type constructor ‘Rep’ has conflicting definitions in the module and its hsig file. Main module: type Rep :: GHC.Types.RuntimeRep - type Rep = T :: GHC.Types.RuntimeRep + type Rep = T Hsig file: type Rep :: GHC.Types.RuntimeRep data Rep Illegal implementation of abstract data: Invalid type family ‘T’. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7a305320acfa9196f453613d02e7c248276c01ac -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7a305320acfa9196f453613d02e7c248276c01ac You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 20:13:11 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 15:13:11 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25563 Message-ID: <67574f57e52b5_1f47d69cd0741041d@gitlab.mail> Ben Gamari pushed new branch wip/T25563 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25563 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 20:21:47 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 15:21:47 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/runtest-args Message-ID: <6757515b3d5a2_1f47d6b322d4145bc@gitlab.mail> Ben Gamari pushed new branch wip/runtest-args at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/runtest-args You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 20:22:41 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 15:22:41 -0500 Subject: [Git][ghc/ghc][wip/freebsd] 22 commits: Use consistent capitalization for "GHC Proposal" in user guide Message-ID: <67575191b91e3_1f47d6b44830162f9@gitlab.mail> Ben Gamari pushed to branch wip/freebsd at Glasgow Haskell Compiler / GHC Commits: b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - f3532ab2 by Ben Gamari at 2024-12-09T15:22:17-05:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - 61ea5f36 by Ben Gamari at 2024-12-09T15:22:17-05:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 02491d4b by Ben Gamari at 2024-12-09T15:22:17-05:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 5bfa3b75 by Ben Gamari at 2024-12-09T15:22:17-05:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - bec6c369 by Ben Gamari at 2024-12-09T15:22:17-05:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - 49f3f92a by Ben Gamari at 2024-12-09T15:22:17-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - e2a855e8 by Ben Gamari at 2024-12-09T15:22:17-05:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fc638b56 by Ben Gamari at 2024-12-09T15:22:18-05:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - 6a67a2ca by Ben Gamari at 2024-12-09T15:22:18-05:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - 4e0285c3 by Ben Gamari at 2024-12-09T15:22:18-05:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 12973e73 by Ben Gamari at 2024-12-09T15:22:18-05:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - f0c3b998 by Ben Gamari at 2024-12-09T15:22:18-05:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 91a26d7f by Ben Gamari at 2024-12-09T15:22:18-05:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - 30 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - docs/users_guide/exts/primitives.rst - docs/users_guide/exts/rewrite_rules.rst - docs/users_guide/exts/stolen_syntax.rst - docs/users_guide/exts/strict.rst - docs/users_guide/runtime_control.rst - docs/users_guide/using-warnings.rst - docs/users_guide/using.rst - libraries/base/base.cabal.in - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/Data/Enum.hs → libraries/base/src/Data/Bounded.hs - libraries/base/src/Data/Enum.hs - libraries/ghc-compact/tests/all.T - libraries/ghc-internal/ghc-internal.cabal.in - libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs - libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs - m4/find_ld.m4 - rts/IOManager.c - rts/Interpreter.c - testsuite/driver/testlib.py - testsuite/tests/concurrent/should_run/all.T - 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/quasiquotation/all.T The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0bc18c689102eb7b826be072ff14f3f99e2f2b1b...91a26d7f5bfc3e231a54c13382d413a1c0e8bc2e -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0bc18c689102eb7b826be072ff14f3f99e2f2b1b...91a26d7f5bfc3e231a54c13382d413a1c0e8bc2e You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 20:34:54 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 15:34:54 -0500 Subject: [Git][ghc/ghc][wip/T25560] 2 commits: rts: Determine max_n_capabilities at RTS startup Message-ID: <6757546ec9a82_1f47d6d7387c204ed@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 479f4e33 by Ben Gamari at 2024-12-09T15:34:47-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 461c66be by Ben Gamari at 2024-12-09T15:34:47-05:00 testsuite: Add test for #25560 - - - - - 10 changed files: - docs/users_guide/using-concurrent.rst - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - + testsuite/tests/rts/T25560.hs - + testsuite/tests/rts/T25560.stderr - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -157,8 +157,9 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. .. note:: The maximum number of capabilities supported by the GHC runtime system is - determined when the compiler is built and currently defaults to 256 - capabilities. + determined when at RTS startup to be either 256, the value given by + :rts-flags:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. The following options affect the way the runtime schedules threads on CPUs: ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +StgInt max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -386,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + int32_t core_count = getNumberOfProcessors(); + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; ===================================== rts/Capability.h ===================================== @@ -270,11 +270,13 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,10 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; - } else if (new_n_capabilities > MAX_N_CAPABILITIES) { - errorBelch("Attempt to increase capability count beyond MAX_N_CAPABILITIES\n"); - return; + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count %d; clamping...\n", max_n_capabilities); + new_n_capabilities = max_n_capabilities; } debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", ===================================== rts/include/rts/Config.h ===================================== @@ -79,6 +79,7 @@ code. #if defined(THREADED_RTS) /* + * See Note [Capabilities array sizing] in rts/Capability.c. * Update the note in docs/users_guide/using-concurrent.rst when updating this. */ #define MAX_N_CAPABILITIES 256 ===================================== rts/include/rts/Threads.h ===================================== @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern StgInt max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/T25560.stderr ===================================== @@ -0,0 +1,3 @@ +T25560: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException: + +user error (setNumCapabilities: This GHC build only supports up to 1 capabilities) ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [normal, ignore_stderr], compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8fdf194e19294f55802be99d65af69a224a69d35...461c66bebe3ae285b6d1293e853f701bc542b719 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8fdf194e19294f55802be99d65af69a224a69d35...461c66bebe3ae285b6d1293e853f701bc542b719 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 21:26:36 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 09 Dec 2024 16:26:36 -0500 Subject: [Git][ghc/ghc][master] 3 commits: JS: Basic cleanup for unused stuff to simplify things. Message-ID: <6757608cd3ad4_1f47d614a4eac4327e@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - 17 changed files: - compiler/GHC/StgToJS/Apply.hs - compiler/GHC/StgToJS/Arg.hs - compiler/GHC/StgToJS/CodeGen.hs - compiler/GHC/StgToJS/Expr.hs - compiler/GHC/StgToJS/Ids.hs - compiler/GHC/StgToJS/Linker/Linker.hs - compiler/GHC/StgToJS/Monad.hs - compiler/GHC/StgToJS/Object.hs - compiler/GHC/StgToJS/Symbols.hs - compiler/GHC/StgToJS/Types.hs - rts/js/string.js - testsuite/tests/javascript/Makefile - testsuite/tests/javascript/T23479_1.hs → testsuite/tests/javascript/T23479.hs - testsuite/tests/javascript/T23479_1.stdout → testsuite/tests/javascript/T23479.stdout - testsuite/tests/javascript/T23479_2.hs → testsuite/tests/javascript/T24744.hs - testsuite/tests/javascript/T23479_2.stdout → testsuite/tests/javascript/T24744.stdout - testsuite/tests/javascript/all.T Changes: ===================================== compiler/GHC/StgToJS/Apply.hs ===================================== @@ -100,7 +100,7 @@ genApp -> [StgArg] -> G (JStgStat, ExprResult) genApp ctx i args - -- Test case T23479_2 + -- Test case moved to T24744 -- See: https://github.com/ghcjs/ghcjs/blob/b7711fbca7c3f43a61f1dba526e6f2a2656ef44c/src/Gen2/Generator.hs#L876 -- Comment by Luite Stegeman -- Special cases for JSString literals. @@ -119,7 +119,7 @@ genApp ctx i args , [top] <- concatMap typex_expr (ctxTarget ctx) = (,ExprInline) . (|=) top . app hdDecodeUtf8Z <$> varsForId v - -- Test case T23479_1 + -- Test case T23479 | [StgLitArg (LitString bs)] <- args , Just d <- decodeModifiedUTF8 bs , idName i == unsafeUnpackJSStringUtf8ShShName @@ -157,6 +157,28 @@ genApp ctx i args , ExprInline ) + -- Case: unpackCString# "some string"# + -- + -- Generates h$toHsString("some string"), which has a faster + -- decoding loop. + -- + Utf8 version below + | [StgLitArg (LitString bs)] <- args + , Just d <- decodeModifiedUTF8 bs + , idName i == unpackCStringName + , [top] <- concatMap typex_expr (ctxTarget ctx) + = return + ( top |= app "h$toHsStringA" [toJExpr d] + , ExprInline + ) + | [StgLitArg (LitString bs)] <- args + , Just d <- decodeModifiedUTF8 bs + , idName i == unpackCStringUtf8Name + , [top] <- concatMap typex_expr (ctxTarget ctx) + = return + ( top |= app "h$toHsString" [toJExpr d] + , ExprInline + ) + -- let-no-escape | Just n <- ctxLneBindingStackSize ctx i = do ===================================== compiler/GHC/StgToJS/Arg.hs ===================================== @@ -22,9 +22,6 @@ module GHC.StgToJS.Arg , genIdArgI , genIdStackArgI , allocConStatic - , allocUnboxedConStatic - , allocateStaticList - , jsStaticArg , jsStaticArgs ) where @@ -215,7 +212,7 @@ allocConStatic (identFS -> to) cc con args = do emitStatic to (StaticUnboxed $ StaticUnboxedBool True) cc' | otherwise = do e <- identFS <$> identForDataConWorker con - emitStatic to (StaticData e []) cc' + emitStatic to (StaticApp SAKData e []) cc' allocConStatic' cc' [x] | isUnboxableCon con = case x of @@ -234,7 +231,7 @@ allocConStatic (identFS -> to) cc con args = do _ -> panic "allocConStatic: invalid args for consDataCon" else do e <- identFS <$> identForDataConWorker con - emitStatic to (StaticData e xs) cc' + emitStatic to (StaticApp SAKData e xs) cc' -- | Allocate unboxed constructors allocUnboxedConStatic :: DataCon -> [StaticArg] -> StaticArg ===================================== compiler/GHC/StgToJS/CodeGen.hs ===================================== @@ -48,6 +48,7 @@ import GHC.Types.ForeignStubs (ForeignStubs (..), getCHeader, getCStub) import GHC.Types.RepType import GHC.Types.Id import GHC.Types.Unique +import GHC.Types.Unique.FM (nonDetEltsUFM) import GHC.Data.FastString import GHC.Utils.Encoding @@ -60,6 +61,7 @@ import GHC.Utils.Outputable hiding ((<>)) import qualified Data.Set as S import Data.Monoid +import Data.List (sortBy) import Control.Monad import System.Directory import System.FilePath @@ -327,25 +329,27 @@ genToplevelRhs i rhs = case rhs of eid <- identForEntryId i idt <- identFS <$> identForId i body <- genBody (initExprCtx i) R2 args body typ - global_occs <- globalOccs body + occs <- globalOccs body + let lids = global_id <$> (sortBy cmp_cnt $ nonDetEltsUFM occs) + -- Regenerate idents from lids to restore right order of representatives. + -- Representatives have occurrence order which can be mixed. + lidents <- concat <$> traverse identsForId lids let eidt = identFS eid - let lidents = map global_ident global_occs - let lids = map global_id global_occs let lidents' = map identFS lidents CIStaticRefs sr0 <- genStaticRefsRhs rhs let sri = filter (`notElem` lidents') sr0 sr = CIStaticRefs sri et <- genEntryType args ll <- loadLiveFun lids - (static, regs, upd) <- + (appK, regs, upd) <- if et == CIThunk then do r <- updateThunk - pure (StaticThunk (Just (eidt, map StaticObjArg lidents')), CIRegs 0 [PtrV],r) - else return (StaticFun eidt (map StaticObjArg lidents'), - (if null lidents then CIRegs 1 (concatMap idJSRep args) - else CIRegs 0 (PtrV : concatMap idJSRep args)) - , mempty) + pure (SAKThunk, CIRegs 0 [PtrV], r) + else + let regs = if null lidents then CIRegs 1 (concatMap idJSRep args) + else CIRegs 0 (PtrV : concatMap idJSRep args) + in pure (SAKFun, regs, mempty) setcc <- ifProfiling $ if et == CIThunk then enterCostCentreThunk @@ -359,5 +363,8 @@ genToplevelRhs i rhs = case rhs of , ciStatic = sr } ccId <- costCentreStackLbl cc - emitStatic idt static ccId + emitStatic idt (StaticApp appK eidt $ map StaticObjArg lidents') ccId return $ (FuncStat eid [] (ll <> upd <> setcc <> body)) + where + cmp_cnt :: GlobalOcc -> GlobalOcc -> Ordering + cmp_cnt g1 g2 = compare (global_count g1) (global_count g2) ===================================== compiler/GHC/StgToJS/Expr.hs ===================================== @@ -606,6 +606,38 @@ genCase ctx bnd e at alts l , ExprInline ) + -- The latter has a faster decoding loop. + -- + -- case "some string"# of b { + -- DEFAULT -> unpackCString# b + -- } + -- + -- + Utf8 version below + | StgLit (LitString bs) <- e + , [GenStgAlt DEFAULT _ rhs] <- alts + , StgApp i args <- rhs + , idName i == unpackCStringName + , [StgVarArg b'] <- args + , bnd == b' + , Just d <- decodeModifiedUTF8 bs + , [top] <- concatMap typex_expr (ctxTarget ctx) + = return + ( top |= app "h$toHsStringA" [toJExpr d] + , ExprInline + ) + | StgLit (LitString bs) <- e + , [GenStgAlt DEFAULT _ rhs] <- alts + , StgApp i args <- rhs + , idName i == unpackCStringUtf8Name + , [StgVarArg b'] <- args + , bnd == b' + , Just d <- decodeModifiedUTF8 bs + , [top] <- concatMap typex_expr (ctxTarget ctx) + = return + ( top |= app "h$toHsString" [toJExpr d] + , ExprInline + ) + | isInlineExpr e = do bndi <- identsForId bnd let ctx' = ctxSetTop bnd ===================================== compiler/GHC/StgToJS/Ids.hs ===================================== @@ -155,7 +155,7 @@ cachedIdentForId i mi id_type = do -- Now update the GlobalId cache, if required - let update_global_cache = isGlobalId i && isNothing mi && id_type == IdPlain + let update_global_cache = isGlobalId i && id_type == IdPlain -- fixme also allow caching entries for lifting? when (update_global_cache) $ do ===================================== compiler/GHC/StgToJS/Linker/Linker.hs ===================================== @@ -24,8 +24,6 @@ module GHC.StgToJS.Linker.Linker ( jsLinkBinary , jsLink , embedJsFile - , staticInitStat - , staticDeclStat , mkExportedFuns , mkExportedModFuns , computeLinkDependencies @@ -1253,27 +1251,22 @@ staticInitStat :: StaticInfo -> JS.JStat staticInitStat (StaticInfo i sv mcc) = jStgStatToJS $ case sv of - StaticData con args -> appS hdStiStr $ add_cc_arg - [ global i - , global con - , jsStaticArgs args - ] - StaticFun f args -> appS hdStiStr $ add_cc_arg - [ global i - , global f - , jsStaticArgs args - ] - StaticList args mt -> appS hdStlStr $ add_cc_arg - [ global i - , jsStaticArgs args - , toJExpr $ maybe null_ (toJExpr . TxtI) mt - ] - StaticThunk (Just (f,args)) -> appS hdStcStr $ add_cc_arg - [ global i - , global f - , jsStaticArgs args - ] - _ -> mempty + (StaticApp k app args) -> appS + (if k == SAKThunk then hdStcStr else hdStiStr) + $ add_cc_arg + [ global i + , global app + , jsStaticArgs args + ] + + StaticList args mt -> appS hdStlStr + $ add_cc_arg + [ global i + , jsStaticArgs args + , toJExpr $ maybe null_ (toJExpr . TxtI) mt + ] + + StaticUnboxed _ -> mempty where -- add optional cost-center argument add_cc_arg as = case mcc of @@ -1286,20 +1279,15 @@ staticDeclStat (StaticInfo global_name static_value _) = jStgStatToJS decl where global_ident = name global_name decl_init v = global_ident ||= v - decl_no_init = appS hdDiStr [toJExpr global_ident] decl = case static_value of StaticUnboxed u -> decl_init (unboxed_expr u) - StaticThunk Nothing -> decl_no_init -- CAF initialized in an alternative way _ -> decl_init (app hdDStr []) unboxed_expr = \case StaticUnboxedBool b -> app hdPStr [toJExpr b] StaticUnboxedInt i -> app hdPStr [toJExpr i] StaticUnboxedDouble d -> app hdPStr [toJExpr (unSaneDouble d)] - -- GHCJS used a function wrapper for this: - -- StaticUnboxedString str -> ApplExpr (initStr str) [] - -- But we are defining it statically for now. StaticUnboxedString str -> initStr str StaticUnboxedStringOffset {} -> 0 ===================================== compiler/GHC/StgToJS/Monad.hs ===================================== @@ -45,7 +45,6 @@ import GHC.Data.FastMutInt import qualified Data.Map as M import qualified Data.Set as S -import qualified Data.List as L runG :: StgToJSConfig -> Module -> UniqFM Id CgStgExpr -> G a -> IO a runG config m unfloat action = State.evalStateT action =<< initState config m unfloat @@ -153,32 +152,30 @@ getGlobalIdCache = State.gets (ggsGlobalIdCache . gsGroup) setGlobalIdCache :: GlobalIdCache -> G () setGlobalIdCache v = State.modify (\s -> s { gsGroup = (gsGroup s) { ggsGlobalIdCache = v}}) - data GlobalOcc = GlobalOcc - { global_ident :: !Ident - , global_id :: !Id + { global_id :: !Id , global_count :: !Word } instance Outputable GlobalOcc where ppr g = hang (text "GlobalOcc") 2 $ vcat - [ hcat [text "Ident: ", ppr (global_ident g)] - , hcat [text "Id:", ppr (global_id g)] + [ hcat [text "Id:", ppr (global_id g)] , hcat [text "Count:", ppr (global_count g)] ] --- | Return number of occurrences of every global id used in the given JStgStat. +-- | Return occurrences of every global id used in the given JStgStat. -- Sort by increasing occurrence count. -globalOccs :: JStgStat -> G [GlobalOcc] +globalOccs :: JStgStat -> G (UniqFM Id GlobalOcc) globalOccs jst = do GlobalIdCache gidc <- getGlobalIdCache - -- build a map form Ident Unique to (Ident, Id, Count) + -- build a map form Ident Unique to (Id, Count) + -- Note that different Idents can map to the same Id (e.g. string payload and string offset idents) let - cmp_cnt g1 g2 = compare (global_count g1) (global_count g2) inc g1 g2 = g1 { global_count = global_count g1 + global_count g2 } + + go :: UniqFM Id GlobalOcc -> [Ident] -> UniqFM Id GlobalOcc go gids = \case - [] -> -- return global Ids used locally sorted by increased use - L.sortBy cmp_cnt $ nonDetEltsUFM gids + [] -> gids (i:is) -> -- check if the Id is global case lookupUFM gidc i of @@ -186,7 +183,7 @@ globalOccs jst = do Just (_k,gid) -> -- add it to the list of already found global ids. Increasing -- count by 1 - let g = GlobalOcc i gid 1 - in go (addToUFM_C inc gids i g) is + let g = GlobalOcc gid 1 + in go (addToUFM_C inc gids gid g) is - pure $ go emptyUFM (identsS jst) + pure $ go emptyUFM $ identsS jst ===================================== compiler/GHC/StgToJS/Object.hs ===================================== @@ -615,16 +615,16 @@ instance Binary StaticInfo where get bh = StaticInfo <$> get bh <*> get bh <*> get bh instance Binary StaticVal where - put_ bh (StaticFun f args) = putByte bh 1 >> put_ bh f >> put_ bh args - put_ bh (StaticThunk t) = putByte bh 2 >> put_ bh t - put_ bh (StaticUnboxed u) = putByte bh 3 >> put_ bh u - put_ bh (StaticData dc args) = putByte bh 4 >> put_ bh dc >> put_ bh args - put_ bh (StaticList xs t) = putByte bh 5 >> put_ bh xs >> put_ bh t + put_ bh (StaticApp SAKFun f args) = putByte bh 1 >> put_ bh f >> put_ bh args + put_ bh (StaticApp SAKThunk f args) = putByte bh 2 >> put_ bh f >> put_ bh args + put_ bh (StaticUnboxed u) = putByte bh 3 >> put_ bh u + put_ bh (StaticApp SAKData dc args) = putByte bh 4 >> put_ bh dc >> put_ bh args + put_ bh (StaticList xs t) = putByte bh 5 >> put_ bh xs >> put_ bh t get bh = getByte bh >>= \case - 1 -> StaticFun <$> get bh <*> get bh - 2 -> StaticThunk <$> get bh + 1 -> StaticApp SAKFun <$> get bh <*> get bh + 2 -> StaticApp SAKThunk <$> get bh <*> get bh 3 -> StaticUnboxed <$> get bh - 4 -> StaticData <$> get bh <*> get bh + 4 -> StaticApp SAKData <$> get bh <*> get bh 5 -> StaticList <$> get bh <*> get bh n -> error ("Binary get bh StaticVal: invalid tag " ++ show n) ===================================== compiler/GHC/StgToJS/Symbols.hs ===================================== @@ -849,9 +849,6 @@ unknown = fsLit "" typeof :: FastString typeof = fsLit "typeof" -hdRawStr :: FastString -hdRawStr = fsLit "h$rstr" - throwStr :: FastString throwStr = fsLit "throw" @@ -1213,8 +1210,6 @@ hdStlStr = fsLit "h$stl" hdStiStr :: FastString hdStiStr = fsLit "h$sti" -hdStrStr :: FastString -hdStrStr = fsLit "h$str" ------------------------------ Pack/Unpack -------------------------------------------- hdDecodeUtf8Z :: FastString ===================================== compiler/GHC/StgToJS/Types.hs ===================================== @@ -231,18 +231,22 @@ data StaticInfo = StaticInfo , siCC :: !(Maybe Ident) -- ^ optional CCS name } deriving stock (Eq, Show) +data StaticAppKind + = SAKFun + -- ^ heap object for function + | SAKThunk + -- ^ heap object for CAF + | SAKData + -- ^ regular datacon app + deriving stock (Eq, Show) + data StaticVal - = StaticFun !FastString [StaticArg] - -- ^ heap object for function - | StaticThunk !(Maybe (FastString,[StaticArg])) - -- ^ heap object for CAF (field is Nothing when thunk is initialized in an - -- alternative way, like string thunks through h$str) - | StaticUnboxed !StaticUnboxed + = StaticUnboxed !StaticUnboxed -- ^ unboxed constructor (Bool, Int, Double etc) - | StaticData !FastString [StaticArg] - -- ^ regular datacon app | StaticList [StaticArg] (Maybe FastString) -- ^ list initializer (with optional tail) + | StaticApp StaticAppKind !FastString [StaticArg] + -- ^ static application of static args. Can be a CAF, a FUN, or a CON app. deriving stock (Eq, Show) data StaticUnboxed ===================================== rts/js/string.js ===================================== @@ -1,53 +1,5 @@ //#OPTIONS: CPP -// encode a string constant -function h$str(s) { - var enc = null; - return function() { - if(enc === null) { - enc = h$encodeModifiedUtf8(s); - } - return enc; - } -} - -// encode a packed string -// since \0 is used to separate strings (and a common occurrence) -// we add the following mapping: -// - \0 -> \cz\0 -// - \cz -> \cz\cz -// -// decoding to bytes, the following is produced: -// - \cz\0 -> C0 80 -// - \cz\cz -> 1A -// -// additionally, for dealing with raw binary data we have an escape sequence -// to pack base64 encoded runs: -// -// - \cz\xNN -> followed by NN-0x1f (31 decimal) bytes of base64 encoded -// data. supported range: 0x20 .. 0x9f (1-128 bytes data) -// - -function h$pstr(s) { - var enc = null; - return function() { - if(enc === null) { - enc = h$encodePackedUtf8(s); - } - return enc; - } -} -// encode a raw string from bytes -function h$rstr(d) { - var enc = null; - return function() { - if(enc === null) { - enc = h$rawStringData(d); - } - return enc; - } -} - // these aren't added to the CAFs, so the list stays in mem indefinitely, is that a problem? #ifdef GHCJS_PROF function h$strt(str, cc) { return MK_LAZY_CC(function() { return h$toHsString(str, cc); }, cc); } @@ -265,10 +217,27 @@ function h$encodeUtf8(str) { return h$encodeUtf8Internal(str, false, false); } +// encode a string constant function h$encodeModifiedUtf8(str) { return h$encodeUtf8Internal(str, true, false); } +// encode a packed string +// since \0 is used to separate strings (and a common occurrence) +// we add the following mapping: +// - \0 -> \cz\0 +// - \cz -> \cz\cz +// +// decoding to bytes, the following is produced: +// - \cz\0 -> C0 80 +// - \cz\cz -> 1A +// +// additionally, for dealing with raw binary data we have an escape sequence +// to pack base64 encoded runs: +// +// - \cz\xNN -> followed by NN-0x1f (31 decimal) bytes of base64 encoded +// data. supported range: 0x20 .. 0x9f (1-128 bytes data) +// function h$encodePackedUtf8(str) { return h$encodeUtf8Internal(str, false, true); } ===================================== testsuite/tests/javascript/Makefile ===================================== @@ -13,20 +13,21 @@ T24495: # check that the optimization occurred for -02 1 time (1 for unfloated lits) grep -c appendToHsStringA T24495.dump-js -T23479_1: - '$(TEST_HC)' $(TEST_HC_OPTS) T23479_1.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file - ./T23479_1 +T23479: + '$(TEST_HC)' $(TEST_HC_OPTS) T23479.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file + ./T23479 # check that the optimization occurred - grep -c "h\$$r1 = \"test_val_1\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_2\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_3\"" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_80_local" T23479_1.dump-js - grep -c "h\$$r1 = \"test_val_80_global" T23479_1.dump-js || true + grep -c "h\$$r1 = \"test_val_1\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_2\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_3\"" T23479.dump-js + grep -c "h\$$r1 = \"test_val_80_local" T23479.dump-js + grep -c "h\$$r1 = \"test_val_80_global" T23479.dump-js || true -T23479_2: - '$(TEST_HC)' $(TEST_HC_OPTS) T23479_2.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file - ./T23479_2 - grep -c "h\$$r1 = \"test_val_1\"" T23479_2.dump-js - grep -c "h\$$r1 = \"test_val_80_local_once" T23479_2.dump-js +T24744: + '$(TEST_HC)' $(TEST_HC_OPTS) T24744.hs -v0 -O2 -dsuppress-uniques -ddump-js -ddump-to-file + ./T24744 + grep -c "h\$$r1 = \"test_val_1\"" T24744.dump-js + grep -c "h\$$r1 = \"test_val_80_local_once" T24744.dump-js # check that the optimization occurred - grep -c "h\$$r1 = h\$$decodeUtf8z" T23479_2.dump-js + grep -c "h\$$r1 = h\$$decodeUtf8z" T24744.dump-js + grep -c "h\$$stc(h\$$mainZCMainzitestzuvalzu80zulocal,h\$$mainZCMainzitestzuvalzu80zulocal_e,\[h\$$ghczmprimZCGHCziCStringziunpackCStringzh,h\$$mainZCMainzimain7_1,h\$$mainZCMainzimain7_2\])" T24744.jsexe/out.js ===================================== testsuite/tests/javascript/T23479_1.hs → testsuite/tests/javascript/T23479.hs ===================================== ===================================== testsuite/tests/javascript/T23479_1.stdout → testsuite/tests/javascript/T23479.stdout ===================================== ===================================== testsuite/tests/javascript/T23479_2.hs → testsuite/tests/javascript/T24744.hs ===================================== ===================================== testsuite/tests/javascript/T23479_2.stdout → testsuite/tests/javascript/T24744.stdout ===================================== @@ -6,3 +6,4 @@ testFn:test_val_1 1 1 1 +1 ===================================== testsuite/tests/javascript/all.T ===================================== @@ -23,5 +23,5 @@ test('T22455', normal, compile_and_run, ['-ddisable-js-minifier']) test('T23565', normal, compile_and_run, ['']) test('T24495', normal, makefile_test, ['T24495']) -test('T23479_1', normal, makefile_test, ['T23479_1']) -test('T23479_2', normal, makefile_test, ['T23479_2']) +test('T23479', normal, makefile_test, ['T23479']) +test('T24744', normal, makefile_test, ['T24744']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4c58bdf63cf18be737ff4feb3b75cf53c7434897...b519c06b889139f7e24f1e84d2e30461cc6cf4a5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4c58bdf63cf18be737ff4feb3b75cf53c7434897...b519c06b889139f7e24f1e84d2e30461cc6cf4a5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 21:27:22 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 09 Dec 2024 16:27:22 -0500 Subject: [Git][ghc/ghc][master] 2 commits: Fix panic in multiline string with unterminated gap (#25530) Message-ID: <675760ba3bc58_1f47d6114e7f8488bc@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - 6 changed files: - compiler/GHC/Parser/Lexer.x - + testsuite/tests/parser/should_fail/MultilineStringsUnterminated.hs - + testsuite/tests/parser/should_fail/MultilineStringsUnterminated.stderr - + testsuite/tests/parser/should_fail/T25530.hs - + testsuite/tests/parser/should_fail/T25530.stderr - testsuite/tests/parser/should_fail/all.T Changes: ===================================== compiler/GHC/Parser/Lexer.x ===================================== @@ -2204,14 +2204,15 @@ tok_string_multi startSpan startBuf _len _buf2 = do case alexScan i0 string_multi_content of AlexToken i1 len _ | Just i2 <- lexDelim i1 -> pure (i1, i2) - | -- is the next token a tab character? - -- need this explicitly because there's a global rule matching $tab - Just ('\t', _) <- alexGetChar' i1 -> setInput i1 >> lexError LexError - | isEOF i1 -> checkSmartQuotes >> lexError LexError - | len == 0 -> panic $ "parsing multiline string got into infinite loop at: " ++ show i0 + | isEOF i1 -> checkSmartQuotes >> setInput i1 >> lexError LexError + -- is the next token a tab character? + -- need this explicitly because there's a global rule matching $tab + | Just ('\t', _) <- alexGetChar' i1 -> setInput i1 >> lexError LexError + -- Can happen if no patterns match, e.g. an unterminated gap + | len == 0 -> setInput i1 >> lexError LexError | otherwise -> goContent i1 AlexSkip i1 _ -> goContent i1 - _ -> lexError LexError + _ -> setInput i0 >> lexError LexError lexDelim = let go 0 i = Just i ===================================== testsuite/tests/parser/should_fail/MultilineStringsUnterminated.hs ===================================== @@ -0,0 +1,9 @@ +{-# LANGUAGE MultilineStrings #-} + +x :: String +x = + """ + test + +y :: Int +y = 0 ===================================== testsuite/tests/parser/should_fail/MultilineStringsUnterminated.stderr ===================================== @@ -0,0 +1,3 @@ +MultilineStringsUnterminated.hs:10:1: error: [GHC-21231] + lexical error at end of input + ===================================== testsuite/tests/parser/should_fail/T25530.hs ===================================== @@ -0,0 +1,9 @@ +{-# LANGUAGE MultilineStrings #-} + +foo = + """ + a\ + b + """ + +main = print foo ===================================== testsuite/tests/parser/should_fail/T25530.stderr ===================================== @@ -0,0 +1,2 @@ +T25530.hs:5:4: error: [GHC-21231] lexical error at character '\\' + ===================================== testsuite/tests/parser/should_fail/all.T ===================================== @@ -231,9 +231,13 @@ test('T17879a', normal, compile_fail, ['']) test('T17879b', normal, compile_fail, ['']) test('Or1', normal, compile_fail, ['']) test('OrPatInExprErr', normal, compile_fail, ['']) + +# Multiline Strings test('MultilineStringsError', [normalise_whitespace_fun(lambda s: s)], compile_fail, ['']) test('MultilineStringsSmartQuotes', normal, compile_fail, ['']) test('MultilineStringsInnerTab', normal, compile_fail, ['']) +test('MultilineStringsUnterminated', normal, compile_fail, ['']) test('T25258a', normal, compile_fail, ['']) test('T25258b', normal, compile_fail, ['']) test('T25258c', normal, compile_fail, ['']) +test('T25530', normal, compile_fail, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b519c06b889139f7e24f1e84d2e30461cc6cf4a5...9e464ad01f5f60f774504fcaf8d0c30bdd291159 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b519c06b889139f7e24f1e84d2e30461cc6cf4a5...9e464ad01f5f60f774504fcaf8d0c30bdd291159 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 21:28:14 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 09 Dec 2024 16:28:14 -0500 Subject: [Git][ghc/ghc][master] Revert mapMG renaming Message-ID: <675760ee82e4e_1f47d616a04cc50447@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 2 changed files: - compiler/GHC.hs - compiler/GHC/Unit/Module/Graph.hs Changes: ===================================== compiler/GHC.hs ===================================== @@ -74,7 +74,7 @@ module GHC ( compileToCoreModule, compileToCoreSimplified, -- * Inspecting the module structure of the program - ModuleGraph, emptyMG, mgMap, mkModuleGraph, mgModSummaries, + ModuleGraph, emptyMG, mapMG, mkModuleGraph, mgModSummaries, mgLookupModule, ModSummary(..), ms_mod_name, ModLocation(..), pattern ModLocation, @@ -874,7 +874,7 @@ setProgramDynFlags_ invalidate_needed dflags = do -- invalidateModSummaryCache :: GhcMonad m => m () invalidateModSummaryCache = - modifySession $ \h -> h { hsc_mod_graph = mgMap inval (hsc_mod_graph h) } + modifySession $ \h -> h { hsc_mod_graph = mapMG inval (hsc_mod_graph h) } where inval ms = ms { ms_hs_hash = fingerprint0 } ===================================== compiler/GHC/Unit/Module/Graph.hs ===================================== @@ -46,7 +46,7 @@ module GHC.Unit.Module.Graph -- (without changing the 'ModuleGraph' structure itself!). -- 'mgModSummaries' lists out all 'ModSummary's, and -- 'mgLookupModule' looks up a 'ModSummary' for a given module. - , mgMap, mgMapM + , mapMG, mgMapM , mgModSummaries , mgLookupModule @@ -239,8 +239,8 @@ lengthMG = length . mg_mss -- | Map a function 'f' over all the 'ModSummaries'. -- To preserve invariants, 'f' can't change the isBoot status. -mgMap :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph -mgMap f mg at ModuleGraph{..} = mg +mapMG :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph +mapMG f mg at ModuleGraph{..} = mg { mg_mss = flip fmap mg_mss $ \case InstantiationNode uid iuid -> InstantiationNode uid iuid LinkNode uid nks -> LinkNode uid nks View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ed1ed5c6d8a7cb934fe7b91c3e03cce4556dcc71 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ed1ed5c6d8a7cb934fe7b91c3e03cce4556dcc71 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 21:28:55 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 09 Dec 2024 16:28:55 -0500 Subject: [Git][ghc/ghc][master] RTS: make Cabal flags manual Message-ID: <675761171c268_1f47d61b720e0506a3@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - 1 changed file: - rts/rts.cabal Changes: ===================================== rts/rts.cabal ===================================== @@ -30,38 +30,55 @@ source-repository head flag libm default: False + manual: True flag librt default: False + manual: True flag libdl default: False + manual: True flag use-system-libffi default: False + manual: True flag libffi-adjustors default: False + manual: True flag need-pthread default: False + manual: True flag libbfd default: False + manual: True flag need-atomic default: False + manual: True flag libdw default: False + manual: True flag libnuma default: False + manual: True flag libzstd default: False + manual: True flag static-libzstd default: False + manual: True flag leading-underscore default: False + manual: True flag unregisterised default: False + manual: True flag tables-next-to-code default: False + manual: True flag smp default: True + manual: True flag find-ptr default: False + manual: True -- Some cabal flags used to control the flavours we want to produce -- for libHSrts in hadrian. By default, we just produce vanilla and -- threaded. The flags "compose": if you enable debug and profiling, @@ -69,18 +86,23 @@ flag find-ptr -- _thr_debug_p and so on. flag profiling default: False + manual: True flag debug default: False + manual: True flag dynamic default: False + manual: True flag threaded default: False + manual: True flag thread-sanitizer description: Enable checking for data races using the ThreadSanitizer (TSAN) mechanism supported by GCC and Clang. See Note [ThreadSanitizer] in @rts/include/rts/TSANUtils.h at . default: False + manual: True library -- rts is a wired in package and View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/158261f72fbc97f072046eb6b64f2856639c7264 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/158261f72fbc97f072046eb6b64f2856639c7264 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 21:42:14 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 16:42:14 -0500 Subject: [Git][ghc/ghc][wip/bco-name] rts: Annotate BCOs with their Name Message-ID: <67576436aa1fc_1f47d61c6e458553c2@gitlab.mail> Ben Gamari pushed to branch wip/bco-name at Glasgow Haskell Compiler / GHC Commits: fe31a25d by Ben Gamari at 2024-12-09T16:41:58-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 15 changed files: - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/StgToByteCode.hs - compiler/GHC/Unit/Info.hs - compiler/ghc.cabal.in - docs/users_guide/debugging.rst - hadrian/src/Rules/Rts.hs - rts/Disassembler.c - rts/Interpreter.c - rts/include/rts/Bytecodes.h - rts/rts.cabal - testsuite/tests/th/T10279.hs - testsuite/tests/th/T10279.stderr Changes: ===================================== compiler/GHC/ByteCode/Asm.hs ===================================== @@ -106,7 +106,7 @@ assembleBCOs interp profile proto_bcos tycons top_strs modbreaks spt_entries = d bcos' <- mallocStrings interp bcos return CompiledByteCode { bc_bcos = bcos' - , bc_itbls = itblenv + , bc_itbls = itblenv , bc_ffis = concatMap protoBCOFFIs proto_bcos , bc_strs = top_strs , bc_breaks = modbreaks @@ -178,11 +178,12 @@ assembleOneBCO interp profile pbco = do return ubco' assembleBCO :: Platform -> ProtoBCO Name -> IO UnlinkedBCO -assembleBCO platform (ProtoBCO { protoBCOName = nm - , protoBCOInstrs = instrs - , protoBCOBitmap = bitmap - , protoBCOBitmapSize = bsize - , protoBCOArity = arity }) = do +assembleBCO platform + (ProtoBCO { protoBCOName = nm + , protoBCOInstrs = instrs + , protoBCOBitmap = bitmap + , protoBCOBitmapSize = bsize + , protoBCOArity = arity }) = do -- pass 1: collect up the offsets of the local labels. let asm = mapM_ (assembleI platform) instrs @@ -527,6 +528,10 @@ assembleI platform i = case i of , SmallOp tickx, SmallOp infox , Op np ] +#if MIN_VERSION_rts(1,0,3) + BCO_NAME name -> do np <- lit [BCONPtrStr name] + emit bci_BCO_NAME [Op np] +#endif where literal (LitLabel fs _) = litlabel fs ===================================== compiler/GHC/ByteCode/Instr.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -funbox-strict-fields #-} @@ -27,6 +27,10 @@ import GHC.Runtime.Heap.Layout ( StgWord ) import Data.Int import Data.Word +#if MIN_VERSION_rts(1,0,3) +import Data.ByteString (ByteString) +#endif + import GHC.Stack.CCS (CostCentre) import GHC.Stg.Syntax @@ -229,6 +233,22 @@ data BCInstr !Word16 -- breakpoint info index (RemotePtr CostCentre) +#if MIN_VERSION_rts(1,0,3) + -- | A "meta"-instruction for recording the name of a BCO for debugging purposes. + -- These are ignored by the interpreter but helpfully printed by the disassmbler. + | BCO_NAME !ByteString +#endif + + +{- Note [BCO_NAME] + ~~~~~~~~~~~~~~~ + The BCO_NAME instruction is a debugging-aid enabled with the -fadd-bco-name flag. + When enabled the bytecode assembler will prepend a BCO_NAME instruction to every + generated bytecode object capturing the STG name of the binding the BCO implements. + This is then printed by the bytecode disassembler, allowing bytecode objects to be + readily correlated with their STG and Core source. + -} + -- ----------------------------------------------------------------------------- -- Printing bytecode instructions @@ -383,6 +403,9 @@ instance Outputable BCInstr where <+> text "" <+> ppr tickx <+> text "" <+> ppr infox <+> text "" +#if MIN_VERSION_rts(1,0,3) + ppr (BCO_NAME nm) = text "BCO_NAME" <+> text (show nm) +#endif @@ -487,3 +510,6 @@ bciStackUse SLIDE{} = 0 bciStackUse MKAP{} = 0 bciStackUse MKPAP{} = 0 bciStackUse PACK{} = 1 -- worst case is PACK 0 words +#if MIN_VERSION_rts(1,0,3) +bciStackUse BCO_NAME{} = 0 +#endif ===================================== compiler/GHC/Driver/Flags.hs ===================================== @@ -573,6 +573,7 @@ data GeneralFlag | Opt_DoAsmLinting | Opt_DoAnnotationLinting | Opt_DoBoundsChecking + | Opt_AddBcoName | Opt_NoLlvmMangler -- hidden flag | Opt_FastLlvm -- hidden flag | Opt_NoTypeableBinds ===================================== compiler/GHC/Driver/Session.hs ===================================== @@ -2532,6 +2532,7 @@ fFlagsDeps = [ flagSpec "catch-nonexhaustive-cases" Opt_CatchNonexhaustiveCases, flagSpec "alignment-sanitisation" Opt_AlignmentSanitisation, flagSpec "check-prim-bounds" Opt_DoBoundsChecking, + flagSpec "add-bco-name" Opt_AddBcoName, flagSpec "num-constant-folding" Opt_NumConstantFolding, flagSpec "core-constant-folding" Opt_CoreConstantFolding, flagSpec "fast-pap-calls" Opt_FastPAPCalls, ===================================== compiler/GHC/StgToByteCode.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} @@ -81,6 +81,10 @@ import GHC.Unit.Home.ModInfo (lookupHpt) import Data.Array import Data.Coerce (coerce) import Data.ByteString (ByteString) +#if MIN_VERSION_rts(1,0,3) +import qualified Data.ByteString as BS +#endif +import Data.ByteSt import Data.Map (Map) import Data.IntMap (IntMap) import qualified Data.Map as Map @@ -236,7 +240,10 @@ ppBCEnv p -- Create a BCO and do a spot of peephole optimisation on the insns -- at the same time. mkProtoBCO - :: Platform + :: (Outputable name) + => Platform + -> Bool -- ^ True <=> label with @BCO_NAME@ instruction + -- see Note [BCO_NAME] -> name -> BCInstrList -> Either [CgStgAlt] (CgStgRhs) @@ -247,10 +254,10 @@ mkProtoBCO -> Bool -- ^ True <=> is a return point, rather than a function -> [FFIInfo] -> ProtoBCO name -mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis +mkProtoBCO platform _add_bco_name nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis = ProtoBCO { protoBCOName = nm, - protoBCOInstrs = maybe_with_stack_check, + protoBCOInstrs = maybe_add_bco_name $ maybe_add_stack_check peep_d, protoBCOBitmap = bitmap, protoBCOBitmapSize = fromIntegral bitmap_size, protoBCOArity = arity, @@ -258,6 +265,14 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi protoBCOFFIs = ffis } where +#if MIN_VERSION_rts(1,0,3) + maybe_add_bco_name instrs + | _add_bco_name = BCO_NAME str : instrs + where + str = BS.pack $ showSDocOneLine defaultSDocContext (ppr nm) +#endif + maybe_add_bco_name instrs = instrs + -- Overestimate the stack usage (in words) of this BCO, -- and if >= iNTERP_STACK_CHECK_THRESH, add an explicit -- stack check. (The interpreter always does a stack check @@ -265,17 +280,17 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi -- BCO anyway, so we only need to add an explicit one in the -- (hopefully rare) cases when the (overestimated) stack use -- exceeds iNTERP_STACK_CHECK_THRESH. - maybe_with_stack_check - | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = peep_d + maybe_add_stack_check instrs + | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = instrs -- don't do stack checks at return points, -- everything is aggregated up to the top BCO -- (which must be a function). -- That is, unless the stack usage is >= AP_STACK_SPLIM, -- see bug #1466. | stack_usage >= fromIntegral iNTERP_STACK_CHECK_THRESH - = STKCHECK stack_usage : peep_d + = STKCHECK stack_usage : instrs | otherwise - = peep_d -- the supposedly common case + = instrs -- the supposedly common case -- We assume that this sum doesn't wrap stack_usage = sum (map bciStackUse peep_d) @@ -308,6 +323,7 @@ schemeTopBind (id, rhs) | Just data_con <- isDataConWorkId_maybe id, isNullaryRepDataCon data_con = do platform <- profilePlatform <$> getProfile + add_bco_name <- shouldAddBcoName -- Special case for the worker of a nullary data con. -- It'll look like this: Nil = /\a -> Nil a -- If we feed it into schemeR, we'll get @@ -316,7 +332,8 @@ schemeTopBind (id, rhs) -- by just re-using the single top-level definition. So -- for the worker itself, we must allocate it directly. -- ioToBc (putStrLn $ "top level BCO") - emitBc (mkProtoBCO platform (getName id) (toOL [PACK data_con 0, RETURN P]) + emitBc (mkProtoBCO platform add_bco_name + (getName id) (toOL [PACK data_con 0, RETURN P]) (Right rhs) 0 0 [{-no bitmap-}] False{-not alts-}) | otherwise @@ -358,6 +375,7 @@ schemeR_wrk -> BcM (ProtoBCO Name) schemeR_wrk fvs nm original_body (args, body) = do + add_bco_name <- shouldAddBcoName profile <- getProfile let platform = profilePlatform profile @@ -379,7 +397,7 @@ schemeR_wrk fvs nm original_body (args, body) bitmap = mkBitmap platform bits body_code <- schemeER_wrk sum_szsb_args p_init body - emitBc (mkProtoBCO platform nm body_code (Right original_body) + emitBc (mkProtoBCO platform add_bco_name nm body_code (Right original_body) arity bitmap_size bitmap False{-not alts-}) -- | Introduce break instructions for ticked expressions. @@ -1069,9 +1087,10 @@ doCase d s p scrut bndr alts | ubx_tuple_frame = SLIDE 0 2 `consOL` alt_final0 | otherwise = alt_final0 + add_bco_name <- shouldAddBcoName let alt_bco_name = getName bndr - alt_bco = mkProtoBCO platform alt_bco_name alt_final (Left alts) + alt_bco = mkProtoBCO platform add_bco_name alt_bco_name alt_final (Left alts) 0{-no arity-} bitmap_size bitmap True{-is alts-} scrut_code <- schemeE (d + ret_frame_size_b + save_ccs_size_b) (d + ret_frame_size_b + save_ccs_size_b) @@ -1379,7 +1398,7 @@ Note [unboxed tuple bytecodes and tuple_BCO] tupleBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name tupleBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -1398,9 +1417,9 @@ tupleBCO platform args_info args = body_code = mkSlideW 0 1 -- pop frame header `snocOL` RETURN_TUPLE -- and add it again -primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name +primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name primCallBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -2337,6 +2356,9 @@ getHscEnv = BcM $ \st -> return (st, bcm_hsc_env st) getProfile :: BcM Profile getProfile = targetProfile <$> getDynFlags +shouldAddBcoName :: BcM Bool +shouldAddBcoName = gopt Opt_AddBcoName <$> getDynFlags + emitBc :: ([FFIInfo] -> ProtoBCO Name) -> BcM (ProtoBCO Name) emitBc bco = BcM $ \st -> return (st{ffis=[]}, bco (ffis st)) ===================================== compiler/GHC/Unit/Info.hs ===================================== @@ -236,7 +236,7 @@ unitHsLibs namever ways0 p = map (mkDynName . addSuffix . ST.unpack) (unitLibrar -- This change elevates the need to add custom hooks -- and handling specifically for the `rts` package. addSuffix rts@"HSrts" = rts ++ (expandTag rts_tag) - addSuffix rts@"HSrts-1.0.2" = rts ++ (expandTag rts_tag) + addSuffix rts@"HSrts-1.0.3" = rts ++ (expandTag rts_tag) addSuffix other_lib = other_lib ++ (expandTag tag) expandTag t | null t = "" ===================================== compiler/ghc.cabal.in ===================================== @@ -130,6 +130,7 @@ Library exceptions == 0.10.*, semaphore-compat, stm, + rts, ghc-boot == @ProjectVersionMunged@, ghc-heap == @ProjectVersionMunged@, ghci == @ProjectVersionMunged@ ===================================== docs/users_guide/debugging.rst ===================================== @@ -1240,8 +1240,7 @@ Other :type: dynamic :since: 9.8.1 - - default: enabled + :default: enabled At the moment, ghci disables optimizations, because not all passes are compatible with the interpreter. @@ -1254,3 +1253,16 @@ Other expressions. Those cannot be stored in breakpoints, so any free variable that refers to optimized code will not be inspectable when this flag is enabled. + +.. ghc-flag:: -fadd-bco-name + :shortdesc: Add ``BCO_NAME`` instructions in generated bytecode. + :reverse: -fno-add-bco-name + :type: dynamic + + :since: 9.14.1 + + Prefix every generated bytecode object with a ``BCO_NAME`` instruction + containing the STG name of the binding from which the BCO originated. + These are printed by the bytecode disassembler, aiding in correlating + bytecode with STG. + ===================================== hadrian/src/Rules/Rts.hs ===================================== @@ -165,7 +165,7 @@ needRtsSymLinks stage rtsWays prefix, versionlessPrefix :: String versionlessPrefix = "libHSrts" -prefix = versionlessPrefix ++ "-1.0.2" +prefix = versionlessPrefix ++ "-1.0.3" -- removeRtsDummyVersion "a/libHSrts-1.0-ghc1.2.3.4.so" -- == "a/libHSrts-ghc1.2.3.4.so" ===================================== rts/Disassembler.c ===================================== @@ -452,6 +452,13 @@ disInstr ( StgBCO *bco, int pc ) debugBelch("RETURN_T\n "); break; + case bci_BCO_NAME: { + const char *name = (const char*) literals[instrs[pc]]; + debugBelch("BCO_NAME \"%s\"\n ", name); + pc += 1; + break; + } + default: barf("disInstr: unknown opcode %u", (unsigned int) instr); } @@ -464,10 +471,9 @@ void disassemble( StgBCO *bco ) StgWord16* instrs = (StgWord16*)(bco->instrs->payload); StgMutArrPtrs* ptrs = bco->ptrs; uint32_t nbcs = (uint32_t)(bco->instrs->bytes / sizeof(StgWord16)); - uint32_t pc = 1; + uint32_t pc = 0; debugBelch("BCO\n" ); - pc = 0; while (pc < nbcs) { debugBelch("\t%2d: ", pc ); pc = disInstr ( bco, pc ); ===================================== rts/Interpreter.c ===================================== @@ -2087,6 +2087,10 @@ run_BCO: goto do_return_nonpointer; } + case bci_BCO_NAME: + bciPtr++; + goto nextInsn; + case bci_SWIZZLE: { W_ stkoff = BCO_GET_LARGE_ARG; StgInt n = BCO_GET_LARGE_ARG; ===================================== rts/include/rts/Bytecodes.h ===================================== @@ -112,6 +112,8 @@ #define bci_PRIMCALL 87 +#define bci_BCO_NAME 88 + /* If you need to go past 255 then you will run into the flags */ /* If you need to go below 0x0100 then you will run into the instructions */ ===================================== rts/rts.cabal ===================================== @@ -1,6 +1,6 @@ cabal-version: 3.0 name: rts -version: 1.0.2 +version: 1.0.3 synopsis: The GHC runtime system description: The GHC runtime system. ===================================== testsuite/tests/th/T10279.hs ===================================== @@ -7,4 +7,4 @@ import Language.Haskell.TH.Syntax -- error message doesn't recognize it as a source package ID, -- (This is OK, since it will look obviously wrong when they -- try to find the package in their package database.) -blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) +blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) ===================================== testsuite/tests/th/T10279.stderr ===================================== @@ -1,11 +1,11 @@ T10279.hs:10:9: error: [GHC-51294] • Failed to load interface for ‘A’. - no unit id matching ‘rts-1.0.2’ was found + no unit id matching ‘rts-1.0.3’ was found (This unit ID looks like the source package ID; the real unit ID is ‘rts’) • In the untyped splice: $(conE (Name (mkOccName "Foo") - (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) + (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/fe31a25d9626b68a1b7079da83bc2ee5d239c566 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/fe31a25d9626b68a1b7079da83bc2ee5d239c566 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 21:44:39 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 16:44:39 -0500 Subject: [Git][ghc/ghc][wip/T25560] 2 commits: rts: Determine max_n_capabilities at RTS startup Message-ID: <675764c7210dd_3e628be6402314b@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 608b4535 by Ben Gamari at 2024-12-09T16:43:10-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 616680d3 by Ben Gamari at 2024-12-09T16:43:10-05:00 testsuite: Add test for #25560 - - - - - 10 changed files: - docs/users_guide/using-concurrent.rst - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - + testsuite/tests/rts/T25560.hs - + testsuite/tests/rts/T25560.stderr - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -157,8 +157,9 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. .. note:: The maximum number of capabilities supported by the GHC runtime system is - determined when the compiler is built and currently defaults to 256 - capabilities. + determined when at RTS startup to be either 256, the value given by + :rts-flag:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. The following options affect the way the runtime schedules threads on CPUs: ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +StgInt max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -386,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + int32_t core_count = getNumberOfProcessors(); + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; ===================================== rts/Capability.h ===================================== @@ -270,11 +270,13 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,10 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; - } else if (new_n_capabilities > MAX_N_CAPABILITIES) { - errorBelch("Attempt to increase capability count beyond MAX_N_CAPABILITIES\n"); - return; + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count %d; clamping...\n", max_n_capabilities); + new_n_capabilities = max_n_capabilities; } debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", ===================================== rts/include/rts/Config.h ===================================== @@ -79,6 +79,7 @@ code. #if defined(THREADED_RTS) /* + * See Note [Capabilities array sizing] in rts/Capability.c. * Update the note in docs/users_guide/using-concurrent.rst when updating this. */ #define MAX_N_CAPABILITIES 256 ===================================== rts/include/rts/Threads.h ===================================== @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern StgInt max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/T25560.stderr ===================================== @@ -0,0 +1,3 @@ +T25560: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException: + +user error (setNumCapabilities: This GHC build only supports up to 1 capabilities) ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [normal, ignore_stderr], compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/461c66bebe3ae285b6d1293e853f701bc542b719...616680d37c31f2a5ede7cf37878cdd84ad38a941 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/461c66bebe3ae285b6d1293e853f701bc542b719...616680d37c31f2a5ede7cf37878cdd84ad38a941 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 21:59:34 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 16:59:34 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25564 Message-ID: <67576846b0e22_3e628357424266be@gitlab.mail> Ben Gamari pushed new branch wip/T25564 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25564 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 22:05:54 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 17:05:54 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T24935 Message-ID: <675769c24bd8a_3e6282fb3b82833d@gitlab.mail> Ben Gamari pushed new branch wip/T24935 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T24935 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 9 23:59:22 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 09 Dec 2024 18:59:22 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 6 commits: Fix panic in multiline string with unterminated gap (#25530) Message-ID: <6757845a57b6d_2d82fb1e3cb475889@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - dcf37372 by Matthew Stephenson at 2024-12-09T18:59:04-05:00 Add missing @since documentation for (!?) function - - - - - 5ede1dab by Ben Gamari at 2024-12-09T18:59:04-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 11 changed files: - compiler/GHC.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/Parser/Lexer.x - compiler/GHC/Unit/Module/Graph.hs - libraries/ghc-internal/src/GHC/Internal/List.hs - rts/rts.cabal - + testsuite/tests/parser/should_fail/MultilineStringsUnterminated.hs - + testsuite/tests/parser/should_fail/MultilineStringsUnterminated.stderr - + testsuite/tests/parser/should_fail/T25530.hs - + testsuite/tests/parser/should_fail/T25530.stderr - testsuite/tests/parser/should_fail/all.T Changes: ===================================== compiler/GHC.hs ===================================== @@ -74,7 +74,7 @@ module GHC ( compileToCoreModule, compileToCoreSimplified, -- * Inspecting the module structure of the program - ModuleGraph, emptyMG, mgMap, mkModuleGraph, mgModSummaries, + ModuleGraph, emptyMG, mapMG, mkModuleGraph, mgModSummaries, mgLookupModule, ModSummary(..), ms_mod_name, ModLocation(..), pattern ModLocation, @@ -874,7 +874,7 @@ setProgramDynFlags_ invalidate_needed dflags = do -- invalidateModSummaryCache :: GhcMonad m => m () invalidateModSummaryCache = - modifySession $ \h -> h { hsc_mod_graph = mgMap inval (hsc_mod_graph h) } + modifySession $ \h -> h { hsc_mod_graph = mapMG inval (hsc_mod_graph h) } where inval ms = ms { ms_hs_hash = fingerprint0 } ===================================== compiler/GHC/Cmm/ThreadSanitizer.hs ===================================== @@ -209,8 +209,9 @@ tsanTarget fn formals args = tsanStore :: Env -> CmmType -> CmmExpr -> Block CmmNode O O -tsanStore env ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanStore env ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) @@ -219,8 +220,9 @@ tsanStore env ty addr = tsanLoad :: Env -> AlignmentSpec -> CmmType -> CmmExpr -> Block CmmNode O O -tsanLoad env align ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanLoad env align ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) ===================================== compiler/GHC/Parser/Lexer.x ===================================== @@ -2204,14 +2204,15 @@ tok_string_multi startSpan startBuf _len _buf2 = do case alexScan i0 string_multi_content of AlexToken i1 len _ | Just i2 <- lexDelim i1 -> pure (i1, i2) - | -- is the next token a tab character? - -- need this explicitly because there's a global rule matching $tab - Just ('\t', _) <- alexGetChar' i1 -> setInput i1 >> lexError LexError - | isEOF i1 -> checkSmartQuotes >> lexError LexError - | len == 0 -> panic $ "parsing multiline string got into infinite loop at: " ++ show i0 + | isEOF i1 -> checkSmartQuotes >> setInput i1 >> lexError LexError + -- is the next token a tab character? + -- need this explicitly because there's a global rule matching $tab + | Just ('\t', _) <- alexGetChar' i1 -> setInput i1 >> lexError LexError + -- Can happen if no patterns match, e.g. an unterminated gap + | len == 0 -> setInput i1 >> lexError LexError | otherwise -> goContent i1 AlexSkip i1 _ -> goContent i1 - _ -> lexError LexError + _ -> setInput i0 >> lexError LexError lexDelim = let go 0 i = Just i ===================================== compiler/GHC/Unit/Module/Graph.hs ===================================== @@ -46,7 +46,7 @@ module GHC.Unit.Module.Graph -- (without changing the 'ModuleGraph' structure itself!). -- 'mgModSummaries' lists out all 'ModSummary's, and -- 'mgLookupModule' looks up a 'ModSummary' for a given module. - , mgMap, mgMapM + , mapMG, mgMapM , mgModSummaries , mgLookupModule @@ -239,8 +239,8 @@ lengthMG = length . mg_mss -- | Map a function 'f' over all the 'ModSummaries'. -- To preserve invariants, 'f' can't change the isBoot status. -mgMap :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph -mgMap f mg at ModuleGraph{..} = mg +mapMG :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph +mapMG f mg at ModuleGraph{..} = mg { mg_mss = flip fmap mg_mss $ \case InstantiationNode uid iuid -> InstantiationNode uid iuid LinkNode uid nks -> LinkNode uid nks ===================================== libraries/ghc-internal/src/GHC/Internal/List.hs ===================================== @@ -1643,6 +1643,8 @@ xs !! n -- -- WARNING: This function takes linear time in the index. -- +-- @since base-4.19.0.0 +-- -- ==== __Examples__ -- -- >>> ['a', 'b', 'c'] !? 0 ===================================== rts/rts.cabal ===================================== @@ -30,38 +30,55 @@ source-repository head flag libm default: False + manual: True flag librt default: False + manual: True flag libdl default: False + manual: True flag use-system-libffi default: False + manual: True flag libffi-adjustors default: False + manual: True flag need-pthread default: False + manual: True flag libbfd default: False + manual: True flag need-atomic default: False + manual: True flag libdw default: False + manual: True flag libnuma default: False + manual: True flag libzstd default: False + manual: True flag static-libzstd default: False + manual: True flag leading-underscore default: False + manual: True flag unregisterised default: False + manual: True flag tables-next-to-code default: False + manual: True flag smp default: True + manual: True flag find-ptr default: False + manual: True -- Some cabal flags used to control the flavours we want to produce -- for libHSrts in hadrian. By default, we just produce vanilla and -- threaded. The flags "compose": if you enable debug and profiling, @@ -69,18 +86,23 @@ flag find-ptr -- _thr_debug_p and so on. flag profiling default: False + manual: True flag debug default: False + manual: True flag dynamic default: False + manual: True flag threaded default: False + manual: True flag thread-sanitizer description: Enable checking for data races using the ThreadSanitizer (TSAN) mechanism supported by GCC and Clang. See Note [ThreadSanitizer] in @rts/include/rts/TSANUtils.h at . default: False + manual: True library -- rts is a wired in package and ===================================== testsuite/tests/parser/should_fail/MultilineStringsUnterminated.hs ===================================== @@ -0,0 +1,9 @@ +{-# LANGUAGE MultilineStrings #-} + +x :: String +x = + """ + test + +y :: Int +y = 0 ===================================== testsuite/tests/parser/should_fail/MultilineStringsUnterminated.stderr ===================================== @@ -0,0 +1,3 @@ +MultilineStringsUnterminated.hs:10:1: error: [GHC-21231] + lexical error at end of input + ===================================== testsuite/tests/parser/should_fail/T25530.hs ===================================== @@ -0,0 +1,9 @@ +{-# LANGUAGE MultilineStrings #-} + +foo = + """ + a\ + b + """ + +main = print foo ===================================== testsuite/tests/parser/should_fail/T25530.stderr ===================================== @@ -0,0 +1,2 @@ +T25530.hs:5:4: error: [GHC-21231] lexical error at character '\\' + ===================================== testsuite/tests/parser/should_fail/all.T ===================================== @@ -231,9 +231,13 @@ test('T17879a', normal, compile_fail, ['']) test('T17879b', normal, compile_fail, ['']) test('Or1', normal, compile_fail, ['']) test('OrPatInExprErr', normal, compile_fail, ['']) + +# Multiline Strings test('MultilineStringsError', [normalise_whitespace_fun(lambda s: s)], compile_fail, ['']) test('MultilineStringsSmartQuotes', normal, compile_fail, ['']) test('MultilineStringsInnerTab', normal, compile_fail, ['']) +test('MultilineStringsUnterminated', normal, compile_fail, ['']) test('T25258a', normal, compile_fail, ['']) test('T25258b', normal, compile_fail, ['']) test('T25258c', normal, compile_fail, ['']) +test('T25530', normal, compile_fail, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bcee6f20f4c86fad233d2aea35b8453adb8093e3...5ede1dab5fbf9d67d9adcd2686b98bc5445fd447 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bcee6f20f4c86fad233d2aea35b8453adb8093e3...5ede1dab5fbf9d67d9adcd2686b98bc5445fd447 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 01:43:27 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 20:43:27 -0500 Subject: [Git][ghc/ghc][wip/T25564] hadrian: Mitigate mktexfmt race Message-ID: <67579cbfcb2ab_2d82fbe1542486490@gitlab.mail> Ben Gamari pushed to branch wip/T25564 at Glasgow Haskell Compiler / GHC Commits: 46e75fc9 by Ben Gamari at 2024-12-09T20:43:18-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 1 changed file: - hadrian/src/Rules/Documentation.hs Changes: ===================================== hadrian/src/Rules/Documentation.hs ===================================== @@ -326,11 +326,27 @@ getPkgDocTarget root path = -- | Build all PDF documentation buildPdfDocumentation :: Rules () -buildPdfDocumentation = mapM_ buildSphinxPdf docPaths +buildPdfDocumentation = do + -- Note [Avoiding mktexfmt race] + -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + -- We must ensure that the *first* xelatex invocation in the + -- build is performed serially (that is, not concurrently with + -- any other xelatex invocations) as mktexfmt does not handle + -- racing `mkdir` calls gracefully. However, we assume that + -- subsequent invocations are safe to run concurrently since the + -- initial call will have created the requisite directories (namely + -- $HOME/.texlive2020/texmf-var/web2c). + -- + -- Fixes #25564. + let maxConcurrentReaders = 1000 + xelatexMutex <- newResource "xelatex-mutex" maxConcurrentReaders + let rs = [(xelatexMutex, 1)] + + mapM_ (buildSphinxPdf rs) docPaths -- | Compile a Sphinx ReStructured Text package to LaTeX -buildSphinxPdf :: FilePath -> Rules () -buildSphinxPdf path = do +buildSphinxPdf :: [(Resource, Int)] -> FilePath -> Rules () +buildSphinxPdf rs path = do root <- buildRootRules root -/- pdfRoot -/- path <.> "pdf" %> \file -> do @@ -344,7 +360,8 @@ buildSphinxPdf path = do checkSphinxWarnings dir -- LaTeX "fixed point" - build $ target docContext Xelatex [path <.> "tex"] [dir] + -- See Note [Avoiding mktexfmt race] above. + buildWithResources rs $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Makeindex [path <.> "idx"] [dir] View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/46e75fc9a0f8ff2644e91846291b5f92b9b76846 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/46e75fc9a0f8ff2644e91846291b5f92b9b76846 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 02:58:56 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 09 Dec 2024 21:58:56 -0500 Subject: [Git][ghc/ghc][wip/T25560] 5 commits: ghc-internal: Fix inconsistent FFI import types Message-ID: <6757ae709e6d6_2d82fb14f661c88529@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: ccc6d217 by Ben Gamari at 2024-12-09T21:58:47-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - fbf31ce8 by Ben Gamari at 2024-12-09T21:58:47-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - aa8b7f6d by Ben Gamari at 2024-12-09T21:58:47-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - f61a88b7 by Ben Gamari at 2024-12-09T21:58:47-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e3fc734 by Ben Gamari at 2024-12-09T21:58:47-05:00 testsuite: Add test for #25560 - - - - - 11 changed files: - docs/users_guide/using-concurrent.rst - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - + testsuite/tests/rts/T25560.hs - + testsuite/tests/rts/T25560.stderr - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -153,6 +153,14 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. changed while the program is running by calling ``Control.Concurrent.setNumCapabilities``. + +.. note:: + + The maximum number of capabilities supported by the GHC runtime system is + determined when at RTS startup to be either 256, the value given by + :rts-flag:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. + The following options affect the way the runtime schedules threads on CPUs: ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -394,13 +393,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +uint32_t max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -344,8 +349,6 @@ initCapability (Capability *cap, uint32_t i) * ------------------------------------------------------------------------- */ void initCapabilities (void) { - uint32_t i; - /* Declare a couple capability sets representing the process and clock domain. Each capability will get added to these capsets. */ traceCapsetCreate(CAPSET_OSPROCESS_DEFAULT, CapsetTypeOsProcess); @@ -354,7 +357,7 @@ void initCapabilities (void) // Initialise NUMA if (!RtsFlags.GcFlags.numa) { n_numa_nodes = 1; - for (i = 0; i < MAX_NUMA_NODES; i++) { + for (uint32_t i = 0; i < MAX_NUMA_NODES; i++) { numa_map[i] = 0; } } else if (RtsFlags.DebugFlags.numa) { @@ -388,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + int32_t core_count = getNumberOfProcessors(); + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; @@ -412,7 +433,7 @@ void initCapabilities (void) // There are no free capabilities to begin with. We will start // a worker Task to each Capability, which will quickly put the // Capability on the free list when it finds nothing to do. - for (i = 0; i < n_numa_nodes; i++) { + for (uint32_t i = 0; i < n_numa_nodes; i++) { last_free_capability[i] = getCapability(0); } } ===================================== rts/Capability.h ===================================== @@ -270,11 +270,13 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,10 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; - } else if (new_n_capabilities > MAX_N_CAPABILITIES) { - errorBelch("Attempt to increase capability count beyond MAX_N_CAPABILITIES\n"); - return; + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count %" PRIu32 "; clamping...\n", max_n_capabilities); + new_n_capabilities = max_n_capabilities; } debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", ===================================== rts/include/rts/Config.h ===================================== @@ -78,6 +78,10 @@ code. #endif #if defined(THREADED_RTS) +/* + * See Note [Capabilities array sizing] in rts/Capability.c. + * Update the note in docs/users_guide/using-concurrent.rst when updating this. + */ #define MAX_N_CAPABILITIES 256 #else #define MAX_N_CAPABILITIES 1 ===================================== rts/include/rts/Threads.h ===================================== @@ -69,7 +69,7 @@ HsBool rtsSupportsBoundThreads (void); // The number of Capabilities. // TODO: Ideally we would only provide getNumCapabilities // but this is used in compiler/cbits/genSym.c -extern unsigned int n_capabilities; +extern uint32_t n_capabilities; INLINE_HEADER unsigned int getNumCapabilities(void) { return RELAXED_LOAD(&n_capabilities); } @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern uint32_t max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/T25560.stderr ===================================== @@ -0,0 +1,3 @@ +T25560: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException: + +user error (setNumCapabilities: This GHC build only supports up to 1 capabilities) ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [normal, ignore_stderr], compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/616680d37c31f2a5ede7cf37878cdd84ad38a941...1e3fc734b8596407f53ec600d56a3545e89c9657 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/616680d37c31f2a5ede7cf37878cdd84ad38a941...1e3fc734b8596407f53ec600d56a3545e89c9657 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 04:49:54 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 09 Dec 2024 23:49:54 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 16 commits: testsuite: Unmark T14028 as broken on FreeBSD Message-ID: <6757c8727df0f_72f8b10e9d856471@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: bb0a2c02 by Ben Gamari at 2024-12-09T23:49:25-05:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - 8f5e1db0 by Ben Gamari at 2024-12-09T23:49:25-05:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 2f21822d by Ben Gamari at 2024-12-09T23:49:25-05:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 9ee7bd04 by Ben Gamari at 2024-12-09T23:49:25-05:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - 14b14717 by Ben Gamari at 2024-12-09T23:49:25-05:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - 5c97676f by Ben Gamari at 2024-12-09T23:49:25-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 759da588 by Ben Gamari at 2024-12-09T23:49:25-05:00 gitlab-ci: Use system libffi on FreeBSD - - - - - 5bb9d470 by Ben Gamari at 2024-12-09T23:49:25-05:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - b4f10a3c by Ben Gamari at 2024-12-09T23:49:26-05:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - 260bb125 by Ben Gamari at 2024-12-09T23:49:26-05:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - af426e0a by Ben Gamari at 2024-12-09T23:49:26-05:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 095ef0b2 by Ben Gamari at 2024-12-09T23:49:26-05:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 47353f22 by Ben Gamari at 2024-12-09T23:49:26-05:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - 317d68d5 by Matthew Stephenson at 2024-12-09T23:49:30-05:00 Add missing @since documentation for (!?) function - - - - - e4b329a3 by Ben Gamari at 2024-12-09T23:49:30-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - b6b92bf3 by Ben Gamari at 2024-12-09T23:49:30-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 13 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC/Cmm/ThreadSanitizer.hs - libraries/ghc-compact/tests/all.T - libraries/ghc-internal/src/GHC/Internal/List.hs - m4/find_ld.m4 - testsuite/driver/testlib.py - testsuite/tests/concurrent/should_run/all.T - testsuite/tests/quasiquotation/all.T - testsuite/tests/rts/all.T - testsuite/tests/rts/linker/all.T - testsuite/tests/th/all.T Changes: ===================================== .gitlab/ci.sh ===================================== @@ -326,13 +326,19 @@ function fetch_cabal() { local base_url="https://downloads.haskell.org/~cabal/cabal-install-$v/" case "$(uname)" in Darwin) cabal_url="$base_url/cabal-install-$v-x86_64-apple-darwin17.7.0.tar.xz" ;; - FreeBSD) cabal_url="$base_url/cabal-install-$v-x86_64-freebsd13.tar.xz" ;; + FreeBSD) cabal_url="$base_url/cabal-install-$v-x86_64-freebsd14.tar.xz" ;; *) fail "don't know where to fetch cabal-install for $(uname)" esac echo "Fetching cabal-install from $cabal_url" curl "$cabal_url" > cabal.tar.xz + tmp="$(tar -tJf cabal.tar.xz | head -n1)" $TAR -xJf cabal.tar.xz - mv cabal "$toolchain/bin" + # Check if the bindist has directory structure + if [[ "$tmp" = "cabal" ]]; then + mv cabal "$toolchain/bin" + else + mv "$tmp/cabal" "$toolchain/bin" + fi ;; esac end_section "fetch cabal" @@ -954,7 +960,7 @@ if [ "${CI_COMMIT_BRANCH:-}" == "master" ] && [ "${CI_PROJECT_PATH:-}" == "ghc/ fi fi if [ -n "${IGNORE_PERF_FAILURES:-}" ]; then - RUNTEST_ARGS="--ignore-perf-failures=$IGNORE_PERF_FAILURES" + RUNTEST_ARGS=( "${RUNTEST_ARGS[@]:-}" "--ignore-perf-failures=$IGNORE_PERF_FAILURES" ) fi if [[ -z ${BIGNUM_BACKEND:-} ]]; then BIGNUM_BACKEND=gmp; fi ===================================== .gitlab/generate-ci/gen_ci.hs ===================================== @@ -101,7 +101,7 @@ There are two different modes this script can operate in: data Opsys = Linux LinuxDistro | Darwin - | FreeBSD13 + | FreeBSD14 | Windows deriving (Eq) data LinuxDistro @@ -293,7 +293,7 @@ runnerTag arch (Linux _) = runnerTag AArch64 Darwin = "aarch64-darwin" runnerTag Amd64 Darwin = "x86_64-darwin-m1" runnerTag Amd64 Windows = "new-x86_64-windows" -runnerTag Amd64 FreeBSD13 = "x86_64-freebsd13" +runnerTag Amd64 FreeBSD14 = "x86_64-freebsd14" runnerTag _ _ = error "Invalid arch/opsys" tags :: Arch -> Opsys -> BuildConfig -> [String] @@ -326,7 +326,7 @@ distroName Rocky8 = "rocky8" opsysName :: Opsys -> String opsysName (Linux distro) = "linux-" ++ distroName distro opsysName Darwin = "darwin" -opsysName FreeBSD13 = "freebsd13" +opsysName FreeBSD14 = "freebsd14" opsysName Windows = "windows" archName :: Arch -> String @@ -423,15 +423,19 @@ brokenTest :: TestName -- ^ test name brokenTest test _why = "BROKEN_TESTS" =: test opsysVariables :: Arch -> Opsys -> Variables -opsysVariables _ FreeBSD13 = mconcat +opsysVariables _ FreeBSD14 = mconcat [ -- N.B. we use iconv from ports as I see linker errors when we attempt -- to use the "native" iconv embedded in libc as suggested by the -- porting guide [1]. -- [1] https://www.freebsd.org/doc/en/books/porters-handbook/using-iconv.html) - "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" - , "HADRIAN_ARGS" =: "--docs=no-sphinx" + "CONFIGURE_ARGS" =: "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib" + -- Prefer to use the system's clang-based toolchain and not gcc + , "CC" =: "cc" + , "CXX" =: "c++" , "GHC_VERSION" =: "9.6.4" - , "CABAL_INSTALL_VERSION" =: "3.10.2.0" + , "CABAL_INSTALL_VERSION" =: "3.10.3.0" ] opsysVariables arch (Linux distro) = distroVariables arch distro opsysVariables AArch64 (Darwin {}) = @@ -1140,6 +1144,11 @@ darwin = , fastCI (standardBuilds AArch64 Darwin) ] +freebsd_jobs :: [JobGroup Job] +freebsd_jobs = + [ addValidateRule FreeBSDLabel (standardBuilds Amd64 FreeBSD14) + ] + alpine_x86 :: [JobGroup Job] alpine_x86 = [ -- Fully static build, in theory usable on any linux distribution. @@ -1213,6 +1222,7 @@ job_groups = ++ alpine_x86 ++ alpine_aarch64 ++ cross_jobs + ++ freebsd_jobs mkPlatform :: Arch -> Opsys -> String ===================================== .gitlab/jobs.yaml ===================================== @@ -1082,6 +1082,72 @@ "ac_cv_func_utimensat": "no" } }, + "nightly-x86_64-freebsd14-validate": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "8 weeks", + "paths": [ + "ghc-x86_64-freebsd14-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "(\"true\" == \"true\") && ($RELEASE_JOB != \"yes\") && ($NIGHTLY)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BUILD_FLAVOUR": "validate", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-validate", + "XZ_OPT": "-9" + } + }, "nightly-x86_64-linux-alpine3_12-int_native-validate+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", @@ -3844,6 +3910,74 @@ "ac_cv_func_utimensat": "no" } }, + "release-x86_64-freebsd14-release": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "1 year", + "paths": [ + "ghc-x86_64-freebsd14-release.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "(\"true\" == \"true\") && ($RELEASE_JOB == \"yes\") && ($NIGHTLY == null)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-release", + "BUILD_FLAVOUR": "release", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "HADRIAN_ARGS": "--hash-unit-ids", + "IGNORE_PERF_FAILURES": "all", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-release", + "XZ_OPT": "-9" + } + }, "release-x86_64-linux-alpine3_12-int_native-release+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", @@ -5222,6 +5356,71 @@ "ac_cv_func_utimensat": "no" } }, + "x86_64-freebsd14-validate": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "2 weeks", + "paths": [ + "ghc-x86_64-freebsd14-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-freebsd14-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*FreeBSD.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BUILD_FLAVOUR": "validate", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-validate" + } + }, "x86_64-linux-alpine3_12-int_native-validate+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", ===================================== compiler/GHC/Cmm/ThreadSanitizer.hs ===================================== @@ -209,8 +209,9 @@ tsanTarget fn formals args = tsanStore :: Env -> CmmType -> CmmExpr -> Block CmmNode O O -tsanStore env ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanStore env ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) @@ -219,8 +220,9 @@ tsanStore env ty addr = tsanLoad :: Env -> AlignmentSpec -> CmmType -> CmmExpr -> Block CmmNode O O -tsanLoad env align ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanLoad env align ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) ===================================== libraries/ghc-compact/tests/all.T ===================================== @@ -28,5 +28,8 @@ test('T18757', omit_ghci, compile_and_run, ['']) # N.B. Sanity check times out due to large list. test('T16992', [when(wordsize(32), skip), # Resource limit exceeded on 32-bit high_memory_usage, + # This test has extraordinary memory requirement, + # skip unless testing slow speed + unless(slow(), skip), run_timeout_multiplier(5), omit_ways(['sanity'])], compile_and_run, ['']) ===================================== libraries/ghc-internal/src/GHC/Internal/List.hs ===================================== @@ -1643,6 +1643,8 @@ xs !! n -- -- WARNING: This function takes linear time in the index. -- +-- @since base-4.19.0.0 +-- -- ==== __Examples__ -- -- >>> ['a', 'b', 'c'] !? 0 ===================================== m4/find_ld.m4 ===================================== @@ -79,13 +79,16 @@ AC_DEFUN([FIND_LD],[ dnl See #21712. AC_CHECK_TARGET_TOOL([LD], [ld]) ;; - *) + *-linux|*-mingw32) if test "x$enable_ld_override" = "xyes"; then find_ld else AC_CHECK_TARGET_TOOL([LD], [ld]) fi ;; + *) + AC_CHECK_TARGET_TOOL([LD], [ld]) + ;; esac CHECK_LD_COPY_BUG([$1]) ]) ===================================== testsuite/driver/testlib.py ===================================== @@ -970,6 +970,9 @@ def tables_next_to_code() -> bool: def fast() -> bool: return config.speed == 2 +def slow() -> bool: + return config.speed == 0 + def platform( plat: str ) -> bool: return config.platform == plat ===================================== testsuite/tests/concurrent/should_run/all.T ===================================== @@ -268,6 +268,7 @@ test('T21651', test('T21969', [ only_ways(['threaded1','threaded2', 'nonmoving_thr', 'profthreaded']), when(opsys('mingw32'),skip), # uses POSIX pipes + when(opsys('freebsd'), expect_broken(25512)), extra_run_opts('50000'), run_timeout_multiplier(0.3), # default timeout seems to be 300, but lockups happen quickly req_target_smp, ===================================== testsuite/tests/quasiquotation/all.T ===================================== @@ -8,6 +8,5 @@ test('T7918', test('T14028', [req_interp, req_rts_linker, only_ways([config.ghc_th_way]), - unless(config.have_ext_interp, skip), - when(opsys('freebsd'), expect_broken(19723))], + unless(config.have_ext_interp, skip)], makefile_test, ['T14028 ghcThWayFlags=' + config.ghc_th_way_flags]) ===================================== testsuite/tests/rts/all.T ===================================== @@ -531,7 +531,9 @@ test('InitEventLogging', ], compile_and_run, ['InitEventLogging_c.c']) test('RestartEventLogging', - [only_ways(['threaded1','threaded2']), extra_run_opts('+RTS -la -RTS')], + [only_ways(['threaded1','threaded2']), + extra_run_opts('+RTS -la -RTS'), + when(opsys('freebsd'), fragile(19724))], compile_and_run, ['RestartEventLogging_c.c']) test('T17088', ===================================== testsuite/tests/rts/linker/all.T ===================================== @@ -108,6 +108,7 @@ test('T5435_dyn_gcc', ###################################### test('linker_unload', [extra_files(['LinkerUnload.hs', 'Test.hs']), + when(opsys('freebsd'), expect_broken(25491)), req_rts_linker], makefile_test, ['linker_unload']) ===================================== testsuite/tests/th/all.T ===================================== @@ -488,9 +488,9 @@ test('T15471', normal, multimod_compile, ['T15471.hs', '-v0']) test('T16180', [when(llvm_build(), expect_broken_for(16541, ['ext-interp'])), req_asm, - # Ideally OpenBSD should have expect_broken_for(14012, ['ext-interp']). + # Ideally {Free,Open}BSD should have expect_broken_for(14012, ['ext-interp']). # Except the failure is in compilation so skip seems the best we can do. - when(opsys('openbsd'), skip), + when(opsys('openbsd') or opsys('freebsd'), skip), expect_broken_for(16541, ghci_ways)], compile_and_run, ['-package ghc']) test('T16183', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/5ede1dab5fbf9d67d9adcd2686b98bc5445fd447...b6b92bf3b60ae26bbeb5d2a6308a2ee65b0c5ab6 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/5ede1dab5fbf9d67d9adcd2686b98bc5445fd447...b6b92bf3b60ae26bbeb5d2a6308a2ee65b0c5ab6 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 08:40:51 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 10 Dec 2024 03:40:51 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 16 commits: testsuite: Unmark T14028 as broken on FreeBSD Message-ID: <6757fe92eaa2a_103ec1109b400917e1@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: d24fc2d9 by Ben Gamari at 2024-12-10T03:40:23-05:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - 3a8224e7 by Ben Gamari at 2024-12-10T03:40:23-05:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 01e2c9b8 by Ben Gamari at 2024-12-10T03:40:24-05:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - be408e84 by Ben Gamari at 2024-12-10T03:40:24-05:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - a0a5552b by Ben Gamari at 2024-12-10T03:40:24-05:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - 07e94a40 by Ben Gamari at 2024-12-10T03:40:24-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 5f6b5e2b by Ben Gamari at 2024-12-10T03:40:24-05:00 gitlab-ci: Use system libffi on FreeBSD - - - - - e57ee6c0 by Ben Gamari at 2024-12-10T03:40:24-05:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - b04ab22b by Ben Gamari at 2024-12-10T03:40:24-05:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - a608a678 by Ben Gamari at 2024-12-10T03:40:24-05:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 70b14532 by Ben Gamari at 2024-12-10T03:40:24-05:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 1be5cd19 by Ben Gamari at 2024-12-10T03:40:24-05:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 2922488d by Ben Gamari at 2024-12-10T03:40:24-05:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - a275d9ec by Matthew Stephenson at 2024-12-10T03:40:28-05:00 Add missing @since documentation for (!?) function - - - - - cdff806f by Ben Gamari at 2024-12-10T03:40:28-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - b4cecf1e by Ben Gamari at 2024-12-10T03:40:29-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 13 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC/Cmm/ThreadSanitizer.hs - libraries/ghc-compact/tests/all.T - libraries/ghc-internal/src/GHC/Internal/List.hs - m4/find_ld.m4 - testsuite/driver/testlib.py - testsuite/tests/concurrent/should_run/all.T - testsuite/tests/quasiquotation/all.T - testsuite/tests/rts/all.T - testsuite/tests/rts/linker/all.T - testsuite/tests/th/all.T Changes: ===================================== .gitlab/ci.sh ===================================== @@ -326,13 +326,19 @@ function fetch_cabal() { local base_url="https://downloads.haskell.org/~cabal/cabal-install-$v/" case "$(uname)" in Darwin) cabal_url="$base_url/cabal-install-$v-x86_64-apple-darwin17.7.0.tar.xz" ;; - FreeBSD) cabal_url="$base_url/cabal-install-$v-x86_64-freebsd13.tar.xz" ;; + FreeBSD) cabal_url="$base_url/cabal-install-$v-x86_64-freebsd14.tar.xz" ;; *) fail "don't know where to fetch cabal-install for $(uname)" esac echo "Fetching cabal-install from $cabal_url" curl "$cabal_url" > cabal.tar.xz + tmp="$(tar -tJf cabal.tar.xz | head -n1)" $TAR -xJf cabal.tar.xz - mv cabal "$toolchain/bin" + # Check if the bindist has directory structure + if [[ "$tmp" = "cabal" ]]; then + mv cabal "$toolchain/bin" + else + mv "$tmp/cabal" "$toolchain/bin" + fi ;; esac end_section "fetch cabal" @@ -954,7 +960,7 @@ if [ "${CI_COMMIT_BRANCH:-}" == "master" ] && [ "${CI_PROJECT_PATH:-}" == "ghc/ fi fi if [ -n "${IGNORE_PERF_FAILURES:-}" ]; then - RUNTEST_ARGS="--ignore-perf-failures=$IGNORE_PERF_FAILURES" + RUNTEST_ARGS=( "${RUNTEST_ARGS[@]:-}" "--ignore-perf-failures=$IGNORE_PERF_FAILURES" ) fi if [[ -z ${BIGNUM_BACKEND:-} ]]; then BIGNUM_BACKEND=gmp; fi ===================================== .gitlab/generate-ci/gen_ci.hs ===================================== @@ -101,7 +101,7 @@ There are two different modes this script can operate in: data Opsys = Linux LinuxDistro | Darwin - | FreeBSD13 + | FreeBSD14 | Windows deriving (Eq) data LinuxDistro @@ -293,7 +293,7 @@ runnerTag arch (Linux _) = runnerTag AArch64 Darwin = "aarch64-darwin" runnerTag Amd64 Darwin = "x86_64-darwin-m1" runnerTag Amd64 Windows = "new-x86_64-windows" -runnerTag Amd64 FreeBSD13 = "x86_64-freebsd13" +runnerTag Amd64 FreeBSD14 = "x86_64-freebsd14" runnerTag _ _ = error "Invalid arch/opsys" tags :: Arch -> Opsys -> BuildConfig -> [String] @@ -326,7 +326,7 @@ distroName Rocky8 = "rocky8" opsysName :: Opsys -> String opsysName (Linux distro) = "linux-" ++ distroName distro opsysName Darwin = "darwin" -opsysName FreeBSD13 = "freebsd13" +opsysName FreeBSD14 = "freebsd14" opsysName Windows = "windows" archName :: Arch -> String @@ -423,15 +423,19 @@ brokenTest :: TestName -- ^ test name brokenTest test _why = "BROKEN_TESTS" =: test opsysVariables :: Arch -> Opsys -> Variables -opsysVariables _ FreeBSD13 = mconcat +opsysVariables _ FreeBSD14 = mconcat [ -- N.B. we use iconv from ports as I see linker errors when we attempt -- to use the "native" iconv embedded in libc as suggested by the -- porting guide [1]. -- [1] https://www.freebsd.org/doc/en/books/porters-handbook/using-iconv.html) - "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" - , "HADRIAN_ARGS" =: "--docs=no-sphinx" + "CONFIGURE_ARGS" =: "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib" + -- Prefer to use the system's clang-based toolchain and not gcc + , "CC" =: "cc" + , "CXX" =: "c++" , "GHC_VERSION" =: "9.6.4" - , "CABAL_INSTALL_VERSION" =: "3.10.2.0" + , "CABAL_INSTALL_VERSION" =: "3.10.3.0" ] opsysVariables arch (Linux distro) = distroVariables arch distro opsysVariables AArch64 (Darwin {}) = @@ -1140,6 +1144,11 @@ darwin = , fastCI (standardBuilds AArch64 Darwin) ] +freebsd_jobs :: [JobGroup Job] +freebsd_jobs = + [ addValidateRule FreeBSDLabel (standardBuilds Amd64 FreeBSD14) + ] + alpine_x86 :: [JobGroup Job] alpine_x86 = [ -- Fully static build, in theory usable on any linux distribution. @@ -1213,6 +1222,7 @@ job_groups = ++ alpine_x86 ++ alpine_aarch64 ++ cross_jobs + ++ freebsd_jobs mkPlatform :: Arch -> Opsys -> String ===================================== .gitlab/jobs.yaml ===================================== @@ -1082,6 +1082,72 @@ "ac_cv_func_utimensat": "no" } }, + "nightly-x86_64-freebsd14-validate": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "8 weeks", + "paths": [ + "ghc-x86_64-freebsd14-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "(\"true\" == \"true\") && ($RELEASE_JOB != \"yes\") && ($NIGHTLY)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BUILD_FLAVOUR": "validate", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-validate", + "XZ_OPT": "-9" + } + }, "nightly-x86_64-linux-alpine3_12-int_native-validate+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", @@ -3844,6 +3910,74 @@ "ac_cv_func_utimensat": "no" } }, + "release-x86_64-freebsd14-release": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "1 year", + "paths": [ + "ghc-x86_64-freebsd14-release.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "(\"true\" == \"true\") && ($RELEASE_JOB == \"yes\") && ($NIGHTLY == null)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-release", + "BUILD_FLAVOUR": "release", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "HADRIAN_ARGS": "--hash-unit-ids", + "IGNORE_PERF_FAILURES": "all", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-release", + "XZ_OPT": "-9" + } + }, "release-x86_64-linux-alpine3_12-int_native-release+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", @@ -5222,6 +5356,71 @@ "ac_cv_func_utimensat": "no" } }, + "x86_64-freebsd14-validate": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "2 weeks", + "paths": [ + "ghc-x86_64-freebsd14-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-freebsd14-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*FreeBSD.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BUILD_FLAVOUR": "validate", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-validate" + } + }, "x86_64-linux-alpine3_12-int_native-validate+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", ===================================== compiler/GHC/Cmm/ThreadSanitizer.hs ===================================== @@ -209,8 +209,9 @@ tsanTarget fn formals args = tsanStore :: Env -> CmmType -> CmmExpr -> Block CmmNode O O -tsanStore env ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanStore env ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) @@ -219,8 +220,9 @@ tsanStore env ty addr = tsanLoad :: Env -> AlignmentSpec -> CmmType -> CmmExpr -> Block CmmNode O O -tsanLoad env align ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanLoad env align ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) ===================================== libraries/ghc-compact/tests/all.T ===================================== @@ -28,5 +28,8 @@ test('T18757', omit_ghci, compile_and_run, ['']) # N.B. Sanity check times out due to large list. test('T16992', [when(wordsize(32), skip), # Resource limit exceeded on 32-bit high_memory_usage, + # This test has extraordinary memory requirement, + # skip unless testing slow speed + unless(slow(), skip), run_timeout_multiplier(5), omit_ways(['sanity'])], compile_and_run, ['']) ===================================== libraries/ghc-internal/src/GHC/Internal/List.hs ===================================== @@ -1643,6 +1643,8 @@ xs !! n -- -- WARNING: This function takes linear time in the index. -- +-- @since base-4.19.0.0 +-- -- ==== __Examples__ -- -- >>> ['a', 'b', 'c'] !? 0 ===================================== m4/find_ld.m4 ===================================== @@ -79,13 +79,16 @@ AC_DEFUN([FIND_LD],[ dnl See #21712. AC_CHECK_TARGET_TOOL([LD], [ld]) ;; - *) + *-linux|*-mingw32) if test "x$enable_ld_override" = "xyes"; then find_ld else AC_CHECK_TARGET_TOOL([LD], [ld]) fi ;; + *) + AC_CHECK_TARGET_TOOL([LD], [ld]) + ;; esac CHECK_LD_COPY_BUG([$1]) ]) ===================================== testsuite/driver/testlib.py ===================================== @@ -970,6 +970,9 @@ def tables_next_to_code() -> bool: def fast() -> bool: return config.speed == 2 +def slow() -> bool: + return config.speed == 0 + def platform( plat: str ) -> bool: return config.platform == plat ===================================== testsuite/tests/concurrent/should_run/all.T ===================================== @@ -268,6 +268,7 @@ test('T21651', test('T21969', [ only_ways(['threaded1','threaded2', 'nonmoving_thr', 'profthreaded']), when(opsys('mingw32'),skip), # uses POSIX pipes + when(opsys('freebsd'), expect_broken(25512)), extra_run_opts('50000'), run_timeout_multiplier(0.3), # default timeout seems to be 300, but lockups happen quickly req_target_smp, ===================================== testsuite/tests/quasiquotation/all.T ===================================== @@ -8,6 +8,5 @@ test('T7918', test('T14028', [req_interp, req_rts_linker, only_ways([config.ghc_th_way]), - unless(config.have_ext_interp, skip), - when(opsys('freebsd'), expect_broken(19723))], + unless(config.have_ext_interp, skip)], makefile_test, ['T14028 ghcThWayFlags=' + config.ghc_th_way_flags]) ===================================== testsuite/tests/rts/all.T ===================================== @@ -531,7 +531,9 @@ test('InitEventLogging', ], compile_and_run, ['InitEventLogging_c.c']) test('RestartEventLogging', - [only_ways(['threaded1','threaded2']), extra_run_opts('+RTS -la -RTS')], + [only_ways(['threaded1','threaded2']), + extra_run_opts('+RTS -la -RTS'), + when(opsys('freebsd'), fragile(19724))], compile_and_run, ['RestartEventLogging_c.c']) test('T17088', ===================================== testsuite/tests/rts/linker/all.T ===================================== @@ -108,6 +108,7 @@ test('T5435_dyn_gcc', ###################################### test('linker_unload', [extra_files(['LinkerUnload.hs', 'Test.hs']), + when(opsys('freebsd'), expect_broken(25491)), req_rts_linker], makefile_test, ['linker_unload']) ===================================== testsuite/tests/th/all.T ===================================== @@ -488,9 +488,9 @@ test('T15471', normal, multimod_compile, ['T15471.hs', '-v0']) test('T16180', [when(llvm_build(), expect_broken_for(16541, ['ext-interp'])), req_asm, - # Ideally OpenBSD should have expect_broken_for(14012, ['ext-interp']). + # Ideally {Free,Open}BSD should have expect_broken_for(14012, ['ext-interp']). # Except the failure is in compilation so skip seems the best we can do. - when(opsys('openbsd'), skip), + when(opsys('openbsd') or opsys('freebsd'), skip), expect_broken_for(16541, ghci_ways)], compile_and_run, ['-package ghc']) test('T16183', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b6b92bf3b60ae26bbeb5d2a6308a2ee65b0c5ab6...b4cecf1eef59f31a65d329ae9cc939c9dec5ca9b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b6b92bf3b60ae26bbeb5d2a6308a2ee65b0c5ab6...b4cecf1eef59f31a65d329ae9cc939c9dec5ca9b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 12:43:02 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 10 Dec 2024 07:43:02 -0500 Subject: [Git][ghc/ghc][wip/T25560] 2 commits: rts: Determine max_n_capabilities at RTS startup Message-ID: <6758375669f5_2c824d71cac810884c@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 42819b38 by Ben Gamari at 2024-12-10T07:42:54-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - ed2d7453 by Ben Gamari at 2024-12-10T07:42:54-05:00 testsuite: Add test for #25560 - - - - - 9 changed files: - docs/users_guide/using-concurrent.rst - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - + testsuite/tests/rts/T25560.hs - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -157,8 +157,9 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. .. note:: The maximum number of capabilities supported by the GHC runtime system is - determined when the compiler is built and currently defaults to 256 - capabilities. + determined when at RTS startup to be either 256, the value given by + :rts-flag:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. The following options affect the way the runtime schedules threads on CPUs: ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +uint32_t max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -386,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + uint32_t core_count = getNumberOfProcessors(); + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; ===================================== rts/Capability.h ===================================== @@ -270,11 +270,13 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,10 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; - } else if (new_n_capabilities > MAX_N_CAPABILITIES) { - errorBelch("Attempt to increase capability count beyond MAX_N_CAPABILITIES\n"); - return; + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count %" PRIu32 "; clamping...\n", max_n_capabilities); + new_n_capabilities = max_n_capabilities; } debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", ===================================== rts/include/rts/Config.h ===================================== @@ -79,6 +79,7 @@ code. #if defined(THREADED_RTS) /* + * See Note [Capabilities array sizing] in rts/Capability.c. * Update the note in docs/users_guide/using-concurrent.rst when updating this. */ #define MAX_N_CAPABILITIES 256 ===================================== rts/include/rts/Threads.h ===================================== @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern uint32_t max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [normal, ignore_stderr], compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/1e3fc734b8596407f53ec600d56a3545e89c9657...ed2d745312f84bc25dcf2f05eee890adc1e1dcb5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/1e3fc734b8596407f53ec600d56a3545e89c9657...ed2d745312f84bc25dcf2f05eee890adc1e1dcb5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 12:49:35 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 10 Dec 2024 07:49:35 -0500 Subject: [Git][ghc/ghc][wip/freebsd] 7 commits: gitlab-ci: Use system libffi on FreeBSD Message-ID: <675838df65f6e_2c824da06c84117510@gitlab.mail> Ben Gamari pushed to branch wip/freebsd at Glasgow Haskell Compiler / GHC Commits: d8aeea2f by Ben Gamari at 2024-12-10T07:49:26-05:00 gitlab-ci: Use system libffi on FreeBSD - - - - - 5ac3f203 by Ben Gamari at 2024-12-10T07:49:26-05:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ebc03d0b by Ben Gamari at 2024-12-10T07:49:26-05:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - bfebcc29 by Ben Gamari at 2024-12-10T07:49:26-05:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 9963ddf1 by Ben Gamari at 2024-12-10T07:49:26-05:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - c939ca01 by Ben Gamari at 2024-12-10T07:49:26-05:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 4ab378d0 by Ben Gamari at 2024-12-10T07:49:26-05:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - 8 changed files: - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - libraries/ghc-compact/tests/all.T - testsuite/driver/testlib.py - testsuite/tests/concurrent/should_run/all.T - testsuite/tests/rts/all.T - testsuite/tests/rts/linker/all.T - testsuite/tests/th/all.T Changes: ===================================== .gitlab/generate-ci/gen_ci.hs ===================================== @@ -428,7 +428,12 @@ opsysVariables _ FreeBSD14 = mconcat -- to use the "native" iconv embedded in libc as suggested by the -- porting guide [1]. -- [1] https://www.freebsd.org/doc/en/books/porters-handbook/using-iconv.html) - "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" + "CONFIGURE_ARGS" =: "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib" + -- Prefer to use the system's clang-based toolchain and not gcc + , "CC" =: "cc" + , "CXX" =: "c++" , "GHC_VERSION" =: "9.6.4" , "CABAL_INSTALL_VERSION" =: "3.10.3.0" ] ===================================== .gitlab/jobs.yaml ===================================== @@ -1138,7 +1138,9 @@ "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", "BUILD_FLAVOUR": "validate", "CABAL_INSTALL_VERSION": "3.10.3.0", - "CONFIGURE_ARGS": "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", "GHC_VERSION": "9.6.4", "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", "RUNTEST_ARGS": "", @@ -3964,7 +3966,9 @@ "BIN_DIST_NAME": "ghc-x86_64-freebsd14-release", "BUILD_FLAVOUR": "release", "CABAL_INSTALL_VERSION": "3.10.3.0", - "CONFIGURE_ARGS": "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", "GHC_VERSION": "9.6.4", "HADRIAN_ARGS": "--hash-unit-ids", "IGNORE_PERF_FAILURES": "all", @@ -5408,7 +5412,9 @@ "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", "BUILD_FLAVOUR": "validate", "CABAL_INSTALL_VERSION": "3.10.3.0", - "CONFIGURE_ARGS": "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", "GHC_VERSION": "9.6.4", "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", "RUNTEST_ARGS": "", ===================================== libraries/ghc-compact/tests/all.T ===================================== @@ -28,5 +28,8 @@ test('T18757', omit_ghci, compile_and_run, ['']) # N.B. Sanity check times out due to large list. test('T16992', [when(wordsize(32), skip), # Resource limit exceeded on 32-bit high_memory_usage, + # This test has extraordinary memory requirement, + # skip unless testing slow speed + unless(slow(), skip), run_timeout_multiplier(5), omit_ways(['sanity'])], compile_and_run, ['']) ===================================== testsuite/driver/testlib.py ===================================== @@ -970,6 +970,9 @@ def tables_next_to_code() -> bool: def fast() -> bool: return config.speed == 2 +def slow() -> bool: + return config.speed == 0 + def platform( plat: str ) -> bool: return config.platform == plat ===================================== testsuite/tests/concurrent/should_run/all.T ===================================== @@ -268,6 +268,7 @@ test('T21651', test('T21969', [ only_ways(['threaded1','threaded2', 'nonmoving_thr', 'profthreaded']), when(opsys('mingw32'),skip), # uses POSIX pipes + when(opsys('freebsd'), expect_broken(25512)), extra_run_opts('50000'), run_timeout_multiplier(0.3), # default timeout seems to be 300, but lockups happen quickly req_target_smp, ===================================== testsuite/tests/rts/all.T ===================================== @@ -531,7 +531,9 @@ test('InitEventLogging', ], compile_and_run, ['InitEventLogging_c.c']) test('RestartEventLogging', - [only_ways(['threaded1','threaded2']), extra_run_opts('+RTS -la -RTS')], + [only_ways(['threaded1','threaded2']), + extra_run_opts('+RTS -la -RTS'), + when(opsys('freebsd'), fragile(19724))], compile_and_run, ['RestartEventLogging_c.c']) test('T17088', ===================================== testsuite/tests/rts/linker/all.T ===================================== @@ -108,6 +108,7 @@ test('T5435_dyn_gcc', ###################################### test('linker_unload', [extra_files(['LinkerUnload.hs', 'Test.hs']), + when(opsys('freebsd'), expect_broken(25491)), req_rts_linker], makefile_test, ['linker_unload']) ===================================== testsuite/tests/th/all.T ===================================== @@ -488,9 +488,9 @@ test('T15471', normal, multimod_compile, ['T15471.hs', '-v0']) test('T16180', [when(llvm_build(), expect_broken_for(16541, ['ext-interp'])), req_asm, - # Ideally OpenBSD should have expect_broken_for(14012, ['ext-interp']). + # Ideally {Free,Open}BSD should have expect_broken_for(14012, ['ext-interp']). # Except the failure is in compilation so skip seems the best we can do. - when(opsys('openbsd'), skip), + when(opsys('openbsd') or opsys('freebsd'), skip), expect_broken_for(16541, ghci_ways)], compile_and_run, ['-package ghc']) test('T16183', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/91a26d7f5bfc3e231a54c13382d413a1c0e8bc2e...4ab378d0de13574c11581b52b68f95d8a600c2f3 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/91a26d7f5bfc3e231a54c13382d413a1c0e8bc2e...4ab378d0de13574c11581b52b68f95d8a600c2f3 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 12:56:21 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 10 Dec 2024 07:56:21 -0500 Subject: [Git][ghc/ghc][wip/T25501] configure: Implement ld override whitelist Message-ID: <67583a75bb119_35d35715c59873132@gitlab.mail> Ben Gamari pushed to branch wip/T25501 at Glasgow Haskell Compiler / GHC Commits: 2e532510 by Ben Gamari at 2024-12-10T07:56:15-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 1 changed file: - m4/find_ld.m4 Changes: ===================================== m4/find_ld.m4 ===================================== @@ -79,13 +79,16 @@ AC_DEFUN([FIND_LD],[ dnl See #21712. AC_CHECK_TARGET_TOOL([LD], [ld]) ;; - *) + *-linux*|*-mingw32) if test "x$enable_ld_override" = "xyes"; then find_ld else AC_CHECK_TARGET_TOOL([LD], [ld]) fi ;; + *) + AC_CHECK_TARGET_TOOL([LD], [ld]) + ;; esac CHECK_LD_COPY_BUG([$1]) ]) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2e53251002eaf0d3a5bc873f9cb34b603043205c -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2e53251002eaf0d3a5bc873f9cb34b603043205c You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 13:00:00 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 10 Dec 2024 08:00:00 -0500 Subject: [Git][ghc/ghc][wip/bco-name] 153 commits: ghc-internal: strict, unboxed src loc ranges Message-ID: <67583b50e5077_35d3574eef5876927@gitlab.mail> Ben Gamari pushed to branch wip/bco-name at Glasgow Haskell Compiler / GHC Commits: ea458779 by doyougnu at 2024-11-01T18:11:33-04:00 ghc-internal: strict, unboxed src loc ranges - closes: #20449 - See CLC proposal: #55 - - - - - 778ac793 by Kazuki Okamoto at 2024-11-01T18:12:13-04:00 No haddock markup in doctest line - - - - - cf0deeaf by Andreas Klebinger at 2024-11-02T17:54:52-04:00 Reword -fexpose-overloaded-unfoldings docs. This should make them slightly clearer. Fixes #24844 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 1c21e7d4 by Andreas Klebinger at 2024-11-02T17:55:29-04:00 Compile T25062 simd tests even if we can't run them. Helps avoid them being utterly broken. Fixes #25341 - - - - - 573cad4b by Cheng Shao at 2024-11-02T17:56:04-04:00 Remove unused USE_REPORT_PRELUDE code paths from the tree This patch removes unused `USE_REPORT_PRELUDE` code paths from the tree. They have been present since the first git revision 4fb94ae5e5d632748fa2e6c35e259eccc5a1a3f4, and might have been useful for debugging purposes many years ago, but these code paths are never actually built. Removing these ease maintenance of relevant modules in the future, and also allows us to get rid of `CPP` extension in those modules as a nice byproduct. - - - - - 97f600c6 by Hassan Al-Awwadi at 2024-11-04T15:52:12+00:00 Refactored BooleanFormula to be in line with TTG (#21592) There are two parts to this commit. * We moved the definition of BooleanFormula over to L.H.S.BooleanFormula * We parameterized the BooleanFormula over the pass The GHC specific details of BooleanFormula remain in Ghc.Data.BooleanFormula. Because its parameterized over the pass its no longer a functor or traversable, but we defined bfMap and bfTraverse for the cases where we needed fmap and traverse originally. Most other changes are just churn. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot ------------------------- - - - - - d4fd3580 by Andreas Klebinger at 2024-11-05T07:36:16-05:00 ghc-heap: Fix incomplete selector warnings. Use utility functions instead of selectors to read partial attributes. Part of fixing #25380. - - - - - fdd9f62a by Peter Trommler at 2024-11-05T07:36:51-05:00 PPC NCG: Implement fmin and fmax - - - - - 8e217256 by Mike Pilgrem at 2024-11-07T04:34:20-05:00 Re CLC #293 - Don't specify Data.List.NonEmpty in terms of partial See https://github.com/haskell/core-libraries-committee/issues/293 `List.init` had already been driven out of `tails1` by 21fc180bec93d964a7f4ffdf2429ef6f74b49ab6 but this specification also avoided partial `fromList`, so I preferred it. The `changelog.md` for `base` is updated, with an entry added under `base-4.22.0.0`. - - - - - 346e4cd1 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: copy zip files into the correct directory Fixes #25446 - - - - - bbdbe225 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: Sign .gz bindists too Fixes #25447 - - - - - 0c722e14 by Hécate Kleidukos at 2024-11-07T04:35:37-05:00 hadrian: Enforce the usage of GHC >=9.8.1 for ghci-multi GHC 9.6 no good when it comes to multi-repl stuff, despite being well within the range of n-2 releases for bootstrapping, when the script was adapted to load haddock, in !12851 - - - - - d8f8a1c3 by Sylvain Henry at 2024-11-07T19:27:46-05:00 Handle the special ghc-prim:GHC.Prim module in the compiler Before this patch, some custom hacks were necessary in ghc-prim's Setup.hs to register the GHC.Prim (virtual) module and in Hadrian to generate haddocks properly. In this patch we special-case this module in the compiler itself instead (which it already is, see ghcPrimIface in GHC.Iface.Load). From Cabal/Hadrian's perspective GHC.Prim is now just a normal autogenerated module. This simplification is worthwhile on its own. It was found while looking into the work needed for #24453 which aims to merge ghc-prim, ghc-bignum, and ghc-internal. It's also one step closer to remove ghc-prim's custom setup. - - - - - a55adc8e by Cheng Shao at 2024-11-07T19:28:22-05:00 Clean up obsolete CPP guarded code paths from the tree This patch cleans up obsolete CPP guarded code paths from the tree. The minimum supported boot GHC version is 9.6, and all the pre-9.6 era code paths can be removed. - - - - - 9ede97f3 by Cheng Shao at 2024-11-07T19:28:58-05:00 Remove obsolete executable wrappers from the tree The executable wrappers are handled by hadrian and bindist Makefile. The various .wrapper scripts in the tree are unused since removal of Make build system, so this patch removes them all. - - - - - 7d42b2df by tristian at 2024-11-07T19:29:40-05:00 TcRnDuplicateDecls now suggests to use the DuplicateRecordFields extension. Fixes: !24627 - - - - - e56ed179 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: normalise some versions in callstacks (cherry picked from commit f230e29f30d0c1c566d4dd251807fcab76a2710e) - - - - - a28fc903 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: use -fhide-source-paths to normalise some backpack tests (cherry picked from commit b19de476bc5ce5c7792e8af1354b94a4286a1a13) - - - - - ed16d303 by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite/haddock: strip version identifiers and unit hashes from html tests (cherry picked from commit fbf0889eadc410d43dd5c1657e320634b6738fa5) - - - - - e45e5836 by Zubin Duggal at 2024-11-11T15:16:36+05:30 haddock: oneshot tests can drop files if they share modtimes. Stop this by including the filename in the key. Ideally we would use `ghc -M` output to do a proper toposort Partially addresses #25372 (cherry picked from commit e78c7ef96e395f1ef41f04790aebecd0409b92b9) - - - - - 9104e6eb by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: fix normalisation of T9930fail so that it doesn't get tripped up by ghc executable (ARGV[0]) differences (cherry picked from commit a79a587e025d42d34bb30e115fc5c7cab6c1e030) - - - - - 2c31264a by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: normalise windows file seperators (cherry picked from commit f858875e03b9609656b542aaaaff85ad0a83878a) - - - - - 2807f91b by Zubin Duggal at 2024-11-11T15:21:30+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites - - - - - c02add17 by Ben Gamari at 2024-11-12T01:22:11-05:00 configure: Check version number validity Here we verify the previously informal invariant that stable release version numbers must have three components, preventing costly failed releases. Specifically, the check fails in the following scenarios: * `version=9.13` while `RELEASE=YES` since this would imply a release made from an unstable branch * `version=9.13.0` since unstable versions should only have two components * `version=9.12` since this has the wrong number of version components for a stable branch Fixes #25390. - - - - - 747fd322 by Teo Camarasu at 2024-11-12T01:22:49-05:00 docs: link to #14474 in the template-haskell docs - - - - - 6d96bb62 by Zubin Duggal at 2024-11-12T01:23:25-05:00 testsuite: normalise execvp vs exec differences in process tests Fixes #25431 - - - - - 502e6711 by Torsten Schmits at 2024-11-12T01:24:01-05:00 fix test lint that accumulated while the checks were broken I didn't fix the issues flagged by the #ifdef linter because it were so many that it seemed like the rule has become obsolete. - - - - - 223a4cb5 by Torsten Schmits at 2024-11-12T01:24:02-05:00 test driver: fix file collection for regex linters When a testsuite linter is executed with the `tracked` strategy, the driver runs `git ls-tree` to collect eligible files. This appears to have ceased producing any paths – `ls-tree` restricts its results to the current working directory, which is `testsuite/tests/linters` in this case. As a quick fix, this patch changes the working directory to match expectations. - - - - - 9ad9ac63 by Alan Zimmerman at 2024-11-12T01:24:39-05:00 EPA: Capture location of '_' for wild card type binder And keep track of promotion status in HsExplicitTupleTy, so the round-trip ppr test works for it. Updates Haddock output too, using the PromotionFlag in HsExplicitTupleTy. Closes #25454 - - - - - c37b96fa by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix setImmediate() implementation for Cloudflare Workers This patch fixes setImmediate() implementation for Cloudflare Workers in the wasm backend's js prelude script. Cloudflare Workers doesn't support the MessageChannel API, and we use a setTimeout() based fallback implementation in this case. - - - - - bea8ea4c by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix FinalizationRegistry logic for Cloudflare Workers This patch fixes FinalizationRegistry related logic for Cloudflare Workers in wasm backend js post linker. Cloudflare Workers doesn't support FinalizationRegistry, in this case we use a dummy implementation that doesn't do anything. - - - - - 00d551bf by Cheng Shao at 2024-11-13T08:48:21-05:00 Remove obsolete cross-port script This patch removes the obsolete cross-port script in the tree. The script was based on the legacy Make build system which has been pruned from the tree long ago. For hadrian, proper support for two-stage bootstrapping onto a new unsupported platform is a work in progress in !11444. - - - - - 75a2eae4 by Cheng Shao at 2024-11-13T08:48:58-05:00 hadrian: fix bindist makefile for wasm32-wasi target This patch fixes one incoherent place between bindist makefile and hadrian logic: I forgot to include wasi/wasm32 in OsSupportsGHCi/ArchSupportsGHCi as well. And this results in incorrect settings file generated after installing the bindist, and "Use interpreter"/"Have interpreter" fields incorrectly have "NO" values where they should be "YES" like --info output of in-tree version. - - - - - 0614abef by Alan Zimmerman at 2024-11-13T08:49:34-05:00 EPA: Correctly capture leading semis in decl list Closes #25467 - - - - - 00d58ae1 by Sebastian Graf at 2024-11-13T15:21:23-05:00 DmdAnal: Make `prompt#` lazy (#25439) This applies the same treatment to `prompt#` as for `catch#`. See `Note [Strictness for mask/unmask/catch/prompt]`. Fixes #25439. - - - - - 93233a66 by Ben Gamari at 2024-11-13T15:21:59-05:00 boot: Do not attempt to update config.sub While Apple ARM hardware was new we found that the autoconf scripts included in some boot packages were too old. As a mitigation for this, we introduced logic in the `boot` script to update the `config.sub` with that from the GHC tree. However, this causes submodules which have `config.sub` committted to appear to be dirty. This is a considerable headache. Now since `config.sub` with full platform support is more common we can remove `boot`'s `config.sub` logic. Fixes #19574. - - - - - fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - c50080b0 by Ben Gamari at 2024-12-10T07:59:36-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 30 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - .gitlab/merge_request_templates/Default.md - .gitlab/rel_eng/recompress-all - .gitlab/rel_eng/upload.sh - boot - compile_flags.txt - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/PPC/CodeGen.hs - compiler/GHC/CmmToAsm/PPC/Instr.hs - compiler/GHC/CmmToAsm/PPC/Ppr.hs - compiler/GHC/CmmToAsm/Ppr.hs - compiler/GHC/CmmToAsm/X86/CodeGen.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Core/Class.hs - compiler/GHC/Core/Make.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/CoreToIface.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/fe31a25d9626b68a1b7079da83bc2ee5d239c566...c50080b0360675e33e0ff93f31f992eb28abeb8b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/fe31a25d9626b68a1b7079da83bc2ee5d239c566...c50080b0360675e33e0ff93f31f992eb28abeb8b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 13:11:38 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 10 Dec 2024 08:11:38 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 5 commits: Add missing @since documentation for (!?) function Message-ID: <67583e0ab6d21_35d3575be0288923a@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 11f81ba1 by Matthew Stephenson at 2024-12-10T08:11:01-05:00 Add missing @since documentation for (!?) function - - - - - ba18da37 by Ben Gamari at 2024-12-10T08:11:02-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - cae23f8c by Ben Gamari at 2024-12-10T08:11:02-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - ac640423 by Ben Gamari at 2024-12-10T08:11:02-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 15b659ac by Ben Gamari at 2024-12-10T08:11:03-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 5 changed files: - .gitlab/ci.sh - compiler/GHC/Cmm/ThreadSanitizer.hs - hadrian/src/Rules/Documentation.hs - libraries/ghc-internal/src/GHC/Internal/List.hs - rts/CheckUnload.c Changes: ===================================== .gitlab/ci.sh ===================================== @@ -954,7 +954,7 @@ if [ "${CI_COMMIT_BRANCH:-}" == "master" ] && [ "${CI_PROJECT_PATH:-}" == "ghc/ fi fi if [ -n "${IGNORE_PERF_FAILURES:-}" ]; then - RUNTEST_ARGS="--ignore-perf-failures=$IGNORE_PERF_FAILURES" + RUNTEST_ARGS=( "${RUNTEST_ARGS[@]:-}" "--ignore-perf-failures=$IGNORE_PERF_FAILURES" ) fi if [[ -z ${BIGNUM_BACKEND:-} ]]; then BIGNUM_BACKEND=gmp; fi ===================================== compiler/GHC/Cmm/ThreadSanitizer.hs ===================================== @@ -209,8 +209,9 @@ tsanTarget fn formals args = tsanStore :: Env -> CmmType -> CmmExpr -> Block CmmNode O O -tsanStore env ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanStore env ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) @@ -219,8 +220,9 @@ tsanStore env ty addr = tsanLoad :: Env -> AlignmentSpec -> CmmType -> CmmExpr -> Block CmmNode O O -tsanLoad env align ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanLoad env align ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) ===================================== hadrian/src/Rules/Documentation.hs ===================================== @@ -326,11 +326,27 @@ getPkgDocTarget root path = -- | Build all PDF documentation buildPdfDocumentation :: Rules () -buildPdfDocumentation = mapM_ buildSphinxPdf docPaths +buildPdfDocumentation = do + -- Note [Avoiding mktexfmt race] + -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + -- We must ensure that the *first* xelatex invocation in the + -- build is performed serially (that is, not concurrently with + -- any other xelatex invocations) as mktexfmt does not handle + -- racing `mkdir` calls gracefully. However, we assume that + -- subsequent invocations are safe to run concurrently since the + -- initial call will have created the requisite directories (namely + -- $HOME/.texlive2020/texmf-var/web2c). + -- + -- Fixes #25564. + let maxConcurrentReaders = 1000 + xelatexMutex <- newResource "xelatex-mutex" maxConcurrentReaders + let rs = [(xelatexMutex, 1)] + + mapM_ (buildSphinxPdf rs) docPaths -- | Compile a Sphinx ReStructured Text package to LaTeX -buildSphinxPdf :: FilePath -> Rules () -buildSphinxPdf path = do +buildSphinxPdf :: [(Resource, Int)] -> FilePath -> Rules () +buildSphinxPdf rs path = do root <- buildRootRules root -/- pdfRoot -/- path <.> "pdf" %> \file -> do @@ -344,7 +360,8 @@ buildSphinxPdf path = do checkSphinxWarnings dir -- LaTeX "fixed point" - build $ target docContext Xelatex [path <.> "tex"] [dir] + -- See Note [Avoiding mktexfmt race] above. + buildWithResources rs $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Makeindex [path <.> "idx"] [dir] ===================================== libraries/ghc-internal/src/GHC/Internal/List.hs ===================================== @@ -1643,6 +1643,8 @@ xs !! n -- -- WARNING: This function takes linear time in the index. -- +-- @since base-4.19.0.0 +-- -- ==== __Examples__ -- -- >>> ['a', 'b', 'c'] !? 0 ===================================== rts/CheckUnload.c ===================================== @@ -467,48 +467,44 @@ bool prepareUnloadCheck(void) void checkUnload(void) { - if (global_s_indices == NULL) { - return; - } else if (!safeToUnload()) { - return; - } - // At this point we've marked all dynamically loaded static objects // (including their dependencies) during GC, but not the root set of object // code (loaded_objects). Mark the roots first, then unload any unmarked // objects. - OCSectionIndices *s_indices = global_s_indices; - ASSERT(s_indices->sorted); + if (global_s_indices != NULL && safeToUnload()) { + OCSectionIndices *s_indices = global_s_indices; + ASSERT(s_indices->sorted); - // Mark roots - for (ObjectCode *oc = loaded_objects; oc != NULL; oc = oc->next_loaded_object) { - markObjectLive(NULL, (W_)oc, NULL); - } + // Mark roots + for (ObjectCode *oc = loaded_objects; oc != NULL; oc = oc->next_loaded_object) { + markObjectLive(NULL, (W_)oc, NULL); + } - // Free unmarked objects - ObjectCode *next = NULL; - for (ObjectCode *oc = old_objects; oc != NULL; oc = next) { - next = oc->next; - ASSERT(oc->status == OBJECT_UNLOADED); - - // Symbols should be removed by unloadObj_. - // NB (osa): If this assertion doesn't hold then freeObjectCode below - // will corrupt symhash as keys of that table live in ObjectCodes. If - // you see a segfault in a hash table operation in linker (in non-debug - // RTS) then it's probably because this assertion did not hold. - ASSERT(oc->symbols == NULL); - - if (oc->unloadable) { - removeOCSectionIndices(s_indices, oc); - freeObjectCode(oc); - n_unloaded_objects -= 1; - } else { - // If we don't have enough information to - // accurately determine the reachability of - // the object then hold onto it. - oc->next = objects; - objects = oc; + // Free unmarked objects + ObjectCode *next = NULL; + for (ObjectCode *oc = old_objects; oc != NULL; oc = next) { + next = oc->next; + ASSERT(oc->status == OBJECT_UNLOADED); + + // Symbols should be removed by unloadObj_. + // NB (osa): If this assertion doesn't hold then freeObjectCode below + // will corrupt symhash as keys of that table live in ObjectCodes. If + // you see a segfault in a hash table operation in linker (in non-debug + // RTS) then it's probably because this assertion did not hold. + ASSERT(oc->symbols == NULL); + + if (oc->unloadable) { + removeOCSectionIndices(s_indices, oc); + freeObjectCode(oc); + n_unloaded_objects -= 1; + } else { + // If we don't have enough information to + // accurately determine the reachability of + // the object then hold onto it. + oc->next = objects; + objects = oc; + } } } View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b4cecf1eef59f31a65d329ae9cc939c9dec5ca9b...15b659acccd1321946cd2ead3c7b839f4fa06813 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b4cecf1eef59f31a65d329ae9cc939c9dec5ca9b...15b659acccd1321946cd2ead3c7b839f4fa06813 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 13:19:04 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Tue, 10 Dec 2024 08:19:04 -0500 Subject: [Git][ghc/ghc][wip/sand-witch/tysyn-info-ppr] Update GHCi :info type declaration printing (24459) Message-ID: <67583fc7eb6b6_35d357bcdcc926dd@gitlab.mail> Andrei Borzenkov pushed to branch wip/sand-witch/tysyn-info-ppr at Glasgow Haskell Compiler / GHC Commits: b8cf83b6 by Andrei Borzenkov at 2024-12-10T17:18:30+04:00 Update GHCi :info type declaration printing (24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 29 changed files: - compiler/GHC/Core/TyCon.hs - compiler/GHC/Iface/Syntax.hs - compiler/GHC/Iface/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/ghci.rst - testsuite/tests/backpack/should_fail/T19244a.stderr - testsuite/tests/backpack/should_fail/T19244b.stderr - testsuite/tests/backpack/should_fail/bkpfail46.stderr - testsuite/tests/ghci/T18060/T18060.stdout - testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout - testsuite/tests/ghci/scripts/T15941.stdout - testsuite/tests/ghci/scripts/T19310.stdout - testsuite/tests/ghci/scripts/T21294a.stdout - + testsuite/tests/ghci/scripts/T24459.script - + testsuite/tests/ghci/scripts/T24459.stdout - testsuite/tests/ghci/scripts/T8535.stdout - testsuite/tests/ghci/scripts/T9181.stdout - testsuite/tests/ghci/scripts/all.T - testsuite/tests/ghci/scripts/ghci020.stdout - testsuite/tests/ghci/should_run/T10145.stdout - testsuite/tests/ghci/should_run/T18594.stdout - 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/interface-stability/template-haskell-exports.stdout - testsuite/tests/rep-poly/RepPolyBackpack3.stderr Changes: ===================================== compiler/GHC/Core/TyCon.hs ===================================== @@ -24,7 +24,8 @@ module GHC.Core.TyCon( mkRequiredTyConBinder, mkAnonTyConBinder, mkAnonTyConBinders, tyConBinderForAllTyFlag, tyConBndrVisForAllTyFlag, isNamedTyConBinder, - isVisibleTyConBinder, isInvisibleTyConBinder, + isVisibleTyConBinder, isInvisSpecTyConBinder, isInvisibleTyConBinder, + isInferredTyConBinder, isVisibleTcbVis, isInvisSpecTcbVis, -- ** Field labels @@ -487,7 +488,7 @@ mkRequiredTyConBinder dep_set tv | tv `elemVarSet` dep_set = mkNamedTyConBinder Required tv | otherwise = mkAnonTyConBinder tv -tyConBinderForAllTyFlag :: TyConBinder -> ForAllTyFlag +tyConBinderForAllTyFlag :: VarBndr a TyConBndrVis -> ForAllTyFlag tyConBinderForAllTyFlag (Bndr _ vis) = tyConBndrVisForAllTyFlag vis tyConBndrVisForAllTyFlag :: TyConBndrVis -> ForAllTyFlag @@ -513,10 +514,22 @@ isInvisSpecTcbVis :: TyConBndrVis -> Bool isInvisSpecTcbVis (NamedTCB Specified) = True isInvisSpecTcbVis _ = False +isInvisInferTcbVis :: TyConBndrVis -> Bool +isInvisInferTcbVis (NamedTCB Inferred) = True +isInvisInferTcbVis _ = False + +isInvisSpecTyConBinder :: VarBndr tv TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInvisSpecTyConBinder (Bndr _ tcb_vis) = isInvisSpecTcbVis tcb_vis + isInvisibleTyConBinder :: VarBndr tv TyConBndrVis -> Bool -- Works for IfaceTyConBinder too isInvisibleTyConBinder tcb = not (isVisibleTyConBinder tcb) +isInferredTyConBinder :: VarBndr var TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInferredTyConBinder (Bndr _ tcb_vis) = isInvisInferTcbVis tcb_vis + -- Build the 'tyConKind' from the binders and the result kind. -- Keep in sync with 'mkTyConKind' in GHC.Iface.Type. mkTyConKind :: [TyConBinder] -> Kind -> Kind ===================================== compiler/GHC/Iface/Syntax.hs ===================================== @@ -100,6 +100,7 @@ import Control.Monad import System.IO.Unsafe import Control.DeepSeq import Data.Proxy +import qualified Data.Set as Set infixl 3 &&& @@ -912,15 +913,226 @@ constraintIfaceKind :: IfaceKind constraintIfaceKind = IfaceTyConApp (IfaceTyCon constraintKindTyConName (mkIfaceTyConInfo NotPromoted IfaceNormalTyCon)) IA_Nil +{- Note [Print invisible binders in interface declarations] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Starting from GHC 9.8 it is possible to write invisible @-binders +in type-level declarations. That feature introduced several challenges +in interface declaration pretty printing (e.g. using the :info command +inside GHCi) to overcome. + +Consider this a little redundant example: + + type Id :: forall a b. b -> b + type Id x = x + +GHC will create system binders for kinds there to meet typechecking +and compilation needs and that will turn that declaration into a less +straightforward form with multiple @-binders: + + type Id :: forall {k} (a :: k) b. b -> b + type Id @{k} @a @b x = x :: b + +This information isn't required for understanding in the most cases, +so GHC hide it unless -fprint-explicit-kinds flag is supplied by the user. +And here is what we get: + + type Id :: forall {k} (a :: k) b. b -> b + type Id x = x + +However, there are several cases involving user-written @-binders +when it is cruicial to show them to provide the understanding what's going on. +First of all it can plainly appear on the right-hand side: + + type T :: forall (a :: Type). Type + type T @x = Tuple2 x x + +Not only that, invisible binder can be unused by itself, but have an +impact on invisible binder positioning, e.g.: + + type T :: forall (a :: Type) (b :: Type). Type + type T @x @y = Tuple2 y y + +Here `x` is unused, but required to display, that `y` is corresponding +to `b` in the standalone kind signature. + +The last problem related to non-generative type declarations (type +synonyms and type families) only. It is not possible to partially +apply them, hence it's important to understand what parts of a declaration's +kind are related to declaration itself. Here is a simple example: + + type T1 :: forall k. k -> Maybe k + type T1 = Just + + type T2 :: forall k. k -> Maybe k + type T2 @k = Just + +Both these type synonyms have the same kind signature, but they aren't +the same! `T1` can be used in strictly more cases, for example, as +an argument for high-order type: + + type F :: (forall k. k -> Maybe k) -> Type + + type R1 = F T1 -- Yes! + type R2 = F T2 -- No, that will not compile :( + +User-written invisible binders and "system" binders introduced by GHC +are indistinguishable at this stage, hence we try to only print +semantically significant binders by default. + +An invisible binder is considered significant when it meets at least +one of the following two criteria: + - It visibly occurs in the declaration's body (See more about that below) + - It is followed by a significant binder, + so it affects positioning +For non-generative type declarations (type synonyms and type families), +there is one additional criterion: + - It is not followed by a visible binder, so it + affects the arity of a type declaration + +The overall solution consists of three functions: +- `iface_decl_non_generative` decides whether the current declaration is + generative or not + +- `iface_decl_mentioned_vars` gives a Set of variables that + visibly occur in the declaration's body + +- `suppressIfaceInvisibles` uses information provided + by the first two functions to actually filter out insignificant + @-binders + +Here is what we consider "visibly occurs" in general and for +each declaration type: + +- Variables that visibly occur in IfaceType are collected by the + `visibleTypeVarOccurencies` function. + +- Variables that visibly occur in IfaceAT are collected by `iface_at_mentioned_vars` + function. It accounts visible binders for associated data and type + families and for type families only, it counts invisible binders. + Associated types can't have definitions, so it's safe to drop all other + binders. + +- None of the type variables in IfaceData declared using GADT syntax doesn't are considered + as visibe occurrences. This is because each constructor has its own variables, e.g.: + + type D :: forall (a :: Type). Type + data D @a where + MkD :: D @b + -- This is shorthand for: + -- MkD :: forall b. D @b + +- For IfaceData declared using Haskell98 syntax, a variable is considered visible + if it visibly occurs in at least one argument's type in at least one constructor. + +- For IfaceSynonym, a variable is considered visible if it visibly occurs + in the RHS type. + +- For IfaceFamily, a variable is considered visible if i occurs inside + an injectivity annotation, e.g. + + type family F @a = r | r -> a + +- For IfaceClass, a variable is considered visible if it occurs at least + once inside a functional dependency annotation or in at least one method's + type signature, or if it visibly occurs in at least one associated type's + declaration (Visible occurrences in associated types are described above.) + +- IfacePatSyn, IfaceId and IfaceAxiom are irrelevant to this problem. +-} + +iface_decl_generative :: IfaceDecl -> Bool +iface_decl_generative IfaceSynonym{} = False +iface_decl_generative IfaceFamily{ifFamFlav = rhs} + | IfaceDataFamilyTyCon <- rhs = True + | otherwise = False +iface_decl_generative IfaceData{} = True +iface_decl_generative IfaceId{} = True +iface_decl_generative IfaceClass{} = True +iface_decl_generative IfaceAxiom{} = True +iface_decl_generative IfacePatSyn{} = True + +iface_at_mentioned_vars :: IfaceAT -> Set.Set IfLclName +iface_at_mentioned_vars (IfaceAT decl _) + = Set.fromList . map ifTyConBinderName . suppress_vars $ binders + where + -- ifBinders is not total, so we assume here that associated types + -- cannot be IfaceId, IfaceAxiom or IfacePatSyn + binders = case decl of + IfaceFamily {ifBinders} -> ifBinders + IfaceData{ifBinders} -> ifBinders + IfaceSynonym{ifBinders} -> ifBinders + IfaceClass{ifBinders} -> ifBinders + IfaceId{} -> panic "IfaceId shoudn't be an associated type!" + IfaceAxiom{} -> panic "IfaceAxiom shoudn't be an associated type!" + IfacePatSyn {} -> panic "IfacePatSyn shoudn't be an associated type!" + + suppress_arity = not (iface_decl_generative decl) + + suppress_vars binders = + suppressIfaceInvisibles + -- We need to count trailing invisible binders for type families + (MkPrintArityInvisibles suppress_arity) + -- But this setting will simply count all invisible binderss + (PrintExplicitKinds False) + -- ...and associated types can't have a RHS + mempty + binders binders + +-- See Note [Print invisible binders in interface declarations] +-- in particular, the parts about collecting visible occurrences +iface_decl_mentioned_vars :: IfaceDecl -> Set.Set IfLclName +iface_decl_mentioned_vars (IfaceData { ifCons = condecls, ifGadtSyntax = gadt }) + | gadt = mempty + -- Get visible occurrences in each constructor in each alternative + | otherwise = Set.unions (map mentioned_con_vars cons) + where + mentioned_con_vars = Set.unions . map (visibleTypeVarOccurencies . snd) . ifConArgTys + cons = visibleIfConDecls condecls + +iface_decl_mentioned_vars (IfaceClass { ifFDs = fds, ifBody = IfAbstractClass }) + = Set.unions (map fundep_names fds) + where + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars + (IfaceClass { ifFDs = fds + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs + }}) + = Set.unions + [ Set.unions (map fundep_names fds) + , Set.unions (map iface_at_mentioned_vars ats) + , Set.unions (map (visibleTypeVarOccurencies . class_op_type) sigs) + ] + where + class_op_type (IfaceClassOp _bndr ty _default) = ty + + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars (IfaceSynonym {ifSynRhs = poly_ty}) + = visibleTypeVarOccurencies poly_ty + +-- Consider a binder to be a visible occurrence if it occurs inside an injectivity annotation. +iface_decl_mentioned_vars (IfaceFamily { ifBinders = binders, ifResVar = res_var, ifFamInj = inj }) + | Just{} <- res_var + , Injective injectivity <- inj + = Set.fromList . map (ifTyConBinderName . snd) . filter fst $ zip injectivity binders + | otherwise = mempty + +iface_decl_mentioned_vars IfacePatSyn{} = mempty +iface_decl_mentioned_vars IfaceId{} = mempty +iface_decl_mentioned_vars IfaceAxiom{} = mempty + pprIfaceDecl :: ShowSub -> IfaceDecl -> SDoc -- NB: pprIfaceDecl is also used for pretty-printing TyThings in GHCi -- See Note [Pretty printing via Iface syntax] in GHC.Types.TyThing.Ppr -pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, - ifCtxt = context, ifResKind = kind, - ifRoles = roles, ifCons = condecls, - ifParent = parent, - ifGadtSyntax = gadt, - ifBinders = binders }) +pprIfaceDecl ss decl@(IfaceData { ifName = tycon, ifCType = ctype, + ifCtxt = context, ifResKind = kind, + ifRoles = roles, ifCons = condecls, + ifParent = parent, + ifGadtSyntax = gadt, + ifBinders = binders }) | gadt = vcat [ pp_roles , pp_ki_sig @@ -946,8 +1158,10 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_kind = ppUnless (ki_sig_printable || isIfaceLiftedTypeKind kind) (dcolon <+> ppr kind) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss tycon binders + pp_lhs = case parent of - IfNoParent -> pprIfaceDeclHead suppress_bndr_sig context ss tycon binders + IfNoParent -> decl_head IfDataInstance{} -> text "instance" <+> pp_data_inst_forall <+> pprIfaceTyConParent parent @@ -994,36 +1208,40 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_extra = vcat [pprCType ctype] -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfAbstractClass }) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfAbstractClass }) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig [] ss clas binders <+> pprFundeps fds ] + , text "class" <+> decl_head <+> pprFundeps fds ] where + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss clas binders + -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfConcreteClass { - ifATs = ats, - ifSigs = sigs, - ifClassCtxt = context, - ifMinDef = minDef - }}) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs, + ifClassCtxt = context, + ifMinDef = minDef + }}) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig context ss clas binders <+> pprFundeps fds <+> pp_where + , text "class" <+> decl_head <+> pprFundeps fds <+> pp_where , nest 2 (vcat [ vcat asocs, vcat dsigs , ppShowAllSubs ss (pprMinDef $ fromIfaceBooleanFormula minDef)])] where pp_where = ppShowRhs ss $ ppUnless (null sigs && null ats) (text "where") + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss clas binders + asocs = ppr_trim $ map maybeShowAssoc ats dsigs = ppr_trim $ map maybeShowSig sigs @@ -1055,19 +1273,20 @@ pprIfaceDecl ss (IfaceClass { ifName = clas -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceSynonym { ifName = tc - , ifBinders = binders - , ifSynRhs = mono_ty - , ifResKind = res_kind}) +pprIfaceDecl ss decl@(IfaceSynonym { ifName = tc + , ifBinders = binders + , ifSynRhs = poly_ty + , ifResKind = res_kind}) = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tc binders <+> equals) - 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau - , ppUnless (isIfaceLiftedTypeKind res_kind) (dcolon <+> ppr res_kind) ]) + , hang (text "type" <+> decl_head <+> equals) + 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau ]) ] where - (tvs, theta, tau) = splitIfaceSigmaTy mono_ty + (tvs, theta, tau) = splitIfaceSigmaTy poly_ty name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tc) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tc binders + -- See Note [Printing type abbreviations] in GHC.Iface.Type ppr_tau | tc `hasKey` liftedTypeKindTyConKey || tc `hasKey` unrestrictedFunTyConKey || @@ -1078,20 +1297,18 @@ pprIfaceDecl ss (IfaceSynonym { ifName = tc -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceFamily { ifName = tycon - , ifFamFlav = rhs, ifBinders = binders - , ifResKind = res_kind - , ifResVar = res_var, ifFamInj = inj }) +pprIfaceDecl ss decl@(IfaceFamily { ifName = tycon + , ifFamFlav = rhs, ifBinders = binders + , ifResKind = res_kind + , ifResVar = res_var, ifFamInj = inj }) | IfaceDataFamilyTyCon <- rhs = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , text "data family" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders + , text "data family" <+> decl_head ] | otherwise = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type family" - <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders - <+> pp_inj res_var inj + , hang (text "type family" <+> decl_head <+> pp_inj res_var inj <+> ppShowRhs ss (pp_where rhs)) 2 (ppShowRhs ss (pp_rhs rhs)) $$ @@ -1100,6 +1317,8 @@ pprIfaceDecl ss (IfaceFamily { ifName = tycon where name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tycon) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tycon binders + pp_where (IfaceClosedSynFamilyTyCon {}) = text "where" pp_where _ = empty @@ -1188,7 +1407,12 @@ pprRoles :: (Role -> Bool) -> SDoc -> [IfaceTyConBinder] -> [Role] -> SDoc pprRoles suppress_if tyCon bndrs roles = sdocOption sdocPrintExplicitKinds $ \print_kinds -> - let froles = suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs roles + let froles = + suppressIfaceInvisibles + (MkPrintArityInvisibles False) + (PrintExplicitKinds print_kinds) + mempty + bndrs roles in ppUnless (all suppress_if froles || null froles) $ text "type role" <+> tyCon <+> hsep (map ppr froles) @@ -1245,16 +1469,25 @@ pprIfaceTyConParent IfNoParent pprIfaceTyConParent (IfDataInstance _ tc tys) = pprIfaceTypeApp topPrec tc tys -pprIfaceDeclHead :: SuppressBndrSig +pprIfaceDeclHead :: IfaceDecl + -> SuppressBndrSig -> IfaceContext -> ShowSub -> Name -> [IfaceTyConBinder] -- of the tycon, for invisible-suppression -> SDoc -pprIfaceDeclHead suppress_sig context ss tc_occ bndrs +pprIfaceDeclHead decl suppress_sig context ss tc_occ bndrs = sdocOption sdocPrintExplicitKinds $ \print_kinds -> sep [ pprIfaceContextArr context , pprPrefixIfDeclBndr (ss_how_much ss) (occName tc_occ) <+> pprIfaceTyConBinders suppress_sig - (suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs bndrs) ] + (suppressIfaceInvisibles + (MkPrintArityInvisibles print_arity) + (PrintExplicitKinds print_kinds) + mentioned_vars + bndrs bndrs) ] + where + -- See Note [Print invisible binders in interface declarations] + mentioned_vars = iface_decl_mentioned_vars decl + print_arity = not (iface_decl_generative decl) pprIfaceConDecl :: ShowSub -> Bool -> IfaceTopBndr ===================================== compiler/GHC/Iface/Type.hs ===================================== @@ -44,6 +44,7 @@ module GHC.Iface.Type ( SuppressBndrSig(..), UseBndrParens(..), PrintExplicitKinds(..), + PrintArityInvisibles(..), pprIfaceType, pprParendIfaceType, pprPrecIfaceType, pprIfaceContext, pprIfaceContextArr, pprIfaceIdBndr, pprIfaceLamBndr, pprIfaceTvBndr, pprIfaceTyConBinders, @@ -56,6 +57,7 @@ module GHC.Iface.Type ( isIfaceRhoType, suppressIfaceInvisibles, + visibleTypeVarOccurencies, stripIfaceInvisVars, stripInvisArgs, @@ -98,6 +100,9 @@ import Data.Word (Word8) import Control.Arrow (first) import Control.DeepSeq import Control.Monad ((<$!>)) +import Data.List (dropWhileEnd) +import qualified Data.List.NonEmpty as NonEmpty +import qualified Data.Set as Set {- ************************************************************************ @@ -609,9 +614,21 @@ splitIfaceReqForallTy (IfaceForAllTy bndr ty) = case splitIfaceReqForallTy ty of { (bndrs, rho) -> (bndr:bndrs, rho) } splitIfaceReqForallTy rho = ([], rho) -suppressIfaceInvisibles :: PrintExplicitKinds -> [IfaceTyConBinder] -> [a] -> [a] -suppressIfaceInvisibles (PrintExplicitKinds True) _tys xs = xs -suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs +newtype PrintArityInvisibles = MkPrintArityInvisibles Bool + +-- See Note [Print invisible binders in interface declarations] +-- for the definition of what binders are considered insignificant +suppressIfaceInvisibles :: PrintArityInvisibles + -> PrintExplicitKinds + -> Set.Set IfLclName + -> [IfaceTyConBinder] + -> [a] + -> [a] +suppressIfaceInvisibles _ (PrintExplicitKinds True) _ _tys xs = xs + +suppressIfaceInvisibles -- This case is semantically the same as the third case, but it should be way f + (MkPrintArityInvisibles False) (PrintExplicitKinds False) mentioned_vars tys xs + | Set.null mentioned_vars = suppress tys xs where suppress _ [] = [] suppress [] a = a @@ -619,6 +636,44 @@ suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs | isInvisibleTyConBinder k = suppress ks xs | otherwise = x : suppress ks xs +suppressIfaceInvisibles + (MkPrintArityInvisibles arity_invisibles) + (PrintExplicitKinds False) mentioned_vars tys xs + = map snd (suppress (zip tys xs)) + where + -- Consider this example: + -- type T :: forall k1 k2. Type + -- type T @a @b = b + -- `@a` is not mentioned on the RHS. However, we can't just + -- drop it because implicit argument positioning matters. + -- + -- Hence just drop the end + only_mentioned_binders = dropWhileEnd (not . is_binder_mentioned) + + is_binder_mentioned (bndr, _) = ifTyConBinderName bndr `Set.member` mentioned_vars + + suppress_invisibles group = + applyWhen invis_group only_mentioned_binders bndrs + where + bndrs = NonEmpty.toList group + invis_group = is_invisible_bndr (NonEmpty.head group) + + suppress_invisible_groups [] = [] + suppress_invisible_groups [group] = + if arity_invisibles + then NonEmpty.toList group -- the last group affects arity + else suppress_invisibles group + suppress_invisible_groups (group : groups) + = suppress_invisibles group ++ suppress_invisible_groups groups + + suppress + = suppress_invisible_groups -- Filter out insignificant invisible binders + . NonEmpty.groupWith is_invisible_bndr -- Find chunks of @-binders + . filterOut is_inferred_bndr -- We don't want to display @{binders} + + is_inferred_bndr = isInferredTyConBinder . fst + is_invisible_bndr = isInvisibleTyConBinder . fst + stripIfaceInvisVars :: PrintExplicitKinds -> [IfaceTyConBinder] -> [IfaceTyConBinder] stripIfaceInvisVars (PrintExplicitKinds True) tyvars = tyvars stripIfaceInvisVars (PrintExplicitKinds False) tyvars @@ -659,6 +714,29 @@ ifTypeIsVarFree ty = go ty go_args IA_Nil = True go_args (IA_Arg arg _ args) = go arg && go_args args +visibleTypeVarOccurencies :: IfaceType -> Set.Set IfLclName +-- Returns True if the type contains this name. Doesn't count +-- invisible application +-- Just used to control pretty printing +visibleTypeVarOccurencies = go + where + (<>) = Set.union + + go (IfaceTyVar var) = Set.singleton var + go (IfaceFreeTyVar {}) = mempty + go (IfaceAppTy fun args) = go fun <> go_args args + go (IfaceFunTy _ w arg res) = go w <> go arg <> go res + go (IfaceForAllTy bndr ty) = go (ifaceBndrType $ binderVar bndr) <> go ty + go (IfaceTyConApp _ args) = go_args args + go (IfaceTupleTy _ _ args) = go_args args + go (IfaceLitTy _) = mempty + go (IfaceCastTy {}) = mempty -- Safe + go (IfaceCoercionTy {}) = mempty -- Safe + + go_args IA_Nil = mempty + go_args (IA_Arg arg Required args) = go arg <> go_args args + go_args (IA_Arg _arg _ args) = go_args args + {- Note [Substitution on IfaceType] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Substitutions on IfaceType are done only during pretty-printing to ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -33,6 +33,10 @@ Compiler GHCi ~~~~ +- :ghci-cmd:`:info` now outputs type declarations with @-binders that are + considered semantically significant. See the documentation for :ghci-cmd:`:info` + itself for a more detailed explanation. + Runtime system ~~~~~~~~~~~~~~ ===================================== docs/users_guide/ghci.rst ===================================== @@ -2516,6 +2516,22 @@ commonly used commands. ⟨name⟩ has been loaded from a source file, then GHCi will also display the location of its definition in the source. + GHCi outputs type declarations (type synonyms, newtypes and datatypes, + classes, type and data families) with semantically significant invisible + @-binders. + + An invisible binder is considered significant when it meets at least + one of the following two criteria: + + - It visibly occurs in the declaration's body + + - It is followed by a significant binder, so it affects positioning + + For non-generative type declarations (type synonyms and type families) + there is one additional criterion: + + - It is not followed by a visible binder, so it affects the arity of a type declaration + For types and classes, GHCi also summarises instances that mention them. To avoid showing irrelevant information, an instance is shown only if (a) its head mentions ⟨name⟩, and (b) all the other things ===================================== testsuite/tests/backpack/should_fail/T19244a.stderr ===================================== @@ -17,7 +17,7 @@ T19244a.bkp:22:9: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/T19244b.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing user - [1 of 2] Compiling Map[sig] ( user\Map.hsig, nothing ) - [2 of 2] Compiling User ( user\User.hs, nothing ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, nothing ) + [2 of 2] Compiling User ( user/User.hs, nothing ) [2 of 3] Processing ordmap Instantiating ordmap - [1 of 1] Compiling Map ( ordmap\Map.hs, T19244b.out\ordmap\Map.o ) + [1 of 1] Compiling Map ( ordmap/Map.hs, T19244b.out/ordmap/Map.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including user[Map=ordmap:Map] Instantiating user[Map=ordmap:Map] - [1 of 2] Compiling Map[sig] ( user\Map.hsig, T19244b.out\user\user-GzloW2NeDdA2M0V8qzN4g2\Map.o ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, T19244b.out/user/user-GzloW2NeDdA2M0V8qzN4g2/Map.o ) T19244b.bkp:11:27: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/bkpfail46.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing p - [1 of 2] Compiling A[sig] ( p\A.hsig, nothing ) - [2 of 2] Compiling M ( p\M.hs, nothing ) + [1 of 2] Compiling A[sig] ( p/A.hsig, nothing ) + [2 of 2] Compiling M ( p/M.hs, nothing ) [2 of 3] Processing q Instantiating q - [1 of 1] Compiling A ( q\A.hs, bkpfail46.out\q\A.o ) + [1 of 1] Compiling A ( q/A.hs, bkpfail46.out/q/A.o ) [3 of 3] Processing r Instantiating r [1 of 1] Including p[A=q:A] Instantiating p[A=q:A] - [1 of 2] Compiling A[sig] ( p\A.hsig, bkpfail46.out\p\p-HVmFlcYSefiK5n1aDP1v7x\A.o ) + [1 of 2] Compiling A[sig] ( p/A.hsig, bkpfail46.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o ) bkpfail46.bkp:16:9: error: [GHC-15843] • Type constructor ‘K’ has conflicting definitions in the module and its hsig file. Main module: type K :: * -> Constraint - type K a = GHC.Classes.Eq a :: Constraint + type K a = GHC.Classes.Eq a Hsig file: type K :: * -> Constraint class K a Illegal parameterized type synonym in implementation of abstract data. ===================================== testsuite/tests/ghci/T18060/T18060.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout ===================================== @@ -74,13 +74,13 @@ data Tuple2# a b = (#,#) a b (# , #) :: a -> b -> Tuple2# a b (Int, Int) :: Tuple2 (*) (*) type T :: Tuple2 (*) (*) -type T = (Int, Int) :: Tuple2 (*) (*) +type T = (Int, Int) -- Defined at :19:1 type S :: Solo (*) -type S = MkSolo Int :: Solo (*) +type S = MkSolo Int -- Defined at :20:1 type L :: List (*) -type L = [Int] :: List (*) +type L = [Int] -- Defined at :21:1 f :: Int -> Tuple2 Int Int -> Int (\ (_, _) -> ()) :: Tuple2 a b -> Unit ===================================== testsuite/tests/ghci/scripts/T15941.stdout ===================================== @@ -1,4 +1,3 @@ type T :: * -> * -> * -type T = - (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} :: * -> * -> * +type T = (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} -- Defined at :2:1 ===================================== testsuite/tests/ghci/scripts/T19310.stdout ===================================== @@ -1,3 +1,3 @@ type T :: * -> * -> * -type T = (->) @{LiftedRep} @{LiftedRep} :: * -> * -> * +type T = (->) @{LiftedRep} @{LiftedRep} -- Defined at :3:1 ===================================== testsuite/tests/ghci/scripts/T21294a.stdout ===================================== @@ -1,5 +1,5 @@ type L0 :: * -> * -type L0 = [] :: * -> * +type L0 = [] -- Defined at :1:1 type L1 :: * -> * type L1 a = [a] ===================================== testsuite/tests/ghci/scripts/T24459.script ===================================== @@ -0,0 +1,250 @@ +:{ +{-# LANGUAGE TypeFamilies, TypeFamilyDependencies, DataKinds, TypeAbstractions, FunctionalDependencies, AllowAmbiguousTypes #-} + +import Data.Kind +import Data.Data + +-- Check that we don't print binders that aren't included in the arity +type T0 :: forall k. k -> Type +type T0 = Proxy :: forall k. k -> Type + +-- ...and a variant where the arity isn't affected by the type signature +type T1 :: forall k. k -> Type +type T1 = Proxy + +-- ...and that we do print variables that are included in the arity +type T2 :: forall k. k -> Type +type T2 @k = Proxy + +-- ...but don't print invisible binders that don't visibly occur and don't affect the arity +type T3 :: forall k. k -> Type +type T3 a = Proxy a + +-- ...and print invisible binders that do visibly occur +type T4 :: forall a. Type -> Type +type T4 @a _b = Proxy a + +-- ...one more check that it is not affected by the user's input +type T5 :: forall a. Type -> Type +type T5 @a _b = Proxy _b + +-- ...and once again +type T6 :: forall k. Type -> Type +type T6 _a = () + +-- ...now check that we don't mess up with positioning +type T7 :: forall a b c. b -> forall d. Type +type T7 @a @b @c f @d = b + +-- ...and that we count occurrences in theta +type T8 :: forall (a :: Constraint). Type -> Type +type T8 @a _ = forall x. a => x + +-- ...and in forall binder signatures +type T9 :: forall (a :: Type). Type -> Type +type T9 @a _ = forall (x :: a). Int + +-- That's all with type synonyms, let's check other sorts of type declarations + +-- Equatuions should not affect invisible binders for type families, but the arity matters +type TF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +type family TF1 @a @b c @d where + forall b d. TF1 @Type @b Int @d = () + forall a b d. TF1 @a @b (_ :: a) @d = Bool + +-- Injectivity annotations should affect invisible binders. Also check that positioning works +type TF2 :: forall (a :: Type) (b :: Type). Type -> forall (d :: Type). Type +type family TF2 @a @b c @d = r | r -> b + +-- Data families are generative and can't have injectivity annotations +-- hence no invisible binders should be printed +type DF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +data family DF1 @a @b c @d + +-- Data families are generative, so the invisible binder @b isn't a visible usage +type C1 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C1 @a @b c where + data AD a @b + +-- But type families aren't generative, hence the trailing binder @b occurs visibly +type C2 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C2 @a @b c where + type AF a @b + +-- Check that trailing invisible binders are handled properly +type C3 :: forall x. Constraint +class C3 @x where {} + +-- And check that signatures are visible occurrences +type C4 :: forall (a :: Type) (b :: Type). Constraint +class C4 @a @b where + x :: a + y :: b + +-- Also check functional dependencies +type C5 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C5 @a @b c | a -> c where {} + +-- GADTs should not have "visible" mentions of binders at a declaration's head +type D1 :: forall a. Type +data D1 @a where + MkD :: b -> D1 @b + +-- Haskell98-style declarations should work properly +type D2 :: forall a (b :: Type). Type -> forall d. Type +data D2 @a @b c @d = MkD2_1 | MkD2_2 Int b + +-- And now a lot of stuff suggested by @int-index + +data P a b + +type F1 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k1 + +type F2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k2 + +type F3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k3 + +type F4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k4 + +type F5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k5 + +type F6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k6 + +type F1x2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k2) + +type F1x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k3) + +type F1x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k4) + +type F1x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k5) + +type F1x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k6) + +type F2x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k3) + +type F2x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k4) + +type F2x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k5) + +type F2x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k6) + +type F3x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k4) + +type F3x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k5) + +type F3x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k6) + +type F4x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k5) + +type F4x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k6) + +type F5x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k5,k6) + +:} + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 + +:set -fprint-explicit-kinds + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 ===================================== testsuite/tests/ghci/scripts/T24459.stdout ===================================== @@ -0,0 +1,313 @@ +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 a = Proxy a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @a _b = Proxy a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 _b = Proxy _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @a @b f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 c @d where + TF1 Int = () + forall a (_1 :: a) b d. TF1 _1 = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 c + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a c where + type AD :: * -> forall b. * + data family AD a + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a c | a -> c + -- Defined at :86:1 +type D1 :: forall {k} (a :: k). * +data D1 where + MkD :: b -> D1 + -- Defined at :90:1 +type role D2 phantom +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @a @b c = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 a b c d e @k6 = P k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b c d e @k6 = P k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 a b @k3 c d e @k6 = P k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 a b @k3 @k4 c d e @k6 = P k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 a b @k3 @k4 @k5 c d e @k6 = P k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 a b c d e @k6 = P k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b c d e @k6 = P (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 a b @k3 c d e @k6 = P (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 a b @k3 @k4 c d e @k6 = P (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 a b @k3 @k4 @k5 c d e @k6 = P (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 a b c d e @k6 = P (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 c d e @k6 = P (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 c d e @k6 = P (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b c d e @k6 = P (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 a b @k3 @k4 c d e @k6 = P (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 a b @k3 @k4 @k5 c d e @k6 = P (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 a b @k3 c d e @k6 = P (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 a b @k3 @k4 @k5 c d e @k6 = P (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 a b @k3 @k4 c d e @k6 = P (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 a b @k3 @k4 @k5 c d e @k6 = P (k5, k6) + -- Defined at :162:1 +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy @{k} + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 @k a = Proxy @{k} a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @{k} @a _b = Proxy @{k} a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 @{k} @a _b = Proxy @{*} _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 @{k} @k1 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @{k} @{k1} @{k2} @a @b @c f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 @a @b c @d where + TF1 @(*) @b Int @d = () + forall a (_1 :: a) b d. TF1 @a @b _1 @d = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 @a @b c @d + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a @b c where + type AD :: * -> forall b. * + data family AD a @b + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 @{k} @x + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a @b c | a -> c + -- Defined at :86:1 +type role D1 nominal nominal +type D1 :: forall {k} (a :: k). * +data D1 @{k} @a where + MkD :: b -> D1 @{*} @b + -- Defined at :90:1 +type role D2 nominal nominal nominal nominal phantom nominal +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @{k} @{k1} @a @b c @d = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k5, k6) + -- Defined at :162:1 ===================================== testsuite/tests/ghci/scripts/T8535.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/T9181.stdout ===================================== @@ -13,12 +13,10 @@ type (GHC.Internal.Data.Type.Ord.<=) x y = GHC.Internal.TypeError.Assert (x GHC.Internal.Data.Type.Ord.<=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) - :: Constraint type (GHC.Internal.Data.Type.Ord.<=?) :: forall k. k -> k -> Bool type (GHC.Internal.Data.Type.Ord.<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) True True False - :: Bool type GHC.Internal.TypeLits.AppendSymbol :: GHC.Types.Symbol -> GHC.Types.Symbol -> GHC.Types.Symbol type family GHC.Internal.TypeLits.AppendSymbol a b ===================================== testsuite/tests/ghci/scripts/all.T ===================================== @@ -385,3 +385,4 @@ test('T23686', normal, ghci_script, ['T23686.script']) test('T13869', extra_files(['T13869a.hs', 'T13869b.hs']), ghci_script, ['T13869.script']) test('ListTuplePunsPpr', normal, ghci_script, ['ListTuplePunsPpr.script']) test('ListTuplePunsPprNoAbbrevTuple', [expect_broken(23135), limit_stdout_lines(13)], ghci_script, ['ListTuplePunsPprNoAbbrevTuple.script']) +test('T24459', normal, ghci_script, ['T24459.script']) ===================================== testsuite/tests/ghci/scripts/ghci020.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T10145.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T18594.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5406,7 +5406,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5533,7 +5533,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5608,7 +5608,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5616,7 +5616,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5662,7 +5662,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7397,7 +7397,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7407,7 +7407,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7429,7 +7429,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7454,14 +7454,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7478,24 +7478,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8583,7 +8583,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9357,7 +9357,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9418,7 +9418,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9573,9 +9573,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9692,9 +9692,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5375,7 +5375,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5502,7 +5502,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5577,7 +5577,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5585,7 +5585,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5631,7 +5631,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7366,7 +7366,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7376,7 +7376,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7398,7 +7398,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7423,14 +7423,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7447,24 +7447,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -11625,7 +11625,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -12399,7 +12399,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -12460,7 +12460,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -12615,9 +12615,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -12734,9 +12734,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5552,7 +5552,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5679,7 +5679,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5754,7 +5754,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5762,7 +5762,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5808,7 +5808,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7546,7 +7546,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7556,7 +7556,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7578,7 +7578,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7603,14 +7603,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7627,24 +7627,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8807,7 +8807,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9581,7 +9581,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9642,7 +9642,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9797,9 +9797,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9916,9 +9916,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5406,7 +5406,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5533,7 +5533,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5608,7 +5608,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5616,7 +5616,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5662,7 +5662,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7397,7 +7397,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7407,7 +7407,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7429,7 +7429,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7454,14 +7454,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7478,24 +7478,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8583,7 +8583,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9357,7 +9357,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9418,7 +9418,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9573,9 +9573,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9692,9 +9692,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) @@ -4341,7 +4341,7 @@ module GHC.PrimOps where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -4468,7 +4468,7 @@ module GHC.PrimOps where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -4543,7 +4543,7 @@ module GHC.PrimOps where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -4551,7 +4551,7 @@ module GHC.PrimOps where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -4597,7 +4597,7 @@ module GHC.PrimOps where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -6329,9 +6329,9 @@ module Prelude.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -8960,11 +8960,11 @@ module Prelude.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 ===================================== @@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) @@ -4341,7 +4341,7 @@ module GHC.PrimOps where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -4468,7 +4468,7 @@ module GHC.PrimOps where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -4543,7 +4543,7 @@ module GHC.PrimOps where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -4551,7 +4551,7 @@ module GHC.PrimOps where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -4597,7 +4597,7 @@ module GHC.PrimOps where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -6332,9 +6332,9 @@ module Prelude.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -8963,11 +8963,11 @@ module Prelude.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) ===================================== testsuite/tests/interface-stability/template-haskell-exports.stdout ===================================== @@ -31,7 +31,7 @@ module Language.Haskell.TH where type Code :: (* -> *) -> forall (r :: GHC.Types.RuntimeRep). TYPE r -> * newtype Code m a = Code {examineCode :: m (TExp a)} type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = Code Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = Code Q type Con :: * data Con = NormalC Name [BangType] | RecC Name [VarBangType] | InfixC BangType Name BangType | ForallC [TyVarBndr Specificity] Cxt Con | GadtC [Name] [BangType] Type | RecGadtC [Name] [VarBangType] Type type ConQ :: * @@ -881,7 +881,7 @@ module Language.Haskell.TH.Lib where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * @@ -1220,7 +1220,7 @@ module Language.Haskell.TH.Lib.Internal where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * ===================================== testsuite/tests/rep-poly/RepPolyBackpack3.stderr ===================================== @@ -1,19 +1,19 @@ [1 of 3] Processing sig - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, nothing ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, nothing ) [2 of 3] Processing impl Instantiating impl - [1 of 1] Compiling Impl ( impl\Impl.hs, RepPolyBackpack3.out\impl\Impl.o ) + [1 of 1] Compiling Impl ( impl/Impl.hs, RepPolyBackpack3.out/impl/Impl.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including sig[Sig=impl:Impl] Instantiating sig[Sig=impl:Impl] - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, RepPolyBackpack3.out\sig\sig-Absk5cIXTXe6UYhGMYGber\Sig.o ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, RepPolyBackpack3.out/sig/sig-Absk5cIXTXe6UYhGMYGber/Sig.o ) RepPolyBackpack3.bkp:17:5: error: [GHC-15843] • Type constructor ‘Rep’ has conflicting definitions in the module and its hsig file. Main module: type Rep :: GHC.Types.RuntimeRep - type Rep = T :: GHC.Types.RuntimeRep + type Rep = T Hsig file: type Rep :: GHC.Types.RuntimeRep data Rep Illegal implementation of abstract data: Invalid type family ‘T’. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b8cf83b66b87004c1e70f8182b3aff1e345ef381 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b8cf83b66b87004c1e70f8182b3aff1e345ef381 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 14:58:24 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 10 Dec 2024 09:58:24 -0500 Subject: [Git][ghc/ghc][wip/backports-9.8] 3 commits: ghcup-metadata: Don't populate dlOutput unless necessary Message-ID: <675857101f76_238e1a8784801020b4@gitlab.mail> Ben Gamari pushed to branch wip/backports-9.8 at Glasgow Haskell Compiler / GHC Commits: d5e3a630 by Ben Gamari at 2024-12-02T10:25:22-05:00 ghcup-metadata: Don't populate dlOutput unless necessary ghcup can apparently infer the output name of an artifact from its URL. Consequently, we should only include the `dlOutput` field when it would differ from the filename of `dlUri`. Fixes #24547. (cherry picked from commit 6d398066b6084a971248da8ce37bc40c53a83525) (cherry picked from commit 878e8529a09abc213d11f76e6bdafa769578aa30) - - - - - a60b882c by Ben Gamari at 2024-12-02T19:57:56-05:00 mk-ghcup-metadata: Fix directory of testsuite tarball As reported in #24546, the `dlTest` artifact should be extracted into the `testsuite` directory. (cherry picked from commit 9d936c5799daadf96392211b03e38520925aea17) - - - - - 6071fec3 by Matthew Pickering at 2024-12-10T09:58:11-05:00 compiler: Remove unused `containers.h` include Fixes #23712 (cherry picked from commit 02e6a6ceac761d62ed30817b9525d952bca599ac) - - - - - 10 changed files: - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - compiler/GHC/Data/Word64Map.hs - compiler/GHC/Data/Word64Map/Internal.hs - compiler/GHC/Data/Word64Map/Lazy.hs - compiler/GHC/Data/Word64Map/Strict.hs - compiler/GHC/Data/Word64Map/Strict/Internal.hs - compiler/GHC/Data/Word64Set.hs - compiler/GHC/Data/Word64Set/Internal.hs - compiler/GHC/Utils/Containers/Internal/BitUtil.hs - compiler/GHC/Utils/Containers/Internal/StrictPair.hs Changes: ===================================== .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py ===================================== @@ -36,6 +36,7 @@ import os import yaml import gitlab from urllib.request import urlopen +from urllib.parse import urlparse import hashlib import sys import json @@ -80,7 +81,7 @@ source_artifact = Artifact('source-tarball' test_artifact = Artifact('source-tarball' , 'ghc-{version}-testsuite.tar.xz' , 'ghc-{version}-testsuite.tar.xz' - , 'ghc-{version}' ) + , 'ghc-{version}/testsuite' ) def debian(arch, n): return linux_platform(arch, "{arch}-linux-deb{n}".format(arch=arch, n=n)) @@ -156,13 +157,18 @@ def mk_one_metadata(release_mode, version, job_map, artifact): eprint(f"Bindist URL: {url}") eprint(f"Download URL: {final_url}") - #Download and hash from the release pipeline, this must not change anyway during upload. + # Download and hash from the release pipeline, this must not change anyway during upload. h = download_and_hash(url) res = { "dlUri": final_url , "dlSubdir": artifact.subdir.format(version=version) - , "dlOutput": artifact.output_name.format(version=version) , "dlHash" : h } + + # Only add dlOutput if it is inconsistent with the filename inferred from the URL + output = artifact.output_name.format(version=version) + if Path(urlparse(final_url).path).name != output: + res["dlOutput"] = output + eprint(res) return res ===================================== compiler/GHC/Data/Word64Map.hs ===================================== @@ -8,7 +8,6 @@ {-# LANGUAGE MonoLocalBinds #-} #endif -#include "containers.h" ----------------------------------------------------------------------------- -- | ===================================== compiler/GHC/Data/Word64Map/Internal.hs ===================================== @@ -14,7 +14,6 @@ {-# OPTIONS_HADDOCK not-home #-} {-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-} -#include "containers.h" ----------------------------------------------------------------------------- -- | ===================================== compiler/GHC/Data/Word64Map/Lazy.hs ===================================== @@ -3,7 +3,6 @@ {-# LANGUAGE Safe #-} #endif -#include "containers.h" ----------------------------------------------------------------------------- -- | ===================================== compiler/GHC/Data/Word64Map/Strict.hs ===================================== @@ -4,8 +4,6 @@ {-# LANGUAGE Trustworthy #-} #endif -#include "containers.h" - ----------------------------------------------------------------------------- -- | -- Module : Data.Word64Map.Strict ===================================== compiler/GHC/Data/Word64Map/Strict/Internal.hs ===================================== @@ -4,8 +4,6 @@ {-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-} -#include "containers.h" - ----------------------------------------------------------------------------- -- | -- Module : Data.Word64Map.Strict.Internal ===================================== compiler/GHC/Data/Word64Set.hs ===================================== @@ -3,8 +3,6 @@ {-# LANGUAGE Safe #-} #endif -#include "containers.h" - ----------------------------------------------------------------------------- -- | -- Module : Data.Word64Set ===================================== compiler/GHC/Data/Word64Set/Internal.hs ===================================== @@ -12,8 +12,6 @@ {-# OPTIONS_HADDOCK not-home #-} -#include "containers.h" - ----------------------------------------------------------------------------- -- | -- Module : Data.Word64Set.Internal ===================================== compiler/GHC/Utils/Containers/Internal/BitUtil.hs ===================================== @@ -6,8 +6,6 @@ {-# LANGUAGE Safe #-} #endif -#include "containers.h" - ----------------------------------------------------------------------------- -- | -- Module : Utils.Containers.Internal.BitUtil ===================================== compiler/GHC/Utils/Containers/Internal/StrictPair.hs ===================================== @@ -3,8 +3,6 @@ {-# LANGUAGE Safe #-} #endif -#include "containers.h" - -- | A strict pair module GHC.Utils.Containers.Internal.StrictPair (StrictPair(..), toPair) where View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a3401159f2846605abb517e71af463df47398e72...6071fec3ee92cb43cf49d48615b30c3198bbb9e1 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a3401159f2846605abb517e71af463df47398e72...6071fec3ee92cb43cf49d48615b30c3198bbb9e1 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 17:36:12 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 10 Dec 2024 12:36:12 -0500 Subject: [Git][ghc/ghc][wip/bco-name] rts: Annotate BCOs with their Name Message-ID: <67587c0ce04ec_2eef4c29390108668@gitlab.mail> Ben Gamari pushed to branch wip/bco-name at Glasgow Haskell Compiler / GHC Commits: 96bf92f3 by Ben Gamari at 2024-12-10T12:35:57-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 15 changed files: - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/StgToByteCode.hs - compiler/GHC/Unit/Info.hs - compiler/ghc.cabal.in - docs/users_guide/debugging.rst - hadrian/src/Rules/Rts.hs - rts/Disassembler.c - rts/Interpreter.c - rts/include/rts/Bytecodes.h - rts/rts.cabal - testsuite/tests/th/T10279.hs - testsuite/tests/th/T10279.stderr Changes: ===================================== compiler/GHC/ByteCode/Asm.hs ===================================== @@ -106,7 +106,7 @@ assembleBCOs interp profile proto_bcos tycons top_strs modbreaks spt_entries = d bcos' <- mallocStrings interp bcos return CompiledByteCode { bc_bcos = bcos' - , bc_itbls = itblenv + , bc_itbls = itblenv , bc_ffis = concatMap protoBCOFFIs proto_bcos , bc_strs = top_strs , bc_breaks = modbreaks @@ -178,11 +178,12 @@ assembleOneBCO interp profile pbco = do return ubco' assembleBCO :: Platform -> ProtoBCO Name -> IO UnlinkedBCO -assembleBCO platform (ProtoBCO { protoBCOName = nm - , protoBCOInstrs = instrs - , protoBCOBitmap = bitmap - , protoBCOBitmapSize = bsize - , protoBCOArity = arity }) = do +assembleBCO platform + (ProtoBCO { protoBCOName = nm + , protoBCOInstrs = instrs + , protoBCOBitmap = bitmap + , protoBCOBitmapSize = bsize + , protoBCOArity = arity }) = do -- pass 1: collect up the offsets of the local labels. let asm = mapM_ (assembleI platform) instrs @@ -527,6 +528,10 @@ assembleI platform i = case i of , SmallOp tickx, SmallOp infox , Op np ] +#if MIN_VERSION_rts(1,0,3) + BCO_NAME name -> do np <- lit [BCONPtrStr name] + emit bci_BCO_NAME [Op np] +#endif where literal (LitLabel fs _) = litlabel fs ===================================== compiler/GHC/ByteCode/Instr.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -funbox-strict-fields #-} @@ -27,6 +27,10 @@ import GHC.Runtime.Heap.Layout ( StgWord ) import Data.Int import Data.Word +#if MIN_VERSION_rts(1,0,3) +import Data.ByteString (ByteString) +#endif + import GHC.Stack.CCS (CostCentre) import GHC.Stg.Syntax @@ -229,6 +233,22 @@ data BCInstr !Word16 -- breakpoint info index (RemotePtr CostCentre) +#if MIN_VERSION_rts(1,0,3) + -- | A "meta"-instruction for recording the name of a BCO for debugging purposes. + -- These are ignored by the interpreter but helpfully printed by the disassmbler. + | BCO_NAME !ByteString +#endif + + +{- Note [BCO_NAME] + ~~~~~~~~~~~~~~~ + The BCO_NAME instruction is a debugging-aid enabled with the -fadd-bco-name flag. + When enabled the bytecode assembler will prepend a BCO_NAME instruction to every + generated bytecode object capturing the STG name of the binding the BCO implements. + This is then printed by the bytecode disassembler, allowing bytecode objects to be + readily correlated with their STG and Core source. + -} + -- ----------------------------------------------------------------------------- -- Printing bytecode instructions @@ -383,6 +403,9 @@ instance Outputable BCInstr where <+> text "" <+> ppr tickx <+> text "" <+> ppr infox <+> text "" +#if MIN_VERSION_rts(1,0,3) + ppr (BCO_NAME nm) = text "BCO_NAME" <+> text (show nm) +#endif @@ -487,3 +510,6 @@ bciStackUse SLIDE{} = 0 bciStackUse MKAP{} = 0 bciStackUse MKPAP{} = 0 bciStackUse PACK{} = 1 -- worst case is PACK 0 words +#if MIN_VERSION_rts(1,0,3) +bciStackUse BCO_NAME{} = 0 +#endif ===================================== compiler/GHC/Driver/Flags.hs ===================================== @@ -581,6 +581,7 @@ data GeneralFlag | Opt_DoAsmLinting | Opt_DoAnnotationLinting | Opt_DoBoundsChecking + | Opt_AddBcoName | Opt_NoLlvmMangler -- hidden flag | Opt_FastLlvm -- hidden flag | Opt_NoTypeableBinds ===================================== compiler/GHC/Driver/Session.hs ===================================== @@ -2540,6 +2540,7 @@ fFlagsDeps = [ flagSpec "catch-nonexhaustive-cases" Opt_CatchNonexhaustiveCases, flagSpec "alignment-sanitisation" Opt_AlignmentSanitisation, flagSpec "check-prim-bounds" Opt_DoBoundsChecking, + flagSpec "add-bco-name" Opt_AddBcoName, flagSpec "num-constant-folding" Opt_NumConstantFolding, flagSpec "core-constant-folding" Opt_CoreConstantFolding, flagSpec "fast-pap-calls" Opt_FastPAPCalls, ===================================== compiler/GHC/StgToByteCode.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} @@ -81,6 +81,9 @@ import GHC.Unit.Home.ModInfo (lookupHpt) import Data.Array import Data.Coerce (coerce) import Data.ByteString (ByteString) +#if MIN_VERSION_rts(1,0,3) +import qualified Data.ByteString.Char8 as BS +#endif import Data.Map (Map) import Data.IntMap (IntMap) import qualified Data.Map as Map @@ -236,7 +239,10 @@ ppBCEnv p -- Create a BCO and do a spot of peephole optimisation on the insns -- at the same time. mkProtoBCO - :: Platform + :: (Outputable name) + => Platform + -> Bool -- ^ True <=> label with @BCO_NAME@ instruction + -- see Note [BCO_NAME] -> name -> BCInstrList -> Either [CgStgAlt] (CgStgRhs) @@ -247,10 +253,10 @@ mkProtoBCO -> Bool -- ^ True <=> is a return point, rather than a function -> [FFIInfo] -> ProtoBCO name -mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis +mkProtoBCO platform _add_bco_name nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis = ProtoBCO { protoBCOName = nm, - protoBCOInstrs = maybe_with_stack_check, + protoBCOInstrs = maybe_add_bco_name $ maybe_add_stack_check peep_d, protoBCOBitmap = bitmap, protoBCOBitmapSize = fromIntegral bitmap_size, protoBCOArity = arity, @@ -258,6 +264,14 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi protoBCOFFIs = ffis } where +#if MIN_VERSION_rts(1,0,3) + maybe_add_bco_name instrs + | _add_bco_name = BCO_NAME str : instrs + where + str = BS.pack $ showSDocOneLine defaultSDocContext (ppr nm) +#endif + maybe_add_bco_name instrs = instrs + -- Overestimate the stack usage (in words) of this BCO, -- and if >= iNTERP_STACK_CHECK_THRESH, add an explicit -- stack check. (The interpreter always does a stack check @@ -265,17 +279,17 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi -- BCO anyway, so we only need to add an explicit one in the -- (hopefully rare) cases when the (overestimated) stack use -- exceeds iNTERP_STACK_CHECK_THRESH. - maybe_with_stack_check - | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = peep_d + maybe_add_stack_check instrs + | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = instrs -- don't do stack checks at return points, -- everything is aggregated up to the top BCO -- (which must be a function). -- That is, unless the stack usage is >= AP_STACK_SPLIM, -- see bug #1466. | stack_usage >= fromIntegral iNTERP_STACK_CHECK_THRESH - = STKCHECK stack_usage : peep_d + = STKCHECK stack_usage : instrs | otherwise - = peep_d -- the supposedly common case + = instrs -- the supposedly common case -- We assume that this sum doesn't wrap stack_usage = sum (map bciStackUse peep_d) @@ -308,6 +322,7 @@ schemeTopBind (id, rhs) | Just data_con <- isDataConWorkId_maybe id, isNullaryRepDataCon data_con = do platform <- profilePlatform <$> getProfile + add_bco_name <- shouldAddBcoName -- Special case for the worker of a nullary data con. -- It'll look like this: Nil = /\a -> Nil a -- If we feed it into schemeR, we'll get @@ -316,7 +331,8 @@ schemeTopBind (id, rhs) -- by just re-using the single top-level definition. So -- for the worker itself, we must allocate it directly. -- ioToBc (putStrLn $ "top level BCO") - emitBc (mkProtoBCO platform (getName id) (toOL [PACK data_con 0, RETURN P]) + emitBc (mkProtoBCO platform add_bco_name + (getName id) (toOL [PACK data_con 0, RETURN P]) (Right rhs) 0 0 [{-no bitmap-}] False{-not alts-}) | otherwise @@ -358,6 +374,7 @@ schemeR_wrk -> BcM (ProtoBCO Name) schemeR_wrk fvs nm original_body (args, body) = do + add_bco_name <- shouldAddBcoName profile <- getProfile let platform = profilePlatform profile @@ -379,7 +396,7 @@ schemeR_wrk fvs nm original_body (args, body) bitmap = mkBitmap platform bits body_code <- schemeER_wrk sum_szsb_args p_init body - emitBc (mkProtoBCO platform nm body_code (Right original_body) + emitBc (mkProtoBCO platform add_bco_name nm body_code (Right original_body) arity bitmap_size bitmap False{-not alts-}) -- | Introduce break instructions for ticked expressions. @@ -1069,9 +1086,10 @@ doCase d s p scrut bndr alts | ubx_tuple_frame = SLIDE 0 2 `consOL` alt_final0 | otherwise = alt_final0 + add_bco_name <- shouldAddBcoName let alt_bco_name = getName bndr - alt_bco = mkProtoBCO platform alt_bco_name alt_final (Left alts) + alt_bco = mkProtoBCO platform add_bco_name alt_bco_name alt_final (Left alts) 0{-no arity-} bitmap_size bitmap True{-is alts-} scrut_code <- schemeE (d + ret_frame_size_b + save_ccs_size_b) (d + ret_frame_size_b + save_ccs_size_b) @@ -1379,7 +1397,7 @@ Note [unboxed tuple bytecodes and tuple_BCO] tupleBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name tupleBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -1398,9 +1416,9 @@ tupleBCO platform args_info args = body_code = mkSlideW 0 1 -- pop frame header `snocOL` RETURN_TUPLE -- and add it again -primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name +primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name primCallBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -2337,6 +2355,9 @@ getHscEnv = BcM $ \st -> return (st, bcm_hsc_env st) getProfile :: BcM Profile getProfile = targetProfile <$> getDynFlags +shouldAddBcoName :: BcM Bool +shouldAddBcoName = gopt Opt_AddBcoName <$> getDynFlags + emitBc :: ([FFIInfo] -> ProtoBCO Name) -> BcM (ProtoBCO Name) emitBc bco = BcM $ \st -> return (st{ffis=[]}, bco (ffis st)) ===================================== compiler/GHC/Unit/Info.hs ===================================== @@ -236,7 +236,7 @@ unitHsLibs namever ways0 p = map (mkDynName . addSuffix . ST.unpack) (unitLibrar -- This change elevates the need to add custom hooks -- and handling specifically for the `rts` package. addSuffix rts@"HSrts" = rts ++ (expandTag rts_tag) - addSuffix rts@"HSrts-1.0.2" = rts ++ (expandTag rts_tag) + addSuffix rts@"HSrts-1.0.3" = rts ++ (expandTag rts_tag) addSuffix other_lib = other_lib ++ (expandTag tag) expandTag t | null t = "" ===================================== compiler/ghc.cabal.in ===================================== @@ -130,6 +130,7 @@ Library exceptions == 0.10.*, semaphore-compat, stm, + rts, ghc-boot == @ProjectVersionMunged@, ghc-heap == @ProjectVersionMunged@, ghci == @ProjectVersionMunged@ ===================================== docs/users_guide/debugging.rst ===================================== @@ -1240,8 +1240,7 @@ Other :type: dynamic :since: 9.8.1 - - default: enabled + :default: enabled At the moment, ghci disables optimizations, because not all passes are compatible with the interpreter. @@ -1254,3 +1253,16 @@ Other expressions. Those cannot be stored in breakpoints, so any free variable that refers to optimized code will not be inspectable when this flag is enabled. + +.. ghc-flag:: -fadd-bco-name + :shortdesc: Add ``BCO_NAME`` instructions in generated bytecode. + :reverse: -fno-add-bco-name + :type: dynamic + + :since: 9.14.1 + + Prefix every generated bytecode object with a ``BCO_NAME`` instruction + containing the STG name of the binding from which the BCO originated. + These are printed by the bytecode disassembler, aiding in correlating + bytecode with STG. + ===================================== hadrian/src/Rules/Rts.hs ===================================== @@ -165,7 +165,7 @@ needRtsSymLinks stage rtsWays prefix, versionlessPrefix :: String versionlessPrefix = "libHSrts" -prefix = versionlessPrefix ++ "-1.0.2" +prefix = versionlessPrefix ++ "-1.0.3" -- removeRtsDummyVersion "a/libHSrts-1.0-ghc1.2.3.4.so" -- == "a/libHSrts-ghc1.2.3.4.so" ===================================== rts/Disassembler.c ===================================== @@ -452,6 +452,13 @@ disInstr ( StgBCO *bco, int pc ) debugBelch("RETURN_T\n "); break; + case bci_BCO_NAME: { + const char *name = (const char*) literals[instrs[pc]]; + debugBelch("BCO_NAME \"%s\"\n ", name); + pc += 1; + break; + } + default: barf("disInstr: unknown opcode %u", (unsigned int) instr); } @@ -464,10 +471,9 @@ void disassemble( StgBCO *bco ) StgWord16* instrs = (StgWord16*)(bco->instrs->payload); StgMutArrPtrs* ptrs = bco->ptrs; uint32_t nbcs = (uint32_t)(bco->instrs->bytes / sizeof(StgWord16)); - uint32_t pc = 1; + uint32_t pc = 0; debugBelch("BCO\n" ); - pc = 0; while (pc < nbcs) { debugBelch("\t%2d: ", pc ); pc = disInstr ( bco, pc ); ===================================== rts/Interpreter.c ===================================== @@ -2085,6 +2085,10 @@ run_BCO: goto do_return_nonpointer; } + case bci_BCO_NAME: + bciPtr++; + goto nextInsn; + case bci_SWIZZLE: { W_ stkoff = BCO_GET_LARGE_ARG; StgInt n = BCO_GET_LARGE_ARG; ===================================== rts/include/rts/Bytecodes.h ===================================== @@ -112,6 +112,8 @@ #define bci_PRIMCALL 87 +#define bci_BCO_NAME 88 + /* If you need to go past 255 then you will run into the flags */ /* If you need to go below 0x0100 then you will run into the instructions */ ===================================== rts/rts.cabal ===================================== @@ -1,6 +1,6 @@ cabal-version: 3.0 name: rts -version: 1.0.2 +version: 1.0.3 synopsis: The GHC runtime system description: The GHC runtime system. ===================================== testsuite/tests/th/T10279.hs ===================================== @@ -7,4 +7,4 @@ import Language.Haskell.TH.Syntax -- error message doesn't recognize it as a source package ID, -- (This is OK, since it will look obviously wrong when they -- try to find the package in their package database.) -blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) +blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) ===================================== testsuite/tests/th/T10279.stderr ===================================== @@ -1,11 +1,11 @@ T10279.hs:10:9: error: [GHC-51294] • Failed to load interface for ‘A’. - no unit id matching ‘rts-1.0.2’ was found + no unit id matching ‘rts-1.0.3’ was found (This unit ID looks like the source package ID; the real unit ID is ‘rts’) • In the untyped splice: $(conE (Name (mkOccName "Foo") - (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) + (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/96bf92f39c25881d42275b626237e9d7cb8942a7 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/96bf92f39c25881d42275b626237e9d7cb8942a7 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 18:20:24 2024 From: gitlab at gitlab.haskell.org (Apoorv Ingle (@ani)) Date: Tue, 10 Dec 2024 13:20:24 -0500 Subject: [Git][ghc/ghc][wip/spj-apporv-Oct24] push unLocs further in Message-ID: <6758866737b5a_2eef4106050811079c@gitlab.mail> Apoorv Ingle pushed to branch wip/spj-apporv-Oct24 at Glasgow Haskell Compiler / GHC Commits: 9bb3b929 by Apoorv Ingle at 2024-12-10T12:18:55-06:00 push unLocs further in - - - - - 5 changed files: - compiler/GHC/Hs/Expr.hs - compiler/GHC/Tc/Gen/App.hs - compiler/GHC/Tc/Gen/Do.hs - compiler/GHC/Tc/Gen/Expr.hs - compiler/GHC/Tc/Gen/Head.hs Changes: ===================================== compiler/GHC/Hs/Expr.hs ===================================== @@ -548,7 +548,7 @@ data XXExprGhcRn } | PopErrCtxt -- A hint for typechecker to pop - {-# UNPACK #-} !(HsExpr GhcRn) -- the top of the error context stack + {-# UNPACK #-} !(HsExpr GhcRn) -- the top of the error context stack -- Does not presist post renaming phase -- See Part 3. of Note [Expanding HsDo with XXExprGhcRn] -- in `GHC.Tc.Gen.Do` ===================================== compiler/GHC/Tc/Gen/App.hs ===================================== @@ -909,23 +909,6 @@ addArgCtxt ctxt (L arg_loc arg) thing_inside addErrCtxt (funAppCtxt fun arg arg_no) $ thing_inside -{- - VAExpansion (OrigStmt (L _ stmt@(BindStmt {})) flav) _ loc - | isGeneratedSrcSpan (locA arg_loc) -- This arg is the second argument to generated (>>=) - -> setSrcSpan loc $ - addStmtCtxt stmt flav $ - thing_inside - | otherwise -- This arg is the first argument to generated (>>=) - -> setSrcSpanA arg_loc $ - addStmtCtxt stmt flav $ - thing_inside - VAExpansion (OrigStmt (L _ (XStmtLR (ApplicativeStmt{}))) _) _ _ - -> thing_inside - VAExpansion (OrigStmt (L loc stmt) flav) _ _ - -> setSrcSpanA loc $ - addStmtCtxt stmt flav $ - thing_inside --} _ -> setSrcSpanA arg_loc $ addExprCtxt arg $ -- Auto-suppressed if arg_loc is generated thing_inside } ===================================== compiler/GHC/Tc/Gen/Do.hs ===================================== @@ -47,17 +47,16 @@ import Data.List ((\\)) * * ************************************************************************ -} --- TODO: make caller add the pop error context -- | Expand the `do`-statments into expressions right after renaming -- so that they can be typechecked. -- See Note [Expanding HsDo with XXExprGhcRn] below for `HsDo` specific commentary -- and Note [Handling overloaded and rebindable constructs] for high level commentary expandDoStmts :: HsDoFlavour -> [ExprLStmt GhcRn] -> TcM (HsExpr GhcRn) -expandDoStmts doFlav stmts = unLoc <$> expand_do_stmts doFlav stmts +expandDoStmts doFlav stmts = expand_do_stmts doFlav stmts -- | The main work horse for expanding do block statements into applications of binds and thens -- See Note [Expanding HsDo with XXExprGhcRn] -expand_do_stmts :: HsDoFlavour -> [ExprLStmt GhcRn] -> TcM (LHsExpr GhcRn) +expand_do_stmts :: HsDoFlavour -> [ExprLStmt GhcRn] -> TcM (HsExpr GhcRn) expand_do_stmts ListComp _ = pprPanic "expand_do_stmts: impossible happened. ListComp" empty @@ -73,13 +72,13 @@ expand_do_stmts _ (stmt@(L _ (ParStmt {})):_) = expand_do_stmts _ [] = pprPanic "expand_do_stmts: impossible happened. Empty stmts" empty -expand_do_stmts flav [stmt@(L loc (LastStmt _ (L body_loc body) _ ret_expr))] +expand_do_stmts flav [stmt@(L _loc (LastStmt _ (L body_loc body) _ ret_expr))] -- See Note [Expanding HsDo with XXExprGhcRn] Equation (5) below -- last statement of a list comprehension, needs to explicitly return it -- See `checkLastStmt` and `Syntax.Expr.StmtLR.LastStmt` | NoSyntaxExprRn <- ret_expr -- Last statement is just body if we are not in ListComp context. See Syntax.Expr.LastStmt - = return $ mkExpandedStmtAt loc stmt flav body + = return $ mkExpandedStmt stmt flav body | SyntaxExprRn ret <- ret_expr -- @@ -87,16 +86,16 @@ expand_do_stmts flav [stmt@(L loc (LastStmt _ (L body_loc body) _ ret_expr))] -- return e ~~> return e -- to make T18324 work = do let expansion = genHsApp ret (L body_loc body) - return $ mkExpandedStmtAt body_loc stmt flav expansion + return $ mkExpandedStmt stmt flav expansion expand_do_stmts doFlavour (stmt@(L _ (LetStmt _ bs)) : lstmts) = -- See Note [Expanding HsDo with XXExprGhcRn] Equation (3) below -- stmts ~~> stmts' -- ------------------------------------------------ -- let x = e ; stmts ~~> let x = e in stmts'xo - do expand_stmts <- expand_do_stmts doFlavour lstmts - let expansion = genHsLet bs (genPopErrCtxtExpr . unLoc $ expand_stmts) - return $ mkExpandedStmtAt (noAnnSrcSpan generatedSrcSpan) stmt doFlavour expansion + do expand_stmts_expr <- expand_do_stmts doFlavour lstmts + let expansion = genHsLet bs (genPopErrCtxtExpr expand_stmts_expr) + return $ mkExpandedStmt stmt doFlavour expansion expand_do_stmts doFlavour (stmt@(L _loc (BindStmt xbsrn pat e)): lstmts) | SyntaxExprRn bind_op <- xbsrn_bindOp xbsrn @@ -107,12 +106,12 @@ expand_do_stmts doFlavour (stmt@(L _loc (BindStmt xbsrn pat e)): lstmts) -- _ -> fail "Pattern match failure .." -- ------------------------------------------------------- -- pat <- e ; stmts ~~> (>>=) e f - = do expand_stmts <- expand_do_stmts doFlavour lstmts - failable_expr <- mk_failable_expr doFlavour pat (genPopErrCtxtExpr . unLoc $ expand_stmts) fail_op + = do expand_stmts_expr <- expand_do_stmts doFlavour lstmts + failable_expr <- mk_failable_expr doFlavour pat (genPopErrCtxtExpr expand_stmts_expr) fail_op let expansion = genHsExpApps bind_op -- (>>=) [ e , failable_expr ] - return $ mkExpandedStmtAt (noAnnSrcSpan generatedSrcSpan) stmt doFlavour expansion + return $ mkExpandedStmt stmt doFlavour expansion | otherwise = pprPanic "expand_do_stmts: The impossible happened, missing bind operator from renamer" (text "stmt" <+> ppr stmt) @@ -126,8 +125,8 @@ expand_do_stmts doFlavour (stmt@(L _loc (BodyStmt _ e (SyntaxExprRn then_op) _)) do expand_stmts_expr <- expand_do_stmts doFlavour lstmts let expansion = genHsExpApps then_op -- (>>) [ e - , genPopErrCtxtExpr . unLoc $ expand_stmts_expr ] - return $ mkExpandedStmtAt (noAnnSrcSpan generatedSrcSpan) stmt doFlavour expansion + , genPopErrCtxtExpr $ expand_stmts_expr ] + return $ mkExpandedStmt stmt doFlavour expansion expand_do_stmts doFlavour ((L loc (RecStmt { recS_stmts = L stmts_loc rec_stmts @@ -149,14 +148,14 @@ expand_do_stmts doFlavour -- -> do { rec_stmts -- ; return (local_only_ids ++ later_ids) } )) -- (\ [ local_only_ids ++ later_ids ] -> stmts') - do expand_stmts <- expand_do_stmts doFlavour lstmts + do expand_stmts_expr <- expand_do_stmts doFlavour lstmts -- NB: No need to wrap the expansion with an ExpandedStmt -- as we want to flatten the rec block statements into its parent do block anyway - return $ mkHsApps (wrapGenSpan bind_fun) -- (>>=) - [ (wrapGenSpan mfix_fun) `mkHsApp` mfix_expr -- (mfix (do block)) - , genHsLamDoExp doFlavour [ mkBigLHsVarPatTup all_ids ] -- (\ x -> - expand_stmts -- stmts') - ] + return $ unLoc (mkHsApps (wrapGenSpan bind_fun) -- (>>=) + [ (wrapGenSpan mfix_fun) `mkHsApp` mfix_expr -- (mfix (do block)) + , genHsLamDoExp doFlavour [ mkBigLHsVarPatTup all_ids ] -- (\ x -> + (wrapGenSpan expand_stmts_expr) -- stmts') + ]) where local_only_ids = local_ids \\ later_ids -- get unique local rec ids; -- local rec ids and later ids can overlap @@ -193,7 +192,7 @@ expand_do_stmts doFlavour ((L _ (XStmtLR (ApplicativeStmt _ args mb_join))): lst ; (pats_can_fail, rhss) <- unzip <$> mapM (do_arg . snd) args -- add blocks for failable patterns - ; body_with_fails <- foldrM match_args xexpr pats_can_fail + ; body_with_fails <- foldrM match_args (wrapGenSpan xexpr) pats_can_fail -- builds (((body <$> e1) <*> e2) ...) ; let expand_ado_expr = foldl mk_apps body_with_fails (zip (map fst args) rhss) @@ -207,7 +206,7 @@ expand_do_stmts doFlavour ((L _ (XStmtLR (ApplicativeStmt _ args mb_join))): lst , text "lstmts:" <+> ppr lstmts , text "mb_join:" <+> ppr mb_join , text "expansion:" <+> ppr final_expr]) - ; return final_expr + ; return $ unLoc final_expr } where @@ -225,7 +224,7 @@ expand_do_stmts doFlavour ((L _ (XStmtLR (ApplicativeStmt _ args mb_join))): lst , final_expr = ret@(L ret_loc _) , bv_pattern = pat , stmt_context = ctxt }) = - do { xx_expr <- (wrapGenSpan . unLoc) <$> (expand_do_stmts ctxt $ stmts ++ [L ret_loc $ mkLastStmt ret]) + do { xx_expr <- wrapGenSpan <$> (expand_do_stmts ctxt $ stmts ++ [L ret_loc $ mkLastStmt ret]) ; traceTc "do_arg" (text "ManyArg" <+> ppr False <+> vcat [ppr (stmts ++ [L ret_loc $ mkLastStmt ret]), text "--", ppr xx_expr]) ; return ((pat, Nothing) , xx_expr) } ===================================== compiler/GHC/Tc/Gen/Expr.hs ===================================== @@ -715,7 +715,8 @@ tcXExpr (PopErrCtxt e) res_ty tcXExpr (ExpandedThingRn o@(OrigStmt stmt flav) e) res_ty = addThingCtxt o $ - mkExpandedStmtTc stmt flav <$> tcExpr e res_ty + mkExpandedStmtTc stmt flav <$> + tcExpr e res_ty -- For record selection tcXExpr xe res_ty = tcApp (XExpr xe) res_ty ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -259,7 +259,7 @@ instance Outputable QLFlag where ppr NoQL = text "NoQL" instance Outputable AppCtxt where - ppr (VAExpansion e l _) = text "VAExpansion" <+> ppr e <+> ppr l + ppr (VAExpansion e l l') = text "VAExpansion" <+> ppr e <+> ppr l <+> ppr l' ppr (VACall f n l) = text "VACall" <+> int n <+> ppr f <+> ppr l type family XPass (p :: TcPass) where View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9bb3b9293bebeda5801617bdf90e934c27395408 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9bb3b9293bebeda5801617bdf90e934c27395408 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 18:21:36 2024 From: gitlab at gitlab.haskell.org (Apoorv Ingle (@ani)) Date: Tue, 10 Dec 2024 13:21:36 -0500 Subject: [Git][ghc/ghc][wip/spj-apporv-Oct24] 159 commits: Refactored BooleanFormula to be in line with TTG (#21592) Message-ID: <675886b06070a_2eef4106050811102e@gitlab.mail> Apoorv Ingle pushed to branch wip/spj-apporv-Oct24 at Glasgow Haskell Compiler / GHC Commits: 97f600c6 by Hassan Al-Awwadi at 2024-11-04T15:52:12+00:00 Refactored BooleanFormula to be in line with TTG (#21592) There are two parts to this commit. * We moved the definition of BooleanFormula over to L.H.S.BooleanFormula * We parameterized the BooleanFormula over the pass The GHC specific details of BooleanFormula remain in Ghc.Data.BooleanFormula. Because its parameterized over the pass its no longer a functor or traversable, but we defined bfMap and bfTraverse for the cases where we needed fmap and traverse originally. Most other changes are just churn. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot ------------------------- - - - - - d4fd3580 by Andreas Klebinger at 2024-11-05T07:36:16-05:00 ghc-heap: Fix incomplete selector warnings. Use utility functions instead of selectors to read partial attributes. Part of fixing #25380. - - - - - fdd9f62a by Peter Trommler at 2024-11-05T07:36:51-05:00 PPC NCG: Implement fmin and fmax - - - - - 8e217256 by Mike Pilgrem at 2024-11-07T04:34:20-05:00 Re CLC #293 - Don't specify Data.List.NonEmpty in terms of partial See https://github.com/haskell/core-libraries-committee/issues/293 `List.init` had already been driven out of `tails1` by 21fc180bec93d964a7f4ffdf2429ef6f74b49ab6 but this specification also avoided partial `fromList`, so I preferred it. The `changelog.md` for `base` is updated, with an entry added under `base-4.22.0.0`. - - - - - 346e4cd1 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: copy zip files into the correct directory Fixes #25446 - - - - - bbdbe225 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: Sign .gz bindists too Fixes #25447 - - - - - 0c722e14 by Hécate Kleidukos at 2024-11-07T04:35:37-05:00 hadrian: Enforce the usage of GHC >=9.8.1 for ghci-multi GHC 9.6 no good when it comes to multi-repl stuff, despite being well within the range of n-2 releases for bootstrapping, when the script was adapted to load haddock, in !12851 - - - - - d8f8a1c3 by Sylvain Henry at 2024-11-07T19:27:46-05:00 Handle the special ghc-prim:GHC.Prim module in the compiler Before this patch, some custom hacks were necessary in ghc-prim's Setup.hs to register the GHC.Prim (virtual) module and in Hadrian to generate haddocks properly. In this patch we special-case this module in the compiler itself instead (which it already is, see ghcPrimIface in GHC.Iface.Load). From Cabal/Hadrian's perspective GHC.Prim is now just a normal autogenerated module. This simplification is worthwhile on its own. It was found while looking into the work needed for #24453 which aims to merge ghc-prim, ghc-bignum, and ghc-internal. It's also one step closer to remove ghc-prim's custom setup. - - - - - a55adc8e by Cheng Shao at 2024-11-07T19:28:22-05:00 Clean up obsolete CPP guarded code paths from the tree This patch cleans up obsolete CPP guarded code paths from the tree. The minimum supported boot GHC version is 9.6, and all the pre-9.6 era code paths can be removed. - - - - - 9ede97f3 by Cheng Shao at 2024-11-07T19:28:58-05:00 Remove obsolete executable wrappers from the tree The executable wrappers are handled by hadrian and bindist Makefile. The various .wrapper scripts in the tree are unused since removal of Make build system, so this patch removes them all. - - - - - 7d42b2df by tristian at 2024-11-07T19:29:40-05:00 TcRnDuplicateDecls now suggests to use the DuplicateRecordFields extension. Fixes: !24627 - - - - - e56ed179 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: normalise some versions in callstacks (cherry picked from commit f230e29f30d0c1c566d4dd251807fcab76a2710e) - - - - - a28fc903 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: use -fhide-source-paths to normalise some backpack tests (cherry picked from commit b19de476bc5ce5c7792e8af1354b94a4286a1a13) - - - - - ed16d303 by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite/haddock: strip version identifiers and unit hashes from html tests (cherry picked from commit fbf0889eadc410d43dd5c1657e320634b6738fa5) - - - - - e45e5836 by Zubin Duggal at 2024-11-11T15:16:36+05:30 haddock: oneshot tests can drop files if they share modtimes. Stop this by including the filename in the key. Ideally we would use `ghc -M` output to do a proper toposort Partially addresses #25372 (cherry picked from commit e78c7ef96e395f1ef41f04790aebecd0409b92b9) - - - - - 9104e6eb by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: fix normalisation of T9930fail so that it doesn't get tripped up by ghc executable (ARGV[0]) differences (cherry picked from commit a79a587e025d42d34bb30e115fc5c7cab6c1e030) - - - - - 2c31264a by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: normalise windows file seperators (cherry picked from commit f858875e03b9609656b542aaaaff85ad0a83878a) - - - - - 2807f91b by Zubin Duggal at 2024-11-11T15:21:30+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites - - - - - c02add17 by Ben Gamari at 2024-11-12T01:22:11-05:00 configure: Check version number validity Here we verify the previously informal invariant that stable release version numbers must have three components, preventing costly failed releases. Specifically, the check fails in the following scenarios: * `version=9.13` while `RELEASE=YES` since this would imply a release made from an unstable branch * `version=9.13.0` since unstable versions should only have two components * `version=9.12` since this has the wrong number of version components for a stable branch Fixes #25390. - - - - - 747fd322 by Teo Camarasu at 2024-11-12T01:22:49-05:00 docs: link to #14474 in the template-haskell docs - - - - - 6d96bb62 by Zubin Duggal at 2024-11-12T01:23:25-05:00 testsuite: normalise execvp vs exec differences in process tests Fixes #25431 - - - - - 502e6711 by Torsten Schmits at 2024-11-12T01:24:01-05:00 fix test lint that accumulated while the checks were broken I didn't fix the issues flagged by the #ifdef linter because it were so many that it seemed like the rule has become obsolete. - - - - - 223a4cb5 by Torsten Schmits at 2024-11-12T01:24:02-05:00 test driver: fix file collection for regex linters When a testsuite linter is executed with the `tracked` strategy, the driver runs `git ls-tree` to collect eligible files. This appears to have ceased producing any paths – `ls-tree` restricts its results to the current working directory, which is `testsuite/tests/linters` in this case. As a quick fix, this patch changes the working directory to match expectations. - - - - - 9ad9ac63 by Alan Zimmerman at 2024-11-12T01:24:39-05:00 EPA: Capture location of '_' for wild card type binder And keep track of promotion status in HsExplicitTupleTy, so the round-trip ppr test works for it. Updates Haddock output too, using the PromotionFlag in HsExplicitTupleTy. Closes #25454 - - - - - c37b96fa by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix setImmediate() implementation for Cloudflare Workers This patch fixes setImmediate() implementation for Cloudflare Workers in the wasm backend's js prelude script. Cloudflare Workers doesn't support the MessageChannel API, and we use a setTimeout() based fallback implementation in this case. - - - - - bea8ea4c by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix FinalizationRegistry logic for Cloudflare Workers This patch fixes FinalizationRegistry related logic for Cloudflare Workers in wasm backend js post linker. Cloudflare Workers doesn't support FinalizationRegistry, in this case we use a dummy implementation that doesn't do anything. - - - - - 00d551bf by Cheng Shao at 2024-11-13T08:48:21-05:00 Remove obsolete cross-port script This patch removes the obsolete cross-port script in the tree. The script was based on the legacy Make build system which has been pruned from the tree long ago. For hadrian, proper support for two-stage bootstrapping onto a new unsupported platform is a work in progress in !11444. - - - - - 75a2eae4 by Cheng Shao at 2024-11-13T08:48:58-05:00 hadrian: fix bindist makefile for wasm32-wasi target This patch fixes one incoherent place between bindist makefile and hadrian logic: I forgot to include wasi/wasm32 in OsSupportsGHCi/ArchSupportsGHCi as well. And this results in incorrect settings file generated after installing the bindist, and "Use interpreter"/"Have interpreter" fields incorrectly have "NO" values where they should be "YES" like --info output of in-tree version. - - - - - 0614abef by Alan Zimmerman at 2024-11-13T08:49:34-05:00 EPA: Correctly capture leading semis in decl list Closes #25467 - - - - - 00d58ae1 by Sebastian Graf at 2024-11-13T15:21:23-05:00 DmdAnal: Make `prompt#` lazy (#25439) This applies the same treatment to `prompt#` as for `catch#`. See `Note [Strictness for mask/unmask/catch/prompt]`. Fixes #25439. - - - - - 93233a66 by Ben Gamari at 2024-11-13T15:21:59-05:00 boot: Do not attempt to update config.sub While Apple ARM hardware was new we found that the autoconf scripts included in some boot packages were too old. As a mitigation for this, we introduced logic in the `boot` script to update the `config.sub` with that from the GHC tree. However, this causes submodules which have `config.sub` committted to appear to be dirty. This is a considerable headache. Now since `config.sub` with full platform support is more common we can remove `boot`'s `config.sub` logic. Fixes #19574. - - - - - fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - 491e075b by Apoorv Ingle at 2024-12-10T12:21:21-06:00 Make ApplicativeDo work with HsExpansions testcase added: T24406 Issues Fixed: #24406, #16135 Code Changes: - Remove `XStmtLR GhcTc` as `XStmtLR GhcRn` is now compiled to `HsExpr GhcTc` - The expanded statements are guided by `GHC.Hs.Expr.TcFunInfo` which is used to decide if the `XExpr GhcRn` is to be typechecked using `tcApp` or `tcExpr` Note [Expanding HsDo with XXExprGhcRn] explains the change in more detail - - - - - 6dae5197 by Apoorv Ingle at 2024-12-10T12:21:21-06:00 simplify data structures. remove doTcApp and applicative stmt fail blocks do not refer stmts - - - - - ceec1fb4 by Simon Peyton Jones at 2024-12-10T12:21:21-06:00 Remove special cases ... to see what breaks - - - - - 5f416d3c by Simon Peyton Jones at 2024-12-10T12:21:21-06:00 Don't use a user SrcSpan on a Stmt expansoin - - - - - 5b03b726 by Apoorv Ingle at 2024-12-10T12:21:21-06:00 make caller wrap the pop err ctxt - - - - - fefcb3bd by Apoorv Ingle at 2024-12-10T12:21:22-06:00 wrap expansion statements with the statement location instead of genSpan - - - - - 7b624183 by Apoorv Ingle at 2024-12-10T12:21:22-06:00 fix bugs, let stmt pop in the right place - - - - - 3ac4efde by Apoorv Ingle at 2024-12-10T12:21:22-06:00 addThingCtxt in tcXExpr - - - - - a78b735d by Apoorv Ingle at 2024-12-10T12:21:22-06:00 some more progress in error messages - - - - - a500aad7 by Apoorv Ingle at 2024-12-10T12:21:22-06:00 addExprCtxt ignores Expanded Statements - - - - - b249a60f by Apoorv Ingle at 2024-12-10T12:21:22-06:00 remove adhoc addthingCtxt and remove location from PopErrCtxt HsExprs - - - - - 594cdef4 by Apoorv Ingle at 2024-12-10T12:21:22-06:00 push unLocs further in - - - - - 30 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - .gitlab/merge_request_templates/Default.md - .gitlab/rel_eng/recompress-all - .gitlab/rel_eng/upload.sh - boot - compile_flags.txt - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/PPC/CodeGen.hs - compiler/GHC/CmmToAsm/PPC/Instr.hs - compiler/GHC/CmmToAsm/PPC/Ppr.hs - compiler/GHC/CmmToAsm/Ppr.hs - compiler/GHC/CmmToAsm/X86/CodeGen.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Core/Class.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/CoreToIface.hs - compiler/GHC/Data/BooleanFormula.hs - compiler/GHC/Data/FastString.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/9bb3b9293bebeda5801617bdf90e934c27395408...594cdef4ed6dc4a95bc8cdeb71454ff7837231a4 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/9bb3b9293bebeda5801617bdf90e934c27395408...594cdef4ed6dc4a95bc8cdeb71454ff7837231a4 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 19:01:47 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 10 Dec 2024 14:01:47 -0500 Subject: [Git][ghc/ghc][master] Add missing @since documentation for (!?) function Message-ID: <6758901b3e76c_24961427fec084385@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - 1 changed file: - libraries/ghc-internal/src/GHC/Internal/List.hs Changes: ===================================== libraries/ghc-internal/src/GHC/Internal/List.hs ===================================== @@ -1643,6 +1643,8 @@ xs !! n -- -- WARNING: This function takes linear time in the index. -- +-- @since base-4.19.0.0 +-- -- ==== __Examples__ -- -- >>> ['a', 'b', 'c'] !? 0 View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/a83b7ed62f29f60fca07137c79d106aa82ec327d -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/a83b7ed62f29f60fca07137c79d106aa82ec327d You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 19:02:30 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 10 Dec 2024 14:02:30 -0500 Subject: [Git][ghc/ghc][master] compiler: Don't attempt to TSAN-instrument SIMD operations Message-ID: <67589046a190_24961419e86c8845b@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 1 changed file: - compiler/GHC/Cmm/ThreadSanitizer.hs Changes: ===================================== compiler/GHC/Cmm/ThreadSanitizer.hs ===================================== @@ -209,8 +209,9 @@ tsanTarget fn formals args = tsanStore :: Env -> CmmType -> CmmExpr -> Block CmmNode O O -tsanStore env ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanStore env ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) @@ -219,8 +220,9 @@ tsanStore env ty addr = tsanLoad :: Env -> AlignmentSpec -> CmmType -> CmmExpr -> Block CmmNode O O -tsanLoad env align ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanLoad env align ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e745e3a30670440c9cf65450835d4eddada784eb -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e745e3a30670440c9cf65450835d4eddada784eb You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 19:03:03 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 10 Dec 2024 14:03:03 -0500 Subject: [Git][ghc/ghc][master] gitlab/ci: Don't clobber RUNTEST_ARGS Message-ID: <67589067c4312_2496144d0be89122a@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 1 changed file: - .gitlab/ci.sh Changes: ===================================== .gitlab/ci.sh ===================================== @@ -954,7 +954,7 @@ if [ "${CI_COMMIT_BRANCH:-}" == "master" ] && [ "${CI_PROJECT_PATH:-}" == "ghc/ fi fi if [ -n "${IGNORE_PERF_FAILURES:-}" ]; then - RUNTEST_ARGS="--ignore-perf-failures=$IGNORE_PERF_FAILURES" + RUNTEST_ARGS=( "${RUNTEST_ARGS[@]:-}" "--ignore-perf-failures=$IGNORE_PERF_FAILURES" ) fi if [[ -z ${BIGNUM_BACKEND:-} ]]; then BIGNUM_BACKEND=gmp; fi View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/684c0018d9cbc2161aaffaa1ad3cd1e23ff57388 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/684c0018d9cbc2161aaffaa1ad3cd1e23ff57388 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 19:03:45 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 10 Dec 2024 14:03:45 -0500 Subject: [Git][ghc/ghc][master] hadrian: Mitigate mktexfmt race Message-ID: <6758909125420_24961417d0cc9534d@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 1 changed file: - hadrian/src/Rules/Documentation.hs Changes: ===================================== hadrian/src/Rules/Documentation.hs ===================================== @@ -326,11 +326,27 @@ getPkgDocTarget root path = -- | Build all PDF documentation buildPdfDocumentation :: Rules () -buildPdfDocumentation = mapM_ buildSphinxPdf docPaths +buildPdfDocumentation = do + -- Note [Avoiding mktexfmt race] + -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + -- We must ensure that the *first* xelatex invocation in the + -- build is performed serially (that is, not concurrently with + -- any other xelatex invocations) as mktexfmt does not handle + -- racing `mkdir` calls gracefully. However, we assume that + -- subsequent invocations are safe to run concurrently since the + -- initial call will have created the requisite directories (namely + -- $HOME/.texlive2020/texmf-var/web2c). + -- + -- Fixes #25564. + let maxConcurrentReaders = 1000 + xelatexMutex <- newResource "xelatex-mutex" maxConcurrentReaders + let rs = [(xelatexMutex, 1)] + + mapM_ (buildSphinxPdf rs) docPaths -- | Compile a Sphinx ReStructured Text package to LaTeX -buildSphinxPdf :: FilePath -> Rules () -buildSphinxPdf path = do +buildSphinxPdf :: [(Resource, Int)] -> FilePath -> Rules () +buildSphinxPdf rs path = do root <- buildRootRules root -/- pdfRoot -/- path <.> "pdf" %> \file -> do @@ -344,7 +360,8 @@ buildSphinxPdf path = do checkSphinxWarnings dir -- LaTeX "fixed point" - build $ target docContext Xelatex [path <.> "tex"] [dir] + -- See Note [Avoiding mktexfmt race] above. + buildWithResources rs $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Makeindex [path <.> "idx"] [dir] View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/41dae5b86955094aa4c5647f63f1f52f1a8a5519 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/41dae5b86955094aa4c5647f63f1f52f1a8a5519 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 19:04:31 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 10 Dec 2024 14:04:31 -0500 Subject: [Git][ghc/ghc][master] rts/CheckUnload: Reset old_objects if unload is skipped Message-ID: <675890bf117c0_249614195ba49964b@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 1 changed file: - rts/CheckUnload.c Changes: ===================================== rts/CheckUnload.c ===================================== @@ -467,48 +467,44 @@ bool prepareUnloadCheck(void) void checkUnload(void) { - if (global_s_indices == NULL) { - return; - } else if (!safeToUnload()) { - return; - } - // At this point we've marked all dynamically loaded static objects // (including their dependencies) during GC, but not the root set of object // code (loaded_objects). Mark the roots first, then unload any unmarked // objects. - OCSectionIndices *s_indices = global_s_indices; - ASSERT(s_indices->sorted); + if (global_s_indices != NULL && safeToUnload()) { + OCSectionIndices *s_indices = global_s_indices; + ASSERT(s_indices->sorted); - // Mark roots - for (ObjectCode *oc = loaded_objects; oc != NULL; oc = oc->next_loaded_object) { - markObjectLive(NULL, (W_)oc, NULL); - } + // Mark roots + for (ObjectCode *oc = loaded_objects; oc != NULL; oc = oc->next_loaded_object) { + markObjectLive(NULL, (W_)oc, NULL); + } - // Free unmarked objects - ObjectCode *next = NULL; - for (ObjectCode *oc = old_objects; oc != NULL; oc = next) { - next = oc->next; - ASSERT(oc->status == OBJECT_UNLOADED); - - // Symbols should be removed by unloadObj_. - // NB (osa): If this assertion doesn't hold then freeObjectCode below - // will corrupt symhash as keys of that table live in ObjectCodes. If - // you see a segfault in a hash table operation in linker (in non-debug - // RTS) then it's probably because this assertion did not hold. - ASSERT(oc->symbols == NULL); - - if (oc->unloadable) { - removeOCSectionIndices(s_indices, oc); - freeObjectCode(oc); - n_unloaded_objects -= 1; - } else { - // If we don't have enough information to - // accurately determine the reachability of - // the object then hold onto it. - oc->next = objects; - objects = oc; + // Free unmarked objects + ObjectCode *next = NULL; + for (ObjectCode *oc = old_objects; oc != NULL; oc = next) { + next = oc->next; + ASSERT(oc->status == OBJECT_UNLOADED); + + // Symbols should be removed by unloadObj_. + // NB (osa): If this assertion doesn't hold then freeObjectCode below + // will corrupt symhash as keys of that table live in ObjectCodes. If + // you see a segfault in a hash table operation in linker (in non-debug + // RTS) then it's probably because this assertion did not hold. + ASSERT(oc->symbols == NULL); + + if (oc->unloadable) { + removeOCSectionIndices(s_indices, oc); + freeObjectCode(oc); + n_unloaded_objects -= 1; + } else { + // If we don't have enough information to + // accurately determine the reachability of + // the object then hold onto it. + oc->next = objects; + objects = oc; + } } } View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9efbc51f99118e8f9c3abf2bcb6dc3295893ded6 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9efbc51f99118e8f9c3abf2bcb6dc3295893ded6 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 19:34:24 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 10 Dec 2024 14:34:24 -0500 Subject: [Git][ghc/ghc][wip/T25560] 16 commits: Fix requirements on T25240 Message-ID: <675897c08b4bd_249614c157141020b1@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - 26764a68 by Ben Gamari at 2024-12-10T14:34:08-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - be52a457 by Ben Gamari at 2024-12-10T14:34:08-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 207b1533 by Ben Gamari at 2024-12-10T14:34:08-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - b75f972d by Ben Gamari at 2024-12-10T14:34:08-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 3ff826f6 by Ben Gamari at 2024-12-10T14:34:09-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - cd7bf129 by Ben Gamari at 2024-12-10T14:34:09-05:00 testsuite: Add test for #25560 - - - - - 30 changed files: - compiler/GHC.hs - compiler/GHC/Parser/Lexer.x - compiler/GHC/StgToJS/Apply.hs - compiler/GHC/StgToJS/Arg.hs - compiler/GHC/StgToJS/CodeGen.hs - compiler/GHC/StgToJS/Expr.hs - compiler/GHC/StgToJS/Ids.hs - compiler/GHC/StgToJS/Linker/Linker.hs - compiler/GHC/StgToJS/Monad.hs - compiler/GHC/StgToJS/Object.hs - compiler/GHC/StgToJS/Symbols.hs - compiler/GHC/StgToJS/Types.hs - compiler/GHC/Unit/Module/Graph.hs - docs/users_guide/using-concurrent.rst - libraries/ghc-internal/CHANGELOG.md - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs - libraries/template-haskell/changelog.md - libraries/template-haskell/tests/all.T - + libraries/template-haskell/tests/dataToCodeQUnit.hs - + libraries/template-haskell/tests/dataToCodeQUnit.stdout - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - rts/js/string.js - rts/rts.cabal - testsuite/tests/ghci/linking/T25240/all.T The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ed2d745312f84bc25dcf2f05eee890adc1e1dcb5...cd7bf129c29fe919fb4214fdb9e1241bf569907b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ed2d745312f84bc25dcf2f05eee890adc1e1dcb5...cd7bf129c29fe919fb4214fdb9e1241bf569907b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 20:53:09 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 10 Dec 2024 15:53:09 -0500 Subject: [Git][ghc/ghc] Deleted branch wip/backports-9.8 Message-ID: <6758aa35a6c86_24961414fabe011053a@gitlab.mail> Ben Gamari deleted branch wip/backports-9.8 at Glasgow Haskell Compiler / GHC -- You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 10 20:53:15 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 10 Dec 2024 15:53:15 -0500 Subject: [Git][ghc/ghc][ghc-9.8] 3 commits: ghcup-metadata: Don't populate dlOutput unless necessary Message-ID: <6758aa3b92b8e_2496141509a281107af@gitlab.mail> Ben Gamari pushed to branch ghc-9.8 at Glasgow Haskell Compiler / GHC Commits: d5e3a630 by Ben Gamari at 2024-12-02T10:25:22-05:00 ghcup-metadata: Don't populate dlOutput unless necessary ghcup can apparently infer the output name of an artifact from its URL. Consequently, we should only include the `dlOutput` field when it would differ from the filename of `dlUri`. Fixes #24547. (cherry picked from commit 6d398066b6084a971248da8ce37bc40c53a83525) (cherry picked from commit 878e8529a09abc213d11f76e6bdafa769578aa30) - - - - - a60b882c by Ben Gamari at 2024-12-02T19:57:56-05:00 mk-ghcup-metadata: Fix directory of testsuite tarball As reported in #24546, the `dlTest` artifact should be extracted into the `testsuite` directory. (cherry picked from commit 9d936c5799daadf96392211b03e38520925aea17) - - - - - 6071fec3 by Matthew Pickering at 2024-12-10T09:58:11-05:00 compiler: Remove unused `containers.h` include Fixes #23712 (cherry picked from commit 02e6a6ceac761d62ed30817b9525d952bca599ac) - - - - - 10 changed files: - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - compiler/GHC/Data/Word64Map.hs - compiler/GHC/Data/Word64Map/Internal.hs - compiler/GHC/Data/Word64Map/Lazy.hs - compiler/GHC/Data/Word64Map/Strict.hs - compiler/GHC/Data/Word64Map/Strict/Internal.hs - compiler/GHC/Data/Word64Set.hs - compiler/GHC/Data/Word64Set/Internal.hs - compiler/GHC/Utils/Containers/Internal/BitUtil.hs - compiler/GHC/Utils/Containers/Internal/StrictPair.hs Changes: ===================================== .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py ===================================== @@ -36,6 +36,7 @@ import os import yaml import gitlab from urllib.request import urlopen +from urllib.parse import urlparse import hashlib import sys import json @@ -80,7 +81,7 @@ source_artifact = Artifact('source-tarball' test_artifact = Artifact('source-tarball' , 'ghc-{version}-testsuite.tar.xz' , 'ghc-{version}-testsuite.tar.xz' - , 'ghc-{version}' ) + , 'ghc-{version}/testsuite' ) def debian(arch, n): return linux_platform(arch, "{arch}-linux-deb{n}".format(arch=arch, n=n)) @@ -156,13 +157,18 @@ def mk_one_metadata(release_mode, version, job_map, artifact): eprint(f"Bindist URL: {url}") eprint(f"Download URL: {final_url}") - #Download and hash from the release pipeline, this must not change anyway during upload. + # Download and hash from the release pipeline, this must not change anyway during upload. h = download_and_hash(url) res = { "dlUri": final_url , "dlSubdir": artifact.subdir.format(version=version) - , "dlOutput": artifact.output_name.format(version=version) , "dlHash" : h } + + # Only add dlOutput if it is inconsistent with the filename inferred from the URL + output = artifact.output_name.format(version=version) + if Path(urlparse(final_url).path).name != output: + res["dlOutput"] = output + eprint(res) return res ===================================== compiler/GHC/Data/Word64Map.hs ===================================== @@ -8,7 +8,6 @@ {-# LANGUAGE MonoLocalBinds #-} #endif -#include "containers.h" ----------------------------------------------------------------------------- -- | ===================================== compiler/GHC/Data/Word64Map/Internal.hs ===================================== @@ -14,7 +14,6 @@ {-# OPTIONS_HADDOCK not-home #-} {-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-} -#include "containers.h" ----------------------------------------------------------------------------- -- | ===================================== compiler/GHC/Data/Word64Map/Lazy.hs ===================================== @@ -3,7 +3,6 @@ {-# LANGUAGE Safe #-} #endif -#include "containers.h" ----------------------------------------------------------------------------- -- | ===================================== compiler/GHC/Data/Word64Map/Strict.hs ===================================== @@ -4,8 +4,6 @@ {-# LANGUAGE Trustworthy #-} #endif -#include "containers.h" - ----------------------------------------------------------------------------- -- | -- Module : Data.Word64Map.Strict ===================================== compiler/GHC/Data/Word64Map/Strict/Internal.hs ===================================== @@ -4,8 +4,6 @@ {-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-} -#include "containers.h" - ----------------------------------------------------------------------------- -- | -- Module : Data.Word64Map.Strict.Internal ===================================== compiler/GHC/Data/Word64Set.hs ===================================== @@ -3,8 +3,6 @@ {-# LANGUAGE Safe #-} #endif -#include "containers.h" - ----------------------------------------------------------------------------- -- | -- Module : Data.Word64Set ===================================== compiler/GHC/Data/Word64Set/Internal.hs ===================================== @@ -12,8 +12,6 @@ {-# OPTIONS_HADDOCK not-home #-} -#include "containers.h" - ----------------------------------------------------------------------------- -- | -- Module : Data.Word64Set.Internal ===================================== compiler/GHC/Utils/Containers/Internal/BitUtil.hs ===================================== @@ -6,8 +6,6 @@ {-# LANGUAGE Safe #-} #endif -#include "containers.h" - ----------------------------------------------------------------------------- -- | -- Module : Utils.Containers.Internal.BitUtil ===================================== compiler/GHC/Utils/Containers/Internal/StrictPair.hs ===================================== @@ -3,8 +3,6 @@ {-# LANGUAGE Safe #-} #endif -#include "containers.h" - -- | A strict pair module GHC.Utils.Containers.Internal.StrictPair (StrictPair(..), toPair) where View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a3401159f2846605abb517e71af463df47398e72...6071fec3ee92cb43cf49d48615b30c3198bbb9e1 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a3401159f2846605abb517e71af463df47398e72...6071fec3ee92cb43cf49d48615b30c3198bbb9e1 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 00:37:31 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 10 Dec 2024 19:37:31 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 12 commits: Add missing @since documentation for (!?) function Message-ID: <6758decbec961_16dbb6ab57ac8508@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 733153f3 by Ben Gamari at 2024-12-10T19:37:07-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 775881bb by Ben Gamari at 2024-12-10T19:37:07-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - dabdcc96 by Ben Gamari at 2024-12-10T19:37:07-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - dd484a69 by Ben Gamari at 2024-12-10T19:37:07-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - 957fc6e5 by Ben Gamari at 2024-12-10T19:37:07-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - da55325e by Ben Gamari at 2024-12-10T19:37:07-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - e129a40b by Ben Gamari at 2024-12-10T19:37:07-05:00 testsuite: Add test for #25560 - - - - - 30 changed files: - .gitlab/ci.sh - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/StgToByteCode.hs - compiler/GHC/Unit/Info.hs - compiler/ghc.cabal.in - docs/users_guide/debugging.rst - docs/users_guide/using-concurrent.rst - hadrian/src/Rules/Documentation.hs - hadrian/src/Rules/Rts.hs - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - libraries/ghc-internal/src/GHC/Internal/List.hs - rts/Capability.c - rts/Capability.h - rts/CheckUnload.c - rts/Disassembler.c - rts/Interpreter.c - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Bytecodes.h - rts/include/rts/Config.h - rts/include/rts/Threads.h - rts/rts.cabal - + testsuite/tests/rts/T25560.hs - testsuite/tests/rts/all.T - testsuite/tests/th/T10279.hs - testsuite/tests/th/T10279.stderr Changes: ===================================== .gitlab/ci.sh ===================================== @@ -954,7 +954,7 @@ if [ "${CI_COMMIT_BRANCH:-}" == "master" ] && [ "${CI_PROJECT_PATH:-}" == "ghc/ fi fi if [ -n "${IGNORE_PERF_FAILURES:-}" ]; then - RUNTEST_ARGS="--ignore-perf-failures=$IGNORE_PERF_FAILURES" + RUNTEST_ARGS=( "${RUNTEST_ARGS[@]:-}" "--ignore-perf-failures=$IGNORE_PERF_FAILURES" ) fi if [[ -z ${BIGNUM_BACKEND:-} ]]; then BIGNUM_BACKEND=gmp; fi ===================================== compiler/GHC/ByteCode/Asm.hs ===================================== @@ -106,7 +106,7 @@ assembleBCOs interp profile proto_bcos tycons top_strs modbreaks spt_entries = d bcos' <- mallocStrings interp bcos return CompiledByteCode { bc_bcos = bcos' - , bc_itbls = itblenv + , bc_itbls = itblenv , bc_ffis = concatMap protoBCOFFIs proto_bcos , bc_strs = top_strs , bc_breaks = modbreaks @@ -178,11 +178,12 @@ assembleOneBCO interp profile pbco = do return ubco' assembleBCO :: Platform -> ProtoBCO Name -> IO UnlinkedBCO -assembleBCO platform (ProtoBCO { protoBCOName = nm - , protoBCOInstrs = instrs - , protoBCOBitmap = bitmap - , protoBCOBitmapSize = bsize - , protoBCOArity = arity }) = do +assembleBCO platform + (ProtoBCO { protoBCOName = nm + , protoBCOInstrs = instrs + , protoBCOBitmap = bitmap + , protoBCOBitmapSize = bsize + , protoBCOArity = arity }) = do -- pass 1: collect up the offsets of the local labels. let asm = mapM_ (assembleI platform) instrs @@ -527,6 +528,10 @@ assembleI platform i = case i of , SmallOp tickx, SmallOp infox , Op np ] +#if MIN_VERSION_rts(1,0,3) + BCO_NAME name -> do np <- lit [BCONPtrStr name] + emit bci_BCO_NAME [Op np] +#endif where literal (LitLabel fs _) = litlabel fs ===================================== compiler/GHC/ByteCode/Instr.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -funbox-strict-fields #-} @@ -27,6 +27,10 @@ import GHC.Runtime.Heap.Layout ( StgWord ) import Data.Int import Data.Word +#if MIN_VERSION_rts(1,0,3) +import Data.ByteString (ByteString) +#endif + import GHC.Stack.CCS (CostCentre) import GHC.Stg.Syntax @@ -229,6 +233,22 @@ data BCInstr !Word16 -- breakpoint info index (RemotePtr CostCentre) +#if MIN_VERSION_rts(1,0,3) + -- | A "meta"-instruction for recording the name of a BCO for debugging purposes. + -- These are ignored by the interpreter but helpfully printed by the disassmbler. + | BCO_NAME !ByteString +#endif + + +{- Note [BCO_NAME] + ~~~~~~~~~~~~~~~ + The BCO_NAME instruction is a debugging-aid enabled with the -fadd-bco-name flag. + When enabled the bytecode assembler will prepend a BCO_NAME instruction to every + generated bytecode object capturing the STG name of the binding the BCO implements. + This is then printed by the bytecode disassembler, allowing bytecode objects to be + readily correlated with their STG and Core source. + -} + -- ----------------------------------------------------------------------------- -- Printing bytecode instructions @@ -383,6 +403,9 @@ instance Outputable BCInstr where <+> text "" <+> ppr tickx <+> text "" <+> ppr infox <+> text "" +#if MIN_VERSION_rts(1,0,3) + ppr (BCO_NAME nm) = text "BCO_NAME" <+> text (show nm) +#endif @@ -487,3 +510,6 @@ bciStackUse SLIDE{} = 0 bciStackUse MKAP{} = 0 bciStackUse MKPAP{} = 0 bciStackUse PACK{} = 1 -- worst case is PACK 0 words +#if MIN_VERSION_rts(1,0,3) +bciStackUse BCO_NAME{} = 0 +#endif ===================================== compiler/GHC/Cmm/ThreadSanitizer.hs ===================================== @@ -209,8 +209,9 @@ tsanTarget fn formals args = tsanStore :: Env -> CmmType -> CmmExpr -> Block CmmNode O O -tsanStore env ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanStore env ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) @@ -219,8 +220,9 @@ tsanStore env ty addr = tsanLoad :: Env -> AlignmentSpec -> CmmType -> CmmExpr -> Block CmmNode O O -tsanLoad env align ty addr = - mkUnsafeCall env ftarget [] [addr] +tsanLoad env align ty addr + | typeWidth ty < W128 = mkUnsafeCall env ftarget [] [addr] + | otherwise = emptyBlock where ftarget = tsanTarget fn [] [AddrHint] w = widthInBytes (typeWidth ty) ===================================== compiler/GHC/Driver/Flags.hs ===================================== @@ -581,6 +581,7 @@ data GeneralFlag | Opt_DoAsmLinting | Opt_DoAnnotationLinting | Opt_DoBoundsChecking + | Opt_AddBcoName | Opt_NoLlvmMangler -- hidden flag | Opt_FastLlvm -- hidden flag | Opt_NoTypeableBinds ===================================== compiler/GHC/Driver/Session.hs ===================================== @@ -2540,6 +2540,7 @@ fFlagsDeps = [ flagSpec "catch-nonexhaustive-cases" Opt_CatchNonexhaustiveCases, flagSpec "alignment-sanitisation" Opt_AlignmentSanitisation, flagSpec "check-prim-bounds" Opt_DoBoundsChecking, + flagSpec "add-bco-name" Opt_AddBcoName, flagSpec "num-constant-folding" Opt_NumConstantFolding, flagSpec "core-constant-folding" Opt_CoreConstantFolding, flagSpec "fast-pap-calls" Opt_FastPAPCalls, ===================================== compiler/GHC/StgToByteCode.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} @@ -81,6 +81,9 @@ import GHC.Unit.Home.ModInfo (lookupHpt) import Data.Array import Data.Coerce (coerce) import Data.ByteString (ByteString) +#if MIN_VERSION_rts(1,0,3) +import qualified Data.ByteString.Char8 as BS +#endif import Data.Map (Map) import Data.IntMap (IntMap) import qualified Data.Map as Map @@ -236,7 +239,10 @@ ppBCEnv p -- Create a BCO and do a spot of peephole optimisation on the insns -- at the same time. mkProtoBCO - :: Platform + :: (Outputable name) + => Platform + -> Bool -- ^ True <=> label with @BCO_NAME@ instruction + -- see Note [BCO_NAME] -> name -> BCInstrList -> Either [CgStgAlt] (CgStgRhs) @@ -247,10 +253,10 @@ mkProtoBCO -> Bool -- ^ True <=> is a return point, rather than a function -> [FFIInfo] -> ProtoBCO name -mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis +mkProtoBCO platform _add_bco_name nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis = ProtoBCO { protoBCOName = nm, - protoBCOInstrs = maybe_with_stack_check, + protoBCOInstrs = maybe_add_bco_name $ maybe_add_stack_check peep_d, protoBCOBitmap = bitmap, protoBCOBitmapSize = fromIntegral bitmap_size, protoBCOArity = arity, @@ -258,6 +264,14 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi protoBCOFFIs = ffis } where +#if MIN_VERSION_rts(1,0,3) + maybe_add_bco_name instrs + | _add_bco_name = BCO_NAME str : instrs + where + str = BS.pack $ showSDocOneLine defaultSDocContext (ppr nm) +#endif + maybe_add_bco_name instrs = instrs + -- Overestimate the stack usage (in words) of this BCO, -- and if >= iNTERP_STACK_CHECK_THRESH, add an explicit -- stack check. (The interpreter always does a stack check @@ -265,17 +279,17 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi -- BCO anyway, so we only need to add an explicit one in the -- (hopefully rare) cases when the (overestimated) stack use -- exceeds iNTERP_STACK_CHECK_THRESH. - maybe_with_stack_check - | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = peep_d + maybe_add_stack_check instrs + | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = instrs -- don't do stack checks at return points, -- everything is aggregated up to the top BCO -- (which must be a function). -- That is, unless the stack usage is >= AP_STACK_SPLIM, -- see bug #1466. | stack_usage >= fromIntegral iNTERP_STACK_CHECK_THRESH - = STKCHECK stack_usage : peep_d + = STKCHECK stack_usage : instrs | otherwise - = peep_d -- the supposedly common case + = instrs -- the supposedly common case -- We assume that this sum doesn't wrap stack_usage = sum (map bciStackUse peep_d) @@ -308,6 +322,7 @@ schemeTopBind (id, rhs) | Just data_con <- isDataConWorkId_maybe id, isNullaryRepDataCon data_con = do platform <- profilePlatform <$> getProfile + add_bco_name <- shouldAddBcoName -- Special case for the worker of a nullary data con. -- It'll look like this: Nil = /\a -> Nil a -- If we feed it into schemeR, we'll get @@ -316,7 +331,8 @@ schemeTopBind (id, rhs) -- by just re-using the single top-level definition. So -- for the worker itself, we must allocate it directly. -- ioToBc (putStrLn $ "top level BCO") - emitBc (mkProtoBCO platform (getName id) (toOL [PACK data_con 0, RETURN P]) + emitBc (mkProtoBCO platform add_bco_name + (getName id) (toOL [PACK data_con 0, RETURN P]) (Right rhs) 0 0 [{-no bitmap-}] False{-not alts-}) | otherwise @@ -358,6 +374,7 @@ schemeR_wrk -> BcM (ProtoBCO Name) schemeR_wrk fvs nm original_body (args, body) = do + add_bco_name <- shouldAddBcoName profile <- getProfile let platform = profilePlatform profile @@ -379,7 +396,7 @@ schemeR_wrk fvs nm original_body (args, body) bitmap = mkBitmap platform bits body_code <- schemeER_wrk sum_szsb_args p_init body - emitBc (mkProtoBCO platform nm body_code (Right original_body) + emitBc (mkProtoBCO platform add_bco_name nm body_code (Right original_body) arity bitmap_size bitmap False{-not alts-}) -- | Introduce break instructions for ticked expressions. @@ -1069,9 +1086,10 @@ doCase d s p scrut bndr alts | ubx_tuple_frame = SLIDE 0 2 `consOL` alt_final0 | otherwise = alt_final0 + add_bco_name <- shouldAddBcoName let alt_bco_name = getName bndr - alt_bco = mkProtoBCO platform alt_bco_name alt_final (Left alts) + alt_bco = mkProtoBCO platform add_bco_name alt_bco_name alt_final (Left alts) 0{-no arity-} bitmap_size bitmap True{-is alts-} scrut_code <- schemeE (d + ret_frame_size_b + save_ccs_size_b) (d + ret_frame_size_b + save_ccs_size_b) @@ -1379,7 +1397,7 @@ Note [unboxed tuple bytecodes and tuple_BCO] tupleBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name tupleBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -1398,9 +1416,9 @@ tupleBCO platform args_info args = body_code = mkSlideW 0 1 -- pop frame header `snocOL` RETURN_TUPLE -- and add it again -primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name +primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name primCallBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -2337,6 +2355,9 @@ getHscEnv = BcM $ \st -> return (st, bcm_hsc_env st) getProfile :: BcM Profile getProfile = targetProfile <$> getDynFlags +shouldAddBcoName :: BcM Bool +shouldAddBcoName = gopt Opt_AddBcoName <$> getDynFlags + emitBc :: ([FFIInfo] -> ProtoBCO Name) -> BcM (ProtoBCO Name) emitBc bco = BcM $ \st -> return (st{ffis=[]}, bco (ffis st)) ===================================== compiler/GHC/Unit/Info.hs ===================================== @@ -236,7 +236,7 @@ unitHsLibs namever ways0 p = map (mkDynName . addSuffix . ST.unpack) (unitLibrar -- This change elevates the need to add custom hooks -- and handling specifically for the `rts` package. addSuffix rts@"HSrts" = rts ++ (expandTag rts_tag) - addSuffix rts@"HSrts-1.0.2" = rts ++ (expandTag rts_tag) + addSuffix rts@"HSrts-1.0.3" = rts ++ (expandTag rts_tag) addSuffix other_lib = other_lib ++ (expandTag tag) expandTag t | null t = "" ===================================== compiler/ghc.cabal.in ===================================== @@ -130,6 +130,7 @@ Library exceptions == 0.10.*, semaphore-compat, stm, + rts, ghc-boot == @ProjectVersionMunged@, ghc-heap == @ProjectVersionMunged@, ghci == @ProjectVersionMunged@ ===================================== docs/users_guide/debugging.rst ===================================== @@ -1240,8 +1240,7 @@ Other :type: dynamic :since: 9.8.1 - - default: enabled + :default: enabled At the moment, ghci disables optimizations, because not all passes are compatible with the interpreter. @@ -1254,3 +1253,16 @@ Other expressions. Those cannot be stored in breakpoints, so any free variable that refers to optimized code will not be inspectable when this flag is enabled. + +.. ghc-flag:: -fadd-bco-name + :shortdesc: Add ``BCO_NAME`` instructions in generated bytecode. + :reverse: -fno-add-bco-name + :type: dynamic + + :since: 9.14.1 + + Prefix every generated bytecode object with a ``BCO_NAME`` instruction + containing the STG name of the binding from which the BCO originated. + These are printed by the bytecode disassembler, aiding in correlating + bytecode with STG. + ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -153,6 +153,14 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. changed while the program is running by calling ``Control.Concurrent.setNumCapabilities``. + +.. note:: + + The maximum number of capabilities supported by the GHC runtime system is + determined when at RTS startup to be either 256, the value given by + :rts-flag:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. + The following options affect the way the runtime schedules threads on CPUs: ===================================== hadrian/src/Rules/Documentation.hs ===================================== @@ -326,11 +326,27 @@ getPkgDocTarget root path = -- | Build all PDF documentation buildPdfDocumentation :: Rules () -buildPdfDocumentation = mapM_ buildSphinxPdf docPaths +buildPdfDocumentation = do + -- Note [Avoiding mktexfmt race] + -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + -- We must ensure that the *first* xelatex invocation in the + -- build is performed serially (that is, not concurrently with + -- any other xelatex invocations) as mktexfmt does not handle + -- racing `mkdir` calls gracefully. However, we assume that + -- subsequent invocations are safe to run concurrently since the + -- initial call will have created the requisite directories (namely + -- $HOME/.texlive2020/texmf-var/web2c). + -- + -- Fixes #25564. + let maxConcurrentReaders = 1000 + xelatexMutex <- newResource "xelatex-mutex" maxConcurrentReaders + let rs = [(xelatexMutex, 1)] + + mapM_ (buildSphinxPdf rs) docPaths -- | Compile a Sphinx ReStructured Text package to LaTeX -buildSphinxPdf :: FilePath -> Rules () -buildSphinxPdf path = do +buildSphinxPdf :: [(Resource, Int)] -> FilePath -> Rules () +buildSphinxPdf rs path = do root <- buildRootRules root -/- pdfRoot -/- path <.> "pdf" %> \file -> do @@ -344,7 +360,8 @@ buildSphinxPdf path = do checkSphinxWarnings dir -- LaTeX "fixed point" - build $ target docContext Xelatex [path <.> "tex"] [dir] + -- See Note [Avoiding mktexfmt race] above. + buildWithResources rs $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Xelatex [path <.> "tex"] [dir] build $ target docContext Makeindex [path <.> "idx"] [dir] ===================================== hadrian/src/Rules/Rts.hs ===================================== @@ -165,7 +165,7 @@ needRtsSymLinks stage rtsWays prefix, versionlessPrefix :: String versionlessPrefix = "libHSrts" -prefix = versionlessPrefix ++ "-1.0.2" +prefix = versionlessPrefix ++ "-1.0.3" -- removeRtsDummyVersion "a/libHSrts-1.0-ghc1.2.3.4.so" -- == "a/libHSrts-ghc1.2.3.4.so" ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -394,13 +393,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== libraries/ghc-internal/src/GHC/Internal/List.hs ===================================== @@ -1643,6 +1643,8 @@ xs !! n -- -- WARNING: This function takes linear time in the index. -- +-- @since base-4.19.0.0 +-- -- ==== __Examples__ -- -- >>> ['a', 'b', 'c'] !? 0 ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +uint32_t max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -344,8 +349,6 @@ initCapability (Capability *cap, uint32_t i) * ------------------------------------------------------------------------- */ void initCapabilities (void) { - uint32_t i; - /* Declare a couple capability sets representing the process and clock domain. Each capability will get added to these capsets. */ traceCapsetCreate(CAPSET_OSPROCESS_DEFAULT, CapsetTypeOsProcess); @@ -354,7 +357,7 @@ void initCapabilities (void) // Initialise NUMA if (!RtsFlags.GcFlags.numa) { n_numa_nodes = 1; - for (i = 0; i < MAX_NUMA_NODES; i++) { + for (uint32_t i = 0; i < MAX_NUMA_NODES; i++) { numa_map[i] = 0; } } else if (RtsFlags.DebugFlags.numa) { @@ -388,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + uint32_t core_count = getNumberOfProcessors(); + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; @@ -401,6 +422,7 @@ void initCapabilities (void) #else /* !THREADED_RTS */ n_capabilities = 1; + capabilities = stgMallocBytes(sizeof(Capability), "initCapabilities"); capabilities[0] = &MainCapability; initCapability(&MainCapability, 0); @@ -412,7 +434,7 @@ void initCapabilities (void) // There are no free capabilities to begin with. We will start // a worker Task to each Capability, which will quickly put the // Capability on the free list when it finds nothing to do. - for (i = 0; i < n_numa_nodes; i++) { + for (uint32_t i = 0; i < n_numa_nodes; i++) { last_free_capability[i] = getCapability(0); } } ===================================== rts/Capability.h ===================================== @@ -270,11 +270,13 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { ===================================== rts/CheckUnload.c ===================================== @@ -467,48 +467,44 @@ bool prepareUnloadCheck(void) void checkUnload(void) { - if (global_s_indices == NULL) { - return; - } else if (!safeToUnload()) { - return; - } - // At this point we've marked all dynamically loaded static objects // (including their dependencies) during GC, but not the root set of object // code (loaded_objects). Mark the roots first, then unload any unmarked // objects. - OCSectionIndices *s_indices = global_s_indices; - ASSERT(s_indices->sorted); + if (global_s_indices != NULL && safeToUnload()) { + OCSectionIndices *s_indices = global_s_indices; + ASSERT(s_indices->sorted); - // Mark roots - for (ObjectCode *oc = loaded_objects; oc != NULL; oc = oc->next_loaded_object) { - markObjectLive(NULL, (W_)oc, NULL); - } + // Mark roots + for (ObjectCode *oc = loaded_objects; oc != NULL; oc = oc->next_loaded_object) { + markObjectLive(NULL, (W_)oc, NULL); + } - // Free unmarked objects - ObjectCode *next = NULL; - for (ObjectCode *oc = old_objects; oc != NULL; oc = next) { - next = oc->next; - ASSERT(oc->status == OBJECT_UNLOADED); - - // Symbols should be removed by unloadObj_. - // NB (osa): If this assertion doesn't hold then freeObjectCode below - // will corrupt symhash as keys of that table live in ObjectCodes. If - // you see a segfault in a hash table operation in linker (in non-debug - // RTS) then it's probably because this assertion did not hold. - ASSERT(oc->symbols == NULL); - - if (oc->unloadable) { - removeOCSectionIndices(s_indices, oc); - freeObjectCode(oc); - n_unloaded_objects -= 1; - } else { - // If we don't have enough information to - // accurately determine the reachability of - // the object then hold onto it. - oc->next = objects; - objects = oc; + // Free unmarked objects + ObjectCode *next = NULL; + for (ObjectCode *oc = old_objects; oc != NULL; oc = next) { + next = oc->next; + ASSERT(oc->status == OBJECT_UNLOADED); + + // Symbols should be removed by unloadObj_. + // NB (osa): If this assertion doesn't hold then freeObjectCode below + // will corrupt symhash as keys of that table live in ObjectCodes. If + // you see a segfault in a hash table operation in linker (in non-debug + // RTS) then it's probably because this assertion did not hold. + ASSERT(oc->symbols == NULL); + + if (oc->unloadable) { + removeOCSectionIndices(s_indices, oc); + freeObjectCode(oc); + n_unloaded_objects -= 1; + } else { + // If we don't have enough information to + // accurately determine the reachability of + // the object then hold onto it. + oc->next = objects; + objects = oc; + } } } ===================================== rts/Disassembler.c ===================================== @@ -452,6 +452,13 @@ disInstr ( StgBCO *bco, int pc ) debugBelch("RETURN_T\n "); break; + case bci_BCO_NAME: { + const char *name = (const char*) literals[instrs[pc]]; + debugBelch("BCO_NAME \"%s\"\n ", name); + pc += 1; + break; + } + default: barf("disInstr: unknown opcode %u", (unsigned int) instr); } @@ -464,10 +471,9 @@ void disassemble( StgBCO *bco ) StgWord16* instrs = (StgWord16*)(bco->instrs->payload); StgMutArrPtrs* ptrs = bco->ptrs; uint32_t nbcs = (uint32_t)(bco->instrs->bytes / sizeof(StgWord16)); - uint32_t pc = 1; + uint32_t pc = 0; debugBelch("BCO\n" ); - pc = 0; while (pc < nbcs) { debugBelch("\t%2d: ", pc ); pc = disInstr ( bco, pc ); ===================================== rts/Interpreter.c ===================================== @@ -2085,6 +2085,10 @@ run_BCO: goto do_return_nonpointer; } + case bci_BCO_NAME: + bciPtr++; + goto nextInsn; + case bci_SWIZZLE: { W_ stkoff = BCO_GET_LARGE_ARG; StgInt n = BCO_GET_LARGE_ARG; ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,12 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count %" PRIu32 "; clamping...\n", max_n_capabilities); + new_n_capabilities = max_n_capabilities; } - debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", enabled_capabilities, new_n_capabilities); ===================================== rts/include/rts/Bytecodes.h ===================================== @@ -112,6 +112,8 @@ #define bci_PRIMCALL 87 +#define bci_BCO_NAME 88 + /* If you need to go past 255 then you will run into the flags */ /* If you need to go below 0x0100 then you will run into the instructions */ ===================================== rts/include/rts/Config.h ===================================== @@ -78,6 +78,10 @@ code. #endif #if defined(THREADED_RTS) +/* + * See Note [Capabilities array sizing] in rts/Capability.c. + * Update the note in docs/users_guide/using-concurrent.rst when updating this. + */ #define MAX_N_CAPABILITIES 256 #else #define MAX_N_CAPABILITIES 1 ===================================== rts/include/rts/Threads.h ===================================== @@ -69,7 +69,7 @@ HsBool rtsSupportsBoundThreads (void); // The number of Capabilities. // TODO: Ideally we would only provide getNumCapabilities // but this is used in compiler/cbits/genSym.c -extern unsigned int n_capabilities; +extern uint32_t n_capabilities; INLINE_HEADER unsigned int getNumCapabilities(void) { return RELAXED_LOAD(&n_capabilities); } @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern uint32_t max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== rts/rts.cabal ===================================== @@ -1,6 +1,6 @@ cabal-version: 3.0 name: rts -version: 1.0.2 +version: 1.0.3 synopsis: The GHC runtime system description: The GHC runtime system. ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [normal, ignore_stderr], compile_and_run, ['']) ===================================== testsuite/tests/th/T10279.hs ===================================== @@ -7,4 +7,4 @@ import Language.Haskell.TH.Syntax -- error message doesn't recognize it as a source package ID, -- (This is OK, since it will look obviously wrong when they -- try to find the package in their package database.) -blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) +blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) ===================================== testsuite/tests/th/T10279.stderr ===================================== @@ -1,11 +1,11 @@ T10279.hs:10:9: error: [GHC-51294] • Failed to load interface for ‘A’. - no unit id matching ‘rts-1.0.2’ was found + no unit id matching ‘rts-1.0.3’ was found (This unit ID looks like the source package ID; the real unit ID is ‘rts’) • In the untyped splice: $(conE (Name (mkOccName "Foo") - (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) + (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/15b659acccd1321946cd2ead3c7b839f4fa06813...e129a40bd4c4c391040fb16d53bddd00ff280a11 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/15b659acccd1321946cd2ead3c7b839f4fa06813...e129a40bd4c4c391040fb16d53bddd00ff280a11 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 06:08:19 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 11 Dec 2024 01:08:19 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 2 commits: rts: Annotate BCOs with their Name Message-ID: <67592c5383a3a_222b5deeeee029293@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 3ad97f19 by Ben Gamari at 2024-12-11T01:08:03-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 10673bf0 by Ben Gamari at 2024-12-11T01:08:04-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 16 changed files: - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/StgToByteCode.hs - compiler/GHC/Unit/Info.hs - compiler/ghc.cabal.in - docs/users_guide/debugging.rst - hadrian/src/Rules/Rts.hs - m4/find_ld.m4 - rts/Disassembler.c - rts/Interpreter.c - rts/include/rts/Bytecodes.h - rts/rts.cabal - testsuite/tests/th/T10279.hs - testsuite/tests/th/T10279.stderr Changes: ===================================== compiler/GHC/ByteCode/Asm.hs ===================================== @@ -106,7 +106,7 @@ assembleBCOs interp profile proto_bcos tycons top_strs modbreaks spt_entries = d bcos' <- mallocStrings interp bcos return CompiledByteCode { bc_bcos = bcos' - , bc_itbls = itblenv + , bc_itbls = itblenv , bc_ffis = concatMap protoBCOFFIs proto_bcos , bc_strs = top_strs , bc_breaks = modbreaks @@ -178,11 +178,12 @@ assembleOneBCO interp profile pbco = do return ubco' assembleBCO :: Platform -> ProtoBCO Name -> IO UnlinkedBCO -assembleBCO platform (ProtoBCO { protoBCOName = nm - , protoBCOInstrs = instrs - , protoBCOBitmap = bitmap - , protoBCOBitmapSize = bsize - , protoBCOArity = arity }) = do +assembleBCO platform + (ProtoBCO { protoBCOName = nm + , protoBCOInstrs = instrs + , protoBCOBitmap = bitmap + , protoBCOBitmapSize = bsize + , protoBCOArity = arity }) = do -- pass 1: collect up the offsets of the local labels. let asm = mapM_ (assembleI platform) instrs @@ -527,6 +528,10 @@ assembleI platform i = case i of , SmallOp tickx, SmallOp infox , Op np ] +#if MIN_VERSION_rts(1,0,3) + BCO_NAME name -> do np <- lit [BCONPtrStr name] + emit bci_BCO_NAME [Op np] +#endif where literal (LitLabel fs _) = litlabel fs ===================================== compiler/GHC/ByteCode/Instr.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -funbox-strict-fields #-} @@ -27,6 +27,10 @@ import GHC.Runtime.Heap.Layout ( StgWord ) import Data.Int import Data.Word +#if MIN_VERSION_rts(1,0,3) +import Data.ByteString (ByteString) +#endif + import GHC.Stack.CCS (CostCentre) import GHC.Stg.Syntax @@ -229,6 +233,22 @@ data BCInstr !Word16 -- breakpoint info index (RemotePtr CostCentre) +#if MIN_VERSION_rts(1,0,3) + -- | A "meta"-instruction for recording the name of a BCO for debugging purposes. + -- These are ignored by the interpreter but helpfully printed by the disassmbler. + | BCO_NAME !ByteString +#endif + + +{- Note [BCO_NAME] + ~~~~~~~~~~~~~~~ + The BCO_NAME instruction is a debugging-aid enabled with the -fadd-bco-name flag. + When enabled the bytecode assembler will prepend a BCO_NAME instruction to every + generated bytecode object capturing the STG name of the binding the BCO implements. + This is then printed by the bytecode disassembler, allowing bytecode objects to be + readily correlated with their STG and Core source. + -} + -- ----------------------------------------------------------------------------- -- Printing bytecode instructions @@ -383,6 +403,9 @@ instance Outputable BCInstr where <+> text "" <+> ppr tickx <+> text "" <+> ppr infox <+> text "" +#if MIN_VERSION_rts(1,0,3) + ppr (BCO_NAME nm) = text "BCO_NAME" <+> text (show nm) +#endif @@ -487,3 +510,6 @@ bciStackUse SLIDE{} = 0 bciStackUse MKAP{} = 0 bciStackUse MKPAP{} = 0 bciStackUse PACK{} = 1 -- worst case is PACK 0 words +#if MIN_VERSION_rts(1,0,3) +bciStackUse BCO_NAME{} = 0 +#endif ===================================== compiler/GHC/Driver/Flags.hs ===================================== @@ -581,6 +581,7 @@ data GeneralFlag | Opt_DoAsmLinting | Opt_DoAnnotationLinting | Opt_DoBoundsChecking + | Opt_AddBcoName | Opt_NoLlvmMangler -- hidden flag | Opt_FastLlvm -- hidden flag | Opt_NoTypeableBinds ===================================== compiler/GHC/Driver/Session.hs ===================================== @@ -2540,6 +2540,7 @@ fFlagsDeps = [ flagSpec "catch-nonexhaustive-cases" Opt_CatchNonexhaustiveCases, flagSpec "alignment-sanitisation" Opt_AlignmentSanitisation, flagSpec "check-prim-bounds" Opt_DoBoundsChecking, + flagSpec "add-bco-name" Opt_AddBcoName, flagSpec "num-constant-folding" Opt_NumConstantFolding, flagSpec "core-constant-folding" Opt_CoreConstantFolding, flagSpec "fast-pap-calls" Opt_FastPAPCalls, ===================================== compiler/GHC/StgToByteCode.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} @@ -81,6 +81,9 @@ import GHC.Unit.Home.ModInfo (lookupHpt) import Data.Array import Data.Coerce (coerce) import Data.ByteString (ByteString) +#if MIN_VERSION_rts(1,0,3) +import qualified Data.ByteString.Char8 as BS +#endif import Data.Map (Map) import Data.IntMap (IntMap) import qualified Data.Map as Map @@ -236,7 +239,10 @@ ppBCEnv p -- Create a BCO and do a spot of peephole optimisation on the insns -- at the same time. mkProtoBCO - :: Platform + :: (Outputable name) + => Platform + -> Bool -- ^ True <=> label with @BCO_NAME@ instruction + -- see Note [BCO_NAME] -> name -> BCInstrList -> Either [CgStgAlt] (CgStgRhs) @@ -247,10 +253,10 @@ mkProtoBCO -> Bool -- ^ True <=> is a return point, rather than a function -> [FFIInfo] -> ProtoBCO name -mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis +mkProtoBCO platform _add_bco_name nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis = ProtoBCO { protoBCOName = nm, - protoBCOInstrs = maybe_with_stack_check, + protoBCOInstrs = maybe_add_bco_name $ maybe_add_stack_check peep_d, protoBCOBitmap = bitmap, protoBCOBitmapSize = fromIntegral bitmap_size, protoBCOArity = arity, @@ -258,6 +264,14 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi protoBCOFFIs = ffis } where +#if MIN_VERSION_rts(1,0,3) + maybe_add_bco_name instrs + | _add_bco_name = BCO_NAME str : instrs + where + str = BS.pack $ showSDocOneLine defaultSDocContext (ppr nm) +#endif + maybe_add_bco_name instrs = instrs + -- Overestimate the stack usage (in words) of this BCO, -- and if >= iNTERP_STACK_CHECK_THRESH, add an explicit -- stack check. (The interpreter always does a stack check @@ -265,17 +279,17 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi -- BCO anyway, so we only need to add an explicit one in the -- (hopefully rare) cases when the (overestimated) stack use -- exceeds iNTERP_STACK_CHECK_THRESH. - maybe_with_stack_check - | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = peep_d + maybe_add_stack_check instrs + | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = instrs -- don't do stack checks at return points, -- everything is aggregated up to the top BCO -- (which must be a function). -- That is, unless the stack usage is >= AP_STACK_SPLIM, -- see bug #1466. | stack_usage >= fromIntegral iNTERP_STACK_CHECK_THRESH - = STKCHECK stack_usage : peep_d + = STKCHECK stack_usage : instrs | otherwise - = peep_d -- the supposedly common case + = instrs -- the supposedly common case -- We assume that this sum doesn't wrap stack_usage = sum (map bciStackUse peep_d) @@ -308,6 +322,7 @@ schemeTopBind (id, rhs) | Just data_con <- isDataConWorkId_maybe id, isNullaryRepDataCon data_con = do platform <- profilePlatform <$> getProfile + add_bco_name <- shouldAddBcoName -- Special case for the worker of a nullary data con. -- It'll look like this: Nil = /\a -> Nil a -- If we feed it into schemeR, we'll get @@ -316,7 +331,8 @@ schemeTopBind (id, rhs) -- by just re-using the single top-level definition. So -- for the worker itself, we must allocate it directly. -- ioToBc (putStrLn $ "top level BCO") - emitBc (mkProtoBCO platform (getName id) (toOL [PACK data_con 0, RETURN P]) + emitBc (mkProtoBCO platform add_bco_name + (getName id) (toOL [PACK data_con 0, RETURN P]) (Right rhs) 0 0 [{-no bitmap-}] False{-not alts-}) | otherwise @@ -358,6 +374,7 @@ schemeR_wrk -> BcM (ProtoBCO Name) schemeR_wrk fvs nm original_body (args, body) = do + add_bco_name <- shouldAddBcoName profile <- getProfile let platform = profilePlatform profile @@ -379,7 +396,7 @@ schemeR_wrk fvs nm original_body (args, body) bitmap = mkBitmap platform bits body_code <- schemeER_wrk sum_szsb_args p_init body - emitBc (mkProtoBCO platform nm body_code (Right original_body) + emitBc (mkProtoBCO platform add_bco_name nm body_code (Right original_body) arity bitmap_size bitmap False{-not alts-}) -- | Introduce break instructions for ticked expressions. @@ -1069,9 +1086,10 @@ doCase d s p scrut bndr alts | ubx_tuple_frame = SLIDE 0 2 `consOL` alt_final0 | otherwise = alt_final0 + add_bco_name <- shouldAddBcoName let alt_bco_name = getName bndr - alt_bco = mkProtoBCO platform alt_bco_name alt_final (Left alts) + alt_bco = mkProtoBCO platform add_bco_name alt_bco_name alt_final (Left alts) 0{-no arity-} bitmap_size bitmap True{-is alts-} scrut_code <- schemeE (d + ret_frame_size_b + save_ccs_size_b) (d + ret_frame_size_b + save_ccs_size_b) @@ -1379,7 +1397,7 @@ Note [unboxed tuple bytecodes and tuple_BCO] tupleBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name tupleBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -1398,9 +1416,9 @@ tupleBCO platform args_info args = body_code = mkSlideW 0 1 -- pop frame header `snocOL` RETURN_TUPLE -- and add it again -primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name +primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name primCallBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -2337,6 +2355,9 @@ getHscEnv = BcM $ \st -> return (st, bcm_hsc_env st) getProfile :: BcM Profile getProfile = targetProfile <$> getDynFlags +shouldAddBcoName :: BcM Bool +shouldAddBcoName = gopt Opt_AddBcoName <$> getDynFlags + emitBc :: ([FFIInfo] -> ProtoBCO Name) -> BcM (ProtoBCO Name) emitBc bco = BcM $ \st -> return (st{ffis=[]}, bco (ffis st)) ===================================== compiler/GHC/Unit/Info.hs ===================================== @@ -236,7 +236,7 @@ unitHsLibs namever ways0 p = map (mkDynName . addSuffix . ST.unpack) (unitLibrar -- This change elevates the need to add custom hooks -- and handling specifically for the `rts` package. addSuffix rts@"HSrts" = rts ++ (expandTag rts_tag) - addSuffix rts@"HSrts-1.0.2" = rts ++ (expandTag rts_tag) + addSuffix rts@"HSrts-1.0.3" = rts ++ (expandTag rts_tag) addSuffix other_lib = other_lib ++ (expandTag tag) expandTag t | null t = "" ===================================== compiler/ghc.cabal.in ===================================== @@ -130,6 +130,7 @@ Library exceptions == 0.10.*, semaphore-compat, stm, + rts, ghc-boot == @ProjectVersionMunged@, ghc-heap == @ProjectVersionMunged@, ghci == @ProjectVersionMunged@ ===================================== docs/users_guide/debugging.rst ===================================== @@ -1240,8 +1240,7 @@ Other :type: dynamic :since: 9.8.1 - - default: enabled + :default: enabled At the moment, ghci disables optimizations, because not all passes are compatible with the interpreter. @@ -1254,3 +1253,16 @@ Other expressions. Those cannot be stored in breakpoints, so any free variable that refers to optimized code will not be inspectable when this flag is enabled. + +.. ghc-flag:: -fadd-bco-name + :shortdesc: Add ``BCO_NAME`` instructions in generated bytecode. + :reverse: -fno-add-bco-name + :type: dynamic + + :since: 9.14.1 + + Prefix every generated bytecode object with a ``BCO_NAME`` instruction + containing the STG name of the binding from which the BCO originated. + These are printed by the bytecode disassembler, aiding in correlating + bytecode with STG. + ===================================== hadrian/src/Rules/Rts.hs ===================================== @@ -165,7 +165,7 @@ needRtsSymLinks stage rtsWays prefix, versionlessPrefix :: String versionlessPrefix = "libHSrts" -prefix = versionlessPrefix ++ "-1.0.2" +prefix = versionlessPrefix ++ "-1.0.3" -- removeRtsDummyVersion "a/libHSrts-1.0-ghc1.2.3.4.so" -- == "a/libHSrts-ghc1.2.3.4.so" ===================================== m4/find_ld.m4 ===================================== @@ -79,13 +79,16 @@ AC_DEFUN([FIND_LD],[ dnl See #21712. AC_CHECK_TARGET_TOOL([LD], [ld]) ;; - *) + *-linux*|*-mingw32) if test "x$enable_ld_override" = "xyes"; then find_ld else AC_CHECK_TARGET_TOOL([LD], [ld]) fi ;; + *) + AC_CHECK_TARGET_TOOL([LD], [ld]) + ;; esac CHECK_LD_COPY_BUG([$1]) ]) ===================================== rts/Disassembler.c ===================================== @@ -452,6 +452,13 @@ disInstr ( StgBCO *bco, int pc ) debugBelch("RETURN_T\n "); break; + case bci_BCO_NAME: { + const char *name = (const char*) literals[instrs[pc]]; + debugBelch("BCO_NAME \"%s\"\n ", name); + pc += 1; + break; + } + default: barf("disInstr: unknown opcode %u", (unsigned int) instr); } @@ -464,10 +471,9 @@ void disassemble( StgBCO *bco ) StgWord16* instrs = (StgWord16*)(bco->instrs->payload); StgMutArrPtrs* ptrs = bco->ptrs; uint32_t nbcs = (uint32_t)(bco->instrs->bytes / sizeof(StgWord16)); - uint32_t pc = 1; + uint32_t pc = 0; debugBelch("BCO\n" ); - pc = 0; while (pc < nbcs) { debugBelch("\t%2d: ", pc ); pc = disInstr ( bco, pc ); ===================================== rts/Interpreter.c ===================================== @@ -2085,6 +2085,10 @@ run_BCO: goto do_return_nonpointer; } + case bci_BCO_NAME: + bciPtr++; + goto nextInsn; + case bci_SWIZZLE: { W_ stkoff = BCO_GET_LARGE_ARG; StgInt n = BCO_GET_LARGE_ARG; ===================================== rts/include/rts/Bytecodes.h ===================================== @@ -112,6 +112,8 @@ #define bci_PRIMCALL 87 +#define bci_BCO_NAME 88 + /* If you need to go past 255 then you will run into the flags */ /* If you need to go below 0x0100 then you will run into the instructions */ ===================================== rts/rts.cabal ===================================== @@ -1,6 +1,6 @@ cabal-version: 3.0 name: rts -version: 1.0.2 +version: 1.0.3 synopsis: The GHC runtime system description: The GHC runtime system. ===================================== testsuite/tests/th/T10279.hs ===================================== @@ -7,4 +7,4 @@ import Language.Haskell.TH.Syntax -- error message doesn't recognize it as a source package ID, -- (This is OK, since it will look obviously wrong when they -- try to find the package in their package database.) -blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) +blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) ===================================== testsuite/tests/th/T10279.stderr ===================================== @@ -1,11 +1,11 @@ T10279.hs:10:9: error: [GHC-51294] • Failed to load interface for ‘A’. - no unit id matching ‘rts-1.0.2’ was found + no unit id matching ‘rts-1.0.3’ was found (This unit ID looks like the source package ID; the real unit ID is ‘rts’) • In the untyped splice: $(conE (Name (mkOccName "Foo") - (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) + (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/e129a40bd4c4c391040fb16d53bddd00ff280a11...10673bf03b67b241e0c58c4c524a58fb76fb78bb -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/e129a40bd4c4c391040fb16d53bddd00ff280a11...10673bf03b67b241e0c58c4c524a58fb76fb78bb You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 09:28:39 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 11 Dec 2024 04:28:39 -0500 Subject: [Git][ghc/ghc][master] rts: Annotate BCOs with their Name Message-ID: <67595b47a3dab_11bee46e213410758b@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 15 changed files: - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/StgToByteCode.hs - compiler/GHC/Unit/Info.hs - compiler/ghc.cabal.in - docs/users_guide/debugging.rst - hadrian/src/Rules/Rts.hs - rts/Disassembler.c - rts/Interpreter.c - rts/include/rts/Bytecodes.h - rts/rts.cabal - testsuite/tests/th/T10279.hs - testsuite/tests/th/T10279.stderr Changes: ===================================== compiler/GHC/ByteCode/Asm.hs ===================================== @@ -106,7 +106,7 @@ assembleBCOs interp profile proto_bcos tycons top_strs modbreaks spt_entries = d bcos' <- mallocStrings interp bcos return CompiledByteCode { bc_bcos = bcos' - , bc_itbls = itblenv + , bc_itbls = itblenv , bc_ffis = concatMap protoBCOFFIs proto_bcos , bc_strs = top_strs , bc_breaks = modbreaks @@ -178,11 +178,12 @@ assembleOneBCO interp profile pbco = do return ubco' assembleBCO :: Platform -> ProtoBCO Name -> IO UnlinkedBCO -assembleBCO platform (ProtoBCO { protoBCOName = nm - , protoBCOInstrs = instrs - , protoBCOBitmap = bitmap - , protoBCOBitmapSize = bsize - , protoBCOArity = arity }) = do +assembleBCO platform + (ProtoBCO { protoBCOName = nm + , protoBCOInstrs = instrs + , protoBCOBitmap = bitmap + , protoBCOBitmapSize = bsize + , protoBCOArity = arity }) = do -- pass 1: collect up the offsets of the local labels. let asm = mapM_ (assembleI platform) instrs @@ -527,6 +528,10 @@ assembleI platform i = case i of , SmallOp tickx, SmallOp infox , Op np ] +#if MIN_VERSION_rts(1,0,3) + BCO_NAME name -> do np <- lit [BCONPtrStr name] + emit bci_BCO_NAME [Op np] +#endif where literal (LitLabel fs _) = litlabel fs ===================================== compiler/GHC/ByteCode/Instr.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -funbox-strict-fields #-} @@ -27,6 +27,10 @@ import GHC.Runtime.Heap.Layout ( StgWord ) import Data.Int import Data.Word +#if MIN_VERSION_rts(1,0,3) +import Data.ByteString (ByteString) +#endif + import GHC.Stack.CCS (CostCentre) import GHC.Stg.Syntax @@ -229,6 +233,22 @@ data BCInstr !Word16 -- breakpoint info index (RemotePtr CostCentre) +#if MIN_VERSION_rts(1,0,3) + -- | A "meta"-instruction for recording the name of a BCO for debugging purposes. + -- These are ignored by the interpreter but helpfully printed by the disassmbler. + | BCO_NAME !ByteString +#endif + + +{- Note [BCO_NAME] + ~~~~~~~~~~~~~~~ + The BCO_NAME instruction is a debugging-aid enabled with the -fadd-bco-name flag. + When enabled the bytecode assembler will prepend a BCO_NAME instruction to every + generated bytecode object capturing the STG name of the binding the BCO implements. + This is then printed by the bytecode disassembler, allowing bytecode objects to be + readily correlated with their STG and Core source. + -} + -- ----------------------------------------------------------------------------- -- Printing bytecode instructions @@ -383,6 +403,9 @@ instance Outputable BCInstr where <+> text "" <+> ppr tickx <+> text "" <+> ppr infox <+> text "" +#if MIN_VERSION_rts(1,0,3) + ppr (BCO_NAME nm) = text "BCO_NAME" <+> text (show nm) +#endif @@ -487,3 +510,6 @@ bciStackUse SLIDE{} = 0 bciStackUse MKAP{} = 0 bciStackUse MKPAP{} = 0 bciStackUse PACK{} = 1 -- worst case is PACK 0 words +#if MIN_VERSION_rts(1,0,3) +bciStackUse BCO_NAME{} = 0 +#endif ===================================== compiler/GHC/Driver/Flags.hs ===================================== @@ -581,6 +581,7 @@ data GeneralFlag | Opt_DoAsmLinting | Opt_DoAnnotationLinting | Opt_DoBoundsChecking + | Opt_AddBcoName | Opt_NoLlvmMangler -- hidden flag | Opt_FastLlvm -- hidden flag | Opt_NoTypeableBinds ===================================== compiler/GHC/Driver/Session.hs ===================================== @@ -2540,6 +2540,7 @@ fFlagsDeps = [ flagSpec "catch-nonexhaustive-cases" Opt_CatchNonexhaustiveCases, flagSpec "alignment-sanitisation" Opt_AlignmentSanitisation, flagSpec "check-prim-bounds" Opt_DoBoundsChecking, + flagSpec "add-bco-name" Opt_AddBcoName, flagSpec "num-constant-folding" Opt_NumConstantFolding, flagSpec "core-constant-folding" Opt_CoreConstantFolding, flagSpec "fast-pap-calls" Opt_FastPAPCalls, ===================================== compiler/GHC/StgToByteCode.hs ===================================== @@ -1,4 +1,4 @@ - +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} @@ -81,6 +81,9 @@ import GHC.Unit.Home.ModInfo (lookupHpt) import Data.Array import Data.Coerce (coerce) import Data.ByteString (ByteString) +#if MIN_VERSION_rts(1,0,3) +import qualified Data.ByteString.Char8 as BS +#endif import Data.Map (Map) import Data.IntMap (IntMap) import qualified Data.Map as Map @@ -236,7 +239,10 @@ ppBCEnv p -- Create a BCO and do a spot of peephole optimisation on the insns -- at the same time. mkProtoBCO - :: Platform + :: (Outputable name) + => Platform + -> Bool -- ^ True <=> label with @BCO_NAME@ instruction + -- see Note [BCO_NAME] -> name -> BCInstrList -> Either [CgStgAlt] (CgStgRhs) @@ -247,10 +253,10 @@ mkProtoBCO -> Bool -- ^ True <=> is a return point, rather than a function -> [FFIInfo] -> ProtoBCO name -mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis +mkProtoBCO platform _add_bco_name nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffis = ProtoBCO { protoBCOName = nm, - protoBCOInstrs = maybe_with_stack_check, + protoBCOInstrs = maybe_add_bco_name $ maybe_add_stack_check peep_d, protoBCOBitmap = bitmap, protoBCOBitmapSize = fromIntegral bitmap_size, protoBCOArity = arity, @@ -258,6 +264,14 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi protoBCOFFIs = ffis } where +#if MIN_VERSION_rts(1,0,3) + maybe_add_bco_name instrs + | _add_bco_name = BCO_NAME str : instrs + where + str = BS.pack $ showSDocOneLine defaultSDocContext (ppr nm) +#endif + maybe_add_bco_name instrs = instrs + -- Overestimate the stack usage (in words) of this BCO, -- and if >= iNTERP_STACK_CHECK_THRESH, add an explicit -- stack check. (The interpreter always does a stack check @@ -265,17 +279,17 @@ mkProtoBCO platform nm instrs_ordlist origin arity bitmap_size bitmap is_ret ffi -- BCO anyway, so we only need to add an explicit one in the -- (hopefully rare) cases when the (overestimated) stack use -- exceeds iNTERP_STACK_CHECK_THRESH. - maybe_with_stack_check - | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = peep_d + maybe_add_stack_check instrs + | is_ret && stack_usage < fromIntegral (pc_AP_STACK_SPLIM (platformConstants platform)) = instrs -- don't do stack checks at return points, -- everything is aggregated up to the top BCO -- (which must be a function). -- That is, unless the stack usage is >= AP_STACK_SPLIM, -- see bug #1466. | stack_usage >= fromIntegral iNTERP_STACK_CHECK_THRESH - = STKCHECK stack_usage : peep_d + = STKCHECK stack_usage : instrs | otherwise - = peep_d -- the supposedly common case + = instrs -- the supposedly common case -- We assume that this sum doesn't wrap stack_usage = sum (map bciStackUse peep_d) @@ -308,6 +322,7 @@ schemeTopBind (id, rhs) | Just data_con <- isDataConWorkId_maybe id, isNullaryRepDataCon data_con = do platform <- profilePlatform <$> getProfile + add_bco_name <- shouldAddBcoName -- Special case for the worker of a nullary data con. -- It'll look like this: Nil = /\a -> Nil a -- If we feed it into schemeR, we'll get @@ -316,7 +331,8 @@ schemeTopBind (id, rhs) -- by just re-using the single top-level definition. So -- for the worker itself, we must allocate it directly. -- ioToBc (putStrLn $ "top level BCO") - emitBc (mkProtoBCO platform (getName id) (toOL [PACK data_con 0, RETURN P]) + emitBc (mkProtoBCO platform add_bco_name + (getName id) (toOL [PACK data_con 0, RETURN P]) (Right rhs) 0 0 [{-no bitmap-}] False{-not alts-}) | otherwise @@ -358,6 +374,7 @@ schemeR_wrk -> BcM (ProtoBCO Name) schemeR_wrk fvs nm original_body (args, body) = do + add_bco_name <- shouldAddBcoName profile <- getProfile let platform = profilePlatform profile @@ -379,7 +396,7 @@ schemeR_wrk fvs nm original_body (args, body) bitmap = mkBitmap platform bits body_code <- schemeER_wrk sum_szsb_args p_init body - emitBc (mkProtoBCO platform nm body_code (Right original_body) + emitBc (mkProtoBCO platform add_bco_name nm body_code (Right original_body) arity bitmap_size bitmap False{-not alts-}) -- | Introduce break instructions for ticked expressions. @@ -1069,9 +1086,10 @@ doCase d s p scrut bndr alts | ubx_tuple_frame = SLIDE 0 2 `consOL` alt_final0 | otherwise = alt_final0 + add_bco_name <- shouldAddBcoName let alt_bco_name = getName bndr - alt_bco = mkProtoBCO platform alt_bco_name alt_final (Left alts) + alt_bco = mkProtoBCO platform add_bco_name alt_bco_name alt_final (Left alts) 0{-no arity-} bitmap_size bitmap True{-is alts-} scrut_code <- schemeE (d + ret_frame_size_b + save_ccs_size_b) (d + ret_frame_size_b + save_ccs_size_b) @@ -1379,7 +1397,7 @@ Note [unboxed tuple bytecodes and tuple_BCO] tupleBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name tupleBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -1398,9 +1416,9 @@ tupleBCO platform args_info args = body_code = mkSlideW 0 1 -- pop frame header `snocOL` RETURN_TUPLE -- and add it again -primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name +primCallBCO :: Platform -> NativeCallInfo -> [(PrimRep, ByteOff)] -> [FFIInfo] -> ProtoBCO Name primCallBCO platform args_info args = - mkProtoBCO platform invented_name body_code (Left []) + mkProtoBCO platform False invented_name body_code (Left []) 0{-no arity-} bitmap_size bitmap False{-is alts-} where {- @@ -2337,6 +2355,9 @@ getHscEnv = BcM $ \st -> return (st, bcm_hsc_env st) getProfile :: BcM Profile getProfile = targetProfile <$> getDynFlags +shouldAddBcoName :: BcM Bool +shouldAddBcoName = gopt Opt_AddBcoName <$> getDynFlags + emitBc :: ([FFIInfo] -> ProtoBCO Name) -> BcM (ProtoBCO Name) emitBc bco = BcM $ \st -> return (st{ffis=[]}, bco (ffis st)) ===================================== compiler/GHC/Unit/Info.hs ===================================== @@ -236,7 +236,7 @@ unitHsLibs namever ways0 p = map (mkDynName . addSuffix . ST.unpack) (unitLibrar -- This change elevates the need to add custom hooks -- and handling specifically for the `rts` package. addSuffix rts@"HSrts" = rts ++ (expandTag rts_tag) - addSuffix rts@"HSrts-1.0.2" = rts ++ (expandTag rts_tag) + addSuffix rts@"HSrts-1.0.3" = rts ++ (expandTag rts_tag) addSuffix other_lib = other_lib ++ (expandTag tag) expandTag t | null t = "" ===================================== compiler/ghc.cabal.in ===================================== @@ -130,6 +130,7 @@ Library exceptions == 0.10.*, semaphore-compat, stm, + rts, ghc-boot == @ProjectVersionMunged@, ghc-heap == @ProjectVersionMunged@, ghci == @ProjectVersionMunged@ ===================================== docs/users_guide/debugging.rst ===================================== @@ -1240,8 +1240,7 @@ Other :type: dynamic :since: 9.8.1 - - default: enabled + :default: enabled At the moment, ghci disables optimizations, because not all passes are compatible with the interpreter. @@ -1254,3 +1253,16 @@ Other expressions. Those cannot be stored in breakpoints, so any free variable that refers to optimized code will not be inspectable when this flag is enabled. + +.. ghc-flag:: -fadd-bco-name + :shortdesc: Add ``BCO_NAME`` instructions in generated bytecode. + :reverse: -fno-add-bco-name + :type: dynamic + + :since: 9.14.1 + + Prefix every generated bytecode object with a ``BCO_NAME`` instruction + containing the STG name of the binding from which the BCO originated. + These are printed by the bytecode disassembler, aiding in correlating + bytecode with STG. + ===================================== hadrian/src/Rules/Rts.hs ===================================== @@ -165,7 +165,7 @@ needRtsSymLinks stage rtsWays prefix, versionlessPrefix :: String versionlessPrefix = "libHSrts" -prefix = versionlessPrefix ++ "-1.0.2" +prefix = versionlessPrefix ++ "-1.0.3" -- removeRtsDummyVersion "a/libHSrts-1.0-ghc1.2.3.4.so" -- == "a/libHSrts-ghc1.2.3.4.so" ===================================== rts/Disassembler.c ===================================== @@ -452,6 +452,13 @@ disInstr ( StgBCO *bco, int pc ) debugBelch("RETURN_T\n "); break; + case bci_BCO_NAME: { + const char *name = (const char*) literals[instrs[pc]]; + debugBelch("BCO_NAME \"%s\"\n ", name); + pc += 1; + break; + } + default: barf("disInstr: unknown opcode %u", (unsigned int) instr); } @@ -464,10 +471,9 @@ void disassemble( StgBCO *bco ) StgWord16* instrs = (StgWord16*)(bco->instrs->payload); StgMutArrPtrs* ptrs = bco->ptrs; uint32_t nbcs = (uint32_t)(bco->instrs->bytes / sizeof(StgWord16)); - uint32_t pc = 1; + uint32_t pc = 0; debugBelch("BCO\n" ); - pc = 0; while (pc < nbcs) { debugBelch("\t%2d: ", pc ); pc = disInstr ( bco, pc ); ===================================== rts/Interpreter.c ===================================== @@ -2085,6 +2085,10 @@ run_BCO: goto do_return_nonpointer; } + case bci_BCO_NAME: + bciPtr++; + goto nextInsn; + case bci_SWIZZLE: { W_ stkoff = BCO_GET_LARGE_ARG; StgInt n = BCO_GET_LARGE_ARG; ===================================== rts/include/rts/Bytecodes.h ===================================== @@ -112,6 +112,8 @@ #define bci_PRIMCALL 87 +#define bci_BCO_NAME 88 + /* If you need to go past 255 then you will run into the flags */ /* If you need to go below 0x0100 then you will run into the instructions */ ===================================== rts/rts.cabal ===================================== @@ -1,6 +1,6 @@ cabal-version: 3.0 name: rts -version: 1.0.2 +version: 1.0.3 synopsis: The GHC runtime system description: The GHC runtime system. ===================================== testsuite/tests/th/T10279.hs ===================================== @@ -7,4 +7,4 @@ import Language.Haskell.TH.Syntax -- error message doesn't recognize it as a source package ID, -- (This is OK, since it will look obviously wrong when they -- try to find the package in their package database.) -blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) +blah = $(conE (Name (mkOccName "Foo") (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) ===================================== testsuite/tests/th/T10279.stderr ===================================== @@ -1,11 +1,11 @@ T10279.hs:10:9: error: [GHC-51294] • Failed to load interface for ‘A’. - no unit id matching ‘rts-1.0.2’ was found + no unit id matching ‘rts-1.0.3’ was found (This unit ID looks like the source package ID; the real unit ID is ‘rts’) • In the untyped splice: $(conE (Name (mkOccName "Foo") - (NameG VarName (mkPkgName "rts-1.0.2") (mkModName "A")))) + (NameG VarName (mkPkgName "rts-1.0.3") (mkModName "A")))) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5192a75fe9b272e8b1ef290fa834714c81bd1f79 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5192a75fe9b272e8b1ef290fa834714c81bd1f79 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 09:29:21 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 11 Dec 2024 04:29:21 -0500 Subject: [Git][ghc/ghc][master] configure: Implement ld override whitelist Message-ID: <67595b712347a_11bee45de058112072@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 1 changed file: - m4/find_ld.m4 Changes: ===================================== m4/find_ld.m4 ===================================== @@ -79,13 +79,16 @@ AC_DEFUN([FIND_LD],[ dnl See #21712. AC_CHECK_TARGET_TOOL([LD], [ld]) ;; - *) + *-linux*|*-mingw32) if test "x$enable_ld_override" = "xyes"; then find_ld else AC_CHECK_TARGET_TOOL([LD], [ld]) fi ;; + *) + AC_CHECK_TARGET_TOOL([LD], [ld]) + ;; esac CHECK_LD_COPY_BUG([$1]) ]) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/992259962191b0b774dfeeabb46729376c7fe7cf -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/992259962191b0b774dfeeabb46729376c7fe7cf You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 12:30:51 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Wed, 11 Dec 2024 07:30:51 -0500 Subject: [Git][ghc/ghc][wip/sand-witch/tysyn-info-ppr] Update GHCi :info type declaration printing (#24459) Message-ID: <675985f9efcc2_17b219d37908593db@gitlab.mail> Andrei Borzenkov pushed to branch wip/sand-witch/tysyn-info-ppr at Glasgow Haskell Compiler / GHC Commits: 5a46d62e by Andrei Borzenkov at 2024-12-11T16:30:06+04:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 29 changed files: - compiler/GHC/Core/TyCon.hs - compiler/GHC/Iface/Syntax.hs - compiler/GHC/Iface/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/ghci.rst - testsuite/tests/backpack/should_fail/T19244a.stderr - testsuite/tests/backpack/should_fail/T19244b.stderr - testsuite/tests/backpack/should_fail/bkpfail46.stderr - testsuite/tests/ghci/T18060/T18060.stdout - testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout - testsuite/tests/ghci/scripts/T15941.stdout - testsuite/tests/ghci/scripts/T19310.stdout - testsuite/tests/ghci/scripts/T21294a.stdout - + testsuite/tests/ghci/scripts/T24459.script - + testsuite/tests/ghci/scripts/T24459.stdout - testsuite/tests/ghci/scripts/T8535.stdout - testsuite/tests/ghci/scripts/T9181.stdout - testsuite/tests/ghci/scripts/all.T - testsuite/tests/ghci/scripts/ghci020.stdout - testsuite/tests/ghci/should_run/T10145.stdout - testsuite/tests/ghci/should_run/T18594.stdout - 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/interface-stability/template-haskell-exports.stdout - testsuite/tests/rep-poly/RepPolyBackpack3.stderr Changes: ===================================== compiler/GHC/Core/TyCon.hs ===================================== @@ -24,7 +24,8 @@ module GHC.Core.TyCon( mkRequiredTyConBinder, mkAnonTyConBinder, mkAnonTyConBinders, tyConBinderForAllTyFlag, tyConBndrVisForAllTyFlag, isNamedTyConBinder, - isVisibleTyConBinder, isInvisibleTyConBinder, + isVisibleTyConBinder, isInvisSpecTyConBinder, isInvisibleTyConBinder, + isInferredTyConBinder, isVisibleTcbVis, isInvisSpecTcbVis, -- ** Field labels @@ -487,7 +488,7 @@ mkRequiredTyConBinder dep_set tv | tv `elemVarSet` dep_set = mkNamedTyConBinder Required tv | otherwise = mkAnonTyConBinder tv -tyConBinderForAllTyFlag :: TyConBinder -> ForAllTyFlag +tyConBinderForAllTyFlag :: VarBndr a TyConBndrVis -> ForAllTyFlag tyConBinderForAllTyFlag (Bndr _ vis) = tyConBndrVisForAllTyFlag vis tyConBndrVisForAllTyFlag :: TyConBndrVis -> ForAllTyFlag @@ -513,10 +514,22 @@ isInvisSpecTcbVis :: TyConBndrVis -> Bool isInvisSpecTcbVis (NamedTCB Specified) = True isInvisSpecTcbVis _ = False +isInvisInferTcbVis :: TyConBndrVis -> Bool +isInvisInferTcbVis (NamedTCB Inferred) = True +isInvisInferTcbVis _ = False + +isInvisSpecTyConBinder :: VarBndr tv TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInvisSpecTyConBinder (Bndr _ tcb_vis) = isInvisSpecTcbVis tcb_vis + isInvisibleTyConBinder :: VarBndr tv TyConBndrVis -> Bool -- Works for IfaceTyConBinder too isInvisibleTyConBinder tcb = not (isVisibleTyConBinder tcb) +isInferredTyConBinder :: VarBndr var TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInferredTyConBinder (Bndr _ tcb_vis) = isInvisInferTcbVis tcb_vis + -- Build the 'tyConKind' from the binders and the result kind. -- Keep in sync with 'mkTyConKind' in GHC.Iface.Type. mkTyConKind :: [TyConBinder] -> Kind -> Kind ===================================== compiler/GHC/Iface/Syntax.hs ===================================== @@ -100,6 +100,7 @@ import Control.Monad import System.IO.Unsafe import Control.DeepSeq import Data.Proxy +import qualified Data.Set as Set infixl 3 &&& @@ -912,15 +913,226 @@ constraintIfaceKind :: IfaceKind constraintIfaceKind = IfaceTyConApp (IfaceTyCon constraintKindTyConName (mkIfaceTyConInfo NotPromoted IfaceNormalTyCon)) IA_Nil +{- Note [Print invisible binders in interface declarations] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Starting from GHC 9.8 it is possible to write invisible @-binders +in type-level declarations. That feature introduced several challenges +in interface declaration pretty printing (e.g. using the :info command +inside GHCi) to overcome. + +Consider this example with a redundant type variable `a`: + + type Id :: forall a b. b -> b + type Id x = x + +GHC will create system binders for kinds there to meet typechecking +and compilation needs and that will turn that declaration into a less +straightforward form with multiple @-binders: + + type Id :: forall {k} (a :: k) b. b -> b + type Id @{k} @a @b x = x :: b + +This information isn't required for understanding in most cases, +so GHC will hide it unless -fprint-explicit-kinds flag is supplied by the user. +And here is what we get: + + type Id :: forall {k} (a :: k) b. b -> b + type Id x = x + +However, there are several cases involving user-written @-binders +when it is cruicial to show them to provide understanding of what's going on. +First of all it can plainly appear on the right-hand side: + + type T :: forall (a :: Type). Type + type T @x = Tuple2 x x + +Not only that, an invisible binder can be unused by itself, but have an +impact on invisible binder positioning, e.g.: + + type T :: forall (a :: Type) (b :: Type). Type + type T @x @y = Tuple2 y y + +Here `x` is unused, but it is required to display, as `y` corresponds +to `b` in the standalone kind signature. + +The last problem is related to non-generative type declarations (type +synonyms and type families) only. It is not possible to partially +apply them, hence it's important to understand what parts of a declaration's +kind are related to the declaration itself. Here is a simple example: + + type T1 :: forall k. k -> Maybe k + type T1 = Just + + type T2 :: forall k. k -> Maybe k + type T2 @k = Just + +Both these type synonyms have the same kind signature, but they aren't +the same! `T1` can be used in strictly more cases, for example, as +an argument for a higher-order type: + + type F :: (forall k. k -> Maybe k) -> Type + + type R1 = F T1 -- Yes! + type R2 = F T2 -- No, that will not compile :( + +User-written invisible binders and "system" binders introduced by GHC +are indistinguishable at this stage, hence we try to only print +semantically significant binders by default. + +An invisible binder is considered significant when it meets at least +one of the following two criteria: + - It visibly occurs in the declaration's body (See more about that below) + - It is followed by a significant binder, + so it affects positioning +For non-generative type declarations (type synonyms and type families), +there is one additional criterion: + - It is not followed by a visible binder, so it + affects the arity of a type declaration + +The overall solution consists of three functions: +- `iface_decl_non_generative` decides whether the current declaration is + generative or not + +- `iface_decl_mentioned_vars` gives a Set of variables that + visibly occur in the declaration's body + +- `suppressIfaceInvisibles` uses information provided + by the first two functions to actually filter out insignificant + @-binders + +Here is what we consider "visibly occurs" in general and for +each declaration type: + +- Variables that visibly occur in IfaceType are collected by the + `visibleTypeVarOccurencies` function. + +- Variables that visibly occur in IfaceAT are collected by `iface_at_mentioned_vars` + function. It accounts visible binders for associated data and type + families and for type families only, it counts invisible binders. + Associated types can't have definitions, so it's safe to drop all other + binders. + +- None of the type variables in IfaceData declared using GADT syntax doesn't are considered + as visibe occurrences. This is because each constructor has its own variables, e.g.: + + type D :: forall (a :: Type). Type + data D @a where + MkD :: D @b + -- This is shorthand for: + -- MkD :: forall b. D @b + +- For IfaceData declared using Haskell98 syntax, a variable is considered visible + if it visibly occurs in at least one argument's type in at least one constructor. + +- For IfaceSynonym, a variable is considered visible if it visibly occurs + in the RHS type. + +- For IfaceFamily, a variable is considered visible if i occurs inside + an injectivity annotation, e.g. + + type family F @a = r | r -> a + +- For IfaceClass, a variable is considered visible if it occurs at least + once inside a functional dependency annotation or in at least one method's + type signature, or if it visibly occurs in at least one associated type's + declaration (Visible occurrences in associated types are described above.) + +- IfacePatSyn, IfaceId and IfaceAxiom are irrelevant to this problem. +-} + +iface_decl_generative :: IfaceDecl -> Bool +iface_decl_generative IfaceSynonym{} = False +iface_decl_generative IfaceFamily{ifFamFlav = rhs} + | IfaceDataFamilyTyCon <- rhs = True + | otherwise = False +iface_decl_generative IfaceData{} = True +iface_decl_generative IfaceId{} = True +iface_decl_generative IfaceClass{} = True +iface_decl_generative IfaceAxiom{} = True +iface_decl_generative IfacePatSyn{} = True + +iface_at_mentioned_vars :: IfaceAT -> Set.Set IfLclName +iface_at_mentioned_vars (IfaceAT decl _) + = Set.fromList . map ifTyConBinderName . suppress_vars $ binders + where + -- ifBinders is not total, so we assume here that associated types + -- cannot be IfaceId, IfaceAxiom or IfacePatSyn + binders = case decl of + IfaceFamily {ifBinders} -> ifBinders + IfaceData{ifBinders} -> ifBinders + IfaceSynonym{ifBinders} -> ifBinders + IfaceClass{ifBinders} -> ifBinders + IfaceId{} -> panic "IfaceId shoudn't be an associated type!" + IfaceAxiom{} -> panic "IfaceAxiom shoudn't be an associated type!" + IfacePatSyn {} -> panic "IfacePatSyn shoudn't be an associated type!" + + suppress_arity = not (iface_decl_generative decl) + + suppress_vars binders = + suppressIfaceInvisibles + -- We need to count trailing invisible binders for type families + (MkPrintArityInvisibles suppress_arity) + -- But this setting will simply count all invisible binderss + (PrintExplicitKinds False) + -- ...and associated types can't have a RHS + mempty + binders binders + +-- See Note [Print invisible binders in interface declarations] +-- in particular, the parts about collecting visible occurrences +iface_decl_mentioned_vars :: IfaceDecl -> Set.Set IfLclName +iface_decl_mentioned_vars (IfaceData { ifCons = condecls, ifGadtSyntax = gadt }) + | gadt = mempty + -- Get visible occurrences in each constructor in each alternative + | otherwise = Set.unions (map mentioned_con_vars cons) + where + mentioned_con_vars = Set.unions . map (visibleTypeVarOccurencies . snd) . ifConArgTys + cons = visibleIfConDecls condecls + +iface_decl_mentioned_vars (IfaceClass { ifFDs = fds, ifBody = IfAbstractClass }) + = Set.unions (map fundep_names fds) + where + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars + (IfaceClass { ifFDs = fds + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs + }}) + = Set.unions + [ Set.unions (map fundep_names fds) + , Set.unions (map iface_at_mentioned_vars ats) + , Set.unions (map (visibleTypeVarOccurencies . class_op_type) sigs) + ] + where + class_op_type (IfaceClassOp _bndr ty _default) = ty + + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars (IfaceSynonym {ifSynRhs = poly_ty}) + = visibleTypeVarOccurencies poly_ty + +-- Consider a binder to be a visible occurrence if it occurs inside an injectivity annotation. +iface_decl_mentioned_vars (IfaceFamily { ifBinders = binders, ifResVar = res_var, ifFamInj = inj }) + | Just{} <- res_var + , Injective injectivity <- inj + = Set.fromList . map (ifTyConBinderName . snd) . filter fst $ zip injectivity binders + | otherwise = mempty + +iface_decl_mentioned_vars IfacePatSyn{} = mempty +iface_decl_mentioned_vars IfaceId{} = mempty +iface_decl_mentioned_vars IfaceAxiom{} = mempty + pprIfaceDecl :: ShowSub -> IfaceDecl -> SDoc -- NB: pprIfaceDecl is also used for pretty-printing TyThings in GHCi -- See Note [Pretty printing via Iface syntax] in GHC.Types.TyThing.Ppr -pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, - ifCtxt = context, ifResKind = kind, - ifRoles = roles, ifCons = condecls, - ifParent = parent, - ifGadtSyntax = gadt, - ifBinders = binders }) +pprIfaceDecl ss decl@(IfaceData { ifName = tycon, ifCType = ctype, + ifCtxt = context, ifResKind = kind, + ifRoles = roles, ifCons = condecls, + ifParent = parent, + ifGadtSyntax = gadt, + ifBinders = binders }) | gadt = vcat [ pp_roles , pp_ki_sig @@ -946,8 +1158,10 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_kind = ppUnless (ki_sig_printable || isIfaceLiftedTypeKind kind) (dcolon <+> ppr kind) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss tycon binders + pp_lhs = case parent of - IfNoParent -> pprIfaceDeclHead suppress_bndr_sig context ss tycon binders + IfNoParent -> decl_head IfDataInstance{} -> text "instance" <+> pp_data_inst_forall <+> pprIfaceTyConParent parent @@ -994,36 +1208,40 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_extra = vcat [pprCType ctype] -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfAbstractClass }) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfAbstractClass }) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig [] ss clas binders <+> pprFundeps fds ] + , text "class" <+> decl_head <+> pprFundeps fds ] where + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss clas binders + -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfConcreteClass { - ifATs = ats, - ifSigs = sigs, - ifClassCtxt = context, - ifMinDef = minDef - }}) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs, + ifClassCtxt = context, + ifMinDef = minDef + }}) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig context ss clas binders <+> pprFundeps fds <+> pp_where + , text "class" <+> decl_head <+> pprFundeps fds <+> pp_where , nest 2 (vcat [ vcat asocs, vcat dsigs , ppShowAllSubs ss (pprMinDef $ fromIfaceBooleanFormula minDef)])] where pp_where = ppShowRhs ss $ ppUnless (null sigs && null ats) (text "where") + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss clas binders + asocs = ppr_trim $ map maybeShowAssoc ats dsigs = ppr_trim $ map maybeShowSig sigs @@ -1055,19 +1273,20 @@ pprIfaceDecl ss (IfaceClass { ifName = clas -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceSynonym { ifName = tc - , ifBinders = binders - , ifSynRhs = mono_ty - , ifResKind = res_kind}) +pprIfaceDecl ss decl@(IfaceSynonym { ifName = tc + , ifBinders = binders + , ifSynRhs = poly_ty + , ifResKind = res_kind}) = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tc binders <+> equals) - 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau - , ppUnless (isIfaceLiftedTypeKind res_kind) (dcolon <+> ppr res_kind) ]) + , hang (text "type" <+> decl_head <+> equals) + 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau ]) ] where - (tvs, theta, tau) = splitIfaceSigmaTy mono_ty + (tvs, theta, tau) = splitIfaceSigmaTy poly_ty name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tc) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tc binders + -- See Note [Printing type abbreviations] in GHC.Iface.Type ppr_tau | tc `hasKey` liftedTypeKindTyConKey || tc `hasKey` unrestrictedFunTyConKey || @@ -1078,20 +1297,18 @@ pprIfaceDecl ss (IfaceSynonym { ifName = tc -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceFamily { ifName = tycon - , ifFamFlav = rhs, ifBinders = binders - , ifResKind = res_kind - , ifResVar = res_var, ifFamInj = inj }) +pprIfaceDecl ss decl@(IfaceFamily { ifName = tycon + , ifFamFlav = rhs, ifBinders = binders + , ifResKind = res_kind + , ifResVar = res_var, ifFamInj = inj }) | IfaceDataFamilyTyCon <- rhs = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , text "data family" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders + , text "data family" <+> decl_head ] | otherwise = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type family" - <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders - <+> pp_inj res_var inj + , hang (text "type family" <+> decl_head <+> pp_inj res_var inj <+> ppShowRhs ss (pp_where rhs)) 2 (ppShowRhs ss (pp_rhs rhs)) $$ @@ -1100,6 +1317,8 @@ pprIfaceDecl ss (IfaceFamily { ifName = tycon where name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tycon) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tycon binders + pp_where (IfaceClosedSynFamilyTyCon {}) = text "where" pp_where _ = empty @@ -1188,7 +1407,12 @@ pprRoles :: (Role -> Bool) -> SDoc -> [IfaceTyConBinder] -> [Role] -> SDoc pprRoles suppress_if tyCon bndrs roles = sdocOption sdocPrintExplicitKinds $ \print_kinds -> - let froles = suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs roles + let froles = + suppressIfaceInvisibles + (MkPrintArityInvisibles False) + (PrintExplicitKinds print_kinds) + mempty + bndrs roles in ppUnless (all suppress_if froles || null froles) $ text "type role" <+> tyCon <+> hsep (map ppr froles) @@ -1245,16 +1469,25 @@ pprIfaceTyConParent IfNoParent pprIfaceTyConParent (IfDataInstance _ tc tys) = pprIfaceTypeApp topPrec tc tys -pprIfaceDeclHead :: SuppressBndrSig +pprIfaceDeclHead :: IfaceDecl + -> SuppressBndrSig -> IfaceContext -> ShowSub -> Name -> [IfaceTyConBinder] -- of the tycon, for invisible-suppression -> SDoc -pprIfaceDeclHead suppress_sig context ss tc_occ bndrs +pprIfaceDeclHead decl suppress_sig context ss tc_occ bndrs = sdocOption sdocPrintExplicitKinds $ \print_kinds -> sep [ pprIfaceContextArr context , pprPrefixIfDeclBndr (ss_how_much ss) (occName tc_occ) <+> pprIfaceTyConBinders suppress_sig - (suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs bndrs) ] + (suppressIfaceInvisibles + (MkPrintArityInvisibles print_arity) + (PrintExplicitKinds print_kinds) + mentioned_vars + bndrs bndrs) ] + where + -- See Note [Print invisible binders in interface declarations] + mentioned_vars = iface_decl_mentioned_vars decl + print_arity = not (iface_decl_generative decl) pprIfaceConDecl :: ShowSub -> Bool -> IfaceTopBndr ===================================== compiler/GHC/Iface/Type.hs ===================================== @@ -44,6 +44,7 @@ module GHC.Iface.Type ( SuppressBndrSig(..), UseBndrParens(..), PrintExplicitKinds(..), + PrintArityInvisibles(..), pprIfaceType, pprParendIfaceType, pprPrecIfaceType, pprIfaceContext, pprIfaceContextArr, pprIfaceIdBndr, pprIfaceLamBndr, pprIfaceTvBndr, pprIfaceTyConBinders, @@ -56,6 +57,7 @@ module GHC.Iface.Type ( isIfaceRhoType, suppressIfaceInvisibles, + visibleTypeVarOccurencies, stripIfaceInvisVars, stripInvisArgs, @@ -98,6 +100,9 @@ import Data.Word (Word8) import Control.Arrow (first) import Control.DeepSeq import Control.Monad ((<$!>)) +import Data.List (dropWhileEnd) +import qualified Data.List.NonEmpty as NonEmpty +import qualified Data.Set as Set {- ************************************************************************ @@ -609,9 +614,21 @@ splitIfaceReqForallTy (IfaceForAllTy bndr ty) = case splitIfaceReqForallTy ty of { (bndrs, rho) -> (bndr:bndrs, rho) } splitIfaceReqForallTy rho = ([], rho) -suppressIfaceInvisibles :: PrintExplicitKinds -> [IfaceTyConBinder] -> [a] -> [a] -suppressIfaceInvisibles (PrintExplicitKinds True) _tys xs = xs -suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs +newtype PrintArityInvisibles = MkPrintArityInvisibles Bool + +-- See Note [Print invisible binders in interface declarations] +-- for the definition of what binders are considered insignificant +suppressIfaceInvisibles :: PrintArityInvisibles + -> PrintExplicitKinds + -> Set.Set IfLclName + -> [IfaceTyConBinder] + -> [a] + -> [a] +suppressIfaceInvisibles _ (PrintExplicitKinds True) _ _tys xs = xs + +suppressIfaceInvisibles -- This case is semantically the same as the third case, but it should be way f + (MkPrintArityInvisibles False) (PrintExplicitKinds False) mentioned_vars tys xs + | Set.null mentioned_vars = suppress tys xs where suppress _ [] = [] suppress [] a = a @@ -619,6 +636,44 @@ suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs | isInvisibleTyConBinder k = suppress ks xs | otherwise = x : suppress ks xs +suppressIfaceInvisibles + (MkPrintArityInvisibles arity_invisibles) + (PrintExplicitKinds False) mentioned_vars tys xs + = map snd (suppress (zip tys xs)) + where + -- Consider this example: + -- type T :: forall k1 k2. Type + -- type T @a @b = b + -- `@a` is not mentioned on the RHS. However, we can't just + -- drop it because implicit argument positioning matters. + -- + -- Hence just drop the end + only_mentioned_binders = dropWhileEnd (not . is_binder_mentioned) + + is_binder_mentioned (bndr, _) = ifTyConBinderName bndr `Set.member` mentioned_vars + + suppress_invisibles group = + applyWhen invis_group only_mentioned_binders bndrs + where + bndrs = NonEmpty.toList group + invis_group = is_invisible_bndr (NonEmpty.head group) + + suppress_invisible_groups [] = [] + suppress_invisible_groups [group] = + if arity_invisibles + then NonEmpty.toList group -- the last group affects arity + else suppress_invisibles group + suppress_invisible_groups (group : groups) + = suppress_invisibles group ++ suppress_invisible_groups groups + + suppress + = suppress_invisible_groups -- Filter out insignificant invisible binders + . NonEmpty.groupWith is_invisible_bndr -- Find chunks of @-binders + . filterOut is_inferred_bndr -- We don't want to display @{binders} + + is_inferred_bndr = isInferredTyConBinder . fst + is_invisible_bndr = isInvisibleTyConBinder . fst + stripIfaceInvisVars :: PrintExplicitKinds -> [IfaceTyConBinder] -> [IfaceTyConBinder] stripIfaceInvisVars (PrintExplicitKinds True) tyvars = tyvars stripIfaceInvisVars (PrintExplicitKinds False) tyvars @@ -659,6 +714,29 @@ ifTypeIsVarFree ty = go ty go_args IA_Nil = True go_args (IA_Arg arg _ args) = go arg && go_args args +visibleTypeVarOccurencies :: IfaceType -> Set.Set IfLclName +-- Returns True if the type contains this name. Doesn't count +-- invisible application +-- Just used to control pretty printing +visibleTypeVarOccurencies = go + where + (<>) = Set.union + + go (IfaceTyVar var) = Set.singleton var + go (IfaceFreeTyVar {}) = mempty + go (IfaceAppTy fun args) = go fun <> go_args args + go (IfaceFunTy _ w arg res) = go w <> go arg <> go res + go (IfaceForAllTy bndr ty) = go (ifaceBndrType $ binderVar bndr) <> go ty + go (IfaceTyConApp _ args) = go_args args + go (IfaceTupleTy _ _ args) = go_args args + go (IfaceLitTy _) = mempty + go (IfaceCastTy {}) = mempty -- Safe + go (IfaceCoercionTy {}) = mempty -- Safe + + go_args IA_Nil = mempty + go_args (IA_Arg arg Required args) = go arg <> go_args args + go_args (IA_Arg _arg _ args) = go_args args + {- Note [Substitution on IfaceType] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Substitutions on IfaceType are done only during pretty-printing to ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -33,6 +33,10 @@ Compiler GHCi ~~~~ +- :ghci-cmd:`:info` now outputs type declarations with @-binders that are + considered semantically significant. See the documentation for :ghci-cmd:`:info` + itself for a more detailed explanation. + Runtime system ~~~~~~~~~~~~~~ ===================================== docs/users_guide/ghci.rst ===================================== @@ -2516,6 +2516,22 @@ commonly used commands. ⟨name⟩ has been loaded from a source file, then GHCi will also display the location of its definition in the source. + GHCi outputs type declarations (type synonyms, newtypes and datatypes, + classes, type and data families) with semantically significant invisible + @-binders. + + An invisible binder is considered significant when it meets at least + one of the following two criteria: + + - It visibly occurs in the declaration's body + + - It is followed by a significant binder, so it affects positioning + + For non-generative type declarations (type synonyms and type families) + there is one additional criterion: + + - It is not followed by a visible binder, so it affects the arity of a type declaration + For types and classes, GHCi also summarises instances that mention them. To avoid showing irrelevant information, an instance is shown only if (a) its head mentions ⟨name⟩, and (b) all the other things ===================================== testsuite/tests/backpack/should_fail/T19244a.stderr ===================================== @@ -17,7 +17,7 @@ T19244a.bkp:22:9: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/T19244b.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing user - [1 of 2] Compiling Map[sig] ( user\Map.hsig, nothing ) - [2 of 2] Compiling User ( user\User.hs, nothing ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, nothing ) + [2 of 2] Compiling User ( user/User.hs, nothing ) [2 of 3] Processing ordmap Instantiating ordmap - [1 of 1] Compiling Map ( ordmap\Map.hs, T19244b.out\ordmap\Map.o ) + [1 of 1] Compiling Map ( ordmap/Map.hs, T19244b.out/ordmap/Map.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including user[Map=ordmap:Map] Instantiating user[Map=ordmap:Map] - [1 of 2] Compiling Map[sig] ( user\Map.hsig, T19244b.out\user\user-GzloW2NeDdA2M0V8qzN4g2\Map.o ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, T19244b.out/user/user-GzloW2NeDdA2M0V8qzN4g2/Map.o ) T19244b.bkp:11:27: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/bkpfail46.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing p - [1 of 2] Compiling A[sig] ( p\A.hsig, nothing ) - [2 of 2] Compiling M ( p\M.hs, nothing ) + [1 of 2] Compiling A[sig] ( p/A.hsig, nothing ) + [2 of 2] Compiling M ( p/M.hs, nothing ) [2 of 3] Processing q Instantiating q - [1 of 1] Compiling A ( q\A.hs, bkpfail46.out\q\A.o ) + [1 of 1] Compiling A ( q/A.hs, bkpfail46.out/q/A.o ) [3 of 3] Processing r Instantiating r [1 of 1] Including p[A=q:A] Instantiating p[A=q:A] - [1 of 2] Compiling A[sig] ( p\A.hsig, bkpfail46.out\p\p-HVmFlcYSefiK5n1aDP1v7x\A.o ) + [1 of 2] Compiling A[sig] ( p/A.hsig, bkpfail46.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o ) bkpfail46.bkp:16:9: error: [GHC-15843] • Type constructor ‘K’ has conflicting definitions in the module and its hsig file. Main module: type K :: * -> Constraint - type K a = GHC.Classes.Eq a :: Constraint + type K a = GHC.Classes.Eq a Hsig file: type K :: * -> Constraint class K a Illegal parameterized type synonym in implementation of abstract data. ===================================== testsuite/tests/ghci/T18060/T18060.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout ===================================== @@ -74,13 +74,13 @@ data Tuple2# a b = (#,#) a b (# , #) :: a -> b -> Tuple2# a b (Int, Int) :: Tuple2 (*) (*) type T :: Tuple2 (*) (*) -type T = (Int, Int) :: Tuple2 (*) (*) +type T = (Int, Int) -- Defined at :19:1 type S :: Solo (*) -type S = MkSolo Int :: Solo (*) +type S = MkSolo Int -- Defined at :20:1 type L :: List (*) -type L = [Int] :: List (*) +type L = [Int] -- Defined at :21:1 f :: Int -> Tuple2 Int Int -> Int (\ (_, _) -> ()) :: Tuple2 a b -> Unit ===================================== testsuite/tests/ghci/scripts/T15941.stdout ===================================== @@ -1,4 +1,3 @@ type T :: * -> * -> * -type T = - (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} :: * -> * -> * +type T = (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} -- Defined at :2:1 ===================================== testsuite/tests/ghci/scripts/T19310.stdout ===================================== @@ -1,3 +1,3 @@ type T :: * -> * -> * -type T = (->) @{LiftedRep} @{LiftedRep} :: * -> * -> * +type T = (->) @{LiftedRep} @{LiftedRep} -- Defined at :3:1 ===================================== testsuite/tests/ghci/scripts/T21294a.stdout ===================================== @@ -1,5 +1,5 @@ type L0 :: * -> * -type L0 = [] :: * -> * +type L0 = [] -- Defined at :1:1 type L1 :: * -> * type L1 a = [a] ===================================== testsuite/tests/ghci/scripts/T24459.script ===================================== @@ -0,0 +1,250 @@ +:{ +{-# LANGUAGE TypeFamilies, TypeFamilyDependencies, DataKinds, TypeAbstractions, FunctionalDependencies, AllowAmbiguousTypes #-} + +import Data.Kind +import Data.Data + +-- Check that we don't print binders that aren't included in the arity +type T0 :: forall k. k -> Type +type T0 = Proxy :: forall k. k -> Type + +-- ...and a variant where the arity isn't affected by the type signature +type T1 :: forall k. k -> Type +type T1 = Proxy + +-- ...and that we do print variables that are included in the arity +type T2 :: forall k. k -> Type +type T2 @k = Proxy + +-- ...but don't print invisible binders that don't visibly occur and don't affect the arity +type T3 :: forall k. k -> Type +type T3 a = Proxy a + +-- ...and print invisible binders that do visibly occur +type T4 :: forall a. Type -> Type +type T4 @a _b = Proxy a + +-- ...one more check that it is not affected by the user's input +type T5 :: forall a. Type -> Type +type T5 @a _b = Proxy _b + +-- ...and once again +type T6 :: forall k. Type -> Type +type T6 _a = () + +-- ...now check that we don't mess up with positioning +type T7 :: forall a b c. b -> forall d. Type +type T7 @a @b @c f @d = b + +-- ...and that we count occurrences in theta +type T8 :: forall (a :: Constraint). Type -> Type +type T8 @a _ = forall x. a => x + +-- ...and in forall binder signatures +type T9 :: forall (a :: Type). Type -> Type +type T9 @a _ = forall (x :: a). Int + +-- That's all with type synonyms, let's check other sorts of type declarations + +-- Equatuions should not affect invisible binders for type families, but the arity matters +type TF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +type family TF1 @a @b c @d where + forall b d. TF1 @Type @b Int @d = () + forall a b d. TF1 @a @b (_ :: a) @d = Bool + +-- Injectivity annotations should affect invisible binders. Also check that positioning works +type TF2 :: forall (a :: Type) (b :: Type). Type -> forall (d :: Type). Type +type family TF2 @a @b c @d = r | r -> b + +-- Data families are generative and can't have injectivity annotations +-- hence no invisible binders should be printed +type DF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +data family DF1 @a @b c @d + +-- Data families are generative, so the invisible binder @b isn't a visible usage +type C1 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C1 @a @b c where + data AD a @b + +-- But type families aren't generative, hence the trailing binder @b occurs visibly +type C2 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C2 @a @b c where + type AF a @b + +-- Check that trailing invisible binders are handled properly +type C3 :: forall x. Constraint +class C3 @x where {} + +-- And check that signatures are visible occurrences +type C4 :: forall (a :: Type) (b :: Type). Constraint +class C4 @a @b where + x :: a + y :: b + +-- Also check functional dependencies +type C5 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C5 @a @b c | a -> c where {} + +-- GADTs should not have "visible" mentions of binders at a declaration's head +type D1 :: forall a. Type +data D1 @a where + MkD :: b -> D1 @b + +-- Haskell98-style declarations should work properly +type D2 :: forall a (b :: Type). Type -> forall d. Type +data D2 @a @b c @d = MkD2_1 | MkD2_2 Int b + +-- And now a lot of stuff suggested by @int-index + +data P a b + +type F1 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k1 + +type F2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k2 + +type F3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k3 + +type F4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k4 + +type F5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k5 + +type F6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k6 + +type F1x2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k2) + +type F1x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k3) + +type F1x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k4) + +type F1x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k5) + +type F1x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k6) + +type F2x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k3) + +type F2x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k4) + +type F2x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k5) + +type F2x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k6) + +type F3x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k4) + +type F3x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k5) + +type F3x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k6) + +type F4x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k5) + +type F4x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k6) + +type F5x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k5,k6) + +:} + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 + +:set -fprint-explicit-kinds + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 ===================================== testsuite/tests/ghci/scripts/T24459.stdout ===================================== @@ -0,0 +1,313 @@ +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 a = Proxy a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @a _b = Proxy a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 _b = Proxy _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @a @b f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 c @d where + TF1 Int = () + forall a (_1 :: a) b d. TF1 _1 = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 c + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a c where + type AD :: * -> forall b. * + data family AD a + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a c | a -> c + -- Defined at :86:1 +type D1 :: forall {k} (a :: k). * +data D1 where + MkD :: b -> D1 + -- Defined at :90:1 +type role D2 phantom +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @a @b c = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 a b c d e @k6 = P k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b c d e @k6 = P k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 a b @k3 c d e @k6 = P k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 a b @k3 @k4 c d e @k6 = P k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 a b @k3 @k4 @k5 c d e @k6 = P k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 a b c d e @k6 = P k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b c d e @k6 = P (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 a b @k3 c d e @k6 = P (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 a b @k3 @k4 c d e @k6 = P (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 a b @k3 @k4 @k5 c d e @k6 = P (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 a b c d e @k6 = P (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 c d e @k6 = P (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 c d e @k6 = P (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b c d e @k6 = P (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 a b @k3 @k4 c d e @k6 = P (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 a b @k3 @k4 @k5 c d e @k6 = P (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 a b @k3 c d e @k6 = P (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 a b @k3 @k4 @k5 c d e @k6 = P (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 a b @k3 @k4 c d e @k6 = P (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 a b @k3 @k4 @k5 c d e @k6 = P (k5, k6) + -- Defined at :162:1 +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy @{k} + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 @k a = Proxy @{k} a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @{k} @a _b = Proxy @{k} a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 @{k} @a _b = Proxy @{*} _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 @{k} @k1 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @{k} @{k1} @{k2} @a @b @c f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 @a @b c @d where + TF1 @(*) @b Int @d = () + forall a (_1 :: a) b d. TF1 @a @b _1 @d = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 @a @b c @d + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a @b c where + type AD :: * -> forall b. * + data family AD a @b + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 @{k} @x + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a @b c | a -> c + -- Defined at :86:1 +type role D1 nominal nominal +type D1 :: forall {k} (a :: k). * +data D1 @{k} @a where + MkD :: b -> D1 @{*} @b + -- Defined at :90:1 +type role D2 nominal nominal nominal nominal phantom nominal +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @{k} @{k1} @a @b c @d = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k5, k6) + -- Defined at :162:1 ===================================== testsuite/tests/ghci/scripts/T8535.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/T9181.stdout ===================================== @@ -13,12 +13,10 @@ type (GHC.Internal.Data.Type.Ord.<=) x y = GHC.Internal.TypeError.Assert (x GHC.Internal.Data.Type.Ord.<=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) - :: Constraint type (GHC.Internal.Data.Type.Ord.<=?) :: forall k. k -> k -> Bool type (GHC.Internal.Data.Type.Ord.<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) True True False - :: Bool type GHC.Internal.TypeLits.AppendSymbol :: GHC.Types.Symbol -> GHC.Types.Symbol -> GHC.Types.Symbol type family GHC.Internal.TypeLits.AppendSymbol a b ===================================== testsuite/tests/ghci/scripts/all.T ===================================== @@ -385,3 +385,4 @@ test('T23686', normal, ghci_script, ['T23686.script']) test('T13869', extra_files(['T13869a.hs', 'T13869b.hs']), ghci_script, ['T13869.script']) test('ListTuplePunsPpr', normal, ghci_script, ['ListTuplePunsPpr.script']) test('ListTuplePunsPprNoAbbrevTuple', [expect_broken(23135), limit_stdout_lines(13)], ghci_script, ['ListTuplePunsPprNoAbbrevTuple.script']) +test('T24459', normal, ghci_script, ['T24459.script']) ===================================== testsuite/tests/ghci/scripts/ghci020.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T10145.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T18594.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5406,7 +5406,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5533,7 +5533,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5608,7 +5608,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5616,7 +5616,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5662,7 +5662,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7397,7 +7397,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7407,7 +7407,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7429,7 +7429,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7454,14 +7454,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7478,24 +7478,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8583,7 +8583,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9357,7 +9357,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9418,7 +9418,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9573,9 +9573,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9692,9 +9692,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5375,7 +5375,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5502,7 +5502,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5577,7 +5577,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5585,7 +5585,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5631,7 +5631,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7366,7 +7366,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7376,7 +7376,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7398,7 +7398,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7423,14 +7423,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7447,24 +7447,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -11625,7 +11625,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -12399,7 +12399,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -12460,7 +12460,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -12615,9 +12615,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -12734,9 +12734,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5552,7 +5552,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5679,7 +5679,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5754,7 +5754,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5762,7 +5762,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5808,7 +5808,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7546,7 +7546,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7556,7 +7556,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7578,7 +7578,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7603,14 +7603,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7627,24 +7627,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8807,7 +8807,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9581,7 +9581,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9642,7 +9642,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9797,9 +9797,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9916,9 +9916,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5406,7 +5406,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5533,7 +5533,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5608,7 +5608,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5616,7 +5616,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5662,7 +5662,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7397,7 +7397,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7407,7 +7407,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7429,7 +7429,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7454,14 +7454,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7478,24 +7478,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8583,7 +8583,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9357,7 +9357,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9418,7 +9418,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9573,9 +9573,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9692,9 +9692,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) @@ -4341,7 +4341,7 @@ module GHC.PrimOps where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -4468,7 +4468,7 @@ module GHC.PrimOps where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -4543,7 +4543,7 @@ module GHC.PrimOps where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -4551,7 +4551,7 @@ module GHC.PrimOps where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -4597,7 +4597,7 @@ module GHC.PrimOps where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -6329,9 +6329,9 @@ module Prelude.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -8960,11 +8960,11 @@ module Prelude.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 ===================================== @@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) @@ -4341,7 +4341,7 @@ module GHC.PrimOps where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -4468,7 +4468,7 @@ module GHC.PrimOps where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -4543,7 +4543,7 @@ module GHC.PrimOps where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -4551,7 +4551,7 @@ module GHC.PrimOps where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -4597,7 +4597,7 @@ module GHC.PrimOps where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -6332,9 +6332,9 @@ module Prelude.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -8963,11 +8963,11 @@ module Prelude.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) ===================================== testsuite/tests/interface-stability/template-haskell-exports.stdout ===================================== @@ -31,7 +31,7 @@ module Language.Haskell.TH where type Code :: (* -> *) -> forall (r :: GHC.Types.RuntimeRep). TYPE r -> * newtype Code m a = Code {examineCode :: m (TExp a)} type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = Code Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = Code Q type Con :: * data Con = NormalC Name [BangType] | RecC Name [VarBangType] | InfixC BangType Name BangType | ForallC [TyVarBndr Specificity] Cxt Con | GadtC [Name] [BangType] Type | RecGadtC [Name] [VarBangType] Type type ConQ :: * @@ -881,7 +881,7 @@ module Language.Haskell.TH.Lib where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * @@ -1220,7 +1220,7 @@ module Language.Haskell.TH.Lib.Internal where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * ===================================== testsuite/tests/rep-poly/RepPolyBackpack3.stderr ===================================== @@ -1,19 +1,19 @@ [1 of 3] Processing sig - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, nothing ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, nothing ) [2 of 3] Processing impl Instantiating impl - [1 of 1] Compiling Impl ( impl\Impl.hs, RepPolyBackpack3.out\impl\Impl.o ) + [1 of 1] Compiling Impl ( impl/Impl.hs, RepPolyBackpack3.out/impl/Impl.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including sig[Sig=impl:Impl] Instantiating sig[Sig=impl:Impl] - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, RepPolyBackpack3.out\sig\sig-Absk5cIXTXe6UYhGMYGber\Sig.o ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, RepPolyBackpack3.out/sig/sig-Absk5cIXTXe6UYhGMYGber/Sig.o ) RepPolyBackpack3.bkp:17:5: error: [GHC-15843] • Type constructor ‘Rep’ has conflicting definitions in the module and its hsig file. Main module: type Rep :: GHC.Types.RuntimeRep - type Rep = T :: GHC.Types.RuntimeRep + type Rep = T Hsig file: type Rep :: GHC.Types.RuntimeRep data Rep Illegal implementation of abstract data: Invalid type family ‘T’. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5a46d62e634433da6538800836668ddab30900e8 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5a46d62e634433da6538800836668ddab30900e8 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 12:33:47 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 11 Dec 2024 07:33:47 -0500 Subject: [Git][ghc/ghc][wip/freebsd] 29 commits: Fix requirements on T25240 Message-ID: <675986abc1d25_17b219d4a65c63339@gitlab.mail> Ben Gamari pushed to branch wip/freebsd at Glasgow Haskell Compiler / GHC Commits: 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - 30 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC.hs - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Parser/Lexer.x - compiler/GHC/StgToByteCode.hs - compiler/GHC/StgToJS/Apply.hs - compiler/GHC/StgToJS/Arg.hs - compiler/GHC/StgToJS/CodeGen.hs - compiler/GHC/StgToJS/Expr.hs - compiler/GHC/StgToJS/Ids.hs - compiler/GHC/StgToJS/Linker/Linker.hs - compiler/GHC/StgToJS/Monad.hs - compiler/GHC/StgToJS/Object.hs - compiler/GHC/StgToJS/Symbols.hs - compiler/GHC/StgToJS/Types.hs - compiler/GHC/Unit/Info.hs - compiler/GHC/Unit/Module/Graph.hs - compiler/ghc.cabal.in - docs/users_guide/debugging.rst - hadrian/src/Rules/Documentation.hs - hadrian/src/Rules/Rts.hs - libraries/ghc-compact/tests/all.T - libraries/ghc-internal/CHANGELOG.md - libraries/ghc-internal/src/GHC/Internal/List.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4ab378d0de13574c11581b52b68f95d8a600c2f3...57e3cab542e238ac14aad42827e757fb115a9f76 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4ab378d0de13574c11581b52b68f95d8a600c2f3...57e3cab542e238ac14aad42827e757fb115a9f76 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 13:59:24 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 11 Dec 2024 08:59:24 -0500 Subject: [Git][ghc/ghc][wip/T25560] 7 commits: rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS Message-ID: <67599abc91433_17b219180df9473232@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 86571af0 by Ben Gamari at 2024-12-11T08:59:10-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - ff1e8978 by Ben Gamari at 2024-12-11T08:59:10-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 3c757962 by Ben Gamari at 2024-12-11T08:59:10-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - 00a8a640 by Ben Gamari at 2024-12-11T08:59:10-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 521c6fef by Ben Gamari at 2024-12-11T08:59:10-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - a895372c by Ben Gamari at 2024-12-11T08:59:10-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 2de8eaed by Ben Gamari at 2024-12-11T08:59:10-05:00 testsuite: Add test for #25560 - - - - - 11 changed files: - docs/users_guide/using-concurrent.rst - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - testsuite/driver/testlib.py - + testsuite/tests/rts/T25560.hs - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -153,6 +153,14 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. changed while the program is running by calling ``Control.Concurrent.setNumCapabilities``. + +.. note:: + + The maximum number of capabilities supported by the GHC runtime system is + determined when at RTS startup to be either 256, the value given by + :rts-flag:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. + The following options affect the way the runtime schedules threads on CPUs: ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -394,13 +393,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +uint32_t max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -344,8 +349,6 @@ initCapability (Capability *cap, uint32_t i) * ------------------------------------------------------------------------- */ void initCapabilities (void) { - uint32_t i; - /* Declare a couple capability sets representing the process and clock domain. Each capability will get added to these capsets. */ traceCapsetCreate(CAPSET_OSPROCESS_DEFAULT, CapsetTypeOsProcess); @@ -354,7 +357,7 @@ void initCapabilities (void) // Initialise NUMA if (!RtsFlags.GcFlags.numa) { n_numa_nodes = 1; - for (i = 0; i < MAX_NUMA_NODES; i++) { + for (uint32_t i = 0; i < MAX_NUMA_NODES; i++) { numa_map[i] = 0; } } else if (RtsFlags.DebugFlags.numa) { @@ -388,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + uint32_t core_count = getNumberOfProcessors(); + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; @@ -412,7 +433,7 @@ void initCapabilities (void) // There are no free capabilities to begin with. We will start // a worker Task to each Capability, which will quickly put the // Capability on the free list when it finds nothing to do. - for (i = 0; i < n_numa_nodes; i++) { + for (uint32_t i = 0; i < n_numa_nodes; i++) { last_free_capability[i] = getCapability(0); } } ===================================== rts/Capability.h ===================================== @@ -270,11 +270,13 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,12 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count %" PRIu32 "; clamping...\n", max_n_capabilities); + new_n_capabilities = max_n_capabilities; } - debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", enabled_capabilities, new_n_capabilities); ===================================== rts/include/rts/Config.h ===================================== @@ -78,6 +78,10 @@ code. #endif #if defined(THREADED_RTS) +/* + * See Note [Capabilities array sizing] in rts/Capability.c. + * Update the note in docs/users_guide/using-concurrent.rst when updating this. + */ #define MAX_N_CAPABILITIES 256 #else #define MAX_N_CAPABILITIES 1 ===================================== rts/include/rts/Threads.h ===================================== @@ -69,7 +69,7 @@ HsBool rtsSupportsBoundThreads (void); // The number of Capabilities. // TODO: Ideally we would only provide getNumCapabilities // but this is used in compiler/cbits/genSym.c -extern unsigned int n_capabilities; +extern uint32_t n_capabilities; INLINE_HEADER unsigned int getNumCapabilities(void) { return RELAXED_LOAD(&n_capabilities); } @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern uint32_t max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/driver/testlib.py ===================================== @@ -270,6 +270,10 @@ def req_bco( name, opts ): # JS backend doesn't support ByteCode js_skip(name, opts) +def req_c_rts( name, opts ): + """ Require the C runtime system (rather than, e.g. the Javascript RTS). """ + js_skip(name, opts) + def req_rts_linker( name, opts ): if not config.have_RTS_linker: opts.expect = 'fail' ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [req_c_rts, ignore_stderr], compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/cd7bf129c29fe919fb4214fdb9e1241bf569907b...2de8eaedfa9c7212a26e64fe49e49e21c238b6b3 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/cd7bf129c29fe919fb4214fdb9e1241bf569907b...2de8eaedfa9c7212a26e64fe49e49e21c238b6b3 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 14:05:24 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 11 Dec 2024 09:05:24 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T14497 Message-ID: <67599c246515c_17b219168b64477912@gitlab.mail> Ben Gamari pushed new branch wip/T14497 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T14497 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 14:47:15 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 11 Dec 2024 09:47:15 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25039 Message-ID: <6759a5f3f173c_12232f1f4b7c74214@gitlab.mail> Ben Gamari pushed new branch wip/T25039 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25039 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 14:47:40 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 11 Dec 2024 09:47:40 -0500 Subject: [Git][ghc/ghc][wip/T25039] rts/CheckUnload: Don't prepare to unload if we can't unload Message-ID: <6759a60ca25e0_12232f1f47d07446e@gitlab.mail> Ben Gamari pushed to branch wip/T25039 at Glasgow Haskell Compiler / GHC Commits: 140272d0 by Ben Gamari at 2024-12-11T09:47:31-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 1 changed file: - rts/CheckUnload.c Changes: ===================================== rts/CheckUnload.c ===================================== @@ -166,7 +166,7 @@ ObjectCode *loaded_objects; static OCSectionIndices *global_s_indices = NULL; // Is it safe for us to unload code? -static bool safeToUnload(void) +static bool tryToUnload(void) { if (RtsFlags.ProfFlags.doHeapProfile != NO_HEAP_PROFILING) { // We mustn't unload anything as the heap census may contain @@ -174,7 +174,8 @@ static bool safeToUnload(void) // See #24512. return false; } - return true; + + return global_s_indices != NULL; } static OCSectionIndices *createOCSectionIndices(void) @@ -432,7 +433,7 @@ static bool markObjectLive(void *data STG_UNUSED, StgWord key, const void *value void markObjectCode(const void *addr) { - if (global_s_indices == NULL) { + if (!tryToUnload()) { return; } @@ -450,7 +451,7 @@ void markObjectCode(const void *addr) // unloading. bool prepareUnloadCheck(void) { - if (global_s_indices == NULL) { + if (!tryToUnload()) { return false; } @@ -472,7 +473,7 @@ void checkUnload(void) // code (loaded_objects). Mark the roots first, then unload any unmarked // objects. - if (global_s_indices != NULL && safeToUnload()) { + if (tryToUnload()) { OCSectionIndices *s_indices = global_s_indices; ASSERT(s_indices->sorted); View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/140272d0278c4aea72b673623bafaabb6546247a -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/140272d0278c4aea72b673623bafaabb6546247a You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 16:15:07 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Wed, 11 Dec 2024 11:15:07 -0500 Subject: [Git][ghc/ghc][wip/T25560] 7 commits: rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS Message-ID: <6759ba8bd101d_35dab97125c8366e8@gitlab.mail> Ben Gamari pushed to branch wip/T25560 at Glasgow Haskell Compiler / GHC Commits: 26764a68 by Ben Gamari at 2024-12-10T14:34:08-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - be52a457 by Ben Gamari at 2024-12-10T14:34:08-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 207b1533 by Ben Gamari at 2024-12-10T14:34:08-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - b75f972d by Ben Gamari at 2024-12-10T14:34:08-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 3ff826f6 by Ben Gamari at 2024-12-10T14:34:09-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 2d97ed0b by Ben Gamari at 2024-12-11T11:14:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 001ae913 by Ben Gamari at 2024-12-11T11:14:57-05:00 testsuite: Add test for #25560 - - - - - 11 changed files: - docs/users_guide/using-concurrent.rst - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - testsuite/driver/testlib.py - + testsuite/tests/rts/T25560.hs - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -153,6 +153,14 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. changed while the program is running by calling ``Control.Concurrent.setNumCapabilities``. + +.. note:: + + The maximum number of capabilities supported by the GHC runtime system is + determined when at RTS startup to be either 256, the value given by + :rts-flag:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. + The following options affect the way the runtime schedules threads on CPUs: ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -394,13 +393,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +uint32_t max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -344,8 +349,6 @@ initCapability (Capability *cap, uint32_t i) * ------------------------------------------------------------------------- */ void initCapabilities (void) { - uint32_t i; - /* Declare a couple capability sets representing the process and clock domain. Each capability will get added to these capsets. */ traceCapsetCreate(CAPSET_OSPROCESS_DEFAULT, CapsetTypeOsProcess); @@ -354,7 +357,7 @@ void initCapabilities (void) // Initialise NUMA if (!RtsFlags.GcFlags.numa) { n_numa_nodes = 1; - for (i = 0; i < MAX_NUMA_NODES; i++) { + for (uint32_t i = 0; i < MAX_NUMA_NODES; i++) { numa_map[i] = 0; } } else if (RtsFlags.DebugFlags.numa) { @@ -388,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + uint32_t core_count = getNumberOfProcessors(); + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; @@ -401,6 +422,7 @@ void initCapabilities (void) #else /* !THREADED_RTS */ n_capabilities = 1; + capabilities = stgMallocBytes(sizeof(Capability), "initCapabilities"); capabilities[0] = &MainCapability; initCapability(&MainCapability, 0); @@ -412,7 +434,7 @@ void initCapabilities (void) // There are no free capabilities to begin with. We will start // a worker Task to each Capability, which will quickly put the // Capability on the free list when it finds nothing to do. - for (i = 0; i < n_numa_nodes; i++) { + for (uint32_t i = 0; i < n_numa_nodes; i++) { last_free_capability[i] = getCapability(0); } } ===================================== rts/Capability.h ===================================== @@ -270,11 +270,13 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,12 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count %" PRIu32 "; clamping...\n", max_n_capabilities); + new_n_capabilities = max_n_capabilities; } - debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", enabled_capabilities, new_n_capabilities); ===================================== rts/include/rts/Config.h ===================================== @@ -78,6 +78,10 @@ code. #endif #if defined(THREADED_RTS) +/* + * See Note [Capabilities array sizing] in rts/Capability.c. + * Update the note in docs/users_guide/using-concurrent.rst when updating this. + */ #define MAX_N_CAPABILITIES 256 #else #define MAX_N_CAPABILITIES 1 ===================================== rts/include/rts/Threads.h ===================================== @@ -69,7 +69,7 @@ HsBool rtsSupportsBoundThreads (void); // The number of Capabilities. // TODO: Ideally we would only provide getNumCapabilities // but this is used in compiler/cbits/genSym.c -extern unsigned int n_capabilities; +extern uint32_t n_capabilities; INLINE_HEADER unsigned int getNumCapabilities(void) { return RELAXED_LOAD(&n_capabilities); } @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern uint32_t max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/driver/testlib.py ===================================== @@ -270,6 +270,10 @@ def req_bco( name, opts ): # JS backend doesn't support ByteCode js_skip(name, opts) +def req_c_rts( name, opts ): + """ Require the C runtime system (rather than, e.g. the Javascript RTS). """ + js_skip(name, opts) + def req_rts_linker( name, opts ): if not config.have_RTS_linker: opts.expect = 'fail' ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/all.T ===================================== @@ -630,3 +630,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [req_c_rts, ignore_stderr], compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2de8eaedfa9c7212a26e64fe49e49e21c238b6b3...001ae913d4d9d27c0e394903523a94bd6a4ed43a -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2de8eaedfa9c7212a26e64fe49e49e21c238b6b3...001ae913d4d9d27c0e394903523a94bd6a4ed43a You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 19:03:59 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 11 Dec 2024 14:03:59 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 15 commits: rts: Annotate BCOs with their Name Message-ID: <6759e21f6cb04_e03b839df2883633@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 4f633c3a by Andrei Borzenkov at 2024-12-11T14:03:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 0f50d2d9 by Ben Gamari at 2024-12-11T14:03:43-05:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - f7e6b0ca by Ben Gamari at 2024-12-11T14:03:43-05:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 33b89c8a by Ben Gamari at 2024-12-11T14:03:43-05:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - a0bc3023 by Ben Gamari at 2024-12-11T14:03:43-05:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - 62d471ab by Ben Gamari at 2024-12-11T14:03:43-05:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - 35aa27f3 by Ben Gamari at 2024-12-11T14:03:43-05:00 gitlab-ci: Use system libffi on FreeBSD - - - - - ffaf35f8 by Ben Gamari at 2024-12-11T14:03:43-05:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - b75d19b0 by Ben Gamari at 2024-12-11T14:03:43-05:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - f26da5c2 by Ben Gamari at 2024-12-11T14:03:43-05:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - db420f1c by Ben Gamari at 2024-12-11T14:03:43-05:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 47fe7614 by Ben Gamari at 2024-12-11T14:03:43-05:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 02455f77 by Ben Gamari at 2024-12-11T14:03:43-05:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - 30 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Iface/Syntax.hs - compiler/GHC/Iface/Type.hs - compiler/GHC/StgToByteCode.hs - compiler/GHC/Unit/Info.hs - compiler/ghc.cabal.in - docs/users_guide/9.14.1-notes.rst - docs/users_guide/debugging.rst - docs/users_guide/ghci.rst - hadrian/src/Rules/Rts.hs - libraries/ghc-compact/tests/all.T - m4/find_ld.m4 - rts/Disassembler.c - rts/Interpreter.c - rts/include/rts/Bytecodes.h - rts/rts.cabal - testsuite/driver/testlib.py - testsuite/tests/backpack/should_fail/T19244a.stderr - testsuite/tests/backpack/should_fail/T19244b.stderr - testsuite/tests/backpack/should_fail/bkpfail46.stderr - testsuite/tests/concurrent/should_run/all.T - testsuite/tests/ghci/T18060/T18060.stdout - testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/10673bf03b67b241e0c58c4c524a58fb76fb78bb...02455f7788ed8839195333651aa34e70a660bb34 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/10673bf03b67b241e0c58c4c524a58fb76fb78bb...02455f7788ed8839195333651aa34e70a660bb34 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 11 21:30:40 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 11 Dec 2024 16:30:40 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 19 commits: testsuite: Unmark T14028 as broken on FreeBSD Message-ID: <675a0480ce4f4_223ec5a6551877465@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - c9a2b202 by Ben Gamari at 2024-12-11T16:30:13-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - ec1bce19 by Ben Gamari at 2024-12-11T16:30:13-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 7589fa1c by Ben Gamari at 2024-12-11T16:30:13-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - 25fb2d91 by Ben Gamari at 2024-12-11T16:30:13-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 258ed11f by Ben Gamari at 2024-12-11T16:30:13-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 45c86903 by Ben Gamari at 2024-12-11T16:30:13-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - dc646c2d by Ben Gamari at 2024-12-11T16:30:13-05:00 testsuite: Add test for #25560 - - - - - 19 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - docs/users_guide/using-concurrent.rst - libraries/ghc-compact/tests/all.T - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - testsuite/driver/testlib.py - testsuite/tests/concurrent/should_run/all.T - testsuite/tests/quasiquotation/all.T - + testsuite/tests/rts/T25560.hs - testsuite/tests/rts/all.T - testsuite/tests/rts/linker/all.T - testsuite/tests/th/all.T Changes: ===================================== .gitlab/ci.sh ===================================== @@ -326,13 +326,19 @@ function fetch_cabal() { local base_url="https://downloads.haskell.org/~cabal/cabal-install-$v/" case "$(uname)" in Darwin) cabal_url="$base_url/cabal-install-$v-x86_64-apple-darwin17.7.0.tar.xz" ;; - FreeBSD) cabal_url="$base_url/cabal-install-$v-x86_64-freebsd13.tar.xz" ;; + FreeBSD) cabal_url="$base_url/cabal-install-$v-x86_64-freebsd14.tar.xz" ;; *) fail "don't know where to fetch cabal-install for $(uname)" esac echo "Fetching cabal-install from $cabal_url" curl "$cabal_url" > cabal.tar.xz + tmp="$(tar -tJf cabal.tar.xz | head -n1)" $TAR -xJf cabal.tar.xz - mv cabal "$toolchain/bin" + # Check if the bindist has directory structure + if [[ "$tmp" = "cabal" ]]; then + mv cabal "$toolchain/bin" + else + mv "$tmp/cabal" "$toolchain/bin" + fi ;; esac end_section "fetch cabal" ===================================== .gitlab/generate-ci/gen_ci.hs ===================================== @@ -101,7 +101,7 @@ There are two different modes this script can operate in: data Opsys = Linux LinuxDistro | Darwin - | FreeBSD13 + | FreeBSD14 | Windows deriving (Eq) data LinuxDistro @@ -293,7 +293,7 @@ runnerTag arch (Linux _) = runnerTag AArch64 Darwin = "aarch64-darwin" runnerTag Amd64 Darwin = "x86_64-darwin-m1" runnerTag Amd64 Windows = "new-x86_64-windows" -runnerTag Amd64 FreeBSD13 = "x86_64-freebsd13" +runnerTag Amd64 FreeBSD14 = "x86_64-freebsd14" runnerTag _ _ = error "Invalid arch/opsys" tags :: Arch -> Opsys -> BuildConfig -> [String] @@ -326,7 +326,7 @@ distroName Rocky8 = "rocky8" opsysName :: Opsys -> String opsysName (Linux distro) = "linux-" ++ distroName distro opsysName Darwin = "darwin" -opsysName FreeBSD13 = "freebsd13" +opsysName FreeBSD14 = "freebsd14" opsysName Windows = "windows" archName :: Arch -> String @@ -423,15 +423,19 @@ brokenTest :: TestName -- ^ test name brokenTest test _why = "BROKEN_TESTS" =: test opsysVariables :: Arch -> Opsys -> Variables -opsysVariables _ FreeBSD13 = mconcat +opsysVariables _ FreeBSD14 = mconcat [ -- N.B. we use iconv from ports as I see linker errors when we attempt -- to use the "native" iconv embedded in libc as suggested by the -- porting guide [1]. -- [1] https://www.freebsd.org/doc/en/books/porters-handbook/using-iconv.html) - "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" - , "HADRIAN_ARGS" =: "--docs=no-sphinx" + "CONFIGURE_ARGS" =: "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib" + -- Prefer to use the system's clang-based toolchain and not gcc + , "CC" =: "cc" + , "CXX" =: "c++" , "GHC_VERSION" =: "9.6.4" - , "CABAL_INSTALL_VERSION" =: "3.10.2.0" + , "CABAL_INSTALL_VERSION" =: "3.10.3.0" ] opsysVariables arch (Linux distro) = distroVariables arch distro opsysVariables AArch64 (Darwin {}) = @@ -1140,6 +1144,11 @@ darwin = , fastCI (standardBuilds AArch64 Darwin) ] +freebsd_jobs :: [JobGroup Job] +freebsd_jobs = + [ addValidateRule FreeBSDLabel (standardBuilds Amd64 FreeBSD14) + ] + alpine_x86 :: [JobGroup Job] alpine_x86 = [ -- Fully static build, in theory usable on any linux distribution. @@ -1213,6 +1222,7 @@ job_groups = ++ alpine_x86 ++ alpine_aarch64 ++ cross_jobs + ++ freebsd_jobs mkPlatform :: Arch -> Opsys -> String ===================================== .gitlab/jobs.yaml ===================================== @@ -1082,6 +1082,72 @@ "ac_cv_func_utimensat": "no" } }, + "nightly-x86_64-freebsd14-validate": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "8 weeks", + "paths": [ + "ghc-x86_64-freebsd14-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "(\"true\" == \"true\") && ($RELEASE_JOB != \"yes\") && ($NIGHTLY)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BUILD_FLAVOUR": "validate", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-validate", + "XZ_OPT": "-9" + } + }, "nightly-x86_64-linux-alpine3_12-int_native-validate+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", @@ -3844,6 +3910,74 @@ "ac_cv_func_utimensat": "no" } }, + "release-x86_64-freebsd14-release": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "1 year", + "paths": [ + "ghc-x86_64-freebsd14-release.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "(\"true\" == \"true\") && ($RELEASE_JOB == \"yes\") && ($NIGHTLY == null)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-release", + "BUILD_FLAVOUR": "release", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "HADRIAN_ARGS": "--hash-unit-ids", + "IGNORE_PERF_FAILURES": "all", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-release", + "XZ_OPT": "-9" + } + }, "release-x86_64-linux-alpine3_12-int_native-release+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", @@ -5222,6 +5356,71 @@ "ac_cv_func_utimensat": "no" } }, + "x86_64-freebsd14-validate": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "2 weeks", + "paths": [ + "ghc-x86_64-freebsd14-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-freebsd14-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*FreeBSD.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BUILD_FLAVOUR": "validate", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-validate" + } + }, "x86_64-linux-alpine3_12-int_native-validate+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -153,6 +153,14 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. changed while the program is running by calling ``Control.Concurrent.setNumCapabilities``. + +.. note:: + + The maximum number of capabilities supported by the GHC runtime system is + determined when at RTS startup to be either 256, the value given by + :rts-flag:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. + The following options affect the way the runtime schedules threads on CPUs: ===================================== libraries/ghc-compact/tests/all.T ===================================== @@ -28,5 +28,8 @@ test('T18757', omit_ghci, compile_and_run, ['']) # N.B. Sanity check times out due to large list. test('T16992', [when(wordsize(32), skip), # Resource limit exceeded on 32-bit high_memory_usage, + # This test has extraordinary memory requirement, + # skip unless testing slow speed + unless(slow(), skip), run_timeout_multiplier(5), omit_ways(['sanity'])], compile_and_run, ['']) ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -394,13 +393,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +uint32_t max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -344,8 +349,6 @@ initCapability (Capability *cap, uint32_t i) * ------------------------------------------------------------------------- */ void initCapabilities (void) { - uint32_t i; - /* Declare a couple capability sets representing the process and clock domain. Each capability will get added to these capsets. */ traceCapsetCreate(CAPSET_OSPROCESS_DEFAULT, CapsetTypeOsProcess); @@ -354,7 +357,7 @@ void initCapabilities (void) // Initialise NUMA if (!RtsFlags.GcFlags.numa) { n_numa_nodes = 1; - for (i = 0; i < MAX_NUMA_NODES; i++) { + for (uint32_t i = 0; i < MAX_NUMA_NODES; i++) { numa_map[i] = 0; } } else if (RtsFlags.DebugFlags.numa) { @@ -388,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + uint32_t core_count = getNumberOfProcessors(); + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; @@ -401,6 +422,7 @@ void initCapabilities (void) #else /* !THREADED_RTS */ n_capabilities = 1; + capabilities = stgMallocBytes(sizeof(Capability), "initCapabilities"); capabilities[0] = &MainCapability; initCapability(&MainCapability, 0); @@ -412,7 +434,7 @@ void initCapabilities (void) // There are no free capabilities to begin with. We will start // a worker Task to each Capability, which will quickly put the // Capability on the free list when it finds nothing to do. - for (i = 0; i < n_numa_nodes; i++) { + for (uint32_t i = 0; i < n_numa_nodes; i++) { last_free_capability[i] = getCapability(0); } } ===================================== rts/Capability.h ===================================== @@ -270,11 +270,13 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,12 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count %" PRIu32 "; clamping...\n", max_n_capabilities); + new_n_capabilities = max_n_capabilities; } - debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", enabled_capabilities, new_n_capabilities); ===================================== rts/include/rts/Config.h ===================================== @@ -78,6 +78,10 @@ code. #endif #if defined(THREADED_RTS) +/* + * See Note [Capabilities array sizing] in rts/Capability.c. + * Update the note in docs/users_guide/using-concurrent.rst when updating this. + */ #define MAX_N_CAPABILITIES 256 #else #define MAX_N_CAPABILITIES 1 ===================================== rts/include/rts/Threads.h ===================================== @@ -69,7 +69,7 @@ HsBool rtsSupportsBoundThreads (void); // The number of Capabilities. // TODO: Ideally we would only provide getNumCapabilities // but this is used in compiler/cbits/genSym.c -extern unsigned int n_capabilities; +extern uint32_t n_capabilities; INLINE_HEADER unsigned int getNumCapabilities(void) { return RELAXED_LOAD(&n_capabilities); } @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern uint32_t max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/driver/testlib.py ===================================== @@ -270,6 +270,10 @@ def req_bco( name, opts ): # JS backend doesn't support ByteCode js_skip(name, opts) +def req_c_rts( name, opts ): + """ Require the C runtime system (rather than, e.g. the Javascript RTS). """ + js_skip(name, opts) + def req_rts_linker( name, opts ): if not config.have_RTS_linker: opts.expect = 'fail' @@ -970,6 +974,9 @@ def tables_next_to_code() -> bool: def fast() -> bool: return config.speed == 2 +def slow() -> bool: + return config.speed == 0 + def platform( plat: str ) -> bool: return config.platform == plat ===================================== testsuite/tests/concurrent/should_run/all.T ===================================== @@ -268,6 +268,7 @@ test('T21651', test('T21969', [ only_ways(['threaded1','threaded2', 'nonmoving_thr', 'profthreaded']), when(opsys('mingw32'),skip), # uses POSIX pipes + when(opsys('freebsd'), expect_broken(25512)), extra_run_opts('50000'), run_timeout_multiplier(0.3), # default timeout seems to be 300, but lockups happen quickly req_target_smp, ===================================== testsuite/tests/quasiquotation/all.T ===================================== @@ -8,6 +8,5 @@ test('T7918', test('T14028', [req_interp, req_rts_linker, only_ways([config.ghc_th_way]), - unless(config.have_ext_interp, skip), - when(opsys('freebsd'), expect_broken(19723))], + unless(config.have_ext_interp, skip)], makefile_test, ['T14028 ghcThWayFlags=' + config.ghc_th_way_flags]) ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/all.T ===================================== @@ -531,7 +531,9 @@ test('InitEventLogging', ], compile_and_run, ['InitEventLogging_c.c']) test('RestartEventLogging', - [only_ways(['threaded1','threaded2']), extra_run_opts('+RTS -la -RTS')], + [only_ways(['threaded1','threaded2']), + extra_run_opts('+RTS -la -RTS'), + when(opsys('freebsd'), fragile(19724))], compile_and_run, ['RestartEventLogging_c.c']) test('T17088', @@ -630,3 +632,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [req_c_rts, ignore_stderr], compile_and_run, ['']) ===================================== testsuite/tests/rts/linker/all.T ===================================== @@ -108,6 +108,7 @@ test('T5435_dyn_gcc', ###################################### test('linker_unload', [extra_files(['LinkerUnload.hs', 'Test.hs']), + when(opsys('freebsd'), expect_broken(25491)), req_rts_linker], makefile_test, ['linker_unload']) ===================================== testsuite/tests/th/all.T ===================================== @@ -488,9 +488,9 @@ test('T15471', normal, multimod_compile, ['T15471.hs', '-v0']) test('T16180', [when(llvm_build(), expect_broken_for(16541, ['ext-interp'])), req_asm, - # Ideally OpenBSD should have expect_broken_for(14012, ['ext-interp']). + # Ideally {Free,Open}BSD should have expect_broken_for(14012, ['ext-interp']). # Except the failure is in compilation so skip seems the best we can do. - when(opsys('openbsd'), skip), + when(opsys('openbsd') or opsys('freebsd'), skip), expect_broken_for(16541, ghci_ways)], compile_and_run, ['-package ghc']) test('T16183', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/02455f7788ed8839195333651aa34e70a660bb34...dc646c2d19c46899e67d205e80d79185c0c2279d -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/02455f7788ed8839195333651aa34e70a660bb34...dc646c2d19c46899e67d205e80d79185c0c2279d You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 00:00:40 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Wed, 11 Dec 2024 19:00:40 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25437 Message-ID: <675a27a8844fb_257502cee80c9853d@gitlab.mail> Simon Peyton Jones pushed new branch wip/T25437 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25437 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 00:30:57 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 11 Dec 2024 19:30:57 -0500 Subject: [Git][ghc/ghc][master] 12 commits: testsuite: Unmark T14028 as broken on FreeBSD Message-ID: <675a2ec1d0080_25750211a4b94105239@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - 10 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - libraries/ghc-compact/tests/all.T - testsuite/driver/testlib.py - testsuite/tests/concurrent/should_run/all.T - testsuite/tests/quasiquotation/all.T - testsuite/tests/rts/all.T - testsuite/tests/rts/linker/all.T - testsuite/tests/th/all.T Changes: ===================================== .gitlab/ci.sh ===================================== @@ -326,13 +326,19 @@ function fetch_cabal() { local base_url="https://downloads.haskell.org/~cabal/cabal-install-$v/" case "$(uname)" in Darwin) cabal_url="$base_url/cabal-install-$v-x86_64-apple-darwin17.7.0.tar.xz" ;; - FreeBSD) cabal_url="$base_url/cabal-install-$v-x86_64-freebsd13.tar.xz" ;; + FreeBSD) cabal_url="$base_url/cabal-install-$v-x86_64-freebsd14.tar.xz" ;; *) fail "don't know where to fetch cabal-install for $(uname)" esac echo "Fetching cabal-install from $cabal_url" curl "$cabal_url" > cabal.tar.xz + tmp="$(tar -tJf cabal.tar.xz | head -n1)" $TAR -xJf cabal.tar.xz - mv cabal "$toolchain/bin" + # Check if the bindist has directory structure + if [[ "$tmp" = "cabal" ]]; then + mv cabal "$toolchain/bin" + else + mv "$tmp/cabal" "$toolchain/bin" + fi ;; esac end_section "fetch cabal" ===================================== .gitlab/generate-ci/gen_ci.hs ===================================== @@ -101,7 +101,7 @@ There are two different modes this script can operate in: data Opsys = Linux LinuxDistro | Darwin - | FreeBSD13 + | FreeBSD14 | Windows deriving (Eq) data LinuxDistro @@ -293,7 +293,7 @@ runnerTag arch (Linux _) = runnerTag AArch64 Darwin = "aarch64-darwin" runnerTag Amd64 Darwin = "x86_64-darwin-m1" runnerTag Amd64 Windows = "new-x86_64-windows" -runnerTag Amd64 FreeBSD13 = "x86_64-freebsd13" +runnerTag Amd64 FreeBSD14 = "x86_64-freebsd14" runnerTag _ _ = error "Invalid arch/opsys" tags :: Arch -> Opsys -> BuildConfig -> [String] @@ -326,7 +326,7 @@ distroName Rocky8 = "rocky8" opsysName :: Opsys -> String opsysName (Linux distro) = "linux-" ++ distroName distro opsysName Darwin = "darwin" -opsysName FreeBSD13 = "freebsd13" +opsysName FreeBSD14 = "freebsd14" opsysName Windows = "windows" archName :: Arch -> String @@ -423,15 +423,19 @@ brokenTest :: TestName -- ^ test name brokenTest test _why = "BROKEN_TESTS" =: test opsysVariables :: Arch -> Opsys -> Variables -opsysVariables _ FreeBSD13 = mconcat +opsysVariables _ FreeBSD14 = mconcat [ -- N.B. we use iconv from ports as I see linker errors when we attempt -- to use the "native" iconv embedded in libc as suggested by the -- porting guide [1]. -- [1] https://www.freebsd.org/doc/en/books/porters-handbook/using-iconv.html) - "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" - , "HADRIAN_ARGS" =: "--docs=no-sphinx" + "CONFIGURE_ARGS" =: "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib" + , "CONFIGURE_ARGS" =: "--with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib" + -- Prefer to use the system's clang-based toolchain and not gcc + , "CC" =: "cc" + , "CXX" =: "c++" , "GHC_VERSION" =: "9.6.4" - , "CABAL_INSTALL_VERSION" =: "3.10.2.0" + , "CABAL_INSTALL_VERSION" =: "3.10.3.0" ] opsysVariables arch (Linux distro) = distroVariables arch distro opsysVariables AArch64 (Darwin {}) = @@ -1140,6 +1144,11 @@ darwin = , fastCI (standardBuilds AArch64 Darwin) ] +freebsd_jobs :: [JobGroup Job] +freebsd_jobs = + [ addValidateRule FreeBSDLabel (standardBuilds Amd64 FreeBSD14) + ] + alpine_x86 :: [JobGroup Job] alpine_x86 = [ -- Fully static build, in theory usable on any linux distribution. @@ -1213,6 +1222,7 @@ job_groups = ++ alpine_x86 ++ alpine_aarch64 ++ cross_jobs + ++ freebsd_jobs mkPlatform :: Arch -> Opsys -> String ===================================== .gitlab/jobs.yaml ===================================== @@ -1082,6 +1082,72 @@ "ac_cv_func_utimensat": "no" } }, + "nightly-x86_64-freebsd14-validate": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "8 weeks", + "paths": [ + "ghc-x86_64-freebsd14-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "(\"true\" == \"true\") && ($RELEASE_JOB != \"yes\") && ($NIGHTLY)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BUILD_FLAVOUR": "validate", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-validate", + "XZ_OPT": "-9" + } + }, "nightly-x86_64-linux-alpine3_12-int_native-validate+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", @@ -3844,6 +3910,74 @@ "ac_cv_func_utimensat": "no" } }, + "release-x86_64-freebsd14-release": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "1 year", + "paths": [ + "ghc-x86_64-freebsd14-release.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "(\"true\" == \"true\") && ($RELEASE_JOB == \"yes\") && ($NIGHTLY == null)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-release", + "BUILD_FLAVOUR": "release", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "HADRIAN_ARGS": "--hash-unit-ids", + "IGNORE_PERF_FAILURES": "all", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-release", + "XZ_OPT": "-9" + } + }, "release-x86_64-linux-alpine3_12-int_native-release+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", @@ -5222,6 +5356,71 @@ "ac_cv_func_utimensat": "no" } }, + "x86_64-freebsd14-validate": { + "after_script": [ + ".gitlab/ci.sh save_cache", + ".gitlab/ci.sh save_test_output", + ".gitlab/ci.sh clean", + "cat ci_timings" + ], + "allow_failure": false, + "artifacts": { + "expire_in": "2 weeks", + "paths": [ + "ghc-x86_64-freebsd14-validate.tar.xz", + "junit.xml", + "unexpected-test-output.tar.gz" + ], + "reports": { + "junit": "junit.xml" + }, + "when": "always" + }, + "cache": { + "key": "x86_64-freebsd14-$CACHE_REV", + "paths": [ + "cabal-cache", + "toolchain" + ] + }, + "dependencies": [], + "image": null, + "needs": [ + { + "artifacts": false, + "job": "hadrian-ghc-in-ghci" + } + ], + "rules": [ + { + "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-freebsd14-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*FreeBSD.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)", + "when": "on_success" + } + ], + "script": [ + ".gitlab/ci.sh setup", + ".gitlab/ci.sh configure", + ".gitlab/ci.sh build_hadrian", + ".gitlab/ci.sh test_hadrian" + ], + "stage": "full-build", + "tags": [ + "x86_64-freebsd14" + ], + "variables": { + "BIGNUM_BACKEND": "gmp", + "BIN_DIST_NAME": "ghc-x86_64-freebsd14-validate", + "BUILD_FLAVOUR": "validate", + "CABAL_INSTALL_VERSION": "3.10.3.0", + "CC": "cc", + "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", + "CXX": "c++", + "GHC_VERSION": "9.6.4", + "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", + "RUNTEST_ARGS": "", + "TEST_ENV": "x86_64-freebsd14-validate" + } + }, "x86_64-linux-alpine3_12-int_native-validate+fully_static": { "after_script": [ ".gitlab/ci.sh save_cache", ===================================== libraries/ghc-compact/tests/all.T ===================================== @@ -28,5 +28,8 @@ test('T18757', omit_ghci, compile_and_run, ['']) # N.B. Sanity check times out due to large list. test('T16992', [when(wordsize(32), skip), # Resource limit exceeded on 32-bit high_memory_usage, + # This test has extraordinary memory requirement, + # skip unless testing slow speed + unless(slow(), skip), run_timeout_multiplier(5), omit_ways(['sanity'])], compile_and_run, ['']) ===================================== testsuite/driver/testlib.py ===================================== @@ -970,6 +970,9 @@ def tables_next_to_code() -> bool: def fast() -> bool: return config.speed == 2 +def slow() -> bool: + return config.speed == 0 + def platform( plat: str ) -> bool: return config.platform == plat ===================================== testsuite/tests/concurrent/should_run/all.T ===================================== @@ -268,6 +268,7 @@ test('T21651', test('T21969', [ only_ways(['threaded1','threaded2', 'nonmoving_thr', 'profthreaded']), when(opsys('mingw32'),skip), # uses POSIX pipes + when(opsys('freebsd'), expect_broken(25512)), extra_run_opts('50000'), run_timeout_multiplier(0.3), # default timeout seems to be 300, but lockups happen quickly req_target_smp, ===================================== testsuite/tests/quasiquotation/all.T ===================================== @@ -8,6 +8,5 @@ test('T7918', test('T14028', [req_interp, req_rts_linker, only_ways([config.ghc_th_way]), - unless(config.have_ext_interp, skip), - when(opsys('freebsd'), expect_broken(19723))], + unless(config.have_ext_interp, skip)], makefile_test, ['T14028 ghcThWayFlags=' + config.ghc_th_way_flags]) ===================================== testsuite/tests/rts/all.T ===================================== @@ -531,7 +531,9 @@ test('InitEventLogging', ], compile_and_run, ['InitEventLogging_c.c']) test('RestartEventLogging', - [only_ways(['threaded1','threaded2']), extra_run_opts('+RTS -la -RTS')], + [only_ways(['threaded1','threaded2']), + extra_run_opts('+RTS -la -RTS'), + when(opsys('freebsd'), fragile(19724))], compile_and_run, ['RestartEventLogging_c.c']) test('T17088', ===================================== testsuite/tests/rts/linker/all.T ===================================== @@ -108,6 +108,7 @@ test('T5435_dyn_gcc', ###################################### test('linker_unload', [extra_files(['LinkerUnload.hs', 'Test.hs']), + when(opsys('freebsd'), expect_broken(25491)), req_rts_linker], makefile_test, ['linker_unload']) ===================================== testsuite/tests/th/all.T ===================================== @@ -488,9 +488,9 @@ test('T15471', normal, multimod_compile, ['T15471.hs', '-v0']) test('T16180', [when(llvm_build(), expect_broken_for(16541, ['ext-interp'])), req_asm, - # Ideally OpenBSD should have expect_broken_for(14012, ['ext-interp']). + # Ideally {Free,Open}BSD should have expect_broken_for(14012, ['ext-interp']). # Except the failure is in compilation so skip seems the best we can do. - when(opsys('openbsd'), skip), + when(opsys('openbsd') or opsys('freebsd'), skip), expect_broken_for(16541, ghci_ways)], compile_and_run, ['-package ghc']) test('T16183', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/992259962191b0b774dfeeabb46729376c7fe7cf...57e3cab542e238ac14aad42827e757fb115a9f76 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/992259962191b0b774dfeeabb46729376c7fe7cf...57e3cab542e238ac14aad42827e757fb115a9f76 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 00:31:37 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 11 Dec 2024 19:31:37 -0500 Subject: [Git][ghc/ghc][master] 7 commits: rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS Message-ID: <675a2ee97ac3c_25750214792341090cd@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - 11 changed files: - docs/users_guide/using-concurrent.rst - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - rts/Capability.c - rts/Capability.h - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - testsuite/driver/testlib.py - + testsuite/tests/rts/T25560.hs - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -153,6 +153,14 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. changed while the program is running by calling ``Control.Concurrent.setNumCapabilities``. + +.. note:: + + The maximum number of capabilities supported by the GHC runtime system is + determined when at RTS startup to be either 256, the value given by + :rts-flag:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. + The following options affect the way the runtime schedules threads on CPUs: ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -394,13 +393,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +uint32_t max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -344,8 +349,6 @@ initCapability (Capability *cap, uint32_t i) * ------------------------------------------------------------------------- */ void initCapabilities (void) { - uint32_t i; - /* Declare a couple capability sets representing the process and clock domain. Each capability will get added to these capsets. */ traceCapsetCreate(CAPSET_OSPROCESS_DEFAULT, CapsetTypeOsProcess); @@ -354,7 +357,7 @@ void initCapabilities (void) // Initialise NUMA if (!RtsFlags.GcFlags.numa) { n_numa_nodes = 1; - for (i = 0; i < MAX_NUMA_NODES; i++) { + for (uint32_t i = 0; i < MAX_NUMA_NODES; i++) { numa_map[i] = 0; } } else if (RtsFlags.DebugFlags.numa) { @@ -388,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + uint32_t core_count = getNumberOfProcessors(); + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; @@ -401,6 +422,7 @@ void initCapabilities (void) #else /* !THREADED_RTS */ n_capabilities = 1; + capabilities = stgMallocBytes(sizeof(Capability), "initCapabilities"); capabilities[0] = &MainCapability; initCapability(&MainCapability, 0); @@ -412,7 +434,7 @@ void initCapabilities (void) // There are no free capabilities to begin with. We will start // a worker Task to each Capability, which will quickly put the // Capability on the free list when it finds nothing to do. - for (i = 0; i < n_numa_nodes; i++) { + for (uint32_t i = 0; i < n_numa_nodes; i++) { last_free_capability[i] = getCapability(0); } } ===================================== rts/Capability.h ===================================== @@ -270,11 +270,13 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,12 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count %" PRIu32 "; clamping...\n", max_n_capabilities); + new_n_capabilities = max_n_capabilities; } - debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", enabled_capabilities, new_n_capabilities); ===================================== rts/include/rts/Config.h ===================================== @@ -78,6 +78,10 @@ code. #endif #if defined(THREADED_RTS) +/* + * See Note [Capabilities array sizing] in rts/Capability.c. + * Update the note in docs/users_guide/using-concurrent.rst when updating this. + */ #define MAX_N_CAPABILITIES 256 #else #define MAX_N_CAPABILITIES 1 ===================================== rts/include/rts/Threads.h ===================================== @@ -69,7 +69,7 @@ HsBool rtsSupportsBoundThreads (void); // The number of Capabilities. // TODO: Ideally we would only provide getNumCapabilities // but this is used in compiler/cbits/genSym.c -extern unsigned int n_capabilities; +extern uint32_t n_capabilities; INLINE_HEADER unsigned int getNumCapabilities(void) { return RELAXED_LOAD(&n_capabilities); } @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern uint32_t max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/driver/testlib.py ===================================== @@ -270,6 +270,10 @@ def req_bco( name, opts ): # JS backend doesn't support ByteCode js_skip(name, opts) +def req_c_rts( name, opts ): + """ Require the C runtime system (rather than, e.g. the Javascript RTS). """ + js_skip(name, opts) + def req_rts_linker( name, opts ): if not config.have_RTS_linker: opts.expect = 'fail' ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/all.T ===================================== @@ -632,3 +632,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [req_c_rts, ignore_stderr], compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/57e3cab542e238ac14aad42827e757fb115a9f76...683115a40fd989a287fa51efe140af9448526098 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/57e3cab542e238ac14aad42827e757fb115a9f76...683115a40fd989a287fa51efe140af9448526098 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 01:32:33 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 11 Dec 2024 20:32:33 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 9 commits: rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS Message-ID: <675a3d312bf27_2575021b57fec12030@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - 1c8881d5 by Ben Gamari at 2024-12-11T20:32:20-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 24db56de by Ben Gamari at 2024-12-11T20:32:20-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 12 changed files: - docs/users_guide/using-concurrent.rst - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - rts/Capability.c - rts/Capability.h - rts/CheckUnload.c - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - testsuite/driver/testlib.py - + testsuite/tests/rts/T25560.hs - testsuite/tests/rts/all.T Changes: ===================================== docs/users_guide/using-concurrent.rst ===================================== @@ -153,6 +153,14 @@ use the RTS :rts-flag:`-N ⟨x⟩` options. changed while the program is running by calling ``Control.Concurrent.setNumCapabilities``. + +.. note:: + + The maximum number of capabilities supported by the GHC runtime system is + determined when at RTS startup to be either 256, the value given by + :rts-flag:`-N ⟨x⟩`, or the number of logical CPU cores, whichever is + greater. + The following options affect the way the runtime schedules threads on CPUs: ===================================== libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs ===================================== @@ -1,4 +1,3 @@ -{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-} @@ -394,13 +393,14 @@ getNumProcessors :: IO Int getNumProcessors = fmap fromIntegral c_getNumberOfProcessors foreign import ccall unsafe "getNumberOfProcessors" - c_getNumberOfProcessors :: IO CUInt + c_getNumberOfProcessors :: IO Word32 -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt +foreign import ccall "&enabled_capabilities" + enabled_capabilities :: Ptr Word32 childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler ===================================== rts/Capability.c ===================================== @@ -16,6 +16,7 @@ * * --------------------------------------------------------------------------*/ +#include "rts/Config.h" #include "rts/PosixSource.h" #include "Rts.h" @@ -40,12 +41,16 @@ Capability MainCapability; uint32_t n_capabilities = 0; uint32_t enabled_capabilities = 0; +// The size of the `capabilities` array initialized at RTS startup. Referenced +// by GHC.Internal.Conc.Sync +uint32_t max_n_capabilities = MAX_N_CAPABILITIES; + // The array of Capabilities. It's important that when we need // to allocate more Capabilities we don't have to move the existing // Capabilities, because there may be pointers to them in use // (e.g. threads in waitForCapability(), see #8209), so this is // an array of Capability* rather than an array of Capability. -Capability *capabilities[MAX_N_CAPABILITIES]; +Capability **capabilities; // Holds the Capability which last became free. This is used so that // an in-call has a chance of quickly finding a free Capability. @@ -344,8 +349,6 @@ initCapability (Capability *cap, uint32_t i) * ------------------------------------------------------------------------- */ void initCapabilities (void) { - uint32_t i; - /* Declare a couple capability sets representing the process and clock domain. Each capability will get added to these capsets. */ traceCapsetCreate(CAPSET_OSPROCESS_DEFAULT, CapsetTypeOsProcess); @@ -354,7 +357,7 @@ void initCapabilities (void) // Initialise NUMA if (!RtsFlags.GcFlags.numa) { n_numa_nodes = 1; - for (i = 0; i < MAX_NUMA_NODES; i++) { + for (uint32_t i = 0; i < MAX_NUMA_NODES; i++) { numa_map[i] = 0; } } else if (RtsFlags.DebugFlags.numa) { @@ -388,12 +391,30 @@ void initCapabilities (void) } #endif - if (RtsFlags.ParFlags.nCapabilities > MAX_N_CAPABILITIES) { - errorBelch("warning: this GHC runtime system only supports up to %d capabilities", - MAX_N_CAPABILITIES); - RtsFlags.ParFlags.nCapabilities = MAX_N_CAPABILITIES; + /* + * Note [Capabilities array sizing] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Determine the size of the capabilities array as the maximum of: + * * the static lower bound, `MAX_N_CAPABILITIES` + * * the logical core count + * * the users's choice of `+RTS -N` + * This will serve as the upper bound on the capability count for the rest + * of execution. Calls to `setNumCapabilities` exceeding this bound will + * issue a warning and otherwise have no effect. + * + * See #25560. + */ + uint32_t core_count = getNumberOfProcessors(); + if (core_count > max_n_capabilities) { + max_n_capabilities = core_count; } + if (RtsFlags.ParFlags.nCapabilities > max_n_capabilities) { + max_n_capabilities = RtsFlags.ParFlags.nCapabilities; + } + + capabilities = stgMallocBytes(sizeof(Capability) * max_n_capabilities, "initCapabilities"); + n_capabilities = 0; moreCapabilities(0, RtsFlags.ParFlags.nCapabilities); n_capabilities = RtsFlags.ParFlags.nCapabilities; @@ -401,6 +422,7 @@ void initCapabilities (void) #else /* !THREADED_RTS */ n_capabilities = 1; + capabilities = stgMallocBytes(sizeof(Capability), "initCapabilities"); capabilities[0] = &MainCapability; initCapability(&MainCapability, 0); @@ -412,7 +434,7 @@ void initCapabilities (void) // There are no free capabilities to begin with. We will start // a worker Task to each Capability, which will quickly put the // Capability on the free list when it finds nothing to do. - for (i = 0; i < n_numa_nodes; i++) { + for (uint32_t i = 0; i < n_numa_nodes; i++) { last_free_capability[i] = getCapability(0); } } ===================================== rts/Capability.h ===================================== @@ -270,11 +270,13 @@ INLINE_HEADER void releaseCapability_ (Capability* cap STG_UNUSED, // extern Capability MainCapability; // declared in rts/include/rts/Threads.h: +// extern uint32_t max_n_capabilities; // extern uint32_t n_capabilities; // extern uint32_t enabled_capabilities; -// Array of all the capabilities -extern Capability *capabilities[MAX_N_CAPABILITIES]; +// Array of all the capabilities, of size max_n_capabilities +// See Note [Capabilities array sizing] in rts/Capability.c. +extern Capability **capabilities; INLINE_HEADER Capability *getCapability(uint32_t i) { ===================================== rts/CheckUnload.c ===================================== @@ -166,7 +166,7 @@ ObjectCode *loaded_objects; static OCSectionIndices *global_s_indices = NULL; // Is it safe for us to unload code? -static bool safeToUnload(void) +static bool tryToUnload(void) { if (RtsFlags.ProfFlags.doHeapProfile != NO_HEAP_PROFILING) { // We mustn't unload anything as the heap census may contain @@ -174,7 +174,8 @@ static bool safeToUnload(void) // See #24512. return false; } - return true; + + return global_s_indices != NULL; } static OCSectionIndices *createOCSectionIndices(void) @@ -432,7 +433,7 @@ static bool markObjectLive(void *data STG_UNUSED, StgWord key, const void *value void markObjectCode(const void *addr) { - if (global_s_indices == NULL) { + if (!tryToUnload()) { return; } @@ -450,7 +451,7 @@ void markObjectCode(const void *addr) // unloading. bool prepareUnloadCheck(void) { - if (global_s_indices == NULL) { + if (!tryToUnload()) { return false; } @@ -472,7 +473,7 @@ void checkUnload(void) // code (loaded_objects). Mark the roots first, then unload any unmarked // objects. - if (global_s_indices != NULL && safeToUnload()) { + if (tryToUnload()) { OCSectionIndices *s_indices = global_s_indices; ASSERT(s_indices->sorted); ===================================== rts/RtsSymbols.c ===================================== @@ -909,6 +909,7 @@ extern char **environ; SymI_NeedsDataProto(rts_stop_on_exception) \ SymI_HasProto(stopTimer) \ SymI_HasProto(n_capabilities) \ + SymI_HasProto(max_n_capabilities) \ SymI_HasProto(enabled_capabilities) \ SymI_HasDataProto(stg_traceEventzh) \ SymI_HasDataProto(stg_traceMarkerzh) \ ===================================== rts/Schedule.c ===================================== @@ -2288,9 +2288,12 @@ setNumCapabilities (uint32_t new_n_capabilities USED_IF_THREADS) } else if (new_n_capabilities <= 0) { errorBelch("setNumCapabilities: Capability count must be positive"); return; + } else if (new_n_capabilities > max_n_capabilities) { + // See Note [Capabilities array sizing] in rts/Capability.c. + errorBelch("setNumCapabilities: Attempt to increase capability count beyond maximum capability count %" PRIu32 "; clamping...\n", max_n_capabilities); + new_n_capabilities = max_n_capabilities; } - debugTrace(DEBUG_sched, "changing the number of Capabilities from %d to %d", enabled_capabilities, new_n_capabilities); ===================================== rts/include/rts/Config.h ===================================== @@ -78,6 +78,10 @@ code. #endif #if defined(THREADED_RTS) +/* + * See Note [Capabilities array sizing] in rts/Capability.c. + * Update the note in docs/users_guide/using-concurrent.rst when updating this. + */ #define MAX_N_CAPABILITIES 256 #else #define MAX_N_CAPABILITIES 1 ===================================== rts/include/rts/Threads.h ===================================== @@ -69,7 +69,7 @@ HsBool rtsSupportsBoundThreads (void); // The number of Capabilities. // TODO: Ideally we would only provide getNumCapabilities // but this is used in compiler/cbits/genSym.c -extern unsigned int n_capabilities; +extern uint32_t n_capabilities; INLINE_HEADER unsigned int getNumCapabilities(void) { return RELAXED_LOAD(&n_capabilities); } @@ -77,6 +77,10 @@ INLINE_HEADER unsigned int getNumCapabilities(void) // The number of Capabilities that are not disabled extern uint32_t enabled_capabilities; +// The maximum number of Capabilities supported by the RTS. +// See Note [Capabilities array sizing] in rts/Capability.c. +extern uint32_t max_n_capabilities; + #if !IN_STG_CODE extern Capability MainCapability; #endif ===================================== testsuite/driver/testlib.py ===================================== @@ -270,6 +270,10 @@ def req_bco( name, opts ): # JS backend doesn't support ByteCode js_skip(name, opts) +def req_c_rts( name, opts ): + """ Require the C runtime system (rather than, e.g. the Javascript RTS). """ + js_skip(name, opts) + def req_rts_linker( name, opts ): if not config.have_RTS_linker: opts.expect = 'fail' ===================================== testsuite/tests/rts/T25560.hs ===================================== @@ -0,0 +1,4 @@ +import GHC.Conc + +main :: IO () +main = setNumCapabilities 100000 ===================================== testsuite/tests/rts/all.T ===================================== @@ -447,7 +447,7 @@ test('T14497', [omit_ways(['profasm']), multi_cpu_race], compile_and_run, ['-O'] # The issue in the above test also happened with compaction enabled. test('T14497-compact', [ extra_files(['T14497.hs']) - , omit_ways(['profasm']) + , only_ways(['normal']) , multi_cpu_race , extra_run_opts('+RTS -c -RTS') ] , compile_and_run, ['-O']) @@ -632,3 +632,7 @@ test('T24142', [req_target_smp], compile_and_run, ['-threaded -with-rtsopts "-N2 test('T25232', [unless(have_profiling(), skip), only_ways(['normal','nonmoving','nonmoving_prof','nonmoving_thr_prof']), extra_ways(['nonmoving', 'nonmoving_prof'] + (['nonmoving_thr_prof'] if have_threaded() else []))], compile_and_run, ['']) test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_run, ['']) + +# N.B. This will likely issue a warning on stderr but we merely care that the +# program doesn't crash. +test('T25560', [req_c_rts, ignore_stderr], compile_and_run, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/dc646c2d19c46899e67d205e80d79185c0c2279d...24db56deeca96c05c0818c2359a414b0c4b2c9ee -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/dc646c2d19c46899e67d205e80d79185c0c2279d...24db56deeca96c05c0818c2359a414b0c4b2c9ee You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 05:56:59 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Thu, 12 Dec 2024 00:56:59 -0500 Subject: [Git][ghc/ghc][wip/sand-witch/tysyn-info-ppr] Update GHCi :info type declaration printing (#24459) Message-ID: <675a7b2b16e04_2848e9173052c47625@gitlab.mail> Andrei Borzenkov pushed to branch wip/sand-witch/tysyn-info-ppr at Glasgow Haskell Compiler / GHC Commits: 0da48670 by Andrei Borzenkov at 2024-12-12T09:56:24+04:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 29 changed files: - compiler/GHC/Core/TyCon.hs - compiler/GHC/Iface/Syntax.hs - compiler/GHC/Iface/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/ghci.rst - testsuite/tests/backpack/should_fail/T19244a.stderr - testsuite/tests/backpack/should_fail/T19244b.stderr - testsuite/tests/backpack/should_fail/bkpfail46.stderr - testsuite/tests/ghci/T18060/T18060.stdout - testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout - testsuite/tests/ghci/scripts/T15941.stdout - testsuite/tests/ghci/scripts/T19310.stdout - testsuite/tests/ghci/scripts/T21294a.stdout - + testsuite/tests/ghci/scripts/T24459.script - + testsuite/tests/ghci/scripts/T24459.stdout - testsuite/tests/ghci/scripts/T8535.stdout - testsuite/tests/ghci/scripts/T9181.stdout - testsuite/tests/ghci/scripts/all.T - testsuite/tests/ghci/scripts/ghci020.stdout - testsuite/tests/ghci/should_run/T10145.stdout - testsuite/tests/ghci/should_run/T18594.stdout - 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/interface-stability/template-haskell-exports.stdout - testsuite/tests/rep-poly/RepPolyBackpack3.stderr Changes: ===================================== compiler/GHC/Core/TyCon.hs ===================================== @@ -24,7 +24,8 @@ module GHC.Core.TyCon( mkRequiredTyConBinder, mkAnonTyConBinder, mkAnonTyConBinders, tyConBinderForAllTyFlag, tyConBndrVisForAllTyFlag, isNamedTyConBinder, - isVisibleTyConBinder, isInvisibleTyConBinder, + isVisibleTyConBinder, isInvisSpecTyConBinder, isInvisibleTyConBinder, + isInferredTyConBinder, isVisibleTcbVis, isInvisSpecTcbVis, -- ** Field labels @@ -487,7 +488,7 @@ mkRequiredTyConBinder dep_set tv | tv `elemVarSet` dep_set = mkNamedTyConBinder Required tv | otherwise = mkAnonTyConBinder tv -tyConBinderForAllTyFlag :: TyConBinder -> ForAllTyFlag +tyConBinderForAllTyFlag :: VarBndr a TyConBndrVis -> ForAllTyFlag tyConBinderForAllTyFlag (Bndr _ vis) = tyConBndrVisForAllTyFlag vis tyConBndrVisForAllTyFlag :: TyConBndrVis -> ForAllTyFlag @@ -513,10 +514,22 @@ isInvisSpecTcbVis :: TyConBndrVis -> Bool isInvisSpecTcbVis (NamedTCB Specified) = True isInvisSpecTcbVis _ = False +isInvisInferTcbVis :: TyConBndrVis -> Bool +isInvisInferTcbVis (NamedTCB Inferred) = True +isInvisInferTcbVis _ = False + +isInvisSpecTyConBinder :: VarBndr tv TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInvisSpecTyConBinder (Bndr _ tcb_vis) = isInvisSpecTcbVis tcb_vis + isInvisibleTyConBinder :: VarBndr tv TyConBndrVis -> Bool -- Works for IfaceTyConBinder too isInvisibleTyConBinder tcb = not (isVisibleTyConBinder tcb) +isInferredTyConBinder :: VarBndr var TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInferredTyConBinder (Bndr _ tcb_vis) = isInvisInferTcbVis tcb_vis + -- Build the 'tyConKind' from the binders and the result kind. -- Keep in sync with 'mkTyConKind' in GHC.Iface.Type. mkTyConKind :: [TyConBinder] -> Kind -> Kind ===================================== compiler/GHC/Iface/Syntax.hs ===================================== @@ -100,6 +100,7 @@ import Control.Monad import System.IO.Unsafe import Control.DeepSeq import Data.Proxy +import qualified Data.Set as Set infixl 3 &&& @@ -912,15 +913,226 @@ constraintIfaceKind :: IfaceKind constraintIfaceKind = IfaceTyConApp (IfaceTyCon constraintKindTyConName (mkIfaceTyConInfo NotPromoted IfaceNormalTyCon)) IA_Nil +{- Note [Print invisible binders in interface declarations] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Starting from GHC 9.8 it is possible to write invisible @-binders +in type-level declarations. That feature introduced several challenges +in interface declaration pretty printing (e.g. using the :info command +inside GHCi) to overcome. + +Consider this example with a redundant type variable `a`: + + type Id :: forall a b. b -> b + type Id x = x + +GHC will create system binders for kinds there to meet typechecking +and compilation needs and that will turn that declaration into a less +straightforward form with multiple @-binders: + + type Id :: forall {k} (a :: k) b. b -> b + type Id @{k} @a @b x = x :: b + +This information isn't required for understanding in most cases, +so GHC will hide it unless -fprint-explicit-kinds flag is supplied by the user. +And here is what we get: + + type Id :: forall {k} (a :: k) b. b -> b + type Id x = x + +However, there are several cases involving user-written @-binders +when it is cruicial to show them to provide understanding of what's going on. +First of all it can plainly appear on the right-hand side: + + type T :: forall (a :: Type). Type + type T @x = Tuple2 x x + +Not only that, an invisible binder can be unused by itself, but have an +impact on invisible binder positioning, e.g.: + + type T :: forall (a :: Type) (b :: Type). Type + type T @x @y = Tuple2 y y + +Here `x` is unused, but it is required to display, as `y` corresponds +to `b` in the standalone kind signature. + +The last problem is related to non-generative type declarations (type +synonyms and type families) only. It is not possible to partially +apply them, hence it's important to understand what parts of a declaration's +kind are related to the declaration itself. Here is a simple example: + + type T1 :: forall k. k -> Maybe k + type T1 = Just + + type T2 :: forall k. k -> Maybe k + type T2 @k = Just + +Both these type synonyms have the same kind signature, but they aren't +the same! `T1` can be used in strictly more cases, for example, as +an argument for a higher-order type: + + type F :: (forall k. k -> Maybe k) -> Type + + type R1 = F T1 -- Yes! + type R2 = F T2 -- No, that will not compile :( + +User-written invisible binders and "system" binders introduced by GHC +are indistinguishable at this stage, hence we try to only print +semantically significant binders by default. + +An invisible binder is considered significant when it meets at least +one of the following two criteria: + - It visibly occurs in the declaration's body (See more about that below) + - It is followed by a significant binder, + so it affects positioning +For non-generative type declarations (type synonyms and type families), +there is one additional criterion: + - It is not followed by a visible binder, so it + affects the arity of a type declaration + +The overall solution consists of three functions: +- `iface_decl_non_generative` decides whether the current declaration is + generative or not + +- `iface_decl_mentioned_vars` gives a Set of variables that + visibly occur in the declaration's body + +- `suppressIfaceInvisibles` uses information provided + by the first two functions to actually filter out insignificant + @-binders + +Here is what we consider "visibly occurs" in general and for +each declaration type: + +- Variables that visibly occur in IfaceType are collected by the + `visibleTypeVarOccurencies` function. + +- Variables that visibly occur in IfaceAT are collected by `iface_at_mentioned_vars` + function. It accounts visible binders for associated data and type + families and for type families only, it counts invisible binders. + Associated types can't have definitions, so it's safe to drop all other + binders. + +- None of the type variables in IfaceData declared using GADT syntax doesn't are considered + as visibe occurrences. This is because each constructor has its own variables, e.g.: + + type D :: forall (a :: Type). Type + data D @a where + MkD :: D @b + -- This is shorthand for: + -- MkD :: forall b. D @b + +- For IfaceData declared using Haskell98 syntax, a variable is considered visible + if it visibly occurs in at least one argument's type in at least one constructor. + +- For IfaceSynonym, a variable is considered visible if it visibly occurs + in the RHS type. + +- For IfaceFamily, a variable is considered visible if i occurs inside + an injectivity annotation, e.g. + + type family F @a = r | r -> a + +- For IfaceClass, a variable is considered visible if it occurs at least + once inside a functional dependency annotation or in at least one method's + type signature, or if it visibly occurs in at least one associated type's + declaration (Visible occurrences in associated types are described above.) + +- IfacePatSyn, IfaceId and IfaceAxiom are irrelevant to this problem. +-} + +iface_decl_generative :: IfaceDecl -> Bool +iface_decl_generative IfaceSynonym{} = False +iface_decl_generative IfaceFamily{ifFamFlav = rhs} + | IfaceDataFamilyTyCon <- rhs = True + | otherwise = False +iface_decl_generative IfaceData{} = True +iface_decl_generative IfaceId{} = True +iface_decl_generative IfaceClass{} = True +iface_decl_generative IfaceAxiom{} = True +iface_decl_generative IfacePatSyn{} = True + +iface_at_mentioned_vars :: IfaceAT -> Set.Set IfLclName +iface_at_mentioned_vars (IfaceAT decl _) + = Set.fromList . map ifTyConBinderName . suppress_vars $ binders + where + -- ifBinders is not total, so we assume here that associated types + -- cannot be IfaceId, IfaceAxiom or IfacePatSyn + binders = case decl of + IfaceFamily {ifBinders} -> ifBinders + IfaceData{ifBinders} -> ifBinders + IfaceSynonym{ifBinders} -> ifBinders + IfaceClass{ifBinders} -> ifBinders + IfaceId{} -> panic "IfaceId shoudn't be an associated type!" + IfaceAxiom{} -> panic "IfaceAxiom shoudn't be an associated type!" + IfacePatSyn {} -> panic "IfacePatSyn shoudn't be an associated type!" + + suppress_arity = not (iface_decl_generative decl) + + suppress_vars binders = + suppressIfaceInvisibles + -- We need to count trailing invisible binders for type families + (MkPrintArityInvisibles suppress_arity) + -- But this setting will simply count all invisible binderss + (PrintExplicitKinds False) + -- ...and associated types can't have a RHS + mempty + binders binders + +-- See Note [Print invisible binders in interface declarations] +-- in particular, the parts about collecting visible occurrences +iface_decl_mentioned_vars :: IfaceDecl -> Set.Set IfLclName +iface_decl_mentioned_vars (IfaceData { ifCons = condecls, ifGadtSyntax = gadt }) + | gadt = mempty + -- Get visible occurrences in each constructor in each alternative + | otherwise = Set.unions (map mentioned_con_vars cons) + where + mentioned_con_vars = Set.unions . map (visibleTypeVarOccurencies . snd) . ifConArgTys + cons = visibleIfConDecls condecls + +iface_decl_mentioned_vars (IfaceClass { ifFDs = fds, ifBody = IfAbstractClass }) + = Set.unions (map fundep_names fds) + where + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars + (IfaceClass { ifFDs = fds + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs + }}) + = Set.unions + [ Set.unions (map fundep_names fds) + , Set.unions (map iface_at_mentioned_vars ats) + , Set.unions (map (visibleTypeVarOccurencies . class_op_type) sigs) + ] + where + class_op_type (IfaceClassOp _bndr ty _default) = ty + + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars (IfaceSynonym {ifSynRhs = poly_ty}) + = visibleTypeVarOccurencies poly_ty + +-- Consider a binder to be a visible occurrence if it occurs inside an injectivity annotation. +iface_decl_mentioned_vars (IfaceFamily { ifBinders = binders, ifResVar = res_var, ifFamInj = inj }) + | Just{} <- res_var + , Injective injectivity <- inj + = Set.fromList . map (ifTyConBinderName . snd) . filter fst $ zip injectivity binders + | otherwise = mempty + +iface_decl_mentioned_vars IfacePatSyn{} = mempty +iface_decl_mentioned_vars IfaceId{} = mempty +iface_decl_mentioned_vars IfaceAxiom{} = mempty + pprIfaceDecl :: ShowSub -> IfaceDecl -> SDoc -- NB: pprIfaceDecl is also used for pretty-printing TyThings in GHCi -- See Note [Pretty printing via Iface syntax] in GHC.Types.TyThing.Ppr -pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, - ifCtxt = context, ifResKind = kind, - ifRoles = roles, ifCons = condecls, - ifParent = parent, - ifGadtSyntax = gadt, - ifBinders = binders }) +pprIfaceDecl ss decl@(IfaceData { ifName = tycon, ifCType = ctype, + ifCtxt = context, ifResKind = kind, + ifRoles = roles, ifCons = condecls, + ifParent = parent, + ifGadtSyntax = gadt, + ifBinders = binders }) | gadt = vcat [ pp_roles , pp_ki_sig @@ -946,8 +1158,10 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_kind = ppUnless (ki_sig_printable || isIfaceLiftedTypeKind kind) (dcolon <+> ppr kind) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss tycon binders + pp_lhs = case parent of - IfNoParent -> pprIfaceDeclHead suppress_bndr_sig context ss tycon binders + IfNoParent -> decl_head IfDataInstance{} -> text "instance" <+> pp_data_inst_forall <+> pprIfaceTyConParent parent @@ -994,36 +1208,40 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_extra = vcat [pprCType ctype] -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfAbstractClass }) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfAbstractClass }) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig [] ss clas binders <+> pprFundeps fds ] + , text "class" <+> decl_head <+> pprFundeps fds ] where + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss clas binders + -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfConcreteClass { - ifATs = ats, - ifSigs = sigs, - ifClassCtxt = context, - ifMinDef = minDef - }}) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs, + ifClassCtxt = context, + ifMinDef = minDef + }}) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig context ss clas binders <+> pprFundeps fds <+> pp_where + , text "class" <+> decl_head <+> pprFundeps fds <+> pp_where , nest 2 (vcat [ vcat asocs, vcat dsigs , ppShowAllSubs ss (pprMinDef $ fromIfaceBooleanFormula minDef)])] where pp_where = ppShowRhs ss $ ppUnless (null sigs && null ats) (text "where") + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss clas binders + asocs = ppr_trim $ map maybeShowAssoc ats dsigs = ppr_trim $ map maybeShowSig sigs @@ -1055,19 +1273,20 @@ pprIfaceDecl ss (IfaceClass { ifName = clas -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceSynonym { ifName = tc - , ifBinders = binders - , ifSynRhs = mono_ty - , ifResKind = res_kind}) +pprIfaceDecl ss decl@(IfaceSynonym { ifName = tc + , ifBinders = binders + , ifSynRhs = poly_ty + , ifResKind = res_kind}) = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tc binders <+> equals) - 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau - , ppUnless (isIfaceLiftedTypeKind res_kind) (dcolon <+> ppr res_kind) ]) + , hang (text "type" <+> decl_head <+> equals) + 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau ]) ] where - (tvs, theta, tau) = splitIfaceSigmaTy mono_ty + (tvs, theta, tau) = splitIfaceSigmaTy poly_ty name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tc) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tc binders + -- See Note [Printing type abbreviations] in GHC.Iface.Type ppr_tau | tc `hasKey` liftedTypeKindTyConKey || tc `hasKey` unrestrictedFunTyConKey || @@ -1078,20 +1297,18 @@ pprIfaceDecl ss (IfaceSynonym { ifName = tc -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceFamily { ifName = tycon - , ifFamFlav = rhs, ifBinders = binders - , ifResKind = res_kind - , ifResVar = res_var, ifFamInj = inj }) +pprIfaceDecl ss decl@(IfaceFamily { ifName = tycon + , ifFamFlav = rhs, ifBinders = binders + , ifResKind = res_kind + , ifResVar = res_var, ifFamInj = inj }) | IfaceDataFamilyTyCon <- rhs = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , text "data family" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders + , text "data family" <+> decl_head ] | otherwise = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type family" - <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders - <+> pp_inj res_var inj + , hang (text "type family" <+> decl_head <+> pp_inj res_var inj <+> ppShowRhs ss (pp_where rhs)) 2 (ppShowRhs ss (pp_rhs rhs)) $$ @@ -1100,6 +1317,8 @@ pprIfaceDecl ss (IfaceFamily { ifName = tycon where name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tycon) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tycon binders + pp_where (IfaceClosedSynFamilyTyCon {}) = text "where" pp_where _ = empty @@ -1188,7 +1407,12 @@ pprRoles :: (Role -> Bool) -> SDoc -> [IfaceTyConBinder] -> [Role] -> SDoc pprRoles suppress_if tyCon bndrs roles = sdocOption sdocPrintExplicitKinds $ \print_kinds -> - let froles = suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs roles + let froles = + suppressIfaceInvisibles + (MkPrintArityInvisibles False) + (PrintExplicitKinds print_kinds) + mempty + bndrs roles in ppUnless (all suppress_if froles || null froles) $ text "type role" <+> tyCon <+> hsep (map ppr froles) @@ -1245,16 +1469,25 @@ pprIfaceTyConParent IfNoParent pprIfaceTyConParent (IfDataInstance _ tc tys) = pprIfaceTypeApp topPrec tc tys -pprIfaceDeclHead :: SuppressBndrSig +pprIfaceDeclHead :: IfaceDecl + -> SuppressBndrSig -> IfaceContext -> ShowSub -> Name -> [IfaceTyConBinder] -- of the tycon, for invisible-suppression -> SDoc -pprIfaceDeclHead suppress_sig context ss tc_occ bndrs +pprIfaceDeclHead decl suppress_sig context ss tc_occ bndrs = sdocOption sdocPrintExplicitKinds $ \print_kinds -> sep [ pprIfaceContextArr context , pprPrefixIfDeclBndr (ss_how_much ss) (occName tc_occ) <+> pprIfaceTyConBinders suppress_sig - (suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs bndrs) ] + (suppressIfaceInvisibles + (MkPrintArityInvisibles print_arity) + (PrintExplicitKinds print_kinds) + mentioned_vars + bndrs bndrs) ] + where + -- See Note [Print invisible binders in interface declarations] + mentioned_vars = iface_decl_mentioned_vars decl + print_arity = not (iface_decl_generative decl) pprIfaceConDecl :: ShowSub -> Bool -> IfaceTopBndr ===================================== compiler/GHC/Iface/Type.hs ===================================== @@ -44,6 +44,7 @@ module GHC.Iface.Type ( SuppressBndrSig(..), UseBndrParens(..), PrintExplicitKinds(..), + PrintArityInvisibles(..), pprIfaceType, pprParendIfaceType, pprPrecIfaceType, pprIfaceContext, pprIfaceContextArr, pprIfaceIdBndr, pprIfaceLamBndr, pprIfaceTvBndr, pprIfaceTyConBinders, @@ -56,6 +57,7 @@ module GHC.Iface.Type ( isIfaceRhoType, suppressIfaceInvisibles, + visibleTypeVarOccurencies, stripIfaceInvisVars, stripInvisArgs, @@ -98,6 +100,9 @@ import Data.Word (Word8) import Control.Arrow (first) import Control.DeepSeq import Control.Monad ((<$!>)) +import Data.List (dropWhileEnd) +import qualified Data.List.NonEmpty as NonEmpty +import qualified Data.Set as Set {- ************************************************************************ @@ -609,9 +614,21 @@ splitIfaceReqForallTy (IfaceForAllTy bndr ty) = case splitIfaceReqForallTy ty of { (bndrs, rho) -> (bndr:bndrs, rho) } splitIfaceReqForallTy rho = ([], rho) -suppressIfaceInvisibles :: PrintExplicitKinds -> [IfaceTyConBinder] -> [a] -> [a] -suppressIfaceInvisibles (PrintExplicitKinds True) _tys xs = xs -suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs +newtype PrintArityInvisibles = MkPrintArityInvisibles Bool + +-- See Note [Print invisible binders in interface declarations] +-- for the definition of what binders are considered insignificant +suppressIfaceInvisibles :: PrintArityInvisibles + -> PrintExplicitKinds + -> Set.Set IfLclName + -> [IfaceTyConBinder] + -> [a] + -> [a] +suppressIfaceInvisibles _ (PrintExplicitKinds True) _ _tys xs = xs + +suppressIfaceInvisibles -- This case is semantically the same as the third case, but it should be way f + (MkPrintArityInvisibles False) (PrintExplicitKinds False) mentioned_vars tys xs + | Set.null mentioned_vars = suppress tys xs where suppress _ [] = [] suppress [] a = a @@ -619,6 +636,44 @@ suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs | isInvisibleTyConBinder k = suppress ks xs | otherwise = x : suppress ks xs +suppressIfaceInvisibles + (MkPrintArityInvisibles arity_invisibles) + (PrintExplicitKinds False) mentioned_vars tys xs + = map snd (suppress (zip tys xs)) + where + -- Consider this example: + -- type T :: forall k1 k2. Type + -- type T @a @b = b + -- `@a` is not mentioned on the RHS. However, we can't just + -- drop it because implicit argument positioning matters. + -- + -- Hence just drop the end + only_mentioned_binders = dropWhileEnd (not . is_binder_mentioned) + + is_binder_mentioned (bndr, _) = ifTyConBinderName bndr `Set.member` mentioned_vars + + suppress_invisibles group = + applyWhen invis_group only_mentioned_binders bndrs + where + bndrs = NonEmpty.toList group + invis_group = is_invisible_bndr (NonEmpty.head group) + + suppress_invisible_groups [] = [] + suppress_invisible_groups [group] = + if arity_invisibles + then NonEmpty.toList group -- the last group affects arity + else suppress_invisibles group + suppress_invisible_groups (group : groups) + = suppress_invisibles group ++ suppress_invisible_groups groups + + suppress + = suppress_invisible_groups -- Filter out insignificant invisible binders + . NonEmpty.groupWith is_invisible_bndr -- Find chunks of @-binders + . filterOut is_inferred_bndr -- We don't want to display @{binders} + + is_inferred_bndr = isInferredTyConBinder . fst + is_invisible_bndr = isInvisibleTyConBinder . fst + stripIfaceInvisVars :: PrintExplicitKinds -> [IfaceTyConBinder] -> [IfaceTyConBinder] stripIfaceInvisVars (PrintExplicitKinds True) tyvars = tyvars stripIfaceInvisVars (PrintExplicitKinds False) tyvars @@ -659,6 +714,29 @@ ifTypeIsVarFree ty = go ty go_args IA_Nil = True go_args (IA_Arg arg _ args) = go arg && go_args args +visibleTypeVarOccurencies :: IfaceType -> Set.Set IfLclName +-- Returns True if the type contains this name. Doesn't count +-- invisible application +-- Just used to control pretty printing +visibleTypeVarOccurencies = go + where + (<>) = Set.union + + go (IfaceTyVar var) = Set.singleton var + go (IfaceFreeTyVar {}) = mempty + go (IfaceAppTy fun args) = go fun <> go_args args + go (IfaceFunTy _ w arg res) = go w <> go arg <> go res + go (IfaceForAllTy bndr ty) = go (ifaceBndrType $ binderVar bndr) <> go ty + go (IfaceTyConApp _ args) = go_args args + go (IfaceTupleTy _ _ args) = go_args args + go (IfaceLitTy _) = mempty + go (IfaceCastTy {}) = mempty -- Safe + go (IfaceCoercionTy {}) = mempty -- Safe + + go_args IA_Nil = mempty + go_args (IA_Arg arg Required args) = go arg <> go_args args + go_args (IA_Arg _arg _ args) = go_args args + {- Note [Substitution on IfaceType] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Substitutions on IfaceType are done only during pretty-printing to ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -33,6 +33,10 @@ Compiler GHCi ~~~~ +- :ghci-cmd:`:info` now outputs type declarations with @-binders that are + considered semantically significant. See the documentation for :ghci-cmd:`:info` + itself for a more detailed explanation. + Runtime system ~~~~~~~~~~~~~~ ===================================== docs/users_guide/ghci.rst ===================================== @@ -2516,6 +2516,22 @@ commonly used commands. ⟨name⟩ has been loaded from a source file, then GHCi will also display the location of its definition in the source. + GHCi outputs type declarations (type synonyms, newtypes and datatypes, + classes, type and data families) with semantically significant invisible + @-binders. + + An invisible binder is considered significant when it meets at least + one of the following two criteria: + + - It visibly occurs in the declaration's body + + - It is followed by a significant binder, so it affects positioning + + For non-generative type declarations (type synonyms and type families) + there is one additional criterion: + + - It is not followed by a visible binder, so it affects the arity of a type declaration + For types and classes, GHCi also summarises instances that mention them. To avoid showing irrelevant information, an instance is shown only if (a) its head mentions ⟨name⟩, and (b) all the other things ===================================== testsuite/tests/backpack/should_fail/T19244a.stderr ===================================== @@ -17,7 +17,7 @@ T19244a.bkp:22:9: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/T19244b.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing user - [1 of 2] Compiling Map[sig] ( user\Map.hsig, nothing ) - [2 of 2] Compiling User ( user\User.hs, nothing ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, nothing ) + [2 of 2] Compiling User ( user/User.hs, nothing ) [2 of 3] Processing ordmap Instantiating ordmap - [1 of 1] Compiling Map ( ordmap\Map.hs, T19244b.out\ordmap\Map.o ) + [1 of 1] Compiling Map ( ordmap/Map.hs, T19244b.out/ordmap/Map.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including user[Map=ordmap:Map] Instantiating user[Map=ordmap:Map] - [1 of 2] Compiling Map[sig] ( user\Map.hsig, T19244b.out\user\user-GzloW2NeDdA2M0V8qzN4g2\Map.o ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, T19244b.out/user/user-GzloW2NeDdA2M0V8qzN4g2/Map.o ) T19244b.bkp:11:27: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/bkpfail46.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing p - [1 of 2] Compiling A[sig] ( p\A.hsig, nothing ) - [2 of 2] Compiling M ( p\M.hs, nothing ) + [1 of 2] Compiling A[sig] ( p/A.hsig, nothing ) + [2 of 2] Compiling M ( p/M.hs, nothing ) [2 of 3] Processing q Instantiating q - [1 of 1] Compiling A ( q\A.hs, bkpfail46.out\q\A.o ) + [1 of 1] Compiling A ( q/A.hs, bkpfail46.out/q/A.o ) [3 of 3] Processing r Instantiating r [1 of 1] Including p[A=q:A] Instantiating p[A=q:A] - [1 of 2] Compiling A[sig] ( p\A.hsig, bkpfail46.out\p\p-HVmFlcYSefiK5n1aDP1v7x\A.o ) + [1 of 2] Compiling A[sig] ( p/A.hsig, bkpfail46.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o ) bkpfail46.bkp:16:9: error: [GHC-15843] • Type constructor ‘K’ has conflicting definitions in the module and its hsig file. Main module: type K :: * -> Constraint - type K a = GHC.Classes.Eq a :: Constraint + type K a = GHC.Classes.Eq a Hsig file: type K :: * -> Constraint class K a Illegal parameterized type synonym in implementation of abstract data. ===================================== testsuite/tests/ghci/T18060/T18060.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout ===================================== @@ -74,13 +74,13 @@ data Tuple2# a b = (#,#) a b (# , #) :: a -> b -> Tuple2# a b (Int, Int) :: Tuple2 (*) (*) type T :: Tuple2 (*) (*) -type T = (Int, Int) :: Tuple2 (*) (*) +type T = (Int, Int) -- Defined at :19:1 type S :: Solo (*) -type S = MkSolo Int :: Solo (*) +type S = MkSolo Int -- Defined at :20:1 type L :: List (*) -type L = [Int] :: List (*) +type L = [Int] -- Defined at :21:1 f :: Int -> Tuple2 Int Int -> Int (\ (_, _) -> ()) :: Tuple2 a b -> Unit ===================================== testsuite/tests/ghci/scripts/T15941.stdout ===================================== @@ -1,4 +1,3 @@ type T :: * -> * -> * -type T = - (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} :: * -> * -> * +type T = (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} -- Defined at :2:1 ===================================== testsuite/tests/ghci/scripts/T19310.stdout ===================================== @@ -1,3 +1,3 @@ type T :: * -> * -> * -type T = (->) @{LiftedRep} @{LiftedRep} :: * -> * -> * +type T = (->) @{LiftedRep} @{LiftedRep} -- Defined at :3:1 ===================================== testsuite/tests/ghci/scripts/T21294a.stdout ===================================== @@ -1,5 +1,5 @@ type L0 :: * -> * -type L0 = [] :: * -> * +type L0 = [] -- Defined at :1:1 type L1 :: * -> * type L1 a = [a] ===================================== testsuite/tests/ghci/scripts/T24459.script ===================================== @@ -0,0 +1,250 @@ +:{ +{-# LANGUAGE TypeFamilies, TypeFamilyDependencies, DataKinds, TypeAbstractions, FunctionalDependencies, AllowAmbiguousTypes #-} + +import Data.Kind +import Data.Data + +-- Check that we don't print binders that aren't included in the arity +type T0 :: forall k. k -> Type +type T0 = Proxy :: forall k. k -> Type + +-- ...and a variant where the arity isn't affected by the type signature +type T1 :: forall k. k -> Type +type T1 = Proxy + +-- ...and that we do print variables that are included in the arity +type T2 :: forall k. k -> Type +type T2 @k = Proxy + +-- ...but don't print invisible binders that don't visibly occur and don't affect the arity +type T3 :: forall k. k -> Type +type T3 a = Proxy a + +-- ...and print invisible binders that do visibly occur +type T4 :: forall a. Type -> Type +type T4 @a _b = Proxy a + +-- ...one more check that it is not affected by the user's input +type T5 :: forall a. Type -> Type +type T5 @a _b = Proxy _b + +-- ...and once again +type T6 :: forall k. Type -> Type +type T6 _a = () + +-- ...now check that we don't mess up with positioning +type T7 :: forall a b c. b -> forall d. Type +type T7 @a @b @c f @d = b + +-- ...and that we count occurrences in theta +type T8 :: forall (a :: Constraint). Type -> Type +type T8 @a _ = forall x. a => x + +-- ...and in forall binder signatures +type T9 :: forall (a :: Type). Type -> Type +type T9 @a _ = forall (x :: a). Int + +-- That's all with type synonyms, let's check other sorts of type declarations + +-- Equatuions should not affect invisible binders for type families, but the arity matters +type TF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +type family TF1 @a @b c @d where + forall b d. TF1 @Type @b Int @d = () + forall a b d. TF1 @a @b (_ :: a) @d = Bool + +-- Injectivity annotations should affect invisible binders. Also check that positioning works +type TF2 :: forall (a :: Type) (b :: Type). Type -> forall (d :: Type). Type +type family TF2 @a @b c @d = r | r -> b + +-- Data families are generative and can't have injectivity annotations +-- hence no invisible binders should be printed +type DF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +data family DF1 @a @b c @d + +-- Data families are generative, so the invisible binder @b isn't a visible usage +type C1 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C1 @a @b c where + data AD a @b + +-- But type families aren't generative, hence the trailing binder @b occurs visibly +type C2 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C2 @a @b c where + type AF a @b + +-- Check that trailing invisible binders are handled properly +type C3 :: forall x. Constraint +class C3 @x where {} + +-- And check that signatures are visible occurrences +type C4 :: forall (a :: Type) (b :: Type). Constraint +class C4 @a @b where + x :: a + y :: b + +-- Also check functional dependencies +type C5 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C5 @a @b c | a -> c where {} + +-- GADTs should not have "visible" mentions of binders at a declaration's head +type D1 :: forall a. Type +data D1 @a where + MkD :: b -> D1 @b + +-- Haskell98-style declarations should work properly +type D2 :: forall a (b :: Type). Type -> forall d. Type +data D2 @a @b c @d = MkD2_1 | MkD2_2 Int b + +-- And now a lot of stuff suggested by @int-index + +data P a b + +type F1 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k1 + +type F2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k2 + +type F3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k3 + +type F4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k4 + +type F5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k5 + +type F6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k6 + +type F1x2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k2) + +type F1x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k3) + +type F1x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k4) + +type F1x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k5) + +type F1x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k6) + +type F2x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k3) + +type F2x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k4) + +type F2x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k5) + +type F2x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k6) + +type F3x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k4) + +type F3x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k5) + +type F3x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k6) + +type F4x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k5) + +type F4x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k6) + +type F5x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k5,k6) + +:} + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 + +:set -fprint-explicit-kinds + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 ===================================== testsuite/tests/ghci/scripts/T24459.stdout ===================================== @@ -0,0 +1,313 @@ +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 a = Proxy a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @a _b = Proxy a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 _b = Proxy _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @a @b f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 c @d where + TF1 Int = () + forall a (_1 :: a) b d. TF1 _1 = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 c + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a c where + type AD :: * -> forall b. * + data family AD a + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a c | a -> c + -- Defined at :86:1 +type D1 :: forall {k} (a :: k). * +data D1 where + MkD :: b -> D1 + -- Defined at :90:1 +type role D2 phantom +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @a @b c = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 a b c d e @k6 = P k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b c d e @k6 = P k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 a b @k3 c d e @k6 = P k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 a b @k3 @k4 c d e @k6 = P k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 a b @k3 @k4 @k5 c d e @k6 = P k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 a b c d e @k6 = P k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b c d e @k6 = P (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 a b @k3 c d e @k6 = P (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 a b @k3 @k4 c d e @k6 = P (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 a b @k3 @k4 @k5 c d e @k6 = P (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 a b c d e @k6 = P (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 c d e @k6 = P (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 c d e @k6 = P (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b c d e @k6 = P (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 a b @k3 @k4 c d e @k6 = P (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 a b @k3 @k4 @k5 c d e @k6 = P (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 a b @k3 c d e @k6 = P (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 a b @k3 @k4 @k5 c d e @k6 = P (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 a b @k3 @k4 c d e @k6 = P (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 a b @k3 @k4 @k5 c d e @k6 = P (k5, k6) + -- Defined at :162:1 +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy @{k} + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 @k a = Proxy @{k} a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @{k} @a _b = Proxy @{k} a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 @{k} @a _b = Proxy @{*} _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 @{k} @k1 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @{k} @{k1} @{k2} @a @b @c f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 @a @b c @d where + TF1 @(*) @b Int @d = () + forall a (_1 :: a) b d. TF1 @a @b _1 @d = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 @a @b c @d + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a @b c where + type AD :: * -> forall b. * + data family AD a @b + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 @{k} @x + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a @b c | a -> c + -- Defined at :86:1 +type role D1 nominal nominal +type D1 :: forall {k} (a :: k). * +data D1 @{k} @a where + MkD :: b -> D1 @{*} @b + -- Defined at :90:1 +type role D2 nominal nominal nominal nominal phantom nominal +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @{k} @{k1} @a @b c @d = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k5, k6) + -- Defined at :162:1 ===================================== testsuite/tests/ghci/scripts/T8535.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/T9181.stdout ===================================== @@ -13,12 +13,10 @@ type (GHC.Internal.Data.Type.Ord.<=) x y = GHC.Internal.TypeError.Assert (x GHC.Internal.Data.Type.Ord.<=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) - :: Constraint type (GHC.Internal.Data.Type.Ord.<=?) :: forall k. k -> k -> Bool type (GHC.Internal.Data.Type.Ord.<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) True True False - :: Bool type GHC.Internal.TypeLits.AppendSymbol :: GHC.Types.Symbol -> GHC.Types.Symbol -> GHC.Types.Symbol type family GHC.Internal.TypeLits.AppendSymbol a b ===================================== testsuite/tests/ghci/scripts/all.T ===================================== @@ -385,3 +385,4 @@ test('T23686', normal, ghci_script, ['T23686.script']) test('T13869', extra_files(['T13869a.hs', 'T13869b.hs']), ghci_script, ['T13869.script']) test('ListTuplePunsPpr', normal, ghci_script, ['ListTuplePunsPpr.script']) test('ListTuplePunsPprNoAbbrevTuple', [expect_broken(23135), limit_stdout_lines(13)], ghci_script, ['ListTuplePunsPprNoAbbrevTuple.script']) +test('T24459', normal, ghci_script, ['T24459.script']) ===================================== testsuite/tests/ghci/scripts/ghci020.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T10145.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T18594.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5406,7 +5406,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5533,7 +5533,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5608,7 +5608,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5616,7 +5616,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5662,7 +5662,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7397,7 +7397,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7407,7 +7407,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7429,7 +7429,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7454,14 +7454,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7478,24 +7478,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8583,7 +8583,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9357,7 +9357,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9418,7 +9418,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9573,9 +9573,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9692,9 +9692,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5375,7 +5375,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5502,7 +5502,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5577,7 +5577,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5585,7 +5585,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5631,7 +5631,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7366,7 +7366,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7376,7 +7376,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7398,7 +7398,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7423,14 +7423,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7447,24 +7447,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8253,7 +8253,7 @@ module GHC.JS.Prim where type JSVal :: * data JSVal = JSVal GHC.Prim.ByteArray# type JSVal# :: GHC.Types.UnliftedType - type JSVal# = GHC.Prim.ByteArray# :: GHC.Types.UnliftedType + type JSVal# = GHC.Prim.ByteArray# type WouldBlockException :: * data WouldBlockException = WouldBlockException fromJSArray :: JSVal -> GHC.Types.IO [JSVal] @@ -11625,7 +11625,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -12399,7 +12399,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -12460,7 +12460,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -12615,9 +12615,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -12734,9 +12734,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5552,7 +5552,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5679,7 +5679,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5754,7 +5754,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5762,7 +5762,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5808,7 +5808,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7546,7 +7546,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7556,7 +7556,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7578,7 +7578,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7603,14 +7603,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7627,24 +7627,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8807,7 +8807,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9581,7 +9581,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9642,7 +9642,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9797,9 +9797,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9916,9 +9916,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5406,7 +5406,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5533,7 +5533,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5608,7 +5608,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5616,7 +5616,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5662,7 +5662,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7397,7 +7397,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7407,7 +7407,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7429,7 +7429,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7454,14 +7454,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7478,24 +7478,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8583,7 +8583,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9357,7 +9357,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9418,7 +9418,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9573,9 +9573,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9692,9 +9692,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) @@ -4341,7 +4341,7 @@ module GHC.PrimOps where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -4468,7 +4468,7 @@ module GHC.PrimOps where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -4543,7 +4543,7 @@ module GHC.PrimOps where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -4551,7 +4551,7 @@ module GHC.PrimOps where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -4597,7 +4597,7 @@ module GHC.PrimOps where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -6329,9 +6329,9 @@ module Prelude.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -8960,11 +8960,11 @@ module Prelude.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 ===================================== @@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) @@ -4341,7 +4341,7 @@ module GHC.PrimOps where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -4468,7 +4468,7 @@ module GHC.PrimOps where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -4543,7 +4543,7 @@ module GHC.PrimOps where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -4551,7 +4551,7 @@ module GHC.PrimOps where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -4597,7 +4597,7 @@ module GHC.PrimOps where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -6332,9 +6332,9 @@ module Prelude.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -8963,11 +8963,11 @@ module Prelude.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) ===================================== testsuite/tests/interface-stability/template-haskell-exports.stdout ===================================== @@ -31,7 +31,7 @@ module Language.Haskell.TH where type Code :: (* -> *) -> forall (r :: GHC.Types.RuntimeRep). TYPE r -> * newtype Code m a = Code {examineCode :: m (TExp a)} type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = Code Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = Code Q type Con :: * data Con = NormalC Name [BangType] | RecC Name [VarBangType] | InfixC BangType Name BangType | ForallC [TyVarBndr Specificity] Cxt Con | GadtC [Name] [BangType] Type | RecGadtC [Name] [VarBangType] Type type ConQ :: * @@ -881,7 +881,7 @@ module Language.Haskell.TH.Lib where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * @@ -1220,7 +1220,7 @@ module Language.Haskell.TH.Lib.Internal where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * ===================================== testsuite/tests/rep-poly/RepPolyBackpack3.stderr ===================================== @@ -1,19 +1,19 @@ [1 of 3] Processing sig - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, nothing ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, nothing ) [2 of 3] Processing impl Instantiating impl - [1 of 1] Compiling Impl ( impl\Impl.hs, RepPolyBackpack3.out\impl\Impl.o ) + [1 of 1] Compiling Impl ( impl/Impl.hs, RepPolyBackpack3.out/impl/Impl.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including sig[Sig=impl:Impl] Instantiating sig[Sig=impl:Impl] - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, RepPolyBackpack3.out\sig\sig-Absk5cIXTXe6UYhGMYGber\Sig.o ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, RepPolyBackpack3.out/sig/sig-Absk5cIXTXe6UYhGMYGber/Sig.o ) RepPolyBackpack3.bkp:17:5: error: [GHC-15843] • Type constructor ‘Rep’ has conflicting definitions in the module and its hsig file. Main module: type Rep :: GHC.Types.RuntimeRep - type Rep = T :: GHC.Types.RuntimeRep + type Rep = T Hsig file: type Rep :: GHC.Types.RuntimeRep data Rep Illegal implementation of abstract data: Invalid type family ‘T’. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0da48670f40b73a5891a2d13c398f429c5624419 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0da48670f40b73a5891a2d13c398f429c5624419 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 09:42:57 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Thu, 12 Dec 2024 04:42:57 -0500 Subject: [Git][ghc/ghc][master] testsuite: Only run T14497_compact in normal way Message-ID: <675ab02170373_198647306a4c806e9@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 1 changed file: - testsuite/tests/rts/all.T Changes: ===================================== testsuite/tests/rts/all.T ===================================== @@ -447,7 +447,7 @@ test('T14497', [omit_ways(['profasm']), multi_cpu_race], compile_and_run, ['-O'] # The issue in the above test also happened with compaction enabled. test('T14497-compact', [ extra_files(['T14497.hs']) - , omit_ways(['profasm']) + , only_ways(['normal']) , multi_cpu_race , extra_run_opts('+RTS -c -RTS') ] , compile_and_run, ['-O']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ef2052a86393c406342f32e7c1a310c932c9ac8f -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ef2052a86393c406342f32e7c1a310c932c9ac8f You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 09:43:32 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Thu, 12 Dec 2024 04:43:32 -0500 Subject: [Git][ghc/ghc][master] rts/CheckUnload: Don't prepare to unload if we can't unload Message-ID: <675ab04463889_19864773a84883674@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 1 changed file: - rts/CheckUnload.c Changes: ===================================== rts/CheckUnload.c ===================================== @@ -166,7 +166,7 @@ ObjectCode *loaded_objects; static OCSectionIndices *global_s_indices = NULL; // Is it safe for us to unload code? -static bool safeToUnload(void) +static bool tryToUnload(void) { if (RtsFlags.ProfFlags.doHeapProfile != NO_HEAP_PROFILING) { // We mustn't unload anything as the heap census may contain @@ -174,7 +174,8 @@ static bool safeToUnload(void) // See #24512. return false; } - return true; + + return global_s_indices != NULL; } static OCSectionIndices *createOCSectionIndices(void) @@ -432,7 +433,7 @@ static bool markObjectLive(void *data STG_UNUSED, StgWord key, const void *value void markObjectCode(const void *addr) { - if (global_s_indices == NULL) { + if (!tryToUnload()) { return; } @@ -450,7 +451,7 @@ void markObjectCode(const void *addr) // unloading. bool prepareUnloadCheck(void) { - if (global_s_indices == NULL) { + if (!tryToUnload()) { return false; } @@ -472,7 +473,7 @@ void checkUnload(void) // code (loaded_objects). Mark the roots first, then unload any unmarked // objects. - if (global_s_indices != NULL && safeToUnload()) { + if (tryToUnload()) { OCSectionIndices *s_indices = global_s_indices; ASSERT(s_indices->sorted); View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/34d3e8e69b62b92cc438514f7fb8e37ce639efea -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/34d3e8e69b62b92cc438514f7fb8e37ce639efea You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 10:00:49 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Thu, 12 Dec 2024 05:00:49 -0500 Subject: [Git][ghc/ghc][wip/T25437] Wibbles Message-ID: <675ab451452f2_19864791742c858a9@gitlab.mail> Simon Peyton Jones pushed to branch wip/T25437 at Glasgow Haskell Compiler / GHC Commits: 8dd5ea3c by Simon Peyton Jones at 2024-12-12T10:00:31+00:00 Wibbles - - - - - 2 changed files: - testsuite/tests/rename/should_fail/T5001b.stderr - testsuite/tests/rename/should_fail/all.T Changes: ===================================== testsuite/tests/rename/should_fail/T5001b.stderr ===================================== @@ -1,5 +1,4 @@ T5001b.hs:10:17: error: [GHC-44432] The INLINE pragma for ‘genum’ lacks an accompanying binding - Suggested fix: - Move the INLINE pragma to the declaration site of ‘genum’. + ===================================== testsuite/tests/rename/should_fail/all.T ===================================== @@ -231,4 +231,4 @@ test('T14032c', normal, compile_fail, ['']) test('T14032f', normal, compile_fail, ['']) test('T23501_fail', normal, compile_fail, ['']) test('T23501_fail_ext', normal, compile_fail, ['']) -test('T23437', normal, compile_fail, ['']) +test('T25437', normal, compile_fail, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8dd5ea3cdc0915e6aa6d2d0b3a70b2afed09d6c9 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8dd5ea3cdc0915e6aa6d2d0b3a70b2afed09d6c9 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 12:30:51 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Thu, 12 Dec 2024 07:30:51 -0500 Subject: [Git][ghc/ghc][wip/romes/graph-compact-easy] 2 commits: Revert mapMG renaming Message-ID: <675ad77b92082_b209def5bc108644@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/graph-compact-easy at Glasgow Haskell Compiler / GHC Commits: 1ea72649 by Rodrigo Mesquita at 2024-12-12T12:30:42+00:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - bfba5d6c by Rodrigo Mesquita at 2024-12-12T12:30:42+00:00 Tweaks - - - - - 5 changed files: - compiler/GHC.hs - compiler/GHC/Driver/Backpack.hs - compiler/GHC/Unit/Home/PackageTable.hs - compiler/GHC/Unit/Module/Graph.hs - compiler/GHC/Unit/Module/Status.hs Changes: ===================================== compiler/GHC.hs ===================================== @@ -75,7 +75,7 @@ module GHC ( compileToCoreModule, compileToCoreSimplified, -- * Inspecting the module structure of the program - ModuleGraph, emptyMG, mgMap, mkModuleGraph, mgModSummaries, + ModuleGraph, emptyMG, mapMG, mkModuleGraph, mgModSummaries, mgLookupModule, ModSummary(..), ms_mod_name, ModLocation(..), pattern ModLocation, @@ -879,7 +879,7 @@ setProgramDynFlags_ invalidate_needed dflags = do -- invalidateModSummaryCache :: GhcMonad m => m () invalidateModSummaryCache = - modifySession $ \h -> h { hsc_mod_graph = mgMap inval (hsc_mod_graph h) } + modifySession $ \h -> h { hsc_mod_graph = mapMG inval (hsc_mod_graph h) } where inval ms = ms { ms_hs_hash = fingerprint0 } ===================================== compiler/GHC/Driver/Backpack.hs ===================================== @@ -91,6 +91,7 @@ import qualified Data.Map as Map import qualified Data.Set as Set import GHC.Types.Error (mkUnknownDiagnostic) import qualified GHC.Unit.Home.Graph as HUG +import GHC.Unit.Home.ModInfo import GHC.Unit.Home.PackageTable -- | Entry point to compile a Backpack file. @@ -342,18 +343,17 @@ buildUnit session cid insts lunit = do -- Compile relevant only hsc_env <- getSession - linkables <- liftIO $ hptCollectObjects (hsc_HPT hsc_env) + let takeLinkables x + | mi_hsc_src (hm_iface x) == HsSrcFile + = [Just $ expectJust "bkp link" $ homeModInfoObject x] + | otherwise + = [Nothing] + linkables <- liftIO $ catMaybes <$> concatHpt takeLinkables (hsc_HPT hsc_env) let - -- ROMES:TODO: before we filtered by HsSrcFile, but that - -- seems irrelevant because boots or sigs shouldn't have - -- linkables in the first place? - -- map (expectJust "bkp link" . homeModInfoObject) - -- . filter ((==HsSrcFile) . mi_hsc_src . hm_iface) $ - -- home_mod_infos obj_files = concatMap linkableFiles linkables state = hsc_units hsc_env - let compat_fs = unitIdFS cid + compat_fs = unitIdFS cid compat_pn = PackageName compat_fs unit_id = homeUnitId (hsc_home_unit hsc_env) ===================================== compiler/GHC/Unit/Home/PackageTable.hs ===================================== @@ -70,6 +70,9 @@ module GHC.Unit.Home.PackageTable , hptCollectObjects , hptCollectModules + -- ** Memory dangerous queries + , concatHpt + -- * Utilities , pprHPT @@ -132,6 +135,7 @@ data HomePackageTable = HPT { -- about the table 'HomeModInfo' updates. On insertions we must make sure to -- update this field (insertions can only be done through the API exposed). +-- ROMES:TODO: change to lastLoadedModule lastLoadedKey :: Maybe Unique -- ^ What was the last module loaded into this HPT? -- @@ -190,15 +194,14 @@ addHomeModInfoToHpt :: HomeModInfo -> HomePackageTable -> IO HomePackageTable addHomeModInfoToHpt hmi hpt = addToHpt hpt (moduleName (mi_module (hm_iface hmi))) hmi where addToHpt :: HomePackageTable -> ModuleName -> HomeModInfo -> IO HomePackageTable - addToHpt HPT{table=hptr, hasHoles, lastLoadedKey} mn hmi = do - alreadyExisted <- atomicModifyIORef' hptr (\hpt -> (addToUDFM hpt mn hmi, elemUDFM mn hpt)) + addToHpt HPT{table=hptr, hasHoles} mn hmi = do + atomicModifyIORef' hptr (\hpt -> (addToUDFM hpt mn hmi, ())) -- If the key already existed in the map, this insertion is overwriting -- the HMI of a previously loaded module (likely in rehydration). return HPT{ table = hptr - , hasHoles = hasHoles && isHoleModule (mi_semantic_module (hm_iface hmi)) - , lastLoadedKey = if alreadyExisted then lastLoadedKey - else Just $! getUnique mn + , hasHoles = hasHoles || isHoleModule (mi_semantic_module (hm_iface hmi)) + , lastLoadedKey = Just $! getUnique mn {- yes, even if we're overwriting something already in the map -} } ---------------------------------------------------------------------------------- ===================================== compiler/GHC/Unit/Module/Graph.hs ===================================== @@ -46,7 +46,7 @@ module GHC.Unit.Module.Graph -- (without changing the 'ModuleGraph' structure itself!). -- 'mgModSummaries' lists out all 'ModSummary's, and -- 'mgLookupModule' looks up a 'ModSummary' for a given module. - , mgMap, mgMapM + , mapMG, mgMapM , mgModSummaries , mgLookupModule @@ -239,8 +239,8 @@ lengthMG = length . mg_mss -- | Map a function 'f' over all the 'ModSummaries'. -- To preserve invariants, 'f' can't change the isBoot status. -mgMap :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph -mgMap f mg at ModuleGraph{..} = mg +mapMG :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph +mapMG f mg at ModuleGraph{..} = mg { mg_mss = flip fmap mg_mss $ \case InstantiationNode uid iuid -> InstantiationNode uid iuid LinkNode uid nks -> LinkNode uid nks ===================================== compiler/GHC/Unit/Module/Status.hs ===================================== @@ -41,6 +41,9 @@ data HscBackendAction -- changed. } +instance Outputable HscRecompStatus where + ppr HscUpToDate{} = text "HscUpToDate" + ppr HscRecompNeeded{} = text "HscRecompNeeded" instance Outputable HscBackendAction where ppr (HscUpdate mi) = text "Update:" <+> (ppr (mi_module mi)) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/04fa9b901df5a7531d358010787d80c6b9b8e39b...bfba5d6c53bc85e74fff6161407a192aa2bc55b3 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/04fa9b901df5a7531d358010787d80c6b9b8e39b...bfba5d6c53bc85e74fff6161407a192aa2bc55b3 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 14:40:36 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Thu, 12 Dec 2024 09:40:36 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports] Accept backport metric changes. Message-ID: <675af5e4e64a_b2091c53f90131050@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports at Glasgow Haskell Compiler / GHC Commits: 220f15b2 by Andreas Klebinger at 2024-12-12T15:19:22+01:00 Accept backport metric changes. The MLM test regresses slightly (+2.5% compiler bytes allocated). That seems within reason. ------------------------- Metric Increase: MultiLayerModulesTH_OneShot ------------------------- - - - - - 0 changed files: Changes: View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/220f15b278acb09433b529cf91c10fc756f6e67e -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/220f15b278acb09433b529cf91c10fc756f6e67e You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 16:16:49 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Thu, 12 Dec 2024 11:16:49 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 4 commits: testsuite: Only run T14497_compact in normal way Message-ID: <675b0c718474d_b209255f4a4138868@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 67b62a75 by Andrei Borzenkov at 2024-12-12T11:16:34-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 7698a505 by Matthew Pickering at 2024-12-12T11:16:35-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - 30 changed files: - compiler/GHC/Core/TyCon.hs - compiler/GHC/Iface/Syntax.hs - compiler/GHC/Iface/Type.hs - compiler/GHC/Tc/Instance/Family.hs - compiler/GHC/Tc/Module.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/ghci.rst - rts/CheckUnload.c - testsuite/tests/backpack/should_fail/T19244a.stderr - testsuite/tests/backpack/should_fail/T19244b.stderr - testsuite/tests/backpack/should_fail/bkpfail46.stderr - testsuite/tests/ghci/T18060/T18060.stdout - testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout - testsuite/tests/ghci/scripts/T15941.stdout - testsuite/tests/ghci/scripts/T19310.stdout - testsuite/tests/ghci/scripts/T21294a.stdout - + testsuite/tests/ghci/scripts/T24459.script - + testsuite/tests/ghci/scripts/T24459.stdout - testsuite/tests/ghci/scripts/T8535.stdout - testsuite/tests/ghci/scripts/T9181.stdout - testsuite/tests/ghci/scripts/all.T - testsuite/tests/ghci/scripts/ghci020.stdout - testsuite/tests/ghci/should_run/T10145.stdout - testsuite/tests/ghci/should_run/T18594.stdout - 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 The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/24db56deeca96c05c0818c2359a414b0c4b2c9ee...7698a505889cd590af93a18956188e339e3199c5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/24db56deeca96c05c0818c2359a414b0c4b2c9ee...7698a505889cd590af93a18956188e339e3199c5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 17:53:59 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Thu, 12 Dec 2024 12:53:59 -0500 Subject: [Git][ghc/ghc][wip/romes/graph-compact-easy] Backwards compat revertions Message-ID: <675b233718188_374672bd060320a7@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/graph-compact-easy at Glasgow Haskell Compiler / GHC Commits: e20cd5f0 by Rodrigo Mesquita at 2024-12-12T17:53:33+00:00 Backwards compat revertions - - - - - 10 changed files: - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Iface/Load.hs - compiler/GHC/Unit/Env.hs - compiler/GHC/Unit/Home/Graph.hs - compiler/GHC/Unit/Home/PackageTable.hs - docs/users_guide/9.14.1-notes.rst - ghc/GHCi/UI.hs - ghc/Main.hs Changes: ===================================== compiler/GHC/Driver/Env.hs ===================================== @@ -28,6 +28,9 @@ module GHC.Driver.Env , lookupType , lookupIfaceByModule , mainModIs + + -- * Legacy API + , hscUpdateHPT ) where @@ -326,3 +329,19 @@ discardIC hsc_env where home_unit = hsc_home_unit hsc_env old_name = ic_name old_ic + + +-------------------------------------------------------------------------------- +-- * The Legacy API, should be removed after enough deprecation cycles +-------------------------------------------------------------------------------- + +{-# DEPRECATED hscUpdateHPT "Updating the HPT directly is no longer a supported \ + \ operation. Instead, the HPT is an insert-only data structure. If you want to \ + \ overwrite an existing entry, just use 'hscInsertHPT' to insert it again (it \ + \ will override the existing entry if there is one). See 'GHC.Unit.Home.PackageTable' for more details." #-} +hscUpdateHPT :: (HomePackageTable -> HomePackageTable) -> HscEnv -> HscEnv +hscUpdateHPT f hsc_env = hsc_env { hsc_unit_env = updateHug (HUG.unitEnv_adjust upd (ue_currentUnit $ hsc_unit_env hsc_env)) ue } + where + ue = hsc_unit_env hsc_env + upd hue = hue { homeUnitEnv_hpt = f (homeUnitEnv_hpt hue) } + ===================================== compiler/GHC/Driver/Main.hs ===================================== @@ -312,7 +312,7 @@ import GHC.Unit.Home.PackageTable newHscEnv :: FilePath -> DynFlags -> IO HscEnv newHscEnv top_dir dflags = do - hpt <- newHomePackageTable + hpt <- emptyHomePackageTable newHscEnvWithHUG top_dir dflags (homeUnitId_ dflags) (home_unit_graph hpt) where home_unit_graph hpt = HUG.unitEnv_singleton ===================================== compiler/GHC/Driver/Make.hs ===================================== @@ -773,7 +773,7 @@ load' mhmi_cache how_much diag_wrapper mHscMessage mod_graph = do -- write an empty HPT to allow the old HPT to be GC'd. let pruneHomeUnitEnv hme = do - emptyHPT <- liftIO newHomePackageTable + emptyHPT <- liftIO emptyHomePackageTable pure hme{ homeUnitEnv_hpt = emptyHPT } hug' <- traverse pruneHomeUnitEnv (ue_home_unit_graph $ hsc_unit_env hsc_env) let ue' = (hsc_unit_env hsc_env){ ue_home_unit_graph = hug' } ===================================== compiler/GHC/Iface/Load.hs ===================================== @@ -666,8 +666,8 @@ dontLeakTheHUG thing_inside = do | hptHasHoles hpt = True | otherwise = False pruneHomeUnitEnv hme = do - emptyHomePackageTable <- liftIO newHomePackageTable - return hme{ homeUnitEnv_hpt = emptyHomePackageTable } + emptyHPT <- liftIO emptyHomePackageTable + return hme{ homeUnitEnv_hpt = emptyHPT } unit_env_io | keepFor20509 (ue_hpt old_unit_env) = return old_unit_env ===================================== compiler/GHC/Unit/Env.hs ===================================== @@ -102,6 +102,12 @@ module GHC.Unit.Env , hugAnnsBelow , hugRulesBelow , hugInstancesBelow + + + -- * Legacy API + -- + -- | This API is deprecated! + , ue_units ) where @@ -471,3 +477,12 @@ There is also a template-haskell function, makeRelativeToProject, which uses the in order to allow users to offset their own relative paths. -} + +-------------------------------------------------------------------------------- +-- * Legacy API +-------------------------------------------------------------------------------- + +{-# DEPRECATED ue_units "Renamed to homeUnitState" #-} +ue_units :: HasDebugCallStack => UnitEnv -> UnitState +ue_units = homeUnitState + ===================================== compiler/GHC/Unit/Home/Graph.hs ===================================== @@ -60,7 +60,10 @@ module GHC.Unit.Home.Graph , unitEnv_foldWithKey , unitEnv_singleton , unitEnv_adjust + , unitEnv_keys , unitEnv_insert + , unitEnv_new + , unitEnv_lookup ) where import GHC.Prelude @@ -298,6 +301,12 @@ newtype UnitEnvGraph v = UnitEnvGraph { unitEnv_graph :: Map UnitEnvGraphKey v } deriving (Functor, Foldable, Traversable) +unitEnv_new :: Map UnitEnvGraphKey v -> UnitEnvGraph v +unitEnv_new m = + UnitEnvGraph + { unitEnv_graph = m + } + unitEnv_insert :: UnitEnvGraphKey -> v -> UnitEnvGraph v -> UnitEnvGraph v unitEnv_insert unitId env unitEnv = unitEnv { unitEnv_graph = Map.insert unitId env (unitEnv_graph unitEnv) @@ -328,6 +337,9 @@ unitEnv_keys env = Map.keysSet (unitEnv_graph env) unitEnv_foldWithKey :: (b -> UnitEnvGraphKey -> a -> b) -> b -> UnitEnvGraph a -> b unitEnv_foldWithKey f z (UnitEnvGraph g)= Map.foldlWithKey' f z g +unitEnv_lookup :: UnitEnvGraphKey -> UnitEnvGraph v -> v +unitEnv_lookup u env = expectJust "unitEnv_lookup" $ unitEnv_lookup_maybe u env + -------------------------------------------------------------------------------- -- * Utilities -------------------------------------------------------------------------------- ===================================== compiler/GHC/Unit/Home/PackageTable.hs ===================================== @@ -39,7 +39,7 @@ module GHC.Unit.Home.PackageTable ( HomePackageTable - , newHomePackageTable + , emptyHomePackageTable -- * Lookups in the HPT , lookupHpt @@ -47,6 +47,7 @@ module GHC.Unit.Home.PackageTable -- * Extending the HPT , addHomeModInfoToHpt + , addHomeModInfosToHpt -- * Queries about home modules , hptHasHoles @@ -85,13 +86,19 @@ module GHC.Unit.Home.PackageTable -- -- In GHC itself these should be avoided. , hptInternalTableRef + + -- * Legacy API + -- + -- | This API is deprecated and meant to be removed. + , addToHpt + , addListToHpt ) where import GHC.Prelude import GHC.Data.Maybe import Data.IORef -import Control.Monad ((<$!>)) +import Control.Monad ((<$!>), foldM) import qualified Data.Set as Set import GHC.Core.FamInstEnv @@ -158,9 +165,9 @@ data HomePackageTable = HPT { -- Be careful not to share it across e.g. different units, since it uses a -- mutable variable under the hood to keep the monotonically increasing list of -- loaded modules. -newHomePackageTable :: IO HomePackageTable +emptyHomePackageTable :: IO HomePackageTable -- romes:todo: use a MutableArray directly? -newHomePackageTable = do +emptyHomePackageTable = do table <- newIORef emptyUDFM return HPT{table, hasHoles=False, lastLoadedKey=Nothing} @@ -187,22 +194,39 @@ lookupHptByModule hpt mod -- | Add a new module to the HPT. -- --- A very fundamental operation of the HPT! +-- An HPT is a monotonically increasing data structure, holding information about loaded modules in a package. +-- This is the main function by which the HPT is extended or updated. +-- +-- When the module of the inserted 'HomeModInfo' does not exist, a new entry in +-- the HPT is created for that module name. +-- When the module already has an entry, inserting a new one entry in the HPT +-- will always overwrite the existing entry for that module. -- -- $O(1)$ addHomeModInfoToHpt :: HomeModInfo -> HomePackageTable -> IO HomePackageTable addHomeModInfoToHpt hmi hpt = addToHpt hpt (moduleName (mi_module (hm_iface hmi))) hmi - where - addToHpt :: HomePackageTable -> ModuleName -> HomeModInfo -> IO HomePackageTable - addToHpt HPT{table=hptr, hasHoles} mn hmi = do - atomicModifyIORef' hptr (\hpt -> (addToUDFM hpt mn hmi, ())) - -- If the key already existed in the map, this insertion is overwriting - -- the HMI of a previously loaded module (likely in rehydration). - return - HPT{ table = hptr - , hasHoles = hasHoles || isHoleModule (mi_semantic_module (hm_iface hmi)) - , lastLoadedKey = Just $! getUnique mn {- yes, even if we're overwriting something already in the map -} - } + +{-# DEPRECATED addToHpt "Deprecated in favour of 'addHomeModInfoToHpt', as the module at which a 'HomeModInfo' is inserted should always be derived from the 'HomeModInfo' itself." #-} +-- After deprecation cycle, move `addToHpt` to a `where` clause inside `addHomeModInfoToHpt`. +addToHpt :: HomePackageTable -> ModuleName -> HomeModInfo -> IO HomePackageTable +addToHpt HPT{table=hptr, hasHoles} mn hmi = do + atomicModifyIORef' hptr (\hpt -> (addToUDFM hpt mn hmi, ())) + -- If the key already existed in the map, this insertion is overwriting + -- the HMI of a previously loaded module (likely in rehydration). + return + HPT{ table = hptr + , hasHoles = hasHoles || isHoleModule (mi_semantic_module (hm_iface hmi)) + , lastLoadedKey = Just $! getUnique mn {- yes, even if we're overwriting something already in the map -} + } + +-- | 'addHomeModInfoToHpt' for multiple module infos. +addHomeModInfosToHpt :: HomePackageTable -> [HomeModInfo] -> IO HomePackageTable +addHomeModInfosToHpt hpt = foldM (flip addHomeModInfoToHpt) hpt + +{-# DEPRECATED addListToHpt "Deprecated in favour of 'addHomeModInfosToHpt', as the module at which a 'HomeModInfo' is inserted should always be derived from the 'HomeModInfo' itself." #-} +-- After deprecation cycle, remove. +addListToHpt :: HomePackageTable -> [(ModuleName, HomeModInfo)] -> IO HomePackageTable +addListToHpt hpt = foldM (uncurry . addToHpt) hpt ---------------------------------------------------------------------------------- ---- * Queries @@ -420,7 +444,7 @@ pprHPT HPT{table=hptr} = do -- listHMIToHpt :: [HomeModInfo] -> HomePackageTable ---------------------------------------------------------------------------------- --- Would be fine, but may lead to bad utilization +-- Would be fine, but may lead to linearly traversing the HPT unnecessarily -- (e.g. `lastLoadedKey` superseded bad usages) ---------------------------------------------------------------------------------- ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -47,6 +47,16 @@ Cmm ``ghc`` library ~~~~~~~~~~~~~~~ +- `addToHpt` and `addListToHPT` were moved from `GHC.Unit.Home.ModInfo` to `GHC.Unit.Home.PackageTable` and deprecated in favour of `addHomeModInfoToHpt` and `addHomeModInfosToHpt`. +- `UnitEnvGraph` and operations `unitEnv_lookup_maybe`, `unitEnv_foldWithKey, `unitEnv_singleton`, `unitEnv_adjust`, `unitEnv_insert`, `unitEnv_new` were moved from `GHC.Unit.Env` to `GHC.Unit.Home.Graph`. +- The HomePackageTable (HPT) is now exported from `GHC.Unit.Home.PackageTable`, + and is now backed by an IORef to avoid by construction very bad memory leaks. + This means the API to the HPT now is for the most part in IO. For instance, + `emptyHomePackageTable` and `addHomeModInfoToHpt` are now in IO. +- `mkHomeUnitEnv` was moved to `GHC.Unit.Home.PackageTable`, and now takes two + extra explicit arguments. To restore previous behaviour, pass `emptyUnitState` + and `Nothing` as the first two arguments additionally. + ``ghc-heap`` library ~~~~~~~~~~~~~~~~~~~~ ===================================== ghc/GHCi/UI.hs ===================================== @@ -4495,7 +4495,7 @@ discardInterfaceCache = clearHPTs :: GhciMonad m => m () clearHPTs = do let pruneHomeUnitEnv hme = liftIO $ do - emptyHpt <- newHomePackageTable + emptyHpt <- emptyHomePackageTable pure hme{ homeUnitEnv_hpt = emptyHpt } discardMG hsc = hsc { hsc_mod_graph = GHC.emptyMG } modifySessionM $ \hsc_env -> do ===================================== ghc/Main.hs ===================================== @@ -852,12 +852,12 @@ initMulti unitArgsFiles = do (dbs,unit_state,home_unit,mconstants) <- liftIO $ State.initUnits logger hue_flags cached_unit_dbs home_units updated_dflags <- liftIO $ updatePlatformConstants dflags mconstants - emptyHomePackageTable <- liftIO $ newHomePackageTable + emptyHpt <- liftIO $ emptyHomePackageTable pure $ HomeUnitEnv { homeUnitEnv_units = unit_state , homeUnitEnv_unit_dbs = Just dbs , homeUnitEnv_dflags = updated_dflags - , homeUnitEnv_hpt = emptyHomePackageTable + , homeUnitEnv_hpt = emptyHpt , homeUnitEnv_home_unit = Just home_unit } @@ -954,7 +954,7 @@ offsetDynFlags dflags = createUnitEnvFromFlags :: NE.NonEmpty DynFlags -> IO (HomeUnitGraph, UnitId) createUnitEnvFromFlags unitDflags = do unitEnvList <- forM unitDflags $ \dflags -> do - emptyHpt <- newHomePackageTable + emptyHpt <- emptyHomePackageTable let newInternalUnitEnv = HUG.mkHomeUnitEnv emptyUnitState Nothing dflags emptyHpt Nothing return (homeUnitId_ dflags, newInternalUnitEnv) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e20cd5f0ff606ae9d110c018027afb6380e258d0 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e20cd5f0ff606ae9d110c018027afb6380e258d0 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 20:07:39 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Thu, 12 Dec 2024 15:07:39 -0500 Subject: [Git][ghc/ghc][master] Update GHCi :info type declaration printing (#24459) Message-ID: <675b428b6eed5_3a215b3f1060924f@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 9c53489d by Andrei Borzenkov at 2024-12-12T15:06:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 29 changed files: - compiler/GHC/Core/TyCon.hs - compiler/GHC/Iface/Syntax.hs - compiler/GHC/Iface/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/ghci.rst - testsuite/tests/backpack/should_fail/T19244a.stderr - testsuite/tests/backpack/should_fail/T19244b.stderr - testsuite/tests/backpack/should_fail/bkpfail46.stderr - testsuite/tests/ghci/T18060/T18060.stdout - testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout - testsuite/tests/ghci/scripts/T15941.stdout - testsuite/tests/ghci/scripts/T19310.stdout - testsuite/tests/ghci/scripts/T21294a.stdout - + testsuite/tests/ghci/scripts/T24459.script - + testsuite/tests/ghci/scripts/T24459.stdout - testsuite/tests/ghci/scripts/T8535.stdout - testsuite/tests/ghci/scripts/T9181.stdout - testsuite/tests/ghci/scripts/all.T - testsuite/tests/ghci/scripts/ghci020.stdout - testsuite/tests/ghci/should_run/T10145.stdout - testsuite/tests/ghci/should_run/T18594.stdout - 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/interface-stability/template-haskell-exports.stdout - testsuite/tests/rep-poly/RepPolyBackpack3.stderr Changes: ===================================== compiler/GHC/Core/TyCon.hs ===================================== @@ -24,7 +24,8 @@ module GHC.Core.TyCon( mkRequiredTyConBinder, mkAnonTyConBinder, mkAnonTyConBinders, tyConBinderForAllTyFlag, tyConBndrVisForAllTyFlag, isNamedTyConBinder, - isVisibleTyConBinder, isInvisibleTyConBinder, + isVisibleTyConBinder, isInvisSpecTyConBinder, isInvisibleTyConBinder, + isInferredTyConBinder, isVisibleTcbVis, isInvisSpecTcbVis, -- ** Field labels @@ -487,7 +488,7 @@ mkRequiredTyConBinder dep_set tv | tv `elemVarSet` dep_set = mkNamedTyConBinder Required tv | otherwise = mkAnonTyConBinder tv -tyConBinderForAllTyFlag :: TyConBinder -> ForAllTyFlag +tyConBinderForAllTyFlag :: VarBndr a TyConBndrVis -> ForAllTyFlag tyConBinderForAllTyFlag (Bndr _ vis) = tyConBndrVisForAllTyFlag vis tyConBndrVisForAllTyFlag :: TyConBndrVis -> ForAllTyFlag @@ -513,10 +514,22 @@ isInvisSpecTcbVis :: TyConBndrVis -> Bool isInvisSpecTcbVis (NamedTCB Specified) = True isInvisSpecTcbVis _ = False +isInvisInferTcbVis :: TyConBndrVis -> Bool +isInvisInferTcbVis (NamedTCB Inferred) = True +isInvisInferTcbVis _ = False + +isInvisSpecTyConBinder :: VarBndr tv TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInvisSpecTyConBinder (Bndr _ tcb_vis) = isInvisSpecTcbVis tcb_vis + isInvisibleTyConBinder :: VarBndr tv TyConBndrVis -> Bool -- Works for IfaceTyConBinder too isInvisibleTyConBinder tcb = not (isVisibleTyConBinder tcb) +isInferredTyConBinder :: VarBndr var TyConBndrVis -> Bool +-- Works for IfaceTyConBinder too +isInferredTyConBinder (Bndr _ tcb_vis) = isInvisInferTcbVis tcb_vis + -- Build the 'tyConKind' from the binders and the result kind. -- Keep in sync with 'mkTyConKind' in GHC.Iface.Type. mkTyConKind :: [TyConBinder] -> Kind -> Kind ===================================== compiler/GHC/Iface/Syntax.hs ===================================== @@ -100,6 +100,7 @@ import Control.Monad import System.IO.Unsafe import Control.DeepSeq import Data.Proxy +import qualified Data.Set as Set infixl 3 &&& @@ -912,15 +913,226 @@ constraintIfaceKind :: IfaceKind constraintIfaceKind = IfaceTyConApp (IfaceTyCon constraintKindTyConName (mkIfaceTyConInfo NotPromoted IfaceNormalTyCon)) IA_Nil +{- Note [Print invisible binders in interface declarations] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Starting from GHC 9.8 it is possible to write invisible @-binders +in type-level declarations. That feature introduced several challenges +in interface declaration pretty printing (e.g. using the :info command +inside GHCi) to overcome. + +Consider this example with a redundant type variable `a`: + + type Id :: forall a b. b -> b + type Id x = x + +GHC will create system binders for kinds there to meet typechecking +and compilation needs and that will turn that declaration into a less +straightforward form with multiple @-binders: + + type Id :: forall {k} (a :: k) b. b -> b + type Id @{k} @a @b x = x :: b + +This information isn't required for understanding in most cases, +so GHC will hide it unless -fprint-explicit-kinds flag is supplied by the user. +And here is what we get: + + type Id :: forall {k} (a :: k) b. b -> b + type Id x = x + +However, there are several cases involving user-written @-binders +when it is cruicial to show them to provide understanding of what's going on. +First of all it can plainly appear on the right-hand side: + + type T :: forall (a :: Type). Type + type T @x = Tuple2 x x + +Not only that, an invisible binder can be unused by itself, but have an +impact on invisible binder positioning, e.g.: + + type T :: forall (a :: Type) (b :: Type). Type + type T @x @y = Tuple2 y y + +Here `x` is unused, but it is required to display, as `y` corresponds +to `b` in the standalone kind signature. + +The last problem is related to non-generative type declarations (type +synonyms and type families) only. It is not possible to partially +apply them, hence it's important to understand what parts of a declaration's +kind are related to the declaration itself. Here is a simple example: + + type T1 :: forall k. k -> Maybe k + type T1 = Just + + type T2 :: forall k. k -> Maybe k + type T2 @k = Just + +Both these type synonyms have the same kind signature, but they aren't +the same! `T1` can be used in strictly more cases, for example, as +an argument for a higher-order type: + + type F :: (forall k. k -> Maybe k) -> Type + + type R1 = F T1 -- Yes! + type R2 = F T2 -- No, that will not compile :( + +User-written invisible binders and "system" binders introduced by GHC +are indistinguishable at this stage, hence we try to only print +semantically significant binders by default. + +An invisible binder is considered significant when it meets at least +one of the following two criteria: + - It visibly occurs in the declaration's body (See more about that below) + - It is followed by a significant binder, + so it affects positioning +For non-generative type declarations (type synonyms and type families), +there is one additional criterion: + - It is not followed by a visible binder, so it + affects the arity of a type declaration + +The overall solution consists of three functions: +- `iface_decl_non_generative` decides whether the current declaration is + generative or not + +- `iface_decl_mentioned_vars` gives a Set of variables that + visibly occur in the declaration's body + +- `suppressIfaceInvisibles` uses information provided + by the first two functions to actually filter out insignificant + @-binders + +Here is what we consider "visibly occurs" in general and for +each declaration type: + +- Variables that visibly occur in IfaceType are collected by the + `visibleTypeVarOccurencies` function. + +- Variables that visibly occur in IfaceAT are collected by `iface_at_mentioned_vars` + function. It accounts visible binders for associated data and type + families and for type families only, it counts invisible binders. + Associated types can't have definitions, so it's safe to drop all other + binders. + +- None of the type variables in IfaceData declared using GADT syntax doesn't are considered + as visibe occurrences. This is because each constructor has its own variables, e.g.: + + type D :: forall (a :: Type). Type + data D @a where + MkD :: D @b + -- This is shorthand for: + -- MkD :: forall b. D @b + +- For IfaceData declared using Haskell98 syntax, a variable is considered visible + if it visibly occurs in at least one argument's type in at least one constructor. + +- For IfaceSynonym, a variable is considered visible if it visibly occurs + in the RHS type. + +- For IfaceFamily, a variable is considered visible if i occurs inside + an injectivity annotation, e.g. + + type family F @a = r | r -> a + +- For IfaceClass, a variable is considered visible if it occurs at least + once inside a functional dependency annotation or in at least one method's + type signature, or if it visibly occurs in at least one associated type's + declaration (Visible occurrences in associated types are described above.) + +- IfacePatSyn, IfaceId and IfaceAxiom are irrelevant to this problem. +-} + +iface_decl_generative :: IfaceDecl -> Bool +iface_decl_generative IfaceSynonym{} = False +iface_decl_generative IfaceFamily{ifFamFlav = rhs} + | IfaceDataFamilyTyCon <- rhs = True + | otherwise = False +iface_decl_generative IfaceData{} = True +iface_decl_generative IfaceId{} = True +iface_decl_generative IfaceClass{} = True +iface_decl_generative IfaceAxiom{} = True +iface_decl_generative IfacePatSyn{} = True + +iface_at_mentioned_vars :: IfaceAT -> Set.Set IfLclName +iface_at_mentioned_vars (IfaceAT decl _) + = Set.fromList . map ifTyConBinderName . suppress_vars $ binders + where + -- ifBinders is not total, so we assume here that associated types + -- cannot be IfaceId, IfaceAxiom or IfacePatSyn + binders = case decl of + IfaceFamily {ifBinders} -> ifBinders + IfaceData{ifBinders} -> ifBinders + IfaceSynonym{ifBinders} -> ifBinders + IfaceClass{ifBinders} -> ifBinders + IfaceId{} -> panic "IfaceId shoudn't be an associated type!" + IfaceAxiom{} -> panic "IfaceAxiom shoudn't be an associated type!" + IfacePatSyn {} -> panic "IfacePatSyn shoudn't be an associated type!" + + suppress_arity = not (iface_decl_generative decl) + + suppress_vars binders = + suppressIfaceInvisibles + -- We need to count trailing invisible binders for type families + (MkPrintArityInvisibles suppress_arity) + -- But this setting will simply count all invisible binderss + (PrintExplicitKinds False) + -- ...and associated types can't have a RHS + mempty + binders binders + +-- See Note [Print invisible binders in interface declarations] +-- in particular, the parts about collecting visible occurrences +iface_decl_mentioned_vars :: IfaceDecl -> Set.Set IfLclName +iface_decl_mentioned_vars (IfaceData { ifCons = condecls, ifGadtSyntax = gadt }) + | gadt = mempty + -- Get visible occurrences in each constructor in each alternative + | otherwise = Set.unions (map mentioned_con_vars cons) + where + mentioned_con_vars = Set.unions . map (visibleTypeVarOccurencies . snd) . ifConArgTys + cons = visibleIfConDecls condecls + +iface_decl_mentioned_vars (IfaceClass { ifFDs = fds, ifBody = IfAbstractClass }) + = Set.unions (map fundep_names fds) + where + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars + (IfaceClass { ifFDs = fds + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs + }}) + = Set.unions + [ Set.unions (map fundep_names fds) + , Set.unions (map iface_at_mentioned_vars ats) + , Set.unions (map (visibleTypeVarOccurencies . class_op_type) sigs) + ] + where + class_op_type (IfaceClassOp _bndr ty _default) = ty + + fundep_names fd = Set.fromList (fst fd) `Set.union` Set.fromList (snd fd) + +iface_decl_mentioned_vars (IfaceSynonym {ifSynRhs = poly_ty}) + = visibleTypeVarOccurencies poly_ty + +-- Consider a binder to be a visible occurrence if it occurs inside an injectivity annotation. +iface_decl_mentioned_vars (IfaceFamily { ifBinders = binders, ifResVar = res_var, ifFamInj = inj }) + | Just{} <- res_var + , Injective injectivity <- inj + = Set.fromList . map (ifTyConBinderName . snd) . filter fst $ zip injectivity binders + | otherwise = mempty + +iface_decl_mentioned_vars IfacePatSyn{} = mempty +iface_decl_mentioned_vars IfaceId{} = mempty +iface_decl_mentioned_vars IfaceAxiom{} = mempty + pprIfaceDecl :: ShowSub -> IfaceDecl -> SDoc -- NB: pprIfaceDecl is also used for pretty-printing TyThings in GHCi -- See Note [Pretty printing via Iface syntax] in GHC.Types.TyThing.Ppr -pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, - ifCtxt = context, ifResKind = kind, - ifRoles = roles, ifCons = condecls, - ifParent = parent, - ifGadtSyntax = gadt, - ifBinders = binders }) +pprIfaceDecl ss decl@(IfaceData { ifName = tycon, ifCType = ctype, + ifCtxt = context, ifResKind = kind, + ifRoles = roles, ifCons = condecls, + ifParent = parent, + ifGadtSyntax = gadt, + ifBinders = binders }) | gadt = vcat [ pp_roles , pp_ki_sig @@ -946,8 +1158,10 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_kind = ppUnless (ki_sig_printable || isIfaceLiftedTypeKind kind) (dcolon <+> ppr kind) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss tycon binders + pp_lhs = case parent of - IfNoParent -> pprIfaceDeclHead suppress_bndr_sig context ss tycon binders + IfNoParent -> decl_head IfDataInstance{} -> text "instance" <+> pp_data_inst_forall <+> pprIfaceTyConParent parent @@ -994,36 +1208,40 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype, pp_extra = vcat [pprCType ctype] -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfAbstractClass }) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfAbstractClass }) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig [] ss clas binders <+> pprFundeps fds ] + , text "class" <+> decl_head <+> pprFundeps fds ] where + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss clas binders + -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceClass { ifName = clas - , ifRoles = roles - , ifFDs = fds - , ifBinders = binders - , ifBody = IfConcreteClass { - ifATs = ats, - ifSigs = sigs, - ifClassCtxt = context, - ifMinDef = minDef - }}) +pprIfaceDecl ss decl@(IfaceClass { ifName = clas + , ifRoles = roles + , ifFDs = fds + , ifBinders = binders + , ifBody = IfConcreteClass { + ifATs = ats, + ifSigs = sigs, + ifClassCtxt = context, + ifMinDef = minDef + }}) = vcat [ pprClassRoles ss clas binders roles , pprClassStandaloneKindSig ss clas (mkIfaceTyConKind binders constraintIfaceKind) - , text "class" <+> pprIfaceDeclHead suppress_bndr_sig context ss clas binders <+> pprFundeps fds <+> pp_where + , text "class" <+> decl_head <+> pprFundeps fds <+> pp_where , nest 2 (vcat [ vcat asocs, vcat dsigs , ppShowAllSubs ss (pprMinDef $ fromIfaceBooleanFormula minDef)])] where pp_where = ppShowRhs ss $ ppUnless (null sigs && null ats) (text "where") + decl_head = pprIfaceDeclHead decl suppress_bndr_sig context ss clas binders + asocs = ppr_trim $ map maybeShowAssoc ats dsigs = ppr_trim $ map maybeShowSig sigs @@ -1055,19 +1273,20 @@ pprIfaceDecl ss (IfaceClass { ifName = clas -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceSynonym { ifName = tc - , ifBinders = binders - , ifSynRhs = mono_ty - , ifResKind = res_kind}) +pprIfaceDecl ss decl@(IfaceSynonym { ifName = tc + , ifBinders = binders + , ifSynRhs = poly_ty + , ifResKind = res_kind}) = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tc binders <+> equals) - 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau - , ppUnless (isIfaceLiftedTypeKind res_kind) (dcolon <+> ppr res_kind) ]) + , hang (text "type" <+> decl_head <+> equals) + 2 (sep [ pprIfaceForAll tvs, pprIfaceContextArr theta, ppr_tau ]) ] where - (tvs, theta, tau) = splitIfaceSigmaTy mono_ty + (tvs, theta, tau) = splitIfaceSigmaTy poly_ty name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tc) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tc binders + -- See Note [Printing type abbreviations] in GHC.Iface.Type ppr_tau | tc `hasKey` liftedTypeKindTyConKey || tc `hasKey` unrestrictedFunTyConKey || @@ -1078,20 +1297,18 @@ pprIfaceDecl ss (IfaceSynonym { ifName = tc -- See Note [Suppressing binder signatures] in GHC.Iface.Type suppress_bndr_sig = SuppressBndrSig True -pprIfaceDecl ss (IfaceFamily { ifName = tycon - , ifFamFlav = rhs, ifBinders = binders - , ifResKind = res_kind - , ifResVar = res_var, ifFamInj = inj }) +pprIfaceDecl ss decl@(IfaceFamily { ifName = tycon + , ifFamFlav = rhs, ifBinders = binders + , ifResKind = res_kind + , ifResVar = res_var, ifFamInj = inj }) | IfaceDataFamilyTyCon <- rhs = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , text "data family" <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders + , text "data family" <+> decl_head ] | otherwise = vcat [ pprStandaloneKindSig name_doc (mkIfaceTyConKind binders res_kind) - , hang (text "type family" - <+> pprIfaceDeclHead suppress_bndr_sig [] ss tycon binders - <+> pp_inj res_var inj + , hang (text "type family" <+> decl_head <+> pp_inj res_var inj <+> ppShowRhs ss (pp_where rhs)) 2 (ppShowRhs ss (pp_rhs rhs)) $$ @@ -1100,6 +1317,8 @@ pprIfaceDecl ss (IfaceFamily { ifName = tycon where name_doc = pprPrefixIfDeclBndr (ss_how_much ss) (occName tycon) + decl_head = pprIfaceDeclHead decl suppress_bndr_sig [] ss tycon binders + pp_where (IfaceClosedSynFamilyTyCon {}) = text "where" pp_where _ = empty @@ -1188,7 +1407,12 @@ pprRoles :: (Role -> Bool) -> SDoc -> [IfaceTyConBinder] -> [Role] -> SDoc pprRoles suppress_if tyCon bndrs roles = sdocOption sdocPrintExplicitKinds $ \print_kinds -> - let froles = suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs roles + let froles = + suppressIfaceInvisibles + (MkPrintArityInvisibles False) + (PrintExplicitKinds print_kinds) + mempty + bndrs roles in ppUnless (all suppress_if froles || null froles) $ text "type role" <+> tyCon <+> hsep (map ppr froles) @@ -1245,16 +1469,25 @@ pprIfaceTyConParent IfNoParent pprIfaceTyConParent (IfDataInstance _ tc tys) = pprIfaceTypeApp topPrec tc tys -pprIfaceDeclHead :: SuppressBndrSig +pprIfaceDeclHead :: IfaceDecl + -> SuppressBndrSig -> IfaceContext -> ShowSub -> Name -> [IfaceTyConBinder] -- of the tycon, for invisible-suppression -> SDoc -pprIfaceDeclHead suppress_sig context ss tc_occ bndrs +pprIfaceDeclHead decl suppress_sig context ss tc_occ bndrs = sdocOption sdocPrintExplicitKinds $ \print_kinds -> sep [ pprIfaceContextArr context , pprPrefixIfDeclBndr (ss_how_much ss) (occName tc_occ) <+> pprIfaceTyConBinders suppress_sig - (suppressIfaceInvisibles (PrintExplicitKinds print_kinds) bndrs bndrs) ] + (suppressIfaceInvisibles + (MkPrintArityInvisibles print_arity) + (PrintExplicitKinds print_kinds) + mentioned_vars + bndrs bndrs) ] + where + -- See Note [Print invisible binders in interface declarations] + mentioned_vars = iface_decl_mentioned_vars decl + print_arity = not (iface_decl_generative decl) pprIfaceConDecl :: ShowSub -> Bool -> IfaceTopBndr ===================================== compiler/GHC/Iface/Type.hs ===================================== @@ -44,6 +44,7 @@ module GHC.Iface.Type ( SuppressBndrSig(..), UseBndrParens(..), PrintExplicitKinds(..), + PrintArityInvisibles(..), pprIfaceType, pprParendIfaceType, pprPrecIfaceType, pprIfaceContext, pprIfaceContextArr, pprIfaceIdBndr, pprIfaceLamBndr, pprIfaceTvBndr, pprIfaceTyConBinders, @@ -56,6 +57,7 @@ module GHC.Iface.Type ( isIfaceRhoType, suppressIfaceInvisibles, + visibleTypeVarOccurencies, stripIfaceInvisVars, stripInvisArgs, @@ -98,6 +100,9 @@ import Data.Word (Word8) import Control.Arrow (first) import Control.DeepSeq import Control.Monad ((<$!>)) +import Data.List (dropWhileEnd) +import qualified Data.List.NonEmpty as NonEmpty +import qualified Data.Set as Set {- ************************************************************************ @@ -609,9 +614,21 @@ splitIfaceReqForallTy (IfaceForAllTy bndr ty) = case splitIfaceReqForallTy ty of { (bndrs, rho) -> (bndr:bndrs, rho) } splitIfaceReqForallTy rho = ([], rho) -suppressIfaceInvisibles :: PrintExplicitKinds -> [IfaceTyConBinder] -> [a] -> [a] -suppressIfaceInvisibles (PrintExplicitKinds True) _tys xs = xs -suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs +newtype PrintArityInvisibles = MkPrintArityInvisibles Bool + +-- See Note [Print invisible binders in interface declarations] +-- for the definition of what binders are considered insignificant +suppressIfaceInvisibles :: PrintArityInvisibles + -> PrintExplicitKinds + -> Set.Set IfLclName + -> [IfaceTyConBinder] + -> [a] + -> [a] +suppressIfaceInvisibles _ (PrintExplicitKinds True) _ _tys xs = xs + +suppressIfaceInvisibles -- This case is semantically the same as the third case, but it should be way f + (MkPrintArityInvisibles False) (PrintExplicitKinds False) mentioned_vars tys xs + | Set.null mentioned_vars = suppress tys xs where suppress _ [] = [] suppress [] a = a @@ -619,6 +636,44 @@ suppressIfaceInvisibles (PrintExplicitKinds False) tys xs = suppress tys xs | isInvisibleTyConBinder k = suppress ks xs | otherwise = x : suppress ks xs +suppressIfaceInvisibles + (MkPrintArityInvisibles arity_invisibles) + (PrintExplicitKinds False) mentioned_vars tys xs + = map snd (suppress (zip tys xs)) + where + -- Consider this example: + -- type T :: forall k1 k2. Type + -- type T @a @b = b + -- `@a` is not mentioned on the RHS. However, we can't just + -- drop it because implicit argument positioning matters. + -- + -- Hence just drop the end + only_mentioned_binders = dropWhileEnd (not . is_binder_mentioned) + + is_binder_mentioned (bndr, _) = ifTyConBinderName bndr `Set.member` mentioned_vars + + suppress_invisibles group = + applyWhen invis_group only_mentioned_binders bndrs + where + bndrs = NonEmpty.toList group + invis_group = is_invisible_bndr (NonEmpty.head group) + + suppress_invisible_groups [] = [] + suppress_invisible_groups [group] = + if arity_invisibles + then NonEmpty.toList group -- the last group affects arity + else suppress_invisibles group + suppress_invisible_groups (group : groups) + = suppress_invisibles group ++ suppress_invisible_groups groups + + suppress + = suppress_invisible_groups -- Filter out insignificant invisible binders + . NonEmpty.groupWith is_invisible_bndr -- Find chunks of @-binders + . filterOut is_inferred_bndr -- We don't want to display @{binders} + + is_inferred_bndr = isInferredTyConBinder . fst + is_invisible_bndr = isInvisibleTyConBinder . fst + stripIfaceInvisVars :: PrintExplicitKinds -> [IfaceTyConBinder] -> [IfaceTyConBinder] stripIfaceInvisVars (PrintExplicitKinds True) tyvars = tyvars stripIfaceInvisVars (PrintExplicitKinds False) tyvars @@ -659,6 +714,29 @@ ifTypeIsVarFree ty = go ty go_args IA_Nil = True go_args (IA_Arg arg _ args) = go arg && go_args args +visibleTypeVarOccurencies :: IfaceType -> Set.Set IfLclName +-- Returns True if the type contains this name. Doesn't count +-- invisible application +-- Just used to control pretty printing +visibleTypeVarOccurencies = go + where + (<>) = Set.union + + go (IfaceTyVar var) = Set.singleton var + go (IfaceFreeTyVar {}) = mempty + go (IfaceAppTy fun args) = go fun <> go_args args + go (IfaceFunTy _ w arg res) = go w <> go arg <> go res + go (IfaceForAllTy bndr ty) = go (ifaceBndrType $ binderVar bndr) <> go ty + go (IfaceTyConApp _ args) = go_args args + go (IfaceTupleTy _ _ args) = go_args args + go (IfaceLitTy _) = mempty + go (IfaceCastTy {}) = mempty -- Safe + go (IfaceCoercionTy {}) = mempty -- Safe + + go_args IA_Nil = mempty + go_args (IA_Arg arg Required args) = go arg <> go_args args + go_args (IA_Arg _arg _ args) = go_args args + {- Note [Substitution on IfaceType] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Substitutions on IfaceType are done only during pretty-printing to ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -33,6 +33,10 @@ Compiler GHCi ~~~~ +- :ghci-cmd:`:info` now outputs type declarations with @-binders that are + considered semantically significant. See the documentation for :ghci-cmd:`:info` + itself for a more detailed explanation. + Runtime system ~~~~~~~~~~~~~~ ===================================== docs/users_guide/ghci.rst ===================================== @@ -2516,6 +2516,22 @@ commonly used commands. ⟨name⟩ has been loaded from a source file, then GHCi will also display the location of its definition in the source. + GHCi outputs type declarations (type synonyms, newtypes and datatypes, + classes, type and data families) with semantically significant invisible + @-binders. + + An invisible binder is considered significant when it meets at least + one of the following two criteria: + + - It visibly occurs in the declaration's body + + - It is followed by a significant binder, so it affects positioning + + For non-generative type declarations (type synonyms and type families) + there is one additional criterion: + + - It is not followed by a visible binder, so it affects the arity of a type declaration + For types and classes, GHCi also summarises instances that mention them. To avoid showing irrelevant information, an instance is shown only if (a) its head mentions ⟨name⟩, and (b) all the other things ===================================== testsuite/tests/backpack/should_fail/T19244a.stderr ===================================== @@ -17,7 +17,7 @@ T19244a.bkp:22:9: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/T19244b.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing user - [1 of 2] Compiling Map[sig] ( user\Map.hsig, nothing ) - [2 of 2] Compiling User ( user\User.hs, nothing ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, nothing ) + [2 of 2] Compiling User ( user/User.hs, nothing ) [2 of 3] Processing ordmap Instantiating ordmap - [1 of 1] Compiling Map ( ordmap\Map.hs, T19244b.out\ordmap\Map.o ) + [1 of 1] Compiling Map ( ordmap/Map.hs, T19244b.out/ordmap/Map.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including user[Map=ordmap:Map] Instantiating user[Map=ordmap:Map] - [1 of 2] Compiling Map[sig] ( user\Map.hsig, T19244b.out\user\user-GzloW2NeDdA2M0V8qzN4g2\Map.o ) + [1 of 2] Compiling Map[sig] ( user/Map.hsig, T19244b.out/user/user-GzloW2NeDdA2M0V8qzN4g2/Map.o ) T19244b.bkp:11:27: error: [GHC-15843] • Type constructor ‘Key’ has conflicting definitions in the module and its hsig file. Main module: type Key :: * -> Constraint - type Key = GHC.Classes.Ord :: * -> Constraint + type Key = GHC.Classes.Ord Hsig file: type Key :: forall {k}. k -> Constraint class Key k1 The types have different kinds. ===================================== testsuite/tests/backpack/should_fail/bkpfail46.stderr ===================================== @@ -1,20 +1,20 @@ [1 of 3] Processing p - [1 of 2] Compiling A[sig] ( p\A.hsig, nothing ) - [2 of 2] Compiling M ( p\M.hs, nothing ) + [1 of 2] Compiling A[sig] ( p/A.hsig, nothing ) + [2 of 2] Compiling M ( p/M.hs, nothing ) [2 of 3] Processing q Instantiating q - [1 of 1] Compiling A ( q\A.hs, bkpfail46.out\q\A.o ) + [1 of 1] Compiling A ( q/A.hs, bkpfail46.out/q/A.o ) [3 of 3] Processing r Instantiating r [1 of 1] Including p[A=q:A] Instantiating p[A=q:A] - [1 of 2] Compiling A[sig] ( p\A.hsig, bkpfail46.out\p\p-HVmFlcYSefiK5n1aDP1v7x\A.o ) + [1 of 2] Compiling A[sig] ( p/A.hsig, bkpfail46.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o ) bkpfail46.bkp:16:9: error: [GHC-15843] • Type constructor ‘K’ has conflicting definitions in the module and its hsig file. Main module: type K :: * -> Constraint - type K a = GHC.Classes.Eq a :: Constraint + type K a = GHC.Classes.Eq a Hsig file: type K :: * -> Constraint class K a Illegal parameterized type synonym in implementation of abstract data. ===================================== testsuite/tests/ghci/T18060/T18060.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout ===================================== @@ -74,13 +74,13 @@ data Tuple2# a b = (#,#) a b (# , #) :: a -> b -> Tuple2# a b (Int, Int) :: Tuple2 (*) (*) type T :: Tuple2 (*) (*) -type T = (Int, Int) :: Tuple2 (*) (*) +type T = (Int, Int) -- Defined at :19:1 type S :: Solo (*) -type S = MkSolo Int :: Solo (*) +type S = MkSolo Int -- Defined at :20:1 type L :: List (*) -type L = [Int] :: List (*) +type L = [Int] -- Defined at :21:1 f :: Int -> Tuple2 Int Int -> Int (\ (_, _) -> ()) :: Tuple2 a b -> Unit ===================================== testsuite/tests/ghci/scripts/T15941.stdout ===================================== @@ -1,4 +1,3 @@ type T :: * -> * -> * -type T = - (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} :: * -> * -> * +type T = (->) @{GHC.Types.LiftedRep} @{GHC.Types.LiftedRep} -- Defined at :2:1 ===================================== testsuite/tests/ghci/scripts/T19310.stdout ===================================== @@ -1,3 +1,3 @@ type T :: * -> * -> * -type T = (->) @{LiftedRep} @{LiftedRep} :: * -> * -> * +type T = (->) @{LiftedRep} @{LiftedRep} -- Defined at :3:1 ===================================== testsuite/tests/ghci/scripts/T21294a.stdout ===================================== @@ -1,5 +1,5 @@ type L0 :: * -> * -type L0 = [] :: * -> * +type L0 = [] -- Defined at :1:1 type L1 :: * -> * type L1 a = [a] ===================================== testsuite/tests/ghci/scripts/T24459.script ===================================== @@ -0,0 +1,250 @@ +:{ +{-# LANGUAGE TypeFamilies, TypeFamilyDependencies, DataKinds, TypeAbstractions, FunctionalDependencies, AllowAmbiguousTypes #-} + +import Data.Kind +import Data.Data + +-- Check that we don't print binders that aren't included in the arity +type T0 :: forall k. k -> Type +type T0 = Proxy :: forall k. k -> Type + +-- ...and a variant where the arity isn't affected by the type signature +type T1 :: forall k. k -> Type +type T1 = Proxy + +-- ...and that we do print variables that are included in the arity +type T2 :: forall k. k -> Type +type T2 @k = Proxy + +-- ...but don't print invisible binders that don't visibly occur and don't affect the arity +type T3 :: forall k. k -> Type +type T3 a = Proxy a + +-- ...and print invisible binders that do visibly occur +type T4 :: forall a. Type -> Type +type T4 @a _b = Proxy a + +-- ...one more check that it is not affected by the user's input +type T5 :: forall a. Type -> Type +type T5 @a _b = Proxy _b + +-- ...and once again +type T6 :: forall k. Type -> Type +type T6 _a = () + +-- ...now check that we don't mess up with positioning +type T7 :: forall a b c. b -> forall d. Type +type T7 @a @b @c f @d = b + +-- ...and that we count occurrences in theta +type T8 :: forall (a :: Constraint). Type -> Type +type T8 @a _ = forall x. a => x + +-- ...and in forall binder signatures +type T9 :: forall (a :: Type). Type -> Type +type T9 @a _ = forall (x :: a). Int + +-- That's all with type synonyms, let's check other sorts of type declarations + +-- Equatuions should not affect invisible binders for type families, but the arity matters +type TF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +type family TF1 @a @b c @d where + forall b d. TF1 @Type @b Int @d = () + forall a b d. TF1 @a @b (_ :: a) @d = Bool + +-- Injectivity annotations should affect invisible binders. Also check that positioning works +type TF2 :: forall (a :: Type) (b :: Type). Type -> forall (d :: Type). Type +type family TF2 @a @b c @d = r | r -> b + +-- Data families are generative and can't have injectivity annotations +-- hence no invisible binders should be printed +type DF1 :: forall a (b :: Type). a -> forall (d :: Type). Type +data family DF1 @a @b c @d + +-- Data families are generative, so the invisible binder @b isn't a visible usage +type C1 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C1 @a @b c where + data AD a @b + +-- But type families aren't generative, hence the trailing binder @b occurs visibly +type C2 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C2 @a @b c where + type AF a @b + +-- Check that trailing invisible binders are handled properly +type C3 :: forall x. Constraint +class C3 @x where {} + +-- And check that signatures are visible occurrences +type C4 :: forall (a :: Type) (b :: Type). Constraint +class C4 @a @b where + x :: a + y :: b + +-- Also check functional dependencies +type C5 :: forall (a :: Type) (b :: Type). Type -> Constraint +class C5 @a @b c | a -> c where {} + +-- GADTs should not have "visible" mentions of binders at a declaration's head +type D1 :: forall a. Type +data D1 @a where + MkD :: b -> D1 @b + +-- Haskell98-style declarations should work properly +type D2 :: forall a (b :: Type). Type -> forall d. Type +data D2 @a @b c @d = MkD2_1 | MkD2_2 Int b + +-- And now a lot of stuff suggested by @int-index + +data P a b + +type F1 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k1 + +type F2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k2 + +type F3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k3 + +type F4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k4 + +type F5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k5 + +type F6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P k6 + +type F1x2 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k2) + +type F1x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k3) + +type F1x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k4) + +type F1x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k5) + +type F1x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k1,k6) + +type F2x3 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k3) + +type F2x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k4) + +type F2x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k5) + +type F2x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2,k6) + +type F3x4 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k4) + +type F3x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k5) + +type F3x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k3,k6) + +type F4x5 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k5) + +type F4x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k4,k6) + +type F5x6 :: forall k1 k2. k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> Type +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k5,k6) + +:} + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 + +:set -fprint-explicit-kinds + +:i T0 +:i T1 +:i T2 +:i T3 +:i T4 +:i T5 +:i T6 +:i T7 +:i T8 +:i T9 +:i TF1 +:i TF2 +:i DF1 +:i C1 +:i C2 +:i C3 +:i C4 +:i C5 +:i D1 +:i D2 +:i F1 +:i F2 +:i F3 +:i F4 +:i F5 +:i F6 +:i F1x2 +:i F1x3 +:i F1x4 +:i F1x5 +:i F1x6 +:i F2x3 +:i F2x4 +:i F2x5 +:i F2x6 +:i F3x4 +:i F3x5 +:i F3x6 +:i F4x5 +:i F4x6 +:i F5x6 ===================================== testsuite/tests/ghci/scripts/T24459.stdout ===================================== @@ -0,0 +1,313 @@ +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 a = Proxy a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @a _b = Proxy a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 _b = Proxy _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @a @b f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 c @d where + TF1 Int = () + forall a (_1 :: a) b d. TF1 _1 = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 c + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a c where + type AD :: * -> forall b. * + data family AD a + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a c | a -> c + -- Defined at :86:1 +type D1 :: forall {k} (a :: k). * +data D1 where + MkD :: b -> D1 + -- Defined at :90:1 +type role D2 phantom +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @a @b c = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 a b c d e @k6 = P k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b c d e @k6 = P k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 a b @k3 c d e @k6 = P k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 a b @k3 @k4 c d e @k6 = P k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 a b @k3 @k4 @k5 c d e @k6 = P k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 a b c d e @k6 = P k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b c d e @k6 = P (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 a b @k3 c d e @k6 = P (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 a b @k3 @k4 c d e @k6 = P (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 a b @k3 @k4 @k5 c d e @k6 = P (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 a b c d e @k6 = P (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 c d e @k6 = P (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 c d e @k6 = P (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b c d e @k6 = P (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 a b @k3 @k4 c d e @k6 = P (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 a b @k3 @k4 @k5 c d e @k6 = P (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 a b @k3 c d e @k6 = P (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 a b @k3 @k4 @k5 c d e @k6 = P (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 a b @k3 @k4 c d e @k6 = P (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 a b @k3 @k4 @k5 c d e @k6 = P (k5, k6) + -- Defined at :162:1 +type T0 :: forall k. k -> * +type T0 = Proxy + -- Defined at :9:1 +type T1 :: forall k. k -> * +type T1 = Proxy + -- Defined at :13:1 +type T2 :: forall k. k -> * +type T2 @k = Proxy @{k} + -- Defined at :17:1 +type T3 :: forall k. k -> * +type T3 @k a = Proxy @{k} a + -- Defined at :21:1 +type T4 :: forall {k} (a :: k). * -> * +type T4 @{k} @a _b = Proxy @{k} a + -- Defined at :25:1 +type T5 :: forall {k} (a :: k). * -> * +type T5 @{k} @a _b = Proxy @{*} _b + -- Defined at :29:1 +type T6 :: forall {k} (k1 :: k). * -> * +type T6 @{k} @k1 _a = () + -- Defined at :33:1 +type T7 :: forall {k} {k1} {k2} (a :: k) b (c :: k1). + b -> forall (d :: k2). * +type T7 @{k} @{k1} @{k2} @a @b @c f @d = b + -- Defined at :37:1 +type T8 :: forall (a :: Constraint). * -> * +type T8 @a b = forall x. a => x + -- Defined at :41:1 +type T9 :: forall a. * -> * +type T9 @a b = forall (x :: a). Int + -- Defined at :45:1 +type TF1 :: forall a b. a -> forall d. * +type family TF1 @a @b c @d where + TF1 @(*) @b Int @d = () + forall a (_1 :: a) b d. TF1 @a @b _1 @d = Bool + -- Defined at :51:1 +type TF2 :: forall a b. * -> forall d. * +type family TF2 @a @b c @d = r | r -> b + -- Defined at :57:1 +type DF1 :: forall a b. a -> forall d. * +data family DF1 @a @b c @d + -- Defined at :62:1 +type C1 :: forall a b. * -> Constraint +class C1 @a @b c where + type AD :: * -> forall b. * + data family AD a @b + -- Defined at :66:1 +type C2 :: forall a b. * -> Constraint +class C2 @a @b c where + type AF :: * -> forall b. * + type family AF a @b + -- Defined at :71:1 +type C3 :: forall {k} (x :: k). Constraint +class C3 @{k} @x + -- Defined at :76:1 +type C4 :: forall a b. Constraint +class C4 @a @b where + x :: a + y :: b + {-# MINIMAL x, y #-} + -- Defined at :80:1 +type C5 :: forall a b. * -> Constraint +class C5 @a @b c | a -> c + -- Defined at :86:1 +type role D1 nominal nominal +type D1 :: forall {k} (a :: k). * +data D1 @{k} @a where + MkD :: b -> D1 @{*} @b + -- Defined at :90:1 +type role D2 nominal nominal nominal nominal phantom nominal +type D2 :: forall {k} {k1} (a :: k) b. * -> forall (d :: k1). * +data D2 @{k} @{k1} @a @b c @d = MkD2_1 | MkD2_2 Int b + -- Defined at :95:1 +type F1 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k1 + -- Defined at :102:1 +type F2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k2 + -- Defined at :105:1 +type F3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k3 + -- Defined at :108:1 +type F4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k4 + -- Defined at :111:1 +type F5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k5 + -- Defined at :114:1 +type F6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} k6 + -- Defined at :117:1 +type F1x2 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x2 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k2) + -- Defined at :120:1 +type F1x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k3) + -- Defined at :123:1 +type F1x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k4) + -- Defined at :126:1 +type F1x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k5) + -- Defined at :129:1 +type F1x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F1x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k1, k6) + -- Defined at :132:1 +type F2x3 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x3 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k3) + -- Defined at :135:1 +type F2x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k4) + -- Defined at :138:1 +type F2x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k5) + -- Defined at :141:1 +type F2x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F2x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k2, k6) + -- Defined at :144:1 +type F3x4 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x4 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k4) + -- Defined at :147:1 +type F3x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k5) + -- Defined at :150:1 +type F3x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F3x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k3, k6) + -- Defined at :153:1 +type F4x5 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x5 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k5) + -- Defined at :156:1 +type F4x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F4x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k4, k6) + -- Defined at :159:1 +type F5x6 :: forall k1 k2. + k1 -> k2 -> forall k3 k4 k5. k3 -> k4 -> k5 -> forall k6. k6 -> * +type F5x6 @k1 @k2 a b @k3 @k4 @k5 c d e @k6 = P @{*} @{k6} (k5, k6) + -- Defined at :162:1 ===================================== testsuite/tests/ghci/scripts/T8535.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/scripts/T9181.stdout ===================================== @@ -13,12 +13,10 @@ type (GHC.Internal.Data.Type.Ord.<=) x y = GHC.Internal.TypeError.Assert (x GHC.Internal.Data.Type.Ord.<=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) - :: Constraint type (GHC.Internal.Data.Type.Ord.<=?) :: forall k. k -> k -> Bool type (GHC.Internal.Data.Type.Ord.<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) True True False - :: Bool type GHC.Internal.TypeLits.AppendSymbol :: GHC.Types.Symbol -> GHC.Types.Symbol -> GHC.Types.Symbol type family GHC.Internal.TypeLits.AppendSymbol a b ===================================== testsuite/tests/ghci/scripts/all.T ===================================== @@ -385,3 +385,4 @@ test('T23686', normal, ghci_script, ['T23686.script']) test('T13869', extra_files(['T13869a.hs', 'T13869b.hs']), ghci_script, ['T13869.script']) test('ListTuplePunsPpr', normal, ghci_script, ['ListTuplePunsPpr.script']) test('ListTuplePunsPprNoAbbrevTuple', [expect_broken(23135), limit_stdout_lines(13)], ghci_script, ['ListTuplePunsPprNoAbbrevTuple.script']) +test('T24459', normal, ghci_script, ['T24459.script']) ===================================== testsuite/tests/ghci/scripts/ghci020.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T10145.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/ghci/should_run/T18594.stdout ===================================== @@ -1,5 +1,5 @@ type (->) :: * -> * -> * -type (->) = FUN Many :: * -> * -> * +type (->) = FUN Many -- Defined in ‘GHC.Types’ infixr -1 -> instance Monoid b => Monoid (a -> b) ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5406,7 +5406,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5533,7 +5533,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5608,7 +5608,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5616,7 +5616,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5662,7 +5662,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7397,7 +7397,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7407,7 +7407,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7429,7 +7429,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7454,14 +7454,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7478,24 +7478,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8583,7 +8583,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9357,7 +9357,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9418,7 +9418,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9573,9 +9573,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9692,9 +9692,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5375,7 +5375,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5502,7 +5502,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5577,7 +5577,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5585,7 +5585,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5631,7 +5631,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7366,7 +7366,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7376,7 +7376,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7398,7 +7398,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7423,14 +7423,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7447,24 +7447,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8253,7 +8253,7 @@ module GHC.JS.Prim where type JSVal :: * data JSVal = JSVal GHC.Prim.ByteArray# type JSVal# :: GHC.Types.UnliftedType - type JSVal# = GHC.Prim.ByteArray# :: GHC.Types.UnliftedType + type JSVal# = GHC.Prim.ByteArray# type WouldBlockException :: * data WouldBlockException = WouldBlockException fromJSArray :: JSVal -> GHC.Types.IO [JSVal] @@ -11625,7 +11625,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -12399,7 +12399,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -12460,7 +12460,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -12615,9 +12615,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -12734,9 +12734,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5552,7 +5552,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5679,7 +5679,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5754,7 +5754,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5762,7 +5762,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5808,7 +5808,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7546,7 +7546,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7556,7 +7556,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7578,7 +7578,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7603,14 +7603,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7627,24 +7627,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8807,7 +8807,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9581,7 +9581,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9642,7 +9642,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9797,9 +9797,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9916,9 +9916,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -1012,7 +1012,7 @@ module Data.Fixed where type Fixed :: forall k. k -> * newtype Fixed a = MkFixed GHC.Num.Integer.Integer type HasResolution :: forall k. k -> Constraint - class HasResolution a where + class HasResolution @k a where resolution :: forall (p :: k -> *). p a -> GHC.Num.Integer.Integer {-# MINIMAL resolution #-} type Micro :: * @@ -1781,27 +1781,27 @@ module Data.Type.Equality where module Data.Type.Ord where -- Safety: Safe type (<) :: forall {t}. t -> t -> Constraint - type (<) x y = GHC.Internal.TypeError.Assert (x t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = OrdCond (Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type ( k -> GHC.Types.Bool - type () :: forall {t}. t -> t -> Constraint - type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) :: Constraint + type (>) x y = GHC.Internal.TypeError.Assert (x >? y) (GHC.Internal.Data.Type.Ord.GtErrMsg x y) type (>=) :: forall {t}. t -> t -> Constraint - type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) :: Constraint + type (>=) x y = GHC.Internal.TypeError.Assert (x >=? y) (GHC.Internal.Data.Type.Ord.GeErrMsg x y) type (>=?) :: forall k. k -> k -> GHC.Types.Bool - type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True :: GHC.Types.Bool + type (>=?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.True GHC.Types.True type (>?) :: forall k. k -> k -> GHC.Types.Bool - type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True :: GHC.Types.Bool + type (>?) m n = OrdCond (Compare m n) GHC.Types.False GHC.Types.False GHC.Types.True type Compare :: forall k. k -> k -> GHC.Types.Ordering type family Compare a b type Max :: forall k. k -> k -> k - type Max m n = OrdCond (Compare m n) n n m :: k + type Max m n = OrdCond (Compare m n) n n m type Min :: forall k. k -> k -> k - type Min m n = OrdCond (Compare m n) m m n :: k + type Min m n = OrdCond (Compare m n) m m n type OrdCond :: forall k. GHC.Types.Ordering -> k -> k -> k -> k type family OrdCond o lt eq gt where forall k (lt :: k) (eq :: k) (gt :: k). OrdCond GHC.Types.LT lt eq gt = lt @@ -3207,7 +3207,7 @@ module GHC.Base where many :: forall a. f a -> f [a] {-# MINIMAL empty, (<|>) #-} type Any :: forall k. k - type family Any where + type family Any @k where type Applicative :: (* -> *) -> Constraint class Functor f => Applicative f where pure :: forall a. a -> f a @@ -3336,7 +3336,7 @@ module GHC.Base where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -3449,7 +3449,7 @@ module GHC.Base where type TypeLitSort :: * data TypeLitSort = TypeLitSymbol | TypeLitNat | TypeLitChar type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -3459,7 +3459,7 @@ module GHC.Base where type Void :: * data Void type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -3505,7 +3505,7 @@ module GHC.Base where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep absentErr :: forall a. a @@ -5406,7 +5406,7 @@ module GHC.Exts where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -5533,7 +5533,7 @@ module GHC.Exts where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -5608,7 +5608,7 @@ module GHC.Exts where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -5616,7 +5616,7 @@ module GHC.Exts where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -5662,7 +5662,7 @@ module GHC.Exts where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -7397,7 +7397,7 @@ module GHC.Generics where type C :: * data C type C1 :: forall {k}. Meta -> (k -> *) -> k -> * - type C1 = M1 C :: Meta -> (k -> *) -> k -> * + type C1 = M1 C type Constructor :: forall {k}. k -> Constraint class Constructor c where conName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t c f a -> [GHC.Types.Char] @@ -7407,7 +7407,7 @@ module GHC.Generics where type D :: * data D type D1 :: forall {k}. Meta -> (k -> *) -> k -> * - type D1 = M1 D :: Meta -> (k -> *) -> k -> * + type D1 = M1 D type Datatype :: forall {k}. k -> Constraint class Datatype d where datatypeName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t d f a -> [GHC.Types.Char] @@ -7429,7 +7429,7 @@ module GHC.Generics where to :: forall x. Rep a x -> a {-# MINIMAL from, to #-} type Generic1 :: forall k. (k -> *) -> Constraint - class Generic1 f where + class Generic1 @k f where type Rep1 :: forall k. (k -> *) -> k -> * type family Rep1 f from1 :: forall (a :: k). f a -> Rep1 f a @@ -7454,14 +7454,14 @@ module GHC.Generics where type R :: * data R type Rec0 :: forall {k}. * -> k -> * - type Rec0 = K1 R :: * -> k -> * + type Rec0 = K1 R type role Rec1 representational nominal type Rec1 :: forall k. (k -> *) -> k -> * newtype Rec1 f p = Rec1 {unRec1 :: f p} type S :: * data S type S1 :: forall {k}. Meta -> (k -> *) -> k -> * - type S1 = M1 S :: Meta -> (k -> *) -> k -> * + type S1 = M1 S type Selector :: forall {k}. k -> Constraint class Selector s where selName :: forall k1 (t :: k -> (k1 -> *) -> k1 -> *) (f :: k1 -> *) (a :: k1). t s f a -> [GHC.Types.Char] @@ -7478,24 +7478,24 @@ module GHC.Generics where data U1 p = U1 UAddr :: forall k (p :: k). GHC.Prim.Addr# -> URec (GHC.Internal.Ptr.Ptr ()) p type UAddr :: forall {k}. k -> * - type UAddr = URec (GHC.Internal.Ptr.Ptr ()) :: k -> * + type UAddr = URec (GHC.Internal.Ptr.Ptr ()) UChar :: forall k (p :: k). GHC.Prim.Char# -> URec GHC.Types.Char p type UChar :: forall {k}. k -> * - type UChar = URec GHC.Types.Char :: k -> * + type UChar = URec GHC.Types.Char UDouble :: forall k (p :: k). GHC.Prim.Double# -> URec GHC.Types.Double p type UDouble :: forall {k}. k -> * - type UDouble = URec GHC.Types.Double :: k -> * + type UDouble = URec GHC.Types.Double UFloat :: forall k (p :: k). GHC.Prim.Float# -> URec GHC.Types.Float p type UFloat :: forall {k}. k -> * - type UFloat = URec GHC.Types.Float :: k -> * + type UFloat = URec GHC.Types.Float UInt :: forall k (p :: k). GHC.Prim.Int# -> URec GHC.Types.Int p type UInt :: forall {k}. k -> * - type UInt = URec GHC.Types.Int :: k -> * + type UInt = URec GHC.Types.Int type URec :: forall k. * -> k -> * data family URec a p UWord :: forall k (p :: k). GHC.Prim.Word# -> URec GHC.Types.Word p type UWord :: forall {k}. k -> * - type UWord = URec GHC.Types.Word :: k -> * + type UWord = URec GHC.Types.Word type role V1 phantom type V1 :: forall k. k -> * data V1 p @@ -8583,7 +8583,7 @@ module GHC.Num.BigNat where type BigNat :: * data BigNat = BN# {unBigNat :: BigNat#} type BigNat# :: GHC.Types.UnliftedType - type BigNat# = GHC.Num.WordArray.WordArray# :: GHC.Types.UnliftedType + type BigNat# = GHC.Num.WordArray.WordArray# bigNatAdd :: BigNat# -> BigNat# -> BigNat# bigNatAddWord :: BigNat# -> GHC.Types.Word -> BigNat# bigNatAddWord# :: BigNat# -> GHC.Prim.Word# -> BigNat# @@ -9357,7 +9357,7 @@ module GHC.Stack where type CostCentreStack :: * data CostCentreStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} callStack :: HasCallStack => CallStack @@ -9418,7 +9418,7 @@ module GHC.Stack.Types where type CallStack :: * data CallStack = EmptyCallStack | PushCallStack [GHC.Types.Char] SrcLoc CallStack | FreezeCallStack CallStack type HasCallStack :: Constraint - type HasCallStack = ?callStack::CallStack :: Constraint + type HasCallStack = ?callStack::CallStack type SrcLoc :: * data SrcLoc = SrcLoc {srcLocPackage :: [GHC.Types.Char], srcLocModule :: [GHC.Types.Char], srcLocFile :: [GHC.Types.Char], srcLocStartLine :: {-# UNPACK #-}GHC.Types.Int, srcLocStartCol :: {-# UNPACK #-}GHC.Types.Int, srcLocEndLine :: {-# UNPACK #-}GHC.Types.Int, srcLocEndCol :: {-# UNPACK #-}GHC.Types.Int} emptyCallStack :: CallStack @@ -9573,9 +9573,9 @@ module GHC.TypeLits where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type AppendSymbol :: Symbol -> Symbol -> Symbol type family AppendSymbol a b type CharToNat :: GHC.Types.Char -> Natural @@ -9692,9 +9692,9 @@ module GHC.TypeNats where type (-) :: Natural -> Natural -> Natural type family (-) a b type (<=) :: forall {t}. t -> t -> Constraint - type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) :: Constraint + type (<=) x y = GHC.Internal.TypeError.Assert (x <=? y) (GHC.Internal.Data.Type.Ord.LeErrMsg x y) type (<=?) :: forall k. k -> k -> GHC.Types.Bool - type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False :: GHC.Types.Bool + type (<=?) m n = GHC.Internal.Data.Type.Ord.OrdCond (GHC.Internal.Data.Type.Ord.Compare m n) GHC.Types.True GHC.Types.True GHC.Types.False type CmpNat :: Natural -> Natural -> GHC.Types.Ordering type family CmpNat a b type Div :: Natural -> Natural -> Natural ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) @@ -4341,7 +4341,7 @@ module GHC.PrimOps where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -4468,7 +4468,7 @@ module GHC.PrimOps where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -4543,7 +4543,7 @@ module GHC.PrimOps where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -4551,7 +4551,7 @@ module GHC.PrimOps where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -4597,7 +4597,7 @@ module GHC.PrimOps where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -6329,9 +6329,9 @@ module Prelude.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -8960,11 +8960,11 @@ module Prelude.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 ===================================== @@ -1480,9 +1480,9 @@ module Data.Tuple.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -2637,11 +2637,11 @@ module Data.Tuple.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) @@ -4341,7 +4341,7 @@ module GHC.PrimOps where type Addr# :: TYPE AddrRep data Addr# type Any :: forall k. k - type family Any where + type family Any @k where type Array# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Array# a type ArrayArray# :: UnliftedType @@ -4468,7 +4468,7 @@ module GHC.PrimOps where type Levity :: * data Levity = Lifted | Unlifted type LiftedRep :: RuntimeRep - type LiftedRep = BoxedRep Lifted :: RuntimeRep + type LiftedRep = BoxedRep Lifted type List :: * -> * data List a = ... type role MVar# nominal representational @@ -4543,7 +4543,7 @@ module GHC.PrimOps where TypeLitNat :: GHC.Types.TypeLitSort TypeLitSymbol :: GHC.Types.TypeLitSort type UnliftedRep :: RuntimeRep - type UnliftedRep = BoxedRep Unlifted :: RuntimeRep + type UnliftedRep = BoxedRep Unlifted type UnliftedType :: * type UnliftedType = TYPE UnliftedRep type VecCount :: * @@ -4551,7 +4551,7 @@ module GHC.PrimOps where type VecElem :: * data VecElem = Int8ElemRep | Int16ElemRep | Int32ElemRep | Int64ElemRep | Word8ElemRep | Word16ElemRep | Word32ElemRep | Word64ElemRep | FloatElemRep | DoubleElemRep type Void# :: ZeroBitType - type Void# = (# #) :: ZeroBitType + type Void# = (# #) type Weak# :: forall {l :: Levity}. TYPE (BoxedRep l) -> UnliftedType data Weak# a type WithDict :: Constraint -> * -> Constraint @@ -4597,7 +4597,7 @@ module GHC.PrimOps where type WordBox :: TYPE WordRep -> * data WordBox a = MkWordBox a type ZeroBitRep :: RuntimeRep - type ZeroBitRep = TupleRep '[] :: RuntimeRep + type ZeroBitRep = TupleRep '[] type ZeroBitType :: * type ZeroBitType = TYPE ZeroBitRep acosDouble# :: Double# -> Double# @@ -6332,9 +6332,9 @@ module Prelude.Experimental where class a => CSolo a {-# MINIMAL #-} type CTuple0 :: Constraint - type CTuple0 = () :: Constraint :: Constraint + type CTuple0 = () :: Constraint type CTuple1 :: Constraint -> Constraint - type CTuple1 = CSolo :: Constraint -> Constraint + type CTuple1 = CSolo type CTuple10 :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint class (a, b, c, d, e, f, g, h, i, j) => CTuple10 a b c d e f g h i j {-# MINIMAL #-} @@ -8963,11 +8963,11 @@ module Prelude.Experimental where type Tuple0 :: * type Tuple0 = () type Tuple0# :: GHC.Types.ZeroBitType - type Tuple0# = (# #) :: GHC.Types.ZeroBitType + type Tuple0# = (# #) type Tuple1 :: * -> * - type Tuple1 = Solo :: * -> * + type Tuple1 = Solo type Tuple1# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) - type Tuple1# = Solo# :: * -> TYPE (GHC.Types.TupleRep '[GHC.Types.LiftedRep]) + type Tuple1# = Solo# type Tuple10 :: * -> * -> * -> * -> * -> * -> * -> * -> * -> * -> * data Tuple10 a b c d e f g h i j = ... type Tuple10# :: forall (k0 :: GHC.Types.RuntimeRep) (k1 :: GHC.Types.RuntimeRep) (k2 :: GHC.Types.RuntimeRep) (k3 :: GHC.Types.RuntimeRep) (k4 :: GHC.Types.RuntimeRep) (k5 :: GHC.Types.RuntimeRep) (k6 :: GHC.Types.RuntimeRep) (k7 :: GHC.Types.RuntimeRep) (k8 :: GHC.Types.RuntimeRep) (k9 :: GHC.Types.RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE k2 -> TYPE k3 -> TYPE k4 -> TYPE k5 -> TYPE k6 -> TYPE k7 -> TYPE k8 -> TYPE k9 -> TYPE (GHC.Types.TupleRep [k0, k1, k2, k3, k4, k5, k6, k7, k8, k9]) ===================================== testsuite/tests/interface-stability/template-haskell-exports.stdout ===================================== @@ -31,7 +31,7 @@ module Language.Haskell.TH where type Code :: (* -> *) -> forall (r :: GHC.Types.RuntimeRep). TYPE r -> * newtype Code m a = Code {examineCode :: m (TExp a)} type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = Code Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = Code Q type Con :: * data Con = NormalC Name [BangType] | RecC Name [VarBangType] | InfixC BangType Name BangType | ForallC [TyVarBndr Specificity] Cxt Con | GadtC [Name] [BangType] Type | RecGadtC [Name] [VarBangType] Type type ConQ :: * @@ -881,7 +881,7 @@ module Language.Haskell.TH.Lib where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * @@ -1220,7 +1220,7 @@ module Language.Haskell.TH.Lib.Internal where type ClauseQ :: * type ClauseQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Clause type CodeQ :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * - type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q :: forall (r :: GHC.Types.RuntimeRep). TYPE r -> * + type CodeQ = GHC.Internal.TH.Syntax.Code GHC.Internal.TH.Syntax.Q type ConQ :: * type ConQ = GHC.Internal.TH.Syntax.Q GHC.Internal.TH.Syntax.Con type CxtQ :: * ===================================== testsuite/tests/rep-poly/RepPolyBackpack3.stderr ===================================== @@ -1,19 +1,19 @@ [1 of 3] Processing sig - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, nothing ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, nothing ) [2 of 3] Processing impl Instantiating impl - [1 of 1] Compiling Impl ( impl\Impl.hs, RepPolyBackpack3.out\impl\Impl.o ) + [1 of 1] Compiling Impl ( impl/Impl.hs, RepPolyBackpack3.out/impl/Impl.o ) [3 of 3] Processing main Instantiating main [1 of 1] Including sig[Sig=impl:Impl] Instantiating sig[Sig=impl:Impl] - [1 of 1] Compiling Sig[sig] ( sig\Sig.hsig, RepPolyBackpack3.out\sig\sig-Absk5cIXTXe6UYhGMYGber\Sig.o ) + [1 of 1] Compiling Sig[sig] ( sig/Sig.hsig, RepPolyBackpack3.out/sig/sig-Absk5cIXTXe6UYhGMYGber/Sig.o ) RepPolyBackpack3.bkp:17:5: error: [GHC-15843] • Type constructor ‘Rep’ has conflicting definitions in the module and its hsig file. Main module: type Rep :: GHC.Types.RuntimeRep - type Rep = T :: GHC.Types.RuntimeRep + type Rep = T Hsig file: type Rep :: GHC.Types.RuntimeRep data Rep Illegal implementation of abstract data: Invalid type family ‘T’. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9c53489dfc7b47d97492064610d176a9140e9898 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9c53489dfc7b47d97492064610d176a9140e9898 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 20:08:03 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Thu, 12 Dec 2024 15:08:03 -0500 Subject: [Git][ghc/ghc][master] typechecker: Perform type family consistency checks in topological order Message-ID: <675b42a3c022e_3a215b6ccb1895675@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 13fe48d4 by Matthew Pickering at 2024-12-12T15:07:19-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - 2 changed files: - compiler/GHC/Tc/Instance/Family.hs - compiler/GHC/Tc/Module.hs Changes: ===================================== compiler/GHC/Tc/Instance/Family.hs ===================================== @@ -58,6 +58,7 @@ import Data.Function ( on ) import qualified GHC.LanguageExtensions as LangExt import GHC.Unit.Env (unitEnv_hpts) +import Data.List (sortOn) {- Note [The type family instance consistency story] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -239,6 +240,49 @@ That situation should be pretty common in practice, there's usually a set of utility modules that every module imports directly or indirectly. This is basically the idea from #13092, comment:14. + +Note [Order of type family consistency checks] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Consider a module M which imports modules A, B and C, all defining (open) type +family instances. + +We can waste a lot of work in type family consistency checking depending on the +order in which the modules are processed. + +Suppose for example that C imports A and B. When we compiled C, we will have +checked A and B for consistency against eachother. This means that, when +processing the imports of M to check type family instance consistency: + +* if C is processed first, then A and B will not need to be checked for + consistency against eachother again, +* if we process A and B before C,then the + consistency checks between A and B will be performed again. This is wasted + work, as we already performed them for C. + +This can make a significant difference. Keeping the nomenclature of the above +example for illustration, we have observed situations in practice in which the +compilation time of M goes from 1 second (the "processing A and B first" case) +down to 80 milliseconds (the "processing C first" case). + +Clearly we should engineer that C is checked before B and A, but by what scheme? + +A simple one is to observe that if a module M is in the transitive closure of X +then the size of the consistent family set of M is less than or equal to size +of the consistent family set of X. + +Therefore, by sorting the imports by the size of the consistent family set and +processing the largest first, we make sure to process modules in topological +order. + +For a particular project, without this change we did 40 million checks and with +this change we did 22.9 million checks. This is significant as before this change +type family consistency checks accounted for 26% of total type checker allocations which +was reduced to 15%. + +See tickets #25554 for discussion about this exact issue and #25555 for +why we still do redundant checks. + -} -- We don't need to check the current module, this is done in @@ -267,6 +311,12 @@ checkFamInstConsistency directlyImpMods where deps = dep_finsts . mi_deps . modIface $ mod + ; debug_consistent_set = map (\x -> (x, length (modConsistent x))) directlyImpMods + + -- Sorting the list by size has the effect of performing a topological sort. + -- See Note [Order of type family consistency checks] + ; init_consistent_set = reverse (sortOn (length . modConsistent) directlyImpMods) + ; hmiModule = mi_module . hm_iface ; hmiFamInstEnv = extendFamInstEnvList emptyFamInstEnv . md_fam_insts . hm_details @@ -276,7 +326,8 @@ checkFamInstConsistency directlyImpMods } - ; checkMany hpt_fam_insts modConsistent directlyImpMods + ; traceTc "init_consistent_set" (ppr debug_consistent_set) + ; checkMany hpt_fam_insts modConsistent init_consistent_set } where -- See Note [Checking family instance optimization] @@ -294,6 +345,11 @@ checkFamInstConsistency directlyImpMods -> TcM () go _ _ [] = return () go consistent consistent_set (mod:mods) = do + traceTc "checkManySize" (vcat [text "mod:" <+> ppr mod + , text "m1:" <+> ppr (length to_check_from_mod) + , text "m2:" <+> ppr (length (to_check_from_consistent)) + , text "product:" <+> ppr (length to_check_from_mod * length to_check_from_consistent) + ]) sequence_ [ check hpt_fam_insts m1 m2 | m1 <- to_check_from_mod ===================================== compiler/GHC/Tc/Module.hs ===================================== @@ -514,7 +514,9 @@ tcRnImports hsc_env import_decls ; let { dir_imp_mods = M.keys . imp_mods $ imports } - ; checkFamInstConsistency dir_imp_mods + ; logger <- getLogger + ; withTiming logger (text "ConsistencyCheck"<+>brackets (ppr this_mod)) (const ()) + $ checkFamInstConsistency dir_imp_mods ; traceRn "rn1: } checking family instance consistency" empty ; gbl_env <- getGblEnv View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/13fe48d40004d9cdf3c73300a18f144bdc5191d9 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/13fe48d40004d9cdf3c73300a18f144bdc5191d9 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 21:03:48 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Thu, 12 Dec 2024 16:03:48 -0500 Subject: [Git][ghc/ghc][wip/T25437] 24 commits: testsuite: Unmark T14028 as broken on FreeBSD Message-ID: <675b4fb479664_32f852bd2547282e@gitlab.mail> Simon Peyton Jones pushed to branch wip/T25437 at Glasgow Haskell Compiler / GHC Commits: 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 9c53489d by Andrei Borzenkov at 2024-12-12T15:06:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 13fe48d4 by Matthew Pickering at 2024-12-12T15:07:19-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - fb6437b8 by Simon Peyton Jones at 2024-12-12T21:03:30+00:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 30 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC/Core/TyCon.hs - compiler/GHC/Iface/Syntax.hs - compiler/GHC/Iface/Type.hs - compiler/GHC/Rename/Bind.hs - compiler/GHC/Rename/Env.hs - compiler/GHC/Tc/Instance/Family.hs - compiler/GHC/Tc/Module.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/ghci.rst - docs/users_guide/using-concurrent.rst - libraries/ghc-compact/tests/all.T - libraries/ghc-internal/src/GHC/Internal/Conc/Sync.hs - rts/Capability.c - rts/Capability.h - rts/CheckUnload.c - rts/RtsSymbols.c - rts/Schedule.c - rts/include/rts/Config.h - rts/include/rts/Threads.h - testsuite/driver/testlib.py - testsuite/tests/backpack/should_fail/T19244a.stderr - testsuite/tests/backpack/should_fail/T19244b.stderr - testsuite/tests/backpack/should_fail/bkpfail46.stderr - testsuite/tests/concurrent/should_run/all.T - testsuite/tests/ghci/T18060/T18060.stdout - testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout - testsuite/tests/ghci/scripts/T15941.stdout The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8dd5ea3cdc0915e6aa6d2d0b3a70b2afed09d6c9...fb6437b880a5ca89783cbf4ae8ce944e72bbf917 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8dd5ea3cdc0915e6aa6d2d0b3a70b2afed09d6c9...fb6437b880a5ca89783cbf4ae8ce944e72bbf917 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 12 23:25:10 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Thu, 12 Dec 2024 18:25:10 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25493 Message-ID: <675b70d67f6b9_1106093c32646792@gitlab.mail> Simon Peyton Jones pushed new branch wip/T25493 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25493 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 01:40:47 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Thu, 12 Dec 2024 20:40:47 -0500 Subject: [Git][ghc/ghc][ghc-9.10] 19 commits: Remove unused ghc-internal module "GHC.Internal.Constants" Message-ID: <675b909fc7cf1_11060911566b0833d6@gitlab.mail> Andreas Klebinger pushed to branch ghc-9.10 at Glasgow Haskell Compiler / GHC Commits: 8cb44392 by Matthew Craven at 2024-12-09T13:36:25+01:00 Remove unused ghc-internal module "GHC.Internal.Constants" (cherry picked from commit c6c190718972330504c048b013e5c2596b3c0c1e) - - - - - c16c0dea by Matthew Craven at 2024-12-09T14:25:07+01:00 CorePrep: Rework lowering of BigNat# literals Don't use bigNatFromWord#, because that's terrible: * We shouldn't have to traverse a linked list at run-time to build a BigNat# literal. That's just silly! * The static List object we have to create is much larger than the actual BigNat#'s contents, bloating code size. * We have to read the corresponding interface file, which causes un-tracked implicit dependencies. (#23942) Instead, encode them into the appropriate platform-dependent sequence of bytes, and generate code that copies these bytes at run-time from an Addr# literal into a new ByteArray#. A ByteArray# literal would be the correct thing to generate, but these are not yet supported; see also #17747. Somewhat surprisingly, this change results in a slight reduction in compiler allocations, averaging around 0.5% on ghc's compiler performance tests, including when compiling programs that contain no bignum literals to begin with. The specific cause of this has not been investigated. Since this lowering no longer reads the interface file for GHC.Num.BigNat, the reasoning in Note [Depend on GHC.Num.Integer] is obsoleted. But the story of un-tracked built-in dependencies remains complex, and Note [Tracking dependencies on primitives] now exists to explain this complexity. Additionally, many empty imports have been modified to refer to this new note and comply with its guidance. Several empty imports necessary for other reasons have also been given brief explanations. Metric Decrease: MultiLayerModulesTH_OneShot (cherry picked from commit 6d8f274b8677fcf9519d569875145f9f5434d779) - - - - - 0b3c9d24 by Andreas Klebinger at 2024-12-09T14:27:39+01:00 Add changelog entry for BigNat# lowering changes. - - - - - 53d78e35 by Fendor at 2024-12-09T17:11:34+01:00 Replace `SizedSeq` with `FlatBag` for flattened structure LinkedLists are notoriously memory ineffiecient when all we do is traversing a structure. As 'UnlinkedBCO' has been identified as a data structure that impacts the overall memory usage of GHCi sessions, we avoid linked lists and prefer flattened structure for storing. We introduce a new memory efficient representation of sequential elements that has special support for the cases: * Empty * Singleton * Tuple Elements This improves sharing in the 'Empty' case and avoids the overhead of 'Array' until its constant overhead is justified. (cherry picked from commit 5f085d3af61e3f7a73652dfc1ae57e7ed7d691f2) - - - - - d4cf1dc7 by Fendor at 2024-12-09T17:11:34+01:00 Compact FlatBag array representation `Array` contains three additional `Word`'s we do not need in `FlatBag`. Move `FlatBag` to `SmallArray`. Expand the API of SmallArray by `sizeofSmallArray` and add common traversal functions, such as `mapSmallArray` and `foldMapSmallArray`. Additionally, allow users to force the elements of a `SmallArray` via `rnfSmallArray`. (cherry picked from commit 82cfe10c8c3ec68e1b054e2d6b88e1a8830c60bf) - - - - - a90fac71 by Fendor at 2024-12-09T17:11:34+01:00 Avoid UArray when indexing is not required `UnlinkedBCO`'s can occur many times in the heap. Each `UnlinkedBCO` references two `UArray`'s but never indexes them. They are only needed to encode the elements into a `ByteArray#`. The three words for the lower bound, upper bound and number of elements are essentially unused, thus we replace `UArray` with a wrapper around `ByteArray#`. This saves us up to three words for each `UnlinkedBCO`. Further, to avoid re-allocating these words for `ResolvedBCO`, we repeat the procedure for `ResolvedBCO` and add custom `Binary` and `Show` instances. For example, agda's repl session has around 360_000 UnlinkedBCO's, so avoiding these three words is already saving us around 8MB residency. (cherry picked from commit 88cb3e1079e88ba10065ce260a96095ae96d58e8) - - - - - 68a1c9dd by Andreas Klebinger at 2024-12-09T17:11:34+01:00 Changelog for !12170 and !12142 - - - - - 73f25e46 by Rodrigo Mesquita at 2024-12-09T17:11:34+01:00 rts: free error message before returning Fixes a memory leak in rts/linker/PEi386.c (cherry picked from commit dd530bb7e22e953e4cec64a5fd6c39fddc152c6f) - - - - - c9979fed by Alexis King at 2024-12-09T17:11:34+01:00 linker: Avoid linear search when looking up Haskell symbols via dlsym See the primary Note [Looking up symbols in the relevant objects] for a more in-depth explanation. When dynamically loading a Haskell symbol (typical when running a splice or GHCi expression), before this commit we would search for the symbol in all dynamic libraries that were loaded. However, this could be very inefficient when too many packages are loaded (which can happen if there are many package dependencies) because the time to lookup the would be linear in the number of packages loaded. This commit drastically improves symbol loading performance by introducing a mapping from units to the handles of corresponding loaded dlls. These handles are returned by dlopen when we load a dll, and can then be used to look up in a specific dynamic library. Looking up a given Name is now much more precise because we can get lookup its unit in the mapping and lookup the symbol solely in the handles of the dynamic libraries loaded for that unit. In one measurement, the wait time before the expression was executed went from +-38 seconds down to +-2s. This commit also includes Note [Symbols may not be found in pkgs_loaded], explaining the fallback to the old behaviour in case no dll can be found in the unit mapping for a given Name. Fixes #23415 Co-authored-by: Rodrigo Mesquita (@alt-romes) (cherry picked from commit e008a19a7f9e8f22aada0b4e1049744f49d39aad) - - - - - b663c9e0 by Rodrigo Mesquita at 2024-12-09T17:11:34+01:00 rts: Make addDLL a wrapper around loadNativeObj Rewrite the implementation of `addDLL` as a wrapper around the more principled `loadNativeObj` rts linker function. The latter should be preferred while the former is preserved for backwards compatibility. `loadNativeObj` was previously only available on ELF platforms, so this commit further refactors the rts linker to transform loadNativeObj_ELF into loadNativeObj_POSIX, which is available in ELF and MachO platforms. The refactor made it possible to remove the `dl_mutex` mutex in favour of always using `linker_mutex` (rather than a combination of both). Lastly, we implement `loadNativeObj` for Windows too. (cherry picked from commit dcfaa190e1e1182a2efe4e2f601affbb832a49bb) - - - - - 67890fdb by Rodrigo Mesquita at 2024-12-09T17:11:34+01:00 Use symbol cache in internal interpreter too This commit makes the symbol cache that was used by the external interpreter available for the internal interpreter too. This follows from the analysis in #23415 that suggests the internal interpreter could benefit from this cache too, and that there is no good reason not to have the cache for it too. It also makes it a bit more uniform to have the symbol cache range over both the internal and external interpreter. This commit also refactors the cache into a function which is used by both `lookupSymbol` and also by `lookupSymbolInDLL`, extending the caching logic to `lookupSymbolInDLL` too. (cherry picked from commit 12931698261a1cee6a00b731d143270cd60e5f2d) - - - - - 353b6ec1 by Ben Gamari at 2024-12-09T17:11:34+01:00 testsuite: Add test for lookupSymbolInNativeObj (cherry picked from commit dccd3ea159b03cc1972cf47ee3cf8bda73ec0c5a) - - - - - 920ccafc by Andreas Klebinger at 2024-12-09T17:11:34+01:00 Changelog for !12264 (Lookup symbols in relevant DLLs only) - - - - - 99399b92 by Andreas Klebinger at 2024-12-09T17:12:58+01:00 NCG: Fix a bug where we errounously removed a required jump instruction. Add a new method to the Instruction class to check if we can eliminate a jump in favour of fallthrough control flow. Fixes #24507 (cherry picked from commit 0fe2b410ac0d8951f07ffcc9f3c6c97bc312df48) - - - - - 6ea0d4f7 by Andreas Klebinger at 2024-12-09T17:13:42+01:00 Add changelog for !12370 - Bug in jump shortcutting. - - - - - 8692ced5 by Simon Peyton Jones at 2024-12-09T17:18:17+01:00 Don't generate wrappers for `type data` constructors with StrictData Previously, the logic for checking if a data constructor needs a wrapper or not would take into account whether the constructor's fields have explicit strictness (e.g., `data T = MkT !Int`), but the logic would _not_ take into account whether `StrictData` was enabled. This meant that something like `type data T = MkT Int` would incorrectly generate a wrapper for `MkT` if `StrictData` was enabled, leading to the horrible errors seen in #24620. To fix this, we disable generating wrappers for `type data` constructors altogether. Fixes #24620. Co-authored-by: Ryan Scott <ryan.gl.scott at gmail.com> (cherry picked from commit 5e4f4ba835fd24135759ee7a2d0d5c636a8a1505) - - - - - c52e8047 by Andreas Klebinger at 2024-12-09T17:19:50+01:00 Changelog for !12416 Entry for "Don't generate wrappers for `type data` constructors with StrictData." - - - - - 8e13b22e by Matthew Pickering at 2024-12-09T17:21:24+01:00 Linearise ghc-internal and base build This is achieved by requesting the final package database for ghc-internal, which mandates it is fully built as a dependency of configuring the `base` package. This is at the expense of cross-package parrallelism between ghc-internal and the base package. Fixes #24436 (cherry picked from commit 8a06ddf68bb5a9985e3a7b8464dd04b928c36b90) - - - - - 220f15b2 by Andreas Klebinger at 2024-12-12T15:19:22+01:00 Accept backport metric changes. The MLM test regresses slightly (+2.5% compiler bytes allocated). That seems within reason. ------------------------- Metric Increase: MultiLayerModulesTH_OneShot ------------------------- - - - - - 30 changed files: - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/PrimOps.hs-boot - compiler/GHC/Builtin/Types/Prim.hs - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Linker.hs - compiler/GHC/ByteCode/Types.hs - compiler/GHC/Cmm/Dominators.hs - compiler/GHC/CmmToAsm/AArch64.hs - compiler/GHC/CmmToAsm/AArch64/Instr.hs - compiler/GHC/CmmToAsm/BlockLayout.hs - compiler/GHC/CmmToAsm/Instr.hs - compiler/GHC/CmmToAsm/Monad.hs - compiler/GHC/CmmToAsm/PPC.hs - compiler/GHC/CmmToAsm/PPC/Instr.hs - compiler/GHC/CmmToAsm/Reg/Liveness.hs - compiler/GHC/CmmToAsm/X86.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/CoreToStg/Prep.hs - + compiler/GHC/Data/FlatBag.hs - compiler/GHC/Data/SmallArray.hs - compiler/GHC/Data/Word64Map/Strict.hs - compiler/GHC/Driver/CmdLine.hs - compiler/GHC/Driver/Config/CoreToStg/Prep.hs - compiler/GHC/Driver/Config/Diagnostic.hs - compiler/GHC/Driver/Errors/Ppr.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Plugins.hs - compiler/GHC/Iface/Errors/Ppr.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8958612c274531bfe8fd3a033061586610f2c574...220f15b278acb09433b529cf91c10fc756f6e67e -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8958612c274531bfe8fd3a033061586610f2c574...220f15b278acb09433b529cf91c10fc756f6e67e You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 05:36:25 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 13 Dec 2024 00:36:25 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/ghc-9.12-release Message-ID: <675bc7d99759_f088398668781ad@gitlab.mail> Zubin pushed new branch wip/ghc-9.12-release at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/ghc-9.12-release You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 06:09:02 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 13 Dec 2024 01:09:02 -0500 Subject: [Git][ghc/ghc][wip/ghc-9.12-release] testsuite: Introduce req_c_rts Message-ID: <675bcf7e50f6c_f088805b4c78544@gitlab.mail> Zubin pushed to branch wip/ghc-9.12-release at Glasgow Haskell Compiler / GHC Commits: ba0bbedc by Ben Gamari at 2024-12-13T11:38:19+05:30 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. (cherry picked from commit 1e84b41108d96cb721dd11281105fdf621105a12) - - - - - 1 changed file: - testsuite/driver/testlib.py Changes: ===================================== testsuite/driver/testlib.py ===================================== @@ -270,6 +270,10 @@ def req_bco( name, opts ): # JS backend doesn't support ByteCode js_skip(name, opts) +def req_c_rts( name, opts ): + """ Require the C runtime system (rather than, e.g. the Javascript RTS). """ + js_skip(name, opts) + def req_rts_linker( name, opts ): if not config.have_RTS_linker: opts.expect = 'fail' View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ba0bbedc6b14547bf8bd056b111373b6003de2a9 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ba0bbedc6b14547bf8bd056b111373b6003de2a9 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 06:40:34 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 13 Dec 2024 01:40:34 -0500 Subject: [Git][ghc/ghc][wip/ghc-9.12-release] 3 commits: testsuite: Introduce req_c_rts Message-ID: <675bd6e21074e_f088cfcb8c789da@gitlab.mail> Zubin pushed to branch wip/ghc-9.12-release at Glasgow Haskell Compiler / GHC Commits: 5381ad7e by Ben Gamari at 2024-12-13T12:10:07+05:30 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. (cherry picked from commit 1e84b41108d96cb721dd11281105fdf621105a12) - - - - - bd06c179 by Zubin Duggal at 2024-12-13T12:10:07+05:30 release: copy index.html from correct directory - - - - - 4ce35a2c by Zubin Duggal at 2024-12-13T12:10:07+05:30 RELEASE=YES - - - - - 3 changed files: - .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py - configure.ac - testsuite/driver/testlib.py Changes: ===================================== .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py ===================================== @@ -132,7 +132,7 @@ def fetch_artifacts(release: str, pipeline_id: int, for f in doc_files: subprocess.run(['tar', '-xf', f, '-C', dest]) logging.info(f'extracted docs {f} to {dest}') - index_path = destdir / 'index.html' + index_path = destdir / 'docs' / 'index.html' index_path.replace(dest / 'index.html') elif job.name == 'hackage-doc-tarball': dest = dest_dir / 'hackage_docs' ===================================== configure.ac ===================================== @@ -13,7 +13,7 @@ dnl # see what flags are available. (Better yet, read the documentation!) # -AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) +AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.1], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) # Version on master must be X.Y (not X.Y.Z) for ProjectVersionMunged variable # to be useful (cf #19058). However, the version must have three components # (X.Y.Z) on stable branches (e.g. ghc-9.2) to ensure that pre-releases are @@ -22,7 +22,7 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-ha AC_CONFIG_MACRO_DIRS([m4]) # Set this to YES for a released version, otherwise NO -: ${RELEASE=NO} +: ${RELEASE=YES} # The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line # above. If this is not a released version, then we will append the ===================================== testsuite/driver/testlib.py ===================================== @@ -270,6 +270,10 @@ def req_bco( name, opts ): # JS backend doesn't support ByteCode js_skip(name, opts) +def req_c_rts( name, opts ): + """ Require the C runtime system (rather than, e.g. the Javascript RTS). """ + js_skip(name, opts) + def req_rts_linker( name, opts ): if not config.have_RTS_linker: opts.expect = 'fail' View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ba0bbedc6b14547bf8bd056b111373b6003de2a9...4ce35a2ce823a20fca25e1ccbbbac8931d2fa2ca -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ba0bbedc6b14547bf8bd056b111373b6003de2a9...4ce35a2ce823a20fca25e1ccbbbac8931d2fa2ca You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 06:50:36 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 13 Dec 2024 01:50:36 -0500 Subject: [Git][ghc/ghc][wip/ghc-9.12-release] 5 commits: configure: Allow happy-2.0.2 Message-ID: <675bd93c41c5b_f088e5e1c4795e@gitlab.mail> Zubin pushed to branch wip/ghc-9.12-release at Glasgow Haskell Compiler / GHC Commits: 85bc8225 by Matthew Pickering at 2024-12-13T12:20:15+05:30 configure: Allow happy-2.0.2 happy-2.0.2 can be used to compile GHC. happy-2.0 and 2.0.1 have bugs which make it unsuitable to use. The version bound is now == 1.20.* || >= 2.0.2 && < 2.1 Fixes #25276 (cherry picked from commit 0029ca91c845dd4530eb2c4606ad5bd59775cec2) - - - - - cec6ad0f by Cristiano Moraes at 2024-12-13T12:20:15+05:30 configure: Find C++ probing when GCC version is the latest but G++ is old #23118 (cherry picked from commit 78ad81ecef846f73fee0f6c1a86cd6f19aa29b21) - - - - - 3eba5f8f by Ben Gamari at 2024-12-13T12:20:15+05:30 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. (cherry picked from commit 1fd83f865ffb620f4f7c4c59787710206dcadb90) - - - - - 1bd95513 by Ben Gamari at 2024-12-13T12:20:15+05:30 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. (cherry picked from commit 992259962191b0b774dfeeabb46729376c7fe7cf) - - - - - 08b948f6 by Zubin Duggal at 2024-12-13T12:20:15+05:30 RELEASE=YES - - - - - 4 changed files: - configure.ac - m4/find_ld.m4 - m4/fp_find_cxx_std_lib.m4 - m4/fptools_happy.m4 Changes: ===================================== configure.ac ===================================== @@ -13,7 +13,7 @@ dnl # see what flags are available. (Better yet, read the documentation!) # -AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) +AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.1], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) # Version on master must be X.Y (not X.Y.Z) for ProjectVersionMunged variable # to be useful (cf #19058). However, the version must have three components # (X.Y.Z) on stable branches (e.g. ghc-9.2) to ensure that pre-releases are @@ -22,7 +22,7 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-ha AC_CONFIG_MACRO_DIRS([m4]) # Set this to YES for a released version, otherwise NO -: ${RELEASE=NO} +: ${RELEASE=YES} # The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line # above. If this is not a released version, then we will append the ===================================== m4/find_ld.m4 ===================================== @@ -79,13 +79,16 @@ AC_DEFUN([FIND_LD],[ dnl See #21712. AC_CHECK_TARGET_TOOL([LD], [ld]) ;; - *) + *-linux*|*-mingw32) if test "x$enable_ld_override" = "xyes"; then find_ld else AC_CHECK_TARGET_TOOL([LD], [ld]) fi ;; + *) + AC_CHECK_TARGET_TOOL([LD], [ld]) + ;; esac CHECK_LD_COPY_BUG([$1]) ]) ===================================== m4/fp_find_cxx_std_lib.m4 ===================================== @@ -61,10 +61,11 @@ EOF try_libs() { dnl Try to link a plain object with CC manually AC_MSG_CHECKING([for linkage against '${3}']) - if "$CC" -o actest actest.o ${1} 2>/dev/null; then + dnl Ensures that CC uses same library path of CXX. + p="`"$CXX" --print-file-name ${2}`" + d="`dirname "$p"`" + if "$CC" -o actest actest.o ${1} -L"$d" 2>/dev/null; then CXX_STD_LIB_LIBS="${3}" - p="`"$CXX" --print-file-name ${2}`" - d="`dirname "$p"`" dnl On some platforms (e.g. Windows) the C++ standard library dnl can be found in the system search path. In this case $CXX dnl --print-file-name will simply print the filename without a ===================================== m4/fptools_happy.m4 ===================================== @@ -24,10 +24,15 @@ changequote([, ])dnl ]) if test ! -f compiler/GHC/Parser.hs || test ! -f compiler/GHC/Cmm/Parser.hs then + failure_msg="Happy version == 1.20.* || >= 2.0.2 && < 2.2 is required to compile GHC" FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.20.0], - [AC_MSG_ERROR([Happy version 1.20 or later is required to compile GHC.])])[] + [AC_MSG_ERROR([$failure_msg])])[] FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-ge],[1.21.0], - [AC_MSG_ERROR([Happy version 1.20 or earlier is required to compile GHC.])])[] + FP_COMPARE_VERSIONS([$fptools_cv_happy_version], [-le], [2.0.1], + [AC_MSG_ERROR([$failure_msg])])[])[] + FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-ge],[2.2.0], + [AC_MSG_ERROR([$failure_msg])])[] + fi HappyVersion=$fptools_cv_happy_version; AC_SUBST(HappyVersion) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4ce35a2ce823a20fca25e1ccbbbac8931d2fa2ca...08b948f60963e2e5704814a05342f680d7f89960 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4ce35a2ce823a20fca25e1ccbbbac8931d2fa2ca...08b948f60963e2e5704814a05342f680d7f89960 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 07:35:38 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 13 Dec 2024 02:35:38 -0500 Subject: [Git][ghc/ghc][wip/ghc-9.12-release] 9 commits: Changelog fixes Message-ID: <675be3cae7e18_f08815ea8c0833df@gitlab.mail> Zubin pushed to branch wip/ghc-9.12-release at Glasgow Haskell Compiler / GHC Commits: e8410b62 by Zubin Duggal at 2024-12-13T13:04:58+05:30 Changelog fixes - - - - - ef01873f by Zubin Duggal at 2024-12-13T13:04:58+05:30 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore - - - - - f8515241 by Ben Gamari at 2024-12-13T13:04:58+05:30 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. (cherry picked from commit 1e84b41108d96cb721dd11281105fdf621105a12) - - - - - 37468109 by Zubin Duggal at 2024-12-13T13:04:58+05:30 release: copy index.html from correct directory - - - - - 6d00c360 by Matthew Pickering at 2024-12-13T13:04:58+05:30 configure: Allow happy-2.0.2 happy-2.0.2 can be used to compile GHC. happy-2.0 and 2.0.1 have bugs which make it unsuitable to use. The version bound is now == 1.20.* || >= 2.0.2 && < 2.1 Fixes #25276 (cherry picked from commit 0029ca91c845dd4530eb2c4606ad5bd59775cec2) - - - - - 61af0f10 by Cristiano Moraes at 2024-12-13T13:04:58+05:30 configure: Find C++ probing when GCC version is the latest but G++ is old #23118 (cherry picked from commit 78ad81ecef846f73fee0f6c1a86cd6f19aa29b21) - - - - - 2141f968 by Ben Gamari at 2024-12-13T13:04:58+05:30 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. (cherry picked from commit 1fd83f865ffb620f4f7c4c59787710206dcadb90) - - - - - d22fee2e by Ben Gamari at 2024-12-13T13:04:58+05:30 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. (cherry picked from commit 992259962191b0b774dfeeabb46729376c7fe7cf) - - - - - ba57a440 by Zubin Duggal at 2024-12-13T13:04:58+05:30 RELEASE=YES - - - - - 9 changed files: - .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - configure.ac - docs/users_guide/9.12.1-notes.rst - libraries/template-haskell/changelog.md - m4/find_ld.m4 - m4/fp_find_cxx_std_lib.m4 - m4/fptools_happy.m4 - testsuite/driver/testlib.py Changes: ===================================== .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py ===================================== @@ -132,7 +132,7 @@ def fetch_artifacts(release: str, pipeline_id: int, for f in doc_files: subprocess.run(['tar', '-xf', f, '-C', dest]) logging.info(f'extracted docs {f} to {dest}') - index_path = destdir / 'index.html' + index_path = destdir / 'docs' / 'index.html' index_path.replace(dest / 'index.html') elif job.name == 'hackage-doc-tarball': dest = dest_dir / 'hackage_docs' ===================================== .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py ===================================== @@ -234,7 +234,7 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map): , "unknown_versioning" : centos7 } , "Linux_Fedora" : { ">= 33": fedora33 , "unknown_versioning": centos7 } - , "Linux_RedHat" : { "unknown_versioning": centos7 } + , "Linux_RedHat" : { "unknown_versioning": fedora33 } , "Linux_UnknownLinux" : { "unknown_versioning": rocky8 } , "Darwin" : { "unknown_versioning" : darwin_x86 } , "Windows" : { "unknown_versioning" : windows } ===================================== configure.ac ===================================== @@ -13,7 +13,7 @@ dnl # see what flags are available. (Better yet, read the documentation!) # -AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) +AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.1], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) # Version on master must be X.Y (not X.Y.Z) for ProjectVersionMunged variable # to be useful (cf #19058). However, the version must have three components # (X.Y.Z) on stable branches (e.g. ghc-9.2) to ensure that pre-releases are @@ -22,7 +22,7 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-ha AC_CONFIG_MACRO_DIRS([m4]) # Set this to YES for a released version, otherwise NO -: ${RELEASE=NO} +: ${RELEASE=YES} # The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line # above. If this is not a released version, then we will append the ===================================== docs/users_guide/9.12.1-notes.rst ===================================== @@ -1,4 +1,4 @@ -.. _release-9-11-1: +.. _release-9-12-1: Version 9.12.1 ============== @@ -80,6 +80,8 @@ Language Compiler ~~~~~~~~ +- GHC now has experimental support for native RISC-V code generation (:ghc-ticket:`16783`). + - Constructor ``PluginProv`` of type ``UnivCoProvenance``, relevant for typing plugins, gets an extra ``DCoVarSet`` argument. The argument is intended to contain the in-scope coercion variables @@ -109,16 +111,14 @@ Compiler welcome! - i386 Windows support is now completely removed amid massive cleanup - of legacy code to pave way for ARM64 Windows support (`#24883 - `_). Rest + of legacy code to pave way for ARM64 Windows support (:ghc-ticket:`24883`). Rest assured, this does not impact existing support for x86_64 Windows or i386 Linux. For end users, the ``stdcall`` C calling convention is now fully deprecated and GHC will unconditionally produce a warning and treat it as ``ccall``. All C import/export declarations on Windows should now use ``ccall``. -- 32-bit macOS/iOS support has also been completely removed (`#24921 - `_). This does +- 32-bit macOS/iOS support has also been completely removed (:ghc-ticket:`24921`). This does not affect existing support of Apple systems on x86_64/aarch64. - The flag :ghc-flag:`-fignore-asserts` will now also enable the @@ -216,6 +216,25 @@ Cmm - The `deprecation process of GHC.Pack `_ has come its term. The module has now been removed from ``base``. +- ``GHC.Desugar`` has been deprecated and should be removed in GHC 9.14. (`CLC proposal #216 `_) +- Add a ``readTixFile`` field to the ``HpcFlags`` record in ``GHC.RTS.Flags`` (`CLC proposal #276 `_) +- Add ``compareLength`` to ``Data.List`` and ``Data.List.NonEmpty`` (`CLC proposal #257 `_) +- Add ``INLINE[1]`` to ``compareInt`` / ``compareWord`` (`CLC proposal #179 `_) +- Refactor ``GHC.RTS.Flags`` in preparation for new I/O managers: introduce ``data IoManagerFlag`` and use it in ``MiscFlags``, remove ``getIoManagerFlag``, deprecate re-export of ``IoSubSystem`` (`CLC proposal #263 `_) +- Add the ``MonadFix`` instance for ``(,) a``, similar to the one for ``Writer a`` (`CLC proposal #238 `_) +- Improve ``toInteger :: Word32 -> Integer`` on 64-bit platforms (`CLC proposal #259 `_) +- Make ``flip`` representation polymorphic (`CLC proposal #245 `_) +- The ``HasField`` class now supports representation polymorphism (`CLC proposal #194 `_) +- Make ``read`` accept binary integer notation (`CLC proposal #177 `_) +- Improve the performance of ``Data.List.sort`` using an improved merging strategy. Instead of ``compare``, ``sort`` now uses ``(>)`` which may brea-malform- ``Ord`` instances (`CLC proposal #236 `_) +- Add ``inits1`` and ``tails1`` to ``Data.List``, factored from the corresponding functions in ``Data.List.NonEmpty`` (`CLC proposal #252 `_) +- Add ``firstA`` and ``secondA`` to ``Data.Bitraversable``. (`CLC proposal #172 `_) +- Deprecate ``GHC.TypeNats.Internal``, ``GHC.TypeLits.Internal``, ``GHC.ExecutionStack.Internal`` (`CLC proposal #217 `_) +- ``System.IO.Error.ioError`` and ``Control.Exception.ioError`` now both carry ``HasCallStack`` constraints (`CLC proposal #275 `_) +- Define ``Eq1``, ``Ord1``, ``Show1`` and ``Read1`` instances for basic ``Generic`` representation types. (`CLC proposal #273 `_) +- ``setNonBlockingMode`` will no longer throw an exception when called on a FD associated with a unknown device type. (`CLC proposal #282 `_) + + ``ghc-prim`` library ~~~~~~~~~~~~~~~~~~~~ @@ -255,11 +274,17 @@ Cmm ~~~~~~~~~~~~~~~~~~~~ ``ghc-experimental`` library -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +j~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``template-haskell`` library ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- Extend ``Exp`` with ``ForallE``, ``ForallVisE``, ``ConstraintedE``, introduce + functions ``forallE``, ``forallVisE``, ``constraintedE`` `GHC proposal #281 + `_. +- ``template-haskell`` is no longer wired-in. All wired-in identifiers have been moved to ``ghc-internal``. +- ``Lift`` instances were added for the ``template-haskell`` AST. + Included libraries ~~~~~~~~~~~~~~~~~~ @@ -269,6 +294,7 @@ for further change information. .. ghc-package-list:: + compiler/ghc.cabal: The compiler itself libraries/array/array.cabal: Dependency of ``ghc`` library libraries/base/base.cabal: Core library libraries/binary/binary.cabal: Dependency of ``ghc`` library @@ -279,23 +305,26 @@ for further change information. libraries/deepseq/deepseq.cabal: Dependency of ``ghc`` library libraries/directory/directory.cabal: Dependency of ``ghc`` library libraries/exceptions/exceptions.cabal: Dependency of ``ghc`` and ``haskeline`` library + libraries/file-io/file-io.cabal: Dependency of ``directory`` library libraries/filepath/filepath.cabal: Dependency of ``ghc`` library - compiler/ghc.cabal: The compiler itself - libraries/ghci/ghci.cabal: The REPL interface libraries/ghc-boot/ghc-boot.cabal: Internal compiler library libraries/ghc-boot-th/ghc-boot-th.cabal: Internal compiler library libraries/ghc-compact/ghc-compact.cabal: Core library + libraries/ghc-experimental/ghc-experimental.cabal: Core library libraries/ghc-heap/ghc-heap.cabal: GHC heap-walking library + libraries/ghci/ghci.cabal: The REPL interface + libraries/ghc-internal/ghc-internal.cabal: Core library + libraries/ghc-platform/ghc-platform.cabal.cabal: Internal library libraries/ghc-prim/ghc-prim.cabal: Core library - utils/haddock/haddock-api/haddock-api.cabal: Dependency of ``haddock`` executable - utils/haddock/haddock-library/haddock-library.cabal: Dependency of ``haddock`` executable libraries/haskeline/haskeline.cabal: Dependency of ``ghci`` executable libraries/hpc/hpc.cabal: Dependency of ``hpc`` executable libraries/integer-gmp/integer-gmp.cabal: Core library libraries/mtl/mtl.cabal: Dependency of ``Cabal`` library + libraries/os-string/os-string.cabal: Dependency of ``filepath`` library libraries/parsec/parsec.cabal: Dependency of ``Cabal`` library libraries/pretty/pretty.cabal: Dependency of ``ghc`` library libraries/process/process.cabal: Dependency of ``ghc`` library + libraries/semaphore-compat/semaphore-compat.cabal: Dependency of ``ghc`` library libraries/stm/stm.cabal: Dependency of ``haskeline`` library libraries/template-haskell/template-haskell.cabal: Core library libraries/terminfo/terminfo.cabal: Dependency of ``haskeline`` library @@ -305,5 +334,5 @@ for further change information. libraries/unix/unix.cabal: Dependency of ``ghc`` library libraries/Win32/Win32.cabal: Dependency of ``ghc`` library libraries/xhtml/xhtml.cabal: Dependency of ``haddock`` executable - libraries/os-string/os-string.cabal: Dependency of ``filepath`` library - libraries/file-io/file-io.cabal: Dependency of ``directory`` library + utils/haddock/haddock-api/haddock-api.cabal: Dependency of ``haddock`` executable + utils/haddock/haddock-library/haddock-library.cabal: Dependency of ``haddock`` executable ===================================== libraries/template-haskell/changelog.md ===================================== @@ -5,9 +5,6 @@ * Extend `Exp` with `ForallE`, `ForallVisE`, `ConstraintedE`, introduce functions `forallE`, `forallVisE`, `constraintedE` (GHC Proposal #281). * `template-haskell` is no longer wired-in. All wired-in identifiers have been moved to `ghc-internal`. - -## 2.22.1.0 - * `Lift` instances were added for the `template-haskell` AST. ## 2.22.0.0 ===================================== m4/find_ld.m4 ===================================== @@ -79,13 +79,16 @@ AC_DEFUN([FIND_LD],[ dnl See #21712. AC_CHECK_TARGET_TOOL([LD], [ld]) ;; - *) + *-linux*|*-mingw32) if test "x$enable_ld_override" = "xyes"; then find_ld else AC_CHECK_TARGET_TOOL([LD], [ld]) fi ;; + *) + AC_CHECK_TARGET_TOOL([LD], [ld]) + ;; esac CHECK_LD_COPY_BUG([$1]) ]) ===================================== m4/fp_find_cxx_std_lib.m4 ===================================== @@ -61,10 +61,11 @@ EOF try_libs() { dnl Try to link a plain object with CC manually AC_MSG_CHECKING([for linkage against '${3}']) - if "$CC" -o actest actest.o ${1} 2>/dev/null; then + dnl Ensures that CC uses same library path of CXX. + p="`"$CXX" --print-file-name ${2}`" + d="`dirname "$p"`" + if "$CC" -o actest actest.o ${1} -L"$d" 2>/dev/null; then CXX_STD_LIB_LIBS="${3}" - p="`"$CXX" --print-file-name ${2}`" - d="`dirname "$p"`" dnl On some platforms (e.g. Windows) the C++ standard library dnl can be found in the system search path. In this case $CXX dnl --print-file-name will simply print the filename without a ===================================== m4/fptools_happy.m4 ===================================== @@ -24,10 +24,15 @@ changequote([, ])dnl ]) if test ! -f compiler/GHC/Parser.hs || test ! -f compiler/GHC/Cmm/Parser.hs then + failure_msg="Happy version == 1.20.* || >= 2.0.2 && < 2.2 is required to compile GHC" FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.20.0], - [AC_MSG_ERROR([Happy version 1.20 or later is required to compile GHC.])])[] + [AC_MSG_ERROR([$failure_msg])])[] FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-ge],[1.21.0], - [AC_MSG_ERROR([Happy version 1.20 or earlier is required to compile GHC.])])[] + FP_COMPARE_VERSIONS([$fptools_cv_happy_version], [-le], [2.0.1], + [AC_MSG_ERROR([$failure_msg])])[])[] + FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-ge],[2.2.0], + [AC_MSG_ERROR([$failure_msg])])[] + fi HappyVersion=$fptools_cv_happy_version; AC_SUBST(HappyVersion) ===================================== testsuite/driver/testlib.py ===================================== @@ -270,6 +270,10 @@ def req_bco( name, opts ): # JS backend doesn't support ByteCode js_skip(name, opts) +def req_c_rts( name, opts ): + """ Require the C runtime system (rather than, e.g. the Javascript RTS). """ + js_skip(name, opts) + def req_rts_linker( name, opts ): if not config.have_RTS_linker: opts.expect = 'fail' View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/08b948f60963e2e5704814a05342f680d7f89960...ba57a44015aa0f72bc9096c243780308df84c3aa -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/08b948f60963e2e5704814a05342f680d7f89960...ba57a44015aa0f72bc9096c243780308df84c3aa You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 08:09:01 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 13 Dec 2024 03:09:01 -0500 Subject: [Git][ghc/ghc][wip/ghc-9.12-release] 9 commits: Changelog fixes Message-ID: <675beb9d36d4d_f0881ac90088408d@gitlab.mail> Zubin pushed to branch wip/ghc-9.12-release at Glasgow Haskell Compiler / GHC Commits: 21e929ac by Zubin Duggal at 2024-12-13T13:38:41+05:30 Changelog fixes - - - - - 41fa9c15 by Zubin Duggal at 2024-12-13T13:38:41+05:30 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore - - - - - 4b5c2aac by Ben Gamari at 2024-12-13T13:38:41+05:30 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. (cherry picked from commit 1e84b41108d96cb721dd11281105fdf621105a12) - - - - - 4449bcff by Zubin Duggal at 2024-12-13T13:38:41+05:30 release: copy index.html from correct directory - - - - - 1636ff27 by Matthew Pickering at 2024-12-13T13:38:41+05:30 configure: Allow happy-2.0.2 happy-2.0.2 can be used to compile GHC. happy-2.0 and 2.0.1 have bugs which make it unsuitable to use. The version bound is now == 1.20.* || >= 2.0.2 && < 2.1 Fixes #25276 (cherry picked from commit 0029ca91c845dd4530eb2c4606ad5bd59775cec2) - - - - - 1d99c448 by Cristiano Moraes at 2024-12-13T13:38:41+05:30 configure: Find C++ probing when GCC version is the latest but G++ is old #23118 (cherry picked from commit 78ad81ecef846f73fee0f6c1a86cd6f19aa29b21) - - - - - d5ca3392 by Ben Gamari at 2024-12-13T13:38:41+05:30 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. (cherry picked from commit 1fd83f865ffb620f4f7c4c59787710206dcadb90) - - - - - 5a19b496 by Ben Gamari at 2024-12-13T13:38:41+05:30 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. (cherry picked from commit 992259962191b0b774dfeeabb46729376c7fe7cf) - - - - - e92bb6e8 by Zubin Duggal at 2024-12-13T13:38:41+05:30 RELEASE=YES - - - - - 9 changed files: - .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - configure.ac - docs/users_guide/9.12.1-notes.rst - libraries/template-haskell/changelog.md - m4/find_ld.m4 - m4/fp_find_cxx_std_lib.m4 - m4/fptools_happy.m4 - testsuite/driver/testlib.py Changes: ===================================== .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py ===================================== @@ -132,7 +132,7 @@ def fetch_artifacts(release: str, pipeline_id: int, for f in doc_files: subprocess.run(['tar', '-xf', f, '-C', dest]) logging.info(f'extracted docs {f} to {dest}') - index_path = destdir / 'index.html' + index_path = destdir / 'docs' / 'index.html' index_path.replace(dest / 'index.html') elif job.name == 'hackage-doc-tarball': dest = dest_dir / 'hackage_docs' ===================================== .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py ===================================== @@ -234,7 +234,7 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map): , "unknown_versioning" : centos7 } , "Linux_Fedora" : { ">= 33": fedora33 , "unknown_versioning": centos7 } - , "Linux_RedHat" : { "unknown_versioning": centos7 } + , "Linux_RedHat" : { "unknown_versioning": fedora33 } , "Linux_UnknownLinux" : { "unknown_versioning": rocky8 } , "Darwin" : { "unknown_versioning" : darwin_x86 } , "Windows" : { "unknown_versioning" : windows } ===================================== configure.ac ===================================== @@ -13,7 +13,7 @@ dnl # see what flags are available. (Better yet, read the documentation!) # -AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) +AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.1], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) # Version on master must be X.Y (not X.Y.Z) for ProjectVersionMunged variable # to be useful (cf #19058). However, the version must have three components # (X.Y.Z) on stable branches (e.g. ghc-9.2) to ensure that pre-releases are @@ -22,7 +22,7 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-ha AC_CONFIG_MACRO_DIRS([m4]) # Set this to YES for a released version, otherwise NO -: ${RELEASE=NO} +: ${RELEASE=YES} # The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line # above. If this is not a released version, then we will append the ===================================== docs/users_guide/9.12.1-notes.rst ===================================== @@ -1,4 +1,4 @@ -.. _release-9-11-1: +.. _release-9-12-1: Version 9.12.1 ============== @@ -80,6 +80,8 @@ Language Compiler ~~~~~~~~ +- GHC now has experimental support for native RISC-V code generation (:ghc-ticket:`16783`). + - Constructor ``PluginProv`` of type ``UnivCoProvenance``, relevant for typing plugins, gets an extra ``DCoVarSet`` argument. The argument is intended to contain the in-scope coercion variables @@ -109,16 +111,14 @@ Compiler welcome! - i386 Windows support is now completely removed amid massive cleanup - of legacy code to pave way for ARM64 Windows support (`#24883 - `_). Rest + of legacy code to pave way for ARM64 Windows support (:ghc-ticket:`24883`). Rest assured, this does not impact existing support for x86_64 Windows or i386 Linux. For end users, the ``stdcall`` C calling convention is now fully deprecated and GHC will unconditionally produce a warning and treat it as ``ccall``. All C import/export declarations on Windows should now use ``ccall``. -- 32-bit macOS/iOS support has also been completely removed (`#24921 - `_). This does +- 32-bit macOS/iOS support has also been completely removed (:ghc-ticket:`24921`). This does not affect existing support of Apple systems on x86_64/aarch64. - The flag :ghc-flag:`-fignore-asserts` will now also enable the @@ -216,6 +216,25 @@ Cmm - The `deprecation process of GHC.Pack `_ has come its term. The module has now been removed from ``base``. +- ``GHC.Desugar`` has been deprecated and should be removed in GHC 9.14. (`CLC proposal #216 `_) +- Add a ``readTixFile`` field to the ``HpcFlags`` record in ``GHC.RTS.Flags`` (`CLC proposal #276 `_) +- Add ``compareLength`` to ``Data.List`` and ``Data.List.NonEmpty`` (`CLC proposal #257 `_) +- Add ``INLINE[1]`` to ``compareInt`` / ``compareWord`` (`CLC proposal #179 `_) +- Refactor ``GHC.RTS.Flags`` in preparation for new I/O managers: introduce ``data IoManagerFlag`` and use it in ``MiscFlags``, remove ``getIoManagerFlag``, deprecate re-export of ``IoSubSystem`` (`CLC proposal #263 `_) +- Add the ``MonadFix`` instance for ``(,) a``, similar to the one for ``Writer a`` (`CLC proposal #238 `_) +- Improve ``toInteger :: Word32 -> Integer`` on 64-bit platforms (`CLC proposal #259 `_) +- Make ``flip`` representation polymorphic (`CLC proposal #245 `_) +- The ``HasField`` class now supports representation polymorphism (`CLC proposal #194 `_) +- Make ``read`` accept binary integer notation (`CLC proposal #177 `_) +- Improve the performance of ``Data.List.sort`` using an improved merging strategy. Instead of ``compare``, ``sort`` now uses ``(>)`` which may brea-malform- ``Ord`` instances (`CLC proposal #236 `_) +- Add ``inits1`` and ``tails1`` to ``Data.List``, factored from the corresponding functions in ``Data.List.NonEmpty`` (`CLC proposal #252 `_) +- Add ``firstA`` and ``secondA`` to ``Data.Bitraversable``. (`CLC proposal #172 `_) +- Deprecate ``GHC.TypeNats.Internal``, ``GHC.TypeLits.Internal``, ``GHC.ExecutionStack.Internal`` (`CLC proposal #217 `_) +- ``System.IO.Error.ioError`` and ``Control.Exception.ioError`` now both carry ``HasCallStack`` constraints (`CLC proposal #275 `_) +- Define ``Eq1``, ``Ord1``, ``Show1`` and ``Read1`` instances for basic ``Generic`` representation types. (`CLC proposal #273 `_) +- ``setNonBlockingMode`` will no longer throw an exception when called on a FD associated with a unknown device type. (`CLC proposal #282 `_) + + ``ghc-prim`` library ~~~~~~~~~~~~~~~~~~~~ @@ -255,11 +274,17 @@ Cmm ~~~~~~~~~~~~~~~~~~~~ ``ghc-experimental`` library -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +j~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``template-haskell`` library ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- Extend ``Exp`` with ``ForallE``, ``ForallVisE``, ``ConstraintedE``, introduce + functions ``forallE``, ``forallVisE``, ``constraintedE`` `GHC proposal #281 + `_. +- ``template-haskell`` is no longer wired-in. All wired-in identifiers have been moved to ``ghc-internal``. +- ``Lift`` instances were added for the ``template-haskell`` AST. + Included libraries ~~~~~~~~~~~~~~~~~~ @@ -269,6 +294,7 @@ for further change information. .. ghc-package-list:: + compiler/ghc.cabal: The compiler itself libraries/array/array.cabal: Dependency of ``ghc`` library libraries/base/base.cabal: Core library libraries/binary/binary.cabal: Dependency of ``ghc`` library @@ -279,23 +305,26 @@ for further change information. libraries/deepseq/deepseq.cabal: Dependency of ``ghc`` library libraries/directory/directory.cabal: Dependency of ``ghc`` library libraries/exceptions/exceptions.cabal: Dependency of ``ghc`` and ``haskeline`` library + libraries/file-io/file-io.cabal: Dependency of ``directory`` library libraries/filepath/filepath.cabal: Dependency of ``ghc`` library - compiler/ghc.cabal: The compiler itself - libraries/ghci/ghci.cabal: The REPL interface libraries/ghc-boot/ghc-boot.cabal: Internal compiler library libraries/ghc-boot-th/ghc-boot-th.cabal: Internal compiler library libraries/ghc-compact/ghc-compact.cabal: Core library + libraries/ghc-experimental/ghc-experimental.cabal: Core library libraries/ghc-heap/ghc-heap.cabal: GHC heap-walking library + libraries/ghci/ghci.cabal: The REPL interface + libraries/ghc-internal/ghc-internal.cabal: Core library + libraries/ghc-platform/ghc-platform.cabal: Internal library libraries/ghc-prim/ghc-prim.cabal: Core library - utils/haddock/haddock-api/haddock-api.cabal: Dependency of ``haddock`` executable - utils/haddock/haddock-library/haddock-library.cabal: Dependency of ``haddock`` executable libraries/haskeline/haskeline.cabal: Dependency of ``ghci`` executable libraries/hpc/hpc.cabal: Dependency of ``hpc`` executable libraries/integer-gmp/integer-gmp.cabal: Core library libraries/mtl/mtl.cabal: Dependency of ``Cabal`` library + libraries/os-string/os-string.cabal: Dependency of ``filepath`` library libraries/parsec/parsec.cabal: Dependency of ``Cabal`` library libraries/pretty/pretty.cabal: Dependency of ``ghc`` library libraries/process/process.cabal: Dependency of ``ghc`` library + libraries/semaphore-compat/semaphore-compat.cabal: Dependency of ``ghc`` library libraries/stm/stm.cabal: Dependency of ``haskeline`` library libraries/template-haskell/template-haskell.cabal: Core library libraries/terminfo/terminfo.cabal: Dependency of ``haskeline`` library @@ -305,5 +334,5 @@ for further change information. libraries/unix/unix.cabal: Dependency of ``ghc`` library libraries/Win32/Win32.cabal: Dependency of ``ghc`` library libraries/xhtml/xhtml.cabal: Dependency of ``haddock`` executable - libraries/os-string/os-string.cabal: Dependency of ``filepath`` library - libraries/file-io/file-io.cabal: Dependency of ``directory`` library + utils/haddock/haddock-api/haddock-api.cabal: Dependency of ``haddock`` executable + utils/haddock/haddock-library/haddock-library.cabal: Dependency of ``haddock`` executable ===================================== libraries/template-haskell/changelog.md ===================================== @@ -5,9 +5,6 @@ * Extend `Exp` with `ForallE`, `ForallVisE`, `ConstraintedE`, introduce functions `forallE`, `forallVisE`, `constraintedE` (GHC Proposal #281). * `template-haskell` is no longer wired-in. All wired-in identifiers have been moved to `ghc-internal`. - -## 2.22.1.0 - * `Lift` instances were added for the `template-haskell` AST. ## 2.22.0.0 ===================================== m4/find_ld.m4 ===================================== @@ -79,13 +79,16 @@ AC_DEFUN([FIND_LD],[ dnl See #21712. AC_CHECK_TARGET_TOOL([LD], [ld]) ;; - *) + *-linux*|*-mingw32) if test "x$enable_ld_override" = "xyes"; then find_ld else AC_CHECK_TARGET_TOOL([LD], [ld]) fi ;; + *) + AC_CHECK_TARGET_TOOL([LD], [ld]) + ;; esac CHECK_LD_COPY_BUG([$1]) ]) ===================================== m4/fp_find_cxx_std_lib.m4 ===================================== @@ -61,10 +61,11 @@ EOF try_libs() { dnl Try to link a plain object with CC manually AC_MSG_CHECKING([for linkage against '${3}']) - if "$CC" -o actest actest.o ${1} 2>/dev/null; then + dnl Ensures that CC uses same library path of CXX. + p="`"$CXX" --print-file-name ${2}`" + d="`dirname "$p"`" + if "$CC" -o actest actest.o ${1} -L"$d" 2>/dev/null; then CXX_STD_LIB_LIBS="${3}" - p="`"$CXX" --print-file-name ${2}`" - d="`dirname "$p"`" dnl On some platforms (e.g. Windows) the C++ standard library dnl can be found in the system search path. In this case $CXX dnl --print-file-name will simply print the filename without a ===================================== m4/fptools_happy.m4 ===================================== @@ -24,10 +24,15 @@ changequote([, ])dnl ]) if test ! -f compiler/GHC/Parser.hs || test ! -f compiler/GHC/Cmm/Parser.hs then + failure_msg="Happy version == 1.20.* || >= 2.0.2 && < 2.2 is required to compile GHC" FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.20.0], - [AC_MSG_ERROR([Happy version 1.20 or later is required to compile GHC.])])[] + [AC_MSG_ERROR([$failure_msg])])[] FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-ge],[1.21.0], - [AC_MSG_ERROR([Happy version 1.20 or earlier is required to compile GHC.])])[] + FP_COMPARE_VERSIONS([$fptools_cv_happy_version], [-le], [2.0.1], + [AC_MSG_ERROR([$failure_msg])])[])[] + FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-ge],[2.2.0], + [AC_MSG_ERROR([$failure_msg])])[] + fi HappyVersion=$fptools_cv_happy_version; AC_SUBST(HappyVersion) ===================================== testsuite/driver/testlib.py ===================================== @@ -270,6 +270,10 @@ def req_bco( name, opts ): # JS backend doesn't support ByteCode js_skip(name, opts) +def req_c_rts( name, opts ): + """ Require the C runtime system (rather than, e.g. the Javascript RTS). """ + js_skip(name, opts) + def req_rts_linker( name, opts ): if not config.have_RTS_linker: opts.expect = 'fail' View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ba57a44015aa0f72bc9096c243780308df84c3aa...e92bb6e861a0e2b5ea029540dd9c9c7fc8645480 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ba57a44015aa0f72bc9096c243780308df84c3aa...e92bb6e861a0e2b5ea029540dd9c9c7fc8645480 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 11:30:20 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 13 Dec 2024 06:30:20 -0500 Subject: [Git][ghc/ghc][wip/ghc-9.12-release] 9 commits: Changelog fixes Message-ID: <675c1accc635f_3923734642cc29671@gitlab.mail> Zubin pushed to branch wip/ghc-9.12-release at Glasgow Haskell Compiler / GHC Commits: 15c719f3 by Zubin Duggal at 2024-12-13T16:59:48+05:30 Changelog fixes - - - - - dc86785e by Zubin Duggal at 2024-12-13T16:59:48+05:30 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore - - - - - fc647a65 by Ben Gamari at 2024-12-13T16:59:48+05:30 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. (cherry picked from commit 1e84b41108d96cb721dd11281105fdf621105a12) - - - - - cbfd0829 by Zubin Duggal at 2024-12-13T16:59:48+05:30 release: copy index.html from correct directory - - - - - 0ba478fe by Matthew Pickering at 2024-12-13T16:59:48+05:30 configure: Allow happy-2.0.2 happy-2.0.2 can be used to compile GHC. happy-2.0 and 2.0.1 have bugs which make it unsuitable to use. The version bound is now == 1.20.* || >= 2.0.2 && < 2.1 Fixes #25276 (cherry picked from commit 0029ca91c845dd4530eb2c4606ad5bd59775cec2) - - - - - 24b4914a by Cristiano Moraes at 2024-12-13T16:59:48+05:30 configure: Find C++ probing when GCC version is the latest but G++ is old #23118 (cherry picked from commit 78ad81ecef846f73fee0f6c1a86cd6f19aa29b21) - - - - - 95d35d6c by Ben Gamari at 2024-12-13T16:59:48+05:30 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. (cherry picked from commit 1fd83f865ffb620f4f7c4c59787710206dcadb90) - - - - - 86f29950 by Ben Gamari at 2024-12-13T16:59:48+05:30 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. (cherry picked from commit 992259962191b0b774dfeeabb46729376c7fe7cf) - - - - - 32f7a9ab by Zubin Duggal at 2024-12-13T16:59:48+05:30 RELEASE=YES - - - - - 10 changed files: - .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - configure.ac - docs/users_guide/9.12.1-notes.rst - libraries/base/changelog.md - libraries/template-haskell/changelog.md - m4/find_ld.m4 - m4/fp_find_cxx_std_lib.m4 - m4/fptools_happy.m4 - testsuite/driver/testlib.py Changes: ===================================== .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py ===================================== @@ -132,7 +132,7 @@ def fetch_artifacts(release: str, pipeline_id: int, for f in doc_files: subprocess.run(['tar', '-xf', f, '-C', dest]) logging.info(f'extracted docs {f} to {dest}') - index_path = destdir / 'index.html' + index_path = destdir / 'docs' / 'index.html' index_path.replace(dest / 'index.html') elif job.name == 'hackage-doc-tarball': dest = dest_dir / 'hackage_docs' ===================================== .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py ===================================== @@ -234,7 +234,7 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map): , "unknown_versioning" : centos7 } , "Linux_Fedora" : { ">= 33": fedora33 , "unknown_versioning": centos7 } - , "Linux_RedHat" : { "unknown_versioning": centos7 } + , "Linux_RedHat" : { "unknown_versioning": fedora33 } , "Linux_UnknownLinux" : { "unknown_versioning": rocky8 } , "Darwin" : { "unknown_versioning" : darwin_x86 } , "Windows" : { "unknown_versioning" : windows } ===================================== configure.ac ===================================== @@ -13,7 +13,7 @@ dnl # see what flags are available. (Better yet, read the documentation!) # -AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) +AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.1], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) # Version on master must be X.Y (not X.Y.Z) for ProjectVersionMunged variable # to be useful (cf #19058). However, the version must have three components # (X.Y.Z) on stable branches (e.g. ghc-9.2) to ensure that pre-releases are @@ -22,7 +22,7 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-ha AC_CONFIG_MACRO_DIRS([m4]) # Set this to YES for a released version, otherwise NO -: ${RELEASE=NO} +: ${RELEASE=YES} # The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line # above. If this is not a released version, then we will append the ===================================== docs/users_guide/9.12.1-notes.rst ===================================== @@ -1,4 +1,4 @@ -.. _release-9-11-1: +.. _release-9-12-1: Version 9.12.1 ============== @@ -80,6 +80,8 @@ Language Compiler ~~~~~~~~ +- GHC now has experimental support for native RISC-V code generation (:ghc-ticket:`16783`). + - Constructor ``PluginProv`` of type ``UnivCoProvenance``, relevant for typing plugins, gets an extra ``DCoVarSet`` argument. The argument is intended to contain the in-scope coercion variables @@ -109,16 +111,14 @@ Compiler welcome! - i386 Windows support is now completely removed amid massive cleanup - of legacy code to pave way for ARM64 Windows support (`#24883 - `_). Rest + of legacy code to pave way for ARM64 Windows support (:ghc-ticket:`24883`). Rest assured, this does not impact existing support for x86_64 Windows or i386 Linux. For end users, the ``stdcall`` C calling convention is now fully deprecated and GHC will unconditionally produce a warning and treat it as ``ccall``. All C import/export declarations on Windows should now use ``ccall``. -- 32-bit macOS/iOS support has also been completely removed (`#24921 - `_). This does +- 32-bit macOS/iOS support has also been completely removed (:ghc-ticket:`24921`). This does not affect existing support of Apple systems on x86_64/aarch64. - The flag :ghc-flag:`-fignore-asserts` will now also enable the @@ -216,6 +216,25 @@ Cmm - The `deprecation process of GHC.Pack `_ has come its term. The module has now been removed from ``base``. +- ``GHC.Desugar`` has been deprecated and should be removed in GHC 9.14. (`CLC proposal #216 `_) +- Add a ``readTixFile`` field to the ``HpcFlags`` record in ``GHC.RTS.Flags`` (`CLC proposal #276 `_) +- Add ``compareLength`` to ``Data.List`` and ``Data.List.NonEmpty`` (`CLC proposal #257 `_) +- Add ``INLINE[1]`` to ``compareInt`` / ``compareWord`` (`CLC proposal #179 `_) +- Refactor ``GHC.RTS.Flags`` in preparation for new I/O managers: introduce ``data IoManagerFlag`` and use it in ``MiscFlags``, remove ``getIoManagerFlag``, deprecate re-export of ``IoSubSystem`` (`CLC proposal #263 `_) +- Add the ``MonadFix`` instance for ``(,) a``, similar to the one for ``Writer a`` (`CLC proposal #238 `_) +- Improve ``toInteger :: Word32 -> Integer`` on 64-bit platforms (`CLC proposal #259 `_) +- Make ``flip`` representation polymorphic (`CLC proposal #245 `_) +- The ``HasField`` class now supports representation polymorphism (`CLC proposal #194 `_) +- Make ``read`` accept binary integer notation (`CLC proposal #177 `_) +- Improve the performance of ``Data.List.sort`` using an improved merging strategy. Instead of ``compare``, ``sort`` now uses ``(>)`` which may brea-malform- ``Ord`` instances (`CLC proposal #236 `_) +- Add ``inits1`` and ``tails1`` to ``Data.List``, factored from the corresponding functions in ``Data.List.NonEmpty`` (`CLC proposal #252 `_) +- Add ``firstA`` and ``secondA`` to ``Data.Bitraversable``. (`CLC proposal #172 `_) +- Deprecate ``GHC.TypeNats.Internal``, ``GHC.TypeLits.Internal``, ``GHC.ExecutionStack.Internal`` (`CLC proposal #217 `_) +- ``System.IO.Error.ioError`` and ``Control.Exception.ioError`` now both carry ``HasCallStack`` constraints (`CLC proposal #275 `_) +- Define ``Eq1``, ``Ord1``, ``Show1`` and ``Read1`` instances for basic ``Generic`` representation types. (`CLC proposal #273 `_) +- ``setNonBlockingMode`` will no longer throw an exception when called on a FD associated with a unknown device type. (`CLC proposal #282 `_) + + ``ghc-prim`` library ~~~~~~~~~~~~~~~~~~~~ @@ -255,11 +274,17 @@ Cmm ~~~~~~~~~~~~~~~~~~~~ ``ghc-experimental`` library -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +j~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``template-haskell`` library ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- Extend ``Exp`` with ``ForallE``, ``ForallVisE``, ``ConstraintedE``, introduce + functions ``forallE``, ``forallVisE``, ``constraintedE`` `GHC proposal #281 + `_. +- ``template-haskell`` is no longer wired-in. All wired-in identifiers have been moved to ``ghc-internal``. +- ``Lift`` instances were added for the ``template-haskell`` AST. + Included libraries ~~~~~~~~~~~~~~~~~~ @@ -269,6 +294,7 @@ for further change information. .. ghc-package-list:: + compiler/ghc.cabal: The compiler itself libraries/array/array.cabal: Dependency of ``ghc`` library libraries/base/base.cabal: Core library libraries/binary/binary.cabal: Dependency of ``ghc`` library @@ -279,23 +305,26 @@ for further change information. libraries/deepseq/deepseq.cabal: Dependency of ``ghc`` library libraries/directory/directory.cabal: Dependency of ``ghc`` library libraries/exceptions/exceptions.cabal: Dependency of ``ghc`` and ``haskeline`` library + libraries/file-io/file-io.cabal: Dependency of ``directory`` library libraries/filepath/filepath.cabal: Dependency of ``ghc`` library - compiler/ghc.cabal: The compiler itself - libraries/ghci/ghci.cabal: The REPL interface libraries/ghc-boot/ghc-boot.cabal: Internal compiler library libraries/ghc-boot-th/ghc-boot-th.cabal: Internal compiler library libraries/ghc-compact/ghc-compact.cabal: Core library + libraries/ghc-experimental/ghc-experimental.cabal: Core library libraries/ghc-heap/ghc-heap.cabal: GHC heap-walking library + libraries/ghci/ghci.cabal: The REPL interface + libraries/ghc-internal/ghc-internal.cabal: Core library + libraries/ghc-platform/ghc-platform.cabal: Internal library libraries/ghc-prim/ghc-prim.cabal: Core library - utils/haddock/haddock-api/haddock-api.cabal: Dependency of ``haddock`` executable - utils/haddock/haddock-library/haddock-library.cabal: Dependency of ``haddock`` executable libraries/haskeline/haskeline.cabal: Dependency of ``ghci`` executable libraries/hpc/hpc.cabal: Dependency of ``hpc`` executable libraries/integer-gmp/integer-gmp.cabal: Core library libraries/mtl/mtl.cabal: Dependency of ``Cabal`` library + libraries/os-string/os-string.cabal: Dependency of ``filepath`` library libraries/parsec/parsec.cabal: Dependency of ``Cabal`` library libraries/pretty/pretty.cabal: Dependency of ``ghc`` library libraries/process/process.cabal: Dependency of ``ghc`` library + libraries/semaphore-compat/semaphore-compat.cabal: Dependency of ``ghc`` library libraries/stm/stm.cabal: Dependency of ``haskeline`` library libraries/template-haskell/template-haskell.cabal: Core library libraries/terminfo/terminfo.cabal: Dependency of ``haskeline`` library @@ -305,5 +334,5 @@ for further change information. libraries/unix/unix.cabal: Dependency of ``ghc`` library libraries/Win32/Win32.cabal: Dependency of ``ghc`` library libraries/xhtml/xhtml.cabal: Dependency of ``haddock`` executable - libraries/os-string/os-string.cabal: Dependency of ``filepath`` library - libraries/file-io/file-io.cabal: Dependency of ``directory`` library + utils/haddock/haddock-api/haddock-api.cabal: Dependency of ``haddock`` executable + utils/haddock/haddock-library/haddock-library.cabal: Dependency of ``haddock`` executable ===================================== libraries/base/changelog.md ===================================== @@ -1,6 +1,7 @@ # Changelog for [`base` package](http://hackage.haskell.org/package/base) -## 4.21.0.0 *TBA* +## 4.21.0.0 December 2024 + * Shipped with GHC 9.12.1 * `GHC.Desugar` has been deprecated and should be removed in GHC 9.14. ([CLC proposal #216](https://github.com/haskell/core-libraries-committee/issues/216)) * Add a `readTixFile` field to the `HpcFlags` record in `GHC.RTS.Flags` ([CLC proposal #276](https://github.com/haskell/core-libraries-committee/issues/276)) * Add `compareLength` to `Data.List` and `Data.List.NonEmpty` ([CLC proposal #257](https://github.com/haskell/core-libraries-committee/issues/257)) ===================================== libraries/template-haskell/changelog.md ===================================== @@ -5,9 +5,6 @@ * Extend `Exp` with `ForallE`, `ForallVisE`, `ConstraintedE`, introduce functions `forallE`, `forallVisE`, `constraintedE` (GHC Proposal #281). * `template-haskell` is no longer wired-in. All wired-in identifiers have been moved to `ghc-internal`. - -## 2.22.1.0 - * `Lift` instances were added for the `template-haskell` AST. ## 2.22.0.0 ===================================== m4/find_ld.m4 ===================================== @@ -79,13 +79,16 @@ AC_DEFUN([FIND_LD],[ dnl See #21712. AC_CHECK_TARGET_TOOL([LD], [ld]) ;; - *) + *-linux*|*-mingw32) if test "x$enable_ld_override" = "xyes"; then find_ld else AC_CHECK_TARGET_TOOL([LD], [ld]) fi ;; + *) + AC_CHECK_TARGET_TOOL([LD], [ld]) + ;; esac CHECK_LD_COPY_BUG([$1]) ]) ===================================== m4/fp_find_cxx_std_lib.m4 ===================================== @@ -61,10 +61,11 @@ EOF try_libs() { dnl Try to link a plain object with CC manually AC_MSG_CHECKING([for linkage against '${3}']) - if "$CC" -o actest actest.o ${1} 2>/dev/null; then + dnl Ensures that CC uses same library path of CXX. + p="`"$CXX" --print-file-name ${2}`" + d="`dirname "$p"`" + if "$CC" -o actest actest.o ${1} -L"$d" 2>/dev/null; then CXX_STD_LIB_LIBS="${3}" - p="`"$CXX" --print-file-name ${2}`" - d="`dirname "$p"`" dnl On some platforms (e.g. Windows) the C++ standard library dnl can be found in the system search path. In this case $CXX dnl --print-file-name will simply print the filename without a ===================================== m4/fptools_happy.m4 ===================================== @@ -24,10 +24,15 @@ changequote([, ])dnl ]) if test ! -f compiler/GHC/Parser.hs || test ! -f compiler/GHC/Cmm/Parser.hs then + failure_msg="Happy version == 1.20.* || >= 2.0.2 && < 2.2 is required to compile GHC" FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.20.0], - [AC_MSG_ERROR([Happy version 1.20 or later is required to compile GHC.])])[] + [AC_MSG_ERROR([$failure_msg])])[] FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-ge],[1.21.0], - [AC_MSG_ERROR([Happy version 1.20 or earlier is required to compile GHC.])])[] + FP_COMPARE_VERSIONS([$fptools_cv_happy_version], [-le], [2.0.1], + [AC_MSG_ERROR([$failure_msg])])[])[] + FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-ge],[2.2.0], + [AC_MSG_ERROR([$failure_msg])])[] + fi HappyVersion=$fptools_cv_happy_version; AC_SUBST(HappyVersion) ===================================== testsuite/driver/testlib.py ===================================== @@ -270,6 +270,10 @@ def req_bco( name, opts ): # JS backend doesn't support ByteCode js_skip(name, opts) +def req_c_rts( name, opts ): + """ Require the C runtime system (rather than, e.g. the Javascript RTS). """ + js_skip(name, opts) + def req_rts_linker( name, opts ): if not config.have_RTS_linker: opts.expect = 'fail' View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/e92bb6e861a0e2b5ea029540dd9c9c7fc8645480...32f7a9ab6c1a52e34e705c8d99deda6068980b5f -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/e92bb6e861a0e2b5ea029540dd9c9c7fc8645480...32f7a9ab6c1a52e34e705c8d99deda6068980b5f You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 14:03:50 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Fri, 13 Dec 2024 09:03:50 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/sand-witch/flip-set-field Message-ID: <675c3ec639936_15e9f437e0b059991@gitlab.mail> Andrei Borzenkov pushed new branch wip/sand-witch/flip-set-field at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/sand-witch/flip-set-field You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 14:04:44 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Fri, 13 Dec 2024 09:04:44 -0500 Subject: [Git][ghc/ghc][wip/sand-witch/flip-set-field] Flip the order of arguments of setField (24668) Message-ID: <675c3efc86a32_15e9f43a618c601d6@gitlab.mail> Andrei Borzenkov pushed to branch wip/sand-witch/flip-set-field at Glasgow Haskell Compiler / GHC Commits: 23a461ed by Andrei Borzenkov at 2024-12-13T18:04:18+04:00 Flip the order of arguments of setField (24668) GHC Proposal 583 "HasField redesing" specifies the order of a setField function as this: setField :: forall fld a b. SetField fld a b. b -> a -> a This patch flips the application order to match the spec. - - - - - 6 changed files: - compiler/GHC/Rename/Expr.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/overloaded_record_update.rst - testsuite/tests/parser/should_fail/RecordDotSyntaxFail10.hs - testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.hs - testsuite/tests/parser/should_run/RecordDotSyntax1.hs Changes: ===================================== compiler/GHC/Rename/Expr.hs ===================================== @@ -2844,10 +2844,11 @@ mkGetField :: Name -> LHsExpr GhcRn -> LocatedAn NoEpAnns FieldLabelString -> Hs mkGetField get_field arg field = unLoc (head $ mkGet get_field [arg] field) -- mkSetField a field b calculates a set_field @field expression. --- e.g mkSetSetField a field b = set_field @"field" a b (read as "set field 'field' on a to b"). +-- e.g mkSetSetField a field b = set_field @"field" a b (read as "set field 'field' to a on b"). +-- NB: the order of aruments is specified by GHC Proposal 583: HasField redesign. mkSetField :: Name -> LHsExpr GhcRn -> LocatedAn NoEpAnns FieldLabelString -> LHsExpr GhcRn -> HsExpr GhcRn mkSetField set_field a (L _ (FieldLabelString field)) b = - genHsApp (genHsApp (genHsVar set_field `genAppType` genHsTyLit field) a) b + genHsApp (genHsApp (genHsVar set_field `genAppType` genHsTyLit field) b) a mkGet :: Name -> [LHsExpr GhcRn] -> LocatedAn NoEpAnns FieldLabelString -> [LHsExpr GhcRn] mkGet get_field l@(r : _) (L _ (FieldLabelString field)) = ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -12,7 +12,7 @@ Language ~~~~~~~~ * ``-Wincomplete-record-selectors`` is now part of `-Wall`, as specified - by `GHC Proposal 516: add warning for incomplete record selectors _`. + by `GHC Proposal 516: add warning for incomplete record selectors `_. Hence, if a library is compiled with ``-Werror``, compilation may now fail. Solution: fix the library. Workaround: add ``-Werror=no-incomplete-record-selectors``. @@ -25,6 +25,19 @@ Language :extension:`TypeAbstractions`. The warning flag``deprecated-type-abstractions`` has also been removed from the compiler. +* :extension:`OverloadedRecordUpdate` now passes the arguments to a ``setField`` function + in the flipped order, as specicfied by `GHC Proposal 583: HasField redesign `_. + + Previously GHC expected ``setField`` to have this type: :: + + setField :: forall (fld :: Symbol) a r. r -> a -> r + + And that's what GHC expects now: :: + + setField :: forall (fld :: Symbol) a r. a -> r -> r + + That will break the combination of :extension:`OverloadedRecordUpdate` with :extension:`RebindableSyntax`. + Compiler ~~~~~~~~ ===================================== docs/users_guide/exts/overloaded_record_update.rst ===================================== @@ -30,8 +30,8 @@ Example: getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. - setField :: forall x r a . HasField x r a => r -> a -> r - setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. + setField :: forall x r a . HasField x r a => a -> r -> r + setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. data Person = Person { name :: String } deriving Show instance HasField "name" Person String where ===================================== testsuite/tests/parser/should_fail/RecordDotSyntaxFail10.hs ===================================== @@ -11,8 +11,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Bar' data Foo = Foo { foo :: Bar } deriving (Show, Eq) ===================================== testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.hs ===================================== @@ -13,8 +13,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Int' data Foo = Foo { foo :: Int } deriving (Show, Eq) ===================================== testsuite/tests/parser/should_run/RecordDotSyntax1.hs ===================================== @@ -21,8 +21,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Bar' data Foo = Foo { foo :: Bar } deriving (Show, Eq) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/23a461ed172e3f25607dcd53e7d160de4f7fe332 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/23a461ed172e3f25607dcd53e7d160de4f7fe332 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 14:05:23 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Fri, 13 Dec 2024 09:05:23 -0500 Subject: [Git][ghc/ghc][wip/sand-witch/flip-set-field] Flip the order of arguments of setField (24668) Message-ID: <675c3f2327735_15e9f42ed2b8603fc@gitlab.mail> Andrei Borzenkov pushed to branch wip/sand-witch/flip-set-field at Glasgow Haskell Compiler / GHC Commits: f64c8e1f by Andrei Borzenkov at 2024-12-13T18:05:05+04:00 Flip the order of arguments of setField (24668) GHC Proposal 583 "HasField redesign" specifies the order of a setField function as this: setField :: forall fld a b. SetField fld a b. b -> a -> a This patch flips the application order to match the spec. - - - - - 6 changed files: - compiler/GHC/Rename/Expr.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/overloaded_record_update.rst - testsuite/tests/parser/should_fail/RecordDotSyntaxFail10.hs - testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.hs - testsuite/tests/parser/should_run/RecordDotSyntax1.hs Changes: ===================================== compiler/GHC/Rename/Expr.hs ===================================== @@ -2844,10 +2844,11 @@ mkGetField :: Name -> LHsExpr GhcRn -> LocatedAn NoEpAnns FieldLabelString -> Hs mkGetField get_field arg field = unLoc (head $ mkGet get_field [arg] field) -- mkSetField a field b calculates a set_field @field expression. --- e.g mkSetSetField a field b = set_field @"field" a b (read as "set field 'field' on a to b"). +-- e.g mkSetSetField a field b = set_field @"field" a b (read as "set field 'field' to a on b"). +-- NB: the order of aruments is specified by GHC Proposal 583: HasField redesign. mkSetField :: Name -> LHsExpr GhcRn -> LocatedAn NoEpAnns FieldLabelString -> LHsExpr GhcRn -> HsExpr GhcRn mkSetField set_field a (L _ (FieldLabelString field)) b = - genHsApp (genHsApp (genHsVar set_field `genAppType` genHsTyLit field) a) b + genHsApp (genHsApp (genHsVar set_field `genAppType` genHsTyLit field) b) a mkGet :: Name -> [LHsExpr GhcRn] -> LocatedAn NoEpAnns FieldLabelString -> [LHsExpr GhcRn] mkGet get_field l@(r : _) (L _ (FieldLabelString field)) = ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -12,7 +12,7 @@ Language ~~~~~~~~ * ``-Wincomplete-record-selectors`` is now part of `-Wall`, as specified - by `GHC Proposal 516: add warning for incomplete record selectors _`. + by `GHC Proposal 516: add warning for incomplete record selectors `_. Hence, if a library is compiled with ``-Werror``, compilation may now fail. Solution: fix the library. Workaround: add ``-Werror=no-incomplete-record-selectors``. @@ -25,6 +25,19 @@ Language :extension:`TypeAbstractions`. The warning flag``deprecated-type-abstractions`` has also been removed from the compiler. +* :extension:`OverloadedRecordUpdate` now passes the arguments to a ``setField`` function + in the flipped order, as specicfied by `GHC Proposal 583: HasField redesign `_. + + Previously GHC expected ``setField`` to have this type: :: + + setField :: forall (fld :: Symbol) a r. r -> a -> r + + And that's what GHC expects now: :: + + setField :: forall (fld :: Symbol) a r. a -> r -> r + + That will break the combination of :extension:`OverloadedRecordUpdate` with :extension:`RebindableSyntax`. + Compiler ~~~~~~~~ ===================================== docs/users_guide/exts/overloaded_record_update.rst ===================================== @@ -30,8 +30,8 @@ Example: getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. - setField :: forall x r a . HasField x r a => r -> a -> r - setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. + setField :: forall x r a . HasField x r a => a -> r -> r + setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. data Person = Person { name :: String } deriving Show instance HasField "name" Person String where ===================================== testsuite/tests/parser/should_fail/RecordDotSyntaxFail10.hs ===================================== @@ -11,8 +11,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Bar' data Foo = Foo { foo :: Bar } deriving (Show, Eq) ===================================== testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.hs ===================================== @@ -13,8 +13,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Int' data Foo = Foo { foo :: Int } deriving (Show, Eq) ===================================== testsuite/tests/parser/should_run/RecordDotSyntax1.hs ===================================== @@ -21,8 +21,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Bar' data Foo = Foo { foo :: Bar } deriving (Show, Eq) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f64c8e1fbb00c228f166a9ac28e520c1b9d9642b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f64c8e1fbb00c228f166a9ac28e520c1b9d9642b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 14:06:52 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Fri, 13 Dec 2024 09:06:52 -0500 Subject: [Git][ghc/ghc][wip/sand-witch/flip-set-field] Flip the order of arguments of setField (24668) Message-ID: <675c3f7c113f2_15e9f437e09c605b@gitlab.mail> Andrei Borzenkov pushed to branch wip/sand-witch/flip-set-field at Glasgow Haskell Compiler / GHC Commits: 9e453301 by Andrei Borzenkov at 2024-12-13T18:05:49+04:00 Flip the order of arguments of setField (24668) GHC Proposal 583 "HasField redesign" specifies the following order of a setField function arguments as this: setField :: forall fld a b. SetField fld a b. b -> a -> a This patch flips the application order to match the spec. - - - - - 6 changed files: - compiler/GHC/Rename/Expr.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/overloaded_record_update.rst - testsuite/tests/parser/should_fail/RecordDotSyntaxFail10.hs - testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.hs - testsuite/tests/parser/should_run/RecordDotSyntax1.hs Changes: ===================================== compiler/GHC/Rename/Expr.hs ===================================== @@ -2844,10 +2844,11 @@ mkGetField :: Name -> LHsExpr GhcRn -> LocatedAn NoEpAnns FieldLabelString -> Hs mkGetField get_field arg field = unLoc (head $ mkGet get_field [arg] field) -- mkSetField a field b calculates a set_field @field expression. --- e.g mkSetSetField a field b = set_field @"field" a b (read as "set field 'field' on a to b"). +-- e.g mkSetSetField a field b = set_field @"field" a b (read as "set field 'field' to a on b"). +-- NB: the order of aruments is specified by GHC Proposal 583: HasField redesign. mkSetField :: Name -> LHsExpr GhcRn -> LocatedAn NoEpAnns FieldLabelString -> LHsExpr GhcRn -> HsExpr GhcRn mkSetField set_field a (L _ (FieldLabelString field)) b = - genHsApp (genHsApp (genHsVar set_field `genAppType` genHsTyLit field) a) b + genHsApp (genHsApp (genHsVar set_field `genAppType` genHsTyLit field) b) a mkGet :: Name -> [LHsExpr GhcRn] -> LocatedAn NoEpAnns FieldLabelString -> [LHsExpr GhcRn] mkGet get_field l@(r : _) (L _ (FieldLabelString field)) = ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -12,7 +12,7 @@ Language ~~~~~~~~ * ``-Wincomplete-record-selectors`` is now part of `-Wall`, as specified - by `GHC Proposal 516: add warning for incomplete record selectors _`. + by `GHC Proposal 516: add warning for incomplete record selectors `_. Hence, if a library is compiled with ``-Werror``, compilation may now fail. Solution: fix the library. Workaround: add ``-Werror=no-incomplete-record-selectors``. @@ -25,6 +25,19 @@ Language :extension:`TypeAbstractions`. The warning flag``deprecated-type-abstractions`` has also been removed from the compiler. +* :extension:`OverloadedRecordUpdate` now passes the arguments to a ``setField`` function + in the flipped order, as specicfied by `GHC Proposal 583: HasField redesign `_. + + Previously GHC expected ``setField`` to have this type: :: + + setField :: forall (fld :: Symbol) a r. r -> a -> r + + And that's what GHC expects now: :: + + setField :: forall (fld :: Symbol) a r. a -> r -> r + + That will break the combination of :extension:`OverloadedRecordUpdate` with :extension:`RebindableSyntax`. + Compiler ~~~~~~~~ ===================================== docs/users_guide/exts/overloaded_record_update.rst ===================================== @@ -30,8 +30,8 @@ Example: getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. - setField :: forall x r a . HasField x r a => r -> a -> r - setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. + setField :: forall x r a . HasField x r a => a -> r -> r + setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. data Person = Person { name :: String } deriving Show instance HasField "name" Person String where ===================================== testsuite/tests/parser/should_fail/RecordDotSyntaxFail10.hs ===================================== @@ -11,8 +11,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Bar' data Foo = Foo { foo :: Bar } deriving (Show, Eq) ===================================== testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.hs ===================================== @@ -13,8 +13,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Int' data Foo = Foo { foo :: Int } deriving (Show, Eq) ===================================== testsuite/tests/parser/should_run/RecordDotSyntax1.hs ===================================== @@ -21,8 +21,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Bar' data Foo = Foo { foo :: Bar } deriving (Show, Eq) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9e453301c47d88acb9dab45b85ffbec6aa7cd2a1 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9e453301c47d88acb9dab45b85ffbec6aa7cd2a1 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 15:20:23 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Fri, 13 Dec 2024 10:20:23 -0500 Subject: [Git][ghc/ghc][wip/romes/graph-compact-easy] Restore parts of API necessary for ghcide case study Message-ID: <675c50b749b47_600e415be2c3432c@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/graph-compact-easy at Glasgow Haskell Compiler / GHC Commits: d6a62da7 by Rodrigo Mesquita at 2024-12-13T15:20:03+00:00 Restore parts of API necessary for ghcide case study - - - - - 3 changed files: - compiler/GHC/Unit/Home/Graph.hs - compiler/GHC/Unit/Home/PackageTable.hs - docs/users_guide/9.14.1-notes.rst Changes: ===================================== compiler/GHC/Unit/Home/Graph.hs ===================================== @@ -55,7 +55,7 @@ module GHC.Unit.Home.Graph , pprHomeUnitEnv -- * Auxiliary internal structure - , UnitEnvGraph + , UnitEnvGraph(..) , unitEnv_lookup_maybe , unitEnv_foldWithKey , unitEnv_singleton ===================================== compiler/GHC/Unit/Home/PackageTable.hs ===================================== @@ -81,11 +81,13 @@ module GHC.Unit.Home.PackageTable -- -- | These provide access to the internals of the HomePackageTable to -- facilitate existing workflows that used the previous API. For instance, - -- if you were listing out all elements, you can keep doing so by reading - -- the internal IO ref and then listing the moduleenv contents out. + -- if you were listing out all elements or merging, you can keep doing so by reading + -- the internal IO ref and then using the moduleenv contents directly. -- - -- In GHC itself these should be avoided. + -- In GHC itself these should be avoided, and other uses should justify why + -- it is not sufficient to go through the intended insert-only API. , hptInternalTableRef + , hptInternalTableFromRef -- * Legacy API -- @@ -117,6 +119,7 @@ import GHC.Unit.Module.ModDetails import GHC.Unit.Module.ModIface import GHC.Utils.Outputable import GHC.Builtin.Names (gHC_PRIM) +import GHC.Utils.Misc (lastMaybe) -- | Helps us find information about modules in the home package data HomePackageTable = HPT { @@ -210,6 +213,12 @@ addHomeModInfoToHpt hmi hpt = addToHpt hpt (moduleName (mi_module (hm_iface hmi) -- After deprecation cycle, move `addToHpt` to a `where` clause inside `addHomeModInfoToHpt`. addToHpt :: HomePackageTable -> ModuleName -> HomeModInfo -> IO HomePackageTable addToHpt HPT{table=hptr, hasHoles} mn hmi = do + -- ROMES:TODO: We could assert that we only overwrite with SrcFile infos: + -- Something like: + -- addToUDFM_C $ combineModules a b + -- x | HsSrcFile <- mi_hsc_src (hm_iface a) = a + -- x | otherwise = error "tried to overwrite with something other than SrcFile?" + atomicModifyIORef' hptr (\hpt -> (addToUDFM hpt mn hmi, ())) -- If the key already existed in the map, this insertion is overwriting -- the HMI of a previously loaded module (likely in rehydration). @@ -478,3 +487,15 @@ concatHpt f HPT{table} = do -- Use with care. hptInternalTableRef :: HomePackageTable -> IORef (DModuleNameEnv HomeModInfo) hptInternalTableRef = table + +-- | Construct a HomePackageTable from the IORef. +-- Use with care, only if you can really justify going around the intended insert-only API. +hptInternalTableFromRef :: IORef (DModuleNameEnv HomeModInfo) -> IO HomePackageTable +hptInternalTableFromRef ref = do + table {- use this to compute the other fields -} <- readIORef ref + return HPT { + table = ref, + hasHoles = any (isHoleModule . mi_semantic_module . hm_iface) table, -- going to be removed altogether soon + lastLoadedKey = lastMaybe (map fst $ udfmToList table) -- this probably as well... + } + ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -47,6 +47,8 @@ Cmm ``ghc`` library ~~~~~~~~~~~~~~~ +Changes to the HPT and HUG interface: + - `addToHpt` and `addListToHPT` were moved from `GHC.Unit.Home.ModInfo` to `GHC.Unit.Home.PackageTable` and deprecated in favour of `addHomeModInfoToHpt` and `addHomeModInfosToHpt`. - `UnitEnvGraph` and operations `unitEnv_lookup_maybe`, `unitEnv_foldWithKey, `unitEnv_singleton`, `unitEnv_adjust`, `unitEnv_insert`, `unitEnv_new` were moved from `GHC.Unit.Env` to `GHC.Unit.Home.Graph`. - The HomePackageTable (HPT) is now exported from `GHC.Unit.Home.PackageTable`, @@ -56,6 +58,8 @@ Cmm - `mkHomeUnitEnv` was moved to `GHC.Unit.Home.PackageTable`, and now takes two extra explicit arguments. To restore previous behaviour, pass `emptyUnitState` and `Nothing` as the first two arguments additionally. +- `hugElts` was removed in favour of using `allUnits` to get all units in the + HUG (the typical use case), or `traverse` or `unitEnv_foldWithKey` in other cases. ``ghc-heap`` library ~~~~~~~~~~~~~~~~~~~~ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/d6a62da7b6e358994515813c1c4a817491003476 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/d6a62da7b6e358994515813c1c4a817491003476 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 18:12:14 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 13 Dec 2024 13:12:14 -0500 Subject: [Git][ghc/ghc][wip/ghc-9.12-release] 4 commits: hadrian-multi: warn on unused imports Message-ID: <675c78fe399d_20e232bcd18577cd@gitlab.mail> Zubin pushed to branch wip/ghc-9.12-release at Glasgow Haskell Compiler / GHC Commits: dde3796b by Zubin Duggal at 2024-12-13T23:41:56+05:30 hadrian-multi: warn on unused imports os-string has redundant imports - - - - - 52b58a66 by Zubin Duggal at 2024-12-13T23:41:56+05:30 ghcup metadata: output metadata fragment in CI - - - - - 39e4fed1 by Zubin Duggal at 2024-12-13T23:41:56+05:30 rel-eng: ghcup metadata generation: generated yaml anchors with meaningful names (cherry picked from commit d83f5bd730a8aef37d8a38b3560590d9798f8e45) (cherry picked from commit 280b627869da55a22b4b9a3458e6115b06b5fff4) - - - - - 6cb5e233 by Zubin Duggal at 2024-12-13T23:41:56+05:30 RELEASE=YES - - - - - 3 changed files: - .gitlab-ci.yml - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - configure.ac Changes: ===================================== .gitlab-ci.yml ===================================== @@ -435,7 +435,7 @@ hadrian-multi: # workaround for docker permissions - sudo chown ghc:ghc -R . variables: - GHC_FLAGS: "-Werror -Wwarn=deprecations" + GHC_FLAGS: "-Werror -Wwarn=deprecations -Wwarn=unused-imports" CONFIGURE_ARGS: --enable-bootstrap-with-devel-snapshot tags: - x86_64-linux @@ -1220,6 +1220,7 @@ ghcup-metadata-release: # No explicit needs for release pipeline as we assume we need everything and everything will pass. extends: .ghcup-metadata script: + - nix shell --extra-experimental-features nix-command -f .gitlab/rel_eng -c ghcup-metadata --release-mode --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" --fragment - nix shell --extra-experimental-features nix-command -f .gitlab/rel_eng -c ghcup-metadata --release-mode --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" > "metadata_test.yaml" rules: - if: '$RELEASE_JOB == "yes"' ===================================== .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py ===================================== @@ -67,6 +67,7 @@ class Artifact(NamedTuple): download_name: str output_name: str subdir: str + anchor_name: str # Platform spec provides a specification which is agnostic to Job # PlatformSpecs are converted into Artifacts by looking in the jobs-metadata.json file. @@ -77,11 +78,13 @@ class PlatformSpec(NamedTuple): source_artifact = Artifact('source-tarball' , 'ghc-{version}-src.tar.xz' , 'ghc-{version}-src.tar.xz' - , 'ghc-{version}' ) + , 'ghc-{version}' + , 'ghc{version}-src') test_artifact = Artifact('source-tarball' , 'ghc-{version}-testsuite.tar.xz' , 'ghc-{version}-testsuite.tar.xz' - , 'ghc-{version}/testsuite' ) + , 'ghc-{version}/testsuite' + , 'ghc{version}-testsuite') def debian(n, arch='x86_64'): return linux_platform(arch, "{arch}-linux-deb{n}".format(arch=arch, n=n)) @@ -132,6 +135,8 @@ def download_and_hash(url): hash_cache[url] = digest return digest +uri_to_anchor_cache=dict() + # Make the metadata for one platform. def mk_one_metadata(release_mode, version, job_map, artifact): job_id = job_map[artifact.job_name].id @@ -169,6 +174,9 @@ def mk_one_metadata(release_mode, version, job_map, artifact): res["dlOutput"] = output eprint(res) + + # add the uri to the anchor name cache so we can lookup an anchor for this uri + uri_to_anchor_cache[final_url] = artifact.anchor_name return res # Turns a platform into an Artifact respecting pipeline_type @@ -179,7 +187,8 @@ def mk_from_platform(pipeline_type, platform): return Artifact(info['name'] , f"{info['jobInfo']['bindistName']}.tar.xz" , "ghc-{version}-{pn}.tar.xz".format(version="{version}", pn=platform.name) - , platform.subdir) + , platform.subdir + , f"ghc{{version}}-{platform.name}") # Generate the new metadata for a specific GHC mode etc @@ -297,6 +306,19 @@ def setNightlyTags(ghcup_metadata): ghcup_metadata['ghcupDownloads']['GHC'][version]["viTags"].append("Nightly") +def mk_dumper(version): + class CustomAliasDumper(yaml.Dumper): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def generate_anchor(self, node): + if isinstance(node, yaml.MappingNode): + node_dict = { k.value : v.value for (k,v) in node.value } + if 'dlUri' in node_dict: + return uri_to_anchor_cache[node_dict['dlUri']].format(version=version.replace('.','')) + return super().generate_anchor(node) + + return CustomAliasDumper def main() -> None: @@ -332,7 +354,7 @@ def main() -> None: new_yaml = mk_new_yaml(args.release_mode, args.version, args.date, pipeline_type, job_map) if args.fragment: - print(yaml.dump({ args.version : new_yaml })) + print(yaml.dump({ args.version : new_yaml }, Dumper=mk_dumper(args.version))) else: with open(args.metadata, 'r') as file: ===================================== configure.ac ===================================== @@ -13,7 +13,7 @@ dnl # see what flags are available. (Better yet, read the documentation!) # -AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) +AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.1], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) # Version on master must be X.Y (not X.Y.Z) for ProjectVersionMunged variable # to be useful (cf #19058). However, the version must have three components # (X.Y.Z) on stable branches (e.g. ghc-9.2) to ensure that pre-releases are @@ -22,7 +22,7 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-ha AC_CONFIG_MACRO_DIRS([m4]) # Set this to YES for a released version, otherwise NO -: ${RELEASE=NO} +: ${RELEASE=YES} # The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line # above. If this is not a released version, then we will append the View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/32f7a9ab6c1a52e34e705c8d99deda6068980b5f...6cb5e233c48f5b26b7081c207067b7ef92bcc72b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/32f7a9ab6c1a52e34e705c8d99deda6068980b5f...6cb5e233c48f5b26b7081c207067b7ef92bcc72b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 18:58:28 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 13 Dec 2024 13:58:28 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/test-lint Message-ID: <675c83d497ef4_23badabce084361e@gitlab.mail> Ben Gamari pushed new branch wip/test-lint at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/test-lint You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 19:28:50 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Fri, 13 Dec 2024 14:28:50 -0500 Subject: [Git][ghc/ghc][wip/T25493] Tidy up the handling of `assert` Message-ID: <675c8af28462c_854cc11ee0051513@gitlab.mail> Simon Peyton Jones pushed to branch wip/T25493 at Glasgow Haskell Compiler / GHC Commits: d9e1e62d by Simon Peyton Jones at 2024-12-13T19:24:06+00:00 Tidy up the handling of `assert` Fixes #25493 - - - - - 3 changed files: - compiler/GHC/Tc/Gen/Head.hs - libraries/ghc-internal/src/GHC/Internal/Base.hs - libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs Changes: ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -805,32 +805,22 @@ tcCheckId name res_ty tcInferId :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) -- Look up an occurrence of an Id -- Do not instantiate its type -tcInferId lname@(L _ id_name) +tcInferId lname@(L loc id_name) + | id_name `hasKey` assertIdKey - = do { dflags <- getDynFlags + = -- See Note [Overview of assertions] + do { dflags <- getDynFlags ; if gopt Opt_IgnoreAsserts dflags then tc_infer_id lname - else tc_infer_assert lname } + else tc_infer_id (L loc assertErrorName) } | otherwise - = do { (expr, ty) <- tc_infer_id lname - ; traceTc "tcInferId" (ppr id_name <+> dcolon <+> ppr ty) - ; return (expr, ty) } - -tc_infer_assert :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) --- Deal with an occurrence of 'assert' --- See Note [Adding the implicit parameter to 'assert'] -tc_infer_assert (L loc assert_name) - = do { assert_error_id <- tcLookupId assertErrorName - ; (wrap, id_rho) <- topInstantiate (OccurrenceOf assert_name) - (idType assert_error_id) - ; return (mkHsWrap wrap (HsVar noExtField (L loc assert_error_id)), id_rho) - } + = tc_infer_id lname tc_infer_id :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) tc_infer_id (L loc id_name) = do { thing <- tcLookup id_name - ; case thing of + ; (expr,ty) <- case thing of ATcId { tct_id = id } -> do { check_local_id id ; return_id id } @@ -845,12 +835,45 @@ tc_infer_id (L loc id_name) (tcTyThingTyCon_maybe -> Just tc) -> failIllegalTyCon WL_Anything (tyConName tc) ATyVar name _ -> failIllegalTyVal name - _ -> failWithTc $ TcRnExpectedValueId thing } + _ -> failWithTc $ TcRnExpectedValueId thing + + ; traceTc "tcInferId" (ppr id_name <+> dcolon <+> ppr ty) + ; return (expr, ty) } where return_id id = return (HsVar noExtField (L loc id), idType id) -{- Note [Suppress hints with RequiredTypeArguments] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +{- Note [Overview of assertions] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you write (assert pred x) then + + * If `-fignore-asserts` (which sets Opt_IgnoreAsserts) is on, the code is + typechecked as written, but `assert`, defined in GHC.Internal.Base + assert _pred r = r + simply ignores `pred` + + * But without `-fignore-asserts`, GHC rewrites it to (assertError pred e) + and that is defined in GHC.Internal.IO.Exception as + assertError :: (?callStack :: CallStack) => Bool -> a -> a + which does test the predicate and, if it is not True, throws an exception, + capturing the CallStack. + + This rewrite is done in `tcInferId`. + +So `-fignore-asserts` makes the assertion go away altogether, which may be good for +production code. + +The reason that `assert` and `assertError` are defined in very different modules +is a historical accident. + +Note: the Haddock for `assert` is on `GHC.Internal.Base.assert`, since that is +what appears in the user's source proram. + +It's not entirely kosher to rewrite `assert` to `assertError`, because there's no +way to "undo" if you want to see the original source code in the typechecker +output. We can fix this if it becomes a problem. + +Note [Suppress hints with RequiredTypeArguments] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When a type variable is used at the term level, GHC assumes the user might have made a typo and suggests a term variable with a similar name. @@ -948,16 +971,8 @@ tcInferPatSyn ps nonBidirectionalErr :: Name -> TcRnMessage nonBidirectionalErr = TcRnPatSynNotBidirectional -{- Note [Adding the implicit parameter to 'assert'] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The typechecker transforms (assert e1 e2) to (assertError e1 e2). -This isn't really the Right Thing because there's no way to "undo" -if you want to see the original source code in the typechecker -output. We'll have fix this in due course, when we care more about -being able to reconstruct the exact original program. - -Note [Typechecking data constructors] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +{- Note [Typechecking data constructors] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ As per Note [Polymorphisation of linear fields] in GHC.Core.Multiplicity, linear fields of data constructors get a polymorphic multiplicity when the data constructor is used as a term: ===================================== libraries/ghc-internal/src/GHC/Internal/Base.hs ===================================== @@ -2107,6 +2107,9 @@ id x = x -- Assertion function. This simply ignores its boolean argument. -- The compiler may rewrite it to @('assertError' line)@. +-- The Haddock below is attached to `assert`, since that is +-- what occurs in source programs. +-- See Note [Overview of assertions] in GHC.Tc.Gen.Head -- | If the first argument evaluates to 'True', then the result is the -- second argument. Otherwise an 'Control.Exception.AssertionFailed' exception @@ -2115,14 +2118,9 @@ id x = x -- -- Assertions can normally be turned on or off with a compiler flag -- (for GHC, assertions are normally on unless optimisation is turned on --- with @-O@ or the @-fignore-asserts@ --- option is given). When assertions are turned off, the first --- argument to 'assert' is ignored, and the second argument is --- returned as the result. - --- SLPJ: in 5.04 etc 'assert' is in GHC.Prim, --- but from Template Haskell onwards it's simply --- defined here in Base.hs +-- with @-O@ or the @-fignore-asserts@ option is given). When assertions +-- are turned off, the first argument to 'assert' is ignored, and the second +-- argument is returned as the result. assert :: Bool -> a -> a assert _pred r = r ===================================== libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs ===================================== @@ -438,6 +438,7 @@ instance Show IOException where _ -> showString " (" . showString s . showString ")") assertError :: (?callStack :: CallStack) => Bool -> a -> a +-- See Note [Overview of assertions] in GHC.Tc.Gen.Head assertError predicate v | predicate = v | otherwise = lazy $ unsafeDupablePerformIO $ do -- lazy: See Note [Strictness of assertError] View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/d9e1e62d29067b2243b60c4a17807c1b9bd694a4 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/d9e1e62d29067b2243b60c4a17807c1b9bd694a4 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 13 21:30:19 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 13 Dec 2024 16:30:19 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25580 Message-ID: <675ca76ba36c5_35e0f09824c038364@gitlab.mail> Ben Gamari pushed new branch wip/T25580 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25580 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 14 00:32:24 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Fri, 13 Dec 2024 19:32:24 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/romes/25513 Message-ID: <675cd21894d33_1406adf2f828992ac@gitlab.mail> Rodrigo Mesquita pushed new branch wip/romes/25513 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/romes/25513 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 14 00:33:35 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Fri, 13 Dec 2024 19:33:35 -0500 Subject: [Git][ghc/ghc][wip/romes/25513] base: displayException for SomeAsyncException Message-ID: <675cd25ef0928_1406addef88c1035b1@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/25513 at Glasgow Haskell Compiler / GHC Commits: 62149da4 by Rodrigo Mesquita at 2024-12-14T00:33:10+00:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 2 changed files: - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs Changes: ===================================== libraries/base/changelog.md ===================================== @@ -1,6 +1,8 @@ # Changelog for [`base` package](http://hackage.haskell.org/package/base) ## 4.22.0.0 *TBA* + * Define `displayException` of `SomeAsyncException` to unwrap the exception. + ([CLC proposal #309](https://github.com/haskell/core-libraries-committee/issues/309)) * Restrict `Data.List.NonEmpty.unzip` to `NonEmpty (a, b) -> (NonEmpty a, NonEmpty b)`. ([CLC proposal #86](https://github.com/haskell/core-libraries-committee/issues/86)) * Modify the implementation of `Control.Exception.throw` to avoid call-sites being inferred as diverging via precise exception. ([GHC #25066](https://gitlab.haskell.org/ghc/ghc/-/issues/25066), [CLC proposal #290](https://github.com/haskell/core-libraries-committee/issues/290)) ===================================== libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs ===================================== @@ -187,7 +187,8 @@ instance Show SomeAsyncException where showsPrec p (SomeAsyncException e) = showsPrec p e -- | @since base-4.7.0.0 -instance Exception SomeAsyncException +instance Exception SomeAsyncException where + displayException (SomeExceptionException e) = displayException e -- | @since base-4.7.0.0 asyncExceptionToException :: Exception e => e -> SomeException View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/62149da403d4ec7c1fb0765cfb0447e9f2fb0d25 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/62149da403d4ec7c1fb0765cfb0447e9f2fb0d25 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 14 01:20:57 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Fri, 13 Dec 2024 20:20:57 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 5 commits: Update GHCi :info type declaration printing (#24459) Message-ID: <675cdd78f38e8_1406ad15773d4117833@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 9c53489d by Andrei Borzenkov at 2024-12-12T15:06:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 13fe48d4 by Matthew Pickering at 2024-12-12T15:07:19-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - b51d841f by Sylvain Henry at 2024-12-13T20:20:49-05:00 TNTC: set CmmProc entry_label properly (#25565) Before this patch we were renaming the entry label of a CmmProc late in the CmmToAsm pass. It led to inconsistencies and to some labels being used in info tables but not being emitted (#25565). Now we set the CmmProc entry label earlier in the StgToCmm monad and we don't renamed it afterwards. - - - - - d3089a2c by Simon Hengel at 2024-12-13T20:20:51-05:00 Make filter functionality for system tools line-based This is more efficient as: - All existing filter functions were line-based anyway. They broke up the input into lines and then joined it back together. - We already break up the output from system tools into lines when processing it. Splitting up the output of system tools once and then filtering and processing it reduces both code and runtime complexity. - - - - - 3c8fd6c7 by Simon Hengel at 2024-12-13T20:20:51-05:00 Refactoring: Don't use a `Chan` when parsing SysTools output - - - - - 30 changed files: - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/Driver/Config/Linker.hs - compiler/GHC/Iface/Syntax.hs - compiler/GHC/Iface/Type.hs - compiler/GHC/Linker/Config.hs - compiler/GHC/StgToCmm/Monad.hs - compiler/GHC/SysTools/Process.hs - compiler/GHC/SysTools/Tasks.hs - compiler/GHC/Tc/Instance/Family.hs - compiler/GHC/Tc/Module.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/ghci.rst - testsuite/tests/backpack/should_fail/T19244a.stderr - testsuite/tests/backpack/should_fail/T19244b.stderr - testsuite/tests/backpack/should_fail/bkpfail46.stderr - testsuite/tests/ghci/T18060/T18060.stdout - testsuite/tests/ghci/scripts/ListTuplePunsPpr.stdout - testsuite/tests/ghci/scripts/T15941.stdout - testsuite/tests/ghci/scripts/T19310.stdout - testsuite/tests/ghci/scripts/T21294a.stdout - + testsuite/tests/ghci/scripts/T24459.script - + testsuite/tests/ghci/scripts/T24459.stdout - testsuite/tests/ghci/scripts/T8535.stdout - testsuite/tests/ghci/scripts/T9181.stdout - testsuite/tests/ghci/scripts/all.T - testsuite/tests/ghci/scripts/ghci020.stdout - testsuite/tests/ghci/should_run/T10145.stdout - testsuite/tests/ghci/should_run/T18594.stdout - testsuite/tests/interface-stability/base-exports.stdout The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/7698a505889cd590af93a18956188e339e3199c5...3c8fd6c74eb22e29f4f5397bf4deec1b6cded99f -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/7698a505889cd590af93a18956188e339e3199c5...3c8fd6c74eb22e29f4f5397bf4deec1b6cded99f You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 14 01:29:21 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 13 Dec 2024 20:29:21 -0500 Subject: [Git][ghc/ghc][wip/rts-warnings] 6291 commits: [haddock @ 2002-04-04 16:23:43 by simonmar] Message-ID: <675cdf71907fd_cd469becd0490bd@gitlab.mail> Ben Gamari pushed to branch wip/rts-warnings at Glasgow Haskell Compiler / GHC Commits: 2b39cd94 by Simon Marlow at 2002-04-04T16:23:43+00:00 [haddock @ 2002-04-04 16:23:43 by simonmar] This is Haddock, my stab at a Haskell documentation tool. It's not quite ready for release yet, but I'm putting it in the repository so others can take a look. It uses a locally modified version of the hssource parser, extended with support for GHC extensions and documentation annotations. - - - - - 99ede94f by Simon Marlow at 2002-04-04T16:24:10+00:00 [haddock @ 2002-04-04 16:24:10 by simonmar] forgot one file - - - - - 8363294c by Simon Marlow at 2002-04-05T13:58:15+00:00 [haddock @ 2002-04-05 13:58:15 by simonmar] Remap names in the exported declarations to be "closer" to the current module. eg. if an exported declaration mentions a type 'T' which is imported from module A then re-exported from the current module, then links from the type or indeed the documentation will point to the current module rather than module A. This is to support better hiding: module A won't be referred to in the generated output. - - - - - 1570cbc1 by Simon Marlow at 2002-04-05T13:58:23+00:00 [haddock @ 2002-04-05 13:58:23 by simonmar] update the TODO list - - - - - 3a62f96b by Simon Marlow at 2002-04-05T14:11:51+00:00 [haddock @ 2002-04-05 14:11:51 by simonmar] Fix the anchor for a class declaration - - - - - c5d9a471 by Simon Marlow at 2002-04-05T14:18:41+00:00 [haddock @ 2002-04-05 14:18:41 by simonmar] remove underlines on visited links - - - - - 97280525 by Simon Marlow at 2002-04-05T16:11:47+00:00 [haddock @ 2002-04-05 16:11:47 by simonmar] - Update to generate more correct HTML. - Use our own non-overloaded table combinators, as the overloaded versions were giving me a headache. The improved type safety caught several errors in the HTML generation. - - - - - 9acd3a4d by Simon Marlow at 2002-04-05T16:32:19+00:00 [haddock @ 2002-04-05 16:32:19 by simonmar] Add width property to the title, and add TD.children for the module contents page. - - - - - ec9a0847 by Simon Marlow at 2002-04-08T16:39:56+00:00 [haddock @ 2002-04-08 16:39:56 by simonmar] Fix a problem with exports of the form T(..). - - - - - e4627dc8 by Simon Marlow at 2002-04-08T16:41:38+00:00 [haddock @ 2002-04-08 16:41:37 by simonmar] - Add our own versions of Html & BlockTable for the time being. - Add support for generating an index to the HTML backend - - - - - 2d73fd75 by Simon Marlow at 2002-04-09T11:23:24+00:00 [haddock @ 2002-04-09 11:23:24 by simonmar] Add '-- /' as a synonym for '-- |', for compatibility with IDoc. - - - - - 3675464e by Simon Marlow at 2002-04-09T11:33:55+00:00 [haddock @ 2002-04-09 11:33:54 by simonmar] - add the <...> syntax for marking up URLs in documentation - Make the output for data & class declarations more compact when there aren't any documentation annotations on the individual methods or constructors respectively. - - - - - 5077f5b1 by Simon Marlow at 2002-04-09T11:36:04+00:00 [haddock @ 2002-04-09 11:36:04 by simonmar] Update the TODO list - - - - - 9e83c54d by Simon Marlow at 2002-04-10T10:50:06+00:00 [haddock @ 2002-04-10 10:50:06 by simonmar] Use explicit 'px' suffix on pixel sizes; IE seems to prefer them - - - - - 052de51c by Simon Marlow at 2002-04-10T13:23:13+00:00 [haddock @ 2002-04-10 13:23:13 by simonmar] Lex URLs as a single token to avoid having to escape special characters inside the URL string. - - - - - 47187edb by Simon Marlow at 2002-04-10T13:23:55+00:00 [haddock @ 2002-04-10 13:23:55 by simonmar] Not sure why I made the constructor name for a record declaration into a TyCls name, but change it back into a Var name anyhow. - - - - - 3dc6aa81 by Simon Marlow at 2002-04-10T13:26:10+00:00 [haddock @ 2002-04-10 13:26:09 by simonmar] Lots of changes, including: - add index support to the HTML backend - clean up the renamer, put it into a monad - propogate unresolved names to the top level and report them in a nicer way - various bugfixes - - - - - c2a70a72 by Simon Marlow at 2002-04-10T13:32:39+00:00 [haddock @ 2002-04-10 13:32:39 by simonmar] Skeleton documentation - - - - - 50c98d17 by Simon Marlow at 2002-04-10T13:37:23+00:00 [haddock @ 2002-04-10 13:37:23 by simonmar] Update the TODO list, separate into pre-1.0 and post-1.0 items - - - - - f3778be6 by Simon Marlow at 2002-04-10T14:30:58+00:00 [haddock @ 2002-04-10 14:30:58 by simonmar] Add an introduction - - - - - cfbaf9f7 by Simon Marlow at 2002-04-10T14:59:51+00:00 [haddock @ 2002-04-10 14:59:51 by simonmar] Sort the module tree - - - - - 76bd7b34 by Simon Marlow at 2002-04-10T15:50:11+00:00 [haddock @ 2002-04-10 15:50:10 by simonmar] Generate a little table of contents at the top of the module doc (only if the module actually contains some section headings, though). - - - - - bb8560a1 by Simon Marlow at 2002-04-10T16:10:26+00:00 [haddock @ 2002-04-10 16:10:26 by simonmar] Now we understand (or at least don't barf on) type signatures in patterns such as you might find when scoped type variables are in use. - - - - - 86c2a026 by Simon Marlow at 2002-04-10T16:10:49+00:00 [haddock @ 2002-04-10 16:10:49 by simonmar] more updates - - - - - 1c052b0e by Simon Marlow at 2002-04-10T16:28:05+00:00 [haddock @ 2002-04-10 16:28:05 by simonmar] Parse errors in doc strings are now reported as warnings rather that causing the whole thing to fall over. It still needs cleaning up (the warning is emitted with trace) but this will do for the time being. - - - - - ace03e8f by Simon Marlow at 2002-04-10T16:38:03+00:00 [haddock @ 2002-04-10 16:38:03 by simonmar] update again - - - - - 69006c3e by Simon Marlow at 2002-04-11T13:38:02+00:00 [haddock @ 2002-04-11 13:38:02 by simonmar] mention Opera - - - - - fe9b10f8 by Simon Marlow at 2002-04-11T13:40:31+00:00 [haddock @ 2002-04-11 13:40:30 by simonmar] - copy haddock.css into the same place as the generated HTML - new option: --css <file> specifies the style sheet to use - new option: -o <dir> specifies the directory in which to generate the output. - because Haddock now needs to know where to find its default stylesheet, we have to have a wrapper script and do the haddock-inplace thing (Makefile code copied largely from fptools/happy). - - - - - 106adbbe by Simon Marlow at 2002-04-24T15:12:41+00:00 [haddock @ 2002-04-24 15:12:41 by simonmar] Stop slurping comment lines when we see a row of dashes longer than length 2: these are useful as separators. - - - - - 995d3f9e by Simon Marlow at 2002-04-24T15:14:12+00:00 [haddock @ 2002-04-24 15:14:11 by simonmar] Grok the kind of module headers we use in fptools/libraries, and pass the "portability", "stability", and "maintainer" strings through into the generated HTML. If the module header doesn't match the pattern, then we don't include the info in the HTML. - - - - - e14da136 by Simon Marlow at 2002-04-24T15:16:57+00:00 [haddock @ 2002-04-24 15:16:57 by simonmar] Done module headers now. - - - - - 2ca8dfd4 by Simon Marlow at 2002-04-24T15:57:48+00:00 [haddock @ 2002-04-24 15:57:47 by simonmar] Handle gcons in export lists (a common extension). - - - - - 044cea81 by Simon Marlow at 2002-04-25T14:20:12+00:00 [haddock @ 2002-04-25 14:20:12 by simonmar] Add the little lambda icon - - - - - 63955027 by Simon Marlow at 2002-04-25T14:40:05+00:00 [haddock @ 2002-04-25 14:40:05 by simonmar] - Add support for named chunks of documentation which can be referenced from the export list. - Copy the icon from $libdir to the destination in HTML mode. - - - - - 36e3f913 by Simon Marlow at 2002-04-25T16:48:36+00:00 [haddock @ 2002-04-25 16:48:36 by simonmar] More keyboard bashing - - - - - 7ae18dd0 by Simon Marlow at 2002-04-26T08:43:33+00:00 [haddock @ 2002-04-26 08:43:33 by simonmar] Package util reqd. to compile with 4.08.2 - - - - - bbd5fbab by Simon Marlow at 2002-04-26T10:13:00+00:00 [haddock @ 2002-04-26 10:13:00 by simonmar] Include $(GHC_HAPPY_OPTS) when compiling HsParser - - - - - 31c53d79 by Simon Marlow at 2002-04-26T11:18:57+00:00 [haddock @ 2002-04-26 11:18:56 by simonmar] - support for fundeps (partially contributed by Brett Letner - thanks Brett). - make it build with GHC 4.08.2 - - - - - c415ce76 by Simon Marlow at 2002-04-26T13:15:02+00:00 [haddock @ 2002-04-26 13:15:02 by simonmar] Move the explicit formatting of the little table for the stability/portability/maintainer info from the HTML into the CSS, and remove the explicit table size (just right-align it). - - - - - 520ee21a by Simon Marlow at 2002-04-26T16:01:44+00:00 [haddock @ 2002-04-26 16:01:44 by simonmar] Yet more keyboard bashing - this is pretty much complete now. - - - - - 2ae37179 by Simon Marlow at 2002-04-26T16:02:14+00:00 [haddock @ 2002-04-26 16:02:14 by simonmar] Add a couple of things I forgot about - - - - - b7211e04 by Simon Marlow at 2002-04-29T15:28:12+00:00 [haddock @ 2002-04-29 15:28:12 by simonmar] bugfix for declBinders on a NewTypeDecl - - - - - 640c154a by Simon Marlow at 2002-04-29T15:28:54+00:00 [haddock @ 2002-04-29 15:28:54 by simonmar] Allow '-- |' style annotations on constructors and record fields. - - - - - 393f258a by Simon Marlow at 2002-04-29T15:37:32+00:00 [haddock @ 2002-04-29 15:37:32 by simonmar] syntax fix - - - - - 8a2c2549 by Simon Marlow at 2002-04-29T15:37:48+00:00 [haddock @ 2002-04-29 15:37:48 by simonmar] Add an example - - - - - db88f8a2 by Simon Marlow at 2002-04-29T15:55:46+00:00 [haddock @ 2002-04-29 15:55:46 by simonmar] remove a trace - - - - - 2b0248e0 by Simon Marlow at 2002-04-29T15:56:19+00:00 [haddock @ 2002-04-29 15:56:19 by simonmar] Fix for 'make install' - - - - - 120453a0 by Simon Marlow at 2002-04-29T15:56:39+00:00 [haddock @ 2002-04-29 15:56:39 by simonmar] Install the auxilliary bits - - - - - 950e6dbb by Simon Marlow at 2002-04-29T15:57:30+00:00 [haddock @ 2002-04-29 15:57:30 by simonmar] Add BinDist bits - - - - - 154b9d71 by Simon Marlow at 2002-05-01T11:02:52+00:00 [haddock @ 2002-05-01 11:02:52 by simonmar] update - - - - - ba6c39fa by Simon Marlow at 2002-05-01T11:03:26+00:00 [haddock @ 2002-05-01 11:03:26 by simonmar] Add another item - - - - - bacb5e33 by Simon Marlow at 2002-05-03T08:50:00+00:00 [haddock @ 2002-05-03 08:50:00 by simonmar] Fix some typos. - - - - - 54c87895 by Sven Panne at 2002-05-05T19:40:51+00:00 [haddock @ 2002-05-05 19:40:51 by panne] As a temporary hack/workaround for a bug in GHC's simplifier, don't pass Happy the -c option for generating the parsers in this subdir. Furthermore, disable -O for HaddocParse, too. - - - - - e6c08703 by Simon Marlow at 2002-05-06T09:51:10+00:00 [haddock @ 2002-05-06 09:51:10 by simonmar] Add RPM spec file (thanks to Tom Moertel <tom-rpms at moertel.com>) - - - - - 7b8fa8e7 by Simon Marlow at 2002-05-06T12:29:26+00:00 [haddock @ 2002-05-06 12:29:26 by simonmar] Add missing type signature (a different workaround for the bug in GHC's simplifier). - - - - - cd0e300d by Simon Marlow at 2002-05-06T12:30:09+00:00 [haddock @ 2002-05-06 12:30:09 by simonmar] Remove workaround for simplifier bug in previous revision. - - - - - 687e68fa by Simon Marlow at 2002-05-06T12:32:32+00:00 [haddock @ 2002-05-06 12:32:32 by simonmar] Allow empty data declarations (another GHC extension). - - - - - 8f29f696 by Simon Marlow at 2002-05-06T12:49:21+00:00 [haddock @ 2002-05-06 12:49:21 by simonmar] Fix silly bug in named documentation block lookup. - - - - - 8e0059af by Simon Marlow at 2002-05-06T13:02:42+00:00 [haddock @ 2002-05-06 13:02:42 by simonmar] Add another named chunk with a different name - - - - - 68f8a896 by Simon Marlow at 2002-05-06T13:32:32+00:00 [haddock @ 2002-05-06 13:32:32 by simonmar] Be more lenient about extra paragraph breaks - - - - - 65fc31db by Simon Marlow at 2002-05-07T15:36:36+00:00 [haddock @ 2002-05-07 15:36:36 by simonmar] DocEmpty is a right and left-unit of DocAppend (remove it in the smart constructor). - - - - - adc81078 by Simon Marlow at 2002-05-07T15:37:15+00:00 [haddock @ 2002-05-07 15:37:15 by simonmar] Allow code blocks to be denoted with bird-tracks in addition to [...]. - - - - - 1283a3c1 by Simon Marlow at 2002-05-08T11:21:56+00:00 [haddock @ 2002-05-08 11:21:56 by simonmar] Add a facility for specifying options that affect Haddock's treatment of the module. Options are given at the top of the module in a comma-separated list, beginning with '-- #'. eg. -- # prune, hide, ignore-exports Options currently available, with their meanings: prune: ignore declarations which have no documentation annotations ignore-exports: act as if the export list were not specified (i.e. export everything local to the module). hide: do not include this module in the generated documentation, but propagate any exported definitions to modules which re-export them. There's a slight change in the semantics for re-exporting a full module by giving 'module M' in the export list: if module M does not have the 'hide' option, then the documentation will now just contain a reference to module M rather than the full inlined contents of that module. These features, and some other changes in the pipeline, are the result of discussions between myself and Manuel Chakravarty <chak at cse.unsw.edu.au> (author of IDoc) yesterday. Also: some cleanups, use a Writer monad to collect error messages in some places instead of just printing them with trace. - - - - - a2239cf5 by Simon Marlow at 2002-05-08T11:22:30+00:00 [haddock @ 2002-05-08 11:22:30 by simonmar] Update to test new features. - - - - - 6add955f by Simon Marlow at 2002-05-08T13:37:25+00:00 [haddock @ 2002-05-08 13:37:25 by simonmar] Change the markup for typewriter-font from [...] to @... at . The reasoning is that the '@' symbol is much less likely to be needed than square brackets, and we don't want to have to escape square brackets in code fragments. This will be mildly painful in the short term, but it's better to get the change out of the way as early as possible. - - - - - cda06447 by Simon Marlow at 2002-05-08T13:39:56+00:00 [haddock @ 2002-05-08 13:39:56 by simonmar] Allow nested-style comments to be used as documentation annotations too. eg. {-| ... -} is equivalent to -- | ... An extra space can also be left after the comment opener: {- | ... -}. The only version that isn't allowed is {-# ... -}, because this syntax overlaps with Haskell pragmas; use {- # ... -} instead. - - - - - db23f65e by Simon Marlow at 2002-05-08T14:48:41+00:00 [haddock @ 2002-05-08 14:48:39 by simonmar] Add support for existential quantifiers on constructors. - - - - - adce3794 by Simon Marlow at 2002-05-08T15:43:25+00:00 [haddock @ 2002-05-08 15:43:25 by simonmar] update - - - - - 62a1f436 by Simon Marlow at 2002-05-08T15:44:10+00:00 [haddock @ 2002-05-08 15:44:10 by simonmar] Update to version 0.2 - - - - - f6a24ba3 by Simon Marlow at 2002-05-09T08:48:29+00:00 [haddock @ 2002-05-09 08:48:29 by simonmar] typo - - - - - 9f9522a4 by Simon Marlow at 2002-05-09T10:33:14+00:00 [haddock @ 2002-05-09 10:33:14 by simonmar] oops, left out '/' from the special characters in the last change. - - - - - 14abcb39 by Simon Marlow at 2002-05-09T10:34:44+00:00 [haddock @ 2002-05-09 10:34:44 by simonmar] Fix buglet - - - - - b8d878be by Simon Marlow at 2002-05-09T10:35:00+00:00 [haddock @ 2002-05-09 10:35:00 by simonmar] Give a more useful instance of Show for Module. - - - - - f7bfd626 by Simon Marlow at 2002-05-09T10:37:07+00:00 [haddock @ 2002-05-09 10:37:07 by simonmar] The last commit to Main.lhs broke the delicate balance of laziness which was being used to avoid computing the dependency graph of modules. So I finally bit the bullet and did a proper topological sort of the module graph, which turned out to be easy (stealing the Digraph module from GHC - this really ought to be in the libraries somewhere). - - - - - b481c1d0 by Simon Marlow at 2002-05-09T10:37:25+00:00 [haddock @ 2002-05-09 10:37:25 by simonmar] another item done - - - - - 032e2b42 by Simon Marlow at 2002-05-09T10:44:15+00:00 [haddock @ 2002-05-09 10:44:15 by simonmar] Don't consider a module re-export as having documentation, for the purposes of deciding whether we need a Synopsis section or not. - - - - - 5fb45e92 by Simon Marlow at 2002-05-09T11:10:55+00:00 [haddock @ 2002-05-09 11:10:55 by simonmar] Add a special case for list types in ppHsAType - - - - - 1937e428 by Simon Marlow at 2002-05-09T12:43:06+00:00 [haddock @ 2002-05-09 12:43:06 by simonmar] Type synonyms can accept a ctype on the RHS, to match GHC. - - - - - 0f16ce56 by Simon Marlow at 2002-05-09T12:45:19+00:00 [haddock @ 2002-05-09 12:45:19 by simonmar] Add 'stdcall' keyword - - - - - 29b0d7d2 by Simon Marlow at 2002-05-09T13:35:45+00:00 [haddock @ 2002-05-09 13:35:45 by simonmar] Add System Requirements section - - - - - bf14dddd by Simon Marlow at 2002-05-09T13:36:11+00:00 [haddock @ 2002-05-09 13:36:11 by simonmar] Test existential types, amongst other things - - - - - 502f8f6f by Simon Marlow at 2002-05-09T13:37:35+00:00 [haddock @ 2002-05-09 13:37:35 by simonmar] Print the module name in a doc-string parse error - - - - - ca1f8d49 by Simon Marlow at 2002-05-09T13:38:04+00:00 [haddock @ 2002-05-09 13:38:04 by simonmar] Add dependency - - - - - 8d3d91ff by Simon Marlow at 2002-05-09T15:37:57+00:00 [haddock @ 2002-05-09 15:37:57 by simonmar] Add the changelog/release notes - - - - - f3960959 by Simon Marlow at 2002-05-09T15:47:47+00:00 [haddock @ 2002-05-09 15:47:47 by simonmar] mention the backquote-style of markup - - - - - 089fb6e6 by Simon Marlow at 2002-05-09T15:59:45+00:00 [haddock @ 2002-05-09 15:59:45 by simonmar] update - - - - - bdd3be0b by Simon Marlow at 2002-05-09T15:59:56+00:00 [haddock @ 2002-05-09 15:59:56 by simonmar] Document changes since 0.1 - - - - - 00fc4af8 by Simon Marlow at 2002-05-10T08:22:48+00:00 [haddock @ 2002-05-10 08:22:48 by simonmar] oops, update to version 0.2 - - - - - a8a79041 by Simon Marlow at 2002-05-10T16:05:08+00:00 [haddock @ 2002-05-10 16:05:08 by simonmar] Only include a mini-contents if there are 2 or more sections - - - - - 06653319 by Simon Marlow at 2002-05-13T09:13:12+00:00 [haddock @ 2002-05-13 09:13:12 by simonmar] fix typos - - - - - 1402b19b by Simon Marlow at 2002-05-13T10:14:22+00:00 [haddock @ 2002-05-13 10:14:22 by simonmar] Allow backquote as the right-hand quote as well as the left-hand quote, as suggested by Dean Herrington. Clean up the grammar a litte. - - - - - dcd5320d by Simon Marlow at 2002-05-13T10:44:10+00:00 [haddock @ 2002-05-13 10:44:10 by simonmar] a couple more things, prioritise a bit - - - - - a90130c4 by Simon Marlow at 2002-05-13T15:19:03+00:00 [haddock @ 2002-05-13 15:19:03 by simonmar] Cope with datatypes which have documentation on the constructor but not the type itself, and records which have documentation on the fields but not the constructor. (Thanks to Ross Paterson for pointing out the bugs). - - - - - a774d432 by Simon Marlow at 2002-05-13T15:20:54+00:00 [haddock @ 2002-05-13 15:20:54 by simonmar] Fix one of the record examples - - - - - 2d1d5218 by Simon Marlow at 2002-05-15T12:44:35+00:00 [haddock @ 2002-05-15 12:44:35 by simonmar] Preserve the newline before a bird-track, but only within a paragraph. - - - - - 1554c09a by Simon Marlow at 2002-05-15T13:03:02+00:00 [haddock @ 2002-05-15 13:03:01 by simonmar] Reworking of the internals to support documenting function arguments (the Most Wanted new feature by the punters). The old method of keeping parsed documentation in a Name -> Doc mapping wasn't going to cut it for anntations on type components, where there's no name to attach the documentation to, so I've moved to storing all the documentation in the abstract syntax. Previously some of the documentation was left in the abstract syntax by the parser, but was later extracted into the mapping. In order to avoid having to parameterise the abstract syntax over the type of documentation stored in it, we have to parse the documentation at the same time as we parse the Haskell source (well, I suppose we could store 'Either String Doc' in the HsSyn, but that's clunky). One upshot is that documentation is now parsed eagerly, and documentation parse errors are fatal (but have better line numbers in the error message). The new story simplifies matters for the code that processes the source modules, because we don't have to maintain the extra Name->Doc mapping, and it should improve efficiency a little too. New features: - Function arguments and return values can now have doc annotations. - If you refer to a qualified name in a doc string, eg. 'IO.putStr', then Haddock will emit a hyperlink even if the identifier is not in scope, so you don't have to make sure everything referred to from the documentation is imported. - several bugs & minor infelicities fixed. - - - - - 57344dc3 by Simon Marlow at 2002-05-15T13:03:19+00:00 [haddock @ 2002-05-15 13:03:19 by simonmar] Bump to version 0.3 - - - - - b2791812 by Simon Marlow at 2002-05-15T13:03:41+00:00 [haddock @ 2002-05-15 13:03:41 by simonmar] update - - - - - fead183e by Simon Marlow at 2002-05-15T13:10:15+00:00 [haddock @ 2002-05-15 13:10:15 by simonmar] Rename Foo.hs to Test.hs, and add a Makefile - - - - - b0b1f89f by Simon Marlow at 2002-05-15T13:16:07+00:00 [haddock @ 2002-05-15 13:16:07 by simonmar] - Remove the note about function argument docs not being implemented - Note that qualified identifiers can be used to point to entities that aren't in scope. - - - - - 5665f31a by Simon Marlow at 2002-05-15T13:28:46+00:00 [haddock @ 2002-05-15 13:28:46 by simonmar] Patch to add support for GHC-style primitive strings ".."#, from Ross Paterson. - - - - - 0564505d by Simon Marlow at 2002-05-17T10:51:57+00:00 [haddock @ 2002-05-17 10:51:57 by simonmar] Fix bugs in qualified name handling (A.B.f was returned as B.f) - - - - - 10e7311c by Simon Marlow at 2002-05-21T10:24:52+00:00 [haddock @ 2002-05-21 10:24:52 by simonmar] - Use an alternate tabular layout for datatypes, which is more compact - Fix some problems with the function argument documentation - - - - - 2f91c2a6 by Simon Marlow at 2002-05-21T10:27:40+00:00 [haddock @ 2002-05-21 10:27:40 by simonmar] add a few more test cases - - - - - 01c2ddd2 by Simon Marlow at 2002-05-21T10:28:33+00:00 [haddock @ 2002-05-21 10:28:33 by simonmar] Rearrange a bit, and add support for tabular datatype rendering - - - - - a4e4c5f8 by Simon Marlow at 2002-05-27T09:03:52+00:00 [haddock @ 2002-05-27 09:03:51 by simonmar] Lots of changes: - instances of a class are listed with the class, and instances involving a datatype are listed with that type. Derived instances aren't included at the moment: the calculation to find the instance head for a derived instance is non-trivial. - some formatting changes; use rows with specified height rather than cellspacing in some places. - various fixes (source file links were wrong, amongst others) - - - - - 48722e68 by Simon Marlow at 2002-05-27T12:30:38+00:00 [haddock @ 2002-05-27 12:30:37 by simonmar] - Put function arguments *before* the doc for the function, as suggested by Sven Panne. This looks nicer when the function documentation is long. - Switch to using bold for binders at the definition site, and use underline for keywords. This makes the binder stand out more. - - - - - 657204d2 by Simon Marlow at 2002-05-27T13:19:49+00:00 [haddock @ 2002-05-27 13:19:49 by simonmar] Fix bug: we weren't renaming HsDocCommentNamed in renameDecl - - - - - 592aae66 by Simon Marlow at 2002-05-27T14:10:27+00:00 [haddock @ 2002-05-27 14:10:27 by simonmar] Fix some bugs in the rendering of qualified type signatures. - - - - - 69c8f763 by Simon Marlow at 2002-05-27T14:36:45+00:00 [haddock @ 2002-05-27 14:36:45 by simonmar] warning message tweak - - - - - 16e64e21 by Simon Marlow at 2002-05-27T14:53:53+00:00 [haddock @ 2002-05-27 14:53:53 by simonmar] hyperlinked identifiers should be in <tt> - - - - - 8d5e4783 by Simon Marlow at 2002-05-27T15:56:45+00:00 [haddock @ 2002-05-27 15:56:45 by simonmar] Do something sensible for modules which don't export anything (except instances). - - - - - 9d3ef811 by Simon Marlow at 2002-05-28T10:12:50+00:00 [haddock @ 2002-05-28 10:12:50 by simonmar] Rename the module documentation properly (bug reported by Sven Panne). - - - - - ef03a1cc by Simon Marlow at 2002-05-28T10:13:04+00:00 [haddock @ 2002-05-28 10:13:04 by simonmar] Add some more test cases - - - - - 92baa0e8 by Simon Marlow at 2002-05-28T11:17:55+00:00 [haddock @ 2002-05-28 11:17:55 by simonmar] If an identifier doesn't lex, then just replace it by a DocString. - - - - - a3156213 by Simon Marlow at 2002-05-28T16:16:19+00:00 [haddock @ 2002-05-28 16:16:19 by simonmar] Only link to names in the current module which are actually listed in the documentation. A name may be exported but not present in the documentation if it is exported as part of a 'module M' export specifier. - - - - - 31acf941 by Simon Marlow at 2002-05-28T16:17:11+00:00 [haddock @ 2002-05-28 16:17:11 by simonmar] update - - - - - 7e474ebf by Sigbjorn Finne at 2002-05-28T22:42:08+00:00 [haddock @ 2002-05-28 22:42:08 by sof] Handle lone occurrences of '/', e.g., -- | This/that. [did this in the lexer rather than in the parser, as I couldn't see a way not to introduce an S/R conflict that way.] - - - - - 093f7e53 by Simon Marlow at 2002-05-29T09:09:49+00:00 [haddock @ 2002-05-29 09:09:49 by simonmar] Back out previous change until we can find a better way to do this. - - - - - 9234389c by Simon Marlow at 2002-05-29T13:19:06+00:00 [haddock @ 2002-05-29 13:19:06 by simonmar] Make the markup syntax a little more friendly: - single quotes are now interpreted literally unless they surround a valid Haskell identifier. So for example now there's no need to escape a single quote used as an apostrophe. - text to the right of a bird track is now literal (if you want marked-up text in a code block, use @...@). - - - - - b3333526 by Simon Marlow at 2002-05-29T13:38:51+00:00 [haddock @ 2002-05-29 13:38:51 by simonmar] Document recent changes to markup syntax - - - - - f93641d6 by Simon Marlow at 2002-05-29T15:27:18+00:00 [haddock @ 2002-05-29 15:27:18 by simonmar] Include the instances in abstract data types too - - - - - 613f21e3 by Simon Marlow at 2002-06-03T13:05:58+00:00 [haddock @ 2002-06-03 13:05:57 by simonmar] Allow exporting of individual class methods and record selectors. For these we have to invent the correct type signature, which we do in the simplest possible way (i.e. no context reduction nonsense in the class case). - - - - - 14b36807 by Simon Marlow at 2002-06-03T13:20:00+00:00 [haddock @ 2002-06-03 13:20:00 by simonmar] Fix linking to qualified names again (thanks to Sven Panne for pointing out the bug). - - - - - 95b10eac by Simon Marlow at 2002-06-03T13:46:48+00:00 [haddock @ 2002-06-03 13:46:48 by simonmar] Fix for exporting record selectors from a newtype declaration - - - - - 272f932e by Simon Marlow at 2002-06-03T13:56:38+00:00 [haddock @ 2002-06-03 13:56:38 by simonmar] update to version 0.3 - - - - - 1c0a3bed by Simon Marlow at 2002-06-03T14:05:07+00:00 [haddock @ 2002-06-03 14:05:07 by simonmar] Add changes in version 0.3 - - - - - 145b4626 by Simon Marlow at 2002-06-03T14:12:38+00:00 [haddock @ 2002-06-03 14:12:38 by simonmar] Render class names as proper binders - - - - - 052106b3 by Simon Marlow at 2002-06-03T14:15:10+00:00 [haddock @ 2002-06-03 14:15:10 by simonmar] update, and separate into bugs, features, and cosmetic items. - - - - - 854f4914 by Simon Marlow at 2002-06-03T14:16:13+00:00 [haddock @ 2002-06-03 14:16:13 by simonmar] More test cases - - - - - 466922c8 by Simon Marlow at 2002-06-03T14:16:56+00:00 [haddock @ 2002-06-03 14:16:56 by simonmar] Example from the paper - - - - - 9962a045 by Simon Marlow at 2002-06-03T14:17:49+00:00 [haddock @ 2002-06-03 14:17:49 by simonmar] A debugging version of the style-sheet, which gives some tables coloured backgrounds so we can see what's going on. - - - - - f16b79db by Simon Marlow at 2002-06-03T14:19:46+00:00 [haddock @ 2002-06-03 14:19:46 by simonmar] typo - - - - - 620db27b by Simon Marlow at 2002-06-03T14:48:32+00:00 [haddock @ 2002-06-03 14:48:32 by simonmar] oops, fix markup bugs - - - - - 53fd105c by Simon Marlow at 2002-06-05T09:05:07+00:00 [haddock @ 2002-06-05 09:05:07 by simonmar] Keep foreign imports when there is no export list (bug reported by Sven Panne). - - - - - 6d98989c by Simon Marlow at 2002-06-05T09:12:02+00:00 [haddock @ 2002-06-05 09:12:02 by simonmar] Identifiers in single quotes can be symbol names too (bug reported by Hal Daume). - - - - - 001811e5 by Sven Panne at 2002-06-08T14:03:36+00:00 [haddock @ 2002-06-08 14:03:36 by panne] Tiny workaround for the fact that Haddock currently ignores HsImportSpecs: Let the local_orig_env take precedence. This is no real solution at all, but improves things sometimes, e.g. in my GLUT documentation. :-) - - - - - 504d19c9 by Simon Marlow at 2002-06-11T09:23:25+00:00 [haddock @ 2002-06-11 09:23:25 by simonmar] portability nit - - - - - e13b5af4 by Simon Marlow at 2002-06-20T12:38:07+00:00 [haddock @ 2002-06-20 12:38:07 by simonmar] Empty declaration fixes. - - - - - f467a9b6 by Simon Marlow at 2002-06-20T12:39:02+00:00 [haddock @ 2002-06-20 12:39:01 by simonmar] Add support for a "prologue" - a description for the whole library, placed on the contents page before the module list. - - - - - b8dbfe20 by Simon Marlow at 2002-06-21T12:43:06+00:00 [haddock @ 2002-06-21 12:43:06 by simonmar] When we have a single code block paragraph, don't place it in <pre>..</pre>, just use <tt>..</tt> to avoid generating extra vertical white space in some browsers. - - - - - 4831dbbd by Simon Marlow at 2002-06-21T15:50:42+00:00 [haddock @ 2002-06-21 15:50:42 by simonmar] Add support for reading and writing interface files(!) This turned out to be quite easy, and necessary to get decent hyperlinks between the documentation for separate packages in the libraries. The functionality isn't quite complete yet: for a given package of modules, you'd like to say "the HTML for these modules lives in directory <dir>" (currently they are assumed to be all in the same place). Two new flags: --dump-interface=FILE dump an interface file in FILE --read-interface=FILE read interface from FILE an interface file describes *all* the modules being processed. Only the exported names are kept in the interface: if you re-export a name from a module in another interface the signature won't be copied. This is a compromise to keep the size of the interfaces sensible. Also, I added another useful option: --no-implicit-prelude avoids trying to import the Prelude. Previously this was the default, but now importing the Prelude from elsewhere makes sense if you also read in an interface containing the Prelude module, so Haddock imports the Prelude implicitly according to the Haskell spec. - - - - - d3640a19 by Sven Panne at 2002-06-23T14:54:00+00:00 [haddock @ 2002-06-23 14:54:00 by panne] Make it compile with newer GHCs - - - - - 780c506b by Sven Panne at 2002-06-23T15:44:31+00:00 [haddock @ 2002-06-23 15:44:31 by panne] Cleaned up build root handling and added more docs - - - - - 45290d2e by Simon Marlow at 2002-06-24T14:37:43+00:00 [haddock @ 2002-06-24 14:37:42 by simonmar] When reading an interface, allow a file path offset to be specified which represents the path to the HTML files for the modules specified by that interface. The path may be either relative (to the location of the HTML for this package), or absolute. The syntax is --read-interface=PATH,FILE where PATH is the path to the HTML, and FILE is the filename containing the interface. - - - - - 4e2b9ae6 by Simon Marlow at 2002-07-03T16:01:08+00:00 [haddock @ 2002-07-03 16:01:07 by simonmar] Handle import specs properly, include 'hiding'. Haddock now has a complete implementation of the Haskell module system (more or less; I won't claim it's 100% correct). - - - - - 9a9aa1a8 by Simon Marlow at 2002-07-03T16:18:16+00:00 [haddock @ 2002-07-03 16:18:16 by simonmar] Update - - - - - 560c3026 by Simon Marlow at 2002-07-04T14:56:10+00:00 [haddock @ 2002-07-04 14:56:10 by simonmar] Clean up the code that constructs the exported declarations, and fix a couple of bugs along the way. Now if you import a class hiding one of the methods, then re-export the class, the version in the documentation will correctly have the appropriate method removed. - - - - - 2c26e77d by Simon Marlow at 2002-07-04T15:26:13+00:00 [haddock @ 2002-07-04 15:26:13 by simonmar] More bugfixes to the export handling - - - - - 03e0710d by Simon Marlow at 2002-07-09T10:12:10+00:00 [haddock @ 2002-07-09 10:12:10 by simonmar] Don't require that the list type comes from "Prelude" for it to be treated as special syntax (sometimes it comes from Data.List or maybe even GHC.Base). - - - - - 44f3891a by Simon Marlow at 2002-07-09T10:12:51+00:00 [haddock @ 2002-07-09 10:12:51 by simonmar] commented-out debugging code - - - - - 97280873 by Krasimir Angelov at 2002-07-09T16:33:33+00:00 [haddock @ 2002-07-09 16:33:31 by krasimir] 'Microsoft HTML Help' support - - - - - 3dc04655 by Simon Marlow at 2002-07-10T09:40:56+00:00 [haddock @ 2002-07-10 09:40:56 by simonmar] Fix for rendering of the (->) type constructor, from Ross Paterson. - - - - - c9f149c6 by Simon Marlow at 2002-07-10T10:26:11+00:00 [haddock @ 2002-07-10 10:26:11 by simonmar] Tweaks to the MS Help support: the extra files are now only generated if you ask for them (--ms-help). - - - - - e8acc1e6 by Simon Marlow at 2002-07-10T10:57:10+00:00 [haddock @ 2002-07-10 10:57:10 by simonmar] Document all the new options since 0.3 - - - - - 8bb85544 by Simon Marlow at 2002-07-10T10:58:31+00:00 [haddock @ 2002-07-10 10:58:31 by simonmar] Sort the options a bit - - - - - abc0dd59 by Simon Marlow at 2002-07-15T09:19:38+00:00 [haddock @ 2002-07-15 09:19:38 by simonmar] Fix a bug in mkExportItems when processing a module without an explicit export list. We were placing one copy of a declaration for each binder in the declaration, which for a data type would mean one copy of the whole declaration per constructor or record selector. - - - - - dde65bb9 by Simon Marlow at 2002-07-15T09:54:16+00:00 [haddock @ 2002-07-15 09:54:16 by simonmar] merge rev. 1.35 - - - - - bd7eb8c4 by Simon Marlow at 2002-07-15T10:14:31+00:00 [haddock @ 2002-07-15 10:14:30 by simonmar] Be a bit more liberal in the kind of commenting styles we allow, as suggested by Malcolm Wallace. Mostly this consists of allowing doc comments either side of a separator token. In an export list, a section heading is now allowed before the comma, as well as after it. eg. module M where ( T(..) -- * a section heading , f -- * another section heading , g ) In record fields, doc comments are allowed anywhere (previously a doc-next was allowed only after the comma, and a doc-before was allowed only before the comma). eg. data R = C { -- | describes 'f' f :: Int -- | describes 'g' , g :: Int } - - - - - 8f6dfe34 by Simon Marlow at 2002-07-15T10:21:56+00:00 [haddock @ 2002-07-15 10:21:56 by simonmar] Mention alternative commenting styles. - - - - - fc515bb7 by Simon Marlow at 2002-07-15T16:16:50+00:00 [haddock @ 2002-07-15 16:16:50 by simonmar] Allow multiple sections/subsections before and after a comma in the export list. Also at the same time I made the syntax a little stricter (multiple commas now aren't allowed between export specs). - - - - - 80a97e74 by Simon Marlow at 2002-07-19T09:13:10+00:00 [haddock @ 2002-07-19 09:13:10 by simonmar] Allow special id's ([], (), etc.) to be used in an import declaration. - - - - - a69d7378 by Simon Marlow at 2002-07-19T09:59:02+00:00 [haddock @ 2002-07-19 09:59:02 by simonmar] Allow special id's ([], (), etc.) to be used in an import declarations. - - - - - d205fa60 by Simon Marlow at 2002-07-19T10:00:16+00:00 [haddock @ 2002-07-19 10:00:16 by simonmar] Relax the restrictions which require doc comments to be followed by semi colons - in some cases this isn't necessary. Now you can write module M where { -- | some doc class C where {} } without needing to put a semicolon before the class declaration. - - - - - e9301e14 by Simon Marlow at 2002-07-23T08:24:09+00:00 [haddock @ 2002-07-23 08:24:09 by simonmar] A new TODO list item - - - - - e5d77586 by Simon Marlow at 2002-07-23T08:40:56+00:00 [haddock @ 2002-07-23 08:40:56 by simonmar] - update the acknowledgements - remove the paragraph that described how to use explicit layout with doc comments; it isn't relevant any more. - - - - - 78a94137 by Simon Marlow at 2002-07-23T08:43:02+00:00 [haddock @ 2002-07-23 08:43:02 by simonmar] more tests - - - - - 5c320927 by Simon Marlow at 2002-07-23T08:43:26+00:00 [haddock @ 2002-07-23 08:43:26 by simonmar] Updates for version 0.4 - - - - - 488e99ae by Simon Marlow at 2002-07-23T09:10:46+00:00 [haddock @ 2002-07-23 09:10:46 by simonmar] Fix the %changelog (rpm complained that it wasn't in the right order) - - - - - a77bb373 by Simon Marlow at 2002-07-23T09:12:38+00:00 [haddock @ 2002-07-23 09:12:38 by simonmar] Another item for the TODO list - - - - - f1ec1813 by Simon Marlow at 2002-07-23T10:18:46+00:00 [haddock @ 2002-07-23 10:18:46 by simonmar] Add a version banner when invoked with -v - - - - - 1d44cadf by Simon Marlow at 2002-07-24T09:28:19+00:00 [haddock @ 2002-07-24 09:28:19 by simonmar] Remove ^Ms - - - - - 4d8d5e94 by Simon Marlow at 2002-07-24T09:42:18+00:00 [haddock @ 2002-07-24 09:42:17 by simonmar] Patches to quieten ghc -Wall, from those nice folks at Galois. - - - - - d6edc43e by Simon Marlow at 2002-07-25T14:37:29+00:00 [haddock @ 2002-07-25 14:37:28 by simonmar] Patch to allow simple hyperlinking to an arbitrary location in another module's documentation, from Volker Stolz. Now in a doc comment: #foo# creates <a name="foo"></a> And you can use the form "M\#foo" to hyperlink to the label 'foo' in module 'M'. Note that the backslash is necessary for now. - - - - - b34d18fa by Simon Marlow at 2002-08-02T09:08:22+00:00 [haddock @ 2002-08-02 09:08:22 by simonmar] The <TT> and <PRE> environments seem to use a font that is a little too small in IE. Compensate. (suggestion from Daan Leijen). - - - - - 8106b086 by Simon Marlow at 2002-08-02T09:25:23+00:00 [haddock @ 2002-08-02 09:25:20 by simonmar] Remove <P>..</P> from around list items, to reduce excess whitespace between the items of bulleted and ordered lists. (Suggestion from Daan Leijen). - - - - - c1acff8f by Simon Marlow at 2002-08-05T09:03:49+00:00 [haddock @ 2002-08-05 09:03:49 by simonmar] update - - - - - f968661c by Simon Marlow at 2002-11-11T09:32:57+00:00 [haddock @ 2002-11-11 09:32:57 by simonmar] Fix cut-n-pasto - - - - - 12d02619 by Simon Marlow at 2002-11-13T09:49:46+00:00 [haddock @ 2002-11-13 09:49:46 by simonmar] Small bugfix in the --read-interface option parsing from Brett Letner. - - - - - 30e32d5e by Ross Paterson at 2003-01-16T15:07:57+00:00 [haddock @ 2003-01-16 15:07:57 by ross] Adjust for the new exception libraries (as well as the old ones). - - - - - 871f65df by Sven Panne at 2003-02-20T21:31:40+00:00 [haddock @ 2003-02-20 21:31:40 by panne] * Add varsyms and consyms to index * Exclude empty entries from index - - - - - bc42cc87 by Sven Panne at 2003-02-24T21:26:29+00:00 [haddock @ 2003-02-24 21:26:29 by panne] Don't convert a "newtype" to a single-constructor "data" for non-abstractly exported types, they are quite different regarding strictness/pattern matching. Now a "data" without any constructors is only emitted for an abstractly exported type, regardless if it is actually a "newtype" or a "data". - - - - - 0c2a1d99 by Sven Panne at 2003-03-08T19:02:38+00:00 [haddock @ 2003-03-08 19:02:38 by panne] Fixed some broken/redirected/canonicalized links found by a very picky link checker. - - - - - 25459269 by Sven Panne at 2003-03-09T21:13:43+00:00 [haddock @ 2003-03-09 21:13:43 by panne] Don't append a fragment to non-defining index entries, only documents with a defining occurrence have a name anchor. - - - - - 6be4db86 by Sven Panne at 2003-03-10T21:34:25+00:00 [haddock @ 2003-03-10 21:34:24 by panne] Escape fragments. This fixes e.g. links to operators. - - - - - eb12972c by Ross Paterson at 2003-04-25T10:50:06+00:00 [haddock @ 2003-04-25 10:50:05 by ross] An 80% solution to generating derived instances. A complete solution would duplicate the instance inference logic, but if a type variable occurs as a constructor argument, then we can just propagate the derived class to the variable. But we know nothing of the constraints on any type variables that occur elsewhere. For example, the declarations data Either a b = Left a | Right b deriving (Eq, Ord) data Ptr a = Ptr Addr# deriving (Eq, Ord) newtype IORef a = IORef (STRef RealWorld a) deriving Eq yield the instances (Eq a, Eq b) => Eq (Either a b) (Ord a, Ord b) => Ord (Either a b) Eq (Ptr a) Ord (Ptr a) (??? a) => Eq (IORef a) The last example shows the limits of this local analysis. Note that a type variable may be in both categories: then we know a constraint, but there may be more, or a stronger constraint, e.g. data Tree a = Node a [Tree a] deriving Eq yields (Eq a, ??? a) => Eq (Tree a) - - - - - de886f78 by Simon Marlow at 2003-04-25T11:17:55+00:00 [haddock @ 2003-04-25 11:17:55 by simonmar] Some updates, including moving the derived instance item down to the bottom of the list now that Ross has contributed some code that does the job for common cases. - - - - - 1b52cffd by Simon Marlow at 2003-04-30T14:02:32+00:00 [haddock @ 2003-04-30 14:02:32 by simonmar] When installing on Windows, run cygpath over $(HADDOCKLIB) so that haddock (a mingw program, built by GHC) can understand it. You still need to be in a cygwin environment to run Haddock, because of the shell script wrapper. - - - - - d4f638de by Simon Marlow at 2003-05-06T10:04:47+00:00 [haddock @ 2003-05-06 10:04:47 by simonmar] Catch another case of a paragraph containing just a DocMonospaced that should turn into a DocCodeBlock. - - - - - 4162b2b9 by Simon Marlow at 2003-05-06T10:11:44+00:00 [haddock @ 2003-05-06 10:11:44 by simonmar] Add some more code-block tests. - - - - - 4f5802c8 by Simon Marlow at 2003-05-06T10:14:52+00:00 [haddock @ 2003-05-06 10:14:52 by simonmar] Don't turn a single DocCodeBlock into a DocMonospaced, because that tends to remove the line breaks in the code. - - - - - ef8c45f7 by Simon Marlow at 2003-05-21T15:07:21+00:00 [haddock @ 2003-05-21 15:07:21 by simonmar] Only omit the module contents when there are no section headings at all. - - - - - bcee1e75 by Sigbjorn Finne at 2003-05-30T16:50:45+00:00 [haddock @ 2003-05-30 16:50:45 by sof] cygpath: for now, steer clear of --mixed - - - - - 30567af3 by Sigbjorn Finne at 2003-05-30T17:59:28+00:00 [haddock @ 2003-05-30 17:59:28 by sof] oops, drop test defn from prev commit - - - - - b0856e7d by Simon Marlow at 2003-06-03T09:55:26+00:00 [haddock @ 2003-06-03 09:55:26 by simonmar] Two small fixes to make the output valid HTML 4.01 (transitional). Thanks to Malcolm Wallace for pointing out the problems. - - - - - 70e137ea by Simon Marlow at 2003-07-28T13:30:35+00:00 [haddock @ 2003-07-28 13:30:35 by simonmar] Add tests for a couple of bugs. - - - - - 122bd578 by Simon Marlow at 2003-07-28T13:31:25+00:00 [haddock @ 2003-07-28 13:31:25 by simonmar] Add documentation for anchors. - - - - - 0bd27cb2 by Simon Marlow at 2003-07-28T13:31:46+00:00 [haddock @ 2003-07-28 13:31:46 by simonmar] Update - - - - - 08052d42 by Simon Marlow at 2003-07-28T13:32:12+00:00 [haddock @ 2003-07-28 13:32:12 by simonmar] layout tweak. - - - - - 13942749 by Simon Marlow at 2003-07-28T13:33:03+00:00 [haddock @ 2003-07-28 13:33:03 by simonmar] Differentiate links to types/classes from links to variables/constructors with a prefix ("t:" and "v:" respectively). - - - - - d7f493b9 by Simon Marlow at 2003-07-28T13:35:17+00:00 [haddock @ 2003-07-28 13:35:16 by simonmar] When a module A exports another module's contents via 'module B', then modules which import entities from B re-exported by A should link to B.foo rather than A.foo. See examples/Bug2.hs. - - - - - d94cf705 by Simon Marlow at 2003-07-28T13:36:14+00:00 [haddock @ 2003-07-28 13:36:14 by simonmar] Update to version 0.5 - - - - - dbb776cd by Sven Panne at 2003-07-28T14:02:43+00:00 [haddock @ 2003-07-28 14:02:43 by panne] * Updated to version 0.5 * Automagically generate configure if it is not there - - - - - 6cfeee53 by Simon Marlow at 2003-07-28T14:32:43+00:00 [haddock @ 2003-07-28 14:32:42 by simonmar] Update to avoid using hslibs with GHC >= 5.04 - - - - - a1ce838f by Simon Marlow at 2003-07-28T14:33:37+00:00 [haddock @ 2003-07-28 14:33:37 by simonmar] Update for 0.5 - - - - - c0fe6493 by Simon Marlow at 2003-07-28T14:53:22+00:00 [haddock @ 2003-07-28 14:53:22 by simonmar] Markup fix - - - - - 6ea31596 by Sven Panne at 2003-07-28T16:40:45+00:00 [haddock @ 2003-07-28 16:40:45 by panne] Make it compile with GHC >= 6.01 - - - - - afcd30fc by Simon Marlow at 2003-07-30T15:04:52+00:00 [haddock @ 2003-07-30 15:04:52 by simonmar] Pay attention to import specs when building the the import env, as well as the orig env. This may fix some wrong links in documentation when import specs are being used. - - - - - 17c3137f by Simon Marlow at 2003-07-30T16:05:41+00:00 [haddock @ 2003-07-30 16:05:40 by simonmar] Rename instances based on the import_env for the module in which they are to be displayed. This should give, in many cases, better links for the types and classes mentioned in the instance head. This involves keeping around the import_env in the iface until the end, because instances are not collected up until all the modules have been processed. Fortunately it doesn't seem to affect performance much. Instance heads are now attached to ExportDecls, rather than the HTML backend passing around a separate mapping for instances. This is a cleanup. - - - - - 3d3b5c87 by Sven Panne at 2003-08-04T10:18:24+00:00 [haddock @ 2003-08-04 10:18:24 by panne] Don't print parentheses around one-element contexts - - - - - 9e3f3f2d by Simon Marlow at 2003-08-04T12:59:47+00:00 [haddock @ 2003-08-04 12:59:47 by simonmar] A couple of TODOs. - - - - - e9d8085c by Simon Marlow at 2003-08-05T14:10:31+00:00 [haddock @ 2003-08-05 14:10:31 by simonmar] I'm not sure why, but it seems that the index entries for non-defining occurrences of entities did not have an anchor - the link just pointed to the module. This fixes it. - - - - - ff5c7d6d by Simon Marlow at 2003-08-15T14:42:59+00:00 [haddock @ 2003-08-15 14:42:59 by simonmar] Convert the lexer to Alex, and fix a bug in the process. - - - - - 1aa077bf by Simon Marlow at 2003-08-15T15:00:18+00:00 [haddock @ 2003-08-15 15:00:18 by simonmar] Update - - - - - d3de1e38 by Simon Marlow at 2003-08-15T15:01:03+00:00 [haddock @ 2003-08-15 15:01:03 by simonmar] wibbles - - - - - b40ece3b by Simon Marlow at 2003-08-18T10:04:47+00:00 [haddock @ 2003-08-18 10:04:47 by simonmar] Lex the 'mdo' keyword as 'do'. - - - - - 8f9a1146 by Simon Marlow at 2003-08-18T11:48:24+00:00 [haddock @ 2003-08-18 11:48:24 by simonmar] Two bugs from Sven. - - - - - ea54ebc0 by Simon Marlow at 2003-08-18T11:48:46+00:00 [haddock @ 2003-08-18 11:48:46 by simonmar] Fixes to the new lexer. - - - - - d5f6a4b5 by Simon Marlow at 2003-08-19T09:09:03+00:00 [haddock @ 2003-08-19 09:09:03 by simonmar] Further wibbles to the syntax. - - - - - 6bbdadb7 by Sven Panne at 2003-08-26T18:45:35+00:00 [haddock @ 2003-08-26 18:45:35 by panne] Use autoreconf instead of autoconf - - - - - 32e889cb by Sven Panne at 2003-08-26T19:01:19+00:00 [haddock @ 2003-08-26 19:01:18 by panne] Made option handling a bit more consistent with other tools, in particular: Every program in fptools should output * version info on stdout and terminate successfully when -V or --version * usage info on stdout and terminate successfully when -? or --help * usage info on stderr and terminate unsuccessfully when an unknown option is given. - - - - - 5d156a91 by Sven Panne at 2003-08-26T19:20:55+00:00 [haddock @ 2003-08-26 19:20:55 by panne] Make it *very* clear that we terminate when given a -V/--version flag - - - - - e6577265 by Sven Panne at 2003-08-27T07:50:03+00:00 [haddock @ 2003-08-27 07:50:02 by panne] * Made -D a short option for --dump-interface. * Made -m a short option for --ms-help. * Made -n a short option for --no-implicit-prelude. * Made -c a short option for --css. * Removed DocBook options from executable (they didn't do anything), but mark them as reserved in the docs. Note that the short option for DocBook output is now -S (from SGML) instead of -d. The latter is now a short option for --debug. * The order of the Options in the documentation now matches the order printed by Haddock itself. Note: Although changing the names of options is often a bad idea, I'd really like to make the options for the programs in fptools more consistent and compatible to the ones used in common GNU programs. - - - - - d303ff98 by Simon Marlow at 2003-09-10T08:23:48+00:00 [haddock @ 2003-09-10 08:23:48 by simonmar] Add doc subdir. Patch contributed by: Ian Lynagh <igloo at earth.li>. - - - - - 9a70e46a by Simon Marlow at 2003-09-10T08:24:32+00:00 [haddock @ 2003-09-10 08:24:32 by simonmar] Install these files in $(datadir), not $(libdir), since they're architecture independent. Patch contributed by: Ian Lynagh <igloo at earth.li>. - - - - - bbb87e7a by Simon Marlow at 2003-09-10T08:25:31+00:00 [haddock @ 2003-09-10 08:25:31 by simonmar] Haddock's supplementary HTML bits now live in $(datadir), not $(libdir). Patch contributed by: Ian Lynagh <igloo at earth.li>. - - - - - 3587c24b by Simon Marlow at 2003-09-22T10:34:38+00:00 [haddock @ 2003-09-22 10:34:38 by simonmar] Allow installing of docs. - - - - - d510b517 by Sven Panne at 2003-10-11T08:10:44+00:00 [haddock @ 2003-10-11 08:10:44 by panne] Include architecture-independent files in file list - - - - - 187d7618 by Sigbjorn Finne at 2003-10-20T17:19:24+00:00 [haddock @ 2003-10-20 17:19:22 by sof] support for i-parameters + zip comprehensions - - - - - b6c7a273 by Simon Marlow at 2003-11-03T14:24:24+00:00 [haddock @ 2003-11-03 14:24:24 by simonmar] Update TODO file. - - - - - 58513e33 by Simon Marlow at 2003-11-05T11:22:04+00:00 [haddock @ 2003-11-05 11:22:04 by simonmar] Remove the last of the uses of 'trace' to emit warnings, and tidy up a couple of places where duplicate warnings were being emitted. - - - - - 33a78846 by Simon Marlow at 2003-11-05T11:30:53+00:00 [haddock @ 2003-11-05 11:30:52 by simonmar] - Suppress warnings about unknown imported modules by default. - Add a -v/--verbose flag to re-enable these warnings. The general idea is to suppress the "Warning: unknown module: Prelude" warnings which most Haddock users will see every time, and which aren't terribly useful. - - - - - a969de7f by Simon Marlow at 2003-11-05T12:30:28+00:00 [haddock @ 2003-11-05 12:30:28 by simonmar] - Remove the emboldening of index entries for defining locations. This isn't useful, and breaks abstractions. - If an entity is re-exported by a module but the module doesn't include documentation for that entity (perhaps because it is re-exported by 'module M'), then don't attempt to hyperlink to the documentation from the index. Instead, just list that module in the index, to indicate that the entity is exported from there. - - - - - f14ea82a by Simon Marlow at 2003-11-05T15:15:59+00:00 [haddock @ 2003-11-05 15:15:59 by simonmar] Index overhaul: - no more separate type/class and variable/function indices - the index now makes a distinction between different entities with the same name. One example is a type constructor with the same name as a data constructor, but another example is simply a function with the same name exported by two different modules. For example, the index entry for 'catch' now looks like this: catch 1 (Function) Control.Exception 2 (Function) GHC.Exception, Prelude, System.IO, System.IO.Error making it clear that there are two different 'catch'es, but one of them is exported by several modules. - Each index page now has the index contents (A B C ...) at the top. Please let me know if you really hate any of this. - - - - - 01a25ca6 by Simon Marlow at 2003-11-05T15:16:38+00:00 [haddock @ 2003-11-05 15:16:38 by simonmar] Update - - - - - 1a7ccb86 by Simon Marlow at 2003-11-05T17:16:05+00:00 [haddock @ 2003-11-05 17:16:04 by simonmar] Support for generating a single unified index for several packages. --use-index=URL turns off normal index generation, causes Index links to point to URL. --gen-index generates an combined index from the specified interfaces. Currently doesn't work exactly right, because the interfaces don't contain the iface_reexported info. I'll need to fix that up. - - - - - a2bca16d by Simon Marlow at 2003-11-06T10:44:52+00:00 [haddock @ 2003-11-06 10:44:52 by simonmar] Include iface_reexported in the .haddock file. This unfortunately bloats the file (40% for base). If this gets to be a problem we can always apply the dictionary trick that GHC uses for squashing .hi files. - - - - - 0a09c293 by Simon Marlow at 2003-11-06T12:39:47+00:00 [haddock @ 2003-11-06 12:39:46 by simonmar] - Add definition lists, marked up like this: -- | This is a definition list: -- -- [@foo@] The description of @foo at . -- -- [@bar@] The description of @bar at . Cunningly, the [] characters are not treated specially unless a [ is found at the beginning of a paragraph, in which case the ] becomes special in the following text. - Add --use-contents and --gen-contents, along the lines of --use-index and --gen-index added yesterday. Now we can generate a combined index and contents for the whole of the hierarchical libraries, and in theory the index/contents on the system could be updated as new packages are added. - - - - - fe1b3460 by Simon Marlow at 2003-11-06T14:47:36+00:00 [haddock @ 2003-11-06 14:47:36 by simonmar] Remove the 'Parent' button - it is of dubious use, and often points into thin air. - - - - - db6d762f by Simon Marlow at 2003-11-06T16:48:14+00:00 [haddock @ 2003-11-06 16:48:11 by simonmar] - Include the OptHide setting in the interface, so we don't include hidden modules in the combined index/contents. - Add a -k/--package flag to set the package name for the current set of modules. The package name for each module is now shown in the right-hand column of the contents, in a combined contents page. - - - - - 7d71718b by Simon Marlow at 2003-11-06T16:50:28+00:00 [haddock @ 2003-11-06 16:50:28 by simonmar] Add -k/--package docs - - - - - ef43949d by Simon Marlow at 2003-11-06T16:51:23+00:00 [haddock @ 2003-11-06 16:51:23 by simonmar] Bump to 0.6 - - - - - 1c419e06 by Simon Marlow at 2003-11-06T16:51:50+00:00 [haddock @ 2003-11-06 16:51:50 by simonmar] update - - - - - 69422327 by Simon Marlow at 2003-11-10T14:41:06+00:00 [haddock @ 2003-11-10 14:41:05 by simonmar] Re-exporting names from a different package is problematic, because we don't have access to the full documentation for the entity. Currently Haddock just ignores entities with no documentation, but this results in bogus-looking empty documentation for many of the modules in the haskell98 package. So: - the documentation will now just list the name, as a link pointing to the location of the actual documentation. - now we don't attempt to link to these re-exported entities if they are referred to by the current module. Additionally: - If there is no documentation in the current module, include just the Synopsis section (rather than just the documentation section, as it was before). This just looks nicer and was on the TODO list. - - - - - 3c3fc433 by Simon Marlow at 2003-11-10T14:51:59+00:00 [haddock @ 2003-11-10 14:51:59 by simonmar] Fix for getReExports: take into account names which are not visible because they are re-exported from a different package. - - - - - 31c8437b by Simon Marlow at 2003-11-10T15:10:53+00:00 [haddock @ 2003-11-10 15:10:53 by simonmar] Version 0.6 changes - - - - - a7c2430b by Simon Marlow at 2003-11-10T15:15:58+00:00 [haddock @ 2003-11-10 15:15:58 by simonmar] getReExports: one error case that isn't - - - - - 00cc459c by Simon Marlow at 2003-11-10T16:15:19+00:00 [haddock @ 2003-11-10 16:15:18 by simonmar] copyright update - - - - - ca62408d by Simon Marlow at 2003-11-11T09:57:25+00:00 [haddock @ 2003-11-11 09:57:25 by simonmar] Version 0.6 - - - - - 3acbf818 by Simon Marlow at 2003-11-11T12:10:44+00:00 [haddock @ 2003-11-11 12:10:44 by simonmar] Go back to producing just the documentation section, rather than just the synopsis section, for a module with no documentation annotations. One reason is that the synopsis section tries to link each entity to its documentation on the same page. Also, the doc section anchors each entity, and it lists instances which the synopsis doesn't. - - - - - 6c90abc2 by Simon Marlow at 2003-11-12T10:03:39+00:00 [haddock @ 2003-11-12 10:03:39 by simonmar] 2002 -> 2003 - - - - - 090bbc4c by Simon Marlow at 2003-11-28T12:08:00+00:00 [haddock @ 2003-11-28 12:08:00 by simonmar] update - - - - - 8096a832 by Simon Marlow at 2003-11-28T12:09:58+00:00 [haddock @ 2003-11-28 12:09:58 by simonmar] Fix some of the problems with Haddock generating pages that are too wide. Now we only specify 'nowrap' when it is necessary to avoid a code box getting squashed up by the text to the right of it. - - - - - 35294929 by Sven Panne at 2003-12-29T17:16:31+00:00 [haddock @ 2003-12-29 17:16:31 by panne] Updated my email address - - - - - cdb697bf by Simon Marlow at 2004-01-08T10:14:24+00:00 [haddock @ 2004-01-08 10:14:24 by simonmar] Add instructions for using GHC to pre-process source for feeding to Haddock. - - - - - 8dfc491f by Simon Marlow at 2004-01-09T12:45:46+00:00 [haddock @ 2004-01-09 12:45:46 by simonmar] Add -optP-P to example ghc command line. - - - - - ac41b820 by Simon Marlow at 2004-02-03T11:02:03+00:00 [haddock @ 2004-02-03 11:02:03 by simonmar] Fix bug in index generation - - - - - f4e7edcb by Simon Marlow at 2004-02-10T11:51:16+00:00 [haddock @ 2004-02-10 11:51:16 by simonmar] Don't throw away whitespace at the beginning of a line (experimental fix). - - - - - 68e212d2 by Simon Marlow at 2004-02-10T12:10:08+00:00 [haddock @ 2004-02-10 12:10:08 by simonmar] Fix for previous commit: I now realise why the whitespace was stripped from the beginning of the line. Work around it. - - - - - e7d7f2df by Sven Panne at 2004-02-10T18:38:45+00:00 [haddock @ 2004-02-10 18:38:45 by panne] Make Haddock link with the latest relocated monad transformer package - - - - - 992d4225 by Simon Marlow at 2004-02-16T10:21:35+00:00 [haddock @ 2004-02-16 10:21:35 by simonmar] Add a TODO - - - - - 1ac55326 by Simon Marlow at 2004-03-12T11:33:39+00:00 [haddock @ 2004-03-12 11:33:39 by simonmar] Add an item. - - - - - 0478e903 by Simon Marlow at 2004-03-15T12:24:05+00:00 [haddock @ 2004-03-15 12:24:05 by simonmar] Add an item. - - - - - 6f26d21a by Simon Marlow at 2004-03-18T14:21:29+00:00 [haddock @ 2004-03-18 14:21:29 by simonmar] Fix URL - - - - - 19b6bb99 by Simon Marlow at 2004-03-22T14:09:03+00:00 [haddock @ 2004-03-22 14:09:03 by simonmar] getReExports was bogus: we should really look in the import_env to find the documentation for an entity which we are re-exporting without documentation. Suggested by: Ross Paterson (patch modified by me). - - - - - 5c756031 by Simon Marlow at 2004-03-24T09:42:11+00:00 [haddock @ 2004-03-24 09:42:10 by simonmar] hiding bug from Ross Paterson (fixed in rev 1.59 of Main.hs) - - - - - 1b692e6c by Simon Marlow at 2004-03-24T10:10:50+00:00 [haddock @ 2004-03-24 10:10:50 by simonmar] mkExportItems fix & simplification: we should be looking at the actual exported names (calculated earlier) to figure out which subordinates of a declaration are exported. This means that if you export a record, and name its fields separately in the export list, the fields will still be visible in the documentation for the constructor. - - - - - 90e5e294 by Simon Marlow at 2004-03-24T10:12:08+00:00 [haddock @ 2004-03-24 10:12:08 by simonmar] Make restrictCons take into account record field names too (removing a ToDo). - - - - - 2600efa4 by Simon Marlow at 2004-03-24T10:16:17+00:00 [haddock @ 2004-03-24 10:16:17 by simonmar] Record export tests. - - - - - 6a8575c7 by Simon Marlow at 2004-03-25T09:35:14+00:00 [haddock @ 2004-03-25 09:35:14 by simonmar] restrictTo: fix for restricting a newtype with a record field. - - - - - dcf55a8d by Simon Marlow at 2004-03-25T10:01:42+00:00 [haddock @ 2004-03-25 10:01:42 by simonmar] Fix duplicate instance bug - - - - - f49aa758 by Simon Marlow at 2004-03-25T10:02:41+00:00 [haddock @ 2004-03-25 10:02:41 by simonmar] Duplicate instance bug. - - - - - 7b87344c by Simon Marlow at 2004-03-25T10:29:56+00:00 [haddock @ 2004-03-25 10:29:56 by simonmar] If a name is imported from two places, one hidden and one not, choose the unhidden one to link to. Also, when there's only a hidden module to link to, don't try linking to it. - - - - - 40f44d7b by Simon Marlow at 2004-03-25T15:17:24+00:00 [haddock @ 2004-03-25 15:17:23 by simonmar] Add support for collaspible parts of the page, with a +/- button and a bit of JavaScript. Make the instances collapsible, and collapse them by default. This makes documentation with long lists of instances (eg. the Prelude) much easier to read. Maybe we should give other documentation sections the same treatment. - - - - - 9b64dc0f by Simon Marlow at 2004-03-25T15:20:55+00:00 [haddock @ 2004-03-25 15:20:55 by simonmar] Update - - - - - c2fff7f2 by Simon Marlow at 2004-03-25T15:45:10+00:00 [haddock @ 2004-03-25 15:45:10 by simonmar] Eliminate some unnecessary spaces in the HTML rendering - - - - - b7948ff0 by Simon Marlow at 2004-03-25T16:00:37+00:00 [haddock @ 2004-03-25 16:00:36 by simonmar] Remove all that indentation in the generated HTML to keep the file sizes down. - - - - - da2bb4ca by Sven Panne at 2004-03-27T09:57:58+00:00 [haddock @ 2004-03-27 09:57:57 by panne] Added the new-born haddock.js to the build process and the documentation. - - - - - b99e6f8c by Sven Panne at 2004-03-27T10:32:20+00:00 [haddock @ 2004-03-27 10:32:20 by panne] "type" is a required attribute of the "script" element - - - - - 562b185a by Sven Panne at 2004-03-27T12:52:34+00:00 [haddock @ 2004-03-27 12:52:34 by panne] Add a doctype for the contents page, too. - - - - - f6a99c2d by Simon Marlow at 2004-04-14T10:03:25+00:00 [haddock @ 2004-04-14 10:03:25 by simonmar] fix for single-line comment syntax - - - - - de366303 by Simon Marlow at 2004-04-20T13:08:04+00:00 [haddock @ 2004-04-20 13:08:04 by simonmar] Allow a 'type' declaration to include documentation comments. These will be ignored by Haddock, but at least one user (Johannes Waldmann) finds this feature useful, and it's easy to add. - - - - - fd78f51e by Simon Marlow at 2004-05-07T15:14:56+00:00 [haddock @ 2004-05-07 15:14:56 by simonmar] - update copyright - add version to abstract - - - - - 59f53e32 by Sven Panne at 2004-05-09T14:39:53+00:00 [haddock @ 2004-05-09 14:39:53 by panne] Fix the fix for single-line comment syntax, ------------------------------------------- is now a valid comment line again. - - - - - 8b18f2fe by Simon Marlow at 2004-05-10T10:11:51+00:00 [haddock @ 2004-05-10 10:11:51 by simonmar] Update - - - - - 225a491d by Ross Paterson at 2004-05-19T13:10:23+00:00 [haddock @ 2004-05-19 13:10:23 by ross] Make the handling of "deriving" slightly smarter, by ignoring data constructor arguments that are identical to the lhs. Now handles things like data Tree a = Leaf a | Branch (Tree a) (Tree a) deriving ... - - - - - 37588686 by Mike Thomas at 2004-05-21T06:38:14+00:00 [haddock @ 2004-05-21 06:38:14 by mthomas] Windows exe extensions (bin remains for Unix). - - - - - cf2b9152 by Simon Marlow at 2004-05-25T09:34:54+00:00 [haddock @ 2004-05-25 09:34:54 by simonmar] Add some TODO items - - - - - 4d29cdfc by Simon Marlow at 2004-05-25T10:41:46+00:00 [haddock @ 2004-05-25 10:41:46 by simonmar] Complain if -h is used with --gen-index or --gen-contents, because it'll overwrite the new index/contents. - - - - - 2e0771e0 by Mike Thomas at 2004-05-28T20:17:55+00:00 [haddock @ 2004-05-28 20:17:55 by mthomas] Windows: search for templates in executable directory. Unix: Haddock tries cwd first rather than error if no -l arg. - - - - - 8d10bde1 by Sven Panne at 2004-06-05T16:53:34+00:00 [haddock @ 2004-06-05 16:53:34 by panne] Misc. rpm spec file cleanup, including: * make BuildRoot handling more consistent * added default file attributes * consistent defines and tags - - - - - 59974349 by Sven Panne at 2004-06-05T18:01:00+00:00 [haddock @ 2004-06-05 18:01:00 by panne] More rpm spec file cleanup, including: * added some BuildRequires * changed packager to me, so people can complain at the right place :-] * consistently refer to haskell.org instead of www.haskell.org - - - - - b94d4903 by Simon Marlow at 2004-07-01T11:08:58+00:00 [haddock @ 2004-07-01 11:08:57 by simonmar] Update to the +/- buttons: use a resized image rather than a <button>. Still seeing some strange effects in Konqueror, so might need to use a fixed-size image instead. - - - - - d5278f67 by Sven Panne at 2004-07-04T15:15:55+00:00 [haddock @ 2004-07-04 15:15:55 by panne] Install pictures for +/- pictures, too (JPEG is a strange format for graphics like this, I would have expected GIF or PNG here.) Things look fine with Konqueror and Netscape on Linux now, the only downside is that the cursor doesn't change when positioned above the "button". - - - - - 46dec6c5 by Sven Panne at 2004-07-13T17:59:28+00:00 [haddock @ 2004-07-13 17:59:28 by panne] A quote is a valid part of a Haskell identifier, but it would interfere with an ECMA script string delimiter, so escape it there. - - - - - 1d7bc432 by Simon Marlow at 2004-07-22T08:54:06+00:00 [haddock @ 2004-07-22 08:54:06 by simonmar] Add single quote to $ident, so you can say eg. 'foldl'' to refer to foldl' (the longest match rule is our friend). Bug reported by Adrian Hey <ahey at iee.org> - - - - - f183618b by Krasimir Angelov at 2004-07-27T22:59:35+00:00 [haddock @ 2004-07-27 22:58:23 by krasimir] Add basic support for Microsoft HTML Help 2.0 - - - - - d515d0c2 by Krasimir Angelov at 2004-07-27T23:02:36+00:00 [haddock @ 2004-07-27 23:02:36 by krasimir] escape names in the index - - - - - a5f1be23 by Krasimir Angelov at 2004-07-27T23:05:21+00:00 [haddock @ 2004-07-27 23:05:21 by krasimir] Add jsFile, plusFile and minusFile to the file list - - - - - c4fb4881 by Krasimir Angelov at 2004-07-28T22:12:10+00:00 [haddock @ 2004-07-28 22:12:09 by krasimir] bugfix. Move contentsHtmlFile, indexHtmlFile and subIndexHtmlFile functions to HaddockUtil.hs module to make them accessible from HaddockHH2.hs - - - - - 64d30b1d by Krasimir Angelov at 2004-07-30T22:15:47+00:00 [haddock @ 2004-07-30 22:15:45 by krasimir] more stuffs - support for separated compilation of packages - the contents page now uses DHTML TreeView - fixed copyFile bug - - - - - 133c8c5c by Krasimir Angelov at 2004-07-31T12:04:38+00:00 [haddock @ 2004-07-31 12:04:37 by krasimir] make the DHtmlTree in contents page more portable. The +/- buttons are replaced with new images which looks more beatiful. - - - - - 79040963 by Krasimir Angelov at 2004-07-31T13:10:20+00:00 [haddock @ 2004-07-31 13:10:20 by krasimir] Make DHtmlTree compatible with Mozila browser - - - - - 1a55dc90 by Krasimir Angelov at 2004-07-31T14:52:55+00:00 [haddock @ 2004-07-31 14:52:55 by krasimir] fix - - - - - 85ce0237 by Krasimir Angelov at 2004-07-31T14:53:28+00:00 [haddock @ 2004-07-31 14:53:28 by krasimir] HtmlHelp 1.x - - - - - 3c0c53ba by Krasimir Angelov at 2004-07-31T20:35:21+00:00 [haddock @ 2004-07-31 20:35:21 by krasimir] Added support for DevHelp - - - - - d42b5af1 by Krasimir Angelov at 2004-07-31T21:17:51+00:00 [haddock @ 2004-07-31 21:17:51 by krasimir] Document new features in HtmlHelp - - - - - 790fe21e by Krasimir Angelov at 2004-08-01T15:14:02+00:00 [haddock @ 2004-08-01 15:14:02 by krasimir] add missing imports - - - - - fd7cc6bc by Krasimir Angelov at 2004-08-01T19:52:08+00:00 [haddock @ 2004-08-01 19:52:06 by krasimir] fix some bugs. Now I have got the entire libraries documentation in HtmlHelp 2.0 format. - - - - - 94ad7ac8 by Krasimir Angelov at 2004-08-01T19:53:50+00:00 [haddock @ 2004-08-01 19:53:50 by krasimir] I forgot to add the new +/- images - - - - - f0c65388 by Krasimir Angelov at 2004-08-02T16:25:53+00:00 [haddock @ 2004-08-02 16:25:53 by krasimir] Add root node to the table of contents. All modules in tree are not children of the root - - - - - f50bd85d by Sven Panne at 2004-08-02T18:17:46+00:00 [haddock @ 2004-08-02 18:17:46 by panne] Mainly DocBook fixes - - - - - 09527ce3 by Sven Panne at 2004-08-02T20:02:29+00:00 [haddock @ 2004-08-02 20:02:29 by panne] Fixed -o/--odir handling. Generating the output, especially the directory handling, is getting a bit convoluted nowadays... - - - - - c8fbacfa by Sven Panne at 2004-08-02T20:31:13+00:00 [haddock @ 2004-08-02 20:31:13 by panne] Warning police - - - - - 37830bff by Sven Panne at 2004-08-02T20:32:29+00:00 [haddock @ 2004-08-02 20:32:28 by panne] Nuked dead code - - - - - 13847171 by Sven Panne at 2004-08-02T21:12:27+00:00 [haddock @ 2004-08-02 21:12:25 by panne] Use pathJoin instead of low-level list-based manipulation for FilePaths - - - - - c711d61e by Sven Panne at 2004-08-02T21:16:02+00:00 [haddock @ 2004-08-02 21:16:02 by panne] Removed WinDoze CRs - - - - - b1f7dc88 by Sven Panne at 2004-08-03T19:35:59+00:00 [haddock @ 2004-08-03 19:35:59 by panne] Fixed spelling of "http-equiv" attribute - - - - - dd5f394e by Sven Panne at 2004-08-03T19:44:03+00:00 [haddock @ 2004-08-03 19:44:03 by panne] Pacify W3C validator: * Added document encoding (currently UTF-8, not sure if this is completely correct) * Fixed syntax of `id' attributes * Added necessary `alt' attribute for +/- images Small layout improvement: * Added space after +/- images (still not perfect, but better than before) - - - - - 919c47c6 by Sigbjorn Finne at 2004-08-03T19:45:11+00:00 [haddock @ 2004-08-03 19:45:11 by sof] make it compile with <= ghc-6.1 - - - - - 4d6f01d8 by Sigbjorn Finne at 2004-08-03T19:45:30+00:00 [haddock @ 2004-08-03 19:45:30 by sof] ffi wibble - - - - - 4770643a by Sven Panne at 2004-08-03T20:47:46+00:00 [haddock @ 2004-08-03 20:47:46 by panne] Fixed CSS for button style. Note that only "0" is a valid measure without a unit! - - - - - 14aaf2e5 by Sven Panne at 2004-08-03T21:07:59+00:00 [haddock @ 2004-08-03 21:07:58 by panne] Improved spacing of dynamic module tree - - - - - 97c3579a by Simon Marlow at 2004-08-09T11:03:04+00:00 [haddock @ 2004-08-09 11:03:04 by simonmar] Add FormatVersion Patch submitted by: George Russell <ger at informatik.uni-bremen.de> - - - - - af7f8c03 by Simon Marlow at 2004-08-09T11:55:07+00:00 [haddock @ 2004-08-09 11:55:05 by simonmar] Add support for a short description for each module, which is included in the contents. The short description should be given in a "Description: " field of the header. Included in this patch are changes that make the format of the header a little more flexible. From the comments: -- all fields in the header are optional and have the form -- -- [spaces1][field name][spaces] ":" -- [text]"\n" ([spaces2][space][text]"\n" | [spaces]"\n")* -- where each [spaces2] should have [spaces1] as a prefix. -- -- Thus for the key "Description", -- -- > Description : this is a -- > rather long -- > -- > description -- > -- > The module comment starts here -- -- the value will be "this is a .. description" and the rest will begin -- at "The module comment". The header fields must be in the following order: Module, Description, Copyright, License, Maintainer, Stability, Portability. Patches submitted by: George Russell <ger at informatik.uni-bremen.de>, with a few small changes be me, mostly to merge with other recent changes. ToDo: document the module header. - - - - - 7b865ad3 by Simon Marlow at 2004-08-10T14:09:57+00:00 [haddock @ 2004-08-10 14:09:57 by simonmar] Fixes for DevHelp/HtmlHelp following introduction of short module description. - - - - - 814766cd by Simon Marlow at 2004-08-10T14:33:46+00:00 [haddock @ 2004-08-10 14:33:45 by simonmar] Fixes to installation under Windows. - - - - - 39cf9ede by Simon Marlow at 2004-08-12T12:08:23+00:00 [haddock @ 2004-08-12 12:08:23 by simonmar] Avoid using string-gap tricks. - - - - - b6d78551 by Simon Marlow at 2004-08-13T10:53:21+00:00 [haddock @ 2004-08-13 10:53:21 by simonmar] Update - - - - - eaae7417 by Simon Marlow at 2004-08-13T10:53:50+00:00 [haddock @ 2004-08-13 10:53:50 by simonmar] Test for primes in quoted links - - - - - 68c34f06 by Sven Panne at 2004-08-16T19:59:38+00:00 [haddock @ 2004-08-16 19:59:36 by panne] XMLification - - - - - 7f45a6f9 by Sven Panne at 2004-08-18T16:42:54+00:00 [haddock @ 2004-08-18 16:42:54 by panne] Re-added indices + minor fixes - - - - - 8a5dd97c by Sigbjorn Finne at 2004-08-25T17:15:42+00:00 [haddock @ 2004-08-25 17:15:42 by sof] backquote HADDOCK_VERSION defn for <= ghc-6.0.x; believe this is only needed under mingw - - - - - 4b1b42ea by Sven Panne at 2004-08-26T20:08:50+00:00 [haddock @ 2004-08-26 20:08:49 by panne] SGML is dead, long live DocBook XML! Note: The BuildRequires tags in the spec files are still incomplete and the documentation about the DocBook tools needs to be updated, too. Stay tuned... - - - - - 8d52cedb by Sven Panne at 2004-08-26T21:03:19+00:00 [haddock @ 2004-08-26 21:03:19 by panne] Updated BuildRequires tags. Alas, there seems to be no real standard here, so your mileage may vary... At least the current specs should work on SuSE Linux. - - - - - e6982912 by Sigbjorn Finne at 2004-08-30T15:44:59+00:00 [haddock @ 2004-08-30 15:44:59 by sof] escape HADDOCK_VERSION double quotes on all platforms when compiling with <=6.0.x - - - - - b3fbc867 by Simon Marlow at 2004-08-31T13:09:42+00:00 [haddock @ 2004-08-31 13:09:42 by simonmar] Avoid GHC/shell versionitis and create Version.hs - - - - - c359e16a by Sven Panne at 2004-09-05T19:12:33+00:00 [haddock @ 2004-09-05 19:12:32 by panne] * HTML documentation for "foo.xml" goes into directory "foo" again, not "foo-html". This is nicer and consistent with the behaviour for building the docs from SGML. * Disabled building PostScript documentation in the spec files for now, there are some strange issues with the FO->PS conversion for some files which have to be clarified first. - - - - - c68b1eba by Sven Panne at 2004-09-24T07:04:38+00:00 [haddock @ 2004-09-24 07:04:38 by panne] Switched the default state for instances and the module hierarchy to non-collapsed. This can be reversed when we finally use cookies from JavaScript to have a more persistent state. Previously going back and forth in the documentation was simply too annoying because everything was collapsed again and therefore the documentation was not easily navigatable. - - - - - dfb32615 by Simon Marlow at 2004-09-30T08:21:29+00:00 [haddock @ 2004-09-30 08:21:29 by simonmar] Add a feature request - - - - - 45ff783c by Sven Panne at 2004-10-23T19:54:00+00:00 [haddock @ 2004-10-23 19:54:00 by panne] Improved the Cygwin/MinGW chaos a little bit. There is still confusion about host platform vs. target platform... - - - - - 5f644714 by Krasimir Angelov at 2004-10-28T16:01:51+00:00 [haddock @ 2004-10-28 16:01:51 by krasimir] update for ghc-6.3+ - - - - - 92d9753e by Sven Panne at 2004-11-01T16:39:01+00:00 [haddock @ 2004-11-01 16:39:01 by panne] Revert previous commit: It's Network.URI which should be changed, not Haddock. - - - - - 05f70f6e by Simon Marlow at 2005-01-04T16:15:51+00:00 [haddock @ 2005-01-04 16:15:51 by simonmar] parser fix: allow qualified specialids. - - - - - 47870837 by Simon Marlow at 2005-01-04T16:16:54+00:00 [haddock @ 2005-01-04 16:16:54 by simonmar] Add a test - - - - - ff11fc2c by Ross Paterson at 2005-01-10T19:18:22+00:00 [haddock @ 2005-01-10 19:18:22 by ross] Render non-ASCII characters using numeric character references, to simplify charset issues. There's a META tag saying the charset is UTF-8, but GHC outputs characters as raw bytes. Ideally we need an encoding on the input side too, primarily in comments, because source files containing non-ASCII characters aren't portable between locales. - - - - - eba2fc4e by Simon Marlow at 2005-01-11T10:44:37+00:00 [haddock @ 2005-01-11 10:44:37 by simonmar] Remove string gap - - - - - b899a381 by Ross Paterson at 2005-01-13T11:41:33+00:00 [haddock @ 2005-01-13 11:41:33 by ross] recognize SGML-style numeric character references &#ddd; or &#xhhhh; and translate them into Chars. - - - - - 106e3cf0 by Ross Paterson at 2005-01-13T14:43:41+00:00 [haddock @ 2005-01-13 14:43:41 by ross] also allow uppercase X in hexadecimal character references (like SGML) - - - - - e8f54f25 by Ross Paterson at 2005-01-13T14:44:24+00:00 [haddock @ 2005-01-13 14:44:24 by ross] Describe numeric character references. - - - - - 914ccdce by Sven Panne at 2005-01-15T18:44:48+00:00 [haddock @ 2005-01-15 18:44:45 by panne] Make Haddock compile again after the recent base package changed. The Map/Set legacy hell has been factored out, so that all modules can simply use the new non-deprecated interfaces. Probably a lot of things can be improved by a little bit of Map/Set/List algebra, this can be done later if needed. Small note: Currently the list of instances in HTML code is reversed. This will hopefully be fixed later. - - - - - 6ab20e84 by Sven Panne at 2005-01-16T12:18:26+00:00 [haddock @ 2005-01-16 12:18:26 by panne] Trim imports - - - - - efb81da9 by Sven Panne at 2005-01-16T12:58:08+00:00 [haddock @ 2005-01-16 12:58:03 by panne] Correctly handle the new order of arguments for the combining function given to fromListWith. - - - - - e27b5834 by Sven Panne at 2005-01-16T14:14:41+00:00 [haddock @ 2005-01-16 14:14:39 by panne] Data.Map.unions is left-biased. - - - - - dae3cc3e by Sven Panne at 2005-01-16T14:22:44+00:00 [haddock @ 2005-01-16 14:22:44 by panne] Added the last missing "flip" to get identical HTML output as previous versions. - - - - - 951d8408 by Sven Panne at 2005-01-16T14:37:10+00:00 [haddock @ 2005-01-16 14:37:10 by panne] Refactored Text.PrettyPrint legacy hell into a separate module. - - - - - f1c4b892 by Sven Panne at 2005-01-16T15:41:25+00:00 [haddock @ 2005-01-16 15:41:21 by panne] Cleaned up imports and dropped support for GHC < 5.03, it never worked, anyway. - - - - - 60824c6e by Simon Marlow at 2005-01-18T10:02:48+00:00 [haddock @ 2005-01-18 10:02:48 by simonmar] Add a TODO - - - - - a8c82f23 by Krasimir Angelov at 2005-01-28T23:19:39+00:00 [haddock @ 2005-01-28 23:19:39 by krasimir] import Foreign/Foreign.C are required for Windows - - - - - d8450a23 by Simon Marlow at 2005-02-02T16:23:04+00:00 [haddock @ 2005-02-02 16:23:00 by simonmar] Revamp the linking strategy in Haddock. Now name resolution is done in two phases: - first resolve everything to original names, like a Haskell compiler would. - then, figure out the "home" location for every entity, and point all the links to there. The home location is the lowest non-hidden module in the import hierarchy that documents the entity. If there are multiple candidates, one is chosen at random. Also: - Haddock should not generate any HTML with dangling links any more. Unlinked references are just rendered as plain text. - Error reporting is better: if we can't find a link destination for an entity reference, we now emit a warning. - - - - - 1cce71d0 by Simon Marlow at 2005-02-03T13:42:19+00:00 [haddock @ 2005-02-03 13:42:19 by simonmar] - add --ignore-all-exports flag, which behaves as if every module has the ignore-exports attribute (requested by Chris Ryder). - add --hide option to hide a module on the command line. - add --use-package option to get Haddock info for a package from ghc-pkg (largely untested). - remove reexports from the .haddock file, they aren't used any more. - - - - - 767123ef by Ross Paterson at 2005-02-03T16:17:37+00:00 [haddock @ 2005-02-03 16:17:37 by ross] fix typo for < 6.3 - - - - - 0c680c04 by Simon Marlow at 2005-02-04T12:03:31+00:00 [haddock @ 2005-02-04 12:03:31 by simonmar] Fix bug in renameExportItems that meant links in instances weren't being renamed properly. - - - - - ff7abe5f by Simon Marlow at 2005-02-04T12:15:53+00:00 [haddock @ 2005-02-04 12:15:52 by simonmar] Add attribute #not-home, to indicate that the current module should not be considered to be a home module for the each entity it exports, unless there is no other module that exports the entity. - - - - - fc2cfd27 by Simon Marlow at 2005-02-04T12:40:02+00:00 [haddock @ 2005-02-04 12:40:02 by simonmar] Update the documentation w.r.t. home modules and the not-home attribute. - - - - - 26b8ddf7 by Ross Paterson at 2005-02-04T13:36:06+00:00 [haddock @ 2005-02-04 13:36:05 by ross] sort lists of instances by - arity of the type constructors (so higher-kinded instances come first) - name of the class - argument types - - - - - 26bfb19c by Simon Marlow at 2005-02-23T15:57:12+00:00 [haddock @ 2005-02-23 15:57:12 by simonmar] Fix documentation regarding the module attributes. - - - - - 9c3afd02 by Simon Marlow at 2005-02-28T16:18:17+00:00 [haddock @ 2005-02-28 16:18:17 by simonmar] version 0.7 - - - - - a95fd63f by Simon Marlow at 2005-02-28T16:22:08+00:00 [haddock @ 2005-02-28 16:22:08 by simonmar] Attempt to fix the layout of the package names in the contents. Having tried just about everything, the only thing I can get to work reliably is to make the package names line up on a fixed offset from the left margin. This obviously isn't ideal, so anyone else that would like to have a go at improving it is welcome. One option is to remove the +/- buttons from the contents list and go back to a plain table. The contents page now uses CSS for layout rather than tables. It seems that most browsers have different interpretations of CSS layout, so only the simplest things lead to consistent results. - - - - - 905d42f7 by Simon Marlow at 2005-03-01T17:16:42+00:00 [haddock @ 2005-03-01 17:16:40 by simonmar] Another attempt at lining up the package names on the contents page. Now, they line up with Konqueror, and almost line up with Firefox & IE (different layout in each case). - - - - - a0e1d178 by Wolfgang Thaller at 2005-03-09T08:28:39+00:00 [haddock @ 2005-03-09 08:28:39 by wolfgang] Hack haddock's lexer to accept the output from Apple's broken version of cpp (Apple's cpp leaves #pragma set_debug_pwd directives in it's output). - - - - - 9e1eb784 by Simon Marlow at 2005-04-22T14:27:15+00:00 [haddock @ 2005-04-22 14:27:15 by simonmar] Add a TODO item - - - - - 23281f78 by Ross Paterson at 2005-05-18T12:41:59+00:00 [haddock @ 2005-05-18 12:41:59 by ross] fix 3 bugs in --use-package, and document it. - - - - - 00074a68 by Sven Panne at 2005-05-21T12:35:29+00:00 [haddock @ 2005-05-21 12:35:29 by panne] Warning/versionitis police - - - - - 341fa822 by Simon Marlow at 2005-06-15T15:43:21+00:00 [haddock @ 2005-06-15 15:43:21 by simonmar] Allow "licence" as an alternate spelling of "license" - - - - - 3b953f8b by Simon Marlow at 2005-06-16T08:14:12+00:00 [haddock @ 2005-06-16 08:14:12 by simonmar] wibble - - - - - abfd9826 by Simon Marlow at 2005-06-27T14:46:40+00:00 [haddock @ 2005-06-27 14:46:40 by simonmar] name hierarchical HTML files as A-B-C.html instead of A.B.C.html. The old way confused Apache because the extensions are sometimes interpreted as having special meanings. - - - - - a01eea00 by Simon Marlow at 2005-08-04T13:59:40+00:00 [haddock @ 2005-08-04 13:59:40 by simonmar] 0.7 changes - - - - - 170ef87e by Simon Marlow at 2005-08-04T15:08:03+00:00 [haddock @ 2005-08-04 15:08:03 by simonmar] spec file from Jens Peterson - - - - - 7621fde4 by Simon Marlow at 2005-08-04T15:59:30+00:00 [haddock @ 2005-08-04 15:59:30 by simonmar] replace mingw tests with $(Windows) - - - - - a20739bb by Sven Panne at 2005-08-05T07:01:12+00:00 [haddock @ 2005-08-05 07:01:12 by panne] Reverted to previous version (but with bumped version number), the last commit broke RPM building on SuSE systems due to differently named dependencies. As a clarification: All .spec files in the repository have to work at least on SuSE, because that's the system I'm using. And as "Mr. Building Police", I reserve me the right to keep them that way... >:-) It might very well be the case that we need different .spec files for different platforms, so packagers which are unhappy with the current .spec files should contact me, stating the actual problems. - - - - - 4afb15cf by Simon Marlow at 2005-10-05T10:51:45+00:00 [haddock @ 2005-10-05 10:51:45 by simonmar] Add a bug - - - - - 60f69f82 by Simon Marlow at 2005-10-05T12:52:03+00:00 [haddock @ 2005-10-05 12:52:03 by simonmar] Document new behaviour of -s option - - - - - f7e520ca by Simon Marlow at 2005-10-10T15:02:55+00:00 [haddock @ 2005-10-10 15:02:55 by simonmar] extractRecSel: ignore non-record constructors (fixes a crash when using datatypes with a mixture of record and non-record style constructors). - - - - - b2edbedb by Simon Marlow at 2005-10-14T09:44:21+00:00 Start CHANGES for 0.8 - - - - - 21c7ac8d by Simon Marlow at 2005-10-14T23:11:19+00:00 First cut of Cabal build system - - - - - 766cecdd by Simon Marlow at 2005-10-29T08:14:43+00:00 Add configure script and Makefile for the docs Add a separate configure script and build system for building the documentation. The configure and Makefile code is stolen from fptools. This is left as a separate build system so that the main Cabal setup doesn't require a Unix build environment or DocBook XML tools. - - - - - aa36c783 by Duncan Coutts at 2006-01-17T19:29:55+00:00 Add a --wiki=URL flag to add a per-module link to a correspondng wiki page. So each html page gets an extra link (placed next to the source code and contents links) to a corresponding wiki page. The idea is to let readers contribute their own notes, examples etc to the documentation. Also slightly tidy up the code for the --source option. - - - - - e06e2da2 by Simon Marlow at 2006-01-18T09:28:15+00:00 TODO: documnet --wiki - - - - - 17adfda9 by Duncan Coutts at 2006-01-19T20:17:59+00:00 Add an optional wiki link for each top level exported name. In each module, for each "top level" exported entity we add a hyper link to a corresponding wiki page. The link url gets the name of the exported entity as a '#'-style anchor, so if there is an anchor in the page with that name then the users browser should jump directly to it. By "top level" we mean functions, classes, class members and data types (data, type, newtype), but not data constructors, class instances or data type class membership. The link is added at the right of the page and in a small font. Hopefully this is the right balance of visibility/distraction. We also include a link to the wiki base url in the contents and index pages. - - - - - f52324bb by Duncan Coutts at 2006-01-19T20:28:27+00:00 Rewrite pathJoin to only add a path separator when necessary. When the path ends in a file seperator there is no need to add another. Now using "--wiki=http://blah.com/foo/" should do the right thing. (Code snippet adapted from Isaac's FilePath package.) - - - - - 43bb89fa by Duncan Coutts at 2006-01-21T17:15:27+00:00 Teach haddock about line pragmas and add accurate source code links Teach haddock about C and Haskell style line pragmas. Extend the lexer/parser's source location tracking to include the file name as well as line/column. This way each AST item that is tagged with a SrcLoc gets the original file name too. Use this original file name to add source links to each exported item, in the same visual style as the wiki links. Note that the per-export source links are to the defining module rather than whichever module haddock pretends it is exported from. This is what we want for source code links. The source code link URL can also contain the name of the export so one could implement jumping to the actual location of the function in the file if it were linked to an html version of the source rather than just plain text. The name can be selected with the %N wild card. So for linking to the raw source code one might use: --source=http://darcs/haskell.org/foo/%F Or for linking to html syntax highlighted code: --source=http://darcs/haskell.org/foo/%M.html#%N - - - - - edd9f229 by Duncan Coutts at 2006-01-22T00:02:00+00:00 Extend URL variable expansion syntax and add source links to the contents page Like the wiki link on the contents and index page, add a source code link too. Extend the wiki & source URL variable expansion syntax. The original syntax was: %F for the source file name (the .hs version only, not the .lhs or .hs.pp one) %M for the module name (with '.' replaced by '/') The new syntax is: %F or %{FILE} for the original source file name %M or %{MODULE} for the module name (no replacements) %N or %{NAME} for the function/type export name %K or %{KIND} for a type/value flag "t" or "v" with these extensions: %{MODULE/./c} to replace the '.' module seperator with any other char c %{VAR|some text with the % char in it} which means if the VAR is not in use in this URL context then "" else replace the given text with the '%' char replaced by the string value of the VAR. This extension allows us to construct URLs wit optional parts, since the module/file name is not available for the URL in the contents/index pages and the value/type name is not available for the URL at the top level of each module. - - - - - eb3c6ada by Duncan Coutts at 2006-01-23T13:42:34+00:00 Remove the complex substitutions and add more command line flags instead. Instead of incomprehensable URL substitutions like ${MODULE/./-|?m=%} we now use three seperate command line flags for the top level, per-module and per-entity source and wiki links. They are: --source-base, --source-module, --source-entity --comments-base, --comments-module, --comments-entity We leave -s, --source as an alias for --source-module which is how that option behaved previously. The long forms of the substitutions are still available, ${FILE} ${MODULE} etc and the only non-trivial substitution is ${MODULE/./c} to replace the '.' characters in the module name with any other character c. eg ${MODULE/./-} Seperating the source and wiki url flags has the added bonus that they can be turned on or off individually. So users can have per-module links for example without having to also have per-entity links.` - - - - - a2f0f2af by Duncan Coutts at 2006-01-23T13:54:52+00:00 Make the --help output fit in 80 columns. This is a purely cosmetic patch, feel free to ignore it. The only trickery going on is that we don't display the deprecated -s, --source flags in the help message, but we do still accept them. - - - - - 2d3a4b0c by Duncan Coutts at 2006-01-23T14:12:16+00:00 Add documentation for the new --source-* and --comments-* command line options - - - - - 1a82a297 by Simon Marlow at 2006-01-23T17:03:27+00:00 fix markup - - - - - 100d464a by Duncan Coutts at 2006-01-23T18:31:13+00:00 remove a couple TODO items that have been done The --wiki, or rather the --comment-* options are now documented. There is probably no need to have haddock invoke unlit or cpp itself since it can now pick up the line pragmas to get the source locations right. Tools like Cabal will arrange for preprocessors to be run so there is less of a need for tools like haddock to do it themselves. - - - - - 3162fa91 by Simon Marlow at 2006-01-24T14:21:56+00:00 add a test I had lying around - - - - - 98947063 by Simon Marlow at 2006-01-31T13:52:54+00:00 add scabal-version field - - - - - c41876e6 by Neil Mitchell at 2006-02-26T17:48:21+00:00 Add Hoogle output option - - - - - f86fb9c0 by Simon Marlow at 2006-03-08T09:15:20+00:00 add haskell.vim Contributed by Brad Bowman <bsb at bereft.net>, thanks! - - - - - 35d3c511 by benjamin.franksen at 2006-03-03T22:39:54+00:00 fixed libdir (/html was missing) - - - - - 4d08fd7d by Simon Marlow at 2006-03-10T11:13:31+00:00 add PatternGuards extension - - - - - 3f095e70 by Simon Marlow at 2006-03-13T11:40:42+00:00 bug fixes from Brad Bowman - - - - - 8610849d by Sven Panne at 2006-03-19T17:02:56+00:00 Fixed Cabal/RPM build - - - - - 34a994d6 by sven.panne at 2006-04-20T12:39:23+00:00 Avoid pattern guards Due to the use of pattern guards in Haddock, GHC was called with -fglasgow-exts. This in turn enables bang patterns, too, which broke the Haddock build. Removing some unnecessary pattern guards seemed to be the better way of fixing this instead of using a pragma to disable pattern guards. - - - - - bb523f51 by Ross Paterson at 2006-04-24T09:03:25+00:00 extend 'deriving' heuristic a little If an argument of a data constructor has a type variable head, it is irreducible and the same type class can be copied into the constraint. (Formerly we just did this for type variable arguments.) - - - - - dab9fe7a by Simon Marlow at 2006-04-26T10:02:31+00:00 record an idea - - - - - 748b7078 by Simon Marlow at 2006-05-08T08:28:53+00:00 add section about deriving - - - - - 11252ea1 by Simon Marlow at 2006-05-24T15:43:10+00:00 replace a fatal error in lexChar with a parseError - - - - - 382c9411 by Simon Marlow at 2006-05-24T15:45:47+00:00 add a bug - - - - - b79272f5 by Simon Marlow at 2006-05-24T15:46:29+00:00 add a bug report - - - - - 912edf65 by David Waern at 2006-07-10T19:09:23+00:00 Initial modifications -- doesn't compile - - - - - a3c7ba99 by David Waern at 2006-07-11T00:54:19+00:00 More porting work -- doesn't compile - - - - - 0a173d19 by David Waern at 2006-07-11T11:30:03+00:00 Make the repos temporarily compile and illustrate a problem - - - - - bad316de by David Waern at 2006-07-11T15:43:47+00:00 Progress on the porting process - - - - - bbf12d02 by David Waern at 2006-07-11T23:07:44+00:00 More progress on the porting -- first pass starting to shape up - - - - - de580ba2 by David Waern at 2006-07-20T17:48:30+00:00 More progress -- still on phase1 - - - - - 75a917a2 by David Waern at 2006-07-23T18:22:43+00:00 More work on pass1 -- mostly done - - - - - 6697b3f7 by David Waern at 2006-07-23T22:17:40+00:00 More work, started working on the renaming phase -- this code will need a cleanup soon :) - - - - - 82a5bcbb by David Waern at 2006-07-29T16:16:43+00:00 Add instances, build renaming environment, start on the renamer - - - - - c3f8f4f1 by David Waern at 2006-07-29T21:37:48+00:00 Complete the renamer - - - - - 7e00d464 by David Waern at 2006-07-30T21:01:57+00:00 Start porting the Html renderer - - - - - f04ce121 by David Waern at 2006-08-09T20:04:56+00:00 More Html rendering progress - - - - - 20c21b53 by David Waern at 2006-08-10T17:37:47+00:00 More progress - - - - - d7097e0d by David Waern at 2006-08-11T20:31:51+00:00 Cleanup - - - - - a7351e86 by David Waern at 2006-08-12T11:44:47+00:00 Render H98 Data declarations - - - - - 3fb2208e by David Waern at 2006-08-12T17:15:34+00:00 Perfect rendering of Test.hs - - - - - 454fd062 by David Waern at 2006-08-13T21:57:08+00:00 Misc fixes and interface load/save - - - - - 7ef7e7be by David Waern at 2006-08-14T00:56:07+00:00 Some refactoring - - - - - a7d3efef by David Waern at 2006-08-19T20:07:55+00:00 Adapt to latest GHC - - - - - 5fc3c0d7 by David Waern at 2006-08-20T21:28:11+00:00 Move interface read/write to its own module + some cleanup - - - - - 037e011c by David Waern at 2006-08-20T21:38:24+00:00 Small cleanup - - - - - da3a1023 by David Waern at 2006-09-03T16:05:22+00:00 Change mode to BatchCompile to avoid GHC API bug - - - - - 3cc9be3b by David Waern at 2006-09-03T16:06:59+00:00 Starting work on GADT rendering - - - - - 94506037 by David Waern at 2006-09-03T20:02:48+00:00 Compensate for change of export list order in GHC - - - - - c2cec4eb by David Waern at 2006-09-04T20:53:01+00:00 Rename a function - - - - - 9a9735ba by David Waern at 2006-09-05T15:51:21+00:00 Change version number to 2.0 - - - - - 3758a714 by David Waern at 2006-09-05T15:51:49+00:00 Align comment properly - - - - - 68478d9e by David Waern at 2006-09-15T18:03:00+00:00 Remove interface reading/writing code and use the GHC api for creating package environments instead - - - - - d2eedd95 by David Waern at 2006-09-15T18:05:29+00:00 Change the executable name to haddock-ghc-nolib - - - - - fcfbcf66 by David Waern at 2006-09-15T18:05:45+00:00 Small source code cleanup - - - - - d08eb017 by David Waern at 2006-09-15T18:06:21+00:00 Remove handling of --package flag - - - - - b8a4cf53 by David Waern at 2006-09-15T18:07:16+00:00 Remove commented-out code - - - - - bef0a684 by David Waern at 2006-09-15T18:37:57+00:00 Don't warn about missing links to () - - - - - e7d25fd7 by David Waern at 2006-09-15T19:50:49+00:00 Remove Interface and Binary2 modules - - - - - 9894f2a1 by David Waern at 2006-09-15T19:53:43+00:00 Remove debug printing from HaddockHtml - - - - - a0e7455d by David Waern at 2006-09-16T00:16:29+00:00 Comments only - - - - - d5b26fa7 by David Waern at 2006-09-16T00:16:57+00:00 Refactor PackageData creation code and start on building the doc env propery (unfinished) - - - - - 06aaa779 by David Waern at 2006-09-16T00:19:25+00:00 Better comments in Main.hs - - - - - 1a52d1b4 by David Waern at 2006-09-18T22:17:11+00:00 Comments and spacing change - - - - - e5a97767 by David Waern at 2006-09-21T17:02:45+00:00 Remove unnecessary fmapM import in Main - - - - - 9d0f9d3a by David Waern at 2006-09-22T18:07:07+00:00 Make import list in HaddockHtml prettier - - - - - 3452f662 by David Waern at 2006-09-22T18:08:47+00:00 Refactor context rendering - - - - - 12d0a6d0 by David Waern at 2006-09-22T18:09:52+00:00 Do proper HsType rendering (inser parentheses correctly) - - - - - 2c20c2f9 by David Waern at 2006-09-22T18:10:45+00:00 Fix a bug in Main.toHsType - - - - - c5396443 by David Waern at 2006-09-22T18:11:16+00:00 Skip external package modules sort for now - - - - - 3fb95547 by David Waern at 2006-09-22T20:35:40+00:00 Take away trailin "2" on all previously clashing type names - - - - - 2174755f by David Waern at 2006-09-22T20:51:43+00:00 Remove unused imports in Main - - - - - 1e9f7a39 by David Waern at 2006-09-22T20:52:11+00:00 Fix a comment in Main - - - - - 32d9e028 by David Waern at 2006-10-05T16:40:11+00:00 Merge with changes to ghc HEAD - - - - - 3058c8f5 by David Waern at 2006-10-05T16:41:02+00:00 Comment fixes - - - - - b9c217ec by David Waern at 2006-10-05T16:49:59+00:00 Filter out more builtin type constructors from warning messages - - - - - 67e7d252 by David Waern at 2006-10-05T19:38:22+00:00 Refactoring -- better structured pass1 - - - - - cd21c0c1 by David Waern at 2006-10-05T19:44:42+00:00 Remove read/dump interface flags - - - - - 313f9e69 by David Waern at 2006-10-05T19:49:26+00:00 Remove unused pretty printing - - - - - 480f09d1 by David Waern at 2006-12-28T13:22:24+00:00 Update to build with latest GHC HEAD - - - - - 63dccfcb by David Waern at 2007-01-05T01:38:45+00:00 Fixed a bug so that --ghc-flag works correctly - - - - - 3117dadc by David Waern at 2006-12-29T18:53:39+00:00 Automatically get the GHC lib dir - - - - - 9dc84a5c by David Waern at 2006-12-29T19:58:53+00:00 Comments - - - - - 0b0237cc by David Waern at 2007-01-05T16:48:30+00:00 Collect docs based on SrcLoc, syncing with removal of DeclEntity from GHC - - - - - a962c256 by David Waern at 2007-01-05T17:02:47+00:00 Add tabs in haddock.cabal - - - - - 0ca30c97 by David Waern at 2007-01-05T17:04:11+00:00 Add GHCUtils.hs - - - - - c0ab9abe by David Waern at 2007-01-10T11:43:08+00:00 Change package name to haddock-ghc, version 0.1 - - - - - 38e18b27 by David Waern at 2007-01-12T12:03:52+00:00 No binder name for foreign exports - - - - - d18587ab by David Waern at 2007-01-12T12:08:15+00:00 Temp record - - - - - ba6251a0 by David Waern at 2007-01-12T18:27:55+00:00 Remove read/dump-interface (again) - - - - - f4ba2b39 by David Waern at 2007-01-12T18:31:36+00:00 Remove DocOption, use the GHC type - - - - - 511be8bd by David Waern at 2007-01-12T18:32:41+00:00 Use exceptions instead of Either when loading package info - - - - - 0f2144d8 by David Waern at 2007-01-12T18:33:23+00:00 Small type change - - - - - 77507eb7 by David Waern at 2007-01-12T18:33:59+00:00 Remove interface file read/write - - - - - 0ea1e14f by David Waern at 2007-01-17T21:40:26+00:00 Add trace_ppr to GHCUtils - - - - - 3878b493 by David Waern at 2007-01-17T21:40:53+00:00 Sort external package modules and build a doc env - - - - - 8dc323fc by David Waern at 2007-01-17T21:42:41+00:00 Remove comment - - - - - f4c5b097 by David Waern at 2007-01-18T23:22:18+00:00 Add haddock-ghc.cabal and remove ghc option pragma in source file - - - - - da242b2c by David Waern at 2007-01-18T23:22:46+00:00 Remove some tabs - - - - - 288ed096 by David Waern at 2007-01-18T23:39:28+00:00 Moved the defaultErrorHandler to scope only over sortAndCheckModules for now - - - - - 4dd150fe by David Waern at 2007-02-03T21:23:56+00:00 Let restrictCons handle infix constructors - - - - - 97893442 by David Waern at 2007-02-04T16:26:00+00:00 Render infix data constructors - - - - - da89db72 by David Waern at 2007-02-04T16:26:33+00:00 CHange project name to Haddock-GHC - - - - - e93d48af by David Waern at 2007-02-04T16:59:08+00:00 Render infix type constructors properly - - - - - 357bc99b by David Waern at 2007-02-04T17:37:08+00:00 Insert spaces around infix function names - - - - - ab6cfc49 by David Waern at 2007-02-04T17:59:54+00:00 Do not list entities without documentation - - - - - 04249c7e by David Waern at 2007-02-04T19:16:25+00:00 Add GADT support (quite untested) - - - - - 2c223f8d by David Waern at 2007-02-04T19:25:10+00:00 Add package file write/save again! - - - - - b07ed218 by David Waern at 2007-02-04T19:33:02+00:00 Comment out minf_iface based stuff - - - - - 953d1fa7 by David Waern at 2007-02-05T00:12:23+00:00 Solve conflicts - - - - - 593247fc by David Waern at 2007-02-06T19:48:48+00:00 Remove -package flag, GHC's can be used instead - - - - - f658ded2 by David Waern at 2007-02-06T20:50:44+00:00 Start for support of ATs - - - - - 97f9e913 by David Waern at 2007-02-06T20:52:27+00:00 Wibble - - - - - 2ce8e4cf by David Waern at 2007-02-16T12:09:49+00:00 Add the DocOptions change - - - - - dee4a9b5 by David Waern at 2007-03-06T01:24:48+00:00 Wibble - - - - - 7cb99d18 by David Waern at 2007-03-06T01:24:58+00:00 Change version to 2.0 and executable name to haddock - - - - - c5aa02bc by David Waern at 2007-03-08T15:59:49+00:00 Go back to -B flag - - - - - 3a349201 by David Waern at 2007-03-09T13:31:59+00:00 Better exception handling and parsing of GHC flags - - - - - 05a69b71 by David Waern at 2007-03-09T17:45:44+00:00 Remove commented-out DocEntity printing - - - - - 755032cb by davve at dtek.chalmers.se at 2007-03-23T23:30:20+00:00 Remove a file that shouldn't be here - - - - - a7077e5f by davve at dtek.chalmers.se at 2007-03-24T03:58:48+00:00 Remove an import - - - - - 6f55aa8b by davve at dtek.chalmers.se at 2007-03-25T00:46:48+00:00 Start work on Haddock API - - - - - f0199480 by davve at dtek.chalmers.se at 2007-03-25T00:56:36+00:00 Prettify some comments - - - - - f952f9d1 by davve at dtek.chalmers.se at 2007-03-25T00:56:53+00:00 Remove ppr in HaddockTypes - - - - - bc594904 by davve at dtek.chalmers.se at 2007-03-25T00:57:53+00:00 Remove commented out doc env inference - - - - - 11ebf08d by davve at dtek.chalmers.se at 2007-03-25T01:23:25+00:00 De-flatten the namespace - - - - - f696b4bc by davve at dtek.chalmers.se at 2007-03-25T03:21:48+00:00 Add missing stuff to API - - - - - 9a2a04c3 by davve at dtek.chalmers.se at 2007-03-25T03:22:02+00:00 Wibble - - - - - 7d04a6d5 by davve at dtek.chalmers.se at 2007-03-25T03:22:08+00:00 Avoid a GHC bug with parseStaticFlags [] - - - - - 4d2820ba by davve at dtek.chalmers.se at 2007-03-26T04:57:01+00:00 Add fall-through case to mkExportItem - - - - - 6ebc8950 by Stefan O'Rear at 2007-03-26T04:14:53+00:00 Add shebang line to Setup.lhs - - - - - 80966ec5 by davve at dtek.chalmers.se at 2007-03-26T05:24:26+00:00 Fix stupid compile error - - - - - 1ea1385d by davve at dtek.chalmers.se at 2007-04-05T17:19:56+00:00 Do save/read of interface files properly - - - - - 0e4f6541 by David Waern at 2007-04-10T21:08:36+00:00 Add version to ghc dependency - - - - - b0499b63 by David Waern at 2007-04-10T21:37:08+00:00 Change package name to haddock - - - - - 9d50d27e by David Waern at 2007-04-24T00:22:14+00:00 Use filepath package instead of FilePath - - - - - 87c7fcdf by David Waern at 2007-07-10T21:03:04+00:00 Add new package dependencies - - - - - 4768709c by David Waern at 2007-07-11T20:37:11+00:00 Follow changes to record constructor representation - - - - - b9a02fee by Simon Marlow at 2007-05-30T14:00:48+00:00 update to compile with the latest GHC & Cabal - - - - - c0ebdc01 by David Waern at 2007-07-11T21:35:45+00:00 Fix conflicts - - - - - 97f7afd4 by David Waern at 2007-07-11T21:52:38+00:00 Follow changes to the GHC API - - - - - a5b7b58f by David Waern at 2007-07-12T20:36:48+00:00 Call parseStaticFlags before newSession - - - - - f7f50dbc by David Waern at 2007-08-01T21:52:58+00:00 Better indentation in haddock.cabal - - - - - d84e52ad by David Waern at 2007-08-02T00:08:18+00:00 Wibble - - - - - a23f494a by David Waern at 2007-08-02T00:08:24+00:00 Be better at trying to load all module dependencies (debugging) - - - - - ee917f13 by David Waern at 2007-08-03T18:48:08+00:00 Load all targets explicitly (checkModule doesn't chase dependencies anymore) - - - - - 5182d631 by David Waern at 2007-08-16T16:48:55+00:00 Finalize support for links to other packages - - - - - dfd1e3da by David Waern at 2007-08-16T16:51:11+00:00 Fix haddock comment errors in Haddock.Types - - - - - 50c0d83e by David Waern at 2007-08-16T16:51:37+00:00 Remove a debug import - - - - - d84b7c2b by David Waern at 2007-08-16T17:06:30+00:00 Rename PackageData to HaddockPackage - - - - - 3b52cb9f by David Waern at 2007-08-16T17:09:42+00:00 Simplify some comments - - - - - 66fa68d9 by David Waern at 2007-08-16T17:11:38+00:00 Comment the HaddockPackage definition - - - - - 8674c761 by David Waern at 2007-08-16T17:25:54+00:00 Improve code layout in Main - - - - - 571a3a0b by David Waern at 2007-08-16T17:32:13+00:00 Remove explict module imports in Main - - - - - d31b3cb0 by David Waern at 2007-08-16T17:36:23+00:00 Correct comments - - - - - 7f8a9f2b by David Waern at 2007-08-16T17:39:50+00:00 Fix layout problems in Haddock.Types - - - - - 9f421d7f by David Waern at 2007-08-17T11:16:48+00:00 Move options out of Main into Haddock.Options - - - - - 80042b63 by David Waern at 2007-08-17T11:26:59+00:00 Small comment/layout fixes - - - - - b141b982 by David Waern at 2007-08-17T11:28:28+00:00 Change project name from Haddock-GHC to Haddock - - - - - dbeb4a81 by David Waern at 2007-08-17T11:41:05+00:00 Add top module comment to all files - - - - - ce99cc9e by David Waern at 2007-08-17T14:53:04+00:00 Factor out typechecking phase into Haddock.Typecheck - - - - - 6bf75d9e by David Waern at 2007-08-17T16:55:35+00:00 Factor out package code to Haddock.Packages - - - - - b396db37 by David Waern at 2007-08-29T22:40:23+00:00 Major refactoring - - - - - 3d4f95ee by David Waern at 2007-08-29T23:26:24+00:00 Rename HaddockModule to Interface and a few more refactorings - - - - - c55326db by David Waern at 2007-08-29T23:48:03+00:00 Some comment cleanup - - - - - 9a84fc46 by David Waern at 2007-08-29T23:49:29+00:00 Add some modules that I forgot to add earlier - - - - - 4536dce2 by David Waern at 2007-08-29T23:55:24+00:00 Wibble - - - - - 9b7f0206 by David Waern at 2007-08-30T16:03:29+00:00 Wibble - - - - - c52c050a by David Waern at 2007-08-30T16:30:37+00:00 Rename HaddockModule to Interface - - - - - eae2995f by David Waern at 2007-08-30T16:42:59+00:00 Simplify createInterfaces - - - - - 53f99caa by David Waern at 2007-09-29T00:04:31+00:00 Add build-type: Simple to the cabal file - - - - - 0d3103a8 by David Waern at 2007-09-29T00:04:58+00:00 Add containers and array dependency - - - - - 6acf5f30 by David Waern at 2007-09-29T00:13:36+00:00 Prettify the cabal file - - - - - 87c1e378 by David Waern at 2007-09-29T13:16:39+00:00 FIX: consym data headers with more than two variables - - - - - b67fc16a by David Waern at 2007-09-29T14:01:32+00:00 FIX: prefix types used as operators should be quoted - - - - - a8f925bc by David Waern at 2007-09-29T14:02:26+00:00 Use isSymOcc from OccName instead of isConSym - - - - - fc330701 by David Waern at 2007-09-29T14:15:37+00:00 Use isLexConSym/isLexVarSym from OccName - - - - - e4f3dbad by David Waern at 2007-09-29T15:01:08+00:00 FIX: do not quote varsym type operators - - - - - 402207d2 by David Waern at 2007-09-29T15:01:50+00:00 Wibble - - - - - f9d89ef0 by David Waern at 2007-09-29T15:17:40+00:00 Take care when pp tyvars - add parens on syms - - - - - 849e2a77 by David Waern at 2007-10-01T21:56:39+00:00 Go back to using a ModuleMap instead of LookupMod - fixes a bug - - - - - 549dbac6 by David Waern at 2007-10-02T01:05:19+00:00 Improve parsing of doc options - - - - - a36021b8 by David Waern at 2007-10-02T23:05:00+00:00 FIX: double arrows in constructor contexts - - - - - d03bf347 by David Waern at 2007-10-09T16:14:05+00:00 Add a simple test suite - - - - - c252c140 by David Waern at 2007-10-17T16:02:28+00:00 Add --optghc=.. style flag passing to GHC - - - - - cce6c1b3 by David Waern at 2007-10-18T22:03:20+00:00 Add support for --read-interface again - - - - - 33d059c0 by David Waern at 2007-10-18T22:30:18+00:00 Refactoring -- get rid of Haddock.Packages - - - - - f9ed0a4c by David Waern at 2007-10-18T22:34:36+00:00 Name changes - - - - - 8a1c816f by David Waern at 2007-10-20T14:24:23+00:00 Add --ghc-version option - - - - - 4925aaa1 by David Waern at 2007-10-21T14:34:26+00:00 Add some Outputable utils - - - - - 69e7e47f by David Waern at 2007-10-21T14:35:49+00:00 FIX: Ord for OrdName was not comparing modules - - - - - 5a4ae535 by David Waern at 2007-10-21T21:18:48+00:00 Wibble - - - - - 03d48e20 by David Waern at 2007-10-24T15:52:56+00:00 Remove Main from "other modules" - - - - - c66f6d82 by David Waern at 2007-10-24T16:37:18+00:00 Make it possible to run haddock on itself - - - - - 21d156d8 by David Waern at 2007-10-25T14:02:14+00:00 Don't set boot modules as targets - - - - - f8bcf91c by David Waern at 2007-10-31T22:11:17+00:00 Add optimisation flags - - - - - 7ac758f2 by David Waern at 2007-11-04T09:48:28+00:00 Go back to loading only targets (seems to work now) - - - - - 4862aae1 by David Waern at 2007-11-05T22:24:57+00:00 Do full compilation of modules -- temporary fix for GHC API problem - - - - - 697e1517 by David Waern at 2007-11-05T22:25:50+00:00 Don't warn about not being able to link to wired/system/builtin-names - - - - - 892186da by David Waern at 2007-11-06T00:49:21+00:00 Filter out instances with TyCons that are not exported - - - - - 9548314c by David Waern at 2007-11-06T09:37:14+00:00 Wibble - - - - - 5cafd627 by David Waern at 2007-11-08T01:43:07+00:00 Filter out all non-vanilla type sigs - - - - - 04621830 by David Waern at 2007-11-08T01:45:13+00:00 Synch loading of names from .haddock files with GHC's name cache - - - - - 88d37f77 by David Waern at 2007-11-08T01:46:21+00:00 Remove commented-out code - - - - - 6409c911 by David Waern at 2007-11-08T01:56:00+00:00 Small bugfix and cleanup in getDeclFromTyCls - - - - - af59d9c2 by David Waern at 2007-11-08T02:08:44+00:00 Remove OrdName stuff - - - - - 3a615e2e by David Waern at 2007-11-08T02:13:41+00:00 Update runtests.hs following changes to haddock - - - - - 01f3314e by David Waern at 2007-11-08T02:33:01+00:00 Complain if we can't link to wired-in names - - - - - fcafb5d1 by David Waern at 2007-11-09T02:40:16+00:00 Don't exit when there are no file arguments - - - - - 194bc332 by David Waern at 2007-11-09T02:55:37+00:00 Wibble - - - - - dbe4cb55 by David Waern at 2007-11-09T02:56:14+00:00 Wibble - - - - - 82869fda by David Waern at 2007-11-10T17:01:43+00:00 Introduce InstalledInterface structure and add more stuff to the .haddock files We introduce InstalledInterface capturing the part of Interface that is stored in the interface files. We change the ppHtmlContents and ppHtmllIndex to take this structure instead of a partial Interface. We add stuff like the doc map and exported names to the .haddock file (via InstalledInterface). - - - - - d6bb57bf by David Waern at 2007-11-10T17:19:48+00:00 FIX: contents and index should include external package modules when --gen-contents/--gen-index - - - - - e8814716 by David Waern at 2007-11-11T00:29:27+00:00 Remove lDocLinkName and its use in Html backend - - - - - 6f9bd702 by David Waern at 2007-11-11T00:50:57+00:00 Do some refactoring in the html backend This also merges an old patch by Augustsson: Wed Jul 12 19:54:36 CEST 2006 lennart.augustsson at credit-suisse.com * Print type definitions like signatures if given arrows. - - - - - 09d0ce24 by Malcolm.Wallace at 2006-07-20T13:13:57+00:00 mention HsColour in the docs, next to option flags for linking to source code - - - - - 24da6c34 by Malcolm.Wallace at 2006-07-20T13:14:50+00:00 change doc references to CVS to give darcs repository location instead - - - - - 74d52cd6 by David Waern at 2007-11-11T00:55:33+00:00 Update copyright - - - - - fcaa3b4f by Duncan Coutts at 2006-09-08T13:41:00+00:00 Eliminate dep on network by doing a little cut'n'paste haddock depending on the network causes a circular dependency at least if you want to build the network lib with haddock docs. - - - - - 10cc9bda by David Waern at 2007-11-11T02:09:41+00:00 Fix conflicts - - - - - 4e3acd39 by David Waern at 2007-11-11T02:21:19+00:00 Manual merge of a patch from Duncan Coutts that removes the dependency on mtl - - - - - fa9070da by Neil Mitchell at 2006-09-29T15:52:03+00:00 Do not generate an empty table if there are no exports, this fixes a <table></table> tag being generated, which is not valid HTML 4.01 - - - - - d7431c85 by David Waern at 2007-11-11T02:28:50+00:00 Fix conflicts - - - - - f87e8f98 by Simon Marlow at 2006-10-10T11:37:16+00:00 changes for 0.8 - - - - - db929565 by Simon Marlow at 2006-10-10T12:07:12+00:00 fix the name of the source file - - - - - 8220aa4b by Simon Marlow at 2006-10-11T14:17:37+00:00 Rename haddock.js to haddock-util.js haddock.js will be run automatically by Windows when you type 'haddock' if it is found on the PATH, so rename to avoid confusion. Spotted by Adrian Hey. - - - - - 6bccdaa1 by sven.panne at 2006-10-12T15:28:23+00:00 Cabal's sdist does not generate "-src.tar.gz" files, but ".tar.gz" ones - - - - - d3f3fc19 by Simon Marlow at 2006-12-06T16:05:07+00:00 add todo item for --maintainer - - - - - 2da7e269 by Simon Marlow at 2006-12-15T15:52:00+00:00 TODO: do something better about re-exported symbols from another package - - - - - 42d85549 by David Waern at 2007-11-11T02:30:59+00:00 Fix conflicts - - - - - 5e7ef6e5 by Neil Mitchell at 2007-01-11T15:41:15+00:00 Never do spliting index files into many - - - - - f3d4aebe by Neil Mitchell at 2007-01-11T17:07:09+00:00 Add searching on the index page - - - - - bad3ab66 by Neil Mitchell at 2007-01-11T18:17:46+00:00 Delete dead code, now there is only one index page - - - - - cd09eedb by Neil Mitchell at 2007-01-11T18:21:19+00:00 Delete more stuff that is no longer required - - - - - e2806646 by David Waern at 2007-11-11T02:41:53+00:00 Fix conflicts - - - - - a872a823 by Neil Mitchell at 2007-01-11T18:51:43+00:00 Make the index be in case-insensitive alphabetic order - - - - - 8bddd9d7 by Neil Mitchell at 2007-02-06T17:49:12+00:00 Do not create empty tables for data declarations which don't have any constructors, instances or comments. Gets better HTML 4.01 compliance - - - - - 036b8120 by David Waern at 2007-11-11T02:56:58+00:00 Fix conflicts - - - - - f50c1639 by Conal Elliott at 2007-02-14T21:54:00+00:00 added substitution %{FILE///c} - - - - - 402e166a by David Waern at 2007-11-11T03:35:46+00:00 Manual merge of old patch: Sat Apr 21 04:36:43 CEST 2007 Roberto Zunino <zunrob at users.sf.net> * URL expansion for %%, %L, %{LINE} - - - - - 2f264fbd by David Waern at 2007-11-11T03:40:33+00:00 Manual merge of an old patch: Thu Apr 19 20:23:40 CEST 2007 Wolfgang Jeltsch <g9ks157k at acme.softbase.org> * bug fix When Haddock was invoked with the --ignore-all-exports flag but the ignore-exports module attribute wasn't used, hyperlinks weren't created for non-exported names. This fix might not be as clean as one would wish (since --ignore-all-exports now results in ignore_all_exports = True *and* an additional OptIgnoreExports option for every module) but at least the bug seems to be resolved now. - - - - - 7d7ae106 by sven.panne at 2007-09-02T12:18:02+00:00 Install LICENSE in the correct place - - - - - 66eaa924 by David Waern at 2007-11-11T19:02:46+00:00 Fix a bug that made haddock loop - - - - - 4ed47b58 by David Waern at 2007-11-11T19:03:09+00:00 Rename java-script file (this wasn't merge correctly) - - - - - d569534a by David Waern at 2007-11-11T19:06:44+00:00 Don't require -B <ghc-libdir> when no argument files Change readInterfaceFile to take a Maybe Session, to avoid having to pass -B <ghc-libdir> to Haddock when there're no source files to process. This is nice when computing contents/index for external packages. - - - - - 373368bc by Neil Mitchell at 2007-01-11T18:22:44+00:00 Change from tabs to spaces in the ppHtmlIndex function - - - - - 6b063a77 by Neil Mitchell at 2007-01-12T12:17:46+00:00 Rewrite much of the index searching code, previously was too slow to execute on the base library with IE, the new version guarantees less than O(log n) operations be performed, where n is the number in the list (before was always O(n)) - - - - - bfad00b7 by David Waern at 2007-11-11T23:33:53+00:00 Fix conflicts - - - - - cd2dcc09 by Neil Mitchell at 2007-01-12T12:25:01+00:00 Make the max number of results 75 instead of 50, to allow map searching in the base library to work - - - - - 3ae74764 by Neil Mitchell at 2007-01-12T12:58:17+00:00 Make the search box in a form so that enter does the default search - - - - - 142103e5 by David Waern at 2007-11-12T00:03:18+00:00 Merge patch from the old branch: Fri Aug 31 13:21:45 CEST 2007 Duncan Coutts <duncan at haskell.org> * Add category: Development to .cabal file Otherwise it appears on the hackage website in the "Unclassified" category. - - - - - 22ec2ddb by David Waern at 2007-11-25T01:55:29+00:00 A a list of small improvements to the TODO file - - - - - eb0129f4 by Wolfgang Jeltsch at 2007-12-03T23:47:55+00:00 addition of type equality support (at least for HTML generation) - - - - - 816a7e22 by David Waern at 2007-12-08T15:46:26+00:00 Handle class operators correctly when rendering predicates - - - - - 68baaad2 by David Waern at 2007-12-08T16:15:54+00:00 Code layout changes - - - - - 09b77fb4 by David Waern at 2007-12-08T16:16:03+00:00 Handle infix operators correctly in the Type -> HsType translation - - - - - 31c36da2 by David Waern at 2007-12-08T16:24:27+00:00 Add ppLParendTypes/ppLParendType - - - - - b17cc818 by David Waern at 2007-12-08T16:26:12+00:00 Use ppParendType when printing types args in predicates - - - - - ffd1f2cf by David Waern at 2007-12-08T16:45:06+00:00 Fix rendering of instance heads to handle infix operators This is also a refactoring to share this code for rendering predicates. - - - - - ff886d45 by David Waern at 2007-12-08T17:27:46+00:00 Fix rendering of class operators - - - - - e2fcbb9e by David Waern at 2007-12-08T17:59:28+00:00 Fix a bug (use ppTyName instead of ppName to print names in type apps) - - - - - 79a1056e by David Waern at 2007-12-08T21:25:18+00:00 Update tests - - - - - 867741ac by David Waern at 2007-12-08T21:25:49+00:00 Give a diff on test failure - - - - - 7e5eb274 by David Waern at 2008-01-05T14:33:45+00:00 Add DrIFT commands - - - - - 3656454d by David Waern at 2008-01-05T20:26:00+00:00 Add "cabal-version: >= 1.2" to the cabal file - - - - - 77974efc by Simon Marlow at 2007-12-20T09:52:44+00:00 add an item - - - - - f6ac1708 by Simon Marlow at 2007-12-06T14:00:10+00:00 Source links must point to the original module, not the referring module - - - - - eda1d5c9 by David Waern at 2008-01-06T14:40:52+00:00 Manual merge of a patch to the 0.8 branch Thu Dec 6 15:00:10 CET 2007 Simon Marlow <simonmar at microsoft.com> * Source links must point to the original module, not the referring module - - - - - 378f4085 by David Waern at 2008-01-06T16:03:45+00:00 Change stability from stable to experimental - - - - - 8bdafe44 by David Waern at 2008-01-06T16:14:22+00:00 Add haskell.vim (it had been removed somehow) - - - - - ea34d02e by David Waern at 2008-01-06T16:36:57+00:00 Change version to 2.0.0.0 - - - - - 34631ac0 by David Waern at 2008-01-06T16:44:57+00:00 Add missing modules to the cabal file - - - - - 9e142935 by David Waern at 2008-01-06T17:25:42+00:00 Depend on ghc >= 6.8.2 && < 6.9 - - - - - 59f9eeaa by Simon Marlow at 2007-12-20T10:43:04+00:00 add build scripts - - - - - 1c29ae30 by Simon Marlow at 2007-12-20T10:47:07+00:00 update version number - - - - - fe16a3e4 by Simon Marlow at 2007-12-20T10:48:03+00:00 update version - - - - - f688530f by Simon Marlow at 2007-12-20T10:48:29+00:00 doc updates - - - - - ce71b611 by David Waern at 2008-01-07T13:46:32+00:00 Change version in docs and spec - - - - - 03ab8d6f by David Waern at 2008-01-07T13:47:38+00:00 Manually merge over changes to CHANGES for 0.9 - - - - - 39f1b042 by David Waern at 2008-01-07T15:17:41+00:00 Remove the -use-package flag, we don't support it anyway - - - - - 7274a544 by David Waern at 2008-01-07T15:33:05+00:00 Update CHANGES for 2.0.0.0 - - - - - 96594f5d by David Waern at 2008-01-07T15:46:49+00:00 Wibble - - - - - f4c5a4c4 by David Waern at 2008-01-07T15:55:36+00:00 Change url to repo in documentation - - - - - 8a4c77f0 by David Waern at 2008-01-07T16:00:54+00:00 Update CHANGES - - - - - cb3a9288 by David Waern at 2008-01-07T16:02:55+00:00 Documentation fix - - - - - d8e45539 by David Waern at 2008-01-07T16:12:00+00:00 Update docs to say that Haddock accets .lhs files and module names - - - - - 4b5ce824 by David Waern at 2008-01-07T16:12:25+00:00 Document -B option - - - - - 47274262 by David Waern at 2008-01-07T16:23:07+00:00 Update CHANGES - - - - - 7ff314a9 by David Waern at 2008-01-07T16:23:20+00:00 Remove --use-package, --package & --no-implicit.. flags from docs - - - - - 6c3819c0 by David Waern at 2008-01-07T16:23:52+00:00 Remove --no-implicit-prelide flag - - - - - 1b14ae40 by David Waern at 2008-01-07T16:32:26+00:00 Update the "Using literate or pre-processed source" section - - - - - 0117f620 by David Waern at 2008-01-07T16:41:55+00:00 Document the --optghc flag - - - - - 087ab1cf by David Waern at 2008-01-07T16:42:10+00:00 Remove the documenation section on derived instances The problem mentioned there doesn't exist in Haddock 2.0.0.0 - - - - - 7253951e by David Waern at 2008-01-07T16:48:40+00:00 Document OPTIONS_HADDOCK - - - - - 3b6bdcf6 by David Waern at 2008-01-07T16:56:54+00:00 Wibble - - - - - 3025adf9 by David Waern at 2008-01-07T17:08:14+00:00 Wibble - - - - - 5f30f1a0 by David Waern at 2008-01-07T17:15:44+00:00 Change synopsis field to description - - - - - 1673f54b by David Waern at 2008-01-07T17:18:21+00:00 Change my email address in the cabal file - - - - - 55aa9808 by David Waern at 2008-01-07T18:18:02+00:00 Add documentation for readInterfaceFile - - - - - eaea417f by David Waern at 2008-01-07T18:21:30+00:00 Export necessary stuff from Distribution.Haddock - - - - - 7ea18759 by David Waern at 2008-01-07T18:31:49+00:00 Remove dep on Cabal - - - - - 7b79c74e by David Waern at 2008-01-07T18:33:49+00:00 Remove dep on process - - - - - ce3054e6 by David Waern at 2008-01-16T23:01:21+00:00 Add feature-requsts from Henning Thielemann to TODO - - - - - 0c08f1ec by David Waern at 2008-01-16T23:03:02+00:00 Record a bug in TODO - - - - - b04605f3 by David Waern at 2008-01-23T16:59:06+00:00 Add a bug reported by Ross to TODO - - - - - 5b17c030 by David Waern at 2008-01-23T18:05:53+00:00 A a bug report to TODO - - - - - 1c993b0d by David Waern at 2008-01-25T16:30:25+00:00 Accept test output - - - - - c22fc0d0 by David Waern at 2008-01-25T16:34:49+00:00 Accept test output - - - - - 4b795811 by David Waern at 2008-01-25T16:38:37+00:00 Change Hidden.hs (test) to use OPTIONS_HADDOCK - - - - - c124dbd9 by David Waern at 2008-01-25T16:39:23+00:00 Accept test output - - - - - ec6f6eea by David Waern at 2008-01-25T16:42:08+00:00 Add Hidden.html.ref to tests - - - - - 1dc9610c by David Waern at 2008-02-02T20:50:51+00:00 Add a comment about UNPACK bug in TODO - - - - - 2d3f7081 by David Waern at 2008-02-09T22:33:24+00:00 Change the representation of DocNames Ross Paterson reported a bug where links would point to the defining module instead of the "best" module for an identifier (e.g Int pointing to GHC.Base instead of Data.Int). This patch fixes this problem by refactoring the way renamed names are represented. Instead of representing them by: > data DocName = Link Name | NoLink Name they are now represented as such: > data DocName = Documented Name Module | Undocumented Name and the the link-env looks like this: > type LinkEnv = Map Name Module There are several reasons for this. First of all, the bug was caused by changing the module part of Names during the renaming process, without changing the Unique field. This caused names to be overwritten during the loading of .haddock files (which caches names using the NameCache of the GHC session). So we might create new Uniques during renaming to fix this (but I'm not sure that would be problem-free). Instead, we just keep the Name and add the Module where the name is best documented, since it can be useful to keep the original Name around (for e.g. source-code location info and for users of the Haddock API). Also, the names Link/NoLink don't really make sense, since wether to use links or not is entirely up to the users of DocName. In the process of following this change into H.Backends.Html I removed the assumption that binder names are Undocumented (which was just an unnecessary assumption, the OccName is the only thing needed to render these). This will probably make it possible to get rid of the renamer and replace it with a traversal from SYB or Uniplate. Since DocName has changed, InterfaceFile has changed so this patch also increments the file-format version. No backwards-compatibility is implemented. - - - - - 0f28c921 by David Waern at 2008-02-09T23:00:36+00:00 H.GHC.Utils: remove unused imports/exports - - - - - 0c44cad5 by David Waern at 2008-02-10T00:28:13+00:00 H.GHC.Utils: add some functions that were removed by mistake - - - - - e3452f49 by David Waern at 2008-02-10T00:28:48+00:00 Fix some trivial warnings in H.InterfaceFile - - - - - a6d74644 by David Waern at 2008-02-10T00:48:06+00:00 Update the version message to fit in small terminals - - - - - 76c9cd3e by David Waern at 2008-02-10T14:47:39+00:00 Remove bugs from TODO that don't apply anymore since the port - - - - - 5e10e090 by David Waern at 2008-02-10T15:22:47+00:00 Remove bugs from TODO that weren't actual bugs - - - - - fef70878 by David Waern at 2008-02-10T15:23:44+00:00 Remove yet another item from TODO that was not an actual bug - - - - - e1af47b8 by David Waern at 2008-02-11T10:25:57+00:00 Bump the version number to 2.1.0 Since the exported datatype DocName has changed, we need to bump the major version number. Let's also drop the fourth version component, it's not that useful. - - - - - e3be7825 by David Waern at 2008-04-11T14:29:04+00:00 Add a bug to TODO - - - - - cb6574be by David Waern at 2008-04-11T16:00:45+00:00 Use the in-place haddock when running tests - - - - - c6d7af0d by David Waern at 2008-04-11T16:09:16+00:00 Turn off GHC warnings when running tests - - - - - 7f61b546 by David Waern at 2008-04-11T17:24:00+00:00 Add a flag for turning off all warnings - - - - - 883b8422 by David Waern at 2008-04-12T14:02:18+00:00 Fix printing of data binders - - - - - 2a0db8fc by David Waern at 2008-04-12T18:52:46+00:00 Fix missing parenthesis in constructor args bug - - - - - 1b3ac3f9 by David Waern at 2008-04-12T18:57:23+00:00 Simplify test suite and add tests I move all tests into one single directory to simplify things, and add a test for the last bug that was fixed. - - - - - 8f178376 by David Waern at 2008-04-12T19:00:15+00:00 Add a script for copying test output to "expected" output - - - - - 193e3a03 by David Waern at 2008-04-12T19:16:37+00:00 Remove two fixed bugs from TODO - - - - - ddc9130c by David Waern at 2008-04-12T19:37:06+00:00 Update test README - - - - - 956069c0 by David Waern at 2008-05-01T12:16:14+00:00 Update version number in spec and docs - - - - - 5478621c by David Waern at 2008-05-01T12:28:12+00:00 Remove claim of backwards compatibility from docs for readInterfaceFile - - - - - 4a16dea9 by David Waern at 2008-05-01T12:33:04+00:00 Update CHANGES - - - - - 804216fb by David Waern at 2008-05-01T12:43:16+00:00 Add a synopsis - - - - - fd0c84d5 by David Waern at 2008-05-01T12:44:44+00:00 Add Haddock.DocName to the cabal file - - - - - 9f4a7439 by David Waern at 2008-05-01T12:45:53+00:00 Remove -fglasgow-exts and -fasm - - - - - aee7c145 by David Waern at 2008-05-01T12:54:01+00:00 Add LANGUAGE pragmas to source files - - - - - 9a58428b by David Waern at 2008-05-01T12:54:19+00:00 Add extensions to cabal file - - - - - 494f1bee by David Waern at 2008-05-01T13:12:09+00:00 Export DocName in the API - - - - - c938196b by David Waern at 2008-05-01T13:12:19+00:00 Add hide options to some source files - - - - - 236e86af by Neil Mitchell at 2008-06-07T20:45:10+00:00 Rewrite the --hoogle flag support - - - - - 6d910950 by Neil Mitchell at 2008-06-14T10:56:50+00:00 Simplify the newtype/data outputting in Hoogle, as haddock does it automatically - - - - - f87a95a8 by Neil Mitchell at 2008-06-14T12:10:18+00:00 Add initial structure for outputting documentation as well, but does not yet output anything - - - - - 7c3bce54 by Neil Mitchell at 2008-06-14T12:27:07+00:00 Remove <document comment> from the Hoogle output - - - - - 9504a325 by Neil Mitchell at 2008-06-16T06:33:21+00:00 Default to "main" if there is no package, otherwise will clobber hoogle's hoogle info - - - - - 4a794a79 by Neil Mitchell at 2008-06-16T06:53:29+00:00 Change packageName to packageStr, as it better reflects the information stored in it - - - - - 7abc9baf by Neil Mitchell at 2008-06-16T07:09:49+00:00 Add modulePkgInfo to Haddock.GHC.Utils, which gives back package name and version info - - - - - 8ca11514 by Neil Mitchell at 2008-06-16T07:13:48+00:00 Change Hoogle to take the package name and package version separately - - - - - a6da452d by Neil Mitchell at 2008-06-18T11:29:46+00:00 In Hoogle do not list things that are not local to this module - - - - - 974b76b7 by David Waern at 2008-06-19T18:40:13+00:00 Be more consistent with GHC API naming in H.GHC.Utils - - - - - 2facb4eb by David Waern at 2008-06-19T19:03:03+00:00 Update test output - - - - - c501de72 by David Waern at 2008-06-26T20:26:49+00:00 Use ghc-paths to get the lib dir The path can still be overridden using the -B flag. It's not longer required to pass the lib dir to the program that runs the test suite. - - - - - ac4c6836 by David Waern at 2008-06-26T20:33:08+00:00 Update CHANGES - - - - - 9d21c60a by David Waern at 2008-06-26T20:34:53+00:00 Update README - - - - - 741448f0 by David Waern at 2008-06-26T21:12:57+00:00 Improve wording in the help message - - - - - b1b42b11 by David Waern at 2008-06-30T10:16:17+00:00 Rename ForeignType - - - - - 6d6c2b34 by David Waern at 2008-06-30T10:25:09+00:00 Rename TyFamily - - - - - 8d1125ed by David Waern at 2008-06-30T10:37:21+00:00 Rename type patterns - - - - - 7610a4cb by David Waern at 2008-06-30T10:45:07+00:00 Rename associated types - - - - - 8eeba14c by David Waern at 2008-06-30T10:47:41+00:00 Remove the TODO file now that we have a trac - - - - - 1af5b25b by David Waern at 2008-07-02T18:19:28+00:00 Render type family declarations (untested) - - - - - ceb99797 by David Waern at 2008-07-02T18:24:06+00:00 Remove redundant check for summary when rendering data types - - - - - b36a58e0 by David Waern at 2008-07-02T22:01:38+00:00 More support for type families and associated types Now we just need to render the instances - - - - - 78784879 by David Waern at 2008-07-07T22:13:58+00:00 Remove filtering of instances We were filtering out all instances for types with unknown names. This was probably an attempt to filter out instances for internal types. I am removing the filtering for the moment, and will try to fix this properly later. - - - - - 3e758dad by David Waern at 2008-06-30T18:50:30+00:00 Run haddock in-place during testing - - - - - d9dab0ce by David Waern at 2008-07-08T21:04:32+00:00 Remove index.html and doc-index.html from output, they should not be versioned - - - - - 3e6c4681 by David Waern at 2008-07-08T21:06:42+00:00 Update test output following change to instance filtering - - - - - e34a3f14 by David Waern at 2008-07-12T16:48:28+00:00 Stop using the map from exported names to declarations During creation of the interface, we were using two maps: one from exported names to declarations, and one from all defined names in the module to declarations. The first contained subordinate names while the second one didn't. The first map was never used to look up names not defined in the associated module, so if we add subordinate names to the second map, we could use it everywhere. That's that this patch does. This simplifies code because we don't have to pass around two maps everywhere. We now store the map from locally defined things in the interface structure instead of the one from exported names. - - - - - 2e1d2766 by David Waern at 2008-07-12T16:55:21+00:00 Get the all locally defined names from GHC API We previously had some code to compute all locally defined names in a module including subordinate names. We don't need it since we can get the names from modInfoTyThings in the GHC API. - - - - - bf637994 by David Waern at 2008-07-13T13:09:16+00:00 Refactoring in H.Interface.Create We were creating a doc map, a declaration map and a list of entities separately by going through the HsGroup. These structures were all used to build the interface of a module. Instead of doing this, we can start by creating a list of declarations from the HsGroup, then collect the docs directly from this list (instead of using the list of entities), creating a documentation map. We no longer need the Entity data type, and we can store a single map from names to declarations and docs in the interface, instead of the declaration map and the doc map. This way, there is only one place where we filter out the declarations that we don't want, and we can remove a lot of code. Another advantage of this is that we can create the exports directly out of the list of declarations when we export the full module contents. (Previously we did a look up for each name to find the declarations). This is faster and removes another point where we depend on names to identify exported declarations, which is good because it eliminates problems with instances (which don't have names). - - - - - 547e410e by David Waern at 2008-07-13T13:34:51+00:00 Remove FastString import and FSLIT macro in H.I.Create -- they were unused - - - - - 693759d1 by David Waern at 2008-07-13T13:36:23+00:00 Remove unused import from H.I.Create - - - - - cde6e7fb by David Waern at 2008-07-13T13:51:54+00:00 Small touches - - - - - 96de8f1d by David Waern at 2008-07-20T11:21:46+00:00 Preparation for rendering instances as separate declarations We want to be able to render instances as separate declarations. So we remove the Name argument of ExportDecl, since instances are nameless. This patch also contains the first steps needed to gather type family instances and display them in the backend, but the implementation is far from complete. Because of this, we don't actually show the instances yet. - - - - - b0f824fb by David Waern at 2008-07-20T15:53:08+00:00 Follow changes to ExportDecl in Hoogle - - - - - 1192eff3 by Neil Mitchell at 2008-06-26T00:28:10+00:00 Change how the Hoogle backend outputs classes, adding the context in - - - - - 7a0d1464 by Neil Mitchell at 2008-06-26T00:28:46+00:00 Remove the indent utility function from Hoogle backend - - - - - 3361241b by Neil Mitchell at 2008-06-26T09:45:09+00:00 Add support for Hoogle writing ForeignImport/ForeignExport properly - - - - - 795ad3bf by Neil Mitchell at 2008-06-26T12:15:25+00:00 Flesh out the Hoogle code to render documentation - - - - - 23277995 by Neil Mitchell at 2008-06-26T14:56:41+00:00 Fix a bug in the Hoogle backend, unordered lists were being written out <ul>...</u> - - - - - db739b27 by Neil Mitchell at 2008-06-26T15:09:54+00:00 Remove any white space around a <li> element - - - - - f2e6bb8c by Neil Mitchell at 2008-07-10T15:30:47+00:00 Remove the TODO in the Hoogle HTML generation, was already done - - - - - 693ec9a3 by Neil Mitchell at 2008-07-10T15:53:00+00:00 Put brackets round operators in more places in the Hoogle output - - - - - 842313aa by Neil Mitchell at 2008-07-10T16:01:25+00:00 Print type signatures with brackets around the name - - - - - cf93deb0 by David Waern at 2008-07-20T17:04:22+00:00 Bump version number to 2.2.0 - - - - - 30e6a8d1 by David Waern at 2008-07-20T17:04:41+00:00 Resolve conflicts in H.B.Hoogle - - - - - 1f0071c9 by David Waern at 2008-07-23T23:05:01+00:00 Add "all" command to runtests.hs that runs all tests despite failures - - - - - f2723023 by David Waern at 2008-07-23T23:08:39+00:00 Update tests/README - - - - - c0304a11 by David Waern at 2008-07-23T23:21:15+00:00 Be compatible with GHC 6.8.3 The cabal file is converted to use the "new" syntax with explicit Library and Executable sections. We define the __GHC_PATCHLEVEL__ symbol using a conditinal cpp-options field in the cabal file. (Ideally, Cabal would define the symbol for us, like it does for __GLASGOW_HASKELL__). We use these symbols to #ifdef around a small difference between 6.8.2 and 6.8.3. Previously, we only supported GHC 6.8.2 officially but the dependencies field said "ghc <= 6.9". This was just for convenience when testing against the (then compatible) HEAD version of GHC, and was left in the release by mistake. Now, we support both GHC 6.8.2 and 6.8.3 and the dependencies field correctly reflects this. - - - - - 88a5fe71 by David Waern at 2008-07-23T23:54:16+00:00 Depend on the currently available ghc-paths versions only - - - - - 8738d97b by David Waern at 2008-07-24T10:50:44+00:00 FIX haskell/haddock#44: Propagate parenthesis level when printing documented types - - - - - 05339119 by David Waern at 2008-07-24T16:06:18+00:00 Drop unnecessary parenthesis in types, put in by the user We were putting in parenthesis were the user did. Let's remove this since it just clutters up the types. The types are readable anyway since we print parens around infix operators and do not rely on fixity levels. When doing this I discovered that we were relying on user parenthesis when printin types like (a `O` b) c. This patchs fixes this problem so that parenthesis are always inserted around an infix op application in case it is applied to further arguments, or if it's an arguments to a type constructor. Tests are updated. - - - - - b3a99828 by David Waern at 2008-07-24T10:19:43+00:00 Print parenthesis around non-atomic banged types Fixes half of haskell/haddock#44 - - - - - ab5238e0 by David Waern at 2008-07-24T22:07:49+00:00 Add a reference file for the TypeFamilies test - - - - - 1941cc11 by David Waern at 2008-07-25T17:15:53+00:00 Simplify definition of pretty and trace_ppr - - - - - e3bfa33c by David Waern at 2008-07-25T17:18:27+00:00 Warning messages Output a warning when filtering out data/type instances and associated types in instances. We don't show these in the documentation yet, and we need to let the user know. - - - - - 9b85fc89 by David Waern at 2008-07-25T17:45:40+00:00 Doc: Mention Hoogle in the Introduction - - - - - afb2dd60 by David Waern at 2008-07-25T17:49:00+00:00 Doc: update -B description - - - - - 584c0c91 by David Waern at 2008-07-25T18:11:38+00:00 Doc: describe -w flag - - - - - 77619c24 by David Waern at 2008-07-28T12:29:07+00:00 Remove TODO from cabal file - - - - - 96717d5f by David Waern at 2008-07-28T12:29:27+00:00 Support type equality predicates - - - - - c2fd2330 by David Waern at 2008-07-29T19:45:14+00:00 Move unL from H.B.Hoogle to H.GHC.Utils I like Neil's shorter unL better than unLoc from the GHC API. - - - - - c4c3bf6a by David Waern at 2008-07-29T19:47:36+00:00 Do not export ATs when not in list of subitems - - - - - bf9a7b85 by David Waern at 2008-08-03T11:42:59+00:00 Filter out ForeignExports - - - - - df59fcb0 by David Waern at 2008-08-03T14:02:51+00:00 Filter out more declarations The previous refactorings in H.I.Create introduced a few bugs. Filtering of some types of declarations that we don't handle was removed. This patch fixes this. - - - - - 2f8a958b by David Waern at 2008-08-03T15:24:07+00:00 Move reL to H.GHC.Utils so we can use it everywhere - - - - - 8ec15efd by David Waern at 2008-08-03T15:25:00+00:00 Use isVanillaLSig from GHC API instead of home brewn function - - - - - 300f93a2 by David Waern at 2008-08-03T15:25:27+00:00 Filter out separately exported ATs This is a quick and dirty hack to get rid of separately exported ATs. We haven't decided how to handle them yet. No warning message is given. - - - - - 8776d1ec by David Waern at 2008-08-03T16:21:21+00:00 Filter out more declarations and keep only vanilla type sigs in classes - - - - - ea07eada by David Waern at 2008-08-03T16:48:00+00:00 Fix layout - - - - - dd5e8199 by David Waern at 2008-08-03T16:50:52+00:00 Move some utility functions from H.I.Create to H.GHC.Utils - - - - - 4a1dbd72 by David Waern at 2008-08-03T17:39:55+00:00 Do not filter out doc declarations - - - - - 0bc8dca4 by David Waern at 2008-08-03T17:47:26+00:00 Filter out separately exported ATs (take two) - - - - - af970fe8 by David Waern at 2008-08-03T22:39:17+00:00 Update CHANGES - - - - - 5436ad24 by David Waern at 2008-08-03T22:40:20+00:00 Bump version number to 2.2.1 - - - - - d66de448 by David Waern at 2008-08-05T19:00:32+00:00 Remove version restriction on ghc-paths - - - - - 534b1364 by David Waern at 2008-08-05T19:04:35+00:00 Bump version to 2.2.2 and update CHANGES - - - - - 549188ff by David Waern at 2008-08-05T19:16:49+00:00 Fix CHANGES - - - - - 0d156bb4 by Luke Plant at 2008-08-11T15:20:59+00:00 invoking haddock clarification and help - - - - - 748295cc by David Waern at 2008-08-11T18:56:37+00:00 Doc: say that the --hoogle option is functional - - - - - 43301db4 by David Waern at 2008-08-05T19:26:08+00:00 Change ghc version dependency to >= 6.8.2 - - - - - 3e5a53b6 by David Waern at 2008-08-10T22:42:05+00:00 Make H.GHC.Utils build with GHC HEAD - - - - - 7568ace0 by David Waern at 2008-08-11T19:41:54+00:00 Import Control.OldException instead of C.Exception when using ghc >= 6.9 We should really test for base version instead, but I don't currently know which version to test for. - - - - - b71ae991 by David Waern at 2008-08-12T22:40:39+00:00 Make our .haddock file version number depend on the GHC version We need to do this, since our .haddock format can potentially change whenever GHC's version changes (even when only the patchlevel changes). - - - - - 6307ce3f by David Waern at 2008-08-12T22:49:57+00:00 Remove matching on NoteTy in AttachInstances, it has been removed - - - - - 2dbcfd5f by David Waern at 2008-08-12T23:02:02+00:00 Comment out H.GHC.loadPackages - it is unused and doesn't build with ghc >= 6.9 - - - - - c74db5c2 by David Waern at 2008-08-12T23:03:58+00:00 Hide <.> from GHC import in Hoogle only for ghc <= 6.8.3 - - - - - 69a44ebb by David Waern at 2008-08-12T23:11:12+00:00 Follow changes to parseDynamic/StaticFlags - - - - - 5881f3f0 by David Waern at 2008-08-13T21:43:58+00:00 Add __GHC_PATCHLEVEL__ symbol also when building the library - - - - - 8574dc11 by David Waern at 2008-08-13T21:44:17+00:00 Follow move of package string functions from PackageConfig to Module - - - - - c9baa77f by David Waern at 2008-08-13T21:45:29+00:00 Follow extensible exceptions changes - - - - - 9092de15 by David Waern at 2008-08-13T21:46:20+00:00 Update test following Haddock version change - - - - - ebe569a4 by David Waern at 2008-08-13T21:46:54+00:00 Follow changes to parseDynamic- parseStaticFlags in GHC - - - - - b8a5ffd3 by David Waern at 2008-08-13T21:47:36+00:00 Follow changes to Binary in GHC 6.9 - - - - - edfda1cc by David Waern at 2008-08-13T21:50:17+00:00 Change ghc version dependency to >= 6.8.2 && <= 6.9 - - - - - d59be1cf by Neil Mitchell at 2008-08-12T16:02:53+00:00 Output all items, even if they are not defined in this module - ensures map comes from Prelude, not just GHC.Base - - - - - dda93b9f by Neil Mitchell at 2008-08-12T21:37:32+00:00 Add support for type synonyms to Hoogle, was accidentally missing before (woops!) - - - - - b6ee795c by Neil Mitchell at 2008-08-13T14:03:24+00:00 Generalise Hoogle.doc and add a docWith - - - - - 415e1bb2 by Neil Mitchell at 2008-08-13T14:03:46+00:00 Make Hoogle add documentation to a package - - - - - 790a1202 by Neil Mitchell at 2008-08-18T12:52:43+00:00 Use the same method to put out signatures as class methods in the Hoogle backend - - - - - ded37eba by Neil Mitchell at 2008-08-18T12:53:04+00:00 Remove Explicit top-level forall's when pretty-printing signatures - - - - - 6468c722 by Neil Mitchell at 2008-08-20T07:59:13+00:00 Simplify the code by removing not-to-important use of <.> in the Hoogle back end - - - - - 788c3a8b by Neil Mitchell at 2008-08-21T18:20:24+00:00 In the hoogle back end, markup definition lists using <i>, not <b> - - - - - 77d4b000 by Ian Lynagh at 2008-08-14T10:49:14+00:00 Add a Makefile for GHC's build system. Still won't work yet, but we're closer - - - - - 920440d7 by Ian Lynagh at 2008-08-27T18:06:46+00:00 Add haddock.wrapper - - - - - bcda925f by Ian Lynagh at 2008-08-27T18:07:02+00:00 Add a manual Cabal flag to control the ghc-paths dependency - - - - - 04d194e2 by Ian Lynagh at 2008-08-27T20:41:27+00:00 Update extensions in Cabal file Use ScopedTypeVariables instead of PatternSignatures - - - - - 12480043 by Ian Lynagh at 2008-08-27T20:41:55+00:00 Increase the upper bound on the GHC version number - - - - - b1f809a5 by Ian Lynagh at 2008-08-27T21:32:22+00:00 Fix some warnings - - - - - aea0453d by Ian Lynagh at 2008-08-28T14:22:29+00:00 Fixes for using haddock in a GHC build tree - - - - - ad23bf86 by Ian Lynagh at 2008-08-28T21:14:27+00:00 Don't use Cabal wrappers on Windows - - - - - 35858e4c by Ian Lynagh at 2008-08-29T00:07:42+00:00 Fix in-tree haddock on Windows - - - - - c2642066 by Ian Lynagh at 2008-09-03T22:35:53+00:00 follow library changes - - - - - 2eb55d50 by Ian Lynagh at 2008-09-07T18:52:51+00:00 bindist fixes - - - - - 3daa5b59 by Ian Lynagh at 2008-09-10T16:58:18+00:00 We need to tell haddock that its datasubdir is . or it can't find package.conf - - - - - 388fd8c2 by Ian Lynagh at 2008-09-10T19:47:44+00:00 Fix haddock inplace on Windows - - - - - 70a641c1 by Ian Lynagh at 2008-09-10T22:15:44+00:00 Fix installed haddock on Windows - - - - - 83c1e997 by Neil Mitchell at 2008-09-11T10:48:55+00:00 Import GHC.Paths if not IN_GHC_TREE, seems to match the use of GHC.Paths functions much better - - - - - b452519b by Ian Lynagh at 2008-09-12T12:58:24+00:00 Add a LANGUAGE ForeignFunctionInterface pragma - - - - - afbd592c by Ian Lynagh at 2008-09-12T12:59:13+00:00 Wibble imports - - - - - 547ac4ad by Ian Lynagh at 2008-09-14T15:34:22+00:00 Add a "#!/bin/sh" to haddock.wrapper - - - - - f207a807 by Ian Lynagh at 2008-09-15T10:02:32+00:00 Use "exec" when calling haddock in the wrapper - - - - - 2ee68509 by Thomas Schilling at 2008-09-15T09:09:16+00:00 Port Haddock.Interface to new GHC API. This required one bigger change: 'readInterfaceFile' used to take an optional 'Session' argument. This was used to optionally update the name cache of an existing GHC session. This does not work with the new GHC API, because an active session requires the function to return a 'GhcMonad' action, but this is not possible if no session is provided. The solution is to use an argument of functions for reading and updating the name cache and to make the function work for any monad that embeds IO, so it's result type can adapt to the calling context. While refactoring, I tried to make the code a little more self-documenting, mostly turning comments into function names. - - - - - 3bb96431 by Thomas Schilling at 2008-09-15T09:09:37+00:00 Reflect GHC API changes. - - - - - 2e60f714 by Thomas Schilling at 2008-09-15T09:10:37+00:00 Port Haddock.GHC.Typecheck to new GHC API. - - - - - 9cfd4cff by Thomas Schilling at 2008-09-15T09:11:00+00:00 Port Haddock.GHC to new GHC API. - - - - - caffa003 by Thomas Schilling at 2008-09-15T09:11:25+00:00 Port Main to new GHC API. - - - - - 069a4608 by Ian Lynagh at 2008-09-21T11:19:00+00:00 Fix paths used on Windows frmo a GHC tree: There is no whare directory - - - - - 7ceee1f7 by Ian Lynagh at 2008-09-21T12:20:16+00:00 Fix the in-tree haddock on Windows - - - - - 0d486514 by Ian Lynagh at 2008-09-23T18:06:58+00:00 Increase the GHC upper bound from 6.11 to 6.13 - - - - - f092c414 by Neil Mitchell at 2008-09-11T14:56:07+00:00 Do not wrap __ in brackets - - - - - 036bdd13 by Ian Lynagh at 2008-09-28T01:42:35+00:00 Fix building haddock when GhcProfiled=YES - - - - - 01434a89 by David Waern at 2008-09-24T20:24:21+00:00 Add PatternSignatures LANGUAGE pragma to Main and Utils - - - - - 1671a750 by David Waern at 2008-10-02T22:57:25+00:00 For source links, get original module from declaration name instead of environment. Getting it from the environment must have been a remnant from the times when we were using unqualified names (versions 0.x). - - - - - a25dde99 by David Waern at 2008-10-02T22:59:57+00:00 Remove ifaceEnv from Interface - it's no longer used - - - - - 610993da by David Waern at 2008-10-02T23:04:58+00:00 Write a comment about source links for type instance declarations - - - - - 5a96b5d5 by Thomas Schilling at 2008-10-03T10:45:08+00:00 Follow GHC API change of parseModule. - - - - - 5a943ae5 by Ian Lynagh at 2008-10-03T15:56:58+00:00 TAG 2008-10-03 - - - - - 76cdd6ae by Thomas Schilling at 2008-10-08T12:29:50+00:00 Only load modules once when typechecking with GHC. This still doesn't fix the memory leak since the typechecked source is retained and then processed separately. To fix the leak, modules must be processed directly after typechecking. - - - - - 7074d251 by David Waern at 2008-10-09T23:53:54+00:00 Interleave typechecking with interface creation At the same time, we fix a bug where the list of interfaces were processed in the wrong order, when building the links and renaming the interfaces. - - - - - 4b9b2b2d by David Waern at 2008-10-09T23:54:49+00:00 Add some strictness annotations in Interface We add some strictness annotations to the fields of Interface, so that less GHC data is hold on to during processing. - - - - - 22035628 by David Waern at 2008-10-10T20:02:31+00:00 Remove typecheckFiles and MonadUtils import from H.GHC.Typeccheck - - - - - be637ad3 by David Waern at 2008-10-10T20:33:38+00:00 Make Haddock build with GHC 6.8.2 - - - - - 523b3404 by David Waern at 2008-10-10T21:08:09+00:00 Fix documentation for createInterfaces - - - - - e1556702 by David Waern at 2008-10-10T21:26:19+00:00 Hide H.Utils in library - - - - - a8e751c3 by David Waern at 2008-10-10T21:34:59+00:00 Add back .haddock file versioning based on GHC version It was accidentally removed in the patch for GHC 6.8.2 compatibility - - - - - 06fb3c01 by David Waern at 2008-10-10T21:47:15+00:00 Bump version number to 2.3.0 - - - - - ff087fce by David Waern at 2008-10-10T22:35:49+00:00 Add support for DocPic The support for DocPic was merged into the GHC source long ago, but the support in Haddock was forgotten. Thanks Peter Gavin for submitting this fix! - - - - - 3af85bf6 by David Waern at 2008-10-10T23:34:05+00:00 Update tests - - - - - 0966873c by Simon Marlow at 2008-10-10T14:43:04+00:00 no need for handleErrMsg now, we don't throw any ErrMsgs - - - - - f1870de3 by Clemens Fruhwirth at 2008-10-10T13:29:36+00:00 Compile with wrapper but remove it for dist-install - - - - - 7b440dc2 by David Waern at 2008-10-11T14:02:25+00:00 Remove interface from LinksInfo It was there to know the documentation home module when creating a wiki link, but we already know this since we have the DocName. - - - - - e5729e6a by David Waern at 2008-10-15T20:49:18+00:00 Wibble - - - - - b2a8e01a by David Waern at 2008-10-15T21:03:36+00:00 Use type synonyms for declarations and docs in H.I.Create - - - - - be71a15b by David Waern at 2008-10-15T21:12:17+00:00 Comment out unused type family stuff completely - - - - - 91aaf075 by David Waern at 2008-10-15T21:49:04+00:00 Wibble - - - - - 42ba4eb4 by David Waern at 2008-10-15T21:53:53+00:00 Move convenient type synonym to H.Types - - - - - db11b723 by David Waern at 2008-10-15T22:14:07+00:00 Add DeclInfo to H.Types - - - - - 193552b6 by David Waern at 2008-10-15T22:15:01+00:00 Add subordinates with docs to the declaration map The only place in the code where we want the subordinates for a declaration is right after having looked up the declaration in the map. And since we include subordinates in the map, we might as well take the opportunity to store those subordinates that belong to a particular declaration together with that declaration. We also store the documentation for each subordinate. - - - - - 31e6eebc by David Waern at 2008-10-16T17:18:47+00:00 Wibble - - - - - 0dcbd79f by David Waern at 2008-10-16T20:58:42+00:00 Fix haskell/haddock#61 We were not getting docs for re-exported class methods. This was because we were looking up the docs in a map made from the declarations in the current module being rendered. Obviously, re-exported class methods come from another module. Class methods and ATs were the only thing we were looking up using the doc map, everything else we found in the ExporItems. So now I've put subordinate docs in the ExportItem's directly, to make things a bit more consistent. To do this, I added subordinates to the the declarations in the declaration map. This was easy since we were computing subordinates anyway, to store stand-alone in the map. I added a new type synonym 'DeclInfo', which is what we call what is now stored in the map. This little refactoring removes duplicate code to retrieve subordinates and documentation from the HsGroup. - - - - - de47f20a by David Waern at 2008-10-16T22:06:35+00:00 Document function and improve its layout - - - - - e74e625a by Thomas Schilling at 2008-10-20T11:12:57+00:00 Force interface more aggressively. For running Haddock on GHC this reduces memory usage by about 50 MB on a 32 bit system. A heap profile shows total memory usage peak at about 100 MB, but actual usage is at around 300 MB even with compacting GC (+RTS -c). - - - - - b63ac9a1 by David Waern at 2008-10-20T20:25:50+00:00 Make renamer consistent Instead of explicitly making some binders Undocumented, treat all names the same way (that is, try to find a Documented name). - - - - - f6de0bb0 by Ian Lynagh at 2008-09-19T00:54:43+00:00 TAG GHC 6.10 fork - - - - - 74599cd0 by David Waern at 2008-10-20T21:13:24+00:00 Do not save hidden modules in the .haddock file We were saving interfaces of all processed modules including those hidden using {-# OPTIONS_HADDOCK hide #-} in the .haddock file. This caused broken links when generating the index for the libraries that come with GHC. This patch excludes modules with hidden documentation when writing .haddock files. It should fix the above problem. - - - - - 7b6742e9 by David Waern at 2008-10-21T19:54:52+00:00 Do not save hidden modules in the .haddock file (also for ghc >= 6.9) When writing the first patch, I forgot to do the fix in both branches of an #if macro. - - - - - b99b1951 by David Waern at 2008-10-22T20:04:18+00:00 Remove subordinate map and its usage It is not needed now that we store subordinate names in the DeclInfo map. - - - - - da97cddc by David Waern at 2008-10-22T20:11:46+00:00 Tidy up code in H.I.Create a little Remove commented out half-done type instance support, and remove DeclWithDoc synonym. - - - - - 6afa76f3 by David Waern at 2008-10-22T21:17:29+00:00 Fix warnings in H.GHC.Utils - - - - - 171ea1e8 by David Waern at 2008-10-22T21:35:04+00:00 Fix warnings in H.Utils - - - - - c8cb3b91 by David Waern at 2008-10-22T21:36:49+00:00 Wibble - - - - - 767fa06a by David Waern at 2008-10-27T19:59:04+00:00 Make named doc comments into ExportDoc instead of ExportDecl Fixes a crash when processing modules without export lists containing named docs. - - - - - e638bbc6 by David Waern at 2008-11-02T22:21:10+00:00 Add HCAR entry - - - - - 92b4ffcf by David Waern at 2008-11-02T22:44:19+00:00 Update CHANGES - - - - - 84d4da6e by David Waern at 2008-11-03T11:25:04+00:00 Add failing test for template haskell crash - - - - - 2a9cd2b1 by David Waern at 2008-11-04T21:13:44+00:00 Add tests/TH.hs - - - - - 8a59348e by David Waern at 2008-11-04T21:30:26+00:00 TAG 2.3.0 - - - - - 54f70d31 by Thomas Schilling at 2008-10-24T17:04:08+00:00 Enable framed view of the HTML documentation. This patch introduces: - A page that displays the documentation in a framed view. The left side will show a full module index. Clicking a module name will show it in the right frame. If Javascript is enabled, the left side is split again to show the modules at the top and a very short synopsis for the module currently displayed on the right. - Code to generate the mini-synopsis for each module and the mini module index ("index-frames.html"). - CSS rules for the mini-synopsis. - A very small amount of javascript to update the mini-synopsis (but only if inside a frame.) Some perhaps controversial things: - Sharing code was very difficult, so there is a small amount of code duplication. - The amount of generated pages has been doubled, since every module now also gets a mini-synopsis. The overhead should not be too much, but I haven't checked. Alternatively, the mini-synopsis could also be generated using Javascript if we properly annotate the actual synopsis. - - - - - 5d7ea5a6 by David Waern at 2008-11-04T23:20:17+00:00 Follow change to ExportDecl in frames code - - - - - 60e16308 by David Waern at 2008-11-04T23:35:26+00:00 Update CHANGES - - - - - d63fd26d by David Waern at 2008-11-04T23:37:43+00:00 Bump version number - - - - - c1660c39 by David Waern at 2008-11-04T23:44:46+00:00 Update CHANGES - - - - - 995ab384 by David Waern at 2008-11-04T23:55:21+00:00 Remove .ref files from tests/output/ - - - - - 1abbbe75 by David Waern at 2008-11-04T23:57:41+00:00 Output version info before running tests - - - - - 649b182f by David Waern at 2008-11-05T22:45:37+00:00 Add ANNOUNCE message - - - - - c36ae0bb by David Waern at 2008-11-05T23:15:35+00:00 Update ANNOUNCE - - - - - 9c4f3d40 by David Waern at 2008-11-05T23:18:30+00:00 Wibble - - - - - 5aac87ce by David Waern at 2008-11-06T21:07:48+00:00 Depend on base 4.* when using GHC >= 6.9, otherwise 3.* - - - - - b9796a74 by David Waern at 2008-11-06T21:13:40+00:00 Bump version to 2.4.1 and update CHANGES - - - - - d4b26baa by David Waern at 2008-11-06T21:26:33+00:00 Depend on base 4.0.* instead of 4.* - - - - - 2cb0903c by David Waern at 2008-11-06T21:46:53+00:00 Fix warnings in H.B.HH and H.B.HH2 - - - - - e568e89a by David Waern at 2008-11-06T21:47:12+00:00 Fix warnings in Haddock.ModuleTree - - - - - 9dc14fbd by David Waern at 2008-11-06T21:47:52+00:00 Fix warnings in Haddock.Version - - - - - 02ac197c by David Waern at 2008-11-06T21:51:31+00:00 Fix warnings in H.InterfaceFile and H.Options - - - - - 63e7439a by David Waern at 2008-11-06T21:59:45+00:00 Fix warnings in H.GHC.Typecheck - - - - - 4bca5b68 by David Waern at 2008-11-08T13:43:42+00:00 Set HscTarget to HscNothing instead of HscAsm There used to be a bug in the GHC API that prevented us from setting this value. - - - - - 07357aec by David Waern at 2008-11-09T22:27:00+00:00 Re-export NameCache and friends from Distribution.Haddock - - - - - ea554b5a by David Waern at 2008-11-09T23:14:10+00:00 Add Haddock.GHC.Utils to other-modules in library - - - - - 74aecfd7 by David Waern at 2008-11-10T01:18:57+00:00 Export DocName in the library - - - - - 241a58b3 by David Waern at 2008-11-10T01:19:18+00:00 Document the functions in H.DocName - - - - - edc2ef1b by David Waern at 2008-11-10T01:20:52+00:00 Export H.DocName in the library - - - - - 4f588d55 by David Waern at 2008-11-10T01:29:14+00:00 Make DocName an instance of NamedThing - - - - - b4647244 by David Waern at 2008-11-15T22:58:18+00:00 Reflect version bump in test suite - - - - - 4bee8ce2 by David Waern at 2008-11-15T22:58:45+00:00 Update tests For unknown reasons, test output for Bug1 and Test has changed for the better. - - - - - 1690e2f9 by David Waern at 2008-11-15T22:59:33+00:00 Store hidden modules in .haddock files We store documentation for an entity in the 'InstalledInterface' of the definition site module, and never in the same structure for a module which re-exports the entity. So when a client of the Haddock library wants to look up some documentation, he/she might need to access a hidden module. But we currently don't store hidden modules in the .haddock files. So we add the hidden modules and the Haddock options to the .haddock files. The options will be used to filter the module list to obtain the visible modules only, which is necessary for generating the contents and index for installed packages. - - - - - 8add6435 by David Waern at 2008-11-16T14:35:50+00:00 Bump major version number due to .haddock file format change - - - - - 48bfcf82 by David Waern at 2008-11-23T14:32:52+00:00 Update tests to account for version number bump - - - - - 0bbd1738 by David Waern at 2008-11-23T14:33:31+00:00 HADDOCK_DATA_DIR changed to haddock_datadir - - - - - 5088b78c by David Waern at 2008-11-23T17:13:21+00:00 FIX haskell/haddock#45: generate two anchors for each name We generate two anchor tags for each name, one where we don't escape the name and one where we URI-encode it. This is for compatibility between IE and Opera. Test output is updated. - - - - - 5ee5ca3b by Neil Mitchell at 2008-11-27T14:38:11+00:00 Drop HsDocTy annotations, they mess up pretty printing and also have a bracketing bug (#2584) - - - - - 51c014e9 by Roman Cheplyaka at 2008-11-27T22:27:36+00:00 Allow referring to a specific section within a module in a module link Fixes haskell/haddock#65 - - - - - 4094bdc5 by David Waern at 2008-11-28T21:13:33+00:00 Update tests following anchor change - - - - - f89552dd by Thomas Schilling at 2008-11-29T16:16:20+00:00 Haddock really shouldn't try to overwrite files. - - - - - 98127499 by David Waern at 2008-12-07T14:09:15+00:00 Solve conflict - - - - - 319356c5 by David Waern at 2008-10-22T21:16:55+00:00 Add -Wall -Werror to ghc-options - - - - - 3c4968c9 by David Waern at 2008-11-04T23:38:56+00:00 TAG 2.4.0 - - - - - 4b21e003 by David Waern at 2008-11-06T21:14:04+00:00 TAG 2.4.1 - - - - - 8e0cad5c by David Waern at 2008-12-07T14:12:54+00:00 Remove -Werror - - - - - 299d6deb by David Waern at 2008-12-07T14:25:18+00:00 Remove -Wall, we'll focus on warnings after 6.10.2 is out - - - - - 5f4216b6 by David Waern at 2008-12-07T20:58:05+00:00 Resolve conflict properly - - - - - 67d774e7 by Neil Mitchell at 2008-12-15T11:44:26+00:00 Make forall's in constructors explicit, i.e. data Foo = Foo {foo :: Eq a => a} - - - - - 61851792 by Neil Mitchell at 2008-12-18T15:39:39+00:00 Try and find a better package name than "main" for Hoogle, goes wrong when working on an executable rather than a library - - - - - 2fab8554 by David Waern at 2008-12-08T23:19:48+00:00 Make visible names from ExportItems Instead of a complicated calculation of visible names out of GHC's export items, we can get them straight out of the already calculated ExportItems. The ExportItems should represent exactly those items that are visible in an interface. If store all the exported sub-names in ExportDecl instead of only those with documentation, the calculation becomes very simple. So we do this change as well (should perhaps have been a separate patch). This should fix the problem with names from ghc-prim not appearing in the link environment. - - - - - 7caadd8c by Ian Lynagh at 2008-12-11T17:01:04+00:00 Wrap the GHC usage with defaultCleanupHandler This fixes a bug where haddock leaves /tmp/ghc* directories uncleaned. - - - - - 7c9fc9a5 by David Waern at 2009-01-02T21:38:27+00:00 Show re-exported names from external packages again This fixes GHC ticket 2746. In order to also link to the exported subordinate names of a declaration, we need to re-introduce the sub map in the .haddock files. - - - - - 119e4e05 by David Waern at 2009-01-06T23:34:17+00:00 Do not process boot modules We should of course not try to produce documentation for boot modules! The reason this has worked in the past is that the output of "real" modules overwrites the output of boot modules later in the process. However, this causes a subtle link environment problem. So let's get rid of this stupid behaviour. We avoid processing boot modules, but we continue to typecheck them. - - - - - c285b9d2 by David Waern at 2009-01-08T18:03:36+00:00 Export modules also when coming from external packages This seems to have regressed since a refactoring that was part of the 2.3.0 release. - - - - - 24031c17 by David Waern at 2009-01-10T15:26:26+00:00 Change version to 2.4.2 - no need to go to 2.5.0 - - - - - 864d1c3f by David Waern at 2009-01-10T15:35:20+00:00 Update tests to account for version number change - - - - - 524ba886 by David Waern at 2009-01-10T18:29:17+00:00 Add test for Template Haskell splicing - - - - - 05e6e003 by David Waern at 2009-01-10T19:35:42+00:00 Fix Trac haskell/haddock#68: Turn on compilation via C for Template Haskell packages We can't use HscNothing if we need to run code coming from modules inside the processed package during typechecking, which is the case for some packages using Template Haskell. This could be improved, to e.g. use HscInterpreted and HscNothing where possible, instead of using HscC for all modules in the package. - - - - - 2b2bafa1 by David Waern at 2009-01-10T20:22:25+00:00 Only use needsTemplateHaskell when compiling with GHC 6.10.2 or above - - - - - bedc3a93 by Ian Lynagh at 2009-01-11T14:58:41+00:00 Fix the location of INPLACE_PKG_CONF; fixes the build Spotted by Conal Elliott - - - - - 943107c8 by David Waern at 2009-01-20T19:27:39+00:00 Document H.I.Create.collectDocs better - - - - - c6252e37 by David Waern at 2009-01-20T19:29:51+00:00 Fix Trac haskell/haddock#59: TH-generated declarations disappearing This patch was contributed by Joachim Breitner (nomeata). - - - - - 3568a6af by David Waern at 2009-01-21T21:41:48+00:00 Do not indicate that a constructor argument is unboxed We only show the strictness annotation for an unboxed constructor argument. The fact that it is unboxed is an implementation detail and should not be part of the module interface. - - - - - 562a4523 by David Waern at 2009-01-22T18:53:49+00:00 Fix Trac haskell/haddock#50: do not attach docs to pragmas or other kinds of non-declarations We now filter out everything that is not a proper Haskell declaration before collecting the docs and attaching them to declarations. - - - - - 6fdf21c2 by David Waern at 2009-01-22T19:48:09+00:00 Add test for quasi quotation. No reference output yet. - - - - - dc4100fd by David Waern at 2009-01-22T19:57:47+00:00 Improve quasi-quotation test and add reference output - - - - - 908b74bb by David Waern at 2009-01-23T23:22:03+00:00 Filter out separately exported associated types in a smarter way - - - - - f6b42ecb by David Waern at 2009-01-24T16:54:39+00:00 Correct spelling mistake in error message - - - - - 24e4245d by David Waern at 2009-01-24T17:48:03+00:00 Correct comment - - - - - b5e8462f by David Waern at 2009-02-07T13:22:29+00:00 Do not show a subordinate at the top level if its parent is also exported See note in the source code for more info. - - - - - 4b09de57 by David Waern at 2009-02-07T13:53:53+00:00 Update test following change to top level subordinates - - - - - 76379896 by David Waern at 2009-02-07T13:58:04+00:00 Remove html files in the tests/output/ directory which have been accidentally added - - - - - 1a6d8b10 by Joachim Breitner at 2009-02-20T10:29:43+00:00 Typo in comment - - - - - fec367d0 by David Waern at 2009-02-24T20:21:17+00:00 Fix small bug The rule is to prefer type constructors to other things when an identifier in a doc string can refer to multiple things. This stopped working with newer GHC versions (due to a tiny change in the GHC renamer). We implement this rule in the HTML backend for now, instead of fixing it in GHC, since we will move renaming of doc strings to Haddock in the future anyway. - - - - - 9b4172eb by David Waern at 2009-02-25T20:04:38+00:00 Fix bad error handling with newer GHCs When support for GHC 6.10 was added, an error handler was installed only around the typechecking phase. This had the effect that errors thrown during dependency chasing were caught in the top-level exception handler and not printed with enough detail. With this patch we wrap the error handler around all our usage of the Ghc monad. - - - - - de2df363 by Simon Peyton Jones at 2009-02-02T16:47:42+00:00 Hide funTyConName, now exported by TypeRep - - - - - 4d40a29f by Ian Lynagh at 2009-02-12T18:57:49+00:00 Don't build the library when building in the GHC tree - - - - - 1cd0abe4 by Ian Lynagh at 2009-02-13T13:58:53+00:00 Add a ghc.mk - - - - - 3d814eeb by Ian Lynagh at 2009-02-13T18:50:28+00:00 do .depend generation for haddock with the stage1 compiler This is a bit of a hack. We mkdepend with stage1 as if .depend depends on the stage2 compiler then make goes wrong: haddock's .depend gets included, which means that make won't reload until it's built, but we can't build it without the stage2 compiler. We therefore build the stage2 compiler before its .depend file is available, and so compilation fails. - - - - - b55036a4 by Ian Lynagh at 2009-02-25T01:38:13+00:00 Give haddock a wrapper on unix in the new GHC build system - - - - - 9eabfe68 by Ian Lynagh at 2009-02-25T19:21:32+00:00 Create inplace/lib/html in the new GHC build system - - - - - 93af30c7 by Ian Lynagh at 2008-11-07T19:18:23+00:00 TAG GHC 6.10.1 release - - - - - 06e6e34a by Thomas Schilling at 2009-02-24T18:11:00+00:00 Define __GHC_PATCHLEVEL__ for recent version of GHC (stable). - - - - - 680e6ed8 by Thomas Schilling at 2009-02-24T18:12:26+00:00 'needsTemplateHaskell' is not defined in current stable GHC. - - - - - 6c5619df by David Waern at 2009-02-25T22:15:23+00:00 Hide fynTyConName only for recent GHC versions - - - - - 6b2344f1 by Ian Lynagh at 2009-02-26T00:49:56+00:00 Add the module to one of haddocks warnings - - - - - e5d11c70 by David Waern at 2009-02-27T21:37:20+00:00 Bug fix We tried to filter out subordinates that were already exported through their parent. This didn't work properly since we were in some cases looking at the grand-parent and not the parent. We now properly compute all the parent-child relations of a declaration, and use this information to get the parent of a subordinate. We also didn't consider record fields with multiple parents. This is now handled correctly. We don't currently support separately exported associated types. But when we do, they should be handled correctly by this process too. Also slightly improved the warning message that we give when filtering out subordinates. - - - - - 10a79a60 by David Waern at 2009-02-27T22:08:08+00:00 Fix error message conflict The module name is already written in the beginning of the message, as seems to be the convention in Haddock. Perhaps not so clear, but we should change it everywhere in that case. Leaving it as it is for now. - - - - - c5055c7f by David Waern at 2009-02-27T22:15:17+00:00 Shorten warning message - - - - - a72fed3a by David Waern at 2009-02-28T00:53:55+00:00 Do not show package name in warning message - - - - - a5daccb2 by Ian Lynagh at 2009-03-01T14:59:35+00:00 Install haddock in the new GHC build system - - - - - dfdb025c by Ian Lynagh at 2009-03-07T23:56:29+00:00 Relax base dependency to < 4.2, not < 4.1 - - - - - 5769c8b4 by David Waern at 2009-03-21T14:58:52+00:00 Bump .haddock file version number (due to change of format) - - - - - f1b8f67b by David Waern at 2009-03-21T14:59:26+00:00 Define __GHC_PATCHLEVEL__=1 when using ghc-6.10.1 - - - - - 23f78831 by David Waern at 2009-03-21T16:40:52+00:00 Update CHANGES - - - - - 7d2735e9 by David Waern at 2009-03-21T16:50:33+00:00 Update ANNOUNCE - - - - - 0771e00a by David Waern at 2009-03-21T16:54:40+00:00 Update ANNOUNCE, again - - - - - 81a6942a by David Waern at 2009-03-21T17:50:06+00:00 Don't be too verbose in CHANGES - - - - - 29861dcf by David Waern at 2009-03-21T18:03:31+00:00 TAG 2.4.2 - - - - - a585f285 by David Waern at 2009-03-21T19:20:29+00:00 Require Cabal >= 1.2.3 - - - - - 7c611662 by David Waern at 2009-03-21T19:21:48+00:00 TAG 2.4.2 with cabal-version >= 1.2.3 - - - - - 23b7deff by Simon Marlow at 2009-03-20T15:43:42+00:00 new GHC build system: use shell-wrappers macro - - - - - 25f8afe7 by Ian Lynagh at 2009-03-21T19:13:53+00:00 Fix (with a hack?) haddock in teh new build system - - - - - 6a29a37e by David Waern at 2009-03-24T22:10:15+00:00 Remove unnecessary LANGUAGE pragma - - - - - 954da57d by David Waern at 2009-03-24T22:21:23+00:00 Fix warnings in H.B.DevHelp - - - - - 1619f1df by David Waern at 2009-03-26T23:20:44+00:00 -Wall police in H.B.Html - - - - - b211e13b by Simon Marlow at 2009-03-24T13:00:56+00:00 install Haddock's html stuff - - - - - 78e0b107 by David Waern at 2008-12-07T19:58:53+00:00 Add verbosity flag and utils, remove "verbose" flag - - - - - 913dae06 by David Waern at 2008-12-07T20:01:05+00:00 Add some basic "verbose" mode logging in H.Interface - - - - - 1cbff3bf by David Waern at 2009-03-27T00:07:26+00:00 Fix conflicts - - - - - 22f82032 by David Waern at 2009-03-27T21:15:11+00:00 Remove H.GHC.Typecheck - - - - - 81557804 by David Waern at 2009-03-27T21:19:22+00:00 Remove docNameOrig and use getName everywhere instead - - - - - d8267213 by David Waern at 2009-03-27T21:21:46+00:00 Use docNameOcc instead of nameOccName . getName - - - - - 5d55deab by David Waern at 2009-03-27T21:33:04+00:00 Remove H.DocName and put DocName in H.Types - - - - - 8ba72611 by David Waern at 2009-03-27T22:06:26+00:00 Document DocName - - - - - 605f8ca5 by David Waern at 2009-03-27T22:45:21+00:00 -Wall police - - - - - e4da93ae by David Waern at 2009-03-27T23:12:53+00:00 -Wall police in H.B.Hoogle - - - - - bb255519 by David Waern at 2009-03-27T23:41:28+00:00 Define Foldable and Traversable instances for Located - - - - - f1195cfe by David Waern at 2009-03-27T23:51:34+00:00 Wibble - - - - - 23818d7c by David Waern at 2009-03-28T00:03:55+00:00 -Wall police in H.I.Rename - - - - - 0f050d67 by David Waern at 2009-03-28T00:15:15+00:00 -Wall police in H.I.AttachInstances - - - - - 0f3fe038 by David Waern at 2009-03-28T21:09:41+00:00 Wibble - - - - - 275d4865 by David Waern at 2009-03-28T21:27:06+00:00 Layout fix - - - - - 54ff0ef8 by David Waern at 2009-03-28T21:59:07+00:00 -Wall police in H.I.Create - - - - - 7f58b117 by David Waern at 2009-03-28T22:10:19+00:00 -Wall police in H.Interface - - - - - f0c03b44 by David Waern at 2009-03-28T22:22:59+00:00 -Wall police in Main - - - - - 29da355c by David Waern at 2009-03-28T22:23:39+00:00 Turn on -Wall -Werror - - - - - 446d3060 by David Waern at 2009-04-01T20:40:30+00:00 hlint police - - - - - 3867c9fc by David Waern at 2009-04-01T20:48:42+00:00 hlint police - - - - - bd1f1600 by David Waern at 2009-04-01T20:58:02+00:00 hlint police - - - - - e0e90866 by David Waern at 2009-04-05T12:42:53+00:00 Move H.GHC.Utils to H.GhcUtils - - - - - 9cbd426b by David Waern at 2009-04-05T12:57:21+00:00 Remove Haddock.GHC and move its (small) contents to Main - - - - - b5c2cbfd by David Waern at 2009-04-05T13:07:04+00:00 Fix whitespace and stylistic issues in Main - - - - - 3c04aa56 by porges at 2008-12-07T08:22:19+00:00 add unicode output - - - - - 607918da by David Waern at 2009-04-26T15:09:43+00:00 Resolve conflict - - - - - 4bec6b6b by Simon Marlow at 2009-05-13T10:00:31+00:00 fix markup - - - - - 436ad6f4 by Simon Marlow at 2009-03-23T11:54:45+00:00 clean up - - - - - bdcd1398 by Simon Marlow at 2009-03-24T10:36:45+00:00 new GHC build system: add $(exeext) - - - - - 9c0972f3 by Simon Marlow at 2009-03-24T11:04:31+00:00 update for new GHC build system layout - - - - - d0f3f83a by Ian Lynagh at 2009-03-29T15:31:43+00:00 GHC new build system fixes - - - - - 5a8245c2 by Ian Lynagh at 2009-04-04T20:44:23+00:00 Tweak new build system - - - - - 9c6f2d7b by Simon Marlow at 2009-05-13T10:01:27+00:00 add build instructions for GHC - - - - - 66d07c76 by Ian Lynagh at 2009-05-31T00:37:53+00:00 Quote program paths in ghc.mk - - - - - bb7de2cd by Ian Lynagh at 2009-06-03T22:57:55+00:00 Use a bang pattern on an unlifted binding - - - - - 3ad283fc by Ian Lynagh at 2009-06-13T16:17:50+00:00 Include haddock in GHC bindists - - - - - ac447ff4 by David Waern at 2009-06-24T21:07:50+00:00 Delete Haddock.Exception and move contents to Haddock.Types Only a few lines of code that mainly declares a type - why not just put it in Haddock.Types. - - - - - 4464fb9b by David Waern at 2009-06-24T22:23:23+00:00 Add Haddock module headers Add a proper Haddock module header to each module, with a more finegrained copyright. If you feel mis-accreditted, please correct any copyright notice! The maintainer field is set to haddock at projects.haskell.org. Next step is to add a brief description to each module. - - - - - 5f4c95dd by David Waern at 2009-06-24T22:39:44+00:00 Fix spelling error - - - - - 6d074cdb by David Waern at 2009-06-25T21:53:56+00:00 Document Interface and InstalledInterface better - - - - - d0cbd183 by David Waern at 2009-06-27T12:46:46+00:00 Remove misplaced whitespace in H.I.Rename - - - - - fa381c49 by David Waern at 2009-06-27T13:26:03+00:00 Fix haskell/haddock#104 - create output directory if missing - - - - - 91fb77ae by Ian Lynagh at 2009-06-25T15:59:50+00:00 TAG 2009-06-25 - - - - - 0d853f40 by Simon Peyton Jones at 2009-07-02T15:35:22+00:00 Follow extra field in ConDecl - - - - - b201735d by Ian Lynagh at 2009-07-05T16:50:35+00:00 Update Makefile for the new GHC build system - - - - - df6c0092 by Ian Lynagh at 2009-07-05T17:01:13+00:00 Resolve conflicts - - - - - 1066870a by Ian Lynagh at 2009-07-05T17:01:48+00:00 Remove the -Wwarn hack in the GHC build system - - - - - 7e856076 by Ian Lynagh at 2009-07-05T17:17:59+00:00 Fix warnings - - - - - 5d4cd958 by Ian Lynagh at 2009-07-05T19:35:40+00:00 Bump version number Cabal needs to distinguish between haddocks having a --verbose and --verbosity flag - - - - - 6ee07c99 by David Waern at 2009-07-06T20:14:57+00:00 Wibble - - - - - 2308b66f by David Waern at 2009-07-06T20:24:20+00:00 Clearer printing of versions by runtests.hs - - - - - d4b5d9ab by David Waern at 2009-07-06T21:22:42+00:00 Fix (invisible) bug introduced by unicode patch - - - - - 2caca8d8 by David Waern at 2009-07-06T21:44:10+00:00 Use HscAsm instead of HscC when using TH - - - - - 18f3b755 by David Waern at 2009-07-06T22:10:22+00:00 Update HCAR entry (by Janis) - - - - - a72ac9db by David Waern at 2009-07-06T23:01:35+00:00 Follow HsRecTy change with an #if __GLASGOW_HASKEL__ >= 611 - - - - - 549135d2 by David Waern at 2009-07-06T23:11:41+00:00 Remove unused functions from Haddock.Utils - - - - - b450134a by Isaac Dupree at 2009-07-11T14:59:00+00:00 revert to split-index for large indices - remove the search-box, because browsers have search-for-text abilities anyway. - pick 150 items in index as the arbitrary time at which to split it - notice the bug that identifiers starting with non-ASCII characters won't be listed in split-index, but don't bother to fix it yet (see ticket haskell/haddock#116, http://trac.haskell.org/haddock/ticket/116 ) - - - - - 78a5661e by Isaac Dupree at 2009-07-20T15:37:18+00:00 Implement GADT records in HTML backend - - - - - 4e163555 by Isaac Dupree at 2009-07-21T22:03:25+00:00 add test for GADT records - - - - - 79aa4d6e by David Waern at 2009-07-23T20:40:37+00:00 Update test suite following version bump - - - - - 5932c011 by David Waern at 2009-08-02T10:25:39+00:00 Fix documentation bug - - - - - a6970fca by David Waern at 2009-08-12T23:08:53+00:00 Remove support for ghc 6.8.* from .cabal file - - - - - c1695902 by Ian Lynagh at 2009-07-07T13:35:45+00:00 Fix unused import warnings - - - - - fb6df7f9 by Ian Lynagh at 2009-07-16T00:20:31+00:00 Use cProjectVersion directly rather than going through compilerInfo Fixes the build after changes in GHC - - - - - 548cdd66 by Simon Marlow at 2009-07-28T14:27:04+00:00 follow changes in GHC's ForeignType - - - - - 9395aaa0 by David Waern at 2009-08-13T22:17:33+00:00 Switch from PatternSignatures to ScopedTypeVariables in Main - - - - - eebf39bd by David Waern at 2009-08-14T17:14:28+00:00 Version .haddock files made with GHC 6.10.3/4 correclty - - - - - 58f3e735 by David Waern at 2009-08-14T17:19:37+00:00 Support GHC 6.10.* and 6.11.* only - - - - - 5f63cecc by David Waern at 2009-08-14T22:03:20+00:00 Do not version .haddock file based on GHC patchlevel version We require that the instances of Binary that we use from GHC will not change between patchlevel versions. - - - - - d519de9f by David Waern at 2009-08-14T23:50:00+00:00 Update CHANGES - - - - - 35dccf5c by David Waern at 2009-08-14T23:51:38+00:00 Update version number everywhere - - - - - 6d363fea by David Waern at 2009-08-15T09:46:49+00:00 Update ANNOUNCE - - - - - c7ee6bc2 by David Waern at 2009-08-15T09:47:13+00:00 Remove -Werror Forgot that Hackage doesn't like it. - - - - - a125c12b by David Waern at 2009-08-15T09:49:50+00:00 Require Cabal >= 1.6 - - - - - adb2f560 by Isaac Dupree at 2009-08-12T03:47:14+00:00 Cross-Package Documentation version 4 - - - - - 3d6dc04d by David Waern at 2009-08-15T23:42:57+00:00 Put all the IN_GHC_TREE stuff inside getGhcLibDir - - - - - 56624097 by David Waern at 2009-08-15T23:52:03+00:00 Add --print-ghc-libdir - - - - - f15d3ccb by David Waern at 2009-08-16T00:37:52+00:00 Read base.haddock when running tests We can now test cross-package docs. - - - - - 283f0fb9 by David Waern at 2009-08-16T00:50:59+00:00 Update test output - we now have more links - - - - - 673d1004 by David Waern at 2009-08-16T01:26:08+00:00 Read process.haddock when running tests - - - - - 0d127f82 by David Waern at 2009-08-16T01:43:04+00:00 Add a test for cross-package documentation - - - - - f94db967 by Ian Lynagh at 2009-08-16T18:42:44+00:00 Follow GHC build system changes - - - - - 5151278a by Isaac Dupree at 2009-08-16T19:58:05+00:00 make cross-package list types look nicer - - - - - c41e8228 by Isaac Dupree at 2009-08-18T01:47:47+00:00 Haddock.Convert: export more functions This lets us remove some code in Haddock.Interface.AttachInstances - - - - - 2e5fa398 by Isaac Dupree at 2009-08-18T02:11:05+00:00 switch AttachInstances to use synify code It changed an instance from showing ((,) a b) to (a, b) because my synify code is more sophisticated; I hope the latter is a good thing rather than a bad thing aesthetically, here. But this definitely reduces code duplication! - - - - - b8b07123 by Isaac Dupree at 2009-08-18T02:23:31+00:00 Find instances using GHC, which is more complete. In particular, it works cross-package. An intermediate patch also moved the instance-finding into createInterface, but that move turned out not to be necessary, so if we want to do that, it'd go in a separate patch. (Is that possible? Or will we need GHC to have loaded all the modules first, before we can go searching for the instances (e.g. if the modules are recursive or something)?) - - - - - 6959b451 by Isaac Dupree at 2009-08-17T00:37:18+00:00 fix preprocessor conditional sense - - - - - 942823af by Isaac Dupree at 2009-08-16T22:46:48+00:00 remove ghc 6.8 conditionals from Haddock.Interface - - - - - 4b3ad888 by Isaac Dupree at 2009-08-18T20:24:38+00:00 Fix GHC 6.11 build in Haddock.Convert - - - - - 0a89c5ab by Isaac Dupree at 2009-08-23T00:08:58+00:00 hacks to make it compile without fnArgDocsn - - - - - 7b3bed43 by Isaac Dupree at 2009-08-23T03:01:28+00:00 less big-Map-based proper extraction of constructor subdocs - - - - - b21c279a by Isaac Dupree at 2009-08-23T03:02:06+00:00 Html: remove unnecessary+troublesome GHC. qualifications - - - - - 96c97115 by Isaac Dupree at 2009-08-23T03:08:03+00:00 Move doc parsing/lexing into Haddock for ghc>=6.11 - - - - - e1cec02d by Isaac Dupree at 2009-08-23T05:08:14+00:00 get rid of unused DocMap parameter in Html - - - - - 66960c59 by Isaac Dupree at 2009-08-23T05:54:20+00:00 fix horrible named-docs-disappearing bug :-) - - - - - a9d7eff3 by Isaac Dupree at 2009-08-23T06:26:36+00:00 re-implement function-argument docs ..on top of the lexParseRn work. This patch doesn't change the InstalledInterface format, and thus, it does not work cross-package, but that will be easy to add subsequently. - - - - - 8bf6852c by Isaac Dupree at 2009-08-23T07:26:05+00:00 cross-package fnArgDocs. WARNING: changes .haddock binary format While breaking the format, I took the opportunity to unrename the DocMap that's saved to disk, because there's really no reason that we want to know what *another* package's favorite place to link a Name to was. (Is that true? Or might we want to know, someday?) Also, I added instance Binary Map in InterfaceFile. It makes the code a little simpler without changing anything of substance. Also it lets us add another Map hidden inside another Map (fnArgsDocs in instDocMap) without having really-convoluted serialization code. Instances are neat! I don't understand why this change to InterfaceFile seemed to subtly break binary compatibility all by itself, but no matter, I'll just roll it into the greater format-changing patch. Done! - - - - - 30115a64 by Isaac Dupree at 2009-08-23T18:22:47+00:00 Improve behavior for unfindable .haddock - - - - - aa364bda by Isaac Dupree at 2009-08-23T18:28:16+00:00 add comment for FnArgsDoc type - - - - - 49b23a99 by Isaac Dupree at 2009-08-23T21:52:48+00:00 bugfix: restore fnArgDocs for type-synonyms - - - - - f65f9467 by Isaac Dupree at 2009-08-23T22:06:55+00:00 Backends.Hoogle: eliminate warnings - - - - - a292d216 by Isaac Dupree at 2009-08-23T22:10:24+00:00 Haddock.Convert: eliminate warnings - - - - - 5546cd20 by Isaac Dupree at 2009-08-23T22:12:31+00:00 Haddock.Interface.Rename: eliminate warnings - - - - - 0a9798b6 by Isaac Dupree at 2009-08-23T22:18:47+00:00 Main.hs: remove ghc<6.9 conditionals - - - - - e8f9867f by Isaac Dupree at 2009-08-23T22:27:46+00:00 Main.hs: eliminate warnings (except for OldException) - - - - - 61c64247 by Isaac Dupree at 2009-08-23T22:41:01+00:00 move get*LibDir code in Main.hs, to +consistent code, -duplication - - - - - 948f1e69 by Isaac Dupree at 2009-08-23T23:14:26+00:00 Main.hs: OldException->Exception: which eliminates warnings - - - - - 3d5d5e03 by Isaac Dupree at 2009-08-23T23:20:11+00:00 GhcUtils: ghc >= 6.10 - - - - - 2771d657 by Isaac Dupree at 2009-08-23T23:21:55+00:00 InterfaceFile: ghc >= 6.10 - - - - - d9f2b9d1 by Isaac Dupree at 2009-08-23T23:22:58+00:00 Types: ghc >= 6.10 - - - - - ca39210e by Isaac Dupree at 2009-08-23T23:23:26+00:00 ModuleTree: ghc >= 6.10 - - - - - 883c4e59 by Isaac Dupree at 2009-08-23T23:24:04+00:00 Backends.DevHelp: ghc >= 6.10 - - - - - 04667df5 by Isaac Dupree at 2009-08-23T23:24:37+00:00 Backends.Html: ghc >= 6.10 - - - - - a9f7f25f by Isaac Dupree at 2009-08-23T23:25:24+00:00 Utils: ghc >= 6.10 - - - - - b7105022 by Isaac Dupree at 2009-08-23T23:37:47+00:00 eliminate haskell98 dependency, following GHC's example It turns out I/we already had, and it was only a matter of deleting it from the cabal file. - - - - - 292e0911 by Isaac Dupree at 2009-08-24T01:22:44+00:00 refactor out subordinatesWithNoDocs dep of inferenced-decls fix - - - - - c2ed46a2 by Isaac Dupree at 2009-08-24T01:24:03+00:00 Eradicate wrong runtime warning for type-inferenced exported-functions see the long comment in the patch for why I did it this way :-) - - - - - 4ac0b57c by David Waern at 2009-09-04T22:56:20+00:00 Clean up tyThingToHsSynSig a little Factor out noLoc and use the case construct. Also rename the function to tyThingToLHsDecl, since it doesn't just create type signatures. - - - - - 28ab9201 by David Waern at 2009-09-04T22:58:50+00:00 Wibble - - - - - 0d9fe6d0 by David Waern at 2009-09-06T18:39:30+00:00 Add more copyright owners to H.I.AttachInstances - - - - - 122441b1 by David Waern at 2009-09-06T18:44:12+00:00 Style police - - - - - 1fa79463 by David Waern at 2009-09-06T18:57:45+00:00 Move toHsInstHead to Haddock.Convert and call it synifyInstHead - - - - - 0d42a8aa by David Waern at 2009-09-06T21:11:38+00:00 Use colordiff to display test results if available - - - - - ea9d8e03 by Simon Marlow at 2009-08-24T08:46:14+00:00 Follow changes in GHC's interface file format Word32 instead of Int for FastString and Name offsets - - - - - 537e051e by Simon Marlow at 2009-07-29T14:16:53+00:00 define unpackPackageId (it was removed from GHC) - - - - - 50c63aa7 by David Waern at 2009-09-09T23:18:03+00:00 Remove commented-out code - - - - - 511631fe by David Waern at 2009-09-09T23:19:05+00:00 Correct copyright in H.I.ParseModuleHeader - - - - - 898ec768 by David Waern at 2009-09-11T11:22:29+00:00 Use Map.fromList/toList intead of fromAscList/toAscList when serializing Maps This fixes the missing docs problem. The Eq and Ord instances for Name uses the unique number in Name. This number is created at deserialization time by GHC's magic Binary instance for Name, and it is random. Thus, fromAscList can't be used at deserialization time, even though toAscList was used at serialization time. - - - - - 37bec0d5 by Simon Peyton Jones at 2009-09-11T08:28:04+00:00 Track change in HsType - - - - - eb3a97c3 by Ian Lynagh at 2009-09-11T16:07:09+00:00 Allow building with base 4.2 - - - - - bb4205ed by Ian Lynagh at 2009-09-22T13:50:02+00:00 Loosen the GHC dependency - - - - - 5c75deb2 by Ian Lynagh at 2009-09-22T14:08:39+00:00 Fix building with GHC >= 6.12 - - - - - fb131481 by David Waern at 2009-09-11T11:24:48+00:00 Update runtests.hs to work with GHC 6.11 - - - - - ac3a419d by David Waern at 2009-09-11T11:25:14+00:00 Update CrossPackageDocs test - - - - - ec65c3c6 by David Waern at 2009-09-11T11:25:40+00:00 Add reference output for CrossPackageDocs - - - - - 520c2758 by Ian Lynagh at 2009-10-25T17:26:40+00:00 Fix installation in the GHC build system - - - - - 28b3d7df by Ian Lynagh at 2009-11-05T15:57:27+00:00 GHC build system: Make *nix installation work in paths containing spaces - - - - - 5c9bb541 by David Waern at 2009-11-14T11:56:39+00:00 Track change in HsType for the right compiler version - - - - - 905097ce by David Waern at 2009-11-14T12:10:47+00:00 hlint police - - - - - 04920630 by Ian Lynagh at 2009-11-20T13:46:30+00:00 Use defaultObjectTarget rather than HscAsm This fixes haddock when we don't have a native code generator - - - - - 966eb079 by David Waern at 2009-11-15T12:32:21+00:00 Remove commented-out code - - - - - 37f00fc4 by David Waern at 2009-11-22T13:58:48+00:00 Make runtests.hs strip links before diffing Generates easier to read diffs when tests fail. The content of the links is not important anyway since it is not taken into account by the tests. - - - - - 3a9bb8ef by David Waern at 2009-11-22T14:05:06+00:00 Follow findProgramOnPath signature change in runtests.hs - - - - - b26b9e5a by David Waern at 2009-11-22T14:08:40+00:00 Follow removal of GHC.MVar from base in CrossPackageDocs - - - - - f4d90ae4 by David Waern at 2009-11-22T14:48:47+00:00 Make copy.hs strip link contents before copying No more updating of reference files when URLs in links changes. - - - - - 4c9c420d by David Waern at 2009-11-22T15:26:41+00:00 Update test reference output * More links (Int, Float etc) * Stripped link contents - - - - - a62b80e3 by David Waern at 2009-11-23T23:19:39+00:00 Update CrossPackageDocs reference output - Remove GHC.MVar import (removed from base) - Strip link contents - - - - - 43491394 by David Waern at 2009-11-23T23:20:00+00:00 Update test reference files with comments on instances - - - - - 0d370a0b by David Waern at 2009-11-23T23:25:16+00:00 Bump version number - - - - - 2293113e by David Waern at 2009-11-24T20:55:49+00:00 Comments on instances Implementing this was a little trickier than I thought, since we need to match up instances from the renamed syntax with instances represented by InstEnv.Instance. This is due to the current design of Haddock, which matches comments with declarations from the renamed syntax, while getting the list of instances of a class/family directly using the GHC API. - Works for class instances only (Haddock has no support for type family instances yet) - The comments are rendered to the right of the instance head in the HTML output - No change to the .haddock file format - Works for normal user-written instances only. No comments are added on derived or TH-generated instances - - - - - bf586f29 by David Waern at 2009-11-27T22:05:15+00:00 Whitespace police - - - - - b8f03afa by David Waern at 2009-11-27T22:11:46+00:00 Remove bad whitespace and commented-out pieces - - - - - 90b8ee90 by David Waern at 2009-11-27T22:15:04+00:00 Whitespace police - - - - - b5ede900 by David Waern at 2009-11-27T22:15:50+00:00 Whitespace police - - - - - e3fddbfe by David Waern at 2009-11-28T13:37:59+00:00 Remove Name from DocInstance It's not used. - - - - - 9502786c by David Waern at 2009-11-28T13:56:54+00:00 Require at least GHC 6.12 While regression testing Haddock, I found a bug that happens with GHC 6.10.3, but not with GHC 6.12-rc2 (haven't tried 6.10.4). I don't have time to track it down. I think we should just always require the latest major GHC version. The time spent on making Haddock work with older versions is too high compared to the time spent on bugfixing, refactoring and features. - - - - - 8fa688d8 by David Waern at 2009-11-28T15:05:03+00:00 Remove cruft due to compatibility with older GHCs - - - - - 46fbbe9d by David Waern at 2009-11-28T15:07:50+00:00 Add a documentation header to Haddock.Convert - - - - - c3d2cc4a by David Waern at 2009-11-28T15:10:14+00:00 Remove unused H.Utils.FastMutInt2 - - - - - 490aba80 by David Waern at 2009-11-28T15:36:36+00:00 Rename Distribution.Haddock into Documentation.Haddock - - - - - 33ee2397 by David Waern at 2009-11-28T15:36:47+00:00 Fix error message - - - - - a5a3b950 by David Waern at 2009-11-28T16:58:39+00:00 Add a test flag that brings in QuickCheck - - - - - fa049e13 by David Waern at 2009-11-28T19:32:18+00:00 Say that we want quickcheck 2 - - - - - f32b0d9b by David Waern at 2009-11-28T19:32:40+00:00 Add an Arbitrary instance for HsDoc - - - - - da9a8bd7 by David Waern at 2009-11-28T20:15:30+00:00 Rename HsDoc back into Doc - - - - - edb60101 by David Waern at 2009-11-28T22:16:16+00:00 Move H.Interface.Parse/Lex to H.Parse/Lex These are not just used to build Interfaces. - - - - - 0656a9b8 by David Waern at 2009-11-28T23:12:14+00:00 Update version number in test suite - - - - - 5e8c6f4a by David Waern at 2009-12-21T14:12:41+00:00 Improve doc of DocName - - - - - 7868e551 by Ian Lynagh at 2009-09-22T10:43:03+00:00 TAG GHC 6.12-branch created - - - - - 0452a3ea by Ian Lynagh at 2009-12-15T12:46:07+00:00 TAG GHC 6.12.1 release - - - - - 65e9be62 by David Waern at 2009-12-21T16:58:58+00:00 Update CHANGES - - - - - 145cee32 by David Waern at 2009-12-21T16:59:09+00:00 TAG 2.6.0 - - - - - 3c552008 by David Waern at 2009-12-22T17:11:14+00:00 Update ANNOUNCE - - - - - 931f9db4 by David Waern at 2010-01-22T19:57:17+00:00 Convert haddock.vim to use unix newlines - - - - - 4e56588f by David Waern at 2010-01-22T22:11:17+00:00 Remove unnecessary (and inexplicable) uses of nub - - - - - 744bb4d1 by David Waern at 2010-01-22T22:12:14+00:00 Follow move of parser and lexer - - - - - e34bab14 by David Waern at 2010-01-22T22:49:13+00:00 Use findProgramLocation instead of findProgramOnPath in runtests.hs - - - - - 8d39891b by Isaac Dupree at 2010-01-14T18:53:18+00:00 fix html arg-doc off-by-one and silliness - - - - - 9401f2e9 by David Waern at 2010-01-22T22:57:03+00:00 Create a test for function argument docs - - - - - 507a82d7 by David Waern at 2010-01-22T23:24:47+00:00 Put parenthesis around type signature arguments of function type - - - - - 8a305c28 by David Waern at 2010-01-23T17:26:59+00:00 Add reference file for the FunArgs test - - - - - 1309d5e1 by David Waern at 2010-01-24T16:05:08+00:00 Improve FunArg test and update Test.html.ref - - - - - 2990f055 by Yitzchak Gale at 2010-02-14T16:03:46+00:00 Do not generate illegal character in HTML ID attribute. - - - - - c5bcab7a by David Waern at 2010-02-22T22:10:30+00:00 Fix Haddock markup error in comment - - - - - c6416a73 by David Waern at 2010-02-24T22:55:08+00:00 Large additions to the Haddock API Also improved and added more doc comments. - - - - - 57d289d7 by David Waern at 2010-02-24T22:58:02+00:00 Remove unused ifaceLocals - - - - - 80528d93 by David Waern at 2010-02-25T21:05:09+00:00 Add HaddockModInfo to the API - - - - - 82806848 by David Waern at 2010-02-25T21:05:27+00:00 Wibble - - - - - 744cad4c by David Waern at 2010-02-25T23:30:59+00:00 Make it possible to run a single test - - - - - 6a806e4c by David Waern at 2010-03-14T14:19:39+00:00 Bump version number - - - - - a5a8e4a7 by David Waern at 2010-03-14T14:36:35+00:00 Update ANNOUNCE - - - - - 6f05435e by Simon Hengel at 2010-03-15T20:52:42+00:00 Add missing dependencies for 'library' in haddock.cabal - - - - - faefe2bd by David Waern at 2010-03-15T22:29:37+00:00 Solve conflicts - - - - - 9808ad52 by David Waern at 2010-03-15T22:51:21+00:00 Bump version number - - - - - eb0bf60b by David Waern at 2010-03-15T22:52:32+00:00 Update CHANGES - - - - - f95cd891 by David Waern at 2010-03-15T23:01:06+00:00 Add Paths_haddock to other-modules of library - - - - - 65997b0a by David Waern at 2010-03-15T23:14:59+00:00 Update CHANGES - - - - - 7e251731 by David Waern at 2010-03-15T23:15:30+00:00 Bump version number - - - - - c9cd0ddc by David Waern at 2010-03-16T00:28:34+00:00 Fix warning - - - - - 1cac2d93 by Simon Peyton Jones at 2010-01-04T15:22:16+00:00 Fix imports for new location of splitKindFunTys - - - - - 474f26f6 by Simon Peyton Jones at 2010-02-10T14:36:06+00:00 Update Haddock for quasiquotes - - - - - 0dcc06c0 by Simon Peyton Jones at 2010-02-10T10:59:45+00:00 Track changes in HsTyVarBndr - - - - - 2d84733a by Simon Peyton Jones at 2010-02-10T14:52:44+00:00 Track HsSyn chnages - - - - - 9e3adb8b by Ian Lynagh at 2010-02-20T17:09:42+00:00 Resolve conflicts - - - - - a3e72ff8 by Simon Peyton Jones at 2010-03-04T13:05:16+00:00 Track change in HsUtils; and use a nicer function not an internal one - - - - - 27994854 by David Waern at 2010-03-18T22:22:27+00:00 Fix build with GHC 6.12.1 - - - - - 11f6e488 by David Waern at 2010-03-18T22:24:09+00:00 Bump version in test reference files - - - - - 0ef2f11b by David Waern at 2010-03-20T00:56:30+00:00 Fix library part of cabal file when in ghc tree - - - - - 3f6146ff by Mark Lentczner at 2010-03-20T22:30:11+00:00 First, experimental XHTML rendering switch to using the xhtml package copied Html.hs to Xhtml.hs and split into sub-modules under Haddock/Backends/Xhtml and detabify moved footer into div, got ready for iface change headers converted to semantic markup contents in semantic markup summary as semantic markup description in semantic markup, info block in header fixed factored out rendering so during debug it can be readable (see renderToString) - - - - - b8ab329b by Mark Lentczner at 2010-03-20T22:54:01+00:00 apply changes to Html.hs to Xhtml/*.hs incorporate changes that were made between the time Html.hs was copied and split into Xhtml.hs and Xhtml/*.hs includes patchs after "Wibble" (!) through "Fix build with GHC 6.12.1" - - - - - 73df2433 by Ian Lynagh at 2010-03-20T21:56:37+00:00 Follow LazyUniqFM->UniqFM in GHC - - - - - db4f602b by David Waern at 2010-03-29T22:00:01+00:00 Fix build with GHC 6.12 - - - - - d8dca088 by Simon Hengel at 2010-04-02T16:39:55+00:00 Add missing dependencies to cabal file - - - - - e2adc437 by Simon Hengel at 2010-04-02T14:08:40+00:00 Add markup support for interactive examples - - - - - e882ac05 by Simon Hengel at 2010-04-02T14:11:53+00:00 Add tests for interactive examples - - - - - 5a07a6d3 by David Waern at 2010-04-07T17:05:20+00:00 Propagate source positions from Lex.x to Parse.y - - - - - 6493b46f by David Waern at 2010-04-07T21:48:57+00:00 Let runtests.hs die when haddock has not been built - - - - - 5e34423e by David Waern at 2010-04-07T22:01:13+00:00 Make runtests.hs slightly more readable - - - - - 321d59b3 by David Waern at 2010-04-07T22:13:27+00:00 Fix haskell/haddock#75 Add colons to the $ident character set. - - - - - 37b08b8d by David Waern at 2010-04-08T00:32:52+00:00 Fix haskell/haddock#118 Avoid being too greedy when lexing URL markup (<..>), in order to allow multiple URLs on the same line. Do the same thing with <<..>> and #..#. - - - - - df8feac9 by David Waern at 2010-04-08T00:57:33+00:00 Make it easier to add new package deps to test suite This is a hack - we should use Cabal to get the package details instead. - - - - - 1ca6f84b by David Waern at 2010-04-08T01:03:06+00:00 Add ghc-prim to test suite deps - - - - - 27371e3a by Simon Hengel at 2010-04-08T19:26:34+00:00 Let parsing fails on paragraphs that are immediately followed by an example This is more consistent with the way we treat code blocks. - - - - - 83096e4a by David Waern at 2010-04-08T21:20:00+00:00 Improve function name - - - - - 439983ce by David Waern at 2010-04-10T10:46:14+00:00 Fix haskell/haddock#112 No link was generated for 'Addr#' in a doc comment. The reason was simply that the identifier didn't parse. We were using parseIdentifier from the GHC API, with a parser state built from 'defaultDynFlags'. If we pass the dynflags of the module instead, the right options are turned on on while parsing the identifer (in this case -XMagicHash), and the parse succeeds. - - - - - 5c0d35d7 by David Waern at 2010-04-10T10:54:06+00:00 Rename startGhc into withGhc - - - - - dca081fa by Simon Hengel at 2010-04-12T19:09:16+00:00 Add documentation for interactive examples - - - - - c7f26bfa by David Waern at 2010-04-13T00:51:51+00:00 Slight fix to the documentation of examples - - - - - 06eb7c4c by David Waern at 2010-04-13T00:57:05+00:00 Rename Interactive Examples into Examples (and simplify explanation) - - - - - 264830cb by David Waern at 2010-05-10T20:07:27+00:00 Update CHANGES with info about 2.6.1 - - - - - 8e5d4514 by Simon Hengel at 2010-04-18T18:16:54+00:00 Add unit tests for parser - - - - - 68297f40 by David Waern at 2010-05-10T21:53:37+00:00 Improve testsuite README - - - - - f04eb6e4 by David Waern at 2010-05-11T19:14:31+00:00 Re-organise the testsuite structure - - - - - a360f710 by David Waern at 2010-05-11T19:18:03+00:00 Shorten function name - - - - - 1d5dd359 by David Waern at 2010-05-11T21:40:02+00:00 Update runtests.hs following testsuite re-organisation - - - - - ffebe217 by David Waern at 2010-05-11T21:40:10+00:00 Update runtests.hs to use base-4.2.0.1 - - - - - 635de402 by David Waern at 2010-05-11T21:41:11+00:00 Update runparsetests.hs following testsuite reorganisation - - - - - 72137910 by Ian Lynagh at 2010-05-06T20:43:06+00:00 Fix build - - - - - 1a80b76e by Ian Lynagh at 2010-05-06T22:25:29+00:00 Remove redundant import - - - - - 1031a80c by Simon Peyton Jones at 2010-05-07T13:21:09+00:00 Minor wibbles to HsBang stuff - - - - - dd8e7fe5 by Ian Lynagh at 2010-05-08T15:22:00+00:00 GHC build system: Follow "rm" variable changes - - - - - 7f5e6748 by David Waern at 2010-05-13T11:53:02+00:00 Fix build with GHC 6.12.2 - - - - - 7953d4d8 by David Waern at 2010-05-13T18:45:01+00:00 Fixes to comments only - - - - - 8ae8eb64 by David Waern at 2010-05-13T18:57:26+00:00 ModuleMap -> IfaceMap - - - - - 1c3eadc6 by David Waern at 2010-05-13T19:03:13+00:00 Fix whitespace style issues - - - - - e96783c0 by David Waern at 2010-05-13T19:08:53+00:00 Fix comment - - - - - c998a78b by David Waern at 2010-05-13T19:39:00+00:00 Position the module header the same way everywhere Silly, but nice with some consistency :-) - - - - - b48a714e by David Waern at 2010-05-13T19:41:32+00:00 Position of module header, this time in the HTML backends - - - - - f9bfb12e by David Waern at 2010-05-13T19:43:05+00:00 Two newlines between declarations in Main - - - - - 071d44c7 by David Waern at 2010-05-13T19:44:21+00:00 Newlines in Convert - - - - - 036346db by David Waern at 2010-05-13T19:46:47+00:00 Fix a few stylistic issues in H.InterfaceFile - - - - - f0b8379e by David Waern at 2010-05-13T19:47:53+00:00 Add newlines to H.ModuleTree - - - - - 27409f8e by David Waern at 2010-05-13T19:51:10+00:00 Fix stylistic issues in H.Utils - - - - - 24774a11 by David Waern at 2010-05-13T20:00:43+00:00 Structure H.Types better - - - - - 7b6f5e40 by David Waern at 2010-05-13T20:01:04+00:00 Remove bad Arbitrary instance - - - - - fac9f1f6 by David Waern at 2010-05-13T20:05:50+00:00 Get rid of H.Utils.pathJoin and use System.FilePath.joinPath instead - - - - - fe6d00c4 by David Waern at 2010-05-13T20:51:55+00:00 Export a couple of more types from the API - - - - - b2e33a5f by David Waern at 2010-05-13T21:27:51+00:00 Improve doc comment for Interface - - - - - c585f2ce by David Waern at 2010-05-13T21:30:14+00:00 Improve documentation of Haddock.Interface - - - - - e6791db2 by David Waern at 2010-05-13T22:07:35+00:00 Remove meaningless comments - - - - - 7801b390 by David Waern at 2010-05-14T17:53:33+00:00 Remove unused modules - - - - - f813e937 by David Waern at 2010-05-14T17:55:17+00:00 Re-direct compilation output to a temporary directory Also add a flag --no-tmp-comp-dir that can be used to get the old behaviour of writing compilation files to GHC's output directory (default "."). - - - - - e56737ec by David Waern at 2010-05-14T18:06:11+00:00 Wibble - - - - - e40b0447 by David Waern at 2010-05-14T19:01:52+00:00 Move flag evaluation code from Main to Haddock.Options Determining the value of "singular" flags (by e.g. taking the last occurrence of the flag) and other flag evaluation should done in Haddock.Options which is the module that is supposed to define the command line interface. This makes Main a bit easier on the eyes as well. - - - - - 27091f57 by David Waern at 2010-05-14T19:05:10+00:00 Wibble - - - - - c658cf61 by David Waern at 2010-05-14T19:06:49+00:00 Re-order things in Haddock.Options a bit - - - - - 8cfdd342 by David Waern at 2010-05-14T19:20:29+00:00 De-tabify Haddock.Options and fix other whitespace issues - - - - - 0df16b62 by David Waern at 2010-05-14T19:25:07+00:00 Improve comments - - - - - 80b38e2b by David Waern at 2010-05-14T19:26:42+00:00 Whitespace police - - - - - fe580255 by David Waern at 2010-05-14T19:31:23+00:00 Wibbles to comments - - - - - a2b43fad by David Waern at 2010-05-14T20:24:32+00:00 Move some more flag functions to Haddock.Options - - - - - 3f895547 by David Waern at 2010-05-14T20:37:12+00:00 Make renderStep a top-level function in Main - - - - - 5cdca11d by David Waern at 2010-05-14T20:39:27+00:00 Spelling in comment - - - - - ad98d14c by David Waern at 2010-05-14T20:40:26+00:00 Comment fixes - - - - - 0bb9218f by David Waern at 2010-05-14T20:49:01+00:00 Whitespace police - - - - - 0f0a533f by David Waern at 2010-05-15T16:42:29+00:00 Improve description of --dump-interface - - - - - 5b2833ac by David Waern at 2010-05-15T17:16:53+00:00 Document --no-tmp-comp-dir - - - - - 8160b170 by David Waern at 2010-05-15T17:18:59+00:00 Wibble - - - - - 570dbe33 by David Waern at 2010-05-18T21:15:38+00:00 HLint police - - - - - 204e425f by David Waern at 2010-05-18T21:16:30+00:00 HLint police - - - - - 6db657ac by David Waern at 2010-05-18T21:16:37+00:00 Wibble - - - - - b942ccd7 by Simon Marlow at 2010-06-02T08:27:30+00:00 Interrupted disappeared in GHC 6.13 (GHC ticket haskell/haddock#4100) - - - - - 3b94a819 by Simon Marlow at 2010-06-02T08:45:08+00:00 Allow base-4.3 - - - - - c5a1fb7c by Simon Marlow at 2010-06-02T09:03:04+00:00 Fix compilation with GHC 6.13 - - - - - 6181296c by David Waern at 2010-06-08T21:09:05+00:00 Display name of prologue file when parsing it fails - - - - - 7cbc6f60 by Ian Lynagh at 2010-06-13T16:20:25+00:00 Remove redundant imports - - - - - 980c804b by Simon Marlow at 2010-06-22T08:41:50+00:00 isLocalAndTypeInferenced: fix for local module names overlapping package modules - - - - - d74d4a12 by Simon Marlow at 2010-06-23T12:03:27+00:00 Unresolved identifiers in Doc get replaced with DocMonospaced rather than plain strings - - - - - d8546783 by Simon Marlow at 2010-06-30T12:45:17+00:00 LaTeX backend (new options: --latex, --latex-style=<style>) - - - - - 437afa9e by David Waern at 2010-07-01T12:02:44+00:00 Fix a few stylistic whitespace issues in LaTeX backend - - - - - 85bc1fae by David Waern at 2010-07-01T15:42:45+00:00 Make runtest.hs work with GHC 6.12.3 (we should really stop hard coding this) - - - - - 7d2eb86f by David Waern at 2010-07-01T15:43:33+00:00 Update test following Simon's patch to render unresolved names in monospaced font - - - - - 08fcbcd2 by David Waern at 2010-07-01T16:12:18+00:00 Warning police - - - - - d04a8d7a by David Waern at 2010-07-04T14:53:39+00:00 Fix a bug in attachInstances We didn't look for instance docs in all the interfaces of the package. This had the effect of instance docs not always showing up under a declaration. I took the opportunity to clean up the code in H.I.AttachInstances a bit as well. More cleanup is needed, however. - - - - - d10344eb by Simon Hengel at 2010-07-10T09:19:04+00:00 Add missing dependencies to cabal file - - - - - 24090531 by Mark Lentczner at 2010-03-21T04:51:16+00:00 add exports to Xhtml modules - - - - - 84f9a333 by Mark Lentczner at 2010-04-03T19:14:22+00:00 clean up Doc formatting code - add CSS for lists - renderToString now uses showHtml since prettyHtml messes up <pre> sections - - - - - bebccf52 by Mark Lentczner at 2010-04-04T04:51:08+00:00 tweak list css - - - - - 0c2aeb5e by Mark Lentczner at 2010-04-04T06:24:14+00:00 all decls now generate Html not HtmlTable - ppDecl return Html, and so now do all of the functions it calls - added some internal tables to some decls, which is wrong, and will have to be fixed - decl "Box" functions became "Elem" functions to make clear they aren't in a table anymore (see Layout.hs) - docBox went away, as only used in one place (and its days are numbered) - cleaned up logic in a number of places, removed dead code - added maybeDocToHtml which simplified a number of places in the code - - - - - dbf73e6e by Mark Lentczner at 2010-04-05T05:02:43+00:00 clean up processExport and place a div around each decl - - - - - e25b7e9f by Mark Lentczner at 2010-04-10T21:23:21+00:00 data decls are now a sequence of paragraphs, not a table - - - - - 89ee0294 by Mark Lentczner at 2010-04-10T21:29:16+00:00 removed commented out code that can't be maintained - - - - - d466f536 by Mark Lentczner at 2010-04-12T04:56:27+00:00 removed declWithDoc and cleaned up data decls in summary - - - - - ed755832 by Mark Lentczner at 2010-04-12T05:07:53+00:00 merge in markupExample changes - - - - - c36f51fd by Mark Lentczner at 2010-04-25T04:56:37+00:00 made record fields be an unordList, not a table - - - - - ed3a28d6 by Mark Lentczner at 2010-04-25T05:23:28+00:00 fixed surround of instance and constructor tables - - - - - 0e35bbc4 by Mark Lentczner at 2010-04-25T05:36:59+00:00 fix class member boxes in summary - - - - - 5041749b by Mark Lentczner at 2010-04-25T05:38:35+00:00 remove unused bodyBox - - - - - e91724db by Mark Lentczner at 2010-04-25T06:26:10+00:00 fixed javascript quoting/escpaing issue - - - - - f4abbb73 by Mark Lentczner at 2010-05-03T23:04:31+00:00 adjust css for current markup - - - - - e75fec4c by Mark Lentczner at 2010-05-04T06:14:34+00:00 added assoicated types and methods back into class decls - - - - - 84169323 by Mark Lentczner at 2010-05-24T13:13:42+00:00 merge in changes from the big-whitespace cleanup - - - - - 3c1c872e by Mark Lentczner at 2010-06-11T21:03:58+00:00 adjust synopsis and bottom bar spacing - - - - - 3c1f9ef7 by Mark Lentczner at 2010-06-11T21:14:44+00:00 fix missing space in "module" lines in synoposis - - - - - 9a137e6d by Mark Lentczner at 2010-06-11T21:34:08+00:00 changed tt elements to code elements - - - - - 50f71ef1 by Mark Lentczner at 2010-06-11T23:27:46+00:00 factored out ppInstances - - - - - 3b9a9de5 by Mark Lentczner at 2010-06-17T17:36:01+00:00 push single constructors (newtype) onto line with decl - - - - - e0f8f2ec by Mark Lentczner at 2010-06-17T22:20:56+00:00 remove <++> connector - - - - - 56c075dd by Mark Lentczner at 2010-07-13T05:26:21+00:00 change to new page structure - - - - - 04be6ca7 by Mark Lentczner at 2010-07-14T04:21:55+00:00 constructors and args as dl lists, built in Layout.hs - - - - - 65aeafc2 by Mark Lentczner at 2010-07-14T05:38:32+00:00 better interface to subDecls - - - - - 72032189 by Mark Lentczner at 2010-07-14T07:04:10+00:00 made subDecl tables looks just so - - - - - b782eca2 by Mark Lentczner at 2010-07-14T16:00:54+00:00 convert args to SubDecl format - - - - - cc75e98f by Mark Lentczner at 2010-07-14T16:28:53+00:00 convert instances to SubDecl - - - - - 34e2aa5a by Mark Lentczner at 2010-07-14T21:07:32+00:00 removing old table cruft from Layout.hs - - - - - d5810d95 by Mark Lentczner at 2010-07-14T21:54:58+00:00 methods and associated types in new layout scheme - - - - - 65ef9579 by Mark Lentczner at 2010-07-14T23:43:42+00:00 clean up synopsis lists - - - - - e523318f by Mark Lentczner at 2010-07-15T05:02:26+00:00 clean up of anchors - - - - - 1215dfc5 by Mark Lentczner at 2010-07-15T23:53:01+00:00 added two new themes and rough css switcher - - - - - 7f0fd36f by Mark Lentczner at 2010-07-16T04:57:38+00:00 fixed package catpion, added style menu - - - - - 0dd4999c by Mark Lentczner at 2010-07-16T20:12:39+00:00 new output for mini_ pages - - - - - 64b2810b by Mark Lentczner at 2010-07-16T20:58:41+00:00 reformat index-frames - - - - - 3173f555 by Mark Lentczner at 2010-07-16T22:41:53+00:00 convert index to new markup - - - - - b0a4b7c9 by Mark Lentczner at 2010-07-17T04:07:22+00:00 convert index.html to new markup, adjust module markup - - - - - 8261ae1e by Mark Lentczner at 2010-07-17T05:07:29+00:00 classing styling of ancillary pages - - - - - 2a4fb025 by Mark Lentczner at 2010-07-17T05:11:45+00:00 clean up Layout.hs: no more vanillaTable - - - - - 87eec685 by Mark Lentczner at 2010-07-17T05:35:16+00:00 clean up Util.hs - - - - - d304e9b0 by Mark Lentczner at 2010-07-17T05:38:50+00:00 qualify import of XHtml as XHtml - - - - - 7dc05807 by Mark Lentczner at 2010-07-17T06:17:53+00:00 factored out head element generation - - - - - 9cdaec9e by Mark Lentczner at 2010-07-17T06:44:54+00:00 refactored out main page body generation - - - - - 8a51019e by Mark Lentczner at 2010-07-17T06:48:20+00:00 moved footer into only place that used it - - - - - efa479da by Mark Lentczner at 2010-07-17T18:48:30+00:00 styling auxillary pages for tibbe and snappy themes - - - - - 81de5509 by Mark Lentczner at 2010-07-18T04:41:38+00:00 fixed alphabet on index page, and styling of it and packages in module lists - - - - - 20718c1a by Mark Lentczner at 2010-07-18T05:34:29+00:00 cleaned up div functions in Layout.hs - - - - - 60d50453 by Mark Lentczner at 2010-07-18T05:48:39+00:00 added content div to main pages - - - - - ed16561c by Mark Lentczner at 2010-07-18T06:12:22+00:00 add .doc class to documentation blocks - - - - - f5c781b0 by Mark Lentczner at 2010-07-19T05:20:53+00:00 refactoring of anchor ID and fragment handling - - - - - a69a93bf by Mark Lentczner at 2010-07-19T05:35:55+00:00 remove an explicit bold tag - replace with .def class - - - - - d76c7225 by Mark Lentczner at 2010-07-19T06:56:15+00:00 rename Haddock.Backends.Xhtml.Util to Utils - - - - - 5a58c0da by David Waern at 2010-07-21T13:30:54+00:00 Remove trailing whitespace in Haddock.Backends.Xhtml - - - - - 0652aa17 by David Waern at 2010-07-21T13:33:21+00:00 Align a few comments - - - - - 785776c3 by David Waern at 2010-07-21T13:39:04+00:00 Remove trailing whitespace in H.B.X.Decl - - - - - 71a30710 by David Waern at 2010-07-21T13:44:27+00:00 Remove more trailing whitespace - - - - - 38750394 by David Waern at 2010-07-21T13:50:43+00:00 Style police - - - - - 3023d940 by David Waern at 2010-07-21T14:01:22+00:00 Style police in H.B.X.Decl - - - - - df16e9e6 by David Waern at 2010-07-21T14:14:45+00:00 Style police in H.B.X.DocMarkup - - - - - 6020e321 by David Waern at 2010-07-21T14:17:32+00:00 More style police - - - - - 86ad8bf5 by David Waern at 2010-07-21T14:21:02+00:00 Style police in H.B.Xhtml - - - - - aea27d03 by David Waern at 2010-07-21T14:42:03+00:00 Fix warnings in LaTeX backend - - - - - 2aff34a9 by David Waern at 2010-07-21T14:50:46+00:00 Style police in LaTeX backend (mainly more newlines) - - - - - e517162d by David Waern at 2010-07-21T15:05:47+00:00 Doc sections in Main - - - - - b971aa0c by David Waern at 2010-07-21T15:06:17+00:00 Trailing whitespace in Documentation.Haddock - - - - - f11628fb by David Waern at 2010-07-21T15:07:06+00:00 Trailing whitespace in Haddock.Convert - - - - - cbaf284c by David Waern at 2010-07-21T15:08:11+00:00 Style police in Haddock.GhcUtils - - - - - 71feb77b by David Waern at 2010-07-21T15:09:06+00:00 Style police in Haddock.InterfaceFile - - - - - 0a9c80e6 by David Waern at 2010-07-21T15:11:33+00:00 Whitespace police - - - - - 6168376c by David Waern at 2010-07-21T15:16:35+00:00 Style police in Haddock.Utils - - - - - 9fe4dd90 by David Waern at 2010-07-21T15:19:31+00:00 Add -fwarn-tabs - - - - - a000d752 by Mark Lentczner at 2010-07-20T17:25:52+00:00 move CSS Theme functions into Themes.hs - - - - - b52b440f by Mark Lentczner at 2010-07-20T17:29:35+00:00 add Thomas Schilling's theme - - - - - e43fa7e8 by Mark Lentczner at 2010-07-21T04:49:34+00:00 correct icon used with Snappy theme - - - - - ba5092d3 by Mark Lentczner at 2010-07-21T04:56:47+00:00 apply Tibbe's updates to his theme - - - - - 7804eef6 by Mark Lentczner at 2010-07-21T05:15:49+00:00 space between "Style" and the downward triangle - - - - - 7131d4c6 by Mark Lentczner at 2010-07-21T17:43:35+00:00 merge with David's source cleanups - - - - - ee65f1cb by David Waern at 2010-07-22T16:50:46+00:00 Fix a bug where we allowed --hoogle, --latex, etc without input files - - - - - e413ff7a by David Waern at 2010-07-22T17:21:58+00:00 Improve function name - - - - - a0fd14f3 by Simon Marlow at 2010-06-30T15:34:32+00:00 fix warnings - - - - - 31f73d2a by David Waern at 2010-07-22T19:29:41+00:00 Solve conflicts - - - - - d563b4a5 by Simon Marlow at 2010-06-30T15:34:37+00:00 fix warning - - - - - 412b6469 by David Waern at 2010-07-22T19:31:28+00:00 Solve conflict - - - - - 35174b94 by Ian Lynagh at 2010-07-06T17:27:16+00:00 Follow mkPState argument order change - - - - - b5c3585c by Simon Marlow at 2010-07-14T08:49:21+00:00 common up code for instance rendering - - - - - d8009560 by Simon Marlow at 2010-07-14T12:37:11+00:00 fix warnings - - - - - a6d88695 by David Waern at 2010-07-24T15:33:33+00:00 Fix build with ghc < 6.13 - - - - - 94cf9de1 by David Waern at 2010-07-24T15:34:37+00:00 Remove conflict left-over - - - - - 313b15c0 by Mark Lentczner at 2010-07-21T22:09:04+00:00 reorganization of nhaddock.css with tibbe - - - - - 9defed80 by Mark Lentczner at 2010-07-21T22:42:14+00:00 further cleanup of nhaddock.css, float TOC, support aux. pages - - - - - 6d944c1b by Mark Lentczner at 2010-07-22T06:22:23+00:00 remove old HTML backend - - - - - b3e8cba5 by Mark Lentczner at 2010-07-22T06:43:32+00:00 remove --html-help support - it was old, out-of-date, and mostly missing - - - - - d2654a08 by Mark Lentczner at 2010-07-22T21:45:34+00:00 tweaks to nhaddock.css - - - - - f73b285c by Mark Lentczner at 2010-07-23T06:19:35+00:00 command like processing for theme selection The bulk of the change is threadnig the selected theme set through functions in Xhtml.hs so that the selected themes can be used when generating the page output. There isn't much going on in most of these changes, just passing it along. The real work is all done in Themes.hs. - - - - - 8bddc90d by Mark Lentczner at 2010-07-23T06:58:31+00:00 drop --themes support, add named theme support decided that --themes was silly - no one would do that, just use multiple --theme arguments made --theme a synonym for --css and -c made those arguments, if no file is found, look up the argument as the name of a built in theme all of this let's haddock be invoked with "--theme=classic" for example. - - - - - 20cafd4f by Mark Lentczner at 2010-07-23T17:44:29+00:00 rename --default-themes to --built-in-themes - - - - - 0fe41307 by Mark Lentczner at 2010-07-23T18:33:02+00:00 tweaks to theme for info table, headings, and tables - - - - - cba4fee0 by Mark Lentczner at 2010-07-23T19:13:59+00:00 tweaks for dl layout, though still not used - - - - - 463fa294 by Mark Lentczner at 2010-07-23T21:07:19+00:00 tweak look of mini pages, keywords, and preblocks - - - - - 5472fc02 by Mark Lentczner at 2010-07-24T05:36:15+00:00 slide out Synopsis drawer - - - - - 9d5d5de5 by Mark Lentczner at 2010-07-24T06:02:42+00:00 extend package header and footer to edges of page - - - - - a47c91a2 by Mark Lentczner at 2010-07-24T06:28:44+00:00 fields are def lists, tweak css for style menu, mini pages, arguments - - - - - ca20f23b by Mark Lentczner at 2010-07-24T16:55:22+00:00 excisting last vestiges of the --xhtml flag - - - - - 71fb012e by Mark Lentczner at 2010-07-25T18:47:49+00:00 change how collapsing sections are done make whole .caption be the target improve javascript for class toggling have plus/minus images come from .css, not img tags - - - - - c168c8d3 by Mark Lentczner at 2010-07-26T00:32:05+00:00 reorganize files in the html lib data dir - - - - - 93324301 by Mark Lentczner at 2010-07-26T01:27:42+00:00 cleaned up Themes.hs - - - - - ad3b5dd4 by Mark Lentczner at 2010-07-26T02:39:15+00:00 make module list use new collapsers - - - - - 1df9bfc6 by Mark Lentczner at 2010-07-27T19:09:25+00:00 remove Tibbe theme - - - - - 8b9b01b3 by Mark Lentczner at 2010-07-27T20:04:03+00:00 move themes into html dir with .theme and .std-theme extensions - - - - - a7beb965 by Mark Lentczner at 2010-07-27T21:06:34+00:00 give a class to empty dd elements so they can be hidden - - - - - a258c117 by Mark Lentczner at 2010-07-27T21:23:58+00:00 remove custom version of copyFile in Xhtml.hs - - - - - b70dba6e by Mark Lentczner at 2010-07-27T22:12:45+00:00 apply margin changes to pre and headings as per group decision, and small cleanups - - - - - e6f722a2 by Mark Lentczner at 2010-07-28T00:03:12+00:00 make info block and package bar links be floatable by placing them first in the dom tree - - - - - c8278867 by Mark Lentczner at 2010-07-28T19:01:18+00:00 styling source links on declarations - - - - - 88fdc399 by Mark Lentczner at 2010-07-29T01:12:46+00:00 styling tweaks don't generate an empty li for absent style menu in links area update css for Classic and Snappy to handle: dl lists links in package header and in declarations floating of links and info block in package and module headers - - - - - 8a75b213 by Ian Lynagh at 2010-07-30T20:21:46+00:00 Fix build in GHC tree - - - - - ce8e18b3 by Simon Hengel at 2010-08-03T18:37:26+00:00 Adapt paths to data files in cabal file - - - - - 9701a455 by Simon Hengel at 2010-08-07T13:20:27+00:00 Add missing dependency to cabal file - - - - - 01b838d1 by Mark Lentczner at 2010-07-30T20:19:40+00:00 improved synopsis drawer: on click, not hover - - - - - 7b6f3e59 by Mark Lentczner at 2010-07-30T23:38:55+00:00 put the synopsis back in the other themes - - - - - 7b2904c9 by Mark Lentczner at 2010-08-11T11:11:26+00:00 close arrows on expanded synopsis drawer - - - - - ea19e177 by Mark Lentczner at 2010-08-12T21:16:45+00:00 width and font changes removed the max width restrictions on the page as a whole and the synopsis made the main font size smaller (nominally 14pt) and then tweaked most font sizes (relative) to be more consistent - - - - - 5ced00c0 by Mark Lentczner at 2010-08-13T15:09:55+00:00 implemented YUI's CSS font approach - - - - - 2799c548 by Mark Lentczner at 2010-08-13T15:11:59+00:00 adjusted margin to 2em, 1 wasn't enough - - - - - 58f06893 by Mark Lentczner at 2010-08-13T15:48:44+00:00 removed underlining on hover for named anchors headings in interface lost thier a element, no need, just put id on heading css for a elements now only applies to those with href attribute - - - - - 7aced4c4 by Mark Lentczner at 2010-08-13T15:50:22+00:00 more space between elements - - - - - 5a3c1cce by Mark Lentczner at 2010-08-13T16:43:43+00:00 adjusted font sizes of auxilary pages per new scheme - - - - - 487539ef by Mark Lentczner at 2010-08-13T21:43:41+00:00 add Frames button and clean up frames.html - - - - - c1a140b6 by Mark Lentczner at 2010-08-13T22:17:48+00:00 move frames button to js - - - - - b0bdb68e by Mark Lentczner at 2010-08-14T03:44:46+00:00 build style menu in javascript moved to javascript, so as to not polute the content with the style menu removed menu building code in Themes.hs removed onclick in Utils.hs changed text of button in header from "Source code" to "Source" more consistent with links in rest of page - - - - - 43ab7120 by Mark Lentczner at 2010-08-16T15:15:37+00:00 font size and margin tweaks - - - - - c0b68652 by Mark Lentczner at 2010-08-17T18:19:52+00:00 clean up collapser logics javascript code for collapasble sections cleaned up rewrote class utilities in javascript to be more robust refactored utilities for generating collapsable sections made toc be same color as synopsis module list has needed clear attribute in CSS - - - - - 5d573427 by Mark Lentczner at 2010-08-17T23:06:02+00:00 don't collapse entries in module list when clicking on links - - - - - 8c307c4a by Mark Lentczner at 2010-08-17T23:21:43+00:00 add missing data file to .cabal - - - - - 414bcfcf by Mark Lentczner at 2010-08-17T23:28:47+00:00 remove synopsis when in frames - - - - - ba0fa98a by Mark Lentczner at 2010-08-18T16:16:11+00:00 layout tweeks - mini page font size, toc color, etc. - - - - - 63c1bed1 by Mark Lentczner at 2010-08-18T19:50:02+00:00 margin fiddling - - - - - c311c094 by Mark Lentczner at 2010-08-20T01:37:55+00:00 better synopsis handling logic - no flashing - - - - - f1fe5fa8 by Mark Lentczner at 2010-08-20T01:41:06+00:00 fix small layout issues mini frames should have same size top heading give info block dts some padding so they don't collide in some browsers - - - - - 0de84d77 by Mark Lentczner at 2010-08-20T02:13:09+00:00 made style changing and cookies storage robust - - - - - 1ef064f9 by Thomas Schilling at 2010-08-04T13:12:22+00:00 Make synopsis frame behave properly in Firefox. In Firefox, pressing the back button first reverted the synopsis frame, and only clicking the back button a second time would update the main frame. - - - - - dd1c9a94 by Mark Lentczner at 2010-08-21T01:46:19+00:00 remove Snappy theme - - - - - 2353a90d by Mark Lentczner at 2010-08-25T05:16:19+00:00 fix occasional v.scroll bars on pre blocks (I think) - - - - - 459b8bf1 by Simon Hengel at 2010-08-08T10:12:45+00:00 Add createInterfaces' (a more high-level alternative to createInterfaces) to Haddock API - - - - - b1b68675 by David Waern at 2010-08-26T20:31:58+00:00 Follow recent API additions with some refactorings Simon Hegel's patch prompted me to do some refactorings in Main, Haddock.Documentation and Haddock.Interface. - - - - - 264d4d67 by David Waern at 2010-08-26T21:40:59+00:00 Get rid of GhcModule and related cruft We can get everything we need directly from TypecheckedModule. - - - - - 0feacec2 by Mark Lentczner at 2010-08-26T23:44:13+00:00 fixed CSS for ordered lists and def lists in doc blocks - - - - - 2997e0c2 by Mark Lentczner at 2010-08-26T23:45:03+00:00 support both kinds of enumerated lists in doc markup The documentation for Haddock says enumerated lists can use either of (1) first item 2. second item The second form wasn't actually supported - - - - - 5d4ddeec by Mark Lentczner at 2010-08-27T21:29:48+00:00 fix broken header link margins - - - - - 614456ba by Mark Lentczner at 2010-08-27T22:16:19+00:00 fix table of contents CSS - - - - - 03f329a2 by David Waern at 2010-08-28T16:36:09+00:00 Update tests following switch to the Xhtml backend - - - - - ca689fa2 by Mark Lentczner at 2010-08-28T18:25:16+00:00 fix def lists - - - - - 18e1d3d2 by Mark Lentczner at 2010-08-28T18:26:18+00:00 push footer to bottom of window - - - - - b0ab8d82 by David Waern at 2010-08-28T22:04:32+00:00 Whitespace police - - - - - 2d217977 by David Waern at 2010-08-29T12:44:45+00:00 Remove Snappy data files - - - - - 01e27d5f by David Waern at 2010-08-29T13:03:28+00:00 Add source entity path to --read-interface You can now use this flag like this: --read-interface=<html path>,<source entity path>,<.haddock file> By "source entity path" I mean the same thing that is specified with the --source-entity flag. The purpose of this is to be able to specify the source entity path per package, to allow source links to work in the presence of cross-package documentation. When given two arguments or less the --read-interface flag behaves as before. - - - - - 20bf4aaa by David Waern at 2010-08-29T13:11:03+00:00 Naming wibbles - - - - - ad22463f by Mark Lentczner at 2010-08-29T15:14:54+00:00 make portability block be a table - solves layout issues - - - - - 97bd1ae6 by Mark Lentczner at 2010-08-29T15:17:42+00:00 update golden test for Test due to portability box change - - - - - d37e139e by Mark Lentczner at 2010-08-29T17:07:17+00:00 move TOC and Info blocks down 0.5em to improve layout issue w/Test.hs - - - - - acf52501 by David Waern at 2010-08-29T17:32:36+00:00 Allow building with ghc < 6.16 - - - - - 1cb34ed8 by Ian Lynagh at 2010-07-24T23:18:49+00:00 Flatten the dynflags before parsing - - - - - b36845b4 by Ian Lynagh at 2010-07-24T23:26:49+00:00 Follow flattenLanguageFlags -> flattenExtensionFlags rename - - - - - 7f7fcc7e by David Waern at 2010-08-29T17:46:23+00:00 Use flattenExtensionFlags with ghc >= 6.13 only - - - - - 13cf9411 by Ian Lynagh at 2010-08-01T18:09:54+00:00 Make the main haddock script versioned, and make plain "haddock" a symlink - - - - - 495cbff2 by Ian Lynagh at 2010-08-18T18:57:24+00:00 Fix installation in the GHC build system Data-files are now in subdirectories, so we need to handle that - - - - - 88ebab0a by Ian Lynagh at 2010-08-18T19:43:53+00:00 GHC build system: Add all the data files to BINDIST_EXTRAS - - - - - 65837172 by David Waern at 2010-08-29T20:12:34+00:00 Update Test - - - - - 094bbaa2 by David Waern at 2010-08-29T20:55:14+00:00 Revert update to Test - - - - - a881cfb3 by David Waern at 2010-08-31T18:24:15+00:00 Bump version number - - - - - 1fc8a3eb by David Waern at 2010-08-31T22:32:27+00:00 Update ANNOUNCE - - - - - ee1df9d0 by David Waern at 2010-08-31T22:33:11+00:00 Update CHANGES - - - - - 394cc854 by David Waern at 2010-08-31T22:33:23+00:00 Update interface file versioning to work with ghc 6.14/15 - - - - - 7d03b79b by David Waern at 2010-08-31T22:36:00+00:00 Update test output following version change - - - - - a48d82d1 by Mark Lentczner at 2010-09-01T04:29:35+00:00 sort options in doc to match --help output removed --html-help option, as it is no longer supported - - - - - 06561aeb by Mark Lentczner at 2010-09-01T05:29:32+00:00 update options documentation rewrote doc for --html added doc for --theme and --built-in-themes added --use-contents and --gen-contents - - - - - 57dea832 by Mark Lentczner at 2010-09-01T05:31:27+00:00 slight wording change about Frames mode - - - - - fa1f6da3 by David Waern at 2010-09-01T10:57:44+00:00 Update doc configure script to find docbook stylesheets on arch linux - - - - - addff770 by David Waern at 2010-09-01T11:02:29+00:00 Wibble - - - - - 8399006d by David Waern at 2010-09-01T11:19:21+00:00 Replace ghci> with >>> in example syntax - - - - - 35074cf8 by David Waern at 2010-09-01T19:03:27+00:00 Improve docs for --no-tmp-comp-dir - - - - - 0f8f8cfd by David Waern at 2010-09-02T11:22:27+00:00 Add a list of contributors to the user guide Break out everyone thanked in the `Acknowledgements` chapter into a separate contributor list and add everyone from `darcs show authors`. We consider everyone who is thanked to be a contributor as a conservative estimation :-) I have added some more contributors that I know about, who were not in the darcs history, but others may be missing. So please add anyone that you think is missing from the list. - - - - - 42ccf099 by David Waern at 2010-09-02T11:29:22+00:00 Update copyright years in license - - - - - 0d560479 by David Waern at 2010-09-02T11:38:52+00:00 Update release instructions - - - - - 72ab7796 by David Waern at 2010-09-02T19:27:08+00:00 Add a note to ANNOUNCE - - - - - bf9d9c5d by David Waern at 2010-09-02T19:27:48+00:00 H.Utils needs FFI on Win+MinGW - - - - - 048ae44a by Mark Lentczner at 2010-09-04T23:19:47+00:00 make TOC group header identifiers validate - - - - - 8c6faf36 by Simon Michael at 2010-09-22T07:12:34+00:00 add hints for cleaner darcs show authors output - - - - - 9909bd17 by Simon Michael at 2010-09-22T17:58:06+00:00 print haddock coverage info on stdout when generating docs A module's haddockable items are its exports and the module itself. The output is lightly formatted so you can align the :'s and sort for readability. - - - - - 6da72171 by David Waern at 2010-10-03T21:31:24+00:00 Style wibble - - - - - 2f8d8e4d by Tobias Brandt at 2010-08-27T07:01:21+00:00 adding the option to fully qualify identifiers - - - - - 833be6c6 by Tobias Brandt at 2010-08-27T15:50:28+00:00 adding support for local and relative name qualification - - - - - df15c4e9 by Tobias Brandt at 2010-08-27T15:56:37+00:00 corrected qualification help message - - - - - 449e9ce1 by David Waern at 2010-10-16T17:34:30+00:00 Solve conflicts - - - - - 3469bda5 by David Waern at 2010-10-16T18:42:40+00:00 Use "qual" as an abbreviation for qualification instead of "quali" for consistency - - - - - 97c2d728 by David Waern at 2010-10-16T18:47:07+00:00 Style police - - - - - ce14fbea by David Waern at 2010-10-16T21:15:25+00:00 Style police - - - - - fdf29e9d by David Waern at 2010-10-17T00:30:44+00:00 Add a pointer to the style guide - - - - - 8e6b44e8 by rrnewton at 2010-10-24T03:19:28+00:00 Change to index pages: include an 'All' option even when subdividing A-Z. - - - - - 755b131c by David Waern at 2010-11-14T19:39:36+00:00 Bump version - - - - - d0345a04 by David Waern at 2010-11-14T19:41:59+00:00 TAG 2.8.1 - - - - - f6221508 by Simon Peyton Jones at 2010-09-13T09:53:00+00:00 Adapt to minor changes in internal GHC functions - - - - - 1290713d by Ian Lynagh at 2010-09-15T10:37:18+00:00 Remove duplicate Outputable instance for Data.Map.Map - - - - - 87f69eef by Ian Lynagh at 2010-09-21T15:01:10+00:00 Bump GHC dep upper bound - - - - - af36e087 by Ian Lynagh at 2010-09-21T15:12:02+00:00 Fix up __GLASGOW_HASKELL__ tests - - - - - ad67716c by Ian Lynagh at 2010-09-21T20:31:35+00:00 Don't build haddock is HADDOCK_DOCS is NO - - - - - 63b3f1f5 by Ian Lynagh at 2010-09-21T21:39:51+00:00 Fixes for when HADDOCK_DOCS=NO - - - - - e92bfa42 by Ian Lynagh at 2010-09-29T21:15:38+00:00 Fix URL creation on Windows: Use / not \ in URLs. Fixes haskell/haddock#4353 - - - - - 66c55e05 by Ian Lynagh at 2010-09-30T17:03:34+00:00 Tidy up haddock symlink installation In particular, it now doesn't get created if we aren't installing haddock. - - - - - 549b5556 by Ian Lynagh at 2010-10-23T21:17:14+00:00 Follow extension-flattening change in GHC - - - - - d7c2f72b by David Waern at 2010-11-14T20:17:55+00:00 Bump version to 2.8.2 - - - - - 6989a3a9 by David Waern at 2010-11-14T20:26:01+00:00 Solve conflict - - - - - 055c6910 by Ian Lynagh at 2010-09-22T15:36:20+00:00 Bump GHC dep - - - - - c96c0763 by Simon Marlow at 2010-10-27T11:09:44+00:00 follow changes in the GHC API - - - - - 45907129 by David Waern at 2010-11-07T14:00:58+00:00 Update the HCAR entry - - - - - 61940b95 by David Waern at 2010-11-07T14:07:34+00:00 Make the HCAR entry smaller - - - - - aa590b7d by David Waern at 2010-11-14T21:30:59+00:00 Update HCAR entry with November 2010 version - - - - - 587f9847 by David Waern at 2010-11-14T23:48:17+00:00 Require ghc >= 7.0 - - - - - ff5c647c by David Waern at 2010-11-14T23:49:09+00:00 TAG 2.8.2 - - - - - 937fcb4f by David Waern at 2010-11-14T23:49:45+00:00 Solve conflict - - - - - 8e5d0c1a by David Waern at 2010-11-15T21:09:50+00:00 Remove code for ghc < 7 - - - - - 3d47b70a by David Waern at 2010-11-15T21:11:06+00:00 Fix bad merge - - - - - 7f4a0d8a by David Waern at 2010-11-15T21:13:57+00:00 Remove more ghc < 7 code - - - - - 9ee34b50 by David Waern at 2010-11-15T21:31:25+00:00 Match all AsyncExceptions in exception handler - - - - - 42849c70 by David Waern at 2010-11-15T21:35:31+00:00 Just say "internal error" instead of "internal Haddock or GHC error" - - - - - c88c809b by David Waern at 2010-11-15T21:44:19+00:00 Remove docNameOcc under the motto "don't name compositions" - - - - - b798fc7c by David Waern at 2010-11-15T23:27:13+00:00 Wibble - - - - - 2228197e by David Waern at 2010-11-15T23:28:24+00:00 Rename the HCAR entry file - - - - - 8a3f9090 by David Waern at 2010-11-16T00:05:29+00:00 Remove Haskell 2010 extensions from .cabal file - - - - - c7a0c597 by David Waern at 2010-11-16T00:10:28+00:00 Style wibbles - - - - - cde707a5 by David Waern at 2010-11-16T00:12:00+00:00 Remove LANGUAGE ForeignFunctionInterface pragmas - - - - - 1dbda8ed by David Waern at 2010-11-16T00:17:21+00:00 Make a little more use of DoAndIfThenElse - - - - - 4c45ff6e by David Waern at 2010-11-16T00:59:41+00:00 hlint police - - - - - d2feaf09 by David Waern at 2010-11-16T01:14:15+00:00 hlint police - - - - - 99876e97 by David Waern at 2010-11-20T19:06:00+00:00 Haddock documentation updates - - - - - 65ce6987 by David Waern at 2010-11-20T19:42:51+00:00 Follow the style guide closer in Haddock.Types and improve docs - - - - - 28ca304a by tob.brandt at 2010-11-20T17:04:40+00:00 add full qualification for undocumented names - - - - - d61341e3 by David Waern at 2010-11-20T20:04:15+00:00 Re-structure qualification code a little - - - - - 0057e4d6 by David Waern at 2010-11-20T20:07:55+00:00 Re-order functions - - - - - d7279afd by David Waern at 2010-11-21T03:39:54+00:00 Add BangPatterns to alex and happy source files - - - - - 629fe60e by tob.brandt at 2010-11-23T23:35:11+00:00 documentation for qualification - - - - - 37031cee by David Waern at 2010-11-23T21:06:44+00:00 Update CHANGES - don't mention 2.8.2, we won't release it - - - - - f2489e19 by David Waern at 2010-12-01T21:57:11+00:00 Update deps of runtests.hs to work with ghc 7.0.1 - - - - - d3657e9a by David Waern at 2010-12-01T22:04:57+00:00 Make tests compile with ghc 7.0.1 - - - - - a2f09d9b by David Waern at 2010-12-01T22:06:59+00:00 Update tests following version bump - - - - - 50883ebb by David Waern at 2010-12-06T14:09:18+00:00 Update tests following recent changes - - - - - fc2fadeb by David Waern at 2010-12-06T14:17:29+00:00 Add a flag --pretty-html for rendering indented html with newlines - - - - - 30832ef2 by David Waern at 2010-12-06T14:17:35+00:00 Use --pretty-html when running the test suite. Makes it easier to compare output - - - - - a0b81b31 by David Waern at 2010-12-06T14:18:27+00:00 Wibble - - - - - 3aaa23fe by David Waern at 2010-12-06T14:19:29+00:00 Haddockify ppHtml comments - - - - - 24bb24f0 by David Waern at 2010-12-06T14:23:15+00:00 Remove --debug. It was't used, and --verbosity should take its place - - - - - 6bc076e5 by David Waern at 2010-12-06T14:25:37+00:00 Rename golden-tests into html-tests. "golden tests" sounds strange - - - - - 53301e55 by David Waern at 2010-12-06T14:26:26+00:00 QUALI -> QUAL in the description --qual for consistency - - - - - 98b6affb by David Waern at 2010-12-06T21:54:02+00:00 Bump version - - - - - 371bf1b3 by David Waern at 2010-12-06T22:08:55+00:00 Update tests following version bump - - - - - 25be762d by David Waern at 2010-12-06T22:21:03+00:00 Update CHANGES - - - - - 7c7dac71 by David Waern at 2010-12-06T22:33:43+00:00 Update ANNOUNCE - - - - - 30d7a5f2 by Simon Peyton Jones at 2010-11-15T08:38:38+00:00 Alex generates BangPatterns, so make Lex.x accept them (It'd be better for Alex to generate this pragma.) - - - - - 605e8018 by Simon Marlow at 2010-11-17T11:37:24+00:00 Add {-# LANGUAGE BangPatterns #-} to mollify GHC - - - - - a46607ba by David Waern at 2010-12-07T14:08:10+00:00 Solve conflicts - - - - - b28cda66 by David Waern at 2010-12-09T20:41:35+00:00 Docs: Mention that \ is a special character in markup - - - - - a435bfdd by Ian Lynagh at 2010-11-17T14:01:19+00:00 TAG GHC 7.0.1 release - - - - - 5a15a05a by David Waern at 2010-12-11T17:51:19+00:00 Fix indentation problem - - - - - 4232289a by Lennart Kolmodin at 2010-12-17T18:32:03+00:00 Revise haddock.cabal given that we now require ghc-7 default-language should be Haskell2010, slight new semantics for extensions. Rewrite into clearer dependencies of base and Cabal. - - - - - a36302dc by David Waern at 2010-12-19T17:12:37+00:00 Update CHANGES - - - - - 7c8b85b3 by David Waern at 2010-12-19T17:14:24+00:00 Bump version - - - - - cff22813 by Ian Lynagh at 2011-01-05T18:24:27+00:00 Write hoogle output in utf8; fixes GHC build on Windows - - - - - c7e762ea by David Waern at 2011-01-22T00:00:35+00:00 Put title outside doc div when HTML:fying title+prologue Avoids indenting the title, and makes more sense since the title is not a doc string anyway. - - - - - 5f639054 by David Waern at 2011-01-22T16:09:44+00:00 Fix spelling error - contributed by Marco Silva - - - - - c11dce78 by Ian Lynagh at 2011-01-07T02:33:11+00:00 Follow GHC build system changes - - - - - 101cfaf5 by David Waern at 2011-01-08T14:06:44+00:00 Bump version - - - - - af62348b by David Waern at 2011-01-08T14:07:07+00:00 TAG 2.9.2 - - - - - 4d1f6461 by Ian Lynagh at 2011-01-07T23:06:57+00:00 Name the haddock script haddock-ghc-7.0.2 instead of haddock-7.0.2; haskell/haddock#4882 "7.0.2" looked like a haddock version number before - - - - - 8ee4d5d3 by Simon Peyton Jones at 2011-01-10T17:31:12+00:00 Update Haddock to reflect change in hs_tyclds field of HsGroup - - - - - 06f3e3db by Ian Lynagh at 2011-03-03T15:02:37+00:00 TAG GHC 7.0.2 release - - - - - 7de0667d by David Waern at 2011-03-10T22:47:13+00:00 Update CHANGES - - - - - 33a9f1c8 by David Waern at 2011-03-10T22:47:31+00:00 Fix build with ghc 7.0.1 - - - - - 4616f861 by David Waern at 2011-03-10T22:47:50+00:00 TAG 2.9.2-actual - - - - - 0dab5e3c by Simon Hengel at 2011-04-08T15:53:01+00:00 Set shell script for unit tests back to work - - - - - 85c54dee by Simon Hengel at 2011-04-08T16:01:24+00:00 Set unit tests back to work Here "ghci>" was still used instead of ">>>". - - - - - 1cea9b78 by Simon Hengel at 2011-04-08T16:25:36+00:00 Update runtests.hs for GHC 7.0.2 - - - - - 8e5b3bbb by Simon Hengel at 2011-04-08T16:28:49+00:00 Update Haddock version in *.html.ref - - - - - 2545e955 by Simon Hengel at 2011-04-08T17:09:28+00:00 Add support for blank lines in the result of examples Result lines that only contain the string "<BLANKLINE>" are treated as a blank line. - - - - - adf64d2e by Simon Hengel at 2011-04-08T17:36:50+00:00 Add documentation for "support for blank lines in the result of examples" - - - - - c51352ca by David Waern at 2011-05-21T23:57:56+00:00 Improve a haddock comment - - - - - 7419cf2c by David Waern at 2011-05-22T15:41:52+00:00 Use cabal's test suite support to run the test suite This gives up proper dependency tracking of the test script. - - - - - 7770070c by David Waern at 2011-05-22T01:45:44+00:00 We don't need to send DocOptions nor a flag to mkExportItems - - - - - 9d95b7b6 by David Waern at 2011-05-22T21:39:03+00:00 Fix a bug - - - - - 1f93699b by David Waern at 2011-05-22T21:40:21+00:00 Break out fullContentsOf, give it a better name and some documentation The documentation describes how we want this function to eventually behave, once we have fixed a few problems with the current implementation. - - - - - 9a86432f by David Waern at 2011-05-22T21:53:52+00:00 Fix some stylistic issues in mkExportItems - - - - - c271ff0c by David Waern at 2011-05-22T22:09:11+00:00 Indentation - - - - - 93e602b1 by David Waern at 2011-06-10T01:35:31+00:00 Add git commits since switchover: darcs format (followed by a conflict resolution): commit 6f92cdd12d1354dfbd80f8323ca333bea700896a Merge: f420cc4 28df3a1 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Thu May 19 17:54:34 2011 +0100 Merge remote branch 'origin/master' into ghc-generics commit 28df3a119f770fdfe85c687dd73d5f6712b8e7d0 Author: Max Bolingbroke <batterseapower at hotmail.com> Date: Sat May 14 22:37:02 2011 +0100 Unicode fix for getExecDir on Windows commit 89813e729be8bce26765b95419a171a7826f6d70 Merge: 6df3a04 797ab27 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Mon May 9 11:55:17 2011 +0100 Merge branch 'ghc-new-co' commit 6df3a040da3dbddee67c6e30a892f87e6b164383 Author: Ian Lynagh <igloo at earth.li> Date: Sun May 8 17:05:50 2011 +0100 Follow changes in SDoc commit f420cc48b9259f0b1afd2438b12f9a2bde57053d Author: Jose Pedro Magalhaes <jpm at cs.uu.nl> Date: Wed May 4 17:31:52 2011 +0200 Adapt haddock to the removal of HsNumTy and TypePat. commit 797ab27bdccf39c73ccad374fea265f124cb52ea Merge: 1d81436 5a91450 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Mon May 2 12:05:03 2011 +0100 Merge remote branch 'origin/master' into ghc-new-co commit 1d8143659a81cf9611668348e33fd0775c7ab1d2 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Mon May 2 12:03:46 2011 +0100 Wibbles for ghc-new-co branch commit 5a91450e2ea5a93c70bd3904b022445c9cc82488 Author: Ian Lynagh <igloo at earth.li> Date: Fri Apr 22 00:51:56 2011 +0100 Follow defaultDynFlags change in GHC - - - - - 498da5ae by David Waern at 2011-06-11T00:33:33+00:00 * Merge in git patch from Michal Terepeta >From 6fc71d067738ef4b7de159327bb6dc3d0596be29 Mon Sep 17 00:00:00 2001 From: Michal Terepeta <michal.terepeta at gmail.com> Date: Sat, 14 May 2011 19:18:22 +0200 Subject: [PATCH] Follow the change of TypeSig in GHC. This follows the change in GHC to make TypeSig take a list of names (instead of just one); GHC ticket haskell/haddock#1595. This should also improve the Haddock output in case the user writes a type signature that refers to many names: -- | Some comment.. foo, bar :: ... will now generate the expected output with one signature for both names. - - - - - 094607fe by Ian Lynagh at 2011-06-17T19:10:29+01:00 Fix build - - - - - 8fa35740 by Ian Lynagh at 2011-06-26T21:06:40+01:00 Bump GHC dep to allow 7.2 - - - - - e4d2ca3c by Ian Lynagh at 2011-07-07T23:06:28+01:00 Relax base dep - - - - - b948fde9 by Ian Lynagh at 2011-07-28T16:39:45+01:00 GHC build system: Don't install the datafiles twice - - - - - f82f6d70 by Simon Marlow at 2011-08-11T12:08:15+01:00 Hack this to make it work with both Alex 2.x and Alex 3.x. Unicode in documentation strings is (still) mangled. I don't think it's possible to make it so that we get the current behaviour with Alex 2.x but magic Unicode support if you use Alex 3.x. At some point we have to decide that Alex 3.x is a requirement, then we can do Unicode. - - - - - b341cc12 by Max Bolingbroke at 2011-08-22T20:25:27+01:00 Fix compilation with no-pred-ty GHC - - - - - 30494581 by Max Bolingbroke at 2011-08-23T10:20:54+01:00 Remaining fixes for PredTy removal - - - - - 0b197138 by Max Bolingbroke at 2011-08-26T08:27:45+01:00 Rename factKind to constraintKind - - - - - a379bec5 by Max Bolingbroke at 2011-09-04T12:54:47+01:00 Deal with change to IParam handling in GHC - - - - - f94e421b by Max Bolingbroke at 2011-09-06T17:34:31+01:00 Adapt Haddock for the ConstraintKind extension changes - - - - - 8821e5cc by Max Bolingbroke at 2011-09-09T08:24:59+01:00 Ignore associated type defaults (just as we ignore default methods) - - - - - 31a0afd4 by Max Bolingbroke at 2011-09-09T09:06:00+01:00 Merge branch 'no-pred-ty' of ssh://darcs.haskell.org/srv/darcs/haddock into no-pred-ty - - - - - dd3b530a by Max Bolingbroke at 2011-09-09T14:10:25+01:00 Merge branch 'no-pred-ty' Conflicts: src/Haddock/Convert.hs - - - - - 5f25ec96 by Max Bolingbroke at 2011-09-09T14:10:40+01:00 Replace FactTuple with ConstraintTuple - - - - - cd30b9cc by David Waern at 2011-09-26T02:17:55+02:00 Bump to version 2.9.3 - - - - - 4fbfd397 by Max Bolingbroke at 2011-09-27T14:55:21+01:00 Follow changes to BinIface Name serialization - - - - - 92257d90 by David Waern at 2011-09-30T23:45:07+02:00 Fix problem with test files not added to distribution tarball - - - - - 00255bda by David Waern at 2011-09-30T23:48:24+02:00 Merge branch 'development' - - - - - 5421264f by David Waern at 2011-10-01T01:25:39+02:00 Merge in darcs patch from Simon Meier: Wed Jun 1 19:41:16 CEST 2011 iridcode at gmail.com * prettier haddock coverage info The new coverage info rendering uses less horizontal space. This reduces the number of unnecessary line-wrappings. Moreover, the most important information, how much has been documented already, is now put up front. Hopefully, this makes it more likely that a library author is bothered by the low coverage of his modules and fixes that issue ;-) - - - - - 07d318ef by David Waern at 2011-10-01T01:34:10+02:00 Use printException instead of deprecated printExceptionAndWarnings - - - - - 40d52ee4 by David Waern at 2011-10-01T01:41:13+02:00 Merge in darcs pach: Mon Apr 11 18:09:54 JST 2011 Liyang HU <haddock at liyang.hu> * Remember collapsed sections in index.html / haddock-util.js - - - - - 279d6dd4 by David Waern at 2011-10-01T01:55:45+02:00 Merge in darcs patch: Joachim Breitner <mail at joachim-breitner.de>**20110619201645 Ignore-this: f6c51228205b0902ad5bfad5040b989a As reported on http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=578301, generating the global index takes much too long if type-level (with lots of auto-generated types) is installed. The patch avoids a quadratic runtime in the subfunction getIfaceIndex of ppHtmlIndex by using a temporary set. Runtime improvement observed here from 25.36s to 2.86s. - - - - - d1612383 by David Waern at 2011-10-01T01:56:48+02:00 Merge branch 'development' - - - - - 347520c1 by David Waern at 2011-10-01T01:56:54+02:00 Merge branch 'master' of http://darcs.haskell.org/haddock - - - - - 9a0c95e8 by David Waern at 2011-10-01T02:19:10+02:00 Improve .cabal file - - - - - 6967dc64 by Ian Lynagh at 2011-10-01T01:34:06+01:00 Follow changes to ForeignImport/ForeignExport in GHC - - - - - 565cb26b by Simon Marlow at 2011-10-04T00:15:04+02:00 Hack this to make it work with both Alex 2.x and Alex 3.x. Unicode in documentation strings is (still) mangled. I don't think it's possible to make it so that we get the current behaviour with Alex 2.x but magic Unicode support if you use Alex 3.x. At some point we have to decide that Alex 3.x is a requirement, then we can do Unicode. - - - - - 8b74f512 by David Waern at 2011-10-04T00:18:17+02:00 Requre ghc >= 7.2 - - - - - 271d360c by David Waern at 2011-10-04T00:22:50+02:00 Bump version to 2.9.4 - - - - - 37f3edb0 by David Waern at 2011-10-06T02:30:21+02:00 Add alex and happy to build-tools. - - - - - 7ac2bb6e by David Terei at 2011-10-12T14:02:55-07:00 Add safe haskell indication to haddock output - - - - - 42c91a47 by David Terei at 2011-10-12T14:06:03-07:00 Fix CSS issue with info table not being contained in module header - - - - - 0eddab6c by David Terei at 2011-10-12T14:06:58-07:00 Add safe haskell indication to haddock output - - - - - 3df058eb by David Terei at 2011-10-12T14:07:07-07:00 Fix CSS issue with info table not being contained in module header - - - - - a40a6c3f by David Waern at 2011-10-22T11:29:06+02:00 Bump .haddock file version since the format has changed recently - - - - - 8a6254be by David Waern at 2011-10-22T11:30:42+02:00 Merge branch 'development' - - - - - 642e3e02 by David Waern at 2011-10-23T21:23:39+02:00 Sort import list - - - - - 36371cf8 by David Waern at 2011-10-23T22:48:18+02:00 Remove NEW_GHC_LAYOUT conditional. - - - - - 5604b499 by David Waern at 2011-10-27T00:15:03+02:00 Add --print-ghc-path. - - - - - 463499fa by David Waern at 2011-10-27T00:16:22+02:00 Make testsuite able to find its dependencies automatically. - - - - - a3506172 by Ryan Newton at 2011-11-05T05:59:58-04:00 Improved declNames internal error. Added a case to handle DocD. - - - - - 001b8baf by David Waern at 2011-11-05T20:37:29+01:00 Rename copy.hs -> accept.hs. - - - - - 55d808d3 by David Waern at 2011-11-05T23:30:02+01:00 Fix build. - - - - - deb5c3be by David Waern at 2011-11-06T00:01:47+01:00 Merge branch 'master' of http://darcs.haskell.org/haddock - - - - - 9b663554 by David Waern at 2011-11-06T00:03:45+01:00 Merge https://github.com/rrnewton/haddock - - - - - 1abb0ff6 by David Waern at 2011-11-06T01:20:37+01:00 Use getDeclMainBinder instead of declNames. - - - - - 4b005c01 by David Waern at 2011-11-06T19:09:53+01:00 Fix build. - - - - - c2c51bc7 by Ian Lynagh at 2011-11-06T23:01:33+00:00 Remove -DNEW_GHC_LAYOUT in ghc.mk - - - - - f847d703 by Jose Pedro Magalhaes at 2011-11-11T09:07:39+00:00 New kind-polymorphic core This big patch implements a kind-polymorphic core for GHC. The current implementation focuses on making sure that all kind-monomorphic programs still work in the new core; it is not yet guaranteed that kind-polymorphic programs (using the new -XPolyKinds flag) will work. For more information, see http://haskell.org/haskellwiki/GHC/Kinds - - - - - 7d7c3b09 by Jose Pedro Magalhaes at 2011-11-16T21:42:22+01:00 Follow changes to tuple sorts in master - - - - - 8430e03e by Simon Peyton Jones at 2011-11-17T10:20:27+00:00 Remove redundant imports - - - - - d1b06832 by Ian Lynagh at 2011-11-19T01:33:21+00:00 Follow GHC build system change to the way we call rm - - - - - 9e2230ed by David Waern at 2011-11-24T15:00:24+01:00 Fix a bug in test runner and get rid of regex-compat dependency. - - - - - 52039b21 by David Waern at 2011-11-24T23:55:36+01:00 Avoid haskell98 dependency in test - - - - - 92e1220d by David Waern at 2011-11-25T00:03:33+01:00 Avoid depency on regex-compat also in accept.hs. - - - - - ddac6b6f by David Waern at 2011-11-25T02:13:38+01:00 Accept test output. - - - - - 5a720455 by David Waern at 2011-11-25T02:16:20+01:00 Some more changes to test scripts. - - - - - 170a9004 by David Waern at 2011-11-25T02:30:41+01:00 Add flag --interface-version. - - - - - d225576c by David Waern at 2011-11-25T02:39:26+01:00 Remove #ifs for older compiler versions. - - - - - f0d0a4f5 by David Waern at 2011-11-26T04:20:12+01:00 Give preference to type over data constructors for doc comment links at renaming time. Previously this was done in the backends. Also, warn when a doc comment refers to something that is in scope but which we don't have the .haddock file for. These changes mean we can make DocIdentifier [a] into DocIdentifier a. - - - - - eef0e776 by David Waern at 2011-11-26T17:01:06+01:00 Allow doc comments to link to out-of-scope things (#78). (A bug that should have been fixed long ago.) - - - - - 565ad529 by David Waern at 2011-11-26T19:56:21+01:00 Update tests. - - - - - fb3ce7b9 by David Waern at 2011-11-26T21:44:28+01:00 Cleanup. - - - - - d0328126 by David Waern at 2011-11-26T22:10:28+01:00 Fix module reference bug. - - - - - c03765f8 by David Waern at 2011-12-03T05:20:20+01:00 Slightly better behaviour on top-levels without type signatures. - Docs don't get attached to the next top-level with signature by mistake. - If there's an export list and the top-level is part of it, its doc comment shows up in the documentation. - - - - - 48461d31 by David Waern at 2011-12-03T05:38:10+01:00 Add a test for Unicode doc comments. - - - - - 549c4b4e by David Waern at 2011-12-03T19:07:55+01:00 Cleanup. - - - - - 7bfecf91 by David Waern at 2011-12-03T20:13:08+01:00 More cleanup. - - - - - 14fab722 by Ian Lynagh at 2011-12-12T21:21:35+00:00 Update dependencies and binaryInterfaceVersion - - - - - 469e6568 by Ian Lynagh at 2011-12-18T12:56:16+00:00 Fix (untested) building from source tarball without alex/happy haddock's .cabal file was declaring that it needed alex and happy to build, but in the GHC source tarballs it doesn't. - - - - - 895c9a8c by David Waern at 2011-12-27T12:57:43+01:00 Go back to having a doc, sub and decl map instead of one big decl map. This setup makes more sense since when we add value bindings to the processed declarations (for type inference), we will have multiple declarations which should share documentation. Also, we already have a separate doc map for instances which we can now merge into the main doc map. Another benefit is that we don't need the DeclInfo type any longer. - - - - - 736767d9 by David Waern at 2011-12-27T13:33:41+01:00 Merge ../../../haddock Conflicts: src/Haddock/InterfaceFile.hs - - - - - 20016f79 by David Waern at 2011-12-27T13:57:23+01:00 Bump version. - - - - - 31f276fb by David Waern at 2011-12-27T13:57:32+01:00 Merge ../ghc/utils/haddock - - - - - 95b367cd by David Waern at 2011-12-27T14:57:29+01:00 Update tests following version bump. - - - - - fa3c94cd by David Waern at 2011-12-27T14:57:51+01:00 Get rid of quite unnecessary use of different lists. - - - - - 9c4d3c54 by David Waern at 2011-12-27T15:26:42+01:00 Cleanup. - - - - - 2caf9f90 by David Waern at 2011-12-27T16:18:05+01:00 Wibbles. - - - - - 3757d09b by David Waern at 2011-12-27T20:50:26+01:00 Complete support for inferring types for top-level bindings. - - - - - 53418734 by David Waern at 2011-12-28T15:02:13+01:00 Minor fixes and cleanup. - - - - - 0c9d0385 by Ian Lynagh at 2012-01-03T18:31:29+00:00 Follow rename of Instance to ClsInst in GHC - - - - - c9bc969a by Simon Hengel at 2012-01-12T21:28:14+01:00 Make sure that generated xhtml is valid (close haskell/haddock#186) Thanks to Phyx. - - - - - 836a0b9a by David Waern at 2012-02-01T02:30:05+01:00 Fix bug introduced in my recent refactoring. - - - - - c7d733eb by David Waern at 2012-02-01T02:30:26+01:00 Cleanup mkMaps and avoid quadratic behaviour. - - - - - da3cda8f by David Waern at 2012-02-01T02:56:56+01:00 Require ghc >= 7.4. - - - - - 83a3287e by David Waern at 2012-02-01T02:57:36+01:00 Update CHANGES. - - - - - 93408f0b by Simon Hengel at 2012-02-04T00:48:04+01:00 Add reference renderings - - - - - 49d00d2c by Simon Hengel at 2012-02-04T00:48:25+01:00 Set unit tests for parser back to work - - - - - eb450980 by Simon Hengel at 2012-02-04T00:49:07+01:00 Add .gitignore - - - - - a841602c by Simon Hengel at 2012-02-04T00:49:16+01:00 Add .ghci file - - - - - 8861199d by Simon Hengel at 2012-02-04T00:49:29+01:00 tests/html-tests/copy.hs: Use mapM_ instead of mapM So we do net get a list of () on stdout when running with runhaskell. - - - - - b477d9b5 by Simon Hengel at 2012-02-04T00:49:46+01:00 Remove index files from golden tests - - - - - 9dbda34e by Simon Hengel at 2012-02-04T00:49:57+01:00 Add /tests/html-tests/tests/*index*.ref to .gitignore - - - - - a9434817 by Simon Hengel at 2012-02-04T00:50:04+01:00 Add DocWarning to Doc The Xhtml backend has special markup for that, Hoogle and LaTeX reuse what we have for DocEmphasis. - - - - - de2fb6fa by Simon Hengel at 2012-02-04T00:50:13+01:00 Add support for module warnings - - - - - 0640920e by Simon Hengel at 2012-02-04T00:50:21+01:00 Add tests for module warnings - - - - - 30ce0d77 by Simon Hengel at 2012-02-04T00:50:29+01:00 Add support for warnings - - - - - bb367960 by Simon Hengel at 2012-02-04T00:50:37+01:00 Add tests for warnings - - - - - 6af1dc2d by Simon Hengel at 2012-02-04T00:50:50+01:00 Expand type signatures in export list (fixes haskell/haddock#192) - - - - - a06cbf25 by Simon Hengel at 2012-02-04T00:51:04+01:00 Expand type signatures for modules without explicit export list - - - - - 57dda796 by Simon Hengel at 2012-02-04T00:51:15+01:00 Remove obsolete TODO - - - - - 270c3253 by David Waern at 2012-02-04T00:51:24+01:00 Fix issues in support for warnings. * Match against local names only. * Simplify (it's OK to map over the warnings). - - - - - 683634bd by David Waern at 2012-02-04T00:55:11+01:00 Some cleanup and make sure we filter warnings through exports. - - - - - 210cb4ca by David Waern at 2012-02-04T03:01:30+01:00 Merge branch 'fix-for-186' of https://github.com/sol/haddock into ghc-7.4 - - - - - e8db9031 by David Waern at 2012-02-04T03:07:51+01:00 Style police. - - - - - 261f9462 by David Waern at 2012-02-04T03:20:16+01:00 Update tests. - - - - - 823cfc7c by David Waern at 2012-02-04T03:21:12+01:00 Use mapM_ in accept.hs as well. - - - - - 873dd619 by David Waern at 2012-02-04T03:21:33+01:00 Remove copy.hs - use accept.hs instead. - - - - - 0e31a14a by David Waern at 2012-02-04T03:47:33+01:00 Use <> instead of mappend. - - - - - 2ff7544f by David Waern at 2012-02-04T03:48:55+01:00 Remove code for older ghc versions. - - - - - dacf2786 by David Waern at 2012-02-04T15:52:51+01:00 Clean up some code from last SoC project. - - - - - 00cbb117 by David Waern at 2012-02-04T21:43:49+01:00 Mostly hlint-inspired cleanup. - - - - - 7dc86cc2 by Simon Peyton Jones at 2012-02-06T09:14:41+00:00 Track changes in HsDecls - - - - - f91f82fe by Ian Lynagh at 2012-02-16T13:40:11+00:00 Follow changes in GHC caused by the CAPI CTYPE pragma - - - - - a0ea6b0b by Ian Lynagh at 2012-02-22T02:26:12+00:00 Follow changes in GHC - - - - - b23b07d1 by Simon Peyton Jones at 2012-03-02T16:36:41+00:00 Follow changes in data representation from the big PolyKinds commit - - - - - 43406022 by Simon Hengel at 2012-03-05T11:18:34+01:00 Save/restore global state for static flags when running GHC actions This is necessary if we want to run createInterfaces (from Documentation.Haddock) multiple times in the same process. - - - - - 9fba16fe by Paolo Capriotti at 2012-03-06T10:57:33+00:00 Update .gitignore. - - - - - a9325044 by Simon Peyton Jones at 2012-03-14T17:35:42+00:00 Follow changes to tcdKindSig (Trac haskell/haddock#5937) - - - - - fd48065a by Iavor Diatchki at 2012-03-15T22:43:35-07:00 Add support for type-level literals. - - - - - 2e8206dd by Simon Peyton Jones at 2012-03-16T14:18:22+00:00 Follow changes to tcdKindSig (Trac haskell/haddock#5937) - - - - - 93e13319 by Simon Peyton Jones at 2012-03-17T01:04:05+00:00 Merge branch 'master' of http://darcs.haskell.org//haddock Conflicts: src/Haddock/Convert.hs - - - - - d253fa71 by Iavor Diatchki at 2012-03-19T20:12:18-07:00 Merge remote-tracking branch 'origin/master' into type-nats - - - - - fc40acc8 by Iavor Diatchki at 2012-03-19T20:31:27-07:00 Add a missing case for type literals. - - - - - fd2ad699 by Iavor Diatchki at 2012-03-24T13:28:29-07:00 Rename variable to avoid shadowing warning. - - - - - 9369dd3c by Simon Peyton Jones at 2012-03-26T09:14:23+01:00 Follow refactoring of TyClDecl/HsTyDefn - - - - - 38825ca5 by Simon Peyton Jones at 2012-03-26T09:14:37+01:00 Merge branch 'master' of http://darcs.haskell.org//haddock - - - - - 4324ac0f by David Waern at 2012-04-01T01:51:19+02:00 Disable unicode test. - - - - - 3165b750 by David Waern at 2012-04-01T01:51:34+02:00 Take reader environment directly from TypecheckedSource. - - - - - 213b644c by David Waern at 2012-04-01T01:55:20+02:00 Cleanup. - - - - - 3118b4ba by David Waern at 2012-04-01T02:16:15+02:00 Don't filter out unexported names from the four maps - fixes a regression. - - - - - d6524e17 by David Waern at 2012-04-01T02:40:34+02:00 Fix crash when using --qual. Naughty GHC API! - - - - - ea3c43d8 by Henning Thielemann at 2012-04-01T13:03:07+02:00 add QualOption type for distinction between qualification argument given by the user and the actual qualification for a concrete module - - - - - 5422ff05 by Henning Thielemann at 2012-04-01T16:25:02+02:00 emit an error message when the --qual option is used incorrectly - - - - - 026e3404 by David Waern at 2012-04-01T18:10:30+02:00 Don't crash on unicode strings in doc comments. - - - - - ce006632 by David Waern at 2012-04-01T20:13:35+02:00 Add test for --ignore-all-exports flag/ignore-exports pragma. - - - - - 6e4dd33c by David Waern at 2012-04-01T20:21:03+02:00 Merge branch 'dev' of https://github.com/sol/haddock into ghc-7.4 - - - - - 734ae124 by Henning Thielemann at 2012-04-01T20:22:10+02:00 Merge branch 'ghc-7.4' of http://darcs.haskell.org/haddock into ghc-7.4 - - - - - 622f9ba5 by David Waern at 2012-04-01T21:26:13+02:00 Merge http://code.haskell.org/~thielema/haddock/ into ghc-7.4 - - - - - 55ce17cb by Henning Thielemann at 2012-04-01T22:03:25+02:00 'abbreviate' qualification style - basic support Currently we ignore the package a module is imported from. This means that a module import would shadow another one with the same module name from a different package. - - - - - c85314ef by David Waern at 2012-04-01T22:05:12+02:00 Check qualification option before processing modules. - - - - - ae4b626c by Henning Thielemann at 2012-04-02T00:19:36+02:00 abbreviated qualification: use Packages.lookupModuleInAllPackages for finding the package that a module belongs to - - - - - 60bdbcf5 by Henning Thielemann at 2012-04-02T00:25:31+02:00 Merge branch 'ghc-7.4' of http://darcs.haskell.org/haddock into ghc-7.4 - - - - - df44301d by Henning Thielemann at 2012-04-02T00:29:05+02:00 qualification style 'abbreviated' -> 'aliased' - - - - - f4192a64 by David Waern at 2012-04-02T01:05:47+02:00 Merge http://code.haskell.org/~thielema/haddock/ into ghc-7.4 - - - - - 7ba09067 by David Terei at 2012-04-04T15:08:21-07:00 Fix reporting of modules safe haskell mode (#5989) - - - - - d0cc33d0 by David Terei at 2012-04-06T15:50:41+01:00 Fix reporting of modules safe haskell mode (#5989) - - - - - 6e3434c5 by Simon Peyton Jones at 2012-04-20T18:37:46+01:00 Track changes in HsSyn - - - - - 22014ed0 by Simon Peyton Jones at 2012-05-11T22:45:15+01:00 Follow changes to LHsTyVarBndrs - - - - - d9a07b24 by David Waern at 2012-05-15T01:46:35+02:00 Merge branch 'ghc-7.4' of http://darcs.haskell.org/haddock into ghc-7.4 - - - - - a6c4ebc6 by David Waern at 2012-05-16T02:18:32+02:00 Update CHANGES. - - - - - 8e181d29 by David Waern at 2012-05-16T02:27:56+02:00 Merge http://code.haskell.org/~thielema/haddock/ into ghc-7.4 - - - - - e358210d by David Waern at 2012-05-16T02:35:33+02:00 Mention the new aliased --qual mode in CHANGES. - - - - - efd36a28 by David Waern at 2012-05-16T21:33:13+02:00 Bump version number. - - - - - d6b3af14 by Simon Hengel at 2012-05-17T19:08:20+02:00 Add test for deprecated record field - - - - - 927f800e by Simon Hengel at 2012-05-17T19:08:20+02:00 Use >>= instead of fmap and join - - - - - 048b41d5 by Simon Hengel at 2012-05-17T19:08:20+02:00 newtype-wrap Doc nodes for things that may have warnings attached - - - - - e3a89fc3 by Simon Hengel at 2012-05-17T19:08:20+02:00 Attach warnings to `Documentation` type - - - - - 5d4cc43d by Simon Hengel at 2012-05-17T19:08:20+02:00 Simplify lookupWarning - - - - - cf8ae69d by Simon Hengel at 2012-05-17T19:08:20+02:00 Add test for haskell/haddock#205 - - - - - cb409b19 by Simon Peyton Jones at 2012-05-25T08:30:11+01:00 Follow changes in LHsTyVarBndrs - - - - - 2d5f4179 by Simon Hengel at 2012-05-26T19:21:29+02:00 Add Applicative instance for (GenRnM a) - - - - - e4373060 by Simon Hengel at 2012-05-26T19:21:33+02:00 Use a map for warnings, as suggested by @waern - - - - - 597a68c7 by Simon Hengel at 2012-05-27T08:48:24+02:00 Add an optional label to URLs - - - - - ef1ac7fe by Simon Hengel at 2012-05-27T08:48:24+02:00 Add support for hyperlink labels to parser - - - - - 41f2adce by Simon Hengel at 2012-05-27T08:48:24+02:00 Add golden test for hyperlinks - - - - - 83d5e764 by Simon Hengel at 2012-05-27T08:50:02+02:00 Use LANGUAGE pragmas instead of default-extensions in cabal file - - - - - ddb755e5 by Simon Hengel at 2012-05-27T08:50:02+02:00 Fix typo in comment - - - - - 110676b4 by Simon Hengel at 2012-05-27T08:50:02+02:00 Add a type signature for a where-binding - - - - - 7d9ba2a0 by Ian Lynagh at 2012-06-12T14:38:01+01:00 Follow changes in GHC - - - - - 47c704f2 by Ian Lynagh at 2012-06-12T18:52:16+01:00 Follow changes in GHC - - - - - e1efe1ab by Simon Peyton Jones at 2012-06-13T17:25:29+01:00 Follow changes for the implementation of implicit parameters - - - - - 69abc81c by Ian Lynagh at 2012-06-19T22:52:58+01:00 Follow changes in base - - - - - 9d074a21 by Paolo Capriotti at 2012-06-22T18:26:47+01:00 Use right docMap to get decl documentation. - - - - - e3292ef6 by Ian Lynagh at 2012-07-15T01:31:19+01:00 Follow changes in GHC - - - - - ceae56b0 by Ian Lynagh at 2012-07-16T21:22:48+01:00 Fix haddock following some GHC changes Passing _|_ as the Settings for defaultDynFlags no longer works well enough - - - - - 9df72735 by Paolo Capriotti at 2012-07-19T16:49:32+01:00 Forward port changes from stable. - - - - - 572f5fcf by Ian Lynagh at 2012-07-19T20:38:26+01:00 Merge branch 'master' of darcs.haskell.org:/srv/darcs//haddock - - - - - 9195aca4 by Paolo Capriotti at 2012-07-20T10:27:28+01:00 Update dependencies. - - - - - 33db3923 by Ian Lynagh at 2012-07-20T17:54:43+01:00 Build with GHC 7.7 - - - - - 925a2cea by David Waern at 2012-07-23T16:50:40+02:00 Merge branch 'dev' of https://github.com/sol/haddock into ghc-7.6 Conflicts: src/Haddock/InterfaceFile.hs - - - - - d710ef97 by David Waern at 2012-07-23T16:52:07+02:00 Bump version number. - - - - - eb0c2f83 by David Waern at 2012-07-23T16:57:58+02:00 Update CHANGES. - - - - - b3f56943 by Roman Cheplyaka at 2012-07-27T13:00:13+03:00 Hide "internal" instances This fixes haskell/haddock#37 (http://trac.haskell.org/haddock/ticket/37) Precisely, we show an instance iff its class and all the types are exported by non-hidden modules. - - - - - a70aa412 by Roman Cheplyaka at 2012-07-27T13:00:13+03:00 Tests for hiding instances (#37) - - - - - c0f4aa58 by Simon Hengel at 2012-07-27T13:00:13+03:00 Add an other test for hiding instances (#37) - - - - - a7ed6268 by Ian Lynagh at 2012-08-07T14:48:13+01:00 Follow changes in GHC - - - - - 0ab30d38 by Ian Lynagh at 2012-08-13T22:12:27+01:00 Improve haddock memory usage - - - - - 0eaa4e30 by Ian Lynagh at 2012-08-13T23:58:46+01:00 Improve haddock memory usage - - - - - 659d26cf by Ian Lynagh at 2012-08-14T13:16:48+01:00 Remove some temporary pragmas I accidentally recorded - - - - - d97fceb6 by Simon Hengel at 2012-08-25T13:19:34+02:00 Add missing dependency to library - - - - - 4c910697 by Simon Hengel at 2012-08-28T07:39:14+02:00 Move .ghci to project root - - - - - fc3c601a by Simon Hengel at 2012-08-28T07:39:14+02:00 accept.hs: Ignore some files - - - - - 1af9b984 by Simon Hengel at 2012-08-28T07:40:04+02:00 Update reference renderings (bump version) - - - - - 980dc253 by Simon Hengel at 2012-08-28T07:40:32+02:00 Update reference renderings (remove links for ()) - - - - - 33651dbf by Simon Hengel at 2012-08-28T07:41:50+02:00 Update documentation of `runInteractiveProcess` in reference rendering - - - - - 7ab25078 by David Waern at 2012-09-07T10:38:50+02:00 Merge branch 'hiddenInstances2' of http://github.com/feuerbach/haddock into ghc-7.6 - - - - - c3de3a4b by David Waern at 2012-09-07T14:29:27+02:00 Follow changes in GHC. - - - - - 298c43ac by David Waern at 2012-09-07T14:59:24+02:00 Update CHANGES. - - - - - e797993a by David Waern at 2012-09-07T15:21:30+02:00 Update ANNOUNCE. - - - - - d0b44790 by David Waern at 2012-09-07T15:22:43+02:00 Merge branch 'hidden-instances' into ghc-7.6 - - - - - 41a4adc8 by Simon Hengel at 2012-09-08T12:08:37+02:00 Update doc/README - - - - - 71ad1040 by Simon Hengel at 2012-09-08T12:17:17+02:00 Add documentation for URL labels - - - - - 9bb41afd by Simon Peyton Jones at 2012-09-20T18:14:26+01:00 Follow data type changes in the tc-untouchables branch Relating entirely to SynTyConRhs - - - - - b8139bfa by Simon Hengel at 2012-09-21T14:24:16+02:00 Disable Unicode test for now - - - - - a5fafdd7 by Simon Hengel at 2012-09-21T14:35:45+02:00 Update TypeOperators test for GHC 7.6.1 Type operators can't be used as type variables anymore! - - - - - 6ccf0025 by Simon Hengel at 2012-09-21T16:02:24+02:00 Remove (Monad (Either e)) instance from ref. rendering of CrossPackageDocs I do not really understand why the behavior changed, so I'll open a ticket, so that we can further investigate. - - - - - b5c6c138 by Ian Lynagh at 2012-09-27T02:00:57+01:00 Follow changes in GHC build system - - - - - b98eded0 by David Waern at 2012-09-27T15:37:02+02:00 Merge branch 'ghc-7.6' of http://darcs.haskell.org/haddock into ghc-7.6 - - - - - 76cc2051 by David Waern at 2012-09-27T15:48:19+02:00 Update hidden instances tests. - - - - - aeaa1c59 by David Waern at 2012-09-28T10:21:32+02:00 Make API buildable with GHC 7.6. - - - - - d76be1b0 by Simon Peyton Jones at 2012-09-28T15:57:05+01:00 Merge remote-tracking branch 'origin/master' into tc-untouchables - - - - - a1922af8 by David Waern at 2012-09-28T19:50:20+02:00 Fix spurious superclass constraints bug. - - - - - bc41bdbb by Simon Hengel at 2012-10-01T11:30:51+02:00 Remove old examples - - - - - bed7d3dd by Simon Hengel at 2012-10-01T11:30:51+02:00 Adapt parsetests for GHC 7.6.1 - - - - - dcdb22bb by Simon Hengel at 2012-10-01T11:30:51+02:00 Add test-suite section for parsetests to cabal file + get rid of HUnit dependency - - - - - 1e5263c9 by Simon Hengel at 2012-10-01T11:30:51+02:00 Remove test flag from cabal file This was not really used. - - - - - 4beee98b by David Waern at 2012-09-28T23:42:28+02:00 Merge branch 'ghc-7.6' of http://darcs.haskell.org/haddock into ghc-7.6 - - - - - 11dd2256 by Ian Lynagh at 2012-10-03T16:17:35+01:00 Follow change in GHC build system - - - - - fbd77962 by Simon Hengel at 2012-10-03T18:49:40+02:00 Remove redundant dependency from cabal file - - - - - 09218989 by Simon Hengel at 2012-10-04T16:03:05+02:00 Fix typo - - - - - 93a2d5f9 by Simon Hengel at 2012-10-04T16:11:41+02:00 Remove trailing whitespace from cabal file - - - - - c8b46cd3 by Simon Hengel at 2012-10-04T16:12:17+02:00 Export Haddock's main entry point from library - - - - - b411e77b by Simon Hengel at 2012-10-04T16:29:46+02:00 Depend on library for executable The main motivation for this is to increase build speed. In GHC's source tree the library is not build, but all modules are now required for the executable, so that GHC's validate will now detect build failures for the library. - - - - - f8f0979f by Simon Hengel at 2012-10-05T00:32:57+02:00 Set executable flag for Setup.lhs - - - - - dd045998 by Simon Hengel at 2012-10-07T16:44:06+02:00 Extend rather than set environment when running HTML tests On some platforms (e.g. ppc64) GHC requires gcc in the path. - - - - - 7b39c3ae by Simon Hengel at 2012-10-07T17:05:45+02:00 cross-package test: re-export IsString instead of Monad There is a monad instance for Q, which is not available on platforms that do not have GHCi support. This caused CrossPackageDocs to fail on those platforms. Re-exporting IsString should test the same thing, but it works on all platforms. - - - - - 0700c605 by Simon Hengel at 2012-10-07T19:06:34+02:00 runtests.hs: Fix some warnings - - - - - f78eca79 by Simon Hengel at 2012-10-07T19:06:34+02:00 runtests.hs: Make -Wall proof - - - - - 6beec041 by Simon Hengel at 2012-10-07T19:06:34+02:00 runtests.hs: Use listToMaybe/fromMaybe instead of safeHead/maybe - - - - - 44b8ce86 by Ian Lynagh at 2012-10-08T21:59:46+01:00 Follow changes in GHC - - - - - 6da5f702 by Simon Hengel at 2012-10-09T11:16:19+02:00 Update .ghci - - - - - 9ac1a1b9 by Kazu Yamamoto at 2012-10-09T12:45:31+02:00 Add markup support for properties - - - - - 1944cb42 by Simon Hengel at 2012-10-09T12:45:31+02:00 Simplify lexing/parsing of properties In contrast to what we do for examples, we do not really need to capture the "prompt" here. - - - - - bffd8e62 by Simon Hengel at 2012-10-09T13:40:14+02:00 Add HTML test for properties - - - - - 2fe9c5cb by Simon Hengel at 2012-10-09T13:40:21+02:00 Add unit tests for properties - - - - - 874e361b by Simon Hengel at 2012-10-09T13:40:33+02:00 Bump interface version - - - - - 2506cc37 by Simon Hengel at 2012-10-09T15:15:04+02:00 Fix parser bug - - - - - 743d2b7d by Simon Hengel at 2012-10-09T15:31:06+02:00 Allow to load interface files with compatible versions - - - - - 981a1660 by Simon Hengel at 2012-10-10T10:32:05+02:00 Export more types from Documentation.Haddock (fixes haskell/haddock#216) - - - - - dff7dc76 by Simon Hengel at 2012-10-10T11:15:19+02:00 Update ANNOUNCE and CHANGES - - - - - edd2bb01 by Simon Hengel at 2012-10-10T11:22:50+02:00 Bump version - - - - - 5039163b by Simon Hengel at 2012-10-10T13:56:04+02:00 Fix typo in documentation - - - - - e4ce34da by Simon Hengel at 2012-10-10T14:28:35+02:00 Add documentation for properties - - - - - 9555ebca by Simon Hengel at 2012-10-11T10:49:04+02:00 Remove redundant if-defs, more source documentation - - - - - 87aa67e1 by Simon Hengel at 2012-10-11T12:32:51+02:00 Adapt cabal file - - - - - c44c1dee by Simon Hengel at 2012-10-11T12:41:58+02:00 Require ghc 7.6 - - - - - 8383bc34 by Simon Hengel at 2012-10-11T12:50:24+02:00 Bump version - - - - - 1030eb38 by Simon Hengel at 2012-10-11T12:55:44+02:00 Update ANNOUNCE and CHANGES - - - - - 74955088 by Simon Hengel at 2012-10-12T09:49:31+02:00 Improve note about `binaryInterfaceVersion` (thanks David) - - - - - ee30f6b7 by Simon Hengel at 2012-10-13T13:40:59+02:00 Update version in html tests, rpm spec file, and user manual - - - - - f2861f18 by Simon Hengel at 2012-10-13T14:40:33+02:00 Remove unused MonadFix constraint - - - - - dfdf1a74 by Simon Hengel at 2012-10-13T15:15:38+02:00 Minor code simplification - - - - - 4ecd1e70 by Simon Hengel at 2012-10-13T15:33:43+02:00 Increase code locality - - - - - f7df5cc9 by Simon Hengel at 2012-10-13T16:03:12+02:00 Minor code simplification - - - - - e737eb6e by Simon Hengel at 2012-10-13T19:03:04+02:00 Handle HsExplicitListTy in renameer (fixes haskell/haddock#213) - - - - - c2dc8f17 by Simon Hengel at 2012-10-13T20:46:31+02:00 Better error messages - - - - - 14d48b4c by Simon Hengel at 2012-10-14T00:21:07+02:00 Simplify RnM type - - - - - 6c2cc547 by Simon Hengel at 2012-10-14T00:23:35+02:00 Simplify lookupRn - - - - - bc77ce85 by Simon Hengel at 2012-10-14T01:51:32+02:00 Organize unite tests hierarchically - - - - - 2306d117 by Simon Hengel at 2012-10-14T10:34:58+02:00 Handle more cases in renameType - - - - - 8a864203 by Simon Hengel at 2012-10-14T11:47:59+02:00 Add mini_HiddenInstances.html.ref and mini_HiddenInstancesB.html.ref - - - - - 3a978eca by Simon Hengel at 2012-10-14T11:49:28+02:00 Add /tests/html-tests/output/ to .gitignore - - - - - db18888a by Simon Hengel at 2012-10-14T13:38:21+02:00 Allow haddock markup in deprecation messages - - - - - e7cfee9f by Simon Hengel at 2012-10-14T14:00:23+02:00 If parsing of deprecation message fails, include it verbatim - - - - - 242a85be by Simon Hengel at 2012-10-14T14:13:24+02:00 Add description for PruneWithWarning test - - - - - 43d33df1 by Simon Hengel at 2012-10-14T15:40:53+02:00 Minor formatting change - - - - - 22768c44 by Simon Hengel at 2012-10-14T16:03:43+02:00 Properly handle deprecation messages for re-exported things (fixes haskell/haddock#220) - - - - - cb4b9111 by Simon Hengel at 2012-10-14T17:30:28+02:00 Add build artifacts for documentation to .gitignore - - - - - 854cd8de by Simon Hengel at 2012-10-14T23:34:51+02:00 unit-tests: Improve readability Add IsString instance for (Doc RdrName) + use <> instead of DocAppend. - - - - - c4446d54 by Simon Hengel at 2012-10-14T23:37:21+02:00 unit-tests: Minor refactoring Rename parse to parseParas. - - - - - 04f2703c by Simon Hengel at 2012-10-15T00:36:42+02:00 Fix typo - - - - - 3d109e44 by Simon Hengel at 2012-10-15T10:30:07+02:00 Add description for DeprecatedReExport test - - - - - 84f0985c by Simon Hengel at 2012-10-15T14:54:19+02:00 Move resources to /resources directory - - - - - a5de7ca6 by Simon Hengel at 2012-10-15T15:46:18+02:00 Move HTML tests to directory /html-test/ - - - - - e21f727d by Simon Hengel at 2012-10-15T19:32:42+02:00 Move HTML reference renderings to /html-test/ref/ - - - - - 3a3c6c75 by Simon Hengel at 2012-10-15T19:32:42+02:00 Copy css, images, etc. on accept - - - - - 40ead6dc by Simon Hengel at 2012-10-15T19:32:42+02:00 Move unit tests to /test directory - - - - - 99a28231 by Simon Hengel at 2012-10-15T19:32:42+02:00 Fix Setup.lhs /usr/bin/runhaskell is not installed on all systems. - - - - - 95faf45e by Simon Hengel at 2012-10-15T19:32:42+02:00 Make test management scripts more robust * They are now independent from the current directory, and hence can be called from everywhere * On UNIX/Linux they can now be run as scripts - - - - - 027aaa2d by Simon Hengel at 2012-10-15T19:53:40+02:00 Add 'dev' flag to cabal file, that builds without -O2 That way --disable-optimization can be used, which decreases build time considerably. - - - - - e0266ede by Simon Hengel at 2012-10-15T20:03:43+02:00 Add test case for "spurious superclass constraints bug" - - - - - 52a2aa92 by Simon Hengel at 2012-10-15T20:28:55+02:00 Adapt accept.lhs, so that it ignores more index files - - - - - 53530781 by Simon Hengel at 2012-10-15T20:49:39+02:00 Rename html-test/runtests.lhs to html-test/run.lhs - - - - - 84518797 by Simon Hengel at 2012-10-15T20:49:39+02:00 Move source files for HTML tests to html-test/src - - - - - a911dc6c by Simon Hengel at 2012-10-15T20:49:39+02:00 Adapt output directory for HTML tests - - - - - d3c15857 by Ian Lynagh at 2012-10-16T16:54:43+01:00 Follow dopt->gopt rename - - - - - 956665a5 by Simon Hengel at 2012-10-18T08:42:48+02:00 Update html-test/README - - - - - 903b1029 by Simon Hengel at 2012-10-18T08:50:26+02:00 Use markdown for html-test/README - - - - - 150b4d63 by Ian Lynagh at 2012-10-18T16:36:00+01:00 Follow changes in GHC: 'flags' has been renamed 'generalFlags' - - - - - 41e04ff9 by Simon Hengel at 2012-11-28T09:54:35+01:00 Export missing types from Documentation.Haddock - - - - - 9be59237 by Ian Lynagh at 2012-11-30T23:20:47+00:00 Update dependencies - - - - - e06842f5 by Simon Hengel at 2012-12-07T20:58:05+01:00 Bump version - - - - - e3dbede0 by Simon Hengel at 2012-12-07T20:58:05+01:00 Add missing test files to cabal file (fixes haskell/haddock#230) - - - - - ee0dcca7 by Simon Hengel at 2012-12-07T20:58:05+01:00 Update CHANGES - - - - - 51601bdb by Simon Peyton Jones at 2012-12-19T17:28:35+00:00 Track changes in UNPACK pragma stuff - - - - - f2573bc1 by Richard Eisenberg at 2012-12-21T20:56:25-05:00 Implement overlapping type family instances. An ordered, overlapping type family instance is introduced by 'type instance where', followed by equations. See the new section in the user manual (7.7.2.2) for details. The canonical example is Boolean equality at the type level: type family Equals (a :: k) (b :: k) :: Bool type instance where Equals a a = True Equals a b = False A branched family instance, such as this one, checks its equations in order and applies only the first the matches. As explained in the note [Instance checking within groups] in FamInstEnv.lhs, we must be careful not to simplify, say, (Equals Int b) to False, because b might later unify with Int. This commit includes all of the commits on the overlapping-tyfams branch. SPJ requested that I combine all my commits over the past several months into one monolithic commit. The following GHC repos are affected: ghc, testsuite, utils/haddock, libraries/template-haskell, and libraries/dph. Here are some details for the interested: - The definition of CoAxiom has been moved from TyCon.lhs to a new file CoAxiom.lhs. I made this decision because of the number of definitions necessary to support BranchList. - BranchList is a GADT whose type tracks whether it is a singleton list or not-necessarily-a-singleton-list. The reason I introduced this type is to increase static checking of places where GHC code assumes that a FamInst or CoAxiom is indeed a singleton. This assumption takes place roughly 10 times throughout the code. I was worried that a future change to GHC would invalidate the assumption, and GHC might subtly fail to do the right thing. By explicitly labeling CoAxioms and FamInsts as being Unbranched (singleton) or Branched (not-necessarily-singleton), we make this assumption explicit and checkable. Furthermore, to enforce the accuracy of this label, the list of branches of a CoAxiom or FamInst is stored using a BranchList, whose constructors constrain its type index appropriately. I think that the decision to use BranchList is probably the most controversial decision I made from a code design point of view. Although I provide conversions to/from ordinary lists, it is more efficient to use the brList... functions provided in CoAxiom than always to convert. The use of these functions does not wander far from the core CoAxiom/FamInst logic. BranchLists are motivated and explained in the note [Branched axioms] in CoAxiom.lhs. - The CoAxiom type has changed significantly. You can see the new type in CoAxiom.lhs. It uses a CoAxBranch type to track branches of the CoAxiom. Correspondingly various functions producing and consuming CoAxioms had to change, including the binary layout of interface files. - To get branched axioms to work correctly, it is important to have a notion of type "apartness": two types are apart if they cannot unify, and no substitution of variables can ever get them to unify, even after type family simplification. (This is different than the normal failure to unify because of the type family bit.) This notion in encoded in tcApartTys, in Unify.lhs. Because apartness is finer-grained than unification, the tcUnifyTys now calls tcApartTys. - CoreLinting axioms has been updated, both to reflect the new form of CoAxiom and to enforce the apartness rules of branch application. The formalization of the new rules is in docs/core-spec/core-spec.pdf. - The FamInst type (in types/FamInstEnv.lhs) has changed significantly, paralleling the changes to CoAxiom. Of course, this forced minor changes in many files. - There are several new Notes in FamInstEnv.lhs, including one discussing confluent overlap and why we're not doing it. - lookupFamInstEnv, lookupFamInstEnvConflicts, and lookup_fam_inst_env' (the function that actually does the work) have all been more-or-less completely rewritten. There is a Note [lookup_fam_inst_env' implementation] describing the implementation. One of the changes that affects other files is to change the type of matches from a pair of (FamInst, [Type]) to a new datatype (which now includes the index of the matching branch). This seemed a better design. - The TySynInstD constructor in Template Haskell was updated to use the new datatype TySynEqn. I also bumped the TH version number, requiring changes to DPH cabal files. (That's why the DPH repo has an overlapping-tyfams branch.) - As SPJ requested, I refactored some of the code in HsDecls: * splitting up TyDecl into SynDecl and DataDecl, correspondingly changing HsTyDefn to HsDataDefn (with only one constructor) * splitting FamInstD into TyFamInstD and DataFamInstD and splitting FamInstDecl into DataFamInstDecl and TyFamInstDecl * making the ClsInstD take a ClsInstDecl, for parallelism with InstDecl's other constructors * changing constructor TyFamily into FamDecl * creating a FamilyDecl type that stores the details for a family declaration; this is useful because FamilyDecls can appear in classes but other decls cannot * restricting the associated types and associated type defaults for a * class to be the new, more restrictive types * splitting cid_fam_insts into cid_tyfam_insts and cid_datafam_insts, according to the new types * perhaps one or two more that I'm overlooking None of these changes has far-reaching implications. - The user manual, section 7.7.2.2, is updated to describe the new type family instances. - - - - - f788d0fb by Simon Peyton Jones at 2012-12-23T15:49:58+00:00 Track changes in HsBang - - - - - ca460a0c by Simon Peyton Jones at 2012-12-23T15:50:28+00:00 Merge branch 'master' of http://darcs.haskell.org//haddock - - - - - f078fea6 by Simon Peyton Jones at 2013-01-02T08:33:13+00:00 Use InstEnv.instanceSig rather than instanceHead (name change) - - - - - 88e41305 by Simon Peyton Jones at 2013-01-14T17:10:27+00:00 Track change to HsBang type - - - - - e1ad4e19 by Kazu Yamamoto at 2013-02-01T11:59:24+09:00 Merge branch 'ghc-7.6' into ghc-7.6-merge-2 Conflicts: haddock.cabal src/Haddock/Interface/AttachInstances.hs src/Haddock/Interface/Create.hs src/Haddock/Interface/LexParseRn.hs src/Haddock/InterfaceFile.hs src/Haddock/Types.hs Only GHC HEAD can compile this. GHC 7.6.x cannot compile this. Some test fail. - - - - - 62bec012 by Kazu Yamamoto at 2013-02-06T11:12:28+09:00 Using tcSplitSigmaTy in instanceHead' (FIXME is resolved.) - - - - - 013fd2e4 by Kazu Yamamoto at 2013-02-06T17:56:21+09:00 Refactoring instanceHead'. - - - - - 3148ce0e by Kazu Yamamoto at 2013-02-07T17:45:10+09:00 Using new syntax in html-test/src/GADTRecords.hs. - - - - - 626dabe7 by Gabor Greif at 2013-02-15T22:42:01+01:00 Typo - - - - - 1eb667ae by Ian Lynagh at 2013-02-16T17:02:07+00:00 Follow changes in base - - - - - 3ef8253a by Ian Lynagh at 2013-03-01T23:23:57+00:00 Follow changes in GHC's build system - - - - - 1a265a3c by Ian Lynagh at 2013-03-03T23:12:07+00:00 Follow changes in GHC build system - - - - - 69941c79 by Max Bolingbroke at 2013-03-10T09:38:28-07:00 Use Alex 3's Unicode support to properly lex source files as UTF-8 Signed-off-by: David Waern <david.waern at gmail.com> - - - - - ea687dad by Simon Peyton Jones at 2013-03-15T14:16:10+00:00 Adapt to tcRnGetInfo returning family instances too This API change was part of the fix to Trac haskell/haddock#4175. But it offers new information to Haddock: the type-family instances, as well as the class instances, of this type. This patch just drops the new information on the floor, but there's an open opportunity to use it in the information that Haddock displays. - - - - - 971a30b0 by Andreas Voellmy at 2013-05-19T20:47:39+01:00 Fix for haskell/haddock#7879. Changed copy of utils/haddock/html/resources/html to use "cp -RL" rather than "cp -R". This allows users to run validate in a build tree, where the build tree was setup using lndir with a relative path to the source directory. - - - - - 31fb7694 by Ian Lynagh at 2013-05-19T20:47:49+01:00 Use "cp -L" when making $(INPLACE_LIB)/latex too - - - - - e9952233 by Simon Hengel at 2013-06-01T18:06:50+02:00 Add -itest to .ghci - - - - - b06873b3 by Mateusz Kowalczyk at 2013-06-01T18:06:50+02:00 Workaround for a failing build with --enable-tests. - - - - - e7858d16 by Simon Hengel at 2013-06-01T19:29:28+02:00 Fix broken test - - - - - 0690acb1 by Richard Eisenberg at 2013-06-21T14:08:25+01:00 Updates to reflect changes in HsDecls to support closed type families. - - - - - 7fd347ec by Simon Hengel at 2013-07-08T10:28:48+02:00 Fix failing test - - - - - 53ed81b6 by Simon Hengel at 2013-07-08T10:28:48+02:00 Fix failing test - - - - - 931c4f4f by Richard Eisenberg at 2013-07-24T13:15:59+01:00 Remove (error "synifyKind") to use WithinType, to allow haddock to process base. - - - - - 55a9c804 by Richard Eisenberg at 2013-08-02T15:54:55+01:00 Changes to reflect changes in GHC's type HsTyVarBndr - - - - - b6e9226c by Mathieu Boespflug at 2013-08-04T10:39:43-07:00 Output Copright and License keys in Xhtml backend. This information is as relevant in the documentation as it is in the source files themselves. Signed-off-by: David Waern <david.waern at gmail.com> - - - - - 4c66028a by David Waern at 2013-08-04T15:27:36-07:00 Bump interface file version. - - - - - 67340163 by David Waern at 2013-08-09T16:12:51-07:00 Update tests. - - - - - 2087569b by Mateusz Kowalczyk at 2013-08-25T09:24:13+02:00 Add spec tests. This adds tests for all elements we can create during regular parsing. This also adds tests for text with unicode in it. - - - - - 97f36a11 by Mateusz Kowalczyk at 2013-08-27T06:59:12+01:00 Fix ticket haskell/haddock#247. I do the same thing that the XHTML backend does: give these no special treatment and just act as if they are regular functions. - - - - - 60681b4f by Mateusz Kowalczyk at 2013-08-27T21:22:48+02:00 LaTeX tests setup - - - - - fa4c27b2 by Mateusz Kowalczyk at 2013-09-02T23:21:43+01:00 Fixes haskell/haddock#253 - - - - - 1a202490 by Mateusz Kowalczyk at 2013-09-03T01:12:50+01:00 Use Hspec instead of nanospec This is motivated by the fact that Haddock tests are not ran by the GHC's ‘validate’ script so we're pretty liberal on dependencies in that area. Full Hspec gives us some nice features such as Quickcheck integration. - - - - - 8cde3b20 by David Luposchainsky at 2013-09-08T07:27:28-05:00 Fix AMP warnings Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - d10661f2 by Herbert Valerio Riedel at 2013-09-11T15:15:01+02:00 Update Git repo URL in `.cabal` file - - - - - 16a44eb5 by Richard Eisenberg at 2013-09-17T09:34:26-04:00 Revision to reflect new role annotation syntax in GHC. - - - - - 4b9833b9 by Herbert Valerio Riedel at 2013-09-18T10:15:28+02:00 Add missing `traverse` method for `GenLocated` As `Traversable` needs at least one of `traverse` or `sequenceA` to be overridden. Signed-off-by: Herbert Valerio Riedel <hvr at gnu.org> - - - - - b71fed5d by Simon Hengel at 2013-09-18T22:43:34+02:00 Add test helper - - - - - 4fc1ea86 by Mateusz Kowalczyk at 2013-09-18T22:43:34+02:00 Fixes haskell/haddock#231 - - - - - 435872f6 by Mateusz Kowalczyk at 2013-09-18T22:43:34+02:00 Fixes haskell/haddock#256 We inject -dynamic-too into flags before we run all our actions in the GHC monad. - - - - - b8b24abb by Mateusz Kowalczyk at 2013-09-18T22:43:35+02:00 Add new field to DynFlags - - - - - 49558795 by Simon Hengel at 2013-09-18T22:43:35+02:00 Fallback to ./resources when Cabal data is not found (so that themes are found during development) - - - - - bf79d05c by Mateusz Kowalczyk at 2013-09-18T22:43:35+02:00 Fixes haskell/haddock#5 - - - - - e1baebc2 by Mateusz Kowalczyk at 2013-09-18T22:43:35+02:00 Print missing documentation. Fixes haskell/haddock#258. - - - - - 02ea74de by Austin Seipp at 2013-10-09T10:52:22-05:00 Don't consider StaticFlags when parsing arguments. Instead, discard any static flags before parsing the command line using GHC's DynFlags parser. See http://ghc.haskell.org/trac/ghc/ticket/8276 Based off a patch from Simon Hengel. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - 704fd5bb by Simon Hengel at 2013-11-09T00:15:13+01:00 Update HTML tests - - - - - f9fed49e by Simon Hengel at 2013-11-10T18:43:58+01:00 Bump version - - - - - 97ae1999 by Simon Peyton Jones at 2013-11-25T17:25:14+00:00 Track changes in HsSpliceTy data constructor - - - - - 59ad8268 by Simon Peyton Jones at 2014-01-10T18:17:43+00:00 Adapt to small change in Pretty's exports - - - - - 8b12e6aa by Simon Hengel at 2014-01-12T14:48:35-06:00 Some code simplification by using traverse - - - - - fc5ea9a2 by Simon Hengel at 2014-01-12T14:48:35-06:00 Fix warnings in test helper - - - - - 6dbb3ba5 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Add ByteString version of Attoparsec - - - - - 968d7774 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 One pass parser and tests. We remove the HTML test as it is no longer necessary. We cover the test case in spec tests and other HTML tests but keeping this around fails: this is because the new parser has different semantics there. In fact, I suspect the original behaviour was a bug that wasn't caught/fixed but simply included as-is during the testing. - - - - - 37a07c9c by Simon Hengel at 2014-01-12T14:48:35-06:00 Rename Haddock.ParseSpec to Haddock.ParserSpec - - - - - f0f68fe9 by Simon Hengel at 2014-01-12T14:48:35-06:00 Don't append newline to parseString input We also check that we have parsed everything with endOfInput. - - - - - 95d60093 by Simon Hengel at 2014-01-12T14:48:35-06:00 Fix totality, unicode, examples, paragraph parsing Also simplify specs and parsers while we're at it. Some parsers were made more generic. This commit is a part of GHC pre-merge squash, email fuuzetsu at fuuzetsu.co.uk if you need the full commit history. - - - - - 7d99108c by Simon Hengel at 2014-01-12T14:48:35-06:00 Update acceptance tests - - - - - d1b59640 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Support for bold. Conflicts: src/Haddock/Backends/Hoogle.hs src/Haddock/Interface/Rename.hs src/Haddock/Parser.hs - - - - - 4b412b39 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Allow for headings inside function documentation. LaTeX will treat the h3-h6 headings the same as we'd have to hack the style file heavily otherwise and it would make the headings tiny anyway. Hoogle upstream said they will put in the functionality on their end. Conflicts: src/Haddock/Interface/Rename.hs src/Haddock/Types.hs test/Haddock/ParserSpec.hs - - - - - fdcca428 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Per-module extension flags and language listing. Any extensions that are not enabled by a used language (Haskell2010 &c) will be shown. Furthermore, any implicitly enabled are also going to be shown. While we could eliminate this either by using the GHC API or a dirty hack, I opted not to: if a user doesn't want the implied flags to show, they are recommended to use enable extensions more carefully or individually. Perhaps this will encourage users to not enable the most powerful flags needlessly. Enabled with show-extensions. Conflicts: src/Haddock/InterfaceFile.hs - - - - - 368942a2 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Bump interface version There were some breaking changes over the last few patches so we bump the interface version. This causes a big problem with testing: 1. To generate cross package docs, we first need to generate docs for the package used. 2. To generate package docs with new interface version, we need to use Haddock which has the version bumped. 3. To get Haddock with the version bump, we first need to test cross package docs 4. GOTO 1 So the problem is the chicken and the egg problem. It seems that the only solution would be to generate some interface files on the fly but it is non-trivial. To run this test, you'll have to: * build Haddock without the test (make sure everything else passes) * rebuild the packages used in the test with your shiny new binary making sure they are visible to Haddock * remove the ‘_hidden’ suffix and re-run the tests Note: because the packages currently used for this test are those provided by GHC, it's probably non-trivial to just re-build them. Preferably something less tedious to rebuild should be used and something that is not subject to change. - - - - - 124ae7a9 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Allow for nesting of paragraphs under lists. The nesting rules are similar to Markdown's with the exception that we can not simply indent the first line of a hard wrapped indented paragraph and have it treated as if it was fully indented. The reason is differences in markup as some of our constructs care about whitespace while others just swallow everything up so it's just a lot easier to not bother with it rather than making arbitrary rules. Note that we now drop trailing for string entities inside of lists. They weren't needed and it makes the output look uniform whether we use a single or double newline between list elements. Conflicts: src/Haddock/Parser.hs test/Haddock/ParserSpec.hs - - - - - c7913535 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Allow escaping in URLs and pictures. Some tests were moved under parseString as they weren't about paragraph level markup. Conflicts: src/Haddock/Parser.hs test/Haddock/ParserSpec.hs - - - - - 32326680 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Update documentation. - - - - - fbef6406 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Update maintainer - - - - - b40e82f4 by Mateusz Kowalczyk at 2014-01-13T02:39:25-06:00 Fixes haskell/haddock#271 Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - f4eafbf8 by Gergő Érdi at 2014-01-19T15:35:16-06:00 Support for -XPatternSynonyms Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - a8939591 by Austin Seipp at 2014-01-29T08:09:04-06:00 Update CPP check for __GLASGOW_HASKELL__ Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - 30d7e9d5 by Gergő Érdi at 2014-01-31T00:15:01+08:00 <+>: Don't insert a space when concatenating empty nodes - - - - - a25ccd4d by Mateusz Kowalczyk at 2014-01-30T17:22:34+01:00 Fix @ code blocks In cases where we had some horizontal space before the closing ‘@’, the parser would not accept the block as a code block and we'd get ugly output. - - - - - 0f67305a by Mateusz Kowalczyk at 2014-01-30T17:22:34+01:00 Update tests This updates tests due to Haddock Trac haskell/haddock#271 fix and due to removal of TypeHoles as an extension from GHC. - - - - - 157322a7 by Gergő Érdi at 2014-01-31T01:03:17+08:00 Handle infix vs prefix names correctly everywhere, by explicitly specifying the context The basic idea is that "a" and "+" are either pretty-printed as "a" and "(+)" or "`a`" and "+" - - - - - aa6d9685 by Mateusz Kowalczyk at 2014-01-30T17:21:50+00:00 Correct whitespace in ‘hidden’ test for <+> change - - - - - 121872f0 by Mateusz Kowalczyk at 2014-02-09T17:59:12+00:00 Document module header. Fixes Haddock Trac haskell/haddock#270. - - - - - e3253746 by Mateusz Kowalczyk at 2014-02-10T21:37:48+00:00 Insert a space between module link and description Fixes Haddock Trac haskell/haddock#277. - - - - - 771d2384 by Mateusz Kowalczyk at 2014-02-10T23:27:21+00:00 Ensure a space between type signature and ‘Source’ This is briefly related to Haddock Trac haskell/haddock#249 and employs effectively the suggested fix _but_ it doesn't actually fix the reported issue. This commit simply makes copying the full line a bit less of a pain. - - - - - 8cda9eff by nand at 2014-02-11T15:48:30+00:00 Add support for type/data families This adds support for type/data families with their respective instances, as well as closed type families and associated type/data families. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - 3f22c510 by nand at 2014-02-11T15:53:50+00:00 Improve display of poly-kinded type operators This now displays them as (==) k a b c ... to mirror GHC's behavior, instead of the old (k == a) b c ... which was just wrong. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - effb2d6b by nand at 2014-02-11T15:56:50+00:00 Add test case for PatternSynonyms This just tests various stuff including poly-kinded patterns and operator patterns to make sure the rendering isn't broken. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - b38faf0d by Niklas Haas at 2014-02-13T21:53:32+00:00 Get rid of re-implementation of sortBy I have no idea what this was doing lying around here, and due to the usage of tuples it's actually slower, too. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - ac1e0413 by Mateusz Kowalczyk at 2014-02-13T23:57:16+00:00 Only warn about missing docs when docs are missing This fixes the ‘Missing documentation for…’ message for modules with 100% coverage. - - - - - cae2e36a by Niklas Haas at 2014-02-15T21:56:18+00:00 Add test case for inter-module type/data family instances These should show up in every place where the class is visible, and indeed they do right now. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - 8bea5c3a by Mateusz Kowalczyk at 2014-02-19T05:11:34+00:00 Use a bespoke data type to indicate fixity This deals with what I imagine was an ancient TODO and makes it much clearer what the argument actually does rather than having the user chase down the comment. - - - - - 5b52d57c by Niklas Haas at 2014-02-22T21:31:03+01:00 Strip a single leading space from bird tracks (#201) This makes bird tracks in the form > foo > bar > bat parse as if they had been written as >foo >bar >bat ie. without the leading whitespace in front of every line. Ideally we also want to look into how leading whitespace affects code blocks written using the @ @ syntax, which are currently unaffected by this patch. - - - - - 5a1315a5 by Simon Hengel at 2014-02-22T21:55:35+01:00 Turn a source code comment into specs - - - - - 784cfe58 by Mateusz Kowalczyk at 2014-02-23T05:02:22+00:00 Update test case for lifted GADT type rendering The parsing of these seems to have been fixed by GHC folk and it now renders differently. IMHO it now renders in a better way so I'm updating the test to reflect this. - - - - - c3c88c2f by Mateusz Kowalczyk at 2014-02-23T06:37:14+00:00 Don't shadow ‘strip’. -Wall complains - - - - - 293031d8 by Niklas Haas at 2014-02-23T15:21:52+01:00 Make ImplicitParams render correctly (#260) This introduces a new precedence level for single contexts (because implicit param contexts always need parens around them, but other types of contexts don't necessarily, even when alone) - - - - - 4200842d by Niklas Haas at 2014-02-23T15:37:13+01:00 Lower precedence of equality constraints This drops them to the new precedence pREC_CTX, which makes single eqaulity constraints show up as (a ~ b) => ty, in line with GHC's rendering. Additional tests added to make sure other type operators render as intended. Current behavior matches GHC - - - - - b59e3227 by Niklas Haas at 2014-02-23T16:11:22+01:00 Add RankNTypes test case to ImplicitParams.hs This test actually tests what haskell/haddock#260 originally reported - I omitted the RankNTypes scenario from the original fix because I realized it's not relevant to the underlying issue and indeed, this renders as intended now. Still good to have more tests. - - - - - c373dbf7 by Mateusz Kowalczyk at 2014-02-24T06:09:54+00:00 Fix rendering of Contents when links are present Fixes Haddock Trac haskell/haddock#267. - - - - - 9ecb0e56 by Mateusz Kowalczyk at 2014-02-24T06:26:50+00:00 Fix wording in the docs - - - - - 4f4dcd8e by Mateusz Kowalczyk at 2014-02-27T03:00:33+00:00 Change rendering of duplicate record field docs See Haddock Trac haskell/haddock#195. We now change this behaviour to only rendering the documentation attached to the first instance of a duplicate field. Perhaps we could improve this by rendering the first instance that has documentation attached to it but for now, we'll stick with this. - - - - - ad8aa609 by Niklas Haas at 2014-03-08T09:43:26+01:00 Render fixity information Affects functions, type synonyms, type families, class names, data type names, constructors, data families, associated TFs/DFs, type synonyms, pattern synonyms and everything else I could think of. - - - - - 6a39c917 by Niklas Haas at 2014-03-09T07:43:39+01:00 Reorder topDeclElem to move the source/wiki links to the top They appear in the same position due to the float: right attribute but now they're always at the top of the box instead of at the bottom. - - - - - 2d34b3b4 by Niklas Haas at 2014-03-09T07:53:46+01:00 Use optLast instead of listToMaybe for sourceUrls/wikiUrls This lets you override them using eg. cabal haddock --haddock-options, which can come in handy if you want to use a different layout or URL for your source code links than cabal-install generates. - - - - - 0eff4624 by Niklas Haas at 2014-03-09T07:53:46+01:00 Differentiate between TH splices (line-links) and regular names This adds a new type of source code link, to a specific line rather than a specific declaration/name - this is used to link to the location of a TH splice that defines a certain name. Rather hefty changes throughout and still one unresolved issue (the line URLs aren't parsed from the third form of --read-interface which means they're currently restricted to same-interface links). Not sure if this issue is really worth all the hassle, especially since we could just use line links in general. This commit also contains some cleanup/clarification of the types in Haddock.Backends.Xhtml.Decl and shortens some overlong lines in the process. Notably, the Bool parameter was replaced by a Unicode type synonym to help clarify its presence in type signatures. - - - - - 66d6f77b by Niklas Haas at 2014-03-09T20:02:43+01:00 Group similar fixities together Identical fixities declared for the same line should now render using syntax like: infix 4 <, >=, >, <= - - - - - 6587f9f5 by Mateusz Kowalczyk at 2014-03-10T04:24:18+00:00 Update changelog - - - - - 7387ddad by Niklas Haas at 2014-03-11T10:26:04+01:00 Include fixity information in the Interface file This resolves fixity information not appearing across package borders. The binary file version has been increased accordingly. - - - - - ab46ef44 by Niklas Haas at 2014-03-11T10:26:04+01:00 Update changelog - - - - - 565cab6f by Niklas Haas at 2014-03-11T10:26:04+01:00 Update appearance of fixity annotations This moves them in-line with their corresponding lines, similar to a presentation envision by @hvr and described in #ghc. Redundant operator names are also omitted when no ambiguity is present. - - - - - 5d7afd67 by Niklas Haas at 2014-03-11T10:26:05+01:00 Filter family instances of hidden types Currently, this check does not extend to hidden right hand sides, although it probably should hide them in that case. - - - - - ec291b0c by Niklas Haas at 2014-03-11T10:26:05+01:00 Add documentation for --source-entity-line - - - - - 0922e581 by Niklas Haas at 2014-03-11T10:37:32+01:00 Revert "Reorder topDeclElem to move the source/wiki links to the top" This reverts commit 843c42c4179526a2ad3526e4c7d38cbf4d50001d. This change is no longer needed with the new rendering style, and it messes with copy/pasting lines. - - - - - 30618e8b by Mateusz Kowalczyk at 2014-03-11T09:41:07+00:00 Bump version to 2.15.0 - - - - - adf3f1bb by Mateusz Kowalczyk at 2014-03-11T09:41:09+00:00 Fix up some whitespace - - - - - 8905f57d by Niklas Haas at 2014-03-13T19:18:06+00:00 Hide RHS of TFs with non-exported right hand sides Not sure what to do about data families yet, since technically it would not make a lot of sense to display constructors that cannot be used by the user. - - - - - 5c44d5c2 by Niklas Haas at 2014-03-13T19:18:08+00:00 Add UnicodeSyntax alternatives for * and -> I could not find a cleaner way to do this other than checking for string equality with the given built-in types. But seeing as it's actually equivalent to string rewriting in GHC's implementation of UnicodeSyntax, it's probably fitting. - - - - - b04a63e6 by Niklas Haas at 2014-03-13T19:18:10+00:00 Display minimal complete definitions for type classes This corresponds to the new {-# MINIMAL #-} pragma present in GHC 7.8+. I also cleaned up some of the places in which ExportDecl is used to make adding fields easier in the future. Lots of test cases have been updated since they now render with minimality information. - - - - - a4a20b16 by Niklas Haas at 2014-03-13T19:18:12+00:00 Strip links from recently added html tests These were accidentally left there when the tests were originally added - - - - - d624f315 by Mateusz Kowalczyk at 2014-03-13T19:19:31+00:00 Update changelog - - - - - d27a21ac by Mateusz Kowalczyk at 2014-03-13T21:19:07+00:00 Always read in prologue files as UTF8 (#286). - - - - - 54b2fd78 by Mateusz Kowalczyk at 2014-03-13T21:28:09+00:00 Style only - - - - - fa4fe650 by Simon Hengel at 2014-03-15T09:04:18+01:00 Add Fuuzetsu maintainers field in cabal file - - - - - f83484b7 by Niklas Haas at 2014-03-15T18:20:24+00:00 Hide minimal definition for only-method classes Previously this was not covered by the All xs check since here it is not actually an All, rather a single Var n. This also adds the previously missing html-test/src/Minimal.hs. - - - - - 0099d276 by Niklas Haas at 2014-03-15T18:20:26+00:00 Fix issue haskell/haddock#281 This is a regression from the data family instances change. Data instances are now distinguished from regular lists by usage of the new class "inst", and the style has been updated to only apply to those. I've also updated the appropriate test case to test this a bit better, including GADT instances with GADT-style records. - - - - - 1f9687bd by Mateusz Kowalczyk at 2014-03-21T17:48:37+00:00 Please cabal sdist - - - - - 75542693 by Mateusz Kowalczyk at 2014-03-22T16:36:16+00:00 Drop needless --split-objs which slows us down. Involves tiny cleanup of all the dynflag bindings. Fixes haskell/haddock#292. - - - - - 31214dc3 by Herbert Valerio Riedel at 2014-03-23T18:01:01+01:00 Fix a few typos Signed-off-by: Herbert Valerio Riedel <hvr at gnu.org> - - - - - 0b73e638 by Mateusz Kowalczyk at 2014-03-31T05:34:36+01:00 Print kind signatures on GADTs - - - - - 2bab42f3 by Mateusz Kowalczyk at 2014-03-31T16:53:25+01:00 Add default for new PlatformConstraints field - - - - - 42647c5f by Mateusz Kowalczyk at 2014-03-31T18:29:04+01:00 Drop leading whitespace in @-style blocks. Fixes haskell/haddock#201. - - - - - 98208294 by Niklas Haas at 2014-03-31T20:09:58+02:00 Crash when exporting record selectors of data family instances This fixes bug haskell/haddock#294. This also fixes a related but never-before-mentioned bug about the display of GADT record selectors with non-polymorphic type signatures. Note: Associated data type constructors fail to show up if nothing is exported that they could be attached to. Exporting any of the data types in the instance head, or the class + data family itself, causes them to show up, but in the absence of either of these, exporting just the associated data type with the constructor itself will result in it being hidden. The only scenario I can come up that would involve this kind of situation involved OverlappingInstances, and even then it can be mitigated by just exporting the class itself, so I'm not going to solve it since the logic would most likely be very complicated. - - - - - 3832d171 by Mateusz Kowalczyk at 2014-04-01T19:07:33+01:00 Make CHANGES consistent with what's now in 2.14.2 - - - - - c386ae89 by Mateusz Kowalczyk at 2014-04-01T19:18:36+01:00 Actually bundle extra spec tests in sdist - - - - - bd57a6d3 by Mateusz Kowalczyk at 2014-04-03T21:13:48+01:00 Update test cases for GHC bug haskell/haddock#8945, Haddock haskell/haddock#188 The order of signature groups has been corrected upstream. Here we add a test case and update some existing test-cases to reflect this change. We remove grouped signature in test cases that we can (Minimal, BugDeprecated &c) so that the test is as self-contained as possible. - - - - - 708b88b1 by Mateusz Kowalczyk at 2014-04-03T21:16:07+01:00 Enforce strict GHC version in cabal file This stops people with 7.6.3 trying to install 2.15.x which clearly won't work. Unfortunately we shipped 2.14.x without realising this. - - - - - 60334f7c by Mateusz Kowalczyk at 2014-04-03T21:19:24+01:00 Initialise some new PlatformConstants fields - - - - - ea77f668 by Mateusz Kowalczyk at 2014-04-11T16:52:23+01:00 We don't actually want unicode here - - - - - 0b651cae by Mateusz Kowalczyk at 2014-04-11T18:13:30+01:00 Parse identifiers with ^ and ⋆ in them. Fixes haskell/haddock#298. - - - - - e8ad0f5f by Mateusz Kowalczyk at 2014-04-11T18:47:41+01:00 Ignore version string during HTML tests. - - - - - de489089 by Mateusz Kowalczyk at 2014-04-11T18:59:30+01:00 Update CHANGES to follow 2.14.3 - - - - - beb464a9 by Gergő Érdi at 2014-04-13T16:31:10+08:00 remove Origin flag from LHsBindsLR - - - - - cb16f07c by Herbert Valerio Riedel at 2014-04-21T17:16:50+02:00 Replace local `die` by new `System.Exit.die` Starting with GHC 7.10, System.Exit exports the new `die` which is essentially the same as Haddock.Util.die, so this commit changes Haddock.Util.die to be a simple re-export of System.Exit.die. See also https://ghc.haskell.org/trac/ghc/ticket/9016 for more details. Signed-off-by: Herbert Valerio Riedel <hvr at gnu.org> - - - - - 9b9b23c7 by Mateusz Kowalczyk at 2014-05-03T15:40:11+02:00 Disambiguate ‘die’ in test runners. - - - - - 5d28a2b8 by Mateusz Kowalczyk at 2014-05-05T09:19:49+02:00 Prepare modules for parser split. We have to generalise the Doc (now DocH) slightly to remove the dependency on GHC-supplied type. - - - - - d3967ff3 by Mateusz Kowalczyk at 2014-05-05T11:00:41+02:00 Move parser + parser tests out to own package. We move some types out that are necessary as well and then re-export and specialise them in the core Haddock. Reason for moving out spec tests is that if we're working on the parser, we can simply work on that and we can ignore the rest of Haddock. The downside is that it's a little inconvenient if at the end of the day we want to see that everything passes. - - - - - 522a448d by Mateusz Kowalczyk at 2014-05-05T11:14:47+02:00 Move out Show and Eq instances to Types They are much more useful to the users here. - - - - - 11a6f0f2 by Mateusz Kowalczyk at 2014-05-06T13:50:31+02:00 Remove no longer necessary parser error handling. We can now drop some Maybe tests and even lets us strip an error handling monad away in a few places. - - - - - 6992c924 by Mateusz Kowalczyk at 2014-05-14T02:23:55+02:00 Please the GHC build-system. As I can not figure out how to do this properly, if we're in GHC tree, we treat the library as being the same package. If we're not in the tree, we require that the library be installed separately. - - - - - 7a8ad763 by Mateusz Kowalczyk at 2014-05-14T14:50:25+02:00 Update issue tracker URL - - - - - f616c521 by Mateusz Kowalczyk at 2014-05-14T14:53:32+02:00 Update issue tracker URL for haddock-library - - - - - 66580ded by Gergő Érdi at 2014-05-25T14:24:16+08:00 Accomodate change in PatSyn representation - - - - - 0e43b988 by Mateusz Kowalczyk at 2014-05-29T03:15:29+02:00 Revert "Accomodate change in PatSyn representation" This reverts commit 57aa591362d7c8ba21285fccd6a958629a422091. I am reverting this because I pushed it to master when it was meant to stay on a wip-branch. Sorry Gergo and everyone who had trouble due to this. - - - - - e10d7ec8 by Mateusz Kowalczyk at 2014-05-29T03:24:11+02:00 Revert "Revert "Accomodate change in PatSyn representation"" This reverts commit e110e6e70e40eed06c06676fd2e62578da01d295. Apparently as per GHC commit ac2796e6ddbd54c5762c53e2fcf29f20ea162fd5 this was actually intended. Embarrasing for me. - - - - - 5861aca9 by Mateusz Kowalczyk at 2014-06-05T19:49:27+02:00 Clear up highlighting of identifiers with ‘'’s. - - - - - d7cc420f by Simon Peyton Jones at 2014-06-06T12:41:09+01:00 Follow change in patSynSig - - - - - 938b4fd8 by Mateusz Kowalczyk at 2014-06-12T07:24:29+02:00 Slightly update the readme. Style-sheets are no longer a recent thing, dead links, old maintainers, different formats. - - - - - c7799dea by Mateusz Kowalczyk at 2014-06-18T00:05:56+02:00 Update cabal files Update repository urls, use subdir property for haddock-library and use a separate versioning scheme for haddock-library in preparation for release. - - - - - a2750b6a by Simon Hengel at 2014-06-18T11:01:18+08:00 Compatibility with older versions of base and bytestring - - - - - 009b4b03 by Simon Hengel at 2014-06-18T11:14:01+08:00 Enable travis-ci for haddock-library - - - - - 9b5862eb by Simon Hengel at 2014-06-18T11:14:01+08:00 haddock-library: Do not depend on haddock-library in test suite I think you either add src to hs-source-dirs or the library to build-depends. But doing both does not make sense (AFAICT). - - - - - fb1f3279 by Simon Hengel at 2014-06-18T11:49:05+08:00 haddock-library: Use -Wall for specs - - - - - 649340e1 by Mateusz Kowalczyk at 2014-06-18T06:58:54+02:00 Use Travis with multiple GHC versions When using HEAD, we build haddock-library directly from repository as a dependency (and thanks to --enable-tests, the tests get ran anyway). In all other cases, we manually run the tests on haddock-library only and don't test the main project. - - - - - d7eeeec2 by Mateusz Kowalczyk at 2014-06-18T07:49:04+02:00 Comment improvements + few words in cabal file - - - - - 0f8db914 by Simon Hengel at 2014-06-18T13:52:23+08:00 Use doctest to check examples in documentation - - - - - 2888a8dc by Simon Hengel at 2014-06-18T14:16:48+08:00 Remove doctest dependency (so that we can use haddock-library with doctest) - - - - - 626d5e85 by Mateusz Kowalczyk at 2014-06-18T08:41:25+02:00 Travis tweaks - - - - - 41d4f9cc by Mateusz Kowalczyk at 2014-06-18T08:58:43+02:00 Don't actually forget to install specified GHC. - - - - - c6aa512a by John MacFarlane at 2014-06-18T10:43:57-07:00 Removed reliance on LambdaCase (which breaks build with ghc 7.4). - - - - - b9b93b6f by John MacFarlane at 2014-06-18T10:54:56-07:00 Fixed haddock warnings. - - - - - a41b0ab5 by Mateusz Kowalczyk at 2014-06-19T01:20:10+02:00 Update Travis, bump version - - - - - 864bf62a by Mateusz Kowalczyk at 2014-06-25T10:36:54+02:00 Fix anchors. Closes haskell/haddock#308. - - - - - 53df91bb by Mateusz Kowalczyk at 2014-06-25T15:04:49+02:00 Drop DocParagraph from front of headers I can not remember why they were wrapped in paragraphs to begin with and it seems unnecessary now that I test it. Closes haskell/haddock#307. - - - - - 29b5f2fa by Mateusz Kowalczyk at 2014-06-25T15:17:20+02:00 Don't mangle append order for nested lists. The benefit of this is that the ‘top-level’ element of such lists is properly wrapped in <p> tags so any CSS working with these will be applied properly. It also just makes more sense. Pointed out at jgm/pandoc#1346. - - - - - 05cb6e9c by Mateusz Kowalczyk at 2014-06-25T15:19:45+02:00 Bump haddock-library to 1.1.0 for release - - - - - 70feab15 by Iavor Diatchki at 2014-07-01T03:37:07-07:00 Propagate overloading-mode for instance declarations in haddock (#9242) - - - - - d4ca34a7 by Simon Peyton Jones at 2014-07-14T16:23:15+01:00 Adapt to new definition of HsDecls.TyFamEqn This is a knock-on from the refactoring from Trac haskell/haddock#9063. I'll push the corresponding changes to GHC shortly. - - - - - f91e2276 by Edward Z. Yang at 2014-07-21T08:14:19-07:00 Track GHC PackageId to PackageKey renaming. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> Conflicts: src/Haddock/Interface/Create.hs - - - - - b010f9ef by Edward Z. Yang at 2014-07-25T16:28:46-07:00 Track changes for module reexports. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> Conflicts: src/Haddock/Interface/Create.hs - - - - - 8b85f9f9 by Mateusz Kowalczyk at 2014-07-28T13:25:43+02:00 Catch mid-line URLs. Fixes haskell/haddock#314. - - - - - 4c613a78 by Edward Z. Yang at 2014-08-05T03:11:00-07:00 Track type signature change of lookupModuleInAllPackages Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - e80b051c by Edward Z. Yang at 2014-08-05T17:34:26+01:00 If GhcProfiled, also build Haddock profiled. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - f9cccd29 by Edward Z. Yang at 2014-08-07T14:23:35+01:00 Ignore TAGS files. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 00b3af52 by Mateusz Kowalczyk at 2014-08-08T04:58:19+02:00 Update to attoparsec-0.12.1.1 There seems to be memory and speed improvement. - - - - - 5457dc71 by Mateusz Kowalczyk at 2014-08-08T18:24:02+02:00 Fix forgotten src - - - - - 3520cb04 by Mateusz Kowalczyk at 2014-08-14T20:19:07+01:00 Bump down the version for master to 2.14.4 - - - - - dc98c21b by Mateusz Kowalczyk at 2014-08-14T20:23:27+01:00 Revert "Track type signature change of lookupModuleInAllPackages" This reverts commit d59fec2c9551b5662a3507c0011e32a09a9c118f. - - - - - 3f2038c0 by Mateusz Kowalczyk at 2014-08-14T20:23:31+01:00 Revert "Track changes for module reexports." This reverts commit b99b57c0df072d12b67816b45eca2a03cb1da96d. - - - - - 56d4e49e by Mateusz Kowalczyk at 2014-08-14T20:23:42+01:00 Revert "Track GHC PackageId to PackageKey renaming." This reverts commit 8ac42d3327473939c013551750425cac191ff0fd. - - - - - 726ea3cb by Mateusz Kowalczyk at 2014-08-14T20:23:47+01:00 Revert "Adapt to new definition of HsDecls.TyFamEqn" This reverts commit cb96b4f1ed0462b4a394b9fda6612c3bea9886bd. - - - - - 61a88ff0 by Mateusz Kowalczyk at 2014-08-14T20:23:52+01:00 Revert "Propagate overloading-mode for instance declarations in haddock (#9242)" This reverts commit 8d20ca8d5a9bee73252ff2035ec45f9c03d0820c. - - - - - a32ba674 by Mateusz Kowalczyk at 2014-08-14T20:26:03+01:00 Revert "Disambiguate ‘die’ in test runners." This reverts commit dba02d6df32534aac5d257f2d28596238d248942. - - - - - f335820f by Mateusz Kowalczyk at 2014-08-14T20:26:09+01:00 Revert "Replace local `die` by new `System.Exit.die`" This reverts commit 08aa509ebac58bfb202ea79c7c41291ec280a1c5. - - - - - 107078e4 by Mateusz Kowalczyk at 2014-08-14T20:27:34+01:00 Merge branch 'reverts' This reverts any changes that were made to have Haddock compile with 7.9. When 7.10 release comes, we can simply re-apply all the patches and any patches that occur on ghc-head branch from now on. This allows us to build master with 7.8.3 - - - - - b44b3871 by Mateusz Kowalczyk at 2014-08-15T02:47:40+01:00 Fix haskell/haddock#313 by doing some list munging. I get rid of the Monoid instance because we weren't satisfying the laws. Convenience of having <> didn't outweigh the shock-factor of having it behave badly. - - - - - e1a62cde by Mateusz Kowalczyk at 2014-08-15T02:52:56+01:00 Stop testing haskell/haddock#188. Because the change is in GHC 7.9 and we now work against 7.8.3, this test no longer makes sense. We revert it until 7.10 becomes the standard version. If anything, there should be a test for this in GHC itself. - - - - - 54e8286d by Mateusz Kowalczyk at 2014-08-15T05:31:57+01:00 Add haskell/haddock#313 to CHANGES - - - - - 9df7ad5d by Simon Hengel at 2014-08-20T11:25:32+08:00 Fix warning - - - - - ee2574d6 by Simon Hengel at 2014-08-20T12:07:01+08:00 Fix travis builds - - - - - 384cf2e6 by Simon Hengel at 2014-08-20T12:14:31+08:00 Require GHC 7.8.3 - - - - - d4779863 by Simon Hengel at 2014-08-22T12:14:16+08:00 Move Haddock API to a separate package - - - - - 80f3e0e1 by Simon Hengel at 2014-08-22T14:57:38+08:00 Bump version to 2.15.0 and add version constraints - - - - - 309a94ce by Simon Hengel at 2014-08-22T15:18:06+08:00 Add deprecated compatibility module - - - - - 4d1e4e3f by Luite Stegeman at 2014-08-22T20:46:45+02:00 export things to allow customizing how the Ghc session is run - - - - - 47884591 by Luite Stegeman at 2014-08-22T20:46:51+02:00 ghc 7.8.2 compatibility - - - - - 5ea94e2c by Luite Stegeman at 2014-08-22T22:08:58+02:00 install dependencies for haddock-api on travis - - - - - 9fb845b2 by Mateusz Kowalczyk at 2014-08-23T10:09:34+01:00 Move sources under haddock-api/src - - - - - 85817dc4 by Mateusz Kowalczyk at 2014-08-23T10:10:48+01:00 Remove compat stuff - - - - - 151c6169 by Niklas Haas at 2014-08-24T08:14:10+02:00 Fix extra whitespace on signatures and update all test cases This was long overdue, now running ./accept.lhs on a clean test from master will not generate a bunch of changes. - - - - - d320e0d2 by Niklas Haas at 2014-08-24T08:14:35+02:00 Omit unnecessary foralls and fix haskell/haddock#315 This also fixes haskell/haddock#86. - - - - - bdafe108 by Mateusz Kowalczyk at 2014-08-24T15:06:46+01:00 Update CHANGES - - - - - fafa6d6e by Mateusz Kowalczyk at 2014-08-24T15:14:23+01:00 Delete few unused/irrelevant/badly-place files. - - - - - 3634923d by Duncan Coutts at 2014-08-27T13:49:31+01:00 Changes due to ghc api changes in package representation Also fix a bug with finding the package name and version given a module. This had become wrong due to the package key changes (it was very hacky in the first place). We now look up the package key in the package db to get the package info properly. - - - - - 539a7e70 by Herbert Valerio Riedel at 2014-08-31T11:36:32+02:00 Import Data.Word w/o import-list This is needed to keep the compilation warning free (and thus pass GHC's ./validate) regardless of whether Word is re-exported from Prelude or not See https://ghc.haskell.org/trac/ghc/ticket/9531 for more details - - - - - 9e3a0e5b by Mateusz Kowalczyk at 2014-08-31T12:54:43+01:00 Bump version in doc - - - - - 4a177525 by Mateusz Kowalczyk at 2014-08-31T13:01:23+01:00 Bump haddock-library version - - - - - f99c1384 by Mateusz Kowalczyk at 2014-08-31T13:05:25+01:00 Remove references to deleted files - - - - - 5e51a247 by Mateusz Kowalczyk at 2014-08-31T14:18:44+01:00 Make the doc parser not complain - - - - - 2cedb49a by Mateusz Kowalczyk at 2014-09-03T03:33:15+01:00 CONTRIBUTING file for issues - - - - - 88027143 by Mateusz Kowalczyk at 2014-09-04T00:46:59+01:00 Mention --print-missing-docs - - - - - 42f6754f by Alan Zimmerman at 2014-09-05T18:13:24-05:00 Follow changes to TypeAnnot in GHC HEAD Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - e712719e by Austin Seipp at 2014-09-09T01:03:27-05:00 Fix import of 'empty' due to AMP. Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 71c29755 by Herbert Valerio Riedel at 2014-09-09T17:35:20+02:00 Bump `base` constraint for AMP - - - - - 0bf9f3ed by Mateusz Kowalczyk at 2014-09-12T19:18:32+01:00 Delete stale ANNOUNCE - - - - - cac89ee6 by Krzysztof Gogolewski at 2014-09-14T17:17:09+02:00 Followup changes to addition of -fwarn-context-quantification (GHC Trac haskell/haddock#4426) - - - - - 4d683426 by Edward Z. Yang at 2014-09-18T13:38:11-07:00 Properly render package ID (not package key) in index, fixes haskell/haddock#329. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 80697fd5 by Herbert Valerio Riedel at 2014-09-19T00:07:52+02:00 Disambiguate string-literals GHC fails type-inference with `OverloadedStrings` + `Data.Foldable.elem` otherwise. - - - - - c015eb70 by Herbert Valerio Riedel at 2014-09-19T00:10:36+02:00 Revert "Followup changes to addition of -fwarn-context-quantification" This reverts commit 4023817d7c0e46db012ba2eea28022626841ca9b temporarily as the respective feature hasn't landed in GHC HEAD yet, but this commit blocks later commits from being referenced in GHC HEAD. - - - - - 38ded784 by Edward Z. Yang at 2014-09-18T15:32:15-07:00 Revert "Revert "Followup changes to addition of -fwarn-context-quantification"" This reverts commit db14fd8ab4fab43694139bc203808b814eafb2dc. It's in HEAD now. - - - - - f55d59c9 by Herbert Valerio Riedel at 2014-09-26T19:18:28+02:00 Revert "Fix import of 'empty' due to AMP." This reverts commit 0cc5bc85e9fca92ab712b68a2ba2c0dd9d3d79f4 since it turns out we don't need to re-export `empty` from Control.Monad after all. - - - - - 467050f1 by David Feuer at 2014-10-09T20:07:36-04:00 Fix improper lazy IO use Make `getPrologue` force `parseParas dflags str` before returning. Without this, it will attempt to read from the file after it is closed, with unspecified and generally bad results. - - - - - cc47b699 by Edward Z. Yang at 2014-10-09T21:38:19-07:00 Fix use-after-close lazy IO bug Make `getPrologue` force `parseParas dflags str` before returning. Without this, it will attempt to read from the file after it is closed, with unspecified and generally bad results. Signed-off-by: David Feuer <David.Feuer at gmail.com> Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 87babcbe by Austin Seipp at 2014-10-20T20:05:27-05:00 Add an .arcconfig file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - ab259516 by Austin Seipp at 2014-10-20T20:07:01-05:00 Add .arclint file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - b918093c by Mateusz Kowalczyk at 2014-10-29T03:59:39+00:00 Experimental support for collapsable headers Closes haskell/haddock#335 - - - - - 849db129 by Mateusz Kowalczyk at 2014-10-29T10:07:26+01:00 Experimental support for collapsable headers (cherry picked from commit e2ed3b9d8dfab09f1b1861dbc8e74f08e137ebcc) - - - - - a4cc4789 by Herbert Valerio Riedel at 2014-10-31T11:08:26+01:00 Collapse user-defined section by default (re haskell/haddock#335) - - - - - 9da1b33e by Yuras Shumovich at 2014-10-31T16:11:04-05:00 reflect ForeignType constructore removal Reviewers: austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D358 - - - - - c625aefc by Austin Seipp at 2014-10-31T19:34:10-05:00 Remove overlapping pattern match Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - c7738e5e by Simon Hengel at 2014-11-02T07:25:30+08:00 Remove -fobject-code from .ghci (this slows down reloads on modifications) - - - - - d4a86e95 by Simon Hengel at 2014-11-03T09:26:11+08:00 Get rid of StandaloneDeriving - - - - - a974e311 by Simon Hengel at 2014-11-03T09:26:11+08:00 Derive more instances - - - - - 8aa0c4d7 by Simon Hengel at 2014-11-03T09:27:08+08:00 Remove unused language extensions - - - - - 3052d46a by Simon Hengel at 2014-11-03T09:30:46+08:00 Minor refactoring - - - - - 4281d3cb by Simon Hengel at 2014-11-03T09:30:46+08:00 parser: Try to parse definition lists right before text paragraphs - - - - - 8ba12bf9 by Simon Hengel at 2014-11-03T09:34:19+08:00 Add support for markdown links (closes haskell/haddock#336) - - - - - a2f8d747 by Simon Hengel at 2014-11-03T09:34:19+08:00 Allow markdown links at the beginning of a paragraph - - - - - 53b11207 by Simon Hengel at 2014-11-03T09:34:20+08:00 Update documentation - - - - - 652267c6 by Simon Hengel at 2014-11-03T09:34:20+08:00 Add support for markdown images - - - - - 9d667502 by Simon Hengel at 2014-11-03T09:34:20+08:00 Allow an optional colon after the closing bracket of definition lists This is to disambiguate them from markdown links and will be require with a future release. - - - - - 8167fc32 by Mateusz Kowalczyk at 2014-11-04T01:16:51+00:00 whitespace only - - - - - 3da62981 by Mateusz Kowalczyk at 2014-11-04T01:17:31+00:00 Fix re-exports of built-in type families Fixes haskell/haddock#310 - - - - - edc76b34 by Mateusz Kowalczyk at 2014-11-04T02:54:28+00:00 Turn some uses of error into recoverable warnings This should at the very least not abort when something weird happens. It does feel like we should have a type that carries these errors until the end however as the user might not see them unless they are printed at the end. - - - - - 0a137400 by Mateusz Kowalczyk at 2014-11-04T04:09:44+00:00 Fix warnings - - - - - d068fc21 by Mateusz Kowalczyk at 2014-11-04T21:04:07+00:00 Fix parsing of identifiers written in infix way - - - - - 1a9f2f3d by Simon Hengel at 2014-11-08T11:32:42+08:00 Minor code simplification - - - - - 6475e9b1 by Simon Hengel at 2014-11-08T17:28:33+08:00 newtype-wrap parser monad - - - - - dc1ea105 by Herbert Valerio Riedel at 2014-11-15T11:55:43+01:00 Make compatible with `deepseq-1.4.0.0` ...by not relying on the default method implementation of `rnf` - - - - - fbb1aca4 by Simon Hengel at 2014-11-16T08:51:38+08:00 State intention rather than implementation details in Haddock comment - - - - - 97851ab2 by Simon Hengel at 2014-11-16T10:20:19+08:00 (wip) Add support for @since (closes haskell/haddock#26) - - - - - 34bcd18e by Gergő Érdi at 2014-11-20T22:35:38+08:00 Update Haddock to new pattern synonym type signature syntax - - - - - 304b7dc3 by Jan Stolarek at 2014-11-20T17:48:43+01:00 Follow changes from haskell/haddock#9812 - - - - - 920f9b03 by Richard Eisenberg at 2014-11-20T16:52:50-05:00 Changes to reflect refactoring in GHC as part of haskell/haddock#7484 - - - - - 0bfe4e78 by Alan Zimmerman at 2014-11-21T11:23:09-06:00 Follow API changes in D426 Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 356ed45a by Thomas Winant at 2014-11-28T16:11:22-06:00 Support for PartialTypeSignatures - - - - - 5dc8f3b1 by Gergő Érdi at 2014-11-29T15:39:09+08:00 For pattern synonyms, render "pattern" as a keyword - - - - - fe704480 by Mateusz Kowalczyk at 2014-12-09T03:38:32+00:00 List new module in cabal file - - - - - b9ad5a29 by Mateusz Kowalczyk at 2014-12-10T00:58:24+00:00 Allow the parser to spit out meta-info Currently we only use it only for ‘since’ annotations but with these patches it should be fairly simple to add new attributes if we wish to. Closes haskell/haddock#26. It seems to work fine but due to 7.10 rush I don't have the chance to do more exhaustive testing right now. The way the meta is output (emphasis at the end of the whole comment) is fairly arbitrary and subject to bikeshedding. Note that this makes test for Bug310 fail due to interface version bump: it can't find the docs for base with this interface version so it fails. There is not much we can do to help this because it tests for ’built-in’ identifier, not something we can provide ourselves. - - - - - 765af0e3 by Mateusz Kowalczyk at 2014-12-10T01:17:19+00:00 Update doctest parts of comments - - - - - 8670272b by jpmoresmau at 2014-12-10T01:35:31+00:00 header could contain several lines Closes haskell/haddock#348 - - - - - 4f9ae4f3 by Mateusz Kowalczyk at 2014-12-12T06:22:31+00:00 Revert "Merge branch 'reverts'" This reverts commit 5c93cc347773c7634321edd5f808d5b55b46301f, reversing changes made to 5b81a9e53894d2ae591ca0c6c96199632d39eb06. Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - e974ac94 by Duncan Coutts at 2014-12-12T06:26:11+00:00 Changes due to ghc api changes in package representation Also fix a bug with finding the package name and version given a module. This had become wrong due to the package key changes (it was very hacky in the first place). We now look up the package key in the package db to get the package info properly. Conflicts: haddock-api/src/Haddock.hs - - - - - 2f3a2365 by Herbert Valerio Riedel at 2014-12-12T06:26:51+00:00 Import Data.Word w/o import-list This is needed to keep the compilation warning free (and thus pass GHC's ./validate) regardless of whether Word is re-exported from Prelude or not See https://ghc.haskell.org/trac/ghc/ticket/9531 for more details - - - - - 1dbd6390 by Alan Zimmerman at 2014-12-12T06:32:07+00:00 Follow changes to TypeAnnot in GHC HEAD Signed-off-by: Austin Seipp <aseipp at pobox.com> Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - bb6ff1f4 by Mateusz Kowalczyk at 2014-12-12T06:35:07+00:00 Bump ‘base’ constraint Follows the similar commit made on ghc-head branch - - - - - 466fe4ab by Krzysztof Gogolewski at 2014-12-12T06:37:42+00:00 Followup changes to addition of -fwarn-context-quantification (GHC Trac haskell/haddock#4426) - - - - - 97e080c9 by Edward Z. Yang at 2014-12-12T06:39:35+00:00 Properly render package ID (not package key) in index, fixes haskell/haddock#329. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> Conflicts: haddock-api/src/Haddock/ModuleTree.hs - - - - - 20b2af56 by Herbert Valerio Riedel at 2014-12-12T06:42:50+00:00 Disambiguate string-literals GHC fails type-inference with `OverloadedStrings` + `Data.Foldable.elem` otherwise. Conflicts: haddock-library/src/Documentation/Haddock/Parser.hs - - - - - b3ad269d by Austin Seipp at 2014-12-12T06:44:14+00:00 Add an .arcconfig file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - 072df0dd by Austin Seipp at 2014-12-12T06:45:01+00:00 Add .arclint file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - dbb9294a by Herbert Valerio Riedel at 2014-12-12T06:46:17+00:00 Collapse user-defined section by default (re haskell/haddock#335) Conflicts: haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs - - - - - f23ab545 by Yuras Shumovich at 2014-12-12T06:46:41+00:00 reflect ForeignType constructore removal Reviewers: austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D358 - - - - - 753a4b67 by Austin Seipp at 2014-12-12T06:46:51+00:00 Remove overlapping pattern match Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 8954e8f5 by Herbert Valerio Riedel at 2014-12-12T06:50:53+00:00 Make compatible with `deepseq-1.4.0.0` ...by not relying on the default method implementation of `rnf` - - - - - d2b06d61 by Gergő Érdi at 2014-12-12T07:07:30+00:00 Update Haddock to new pattern synonym type signature syntax Conflicts: haddock-api/src/Haddock/Backends/Xhtml/Decl.hs haddock-api/src/Haddock/Convert.hs - - - - - 1ff02426 by Jan Stolarek at 2014-12-12T07:13:24+00:00 Follow changes from haskell/haddock#9812 Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - 06ad7600 by Richard Eisenberg at 2014-12-12T07:13:43+00:00 Changes to reflect refactoring in GHC as part of haskell/haddock#7484 - - - - - 8fd2aa8b by Alan Zimmerman at 2014-12-12T07:22:25+00:00 Follow API changes in D426 Signed-off-by: Austin Seipp <aseipp at pobox.com> Conflicts: haddock-api/src/Haddock/Backends/LaTeX.hs haddock-api/src/Haddock/Backends/Xhtml/Decl.hs haddock-api/src/Haddock/Convert.hs - - - - - 95c3db98 by Thomas Winant at 2014-12-12T07:35:49+00:00 Support for PartialTypeSignatures Conflicts: haddock-api/src/Haddock/Backends/Xhtml/Decl.hs haddock-api/src/Haddock/Convert.hs haddock-api/src/Haddock/Interface/Create.hs - - - - - 45494428 by Gergő Érdi at 2014-12-12T07:36:18+00:00 For pattern synonyms, render "pattern" as a keyword - - - - - a237e3eb by Mateusz Kowalczyk at 2014-12-12T12:27:13+00:00 Various fixups and bumps for next release - - - - - 22918bcd by Herbert Valerio Riedel at 2014-12-14T10:11:47+01:00 Remove redundant wild-card pattern match (this would otherwise cause a build-failure with `-Werror`) - - - - - 1d6ce947 by Herbert Valerio Riedel at 2014-12-14T10:17:06+01:00 Treat GHC 7.10 the same as GHC 7.9 ...since the current GHC 7.9 is going to become GHC 7.10 real-soon-now anyway - - - - - f434ea89 by Herbert Valerio Riedel at 2014-12-14T18:26:50+01:00 Fixup ghc.mk (follow-up to 1739375eb23342) This makes the GHC build-system aware of the data-files to be copied into the bindist (as haddock.cabal doesn't list those anymore) - - - - - 6fb839eb by Mateusz Kowalczyk at 2014-12-17T09:28:59+00:00 Only keep one Version instead of blindly appending - - - - - 40645489 by Mateusz Kowalczyk at 2014-12-18T07:09:44+00:00 Fix dependency version - - - - - 8b3b927b by Mateusz Kowalczyk at 2014-12-18T07:14:23+00:00 Print missing docs by default Adds --no-print-missing-docs - - - - - 59666694 by Mateusz Kowalczyk at 2014-12-18T07:21:37+00:00 update changelog - - - - - aa6d168e by Mateusz Kowalczyk at 2014-12-18T07:30:58+00:00 Update docs for @since - - - - - 2d7043ee by Luite Stegeman at 2014-12-19T18:29:35-06:00 hide projectVersion from DynFlags since it clashes with Haddock.Version.projectVersion - - - - - aaa70fc0 by Luite Stegeman at 2014-12-22T15:58:43+01:00 Add missing import for standalone haddock-api package - - - - - 9ce01269 by Herbert Valerio Riedel at 2014-12-22T17:48:45+01:00 Reset ghc-head with master's tree (this is an overwriting git merge of master into ghc-head) - - - - - fcd6fec1 by Herbert Valerio Riedel at 2014-12-22T17:51:52+01:00 Bump versions for ghc-7.11 - - - - - 525ec900 by Mateusz Kowalczyk at 2014-12-23T13:36:24+00:00 travis-ci: test with HEAD - - - - - cbf494b5 by Simon Peyton Jones at 2014-12-23T15:22:56+00:00 Eliminate instanceHead' in favour of GHC's instanceSig This is made possible by the elimination of "silent superclass parameters" in GHC - - - - - 50e01c99 by Mateusz Kowalczyk at 2014-12-29T15:28:47+00:00 Make travis use 7.10.x - - - - - 475e60b0 by Njagi Mwaniki at 2014-12-29T15:30:44+00:00 Turn the README into GitHub Markdown format. Closes haskell/haddock#354 - - - - - 8cacf48e by Luite Stegeman at 2015-01-05T16:25:37+01:00 bump haddock-api ghc dependency to allow release candidate and first release - - - - - 6ed6cf1f by Simon Peyton Jones at 2015-01-06T16:37:47+00:00 Remove redundant constraints from haddock, discovered by -fwarn-redundant-constraints - - - - - 8b484f33 by Simon Peyton Jones at 2015-01-08T15:50:22+00:00 Track naming change in DataCon - - - - - 23c5c0b5 by Alan Zimmerman at 2015-01-16T10:15:11-06:00 Follow API changes in D538 Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - e7a5532c by JP Moresmau at 2015-01-22T17:19:03+00:00 Ignore warnings, install Cabal 1.22 - - - - - 86942c84 by jpmoresmau at 2015-01-22T17:19:04+00:00 solve dataDir ambiguity - - - - - 5ceb743e by jpmoresmau at 2015-01-22T19:17:32+00:00 support GHC 7.10: no Safe-Inferred, Foldable instance - - - - - 6a3b3fb5 by Mateusz Kowalczyk at 2015-01-22T19:32:10+00:00 Update test files Test: a correct behaviour for fields comma-separating values. I'm surprised we had no bug open for this. Maybe it affects how haskell/haddock#301 renders now but I doubt. Operators: Seems GHC is giving us a new order for operators, something must have changed on their side again. cc @haasn , this makes the fixity to the side not match the order on the LHS which is a bit unpleasant. Maybe the fixity can be made to match the GHC order? Bug335: We expand examples by default now. Bug310: Now inferred safe. - - - - - 708f8b2f by jpmoresmau at 2015-01-22T19:36:59+00:00 Links to source location of class instance definitions - - - - - 5cf8a6da by Vincent Berthoux at 2015-01-22T19:59:58+00:00 Filter '\r' from comments due to Windows problems. On Windows this was causing newline to be rendered twice in code blocks. Closes haskell/haddock#359, fixes haskell/haddock#356. - - - - - 1749e6f0 by Mateusz Kowalczyk at 2015-01-22T20:31:27+00:00 Changelog only - - - - - c8145f90 by Mateusz Kowalczyk at 2015-01-22T23:34:05+00:00 --package-name and --package-version flags Used for --hoogle amongst other things. Now we need to teach cabal to use it. The situation is still a bit sub-par because if the flags aren't passed in, the crash will occur. Closes haskell/haddock#353. - - - - - 14248254 by Mateusz Kowalczyk at 2015-01-22T23:43:18+00:00 Sort out some module import warnings - - - - - d8a38989 by Simon Peyton Jones at 2015-01-23T07:10:16-06:00 Track naming change in DataCon (cherry picked from commit 04cf63d0195837ed52075ed7d2676e71831e8a0b) - - - - - d3ac6ae4 by Alan Zimmerman at 2015-01-23T07:17:19-06:00 Follow API changes in D538 Signed-off-by: Austin Seipp <aseipp at pobox.com> (cherry picked from commit d61bbc75890e4eb0ad508b9c2a27b91f691213e6) - - - - - 4c1ffeb0 by Simon Peyton Jones at 2015-02-10T12:10:33+00:00 Track changes in HsSyn for quasi-quotes - - - - - 775d20f7 by Mateusz Kowalczyk at 2015-03-15T08:11:48+01:00 --package-name and --package-version flags Used for --hoogle amongst other things. Now we need to teach cabal to use it. The situation is still a bit sub-par because if the flags aren't passed in, the crash will occur. Closes haskell/haddock#353. (cherry picked from commit 8e06728afb0784128ab2df0be7a5d7a191d30ff4) - - - - - f9245e72 by Phil Ruffwind at 2015-03-16T04:32:01-04:00 Prevent Synopsis from using up too much horizontal space When long type signatures occur in the Synopsis, the element is stretched beyond the width of the window. Scrollbars don't appear, so it's impossible to read anything when this happens. - - - - - cd8fa415 by Mateusz Kowalczyk at 2015-03-17T21:59:39+00:00 Update changelog Closes haskell/haddock#151 due to 71170fc77962f10d7d001e3b8bc8b92bfeda99bc - - - - - b5248b47 by Ben Gamari at 2015-03-25T17:12:17+00:00 Make the error encountered when a package can't be found more user-friendly Closes haskell/haddock#369 - - - - - b756b772 by Mateusz Kowalczyk at 2015-03-26T16:31:40+00:00 Remove now redundant imports - - - - - 5ea5e8dd by Mateusz Kowalczyk at 2015-03-26T16:45:52+00:00 Update test to account for \r filtering - - - - - 6539bfb3 by Mateusz Kowalczyk at 2015-03-27T00:20:09+00:00 Test for anchor defaulting I delete the old tests because it turns out that: * test runner would never put them in scope of each other even with imports so just one would suffice * test runner actually needed some hacking to keep links so in the end we would end up with no anchors making them useless - - - - - 1a01d950 by Mateusz Kowalczyk at 2015-03-27T00:20:09+00:00 Clearly default to variables in out of scope case - - - - - 7943abe8 by Mateusz Kowalczyk at 2015-03-27T01:14:11+00:00 Fix Hoogle display of constructors Fixes haskell/haddock#361 - - - - - 6d6e587e by Mateusz Kowalczyk at 2015-03-27T01:45:18+00:00 Fully qualify names in Hoogle instances output Closes haskell/haddock#263 - - - - - 52dac365 by Mateusz Kowalczyk at 2015-03-27T01:55:01+00:00 Update changelog - - - - - ca5af9a8 by Mateusz Kowalczyk at 2015-03-27T02:43:55+00:00 Output method documentation in Hoogle backend One thing of note is that we no longer preserve grouping of methods and print each method on its own line. We could preserve it if no documentation is present for any methods in the group if someone asks for it though. Fixes haskell/haddock#259 - - - - - a33f0c10 by Mateusz Kowalczyk at 2015-03-27T03:04:21+00:00 Don't print instance safety information in Hoogle Fixes haskell/haddock#168 - - - - - df6c935a by Mateusz Kowalczyk at 2015-03-28T00:11:47+00:00 Post-release version bumps and changelog - - - - - dde8f7c0 by Mateusz Kowalczyk at 2015-03-28T20:39:10+00:00 Loosen bounds on haddock-* - - - - - de93bf89 by Mateusz Kowalczyk at 2015-03-28T20:39:10+00:00 Expand response files in arguments Closes haskell/haddock#285 - - - - - 1f0b0856 by Zejun Wu at 2015-04-26T16:35:35-07:00 Do not insert anchor for section headings in contents box - - - - - 860439d7 by Simon Peyton Jones at 2015-05-01T09:36:47+01:00 Track change in API of TyCon - - - - - a32f3e5f by Adam Gundry at 2015-05-04T15:32:59+01:00 Track API changes to support empty closed type familes - - - - - 77e98bee by Ben Gamari at 2015-05-06T20:17:08+01:00 Ignore doc/haddock.{ps,pdf} - - - - - 663d0204 by Murray Campbell at 2015-05-11T04:47:37-05:00 Change ModuleTree Node to carry PackageKey and SourcePackageId to resolve haskell/haddock#385 Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 8bb0dcf5 by Murray Campbell at 2015-05-11T06:35:06-05:00 Change ModuleTree Node to carry PackageKey and SourcePackageId to resolve haskell/haddock#385 Signed-off-by: Austin Seipp <aseipp at pobox.com> (cherry picked from commit 2380f07c430c525b205ce2eae6dab23c8388d899) - - - - - bad900ea by Adam Bergmark at 2015-05-11T15:29:39+01:00 haddock-library: require GHC >= 7.4 `Data.Monoid.<>` was added in base-4.5/GHC-7.4 Closes haskell/haddock#394 Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - daceff85 by Simon Peyton Jones at 2015-05-13T12:04:21+01:00 Track the new location of setRdrNameSpace - - - - - 1937d1c4 by Alan Zimmerman at 2015-05-25T21:27:15+02:00 ApiAnnotations : strings in warnings do not return SourceText The strings used in a WARNING pragma are captured via strings :: { Located ([AddAnn],[Located FastString]) } : STRING { sL1 $1 ([],[L (gl $1) (getSTRING $1)]) } .. The STRING token has a method getSTRINGs that returns the original source text for a string. A warning of the form {-# WARNING Logic , mkSolver , mkSimpleSolver , mkSolverForLogic , solverSetParams , solverPush , solverPop , solverReset , solverGetNumScopes , solverAssertCnstr , solverAssertAndTrack , solverCheck , solverCheckAndGetModel , solverGetReasonUnknown "New Z3 API support is still incomplete and fragile: \ \you may experience segmentation faults!" #-} returns the concatenated warning string rather than the original source. - - - - - ee0fb6c2 by Łukasz Hanuszczak at 2015-05-27T11:51:31+02:00 Create simple method for indentation parsing. - - - - - 7d6fcad5 by Łukasz Hanuszczak at 2015-05-27T21:36:13+02:00 Make nested lists count indentation according to first item. - - - - - d6819398 by Łukasz Hanuszczak at 2015-05-27T22:46:13+02:00 Add simple test case for arbitrary-depth list nesting. - - - - - 2929c54d by Łukasz Hanuszczak at 2015-06-03T02:11:31+02:00 Add arbitrary-indent spec test for parser. - - - - - 9a0a9bb0 by Mateusz Kowalczyk at 2015-06-03T05:25:29+01:00 Update docs with info on new list nesting rule Fixes haskell/haddock#278 through commits from PR haskell/haddock#401 - - - - - 12efc92c by Mateusz Kowalczyk at 2015-06-03T05:29:26+01:00 Update some meta data at the top of the docs - - - - - 765ee49f by Bartosz Nitka at 2015-06-07T08:40:59-07:00 Add some Hacking docs for getting started - - - - - 19aaf851 by Bartosz Nitka at 2015-06-07T08:44:30-07:00 Fix markdown - - - - - 2a90cb70 by Mateusz Kowalczyk at 2015-06-08T15:08:36+01:00 Refine hacking instructions slightly - - - - - 0894da6e by Thomas Winant at 2015-06-08T23:47:28-05:00 Update after wild card renaming refactoring in D613 Summary: * Move `Post*` type instances to `Haddock.Types` as other modules than `Haddock.Interface.Rename` will rely on these type instances. * Update after wild card renaming refactoring in D613. Reviewers: simonpj, austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D954 GHC Trac Issues: haskell/haddock#10098 - - - - - 10a9bb76 by Emanuel Borsboom at 2015-06-12T02:46:23+01:00 Build executable with '-threaded' (fixes haskell/haddock#399) - - - - - 7696b94f by Mateusz Kowalczyk at 2015-06-12T02:59:19+01:00 Update changelog for -threaded Closes haskell/haddock#400 - - - - - d3c118ec by Bartosz Nitka at 2015-06-12T03:00:58+01:00 Fix haddock: internal error: spliceURL UnhelpfulSpan (#207) Inferred type signatures don't have SrcSpans, so let's use the one from the declaration. I've tested this manually on the test-case from haskell/haddock#207, but I got stuck at trying to run the test-suite. - - - - - b67e843b by Mateusz Kowalczyk at 2015-06-12T03:01:50+01:00 Changelog for haskell/haddock#207 Fixes haskell/haddock#207, closes haskell/haddock#402 - - - - - 841d785e by jpmoresmau at 2015-06-12T16:03:16+01:00 Attach to instance location the name that has the same location file Fixes haskell/haddock#383 - - - - - 98791cae by Mateusz Kowalczyk at 2015-06-12T16:08:27+01:00 Update changelog Closes haskell/haddock#398 - - - - - 7c0b5a87 by Phil Ruffwind at 2015-06-12T13:07:25-04:00 Fix alignment of Source links in instance table in Firefox Due to a Firefox bug [1], a combination of 'whitespace: nowrap' on the parent element with 'float: right' on the inner element can cause the floated element to be displaced downwards for no apparent reason. To work around this, the left side is wrapped in its own <span> and set to 'float: left'. As a precautionary measure to prevent the parent element from collapsing entirely, we also add the classic "clearfix" hack. The latter is not strictly needed but it helps prevent bugs if the layout is altered again in the future. Fixes haskell/haddock#384. Remark: line 159 of src/Haddock/Backends/Xhtml/Layout.hs was indented to prevent confusion over the operator precedence of (<+>) vs (<<). [1]: https://bugzilla.mozilla.org/show_bug.cgi?id=488725 - - - - - cfe86e73 by Mateusz Kowalczyk at 2015-06-14T10:49:01+01:00 Update tests for the CSS changes - - - - - 2d4983c1 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create scaffolding for Haskell source parser module. - - - - - 29548785 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement function for tagging parsed chunks with source spans. - - - - - 6a5e4074 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement simple string chunking based on HsColour library. - - - - - 6e52291f by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create basic token classification method. - - - - - da971a27 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Adapt source span tagging to work with current whitespace handling. - - - - - 4feb5a22 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add record accessors to exports of hyperlinker parser module. - - - - - a8cc4e39 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Make parser module export all types and associated accessors. - - - - - fb8d468f by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create simple HTML renderer for parsed source file. - - - - - 80747822 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for specifying the CSS file path in HTML source renderer. - - - - - 994dc1f5 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix identifier recognition in Haskell source parser. - - - - - b1bd0430 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix comment recognition in Haskell source parser. - - - - - 11db85ae by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for recognizing compiler pragmas in source parser. - - - - - 736c7bd3 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create scaffolding of module for associating tokens with AST names. - - - - - 7e149bc2 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement utility method for extracting variable identifiers from AST. - - - - - 32eb640a by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create simple mechanism for associating tokens with AST names. - - - - - d4eba5bc by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add dummy support for hyperlinking named tokens. - - - - - 2b76141f by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix span matcher bug causing wrong items being hyperlinked. - - - - - 2d48002e by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Constrain elements exported by hyperlinker modules. - - - - - 9715eec6 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for type token recognition. - - - - - 8fa401cb by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for binding token recognition. - - - - - d062400b by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement go-to-definition mechanism for local bindings. - - - - - f4dc229b by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement module export- and import-list item hyperlinking. - - - - - c9a46d58 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix span matching to allow parenthesized operators hyperlinking. - - - - - 03aad95a by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix weird hyperlinking of parenthesized operators. - - - - - b4694a7d by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for type declaration anchors. - - - - - 7358d2d2 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for top-level function declaration anchors. - - - - - dfc24b24 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix external anchors to contain HTML file extension. - - - - - a045926c by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Refactor the way AST names are handled within detailed tokens. - - - - - c76049b4 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Implement hyperlinking of imported module names. - - - - - 2d2a1572 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix parsing of single line comments with broken up newlines. - - - - - 11afdcf2 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix bug with improper newline handling. - - - - - 8137f104 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix issues with escaped newlines in comments. - - - - - 34759b19 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for parsing C preprocessor macros. - - - - - 09f0f847 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add some documentation for parser module of source hyperlinker. - - - - - 709a8389 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add some documentation for AST module of source hyperlinker. - - - - - 4df5c227 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add command line option for generating hyperlinked source. - - - - - 7a755ea2 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Extend module interface with rich source token stream field. - - - - - 494f4ab1 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Implement source tokenization during interface creation process. - - - - - 5f21c953 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Create hyperlinker module and plug it into the Haddock pipeline. - - - - - 0cc8a216 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for providing custom CSS files for hyperlinked source. - - - - - a32bbdc1 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for fancy highlighting upon hovering over identifier. - - - - - d16d642a by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make source hyperlinker generate output in apropriate directory. - - - - - ae12953d by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Create module with hyperlinker utility functions. - - - - - 6d4952c5 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make external hyperlinks point to locations specified by source URLs. - - - - - 8417555d by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Rewrite source generation to fixed links and directory structure. - - - - - ce9cec01 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add basic support for cross-package hyperlink generation. - - - - - 7eaf025c by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Disable generating hyperlinks for module references. - - - - - a50bf92e by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make Haddock generate source for all interfaces (also hidden ones). - - - - - f5ae2838 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Prevent source parser from throwing exception when lexing fails. - - - - - db9ffbe0 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Implement workaround for Chrome highlighting issues. - - - - - 0b6b453b by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make hyperlinker generate correct anchors for data constructors. - - - - - c86d38bc by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make hyperlinker generate anchors for record field declarations. - - - - - 063abf7f by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix issue with hyperlink highlight styling in Chrome browser. - - - - - 880fc611 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add support for hyperlinking constructor names in patters. - - - - - c9e89b95 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add support for hyperlinking field names in record patterns. - - - - - 17a11996 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add support for hyperlinking field names in record expressions. - - - - - 0eef932d by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Make hyperlinker respect pretty-printer flag and add documentation. - - - - - f87c1776 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Unexpose hyperlinker modules in Cabal configuration. - - - - - 4c9e2b06 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Setup HSpec framework for Haddock API package. - - - - - 4b20cb30 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add basic tests related to comment parsing. - - - - - 6842e919 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add tests related to parsing basic language constructs. - - - - - 87bffb35 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add simple tests for do-notation parsing. - - - - - e7af1841 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add very simple QuickCheck properties for source parser spec. - - - - - c84efcf1 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Create simple test runner for hyperlinker tests. - - - - - 76b90447 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for basic identifier hyperlinking. - - - - - 0fbf4df6 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for operator hyperlinking. - - - - - 731aa039 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for constructor hyperlinking. - - - - - 995a78a2 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for record expressions and patterns hyperlinking. - - - - - 3566875a by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for literal syntax highlighting. - - - - - 68469a35 by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Add hyperlinker test runner to .cabal and .gitignore files. - - - - - aa946c93 by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Adapt hyperlinker test runner to have the same interface as HTML one. - - - - - ce34da16 by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Fix hyperlinker test runner file paths and add pretty-printing option. - - - - - 0d7dd65e by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Add reference files for hyperlinker test cases. - - - - - efa4a1e0 by Łukasz Hanuszczak at 2015-07-01T00:47:32+02:00 Make hyperlinker test runner strip local links from generated source. - - - - - 3e96e584 by Łukasz Hanuszczak at 2015-07-01T01:14:59+02:00 Create simple script for accepting hyperlinker test case references. - - - - - 526fe610 by Łukasz Hanuszczak at 2015-07-01T01:16:41+02:00 Re-accept hyperlinker test cases with local references stripped out. - - - - - 892e2cb3 by Łukasz Hanuszczak at 2015-07-01T01:22:09+02:00 Fix bug with diffing wrong files in hyperlinker test runner. - - - - - 9ff46039 by Łukasz Hanuszczak at 2015-07-01T18:04:46+02:00 Remove unused dependencies in Haddock API spec configuration. - - - - - 47969c07 by Łukasz Hanuszczak at 2015-07-01T18:32:19+02:00 Add support for hyperlinking synonyms in patterns. - - - - - a73449e0 by Łukasz Hanuszczak at 2015-07-01T18:33:44+02:00 Create test case for hyperlinking @-patterns. - - - - - c2077ed8 by Łukasz Hanuszczak at 2015-07-01T19:06:04+02:00 Add support for hyperlinking universally quantified type variables. - - - - - 68017342 by Łukasz Hanuszczak at 2015-07-01T19:28:32+02:00 Create hyperlinker test case with quantified type variables. - - - - - 51c01a78 by Łukasz Hanuszczak at 2015-07-01T19:34:22+02:00 Add scoped type variables test for polymorphism test case. - - - - - 13181ae2 by Łukasz Hanuszczak at 2015-07-01T19:56:27+02:00 Add record wildcards test for records hyperlinking test case. - - - - - 991b81dd by Łukasz Hanuszczak at 2015-07-01T21:01:42+02:00 Document some functions in XHTML utlity module. - - - - - 98c8dfe5 by Łukasz Hanuszczak at 2015-07-01T22:25:21+02:00 Make hyperlinker render qualified names as one entity. - - - - - 75e13b9b by Łukasz Hanuszczak at 2015-07-01T22:27:38+02:00 Add qualified name test for identifiers hyperlinking test case. - - - - - de1e143f by Łukasz Hanuszczak at 2015-07-02T12:32:59+02:00 Fix crash happening when hyperlinking type family declarations. - - - - - 7a8fb175 by Łukasz Hanuszczak at 2015-07-02T12:47:03+02:00 Add support for anchoring data family constructor declarations. - - - - - 3b404e49 by Łukasz Hanuszczak at 2015-07-02T13:31:05+02:00 Improve support for hyperlinking type families. - - - - - 59eb7143 by Łukasz Hanuszczak at 2015-07-02T13:33:34+02:00 Add hyperlinker test case for checking type and type family declarations. - - - - - d1cda0c0 by Łukasz Hanuszczak at 2015-07-02T13:41:38+02:00 Fix issue with operators being recognized as preprocessor directives. - - - - - da206c9d by Łukasz Hanuszczak at 2015-07-02T17:18:12+02:00 Fix broken tests for parsing and hyperlinking hash operators. - - - - - 53750d1b by Łukasz Hanuszczak at 2015-07-02T18:53:28+02:00 Add support for anchoring signatures in type class declarations. - - - - - 1fa5bb10 by Łukasz Hanuszczak at 2015-07-02T19:04:47+02:00 Make hyperlinker generate anchors only to top-level value bindings. - - - - - a542305c by Łukasz Hanuszczak at 2015-07-02T19:05:58+02:00 Create hyperlinker test case for type classes. - - - - - b0dd4581 by Łukasz Hanuszczak at 2015-07-04T16:28:26+02:00 Update docs with information about source hyperlinking. - - - - - 9795302a by Łukasz Hanuszczak at 2015-07-04T16:52:15+02:00 Update docs on using `--read-interface` option. - - - - - 9acdc002 by Łukasz Hanuszczak at 2015-07-04T17:15:26+02:00 Remove potentially dangerous record access in hyperlinker AST module. - - - - - fb3ab7be by Łukasz Hanuszczak at 2015-07-04T17:40:10+02:00 Make Haddock generate warnings about potential misuse of hyperlinker. - - - - - a324c504 by Łukasz Hanuszczak at 2015-07-04T17:43:22+02:00 Fix incorrect specification of source style option in doc file. - - - - - 3f01a8e4 by Łukasz Hanuszczak at 2015-07-05T17:06:36+02:00 Refactor source path mapping to use modules as indices. - - - - - ac70f5b1 by Łukasz Hanuszczak at 2015-07-05T17:47:34+02:00 Fix bug where not all module interfaces were added to source mapping. - - - - - f5e57da9 by Łukasz Hanuszczak at 2015-07-06T16:39:57+02:00 Extract main hyperlinker types to separate module. - - - - - 43974905 by Łukasz Hanuszczak at 2015-07-06T16:52:13+02:00 Move source paths types to hyperlinker types module. - - - - - 3e236055 by Łukasz Hanuszczak at 2015-07-06T17:06:19+02:00 Add support for hyperlinking modules in import lists. - - - - - 58233d9f by Łukasz Hanuszczak at 2015-07-06T17:26:49+02:00 Add short documentation for hyperlinker source map type. - - - - - 14da016d by Łukasz Hanuszczak at 2015-07-06T18:07:20+02:00 Fix bug with module name being hyperlinked to `Prelude`. - - - - - 8f79db52 by Łukasz Hanuszczak at 2015-07-06T18:23:47+02:00 Fix problem with spec build in Haddock API configuration. - - - - - e7cc056c by Adam Sandberg Eriksson at 2015-07-07T23:22:21+01:00 StrictData: print correct strictness marks - - - - - e8253ca8 by Mateusz Kowalczyk at 2015-07-07T23:58:28+01:00 Update changelog - - - - - 0aba676b by Mateusz Kowalczyk at 2015-07-07T23:58:33+01:00 Relax upper bound on GHC a bit - - - - - 7a595381 by Mateusz Kowalczyk at 2015-07-07T23:58:52+01:00 Delete trailing whitespace - - - - - 50976d5e by Adam Sandberg Eriksson at 2015-07-08T15:03:04+02:00 StrictData: changes in HsBang type - - - - - 83b045fa by Mateusz Kowalczyk at 2015-07-11T14:35:18+01:00 Fix expansion icon for user-collapsible sections Closes haskell/haddock#412 - - - - - b2a3b0d1 by Mateusz Kowalczyk at 2015-07-22T22:03:21+01:00 Make some version changes after 2.16.1 release - - - - - a8294423 by Ben Gamari at 2015-07-27T13:16:07+02:00 Merge pull request haskell/haddock#422 from adamse/adamse-D1033 Merge for GHC D1033 - - - - - c0173f17 by randen at 2015-07-30T14:49:08-07:00 Break the response file by line termination rather than spaces, since spaces may be within the parameters. This simple approach avoids having the need for any quoting and/or escaping (although a newline char will not be possible in a parameter and has no escape mechanism to allow it). - - - - - 47c0ca14 by Alan Zimmerman at 2015-07-31T10:41:52+02:00 Replace (SourceText,FastString) with WithSourceText data type Phab:D907 introduced SourceText for a number of data types, by replacing FastString with (SourceText,FastString). Since this has an Outputable instance, no warnings are generated when ppr is called on it, but unexpected output is generated. See Phab:D1096 for an example of this. Replace the (SourceText,FastString) tuples with a new data type data WithSourceText = WithSourceText SourceText FastString Trac ticket: haskell/haddock#10692 - - - - - 45a9d770 by Mateusz Kowalczyk at 2015-07-31T09:47:43+01:00 Update changelog - - - - - 347a20a3 by Phil Ruffwind at 2015-08-02T23:15:26+01:00 Avoid JavaScript error during page load in non-frame mode In non-frame mode, parent.window.synopsis refers to the synopsis div rather than the nonexistent frame. Unfortunately, the script wrongly assumes that if it exists it must be a frame, leading to an error where it tries to access the nonexistent attribute 'replace' of an undefined value (synopsis.location). Closes haskell/haddock#406 - - - - - 54ebd519 by Phil Ruffwind at 2015-08-02T23:27:10+01:00 Link to the definitions to themselves Currently, the definitions already have an anchor tag that allows URLs with fragment identifiers to locate them, but it is rather inconvenient to obtain such a URL (so-called "permalink") as it would require finding the a link to the corresponding item in the Synopsis or elsewhere. This commit adds hyperlinks to the definitions themselves, allowing users to obtain links to them easily. To preserve the original aesthetics of the definitions, we alter the color of the link so as to be identical to what it was, except it now has a hover effect indicating that it is clickable. Additionally, the anchor now uses the 'id' attribute instead of the (obsolete) 'name' attribute. Closes haskell/haddock#407 - - - - - 02cc8bb7 by Phil Ruffwind at 2015-08-02T23:28:02+01:00 Fix typo in Haddock.Backends.Xhtml.Layout: divSynposis -> divSynopsis Closes haskell/haddock#408 - - - - - 2eb0a458 by Phil Ruffwind at 2015-08-02T23:30:07+01:00 Fix record field alignment when name is too long Change <dl> to <ul> and use display:table rather than floats to layout the record fields. This avoids bug haskell/haddock#301 that occurs whenever the field name gets too long. Slight aesthetic change: the entire cell of the field's source code is now shaded gray rather than just the area where text exists. Fixes haskell/haddock#301. Closes haskell/haddock#421 - - - - - 7abb3402 by Łukasz Hanuszczak at 2015-08-02T23:32:14+01:00 Add some utility definitions for generating line anchors. - - - - - e0b1d79b by Łukasz Hanuszczak at 2015-08-02T23:32:15+01:00 Make hyperlinked source renderer generate line anchors. - - - - - 24dd4c9f by Łukasz Hanuszczak at 2015-08-02T23:32:15+01:00 Re-accept test cases after adding line anchors for each of them. - - - - - 0372cfcb by Łukasz Hanuszczak at 2015-08-02T23:32:15+01:00 Override source line flags when source hyperlinker is enabled. - - - - - a81bcd07 by Mateusz Kowalczyk at 2015-08-02T23:58:25+01:00 Update tests to follow HTML changes - - - - - d2d7426f by Łukasz Hanuszczak at 2015-08-06T20:54:59+02:00 Fix quote syntax for promoted types. - - - - - 668cf029 by Łukasz Hanuszczak at 2015-08-06T21:12:00+02:00 Apply promoted type quoting to type-level consing. - - - - - 89f8e7c6 by Łukasz Hanuszczak at 2015-08-06T21:17:10+02:00 Extend advanced types test case with other examples. - - - - - 86494bca by Łukasz Hanuszczak at 2015-08-06T21:22:06+02:00 Rename advanced types test case and accept new output. - - - - - dbb7c7c0 by Adam Sandberg Eriksson at 2015-08-09T23:01:05+02:00 HsBang is split into HsSrcBang and HsImplBang With recent changes in GHC handling of strictness annotations in Haddock is simplified. - - - - - 2a7704fa by Ben Gamari at 2015-08-10T13:18:05+02:00 Merge pull request haskell/haddock#433 from adamse/split-hsbang HsBang is split into HsSrcBang and HsImplBang - - - - - 891954bc by Thomas Miedema at 2015-08-15T14:51:18+02:00 Follow changes in GHC build system - - - - - b55d32ab by Mateusz Kowalczyk at 2015-08-21T18:06:09+01:00 Make Travis use 7.10.2 - - - - - 97348b51 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Move SYB utilities to standalone module. - - - - - 748ec081 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Implement `everywhere` transformation in SYB module. - - - - - 011cc543 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Implement generic transformation constructor. - - - - - b9510db2 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Create simple utility module for type specialization. - - - - - 43229fa6 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Make type of type specialization function more general. - - - - - fd844e90 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Add basic HTML test case for checking instance specialization. - - - - - 6ea0ad04 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Make HTML class instance printer take optional signature argument. - - - - - 65aa41b6 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Refactor instance head type to record instead of a meaningless tuple. - - - - - 3fc3bede by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Add expandable method section for each class instance declaration. - - - - - 99ceb107 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Move dummy post-family instances for `DocName` to `Types` module. - - - - - e98f4708 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create convenience functions for type specialization module. - - - - - b947552f by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Hook type specialization logic with HTML pretty-printer. - - - - - dcaa8030 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create stub functions for sugaring specialized types. - - - - - fa84bc65 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Implement list syntax sugaring logic for specialized types. - - - - - e8b05b07 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Implement tuple syntax sugaring logic for specialized types. - - - - - 68a2e5bc by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Get rid of code duplication in type specialization module. - - - - - 4721c336 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create scaffolding of a framework for renaming specialized types. - - - - - 271b488d by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fill in missing cases in specialized type renaming function. - - - - - bfa5f2a4 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Remove code duplication in specialized type renamer. - - - - - ea6bd0e8 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Change state of the type renaming monad. - - - - - 77c5496e by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Implement simple mechanism for generating new type names. - - - - - 91bfb48b by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fill in stub behaviour with actual environment renaming. - - - - - d244517b by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fix logic behind binder type renaming. - - - - - f3c5e360 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Add SYB-like utility function for performing stateful queries. - - - - - eb3f9154 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create function for retrieving free variables from given type. - - - - - a94561d3 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fix compilation error caused by incorrect type signature. - - - - - 8bb707cf by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Move `SetName` class definition to types module. - - - - - 5800b13b by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Hook type renamer with instance method HTML pretty-printer. - - - - - 6a480164 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Add some test cases for type renamer. - - - - - 839842f7 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Make specialized signatures refer to original signature declaration. - - - - - 4880f7c9 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Make specialized methods be nicely formatted again. - - - - - ab5a6a2e by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Attach source locations to the specialized class methods. - - - - - 43f8a559 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Extend instances test case to also test multi-name type signatures. - - - - - 59bc751c by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix tab-based indentation in instances test case. - - - - - c2126815 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Improve placement of instance methods expander button. - - - - - 0a32e287 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Add new data type declaration to instance specialization test case. - - - - - 5281af1f by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Make type renamer first try single-letter names as alternatives. - - - - - 7d509475 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix type renamer bug with incorrect names being generated. - - - - - 0f35bf7c by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Add some documentation and refactor type specialization module. - - - - - da1d0803 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix another bug where type renamer was generating incorrect names. - - - - - cd39b5cb by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Refactor type renamer to rebinding and pure renaming phases. - - - - - 850251f4 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix unwitting compilation bug. - - - - - e5e9fc01 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Integrate instance specification type into class instance definition. - - - - - 825b0ea0 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Get rid of no longer neccessary instance specification type. - - - - - cdba44eb by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix declaration converter to use more appropriate mode for methods. - - - - - bc45c309 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix bug with types not being specialized at all. - - - - - 5d8e5d89 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix bug where instance expander was opening wrong section. - - - - - 6001ee41 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix another type renamer bug where not all names were rebound. - - - - - 5f58ce2a by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix yet another renamer bug where some names were not unique. - - - - - 8265e521 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Split instance subsection layout method to top-level declarations. - - - - - e5e66298 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Rearrange layout of instance methods in generated documentation. - - - - - a50b4eea by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Get rid of no longer used layout method. - - - - - 2ff36ec2 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Attach section title to the instance methods block. - - - - - 7ac15300 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Add basic tests for associated types in instances test case. - - - - - db0ea2f9 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Attach associated types information to instance header. - - - - - 71cad4d5 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Make instance details section contain associated types information. - - - - - deee2809 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Improve look of rendered associated families in instance details. - - - - - 839d13a5 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Introduce alternative type for family declarations. - - - - - d397f03f by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Make instance details record use new type for family declarations. - - - - - 2b23fe97 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Split printer of type family header to separate functions. - - - - - c3498cdc by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Implement HTML renderer for pseudo-family declarations. - - - - - c12bbb04 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Apply type specializer to associated type family declarations. - - - - - 2fd69ff2 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Create helper method for specializing type signatures. - - - - - 475826e7 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Refactor specializer module to be independent from XHTML backend. - - - - - f00b431c by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Add some documentation for instance head specializer. - - - - - a9fef2dc by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Fix bug with missing space in documentation for associated types. - - - - - 50e29056 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Fix issue with incorrect instance details sections being expanded. - - - - - e6dfdd03 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Accept tests affected by adding instance details section. - - - - - 75565b2a by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Make section identifier of instance details more GHC-independent. - - - - - add0c23e by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Re-accept tests after applying deterministic section identifiers. - - - - - 878f2534 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Make identifier generation also architecture-independent. - - - - - 48be69f8 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Fix issue with instance expander hijacking type hyperlink click. - - - - - 47830c1f by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Get rid of dreadful hashing function for generating identifiers. - - - - - 956cd5af by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Move `InstOrigin` type declaration to more appropriate module. - - - - - bf672ed3 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Accept tests affected by changes related to instance expander. - - - - - 8f2a949a by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Add examples with type operators to the instances test case. - - - - - 64600a84 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Add basic support for sugaring infix type operators. - - - - - 747d71b8 by Łukasz Hanuszczak at 2015-08-21T18:22:34+01:00 Add support for sugaring built-in function syntax. - - - - - d4696ffb by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Remove default methods from Hoogle class output. - - - - - bf0e09d7 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Add fixity declarations in Hoogle backend output. - - - - - 90e91a51 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Fix bug with incorrect fixities being generated in Hoogle backend. - - - - - 48f11d35 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Improve class type family declarations output in Hoogle backend. - - - - - 661e8e8f by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Add missing default family equations in Hoogle output. - - - - - e2d64103 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Improve formatting of class details output in Hoogle backend. - - - - - 490fc377 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Fix weird-looking Hoogle output for familyless classes. - - - - - ea115b64 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Create script file for new HTML test runner. - - - - - 609913d3 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Set default behaviour if no arguments given. - - - - - dc115f67 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Add support for providing optional arguments for test runner. - - - - - d93ec867 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Improve output of test runner error messages. - - - - - 0be9fe12 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Add support for executing Haddock process in test runner. - - - - - 4e4d00d9 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Add GHC path to test runner configuration. - - - - - d67a2086 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make GHC path a test runner command-line argument. - - - - - c810079a by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Extend test runner configuration with Haddock arguments. - - - - - fee18845 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Refactor test runner and create stub functions. - - - - - ff7c161f by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make test runner actually run Haddock executable. - - - - - 391f73e6 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Fix bug with test runner not producing any output files. - - - - - 81a74e2d by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Setup skeleton of framework for running tests. - - - - - f8a79ec4 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Fix bug with modules not being found in global search mode. - - - - - 7e700b4d by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make Haddock standard output redirection be more configurable. - - - - - 53b4c17a by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Incorporate old, ugly functions for comparing output files. - - - - - 8277c8aa by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Refactor architecture of test runner output checking functions. - - - - - 587bb414 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Implement actual diffing mechanism. - - - - - 9ed2b5e4 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Improve code style to match popular guidelines. - - - - - 14bffaf8 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make it possible to choose alternative diff tool. - - - - - 5cdfb005 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Create stub methods for processing test output as XML documents. - - - - - 7ef8e12e by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Implement link-stripping logic as simple SYB transformation. - - - - - 8a1fcd4f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Incorporate link stripping to output diffing mechanism. - - - - - 37dba2bc by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Implement footer-stripping logic. - - - - - 9cd52120 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Add missing dependencies in Cabal configuration file. - - - - - e0f83c6e by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix issue with output being printed in incorrect order. - - - - - 0a94fbb0 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make it possible to run tests without generating diff. - - - - - 76a58c6f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Refactor HTML test suite boilerplate to external package. - - - - - af41e6b0 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create utilities for storing directory configuration. - - - - - d8f0698f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Move IO-dependent config of HTML test suite to test package. - - - - - 17369fa0 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Enable all compiler warnings in Haddock test package configuration. - - - - - 9d03b47a by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Move Haddock runner of HTML test suite to Haddock test package. - - - - - 4b3483c5 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make Haddock test package more generic. - - - - - 03754194 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create convenience wrappers to simplify in test entry points. - - - - - 27476ab7 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Adjust module visibility and items they export. - - - - - c40002ba by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Remove no longer useful test option. - - - - - 55ab2541 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Change extension of test files used for diffing. - - - - - 136bf4e4 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Refactor and simplify XHTML helper module of test package. - - - - - 69f7e3df by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix typo in link stripper of HTML test suite runner. - - - - - 0c3c1c6b by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create convenience script for running specific HTML tests. - - - - - 489e1b05 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Implement utility functions for conditional link stripping. - - - - - 0f985dc3 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Adapt `hypsrc-test` module to work with new testing framework. - - - - - 927406f9 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Implement output accepting mechanism in test package. - - - - - 8545715e by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create utility function for recursive obtaining directory contents. - - - - - cb70381f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make Haddock test package more generic. - - - - - 019599b5 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix path handling in test runner. - - - - - 399b985b by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make it possible to specify ignored files for test output. - - - - - 41b3d93d by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Adapt HTML test runner to use new ignoring functionality. - - - - - e2091c8b by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix bug with not all test output files being checked. - - - - - b22134f9 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Specify ignored files for hyperlinker source test runner. - - - - - 3301dfa1 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Copy test runner script for hyperlinked source case. - - - - - d39a6dfa by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix bug with test runner invoking Haddock in incorrect mode. - - - - - f32c8ff3 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix path handling in test module loader. - - - - - 10f94ee9 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Make test runner ignore test packages with no modules. - - - - - 5dc4239c by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Create test runner entry points for LaTeX test suite. - - - - - 58d1f7cf by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix bug with unnecessary checking old test output. - - - - - c7ce76e1 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Re-implement test acceptance functionality. - - - - - 13bbabe8 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix warning about no longer needed definition. - - - - - 958a99b8 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Adapt Cabal configuration to execute LaTeX suite with new runner. - - - - - 550ff663 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Setup test suite for Hoogle backend. - - - - - 3aa969c4 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Make Hoogle backend create output directory if needed. - - - - - eb085b02 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Add appropriate .gitignore entry and configure Hoogle test suite. - - - - - a50bf915 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix bug with test runner failing when run on multiple test packages. - - - - - bf5368b8 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Create simple test cases for Hoogle backend. - - - - - 6121ba4b by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Create helper function for conversion between XML and XHTML. - - - - - cb516061 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Refactor existing code to use XHTML printer instead of XML one. - - - - - e2de8c82 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Improve portability of test runner scripts. - - - - - 9563e774 by Łukasz Hanuszczak at 2015-08-22T23:43:16+02:00 Remove redundant import statement. - - - - - 55353df1 by Łukasz Hanuszczak at 2015-08-24T23:09:20+02:00 Fix bug with accepting to non-existing directory. - - - - - 00a334ca by Łukasz Hanuszczak at 2015-08-24T23:09:47+02:00 Accept output for Hoogle and LaTeX backends. - - - - - 29191d8b by Łukasz Hanuszczak at 2015-08-24T23:14:18+02:00 Get rid of obsolete testing utilities. - - - - - bbb25db3 by Łukasz Hanuszczak at 2015-08-24T23:18:50+02:00 Update sandbox setup guide to work with Haddock test package. - - - - - cfd45248 by Łukasz Hanuszczak at 2015-08-24T23:51:30+02:00 Make Travis aware of Haddock test package. - - - - - 74185b7a by Łukasz Hanuszczak at 2015-08-25T17:41:59+02:00 Fix test suite failure when used with Stack. - - - - - 18769697 by Łukasz Hanuszczak at 2015-08-25T18:02:09+02:00 Add sample Stack setup to the hacking guide. - - - - - 22715eeb by Łukasz Hanuszczak at 2015-08-25T18:04:47+02:00 Fix Markdown formatting of README file. - - - - - b49ec386 by Łukasz Hanuszczak at 2015-08-25T18:13:36+02:00 Setup Haddock executable path in Travis configuration. - - - - - 5d29eb03 by Eric Seidel at 2015-08-30T09:55:58-07:00 account for changes to ipClass - - - - - f111740a by Ben Gamari at 2015-09-02T13:20:37+02:00 Merge pull request haskell/haddock#443 from bgamari/ghc-head account for changes to ipClass - - - - - a2654bf6 by Jan Stolarek at 2015-09-03T01:32:57+02:00 Follow changes from haskell/haddock#6018 - - - - - 2678bafe by Richard Eisenberg at 2015-09-21T12:00:47-04:00 React to refactoring CoAxiom branch lists. - - - - - ebc56e24 by Edward Z. Yang at 2015-09-21T11:53:46-07:00 Track msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 4a8c4198 by Tamar Christina at 2015-09-27T13:59:08+02:00 Create Process: removed PhaseFailed - - - - - 7e99b790 by Oleg Grenrus at 2015-09-27T20:52:10+03:00 Generate docs for orphan instances - - - - - 32e932e2 by Oleg Grenrus at 2015-09-28T07:21:11+03:00 Have source links for orphan instances - - - - - c2eb9f4f by Oleg Grenrus at 2015-09-28T07:24:58+03:00 Print orphan instances header only if required - - - - - ff96f978 by Oleg Grenrus at 2015-09-28T07:40:54+03:00 Add orphan instances link to contents box - - - - - d72490a6 by Oleg Grenrus at 2015-09-28T16:37:44+03:00 Fix orphan instance collapsing - - - - - 25d3dfe5 by Ben Gamari at 2015-10-03T12:38:09+02:00 Merge pull request haskell/haddock#448 from Mistuke/fix-silent-death-of-runInteractive Remove PhaseFailed - - - - - 1e45e43b by Edward Z. Yang at 2015-10-11T13:10:10-07:00 s/PackageKey/UnitId/g and s/packageKey/unitId/g Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - b1370ac1 by Adam Gundry at 2015-10-16T16:26:42+01:00 Roughly fix up haddock for DuplicateRecordFields changes This compiles, but will probably need more work to produce good documentation when the DuplicateRecordFields extension is used. - - - - - 60bef421 by Simon Peyton Jones at 2015-10-26T12:52:36+00:00 Track wip/spj-wildcard-refactor on main repo - - - - - 4c1898ca by Simon Peyton Jones at 2015-10-27T14:24:56+00:00 Track change to PatSyn.patSynSig - - - - - 25108e85 by Simon Peyton Jones at 2015-10-27T17:34:18+00:00 Follow changes to HsTYpe Not yet complete (but on a wip/ branch) - - - - - 693643ac by Ben Gamari at 2015-10-28T14:33:06+01:00 Account for Typeable changes The treatment of type families changed. - - - - - cd7c2221 by Simon Peyton Jones at 2015-10-30T13:03:51+00:00 Work on updating Haddock to wip/spj-wildard-recactor Still incomplete - - - - - 712032cb by Herbert Valerio Riedel at 2015-10-31T11:01:45+01:00 Relax upper bound on `base` to allow base-4.9 - - - - - 0bfa0475 by Simon Peyton Jones at 2015-10-31T19:08:13+00:00 More adaption to wildcard-refactor - - - - - 0a3c0cb7 by Simon Peyton Jones at 2015-10-31T22:14:43+00:00 Merge remote-tracking branch 'origin/ghc-head' into wip/spj-wildcard-refactor Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - c4fd4ec9 by Alan Zimmerman at 2015-11-01T11:16:34+01:00 Matching change GHC haskell/haddock#11017 BooleanFormula located - - - - - 42cdd882 by Matthew Pickering at 2015-11-06T20:02:16+00:00 Change for IEThingWith - - - - - f368b7be by Ben Gamari at 2015-11-11T11:35:51+01:00 Eliminate support for deprecated GADT syntax Follows from GHC D1460. - - - - - e32965b8 by Simon Peyton Jones at 2015-11-13T12:18:17+00:00 Merge with origin/head - - - - - ebcf795a by Edward Z. Yang at 2015-11-13T21:56:27-08:00 Undo msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 4e23989f by Simon Peyton Jones at 2015-11-18T11:32:54+00:00 Wibbles to Haddock - - - - - 2289cd4a by Simon Peyton Jones at 2015-11-20T23:12:49+00:00 Merge remote-tracking branch 'origin/ghc-head' into wip/spj-wildcard-refactor - - - - - 695975a6 by Alan Zimmerman at 2015-11-21T21:16:12+02:00 Update to match GHC wip/T11019 - - - - - bbba21e7 by Simon Peyton Jones at 2015-11-23T13:54:31+00:00 merge with origin/ghc-head - - - - - 3d664258 by Simon Peyton Jones at 2015-11-23T17:17:18+00:00 Wibble - - - - - e64cf586 by Herbert Valerio Riedel at 2015-12-05T00:29:55+01:00 Canonicalise Monad instances - - - - - a2de15a7 by Alan Zimmerman at 2015-12-05T17:33:52+02:00 Matching changes for haskell/haddock#11028 - - - - - cc29a3e4 by Alan Zimmerman at 2015-12-05T19:45:33+02:00 Placeholder for record style GADT declaration A GADT Declaration is now presented as CmmCondBranch :: {..} -> CmmNode O C cml_pred :: CmmExpr cml_true, cml_false :: !Label cml_likely :: Maybe Bool for CmmCondBranch :: { -- conditional branch cml_pred :: CmmExpr, cml_true, cml_false :: ULabel, cml_likely :: Maybe Bool -- likely result of the conditional, -- if known } -> CmmNode O C - - - - - 95dd15d1 by Richard Eisenberg at 2015-12-11T17:33:39-06:00 Update for type=kinds - - - - - cb5fd9ed by Herbert Valerio Riedel at 2015-12-14T15:07:30+00:00 Bump versions for ghc-7.11 - - - - - 4f286d96 by Simon Peyton Jones at 2015-12-14T15:10:56+00:00 Eliminate instanceHead' in favour of GHC's instanceSig This is made possible by the elimination of "silent superclass parameters" in GHC - - - - - 13ea2733 by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Remove redundant constraints from haddock, discovered by -fwarn-redundant-constraints - - - - - 098df8b8 by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Track changes in HsSyn for quasi-quotes - - - - - 716a64de by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Track change in API of TyCon - - - - - 77a66bca by Adam Gundry at 2015-12-14T15:10:58+00:00 Track API changes to support empty closed type familes - - - - - f2808305 by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Track the new location of setRdrNameSpace - - - - - ba8b08a4 by Alan Zimmerman at 2015-12-14T15:10:59+00:00 ApiAnnotations : strings in warnings do not return SourceText The strings used in a WARNING pragma are captured via strings :: { Located ([AddAnn],[Located FastString]) } : STRING { sL1 $1 ([],[L (gl $1) (getSTRING $1)]) } .. The STRING token has a method getSTRINGs that returns the original source text for a string. A warning of the form {-# WARNING Logic , mkSolver , mkSimpleSolver , mkSolverForLogic , solverSetParams , solverPush , solverPop , solverReset , solverGetNumScopes , solverAssertCnstr , solverAssertAndTrack , solverCheck , solverCheckAndGetModel , solverGetReasonUnknown "New Z3 API support is still incomplete and fragile: \ \you may experience segmentation faults!" #-} returns the concatenated warning string rather than the original source. - - - - - a4ded87e by Thomas Winant at 2015-12-14T15:14:05+00:00 Update after wild card renaming refactoring in D613 Summary: * Move `Post*` type instances to `Haddock.Types` as other modules than `Haddock.Interface.Rename` will rely on these type instances. * Update after wild card renaming refactoring in D613. Reviewers: simonpj, austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D954 GHC Trac Issues: haskell/haddock#10098 - - - - - 25c78107 by Adam Sandberg Eriksson at 2015-12-14T15:14:06+00:00 StrictData: print correct strictness marks - - - - - 6cbc41c4 by Adam Sandberg Eriksson at 2015-12-14T15:14:06+00:00 StrictData: changes in HsBang type - - - - - ad46821a by Alan Zimmerman at 2015-12-14T15:14:06+00:00 Replace (SourceText,FastString) with WithSourceText data type Phab:D907 introduced SourceText for a number of data types, by replacing FastString with (SourceText,FastString). Since this has an Outputable instance, no warnings are generated when ppr is called on it, but unexpected output is generated. See Phab:D1096 for an example of this. Replace the (SourceText,FastString) tuples with a new data type data WithSourceText = WithSourceText SourceText FastString Trac ticket: haskell/haddock#10692 - - - - - abc0ae5b by Adam Sandberg Eriksson at 2015-12-14T15:14:06+00:00 HsBang is split into HsSrcBang and HsImplBang With recent changes in GHC handling of strictness annotations in Haddock is simplified. - - - - - 3308d06c by Thomas Miedema at 2015-12-14T15:14:07+00:00 Follow changes in GHC build system - - - - - 6c763deb by Eric Seidel at 2015-12-14T15:14:07+00:00 account for changes to ipClass - - - - - ae5b4eac by Jan Stolarek at 2015-12-14T15:17:00+00:00 Follow changes from haskell/haddock#6018 - - - - - ffbc40e0 by Richard Eisenberg at 2015-12-14T15:17:02+00:00 React to refactoring CoAxiom branch lists. - - - - - d1f531e9 by Edward Z. Yang at 2015-12-14T15:17:02+00:00 Track msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 79f73754 by Tamar Christina at 2015-12-14T15:17:02+00:00 Create Process: removed PhaseFailed - - - - - 3d37bebb by Edward Z. Yang at 2015-12-14T15:20:46+00:00 s/PackageKey/UnitId/g and s/packageKey/unitId/g Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 5f8a9e44 by Adam Gundry at 2015-12-14T15:20:48+00:00 Roughly fix up haddock for DuplicateRecordFields changes This compiles, but will probably need more work to produce good documentation when the DuplicateRecordFields extension is used. - - - - - 79dda70f by Simon Peyton Jones at 2015-12-14T15:26:02+00:00 Track wip/spj-wildcard-refactor on main repo - - - - - 959930fb by Simon Peyton Jones at 2015-12-14T15:37:50+00:00 Follow changes to HsTYpe Not yet complete (but on a wip/ branch) - - - - - e18a8df5 by Simon Peyton Jones at 2015-12-14T15:37:52+00:00 Work on updating Haddock to wip/spj-wildard-recactor Still incomplete - - - - - aa35ab52 by Simon Peyton Jones at 2015-12-14T15:40:18+00:00 More adaption to wildcard-refactor - - - - - 8ceef94b by Simon Peyton Jones at 2015-12-14T15:46:04+00:00 Track change to PatSyn.patSynSig - - - - - cd81e83d by Ben Gamari at 2015-12-14T15:46:06+00:00 Account for Typeable changes The treatment of type families changed. - - - - - 63c9117c by Herbert Valerio Riedel at 2015-12-14T15:46:34+00:00 Relax upper bound on `base` to allow base-4.9 - - - - - a484c613 by Alan Zimmerman at 2015-12-14T15:47:46+00:00 Matching change GHC haskell/haddock#11017 BooleanFormula located - - - - - 2c26fa51 by Matthew Pickering at 2015-12-14T15:47:47+00:00 Change for IEThingWith - - - - - 593baa0f by Ben Gamari at 2015-12-14T15:49:21+00:00 Eliminate support for deprecated GADT syntax Follows from GHC D1460. - - - - - b6b5ca78 by Edward Z. Yang at 2015-12-14T15:49:54+00:00 Undo msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - b5b0e072 by Alan Zimmerman at 2015-12-14T15:54:20+00:00 Update to match GHC wip/T11019 - - - - - 14ddeb68 by Simon Peyton Jones at 2015-12-14T15:54:22+00:00 Wibble - - - - - 10a90ad8 by Herbert Valerio Riedel at 2015-12-14T15:54:22+00:00 Canonicalise Monad instances - - - - - ed68ac50 by Alan Zimmerman at 2015-12-14T15:55:48+00:00 Matching changes for haskell/haddock#11028 - - - - - 3f7e5a2d by Alan Zimmerman at 2015-12-14T15:55:49+00:00 Placeholder for record style GADT declaration A GADT Declaration is now presented as CmmCondBranch :: {..} -> CmmNode O C cml_pred :: CmmExpr cml_true, cml_false :: !Label cml_likely :: Maybe Bool for CmmCondBranch :: { -- conditional branch cml_pred :: CmmExpr, cml_true, cml_false :: ULabel, cml_likely :: Maybe Bool -- likely result of the conditional, -- if known } -> CmmNode O C - - - - - 6543a73f by Richard Eisenberg at 2015-12-14T15:59:55+00:00 Update for type=kinds - - - - - 193a5c48 by Matthew Pickering at 2015-12-14T18:17:00+00:00 Changes to compile with 8.0 - - - - - add669ec by Matthew Pickering at 2015-12-14T18:47:12+00:00 Warnings - - - - - 223f3fb4 by Ben Gamari at 2015-12-15T23:45:05+01:00 Update for D1200 - - - - - d058388f by Ben Gamari at 2015-12-16T05:40:17-05:00 Types: Add Outputable[Bndr] DocName instances - - - - - 62ecd7fb by Ben Gamari at 2015-12-16T09:23:09-05:00 Fix fallout from wildcards refactoring The wildcard refactoring was introduced a new type of signature, `ClassOpSig`, which is carried by typeclasses. The original patch adapting Haddock for this change missed a few places where this constructor needed to be handled, resulting in no class methods in documentation produced by Haddock. Additionally, this moves and renames the `isVanillaLSig` helper from GHC's HsBinds module into GhcUtils, since it is only used by Haddock. - - - - - ddbc187a by Ben Gamari at 2015-12-16T17:54:55+01:00 Update for D1200 - - - - - cec83b52 by Ben Gamari at 2015-12-16T17:54:55+01:00 Types: Add Outputable[Bndr] DocName instances - - - - - d12ecc98 by Ben Gamari at 2015-12-16T17:54:55+01:00 Fix fallout from wildcards refactoring The wildcard refactoring was introduced a new type of signature, `ClassOpSig`, which is carried by typeclasses. The original patch adapting Haddock for this change missed a few places where this constructor needed to be handled, resulting in no class methods in documentation produced by Haddock. Additionally, this moves and renames the `isVanillaLSig` helper from GHC's HsBinds module into GhcUtils, since it is only used by Haddock. - - - - - ada1616f by Ben Gamari at 2015-12-16T17:54:58+01:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - a4f0383d by Ben Gamari at 2015-12-16T23:32:38+01:00 Fix Hyperlinker GHC.con_names is now GHC.getConNames - - - - - a10e6849 by Ben Gamari at 2015-12-20T00:54:11+01:00 Merge remote-tracking branch 'mrhania/testing-framework-improvements' into ghc-head - - - - - f078b4fd by Ben Gamari at 2015-12-20T00:59:51+01:00 test: Compatibility with Cabal 1.23 - - - - - 88a511a9 by Ben Gamari at 2015-12-20T01:14:35+01:00 Merge remote-tracking branch 'phadej/orphans' into ghc-head - - - - - 4e250f36 by Ben Gamari at 2015-12-20T01:14:52+01:00 Add html-test for orphan instances output - - - - - 87fffbad by Alan Zimmerman at 2015-12-20T09:50:42+02:00 Update for GHC trac#11258 Adding locations to RdrName in FieldOcc and AmbiguousFieldOcc - - - - - 6b7e51c9 by idontgetoutmuch at 2015-12-20T21:01:47+00:00 Merge pull request haskell/haddock#1 from haskell/ghc-head Ghc head - - - - - 229c1fb5 by Dominic Steinitz at 2015-12-21T07:19:16+00:00 Handle inline math with mathjax. - - - - - 57902d66 by Dominic Steinitz at 2015-12-21T08:07:11+00:00 Fix the documentation for haddock itself. Change notation and add support for inline math. Allow newlines in display math. Add a command line option for the mathjax url (you might want to use a locally installed version). Rebase tests because of extra url and version change. Respond to (some of the) comments. Fix warnings in InterfaceFile.hs - - - - - 0e69f236 by Herbert Valerio Riedel at 2015-12-21T18:30:43+01:00 Fix-up left-over assumptions of GHC 7.12 into GHC 8.0 - - - - - c67f8444 by Simon Peyton Jones at 2015-12-22T16:26:56+00:00 Follow removal of NamedWildCard from HsType - - - - - da40327a by Ben Gamari at 2015-12-23T14:15:28+01:00 html-test/Operators: Clear up ambiguous types For reasons that aren't entirely clear a class with ambiguous types was accepted by GHC <8.0. I've added a functional dependency to clear up this ambiguity. - - - - - 541b7fa4 by Ben Gamari at 2015-12-23T14:18:51+01:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-head - - - - - 0febc947 by Ben Gamari at 2015-12-24T00:30:20+01:00 hoogle-test/AssocTypes: Allow AmbiguousTypes GHC 8.0 complains otherwise - - - - - 25810841 by Ben Gamari at 2015-12-24T00:33:18+01:00 OrphanInstances: Accept test output - - - - - 841987f3 by Ben Gamari at 2015-12-25T11:03:11+01:00 Merge remote-tracking branch 'idontgetoutmuch/ghc-head' into ghc-head - - - - - 358391f0 by Ben Gamari at 2015-12-26T10:44:50+01:00 Add missing import - - - - - a8896885 by Ben Gamari at 2015-12-26T10:45:27+01:00 travis: Use Travis containers - - - - - 85e82134 by Herbert Valerio Riedel at 2015-12-30T17:25:39+01:00 tweak version bounds for GHC-8.1 - - - - - 672a5f75 by randen at 2016-01-01T23:45:25-08:00 The Haddock part for fully gcc-like response files " driver/Main.hs * Moved the response file handling into ResponseFile.hs, updating import section as appropriate. * driver/ResponseFile.hs * New file. In anticipation that maybe some day this could be provided by another library, and to make it possible to unit test, this functionality is pulled out of the Main.hs module, and expanded to support the style/format of response files which gcc uses. * The specification for the format of response files which gcc generates and consumes, seems to be best derived from the gcc code itself (libiberty/argv.c), so that is what has been done here. * This is intended to fix haskell/haddock#379 * driver-test/Main.hs * New file for testing code in the driver source tree * driver-test/ResponseFileSpec.hs * Tests, adapted/adopted from the same gcc code where the escaping/unescaping is from, in the hspec style of unit tests * haddock.cabal * Add the driver-test test-suite. Introduces a new library dependency (upon hspec) for the haddock driver target in the haddock.cabal file, but practically, this should not be a problem as the haddock-api tests already depend on hspec. - - - - - 498781df by Ben Gamari at 2016-01-06T13:41:04+01:00 Version bumps and changelog - - - - - 8451e46a by Ben Gamari at 2016-01-06T13:47:17+01:00 Merge remote-tracking branch 'randen/bug468' - - - - - fb2d9181 by Ben Gamari at 2016-01-06T08:14:42-05:00 Add ResponseFile to OtherModules - - - - - 2cb2d2e3 by Ben Gamari at 2016-01-06T14:35:00+01:00 Merge branch 'master' into ghc-head - - - - - 913477d4 by Eric Seidel at 2016-01-11T14:57:57-08:00 deal with un-wiring of IP class - - - - - c557a4b3 by Alan Zimmerman at 2016-01-15T11:14:35+02:00 Update to match wip/T11430 in GHC - - - - - 3e135093 by Alan Zimmerman at 2016-01-16T18:21:59+01:00 Update to match wip/T11430 in GHC - - - - - c48ef2f9 by Ben Gamari at 2016-01-18T09:50:06+01:00 Merge remote-tracking branch 'gridaphobe/ghc-head' into ghc-head - - - - - 9138a1b0 by Eric Seidel at 2016-01-18T12:50:15+01:00 deal with un-wiring of IP class (cherry picked from commit 17388b0f0029d969d79353be7737eb01c7b8dc5f) - - - - - b48c172e by Joachim Breitner at 2016-01-19T00:11:38+01:00 Make sure --mathjax affects all written HTML files This fixes haskell/haddock#475. - - - - - af61fe63 by Ryan Scott at 2016-02-07T23:25:57+01:00 Render */# instead of TYPE 'Lifted/TYPE 'Unlifted (fixes haskell/haddock#473) - - - - - b6458693 by Ben Gamari at 2016-02-07T23:29:27+01:00 Merge pull request haskell/haddock#477 from haskell/issue-475 Make sure --mathjax affects all written HTML files - - - - - adcc0071 by Ben Gamari at 2016-02-07T23:34:52+01:00 Merge branch 'master' into ghc-head - - - - - d0404e61 by Ben Gamari at 2016-02-08T12:46:49+01:00 doc: Switch to Sphinx - - - - - acb153b3 by Ben Gamari at 2016-02-08T12:46:56+01:00 Document --use-unicode flag - - - - - c20bdf1d by Ben Gamari at 2016-02-08T13:41:24+01:00 Fix GHC and haddock-library dependency bounds - - - - - 8d946801 by Ben Gamari at 2016-02-08T14:54:56+01:00 testsuite: Rework handling of output sanitization Previously un-cleaned artifacts were kept as reference output, making it difficult to tell what has changed and causing spurious changes in the version control history. Here we rework this, cleaning the output during acceptance. To accomplish this it was necessary to move to strict I/O to ensure the reference handle was closed before accept attempts to open the reference file. - - - - - c465705d by Ben Gamari at 2016-02-08T15:36:05+01:00 test: Compare on dump For reasons I don't understand the Xml representations differ despite their textual representations being identical. - - - - - 1ec0227a by Ben Gamari at 2016-02-08T15:36:05+01:00 html-test: Accept test output - - - - - eefbd63a by Ben Gamari at 2016-02-08T15:36:08+01:00 hypsrc-test: Accept test output And fix impredicative Polymorphism testcase. - - - - - d1df4372 by Ben Gamari at 2016-02-08T15:40:44+01:00 Merge branch 'fix-up-testsuite' - - - - - 206a3859 by Phil Ruffwind at 2016-02-08T17:51:21+01:00 Move the permalinks to "#" on the right side Since pull request haskell/haddock#407, the identifiers have been permalinked to themselves, but this makes it difficult to copy the identifier by double-clicking. To work around this usability problem, the permalinks are now placed on the far right adjacent to "Source", indicated by "#". Also, 'namedAnchor' now uses 'id' instead of 'name' (which is obsolete). - - - - - 6c89fa03 by Phil Ruffwind at 2016-02-08T17:54:44+01:00 Update tests for previous commit - - - - - effaa832 by Ben Gamari at 2016-02-08T17:56:17+01:00 Merge branch 'anchors-redux' - - - - - 9a2bec90 by Ben Gamari at 2016-02-08T17:58:40+01:00 Use -fprint-unicode-syntax when --use-unicode is enabled This allows GHC to render `*` as its Unicode representation, among other things. - - - - - 28ecac5b by Ben Gamari at 2016-02-11T18:53:03+01:00 Merge pull request haskell/haddock#480 from bgamari/sphinx Move documentation to ReStructuredText - - - - - 222e5920 by Ryan Scott at 2016-02-11T15:42:42-05:00 Collapse type/data family instances by default - - - - - a80ac03b by Ryan Scott at 2016-02-11T20:17:09-05:00 Ensure expanded family instances render correctly - - - - - 7f985231 by Ben Gamari at 2016-02-12T10:04:22+01:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - d4eda086 by Ben Gamari at 2016-02-18T00:05:56+01:00 Xhtml.Decl: Various cleanups - - - - - 79bee48d by Ben Gamari at 2016-02-18T00:05:56+01:00 Xhtml.Decl: Show kind signatures for type family variables Addresses GHC haskell/haddock#11588. - - - - - b2981d98 by Ben Gamari at 2016-02-18T00:05:56+01:00 Xhtml.Decl: Show 'where ...' after closed type family Seems like we should ideally show the actual equations as well but that seems like it would be a fair amount of work - - - - - cfc0e621 by Ben Gamari at 2016-02-18T22:48:12+01:00 Merge pull request haskell/haddock#483 from bgamari/T11588 Fix GHC haskell/haddock#11588 This fixes GHC haskell/haddock#11588: * Show where ... after closed type families * Show kind signatures on type family type variables - - - - - 256e8a0d by Ben Gamari at 2016-02-18T23:15:39+01:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 32402036 by Richard Eisenberg at 2016-02-24T13:21:44-05:00 Follow-on changes to support RuntimeRep - - - - - 2b1c572d by Matthew Pickering at 2016-03-04T21:04:02+00:00 Remove unused functions - - - - - eb906f50 by Richard Eisenberg at 2016-03-13T21:17:20+01:00 Follow-on changes to support RuntimeRep (cherry picked from commit ab954263a793d8ced734459d6194a5d89214b66c) - - - - - 8c34ef34 by Richard Eisenberg at 2016-03-14T23:47:23-04:00 Changes due to fix for GHC#11648. - - - - - 0e022014 by Richard Eisenberg at 2016-03-15T14:06:45+01:00 Changes due to fix for GHC#11648. (cherry picked from commit bb994de1ab0c76d1aaf1e39c54158db2526d31f1) - - - - - ed3f78ab by Rik Steenkamp at 2016-04-02T22:20:36+01:00 Fix printing of pattern synonym types Removes the call to `patSynType :: PatSyn -> Type` in `Convert.hs` as this function will be removed from GHC. Instead, we use the function `patSynSig` and build the `HsDecl` manually. This also fixes the printing of the two contexts and the quantified type variables in a pattern synonym type. Reviewers: goldfire, bgamari, mpickering Differential Revision: https://phabricator.haskell.org/D2048 - - - - - d3210042 by Rik Steenkamp at 2016-04-04T15:43:32+02:00 Fix printing of pattern synonym types Removes the call to `patSynType :: PatSyn -> Type` in `Convert.hs` as this function will be removed from GHC. Instead, we use the function `patSynSig` and build the `HsDecl` manually. This also fixes the printing of the two contexts and the quantified type variables in a pattern synonym type. Reviewers: goldfire, bgamari, mpickering Differential Revision: https://phabricator.haskell.org/D2048 (cherry picked from commit 3ddcbd6b8e6884bd95028381176eb33bee6896fb) - - - - - 236eec90 by Ben Gamari at 2016-04-10T23:40:15+02:00 doc: Fix option references (cherry picked from commit f915fb3c74328fb994235bbbd42092a691539197) - - - - - 692ee7e0 by Ben Gamari at 2016-04-10T23:40:15+02:00 doc: Only install if BUILD_SPHINX_HTML==YES Fixes GHC haskell/haddock#11818. - - - - - 79619f57 by Ben Gamari at 2016-04-10T23:46:22+02:00 doc: Only install if BUILD_SPHINX_HTML==YES Fixes GHC haskell/haddock#11818. (cherry picked from commit c6d6a18d85e5e2d9bb5904e6919e8a8d7e31c4c5) - - - - - 3358ccb4 by Ben Gamari at 2016-04-10T23:47:27+02:00 doc: Fix option references (cherry picked from commit f915fb3c74328fb994235bbbd42092a691539197) - - - - - 264949b1 by Ben Gamari at 2016-04-16T17:50:23+02:00 Merge pull request haskell/haddock#482 from RyanGlScott/ghc-head Collapse type/data family instances by default - - - - - 478c483a by Ben Gamari at 2016-04-16T17:51:09+02:00 Merge pull request haskell/haddock#489 from mpickering/unused-functions Remove some unused functions - - - - - c94e55f0 by Ryan Scott at 2016-04-16T17:57:54+02:00 Collapse type/data family instances by default (cherry picked from commit 2da130a8db8f995c119b544fad807533236cf088) - - - - - 31e633d3 by Ryan Scott at 2016-04-16T17:58:06+02:00 Ensure expanded family instances render correctly (cherry picked from commit 1338b5d7c32939de6bbc31af0049477e4f847103) - - - - - 03e4d197 by Matthew Pickering at 2016-04-16T17:58:21+02:00 Remove unused functions (cherry picked from commit b89d1c2456bdb2d4208d94ded56155f7088a37d0) - - - - - ed4116f6 by Ben Gamari at 2016-04-20T10:46:57+02:00 ghc: Install files for needed --hyperlinked-source - - - - - 0be999c4 by Ben Gamari at 2016-04-20T11:37:54+02:00 ghc: Install files for needed --hyperlinked-source (cherry picked from commit 5c82c9fc2d21ddaae4a2470f1c375426968f19c6) - - - - - 4d17544c by Simon Peyton Jones at 2016-04-20T12:42:28+01:00 Track change to HsGroup This relates to a big GHC patch for Trac haskell/haddock#11348 - - - - - 1700a50d by Ben Gamari at 2016-05-01T13:19:27+02:00 doc: At long last fix ghc.mk The variable reference was incorrectly escaped, meaning that Sphinx documentation was never installed. - - - - - 0b7c8125 by Ben Gamari at 2016-05-01T13:21:43+02:00 doc: At long last fix ghc.mk The variable reference was incorrectly escaped, meaning that Sphinx documentation was never installed. (cherry picked from commit 609018dd09c4ffe27f9248b2d8b50f6196cd42b9) - - - - - af115ce0 by Ryan Scott at 2016-05-04T22:15:50-04:00 Render Haddocks for derived instances Currently, one can document top-level instance declarations, but derived instances (both those in `deriving` clauses and standalone `deriving` instances) do not enjoy the same privilege. This makes the necessary changes to the Haddock API to enable rendering Haddock comments for derived instances. This is part of a fix for Trac haskell/haddock#11768. - - - - - 76fa1edc by Ben Gamari at 2016-05-10T18:13:25+02:00 haddock-test: A bit of refactoring for debuggability - - - - - 7d4c4b20 by Ben Gamari at 2016-05-10T18:13:25+02:00 Create: Mark a comment as TODO - - - - - 2a6d0c90 by Ben Gamari at 2016-05-10T18:13:25+02:00 html-test: Update reference output - - - - - bd60913d by Ben Gamari at 2016-05-10T18:13:25+02:00 hypsrc-test: Fix reference file path in cabal file It appears the haddock insists on prefixing --hyperlinked-sourcer output with directory which the source appeared in. - - - - - c1548057 by Ben Gamari at 2016-05-10T18:22:12+02:00 doc: Update extra-source-files in Cabal file - - - - - 41d5bae3 by Ben Gamari at 2016-05-10T18:29:21+02:00 Bump versions - - - - - ca75b779 by Ben Gamari at 2016-05-11T16:03:44+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 4e3cfd62 by Ben Gamari at 2016-05-11T16:06:45+02:00 Merge remote-tracking branch 'RyanGlScott/ghc-head' into ghc-head - - - - - a2379970 by Ben Gamari at 2016-05-11T23:15:11+02:00 doc: Add clean targets - - - - - f275212e by Ben Gamari at 2016-05-11T23:15:14+02:00 doc: Add html as an all-target for ghc Otherwise the html documentation won't be installed for binary-dist. - - - - - 388fc0af by Ben Gamari at 2016-05-12T09:49:12+02:00 Update CHANGES - - - - - bad81ad5 by Ben Gamari at 2016-05-12T09:49:38+02:00 Version bump - - - - - c01688a7 by Ben Gamari at 2016-05-12T10:04:58+02:00 Revert "Version bump" This bump was a bit premature. This reverts commit 7b238d9c5be9b07aa2d10df323b5c7b8d1634dc8. - - - - - 7ed05724 by Ben Gamari at 2016-05-12T10:05:33+02:00 doc: Fix GHC clean rule Apparently GHC's build system doesn't permit wildcards in clean paths. - - - - - 5d9611f4 by Ben Gamari at 2016-05-12T17:43:50+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 653566b2 by Ben Gamari at 2016-05-14T09:57:31+02:00 Version bump to 2.17.2 - - - - - b355c439 by Ben Gamari at 2016-05-14T09:57:51+02:00 doc: Use `$(MAKE)` instead of `make` This is necessary to ensure we use gmake. - - - - - 8a18537d by Ben Gamari at 2016-05-14T10:15:45+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - b3290ef1 by Sebastian Meric de Bellefon at 2016-05-14T11:29:47-04:00 Fix haskell/haddock#303. Hide footer when printing The "Produced by Haddock" footer was overlapping the page's body when printing. This patch hides the footer with a css media rule. - - - - - b4a76f89 by Sebastian Meric de Bellefon at 2016-05-15T02:12:46-04:00 Fix haskell/haddock#280. Parsing of module header The initial newlines were counted as indentation spaces, thus disturbing the parsing of next lines - - - - - ba797c9e by Ben Gamari at 2016-05-16T14:53:46+02:00 doc: Vendorize alabaster Sphinx theme Alabaster is now the default sphinx theme and is a significant improvement over the previous default that it's worthproviding it when unavailable (e.g. Sphinx <1.3). - - - - - c9283e44 by Ben Gamari at 2016-05-16T14:55:17+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 1c9ea198 by Sebastian Méric de Bellefon at 2016-05-16T12:30:40-04:00 Merge pull request haskell/haddock#502 from Helkafen/master Fix haskell/haddock#303. Hide footer when printing - - - - - 33631016 by Ben Gamari at 2016-05-16T19:56:11+02:00 Revert "doc: Vendorize alabaster Sphinx theme" This ended up causes far too many issues to be worthwhile. We'll just have to live with inconsistent haddock documentation. This reverts commit cec21957001143794e71bcd9420283df18e7de40. - - - - - 93317d26 by Ben Gamari at 2016-05-16T19:56:11+02:00 cabal: Fix README path - - - - - c8695b22 by Ben Gamari at 2016-05-16T19:58:51+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 0b50eaaa by Ben Gamari at 2016-05-16T21:02:08+02:00 doc: Use whichever theme sphinx deems appropriate - - - - - 857c1c9c by Ben Gamari at 2016-05-16T21:07:08+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 15fc5637 by Ben Gamari at 2016-05-22T12:43:59+02:00 Create: Remove redundant imports - - - - - 132ddc6a by Ben Gamari at 2016-05-22T12:43:59+02:00 Create: Better debug output For tracking down haskell/haddock#505 - - - - - 2252a149 by Ben Gamari at 2016-05-22T12:43:59+02:00 Don't consider default class ops when looking for decls When we are looking for an operation within a class we don't care about `default`-type declarations. This was the cause of haskell/haddock#505. - - - - - 4886b2ec by Oleg Grenrus at 2016-05-24T16:19:48+03:00 UnfelpfulSpan line number omitted Kind of resolves https://github.com/haskell/haddock/issues/508 - - - - - a4befd36 by Oleg Grenrus at 2016-05-24T16:53:35+03:00 Change Hyperlinked lexer to know about DataKinds ticks - - - - - f45cb52e by David Feuer at 2016-05-24T18:48:53-04:00 Make parser state a newtype Previously, it was `data` wrapping a `Maybe`, which seems a bit silly. Obviously, this can be changed back if anyone wants to add more fields some day. - - - - - 05013dd7 by Sebastian Meric de Bellefon at 2016-05-24T22:03:55-04:00 remove framed view of the HTML documentation (see haskell/haddock#114 and haskell/haddock#274) Frames are a bit broken, ignored by Hackage, and considered obsolete in general. This patch disables frames generation. The mini_*.html files are still used in the synopsis. - - - - - b8163a88 by Ben Gamari at 2016-05-25T14:44:15+02:00 Merge pull request haskell/haddock#507 from bgamari/T505 Fix haskell/haddock#505 - - - - - ea1b30c6 by Sebastian Meric de Bellefon at 2016-05-25T14:17:00-04:00 Update CHANGES - - - - - eddfc258 by Sebastian Méric de Bellefon at 2016-05-25T15:17:40-04:00 Merge pull request haskell/haddock#514 from Helkafen/frames remove framed view of the HTML documentation (see haskell/haddock#114 and haskell/haddock#274) - - - - - 0e506818 by Alex Biehl at 2016-05-26T12:43:09+02:00 Remove misplaced haddock comment - - - - - a07d28c0 by Ben Gamari at 2016-05-27T11:34:59+02:00 Merge pull request haskell/haddock#515 from alexbiehl/master Remove misplaced haddock comment - - - - - 9001d267 by Ben Gamari at 2016-05-27T11:35:46+02:00 Merge pull request haskell/haddock#513 from treeowl/newtype-since Make parser state a newtype - - - - - 74e1a018 by Sebastian Méric de Bellefon at 2016-05-28T17:28:15-04:00 Merge pull request haskell/haddock#504 from Helkafen/issue-280 Fix haskell/haddock#280. Parsing of module header - - - - - 37557f4f by Alan Zimmerman at 2016-05-29T23:36:50+02:00 Matching changes for haskell/haddock#12105 - - - - - 7d09e5d6 by Sebastian Meric de Bellefon at 2016-06-03T18:07:48-04:00 Version bumps (2.17.3, 1.4.2) - - - - - 85b4bc15 by Sebastian Méric de Bellefon at 2016-06-06T18:35:13-04:00 Merge pull request haskell/haddock#521 from Helkafen/master Version bumps (2.17.3, 1.4.2) - - - - - e95f0dee by Sebastian Meric de Bellefon at 2016-06-06T19:11:35-04:00 publish haddock-test library - - - - - 4de40586 by Sebastian Méric de Bellefon at 2016-06-06T20:26:30-04:00 Merge pull request haskell/haddock#512 from phadej/oleg-fixes Fixes for haskell/haddock#508 and haskell/haddock#510 - - - - - ddfd0789 by Dominic Steinitz at 2016-06-09T09:27:28+01:00 Documentation for LaTeX markup. - - - - - 697a503a by Dominic Steinitz at 2016-06-09T09:33:59+01:00 Fix spelling mistake. - - - - - 246f6fff by Dominic Steinitz at 2016-06-09T09:37:15+01:00 Camel case MathJax. - - - - - 4684bd23 by Dominic Steinitz at 2016-06-09T09:44:53+01:00 Fix math typo and add link. - - - - - f20c037c by Simon Peyton Jones at 2016-06-13T18:26:03+01:00 Follow changes to LHsSigWcType - - - - - 0c58996d by Simon Peyton Jones at 2016-06-15T12:56:01+01:00 Follow GHC re-adding FunTy - - - - - 401b5ca7 by Sebastian Méric de Bellefon at 2016-06-15T12:16:47-04:00 Merge pull request haskell/haddock#525 from idontgetoutmuch/master Documentation for LaTeX markup. - - - - - 92d263b7 by Sebastian Méric de Bellefon at 2016-06-15T12:17:29-04:00 Merge pull request haskell/haddock#522 from Helkafen/master publish haddock-test library - - - - - 0953a2ca by Sebastian Meric de Bellefon at 2016-06-16T00:46:46-04:00 Copyright holders shown on several lines. Fix haskell/haddock#279 - - - - - 65453e14 by Ben Gamari at 2016-06-16T11:16:32+02:00 ocean: Ensure that synopsis fully covers other content Previously MathJax content was being rendered on top of the synopsis due to ambiguous z-ordering. Here we explicitly give the synopsis block a higher z-index to ensure it is rendered on top. Fixes haskell/haddock#531. - - - - - 68e411a1 by Sebastian Méric de Bellefon at 2016-06-16T23:34:39-04:00 Merge pull request haskell/haddock#534 from bgamari/T531 ocean: Ensure that synopsis fully covers other content - - - - - fad6491b by Sebastian Méric de Bellefon at 2016-06-18T23:57:20-04:00 Merge pull request haskell/haddock#533 from Helkafen/master Copyright holders shown on several lines. Fix haskell/haddock#279 - - - - - 6108e21b by Sebastian Meric de Bellefon at 2016-06-22T23:08:28-04:00 do not create empty src directory Fix haskell/haddock#536. - - - - - 1ef23823 by Sebastian Méric de Bellefon at 2016-06-24T00:04:48-04:00 Merge pull request haskell/haddock#537 from Helkafen/master do not create empty src directory - - - - - 966baa96 by Omari Norman at 2016-06-29T21:59:34-04:00 Add $ as a special character If this character is not escaped, documentation built with Haddock 2.17.2 will fail. This was not an issue with 2.16 series, which causes builds to fail and there is nothing in the docs or error message giving a clue about why builds that used to succeed now don't. - - - - - 324adb60 by Ben Gamari at 2016-07-01T12:18:51+02:00 GhcUtils: Changes for multi-pattern signatures - - - - - d7571675 by Ömer Sinan Ağacan at 2016-07-21T13:30:47+02:00 Add support for unboxed sums - - - - - 29d0907b by Simon Marlow at 2016-07-22T13:55:48+01:00 Disable NFData instances for GHC types when GHC >= 8.2 - - - - - 702d95f3 by Simon Marlow at 2016-08-02T15:57:30+02:00 Disable NFData instances for GHC types when GHC >= 8.0.2 (cherry picked from commit a3309e797c42dae9bccdeb17ce52fcababbaff8a) - - - - - f4fa79c3 by Ben Gamari at 2016-08-07T13:51:18+02:00 ghc.mk: Don't attempt to install html/frames.html The frames business has been removed. - - - - - 9cd63daf by Ben Gamari at 2016-08-07T13:51:40+02:00 Haddock.Types: More precise version guard This allows haddock to be built with GHC 8.0.2 pre-releases. - - - - - f3d7e03f by Mateusz Kowalczyk at 2016-08-29T20:47:45+01:00 Merge pull request haskell/haddock#538 from massysett/master Add $ as a special character - - - - - 16dbf7fd by Bartosz Nitka at 2016-09-20T19:44:04+01:00 Fix rendering of class methods for Eq and Ord See haskell/haddock#549 and GHC issue haskell/haddock#12519 - - - - - 7c31c1ff by Bartosz Nitka at 2016-09-27T17:32:22-04:00 Fix rendering of class methods for Eq and Ord See haskell/haddock#549 and GHC issue haskell/haddock#12519 (cherry picked from commit 073d899a8f94ddec698f617a38d3420160a7fd0b) - - - - - 33a90dce by Ryan Scott at 2016-09-30T20:53:41-04:00 Haddock changes for T10598 See https://ghc.haskell.org/trac/ghc/ticket/10598 - - - - - 1f32f7cb by Ben Gamari at 2016-10-13T20:01:26-04:00 Update for refactoring of NameCache - - - - - 1678ff2e by Ben Gamari at 2016-11-15T17:42:48-05:00 Bump upper bound on base - - - - - 9262a7c5 by Alan Zimmerman at 2016-12-07T21:14:28+02:00 Match changes in GHC wip/T3384 branch - - - - - ac0eaf1a by Ben Gamari at 2016-12-09T09:48:41-05:00 haddock-api: Don't use stdcall calling convention on 64-bit Windows See GHC haskell/haddock#12890. - - - - - 04afe4f7 by Alan Zimmerman at 2016-12-12T20:07:21+02:00 Matching changes for GHC wip/T12942 - - - - - e1d1701d by Ben Gamari at 2016-12-13T16:50:41-05:00 Bump base upper bound - - - - - 3d3eacd1 by Alan Zimmerman at 2017-01-10T16:59:38+02:00 HsIParamTy now has a Located name - - - - - 7dbceefd by Kyrill Briantsev at 2017-01-12T13:23:50+03:00 Prevent GHC API from doing optimization passes. - - - - - d48d1e33 by Richard Eisenberg at 2017-01-19T08:41:41-05:00 Upstream changes re levity polymorphism - - - - - 40c25ed6 by Alan Zimmerman at 2017-01-26T15:16:18+02:00 Changes to match haskell/haddock#13163 in GHC - - - - - 504f586d by Ben Gamari at 2017-02-02T17:19:37-05:00 Kill remaining static flags - - - - - 49147ea0 by Justus Adam at 2017-03-02T15:33:34+01:00 Adding MDoc to exports of Documentation.Haddock - - - - - 1cfba9b4 by Justus Adam at 2017-03-09T11:41:44+01:00 Also exposing toInstalledIface - - - - - 53f0c0dd by Ben Gamari at 2017-03-09T13:10:08-05:00 Bump for GHC 8.3 - - - - - c7902d2e by Ben Gamari at 2017-03-09T23:46:02-05:00 Bump for GHC 8.2 - - - - - 4f3a74f8 by Ben Gamari at 2017-03-10T10:21:55-05:00 Merge branch 'ghc-head' - - - - - e273b72f by Richard Eisenberg at 2017-03-14T13:34:04-04:00 Update Haddock w.r.t. new HsImplicitBndrs - - - - - 6ec3d436 by Richard Eisenberg at 2017-03-14T15:15:52-04:00 Update Haddock w.r.t. new HsImplicitBndrs - - - - - eee3cda1 by Ben Gamari at 2017-03-15T15:19:59-04:00 Adapt to EnumSet - - - - - 017cf58e by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Correctly handle Backpack identity/semantic modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 736d6773 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Add a field marking if interface is a signature or not. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 475f84a0 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Render signature module tree separately from modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 13240b53 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Documentation. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - cd16d529 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 More docs. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 3bea97ae by Edward Z. Yang at 2017-03-15T22:50:46-07:00 TODO on moduleExports. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - b2b051ce by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Better Backpack support with signature merging. When we merge signatures, we gain exports that don't necessarily have a source-level declaration corresponding to them. This meant Haddock dropped them. There are two big limitations: * If there's no export list, we won't report inherited signatures. * If the type has a subordinate, the current hiDecl implementation doesn't reconstitute them. These are probably worth fixing eventually, but this gets us to minimum viable functionality. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 0f082795 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Fix haddock-test to work with latest version of Cabal. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 20ef63c9 by Edward Z. Yang at 2017-03-22T13:48:12-07:00 Annotate signature docs with (signature) Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 45692dcb by Edward Z. Yang at 2017-03-22T14:11:25-07:00 Render help documentation link next to (signature) in title. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 4eae8caf by Ben Gamari at 2017-03-23T09:25:33-04:00 Merge commit '240bc38b94ed2d0af27333b23392d03eeb615e82' into HEAD - - - - - 0bbe03f5 by Ben Gamari at 2017-03-23T09:27:28-04:00 haddock-api: Bump bound on GHC - - - - - 65f3ac9d by Alex Biehl at 2017-03-23T17:36:11+01:00 Merge pull request haskell/haddock#581 from JustusAdam/master Adding more exports to Documentation.Haddock - - - - - 37d49a47 by Alex Biehl at 2017-03-23T17:39:14+01:00 Merge pull request haskell/haddock#568 from awson/ghc-head Prevent GHC API from doing optimization passes. - - - - - 1ed047e4 by Brian Huffman at 2017-03-23T17:45:58+01:00 Print any user-supplied kind signatures on type parameters. This applies to type parameters on data, newtype, type, and class declarations, and also to forall-bound type vars in type signatures. - - - - - 1b78ca5c by Brian Huffman at 2017-03-23T17:45:58+01:00 Update test suite to expect kind annotations on type parameters. - - - - - a856b162 by Alex Biehl at 2017-03-23T17:49:32+01:00 Include travis build indication badge - - - - - 8e2e2c56 by Ben Gamari at 2017-03-23T17:20:08-04:00 haddock-api: Bump bound on GHC - - - - - 4d2d9995 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Correctly handle Backpack identity/semantic modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 26d6c150b31bc4580ab17cfd07b6e7f9afe10737) - - - - - a650e20f by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Add a field marking if interface is a signature or not. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 930cfbe58e2e87f5a4d431d89a3c204934e6e858) - - - - - caa282c2 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Render signature module tree separately from modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 2067a2d0afa9cef381d26fb7140b67c62f433fc0) - - - - - 49684884 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Documentation. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 0671abfe7e8ceae2269467a30b77ed9d9656e2cc) - - - - - 4dcfeb1a by Edward Z. Yang at 2017-03-23T17:20:08-04:00 More docs. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 3d77b373dd5807d5d956719dd7c849a11534fa6a) - - - - - 74dd19d2 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 TODO on moduleExports. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 94610e9b446324f4231fa6ad4c6ac51e4eba8c0e) - - - - - a9b19a23 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Better Backpack support with signature merging. When we merge signatures, we gain exports that don't necessarily have a source-level declaration corresponding to them. This meant Haddock dropped them. There are two big limitations: * If there's no export list, we won't report inherited signatures. * If the type has a subordinate, the current hiDecl implementation doesn't reconstitute them. These are probably worth fixing eventually, but this gets us to minimum viable functionality. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 6cc832dfb1de6088a4abcaae62b25a7e944d55c3) - - - - - d3631064 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Fix haddock-test to work with latest version of Cabal. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit bf3c4d72a0fda38561376eac7eda216158783267) - - - - - ef2148fc by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Annotate signature docs with (signature) Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 07b88c5d4e79b87a319fbb08f8ea01dbb41063c1) - - - - - 2f29518b by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Render help documentation link next to (signature) in title. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 4eb765ca4205c79539d60b7afa9b7e261a4a49fe) - - - - - 37de047d by Phil Ruffwind at 2017-04-03T11:57:14+02:00 Update MathJax URL MathJax is shutting down their CDN: https://www.mathjax.org/cdn-shutting-down/ They recommend migrating to cdnjs. - - - - - e9d24ba8 by David C. Turner at 2017-04-03T14:58:01+02:00 Add highlight for :target to ocean.css - - - - - 4819a202 by Alex Biehl at 2017-04-11T19:36:48+02:00 Allow base-4.10 for haddock-test - - - - - 44cec69c by Alex Biehl at 2017-04-11T19:39:22+02:00 cabal.project for haddock-api, haddock-library and haddock-test - - - - - 935d0f6a by Alex Biehl at 2017-04-11T19:46:29+02:00 Move dist scripts to scripts/ - - - - - 128e150c by Alex Biehl at 2017-04-11T20:34:46+02:00 Add haddock to cabal.project - - - - - cc8e08ea by Alex Biehl at 2017-04-11T20:35:08+02:00 Read files for hyperlinker eagerly This also exposes Documentation.Haddock.Utf8 - - - - - 152dda78 by Alex Biehl at 2017-04-11T20:37:06+02:00 Explicit import list ofr Control.DeepSeq in Haddock.Interface.Create - - - - - 501b33c4 by Kyrill Briantsev at 2017-04-11T21:01:42+02:00 Prevent GHC API from doing optimization passes. - - - - - c9f3f5ff by Alexander Biehl at 2017-04-12T16:36:53+02:00 Add @alexbiehl as maintaner - - - - - 76f214cc by Alex Biehl at 2017-04-13T07:27:18+02:00 Disable doctest with ghc-8.3 Currently doctest doesn't support ghc-head - - - - - 46b4f5fc by Edward Z. Yang at 2017-04-22T20:38:26-07:00 Render (signature) only if it actually is a signature! I forgot a conditional, oops! Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - f0555235 by Alex Biehl at 2017-04-25T10:08:48+02:00 Travis: Use ghc-8.2.1 on master - - - - - 966ea348 by Alex Biehl at 2017-04-25T10:32:01+02:00 Travis: Verbose cabal output cf. https://travis-ci.org/haskell/haddock/jobs/225512194#L377 - - - - - 36972bcd by Alex Biehl at 2017-04-25T10:40:43+02:00 Use travis_retry for cabal invocations - - - - - b3a09d2c by Alex Biehl at 2017-04-25T17:02:20+02:00 Use new MathJax URL in html-test 18ed871afb82560d5433b2f53e31b4db9353a74e switched to a new MathJax URL but didn't update the tests. - - - - - ae331e5f by Alexander Biehl at 2017-04-25T17:02:20+02:00 Expand signatures for class declarations - - - - - e573c65a by Alexander Biehl at 2017-04-25T17:02:20+02:00 Hoogle: Correctly print classes with associated data types - - - - - 3fc6be9b by Edward Z. Yang at 2017-04-25T17:02:20+02:00 Render (signature) only if it actually is a signature! I forgot a conditional, oops! Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit a0c4790e15a2d3fab8d830eee8fcd639fe6d39c9) - - - - - 6725c060 by Herbert Valerio Riedel at 2017-04-25T17:02:20+02:00 `html-test --accept` deltas to reference samples - - - - - 7d444d61 by Alex Biehl at 2017-04-26T07:13:50+02:00 Remove anything related to obsolete frames mode - - - - - b888972c by Alex Biehl at 2017-04-26T07:49:10+02:00 Cherry-picked remaining commits from haddock-2.17.4-release (#603) * Release haddock/haddock-api 2.17.4 and haddock-library 1.4.3 * Set version bounds for haddock-library NB: This allows GHC 8.2.1's base * Set version bounds for haddock & haddock-api The version bounds support GHC 8.2 * Merge (temporary) v2.17.3 branch into v2.17 This allows us to delete the v2.17.3 branch * Fixup changelog * Pin down haddock-api to a single version as otherwise `haddock`'s package version has no proper meaning * fix source-repo spec for haddock-api - - - - - 4161099b by Alex Biehl at 2017-04-26T11:11:20+02:00 Update changelog to reflect news in HEAD - - - - - eed72cb8 by Alex Biehl at 2017-04-26T11:11:20+02:00 Markdownify changelog - - - - - 5815cea1 by Alex Biehl at 2017-04-26T11:32:33+02:00 Bump to 2.18.0 (#605) - - - - - a551d558 by Alex Biehl at 2017-04-29T22:00:25+02:00 Update attoparsec-0.12.1.1 to attoparsec-0.13.1.0 - - - - - ea164a8d by Sergey Vinokurov at 2017-04-29T22:42:36+02:00 Improve error message - - - - - 2e10122f by Alex Biehl at 2017-04-30T10:07:46+02:00 Correctly remember collapsed sections (#608) Now the "collapsed" cookie stores which sections have changed state instead of which are collapsed. - - - - - f9b24d99 by Alex Biehl at 2017-05-01T17:40:36+02:00 Lazily decode docMap and argMap (#610) These are only used in case of a doc reexport so most of the time decoding these is wasted work. - - - - - 2372af62 by Alex Biehl at 2017-05-01T21:59:23+02:00 Fix Binary instance for InstalledInterface (#611) (#610) introduced lazy decoding for docs from InstalledInterface but forgot to remove the original calls to get and put_ - - - - - 6c633c13 by Nathan Collins at 2017-05-11T11:47:55+02:00 Improve documenation of Haddock markup (#614) * Improve documentation of Haddock markup. - document that Haddock supports inferring types top-level functions with without type signatures, but also explain why using this feature is discouraged. Looks like this feature has been around since version 2.0.0.0 in 2008! - rework the "Module description" section: - move the general discussion of field formatting to the section intro and add examples illustrating the prose for multiline fields. - mention that newlines are preserved in some multiline fields, but not in others (I also noticed that commas in the `Copyright` field are not preserved; I'll look into this bug later). - add a subsection for the module description fields documentation, and put the field keywords in code formatting (double back ticks) instead of double quotes, to be consistent with the typesetting of keywords in other parts of the documentation. - mention that "Named chunks" are not supported in the long-form "Module description" documentation. - fix formatting of keywords in the "Module attributes" section. Perhaps these errors were left over from an automatic translation to ReST from some other format as part of the transition to using Sphinx for Haddock documentation? Also, add a missing reference here; it just said "See ?"! - update footnote about special treatment for re-exporting partially imported modules not being implemented. In my tests it's not implemented at all -- I tried re-exporting both `import B hiding (f)` and `import B (a, b)` style partial imports, and in both cases got the same result as with full imports `import B`: I only get a module reference. * Rework the `Controlling the documentation structure` section. My main goal was to better explain how to use Haddock without an export list, since that's my most common use case, but I hope I improved the section overall: - remove the incomplete `Omitting the export list` section and fold it into the other sections. In particular, summarize the differences between using and not using an export list -- i.e. control over what and in what order is documented -- in the section lead. - add "realistic" examples that use the structure markup, both with and without an export list. I wanted a realistic example here to capture how it can be useful to explain the relationship between a group of functions in a section, in addition to documenting their individual APIs. - make it clear that you can associate documentation chunks with documentation sections when you aren't using an export list, and that doing it in the most obvious way -- i.e. with `-- |`, as you can in the export list -- doesn't work without an export list. It took me a while to figure this out the first time, since the docs didn't explain it at all before. - add a "no export list" example to the section header section. - add more cross references. * Add examples of gotchas for markup in `@...@`. I'm not sure this will help anyone, since I think most people first learn about `@...@` by reading other people's Haddocks, but I've documented the mistakes which I've made and then gotten confused by. * Use consistent Capitalization of Titles. Some titles were in usual title caps, and others only had the first word capitalized. I chose making them all use title caps because that seems to make the cross references look better. - - - - - d4734f45 by Ben Gamari at 2017-05-12T20:36:08+02:00 Haddock: Fix broken lazy IO in prologue reading (#615) We previously used withFile in conjunction with hGetContents. The list returned by the latter wasn't completely forced by the time we left the withFile block, meaning that we would try to read from a closed handle. - - - - - 93883f37 by Alex Biehl at 2017-05-12T21:02:33+02:00 Haddock: Fix broken lazy IO in prologue reading (#615) We previously used withFile in conjunction with hGetContents. The list returned by the latter wasn't completely forced by the time we left the withFile block, meaning that we would try to read from a closed handle. - - - - - 5b8f179c by Alex Biehl at 2017-05-13T12:48:10+02:00 Consequently use inClass and notInClass in haddock-library (#617) These allow attoparsec to do some clever lookup optimization - - - - - 77984b82 by Doug Wilson at 2017-05-27T17:37:38+02:00 Don't enable compilation for template haskell (#624) This is no longer necessary after ghc commit 53c78be0aab76a3107c4dacbb1d177afacdd37fa - - - - - 5a3de2b4 by Doug Wilson at 2017-05-27T19:54:53+02:00 Improve Syb code (#621) Specialize.hs and Ast.hs are modified to have their Syb code not recurse into Name or Id in HsSyn types. Specialize.hs is refactored to have fewer calls to Syb functions. Syb.hs has some foldl calls replaced with foldl' calls. There is still a lot of performance on the floor of Ast.hs. The RenamedSource is traversed many times, and lookupBySpan is very inefficient. everywhereBut and lookupBySpan dominate the runtime whenever --hyperlinked-source is passed. - - - - - 3d35a949 by Alex Biehl at 2017-05-30T19:01:37+02:00 Clear fixme comment (#625) - - - - - 2a44bd0c by Alex Biehl at 2017-05-30T19:02:12+02:00 Make haddock-library and haddock-api warning free (#626) - - - - - bd1a0e42 by Alex Biehl at 2017-06-01T10:40:33+02:00 Include `driver-test/*.hs` sdist (#630) This lead to haskell/haddock#629. - - - - - 184a3ab6 by Doug Wilson at 2017-06-03T12:02:08+02:00 Disable pattern match warnings (#628) This disables the pattern match checker which can be very expensive in some cases. The disabled warnings include: * Opt_WarnIncompletePatterns * Opt_WarnIncompleteUniPatterns * Opt_WarnIncompletePatternsRecUpd * Opt_WarnOverlappingPatterns - - - - - 0cf68004 by Alex Biehl at 2017-06-03T20:37:28+02:00 Allow user defined signatures for pattern synonyms (#631) - - - - - 7f51a58a by Alex Biehl at 2017-06-04T11:56:38+02:00 Use NameSet for isExported check (#632) - - - - - d8f044a9 by Alan Zimmerman at 2017-06-05T22:26:55+02:00 Match new AST as per GHC wip/new-tree-one-param See https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow - - - - - da1254e3 by Alan Zimmerman at 2017-06-05T22:26:55+02:00 Rename extension index tags - - - - - 538c7514 by Christiaan Baaij at 2017-06-09T08:26:43+02:00 Haddock support for bundled pattern synonyms (#627) * Haddock support for bundled pattern synonyms * Add fixities to bundled pattern synonyms * Add bundled pattern synonyms to the synopsis * Store bundled pattern fixities in expItemFixities * Add test for bundled pattern synonyms * Stop threading fixities * Include bundled pattern synonyms for re-exported data types Sadly, fixity information isn't found for re-exported data types * Support for pattern synonyms * Modify tests after haskell/haddock#631 * Test some reexport variations * Also lookup bundled pattern synonyms from `InstalledInterface`s * Check isExported for bundled pattern synonyms * Pattern synonym is exported check * Always look for pattern synonyms in the current module Another overlooked cornercase * Account for types named twice in export lists Also introduce a fast function for nubbing on a `Name` and use it throughout the code base. * correct fixities for reexported pattern synonyms * Fuse concatMap and map * Remove obsolete import * Add pattern synonyms to visible exports * Fix test * Remove corner case - - - - - a050bffd by Doug Wilson at 2017-06-21T09:27:33+02:00 Use new function getNameToInstancesIndex instead of tcRnGetInfo (#636) There is some performance improvement. GHC compiler: | version | bytes allocated | cpu_seconds --------------------------------- | before | 56057108648 | 41.0 | after | 51592019560 | 35.1 base: | version | bytes allocated | cpu_seconds --------------------------------- | before | 25174011784 | 14.6 | after | 23712637272 | 13.1 Cabal: | version | bytes allocated | cpu_seconds --------------------------------- | before | 18754966920 | 12.6 | after | 18198208864 | 11.6 - - - - - 5d06b871 by Doug Wilson at 2017-06-22T20:23:29+02:00 Use new function getNameToInstancesIndex instead of tcRnGetInfo (#639) * Use new function getNameToInstancesIndex instead of tcRnGetInfo There is some significant performance improvement in the ghc testsuite. haddock.base: -23.3% haddock.Cabal: -16.7% haddock.compiler: -19.8% * Remove unused imports - - - - - b11bb73a by Alex Biehl at 2017-06-23T14:44:41+02:00 Lookup fixities for reexports without subordinates (#642) So we agree that reexported declarations which do not have subordinates (for example top-level functions) shouldn't have gotten fixities reexported according to the current logic. I wondered why for example Prelude.($) which is obviously reexported from GHC.Base has fixities attached (c.f. http://hackage.haskell.org/package/base-4.9.1.0/docs/Prelude.html#v:-36-). The reason is this: In mkMaps we lookup all the subordinates of top-level declarations, of course top-level functions don't have subordinates so for them the resulting list is empty. In haskell/haddock#644 I established the invariant that there won't be any empty lists in the subordinate map. Without the patch from haskell/haddock#642 top-level functions now started to fail reexporting their fixities. - - - - - d2a6dad6 by Alex Biehl at 2017-06-23T18:30:45+02:00 Don't include names with empty subordinates in maps (#644) These are unecessary anyway and just blow up interface size - - - - - 69c2aac4 by Alex Biehl at 2017-06-29T19:54:49+02:00 Make per-argument docs for class methods work again (#648) * Make per-argument docs for class methods work again * Test case - - - - - c9448d54 by Bartosz Nitka at 2017-07-02T12:12:01+02:00 Fix haddock: internal error: links: UnhelpfulSpan (#561) * Fix haddock: internal error: links: UnhelpfulSpan This fixes haskell/haddock#554 for me. I believe this is another fall out of `wildcard-refactor`, like haskell/haddock#549. * Comment to clarify why we take the methods name location - - - - - d4f29eb7 by Alex Biehl at 2017-07-03T19:43:04+02:00 Document record fields when DuplicateRecordFields is enabled (#649) - - - - - 9d6e3423 by Yuji Yamamoto at 2017-07-03T22:37:58+02:00 Fix test failures on Windows (#564) * Ignore .stack-work * Fix for windows: use nul instead of /dev/null * Fix for windows: canonicalize line separator * Also normalize osx line endings - - - - - 7d81e8b3 by Yuji Yamamoto at 2017-07-04T16:13:12+02:00 Avoid errors on non UTF-8 Windows (#566) * Avoid errors on non UTF-8 Windows Problem ==== haddock exits with errors like below: `(1)` ``` haddock: internal error: <stderr>: hPutChar: invalid argument (invalid character) ``` `(2)` ``` haddock: internal error: Language\Haskell\HsColour\Anchors.hs: hGetContents: invalid argument (invalid byte sequence) ``` `(1)` is caused by printing [the "bullet" character](http://www.fileformat.info/info/unicode/char/2022/index.htm) onto stderr. For example, this warning contains it: ``` Language\Haskell\HsColour\ANSI.hs:62:10: warning: [-Wmissing-methods] • No explicit implementation for ‘toEnum’ • In the instance declaration for ‘Enum Highlight’ ``` `(2)` is caused when the input file of `readFile` contains some Unicode characters. In the case above, '⇒' is the cause. Environment ---- OS: Windows 10 haddock: 2.17.3 GHC: 8.0.1 Solution ==== Add `hSetEncoding handle utf8` to avoid the errors. Note ==== - I found the detailed causes by these changes for debugging: - https://github.com/haskell/haddock/commit/8f29edb6b02691c1cf4c479f6c6f3f922b35a55b - https://github.com/haskell/haddock/commit/1dd23bf2065a1e1f2c14d0f4abd847c906b4ecb4 - These errors happen even after executing `chcp 65001` on the console. According to the debug code, `hGetEncoding stderr` returns `CP932` regardless of the console encoding. * Avoid 'internal error: <stderr>: hPutChar: invalid argument (invalid character)' non UTF-8 Windows Better solution for 59411754a6db41d17820733c076e6a72bcdbd82b's (1) - - - - - eded67d2 by Alex Biehl at 2017-07-07T19:17:15+02:00 Remove redudant import warning (#651) - - - - - 05114757 by Alex Biehl at 2017-07-08T00:33:12+02:00 Avoid missing home module warning (#652) * Avoid missing home module warning * Update haddock-library.cabal - - - - - e9cfc902 by Bryn Edwards at 2017-07-17T07:51:20+02:00 Fix haskell/haddock#249 (#655) - - - - - eb02792b by Herbert Valerio Riedel at 2017-07-20T09:09:15+02:00 Fix compilation of lib:haddock-library w/ GHC < 8 - - - - - 9200bfbc by Alex Biehl at 2017-07-20T09:20:38+02:00 Prepare 2.18.1 release (#657) - - - - - 46ddd22c by Herbert Valerio Riedel at 2017-07-20T10:05:14+02:00 Tweak haddock-api.cabal for pending release - - - - - 85e33d29 by Herbert Valerio Riedel at 2017-07-20T10:05:14+02:00 Avoid trivial use of LambdaCase otherwise we can't test w/ e.g. GHC 7.4.2 - - - - - 3afb4bfe by Herbert Valerio Riedel at 2017-07-20T10:05:14+02:00 Refactor .cabal to use sub-lib for vendored lib A practical benefit is that we can control the build-depends and also avoid some recompilation between library and test-suite. - - - - - e56a552e by Herbert Valerio Riedel at 2017-07-20T10:17:48+02:00 haddock-api: add changelog pointing to haddock's changelog This addresses https://github.com/haskell/haddock/issues/638#issuecomment-309283297 - - - - - 2222ff0d by Herbert Valerio Riedel at 2017-07-20T10:19:56+02:00 Drop obsolete/misleading `stability: experimental` This .cabal property has long been considered obsolete - - - - - 9b882905 by Alex Biehl at 2017-07-20T11:25:54+02:00 Beef up haddock description (#658) * Beef up haddock description * Handle empty lines - - - - - bb60e95c by Herbert Valerio Riedel at 2017-07-20T12:08:53+02:00 Import @aisamanra's Haddock cheatsheet from https://github.com/aisamanra/haddock-cheatsheet - - - - - 0761e456 by Herbert Valerio Riedel at 2017-07-20T12:12:55+02:00 Add cheatsheet to haddock.cabal - - - - - 2ece0f0f by Herbert Valerio Riedel at 2017-07-20T12:18:38+02:00 Mention new-build in README - - - - - 947b7865 by Herbert Valerio Riedel at 2017-07-20T12:32:16+02:00 Update README Also improves markup and removes/fixes redundant/obsolete parts [skip ci] - - - - - 785e09ad by Alex Biehl at 2017-07-27T07:28:57+02:00 Bump haddock to 2.18.2, haddock-library to 1.4.5 - - - - - e3ff1ca3 by Alex Biehl at 2017-07-31T20:15:32+02:00 Move `DocMarkup` from haddock-api to haddock-library (#659) * Move `DocMarkup` from haddock-api to haddock-library * Move more markup related functions * Markup module * CHANGELOG - - - - - cda7c20c by Alex Biehl at 2017-07-31T20:35:49+02:00 Fixup haddock - - - - - 583b6812 by Alex Biehl at 2017-07-31T21:20:45+02:00 Changelog for haddock-library - - - - - bac6a0eb by Alex Biehl at 2017-07-31T21:50:24+02:00 Prepare haddock-library-1.4.5 release - - - - - 58ce6877 by Moritz Drexl at 2017-08-05T16:44:40+02:00 Fix renaming after instance signature specializing (#660) * rework rename * Add regression test for Bug 613 * update tests * update changelog - - - - - b8137ec8 by Tim Baumann at 2017-08-06T11:33:38+02:00 Fix: Generate pattern signatures for constructors exported as patterns (#663) * Fix pretty-printing of pattern signatures Pattern synonyms can have up to two contexts, both having a different semantic meaning: The first holds the constraints required to perform the matching, the second contains the constraints provided by a successful pattern match. When the first context is empty but the second is not it is necessary to render the first, empty context. * Generate pattern synonym signatures for ctors exported as patterns This fixes haskell/haddock#653. * Simplify extractPatternSyn It is not necessary to generate the simplest type signature since it will be simplified when pretty-printed. * Add changelog entries for PR haskell/haddock#663 * Fix extractPatternSyn error message - - - - - d037086b by Alex Biehl at 2017-08-06T12:43:25+02:00 Bump haddock-library - - - - - 99d7e792 by Alex Biehl at 2017-08-06T12:44:07+02:00 Bump haddock-library in haddock-api - - - - - 94802a5b by Alex Biehl at 2017-08-06T13:18:02+02:00 Provide --show-interface option to dump interfaces (#645) * WIP: Provide --show-interface option to dump interfaces Like ghcs own --show-iface this flag dumps a binary interface file to stdout in a human (and machine) readable fashion. Currently it uses json as output format. * Fill all the jsonNull stubs * Rework Bifunctor instance of DocH, update changelog and documentation * replace changelog, bring DocMarkupH doc back * Update CHANGES.md * Update CHANGES.md * Move Control.Arrow up It would result in unused import if the Bifunctor instance is not generated. - - - - - c662e476 by Ryan Scott at 2017-08-14T21:00:21-04:00 Adapt to haskell/haddock#14060 - - - - - b891eb73 by Alex Biehl at 2017-08-16T08:24:48+02:00 Bifoldable and Bitraversable for DocH and MetaDoc - - - - - 021bb56c by Alex Biehl at 2017-08-16T09:06:40+02:00 Refactoring: Make doc renaming monadic This allows us to later throw warnings if can't find an identifier - - - - - 39fbf022 by Alex Biehl at 2017-08-19T20:35:27+02:00 Hyperlinker: Avoid linear lookup in enrichToken (#669) * Make Span strict in Position * Hyperlinker: Use a proper map to enrich tokens - - - - - e13baedd by Alex Biehl at 2017-08-21T20:05:42+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 27dd6e87 by Alex Biehl at 2017-08-21T22:06:35+02:00 Drop Avails from export list - - - - - 86b247e2 by Alex Biehl at 2017-08-22T08:44:22+02:00 Bump ghc version for haddock-api tests - - - - - d4607ca0 by Alex Biehl at 2017-08-22T08:45:17+02:00 Revert "Drop Avails from export list" This reverts commit a850ba86d88a4fb9c0bd175453a2580e544e3def. - - - - - c9c54c30 by Alex Biehl at 2017-08-22T09:26:01+02:00 IntefaceFile version - - - - - a85b7c02 by Ben Gamari at 2017-08-22T09:29:52-04:00 haddock: Add Documentation.Haddock.Markup to other-modules - - - - - 34e976f5 by Ben Gamari at 2017-08-22T17:40:06+02:00 haddock: Add Documentation.Haddock.Markup to other-modules - - - - - 577abf06 by Ryan Scott at 2017-08-23T14:47:29-04:00 Update for haskell/haddock#14131 - - - - - da68fc55 by Florian Eggenhofer at 2017-08-27T18:21:56+02:00 Generate an index for package content search (#662) Generate an index for package content search - - - - - 39e62302 by Alex Biehl at 2017-08-27T18:50:16+02:00 Content search for haddock html doc - - - - - 91fd6fb2 by Alex Biehl at 2017-08-28T18:39:58+02:00 Fix tests for content search - - - - - b4a3798a by Alex Biehl at 2017-08-28T18:44:08+02:00 Add search button to #page-menu - - - - - 25a7ca65 by Alex Biehl at 2017-08-28T18:47:43+02:00 Load javascript below the fold - - - - - 8d323c1a by Alex Biehl at 2017-08-28T18:49:22+02:00 Accept tests - - - - - c5dac557 by Alex Biehl at 2017-08-28T19:14:55+02:00 Content search css - - - - - 89a5af57 by Paolo Veronelli at 2017-08-29T07:42:13+02:00 Removed `nowrap` for interface method sigs (#674) with nowrap the interfaces method sigs would expand at libitum - - - - - a505f6f7 by Alex Biehl at 2017-08-29T08:05:33+02:00 Include subordinates in content index - - - - - 4bb698c4 by Alexander Biehl at 2017-08-29T11:40:19+02:00 QuickNav: Make docbase configurable - - - - - c783bf44 by Alexander Biehl at 2017-08-29T11:48:36+02:00 QuickNav: Also use baseUrl for doc-index.json request - - - - - 47017510 by Alex Biehl at 2017-08-29T17:56:47+02:00 Fix test fallout (again) - - - - - 924fc318 by Alex Biehl at 2017-08-30T09:24:56+02:00 Write meta.json when generating html output (#676) - - - - - 717dea52 by Alex Biehl at 2017-09-01T09:20:34+02:00 Use relative URL when no docBaseUrl given - - - - - e5d85f3b by Alex Biehl at 2017-09-01T09:35:19+02:00 Add missing js files to data-files (#677) - - - - - 95b9231a by Alex Biehl at 2017-09-01T11:01:36+02:00 Rename "Search" tab to "Quick Jump" - - - - - da0ead0b by Alex Biehl at 2017-09-01T13:03:49+02:00 Make trigger link configurable (#678) QuickNav: Configurable show/hide trigger - - - - - de7da594 by Ben Gamari at 2017-09-05T06:49:55-04:00 Account for "Remember the AvailInfo for each IE" As of GHC commit f609374a55bdcf3b79f3a299104767aae2ffbf21 GHC retains the AvailInfo associated with each IE. @alexbiehl has a patch making proper use of this change, but this is just to keep things building. - - - - - b05cd3b3 by Ben Gamari at 2017-09-14T07:55:07-04:00 Bump upper bound on base - - - - - 79db899e by Herbert Valerio Riedel at 2017-09-21T23:27:52+02:00 Make compatible with Prelude.<> export in GHC 8.4/base-4.11 - - - - - 3405dd52 by Tim Baumann at 2017-09-23T22:02:01+02:00 Add compile step that bundles and compresses JS files (#684) * Add compile step that bundles and compresses JS files Also, manage dependencies on third-party JS libraries using NPM. * Compile JS from TypeScript * Enable 'noImplicitAny' in TypeScript * QuickJump: use JSX syntax * Generate source maps from TypeScript for easier debugging * TypeScript: more accurate type * Separate quick jump css file from ocean theme - - - - - df0b5742 by Alex Biehl at 2017-09-29T21:15:40+02:00 Bump base for haddock-library and haddock-test - - - - - 62b12ea0 by Merijn Verstraaten at 2017-10-04T16:03:13+02:00 Inhibit output of coverage information for hidden modules. (#687) * Inhibit output of coverage information for hidden modules. * Add changelog entry. - - - - - 8daf8bc1 by Alexander Biehl at 2017-10-05T11:27:05+02:00 Don't use subMap in attachInstances - - - - - ad75114e by Alexander Biehl at 2017-10-05T11:27:58+02:00 Revert "Don't use subMap in attachInstances" This reverts commit 3adf5bcb1a6c5326ab33dc77b4aa229a91d91ce9. - - - - - 7d4aa02f by Alex Biehl at 2017-10-08T15:32:28+02:00 Precise Haddock: Use Avails for export resolution (#688) * Use Avails for export resolution * Support reexported modules * Factor out availExportItem * Use avails for fullModuleExports * Don't use subMap in attachInstances * lookupDocs without subMap * Completely remove subMap * Only calculate unqualified modules when explicit export list is given * Refactor * Refine comment * return * Fix * Refactoring * Split avail if declaration is not exported itself * Move avail splitting - - - - - b9b4faa8 by Alex Biehl at 2017-10-08T19:38:21+02:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 43325295 by Alex Biehl at 2017-10-08T20:18:46+02:00 Fix merge fallout - - - - - c6423cc0 by Alex Biehl at 2017-10-08T20:36:12+02:00 Copy QuickJump files over - - - - - 1db587c3 by Tim Baumann at 2017-10-09T18:33:09+02:00 Use <details> element for collapsibles (#690) * Remove unnecessary call to 'collapseSection' The call is unnecessary since there is no corresponding toggle for hiding the section of orphan instances. * Use <details> for collapsibles This makes them work even when JS is disabled. Closes haskell/haddock#560. - - - - - 1b54c64b by Tim Baumann at 2017-10-10T09:50:59+02:00 Quick Jump: Show error when loading 'doc-index.json' failed (#691) - - - - - 910f716d by Veronika Romashkina at 2017-10-24T07:36:20+02:00 Fix tiny typo in docs (#693) - - - - - b21de7e5 by Ryan Scott at 2017-10-24T13:07:15+02:00 Overhaul Haddock's rendering of kind signatures (#681) * Overhaul Haddock's rendering of kind signatures * Strip off kind signatures when specializing As an added bonus, this lets us remove an ugly hack specifically for `(->)`. Yay! * Update due to 0390e4a0f61e37bd1dcc24a36d499e92f2561b67 * @alexbiehl's suggestions * Import injectiveVarsOfBinder from GHC - - - - - 6704405c by Ryan Scott at 2017-10-28T07:10:27+02:00 Fix Haddock rendering of kind-indexed data family instances (#694) - - - - - 470f6b9c by Alex Biehl at 2017-10-30T08:45:51+01:00 Add QuickJump version to meta.json (#696) - - - - - b89eccdf by Alex Biehl at 2017-10-30T10:15:49+01:00 Put Quickjump behind --quickjump flag (#697) - - - - - 3095fb58 by Alex Biehl at 2017-10-30T19:09:06+01:00 Add build command to package.json - - - - - f223fda9 by Alex Biehl at 2017-10-30T19:10:39+01:00 Decrease threshold for fuzzy matching - - - - - 80245dda by Edward Z. Yang at 2017-10-31T20:35:05+01:00 Supported reexported-modules via --reexport flag. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 7e389742 by Alex Biehl at 2017-10-31T20:37:56+01:00 Correct missing title in changelog - - - - - 1a2a1c03 by Alex Biehl at 2017-10-31T20:59:07+01:00 Copy quickjump.css for nicer error messages - - - - - db234bb9 by Alex Biehl at 2017-10-31T21:31:18+01:00 Reexported modules: Report warnings if argument cannot be parsed or ... module cannot be found - - - - - eea8a205 by Carlo Hamalainen at 2017-10-31T21:43:14+01:00 More general type for nameCacheFromGhc. (#539) - - - - - 580eb42a by Alex Biehl at 2017-10-31T21:46:52+01:00 Remote tab - - - - - 0e599498 by Alex Biehl at 2017-10-31T21:48:55+01:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 7b8539bb by Alex Biehl at 2017-10-31T22:28:34+01:00 fullModuleContents traverses exports in declaration order - - - - - 0c91fbf2 by Alex Biehl at 2017-10-31T22:32:31+01:00 Remove excessive use of list comprehensions - - - - - f7356e02 by Alex Biehl at 2017-11-01T19:11:03+01:00 Make better use of AvailInfo - - - - - f3e512d5 by Alex Biehl at 2017-11-02T12:16:22+01:00 Always return documentation for exported subordinates ... event if they have no documentation (e.g. noDocForDecl) By using the information in the AvailInfo we don't need additional export checks. - - - - - 7cf58898 by Alan Zimmerman at 2017-11-07T08:28:03+02:00 Match changes for Trees that Grow in GHC - - - - - e5105a41 by Alan Zimmerman at 2017-11-08T17:21:58+02:00 Match Trees That Grow - - - - - 55178266 by Alan Zimmerman at 2017-11-11T22:20:31+02:00 Match Trees that Grow in GHC for HsExpr - - - - - 2082ab02 by Ryan Scott at 2017-11-14T15:27:03+01:00 Actually render infix type operators as infix (#703) * Actually render infix type operators as infix * Account for things like `(f :*: g) p`, too - - - - - c52ab7d0 by Alan Zimmerman at 2017-11-14T23:14:26+02:00 Clean up use of PlaceHolder, to match TTG - - - - - 81cc9851 by Moritz Angermann at 2017-11-20T07:52:49+01:00 Declare use of `Paths_haddock` module in other-modules (#705) This was detected by `-Wmissing-home-modules` - - - - - f9d27598 by Moritz Angermann at 2017-11-20T12:47:34+01:00 Drop Paths_haddock from ghc.mk (#707) With haskell/haddock#705 and haskell/haddock#706, the custom addition should not be necessary any more. # Conflicts: # ghc.mk - - - - - f34818dc by Moritz Angermann at 2017-11-20T12:47:59+01:00 Add autogen-modules (#706) > Packages using 'cabal-version: >= 1.25' and the autogenerated module Paths_* must include it also on the 'autogen-modules' field besides 'exposed-modules' and 'other-modules'. This specifies that the module does not come with the package and is generated on setup. Modules built with a custom Setup.hs script also go here to ensure that commands like sdist don't fail. # Conflicts: # haddock.cabal - - - - - bb43a0aa by Ben Gamari at 2017-11-21T15:50:12-05:00 Revert "Clean up use of PlaceHolder, to match TTG" This reverts commit 134a7bb054ea730b13c8629a76232d73e3ace049. - - - - - af9ebb2b by Ben Gamari at 2017-11-21T15:50:14-05:00 Revert "Match Trees that Grow in GHC for HsExpr" This reverts commit 9f054dc365379c66668de6719840918190ae6e44. - - - - - 5d35c3af by Ben Gamari at 2017-11-21T15:50:15-05:00 Revert "Match Trees That Grow" This reverts commit 73a26af844ac50b8bec39de11d64452a6286b00c. - - - - - 99a8e43b by Ben Gamari at 2017-11-21T16:36:06-05:00 Revert "Match changes for Trees that Grow in GHC" This reverts commit 01eeeb048acd2dd05ff6471ae148a97cf0720547. - - - - - c4d650c2 by Ben Gamari at 2017-12-04T15:06:07-05:00 Bump GHC version - - - - - 027b2274 by Ben Gamari at 2017-12-04T17:06:31-05:00 Bump GHC bound to 8.4.* - - - - - 58eaf755 by Alex Biehl at 2017-12-06T15:44:24+01:00 Update changelog - - - - - d68f5584 by Simon Peyton Jones at 2017-12-07T14:39:56+00:00 Track changes to follow Trac haskell/haddock#14529 This tracks the refactoring of HsDecl.ConDecl. - - - - - dc519d6b by Alec Theriault at 2018-01-06T08:20:43-08:00 Pass to GHC visible modules for instance filtering The GHC-side `getNameToInstancesIndex` filters out incorrectly some instances because it is not aware of what modules are visible. On the Haddock side, we need to pass in the modules we are processing. On the GHC side, we need to check against _those_ modules when checking if an instance is visible. - - - - - 8285118c by Alec Theriault at 2018-01-13T12:12:37+01:00 Constructor and pattern synonym argument docs (#709) * Support Haddocks on constructor arguments This is in conjunction with https://phabricator.haskell.org/D4094. Adds support for rendering Haddock's on (non-record) constructor arguments, both for regular and GADT constructors. * Support haddocks on pattern synonym arguments It appears that GHC already parsed these - we just weren't using them. In the process of doing this, I tried to deduplicate some code around handling patterns. * Update the markup guide Add some information about the new support for commenting constructor arguments, and mention pattern synonyms and GADT-style constructors. * Overhaul LaTeX support for data/pattern decls This includes at least * fixing several bugs that resulted in invalid LaTeX * fixing GADT data declaration headers * overhaul handling of record fields * overhaul handling of GADT constructors * overhaul handling of bundled patterns * add support for constructor argument docs * Support GADT record constructors This means changes what existing HTML docs look like. As for LaTeX, looks like GADT records were never even supported. Now they are. * Clean up code/comments Made code/comments consistent between the LaTeX and XHTML backend when possible. * Update changelog * Patch post-rebase regressions * Another post-rebase change We want return values to be documentable on record GADT constructors. - - - - - ca4fabb4 by Alec Theriault at 2018-01-15T17:12:18-08:00 Update the GblRdrEnv when processing modules Without a complete environment, we will miss some instances that were encountered during typechecking. - - - - - 4c472fea by Ryan Scott at 2018-01-19T10:44:02+01:00 Fix haskell/haddock#732 (#733) - - - - - bff14dbd by Alex Biehl at 2018-01-19T15:33:30+01:00 extractDecl: Extract associated types correctly (#736) - - - - - a2a94a73 by Alex Biehl at 2018-01-19T15:34:40+01:00 extractDecl: Extract associated types correctly (#736) - - - - - 26df93dc by Alex Biehl at 2018-01-20T10:18:22+01:00 haddock-api: bump ghc to ^>= 8.4 - - - - - f65aeb1d by Alex Biehl at 2018-01-20T19:18:20+01:00 Fix duplicate declarations and TypeFamilies specifics - - - - - 0e721b97 by Alex Biehl at 2018-01-20T19:20:19+01:00 Fix duplicate declarations and TypeFamilies specifics - - - - - cb6234f6 by Ben Gamari at 2018-01-26T13:40:55-05:00 Merge remote-tracking branch 'harpocrates/fix/missing-orphan-instances' into ghc-head - - - - - 0fc28554 by Alec Theriault at 2018-02-01T14:58:18+01:00 Pass to GHC visible modules for instance filtering The GHC-side `getNameToInstancesIndex` filters out incorrectly some instances because it is not aware of what modules are visible. On the Haddock side, we need to pass in the modules we are processing. On the GHC side, we need to check against _those_ modules when checking if an instance is visible. - - - - - b9123772 by Alec Theriault at 2018-02-01T14:58:18+01:00 Update the GblRdrEnv when processing modules Without a complete environment, we will miss some instances that were encountered during typechecking. - - - - - 0c12e274 by Ryan Scott at 2018-02-01T14:58:18+01:00 Fix haskell/haddock#548 by rendering datatype kinds more carefully (#702) - - - - - 8876d20b by Alec Theriault at 2018-02-01T14:58:18+01:00 Use the GHC lexer for the Hyperlinker backend (#714) * Start changing to use GHC lexer * better cpp * Change SrcSpan to RealSrcSpan * Remove error * Try to stop too many open files * wip * wip * Revert "wip" This reverts commit b605510a195f26315e3d8ca90e6d95a6737553e1. Conflicts: haddock-api/haddock-api.cabal haddock-api/src/Haddock/Interface.hs * Remove pointless 'caching' * Use dlist rather than lists when finding vars * Use a map rather than list * Delete bogus comment * Rebase followup Things now run using the GHC lexer. There are still - stray debug statements - unnecessary changes w.r.t. master * Cleaned up differences w.r.t. current Haddock HEAD Things are looking good. quasiquotes in particular look beautiful: the TH ones (with Haskell source inside) colour/link their contents too! Haven't yet begun to check for possible performance problems. * Support CPP and top-level pragmas The support for these is hackier - but no more hacky than the existing support. * Tests pass, CPP is better recognized The tests were in some cases altered: I consider the new output to be more correct than the old one.... * Fix shrinking of source without tabs in test * Replace 'Position'/'Span' with GHC counterparts Replaces 'Position' -> 'GHC.RealSrcLoc' and 'Span' -> 'GHC.RealSrcSpan'. * Nits * Forgot entry in .cabal * Update changelog - - - - - 95c6a771 by Alec Theriault at 2018-02-01T14:58:18+01:00 Clickable anchors for headings (#716) See haskell/haddock#579. This just adds an <a> tag around the heading, pointing to the heading itself. - - - - - 21463d28 by Alex Biehl at 2018-02-01T14:58:18+01:00 Quickjump: Matches on function names weight more than matches in ... module names. - - - - - 8023af39 by Alex Biehl at 2018-02-01T14:58:18+01:00 Treat escaped \] better in definition lists (#717) This fixes haskell/haddock#546. - - - - - e4866dc1 by Alex Biehl at 2018-02-01T14:58:18+01:00 Remove scanner, takeWhile1_ already takes care of escaping - - - - - 9bcaa49d by Alex Biehl at 2018-02-01T14:58:18+01:00 Take until line feed - - - - - 01d2af93 by Oleg Grenrus at 2018-02-01T14:58:18+01:00 Add simple framework for running parser fixtures (#668) * Add simple framework for running parser fixtures * Compatible with tree-diff-0.0.0.1 * Use parseParas to parse fixtures This allows to test all syntactic constructs available in haddock markup. - - - - - 31128417 by Alec Theriault at 2018-02-01T14:58:18+01:00 Patch flaky parser test (#720) * Patch flaky parser test This test was a great idea, but it doesn't port over too well to using the GHC lexer. GHC rewrites its input a bit - nothing surprising, but we need to guard against those cases for the test. * Change instance head * Change use site - - - - - 9704f214 by Herbert Valerio Riedel at 2018-02-01T14:58:18+01:00 Include secondary LICENSE file in source dist - - - - - 51f25074 by Oleg Grenrus at 2018-02-01T14:58:18+01:00 Grid Tables (#718) * Add table examples * Add table types and adopt simple parser Simple parser is done by Giovanni Cappellotto (@potomak) in https://github.com/haskell/haddock/pull/577 It seems to support single fine full tables, so far from full RST-grid tables, but it's good start. Table type support row- and colspans, but obviously parser is lacking. Still TODO: - Latex backend. Should we use multirow package https://ctan.org/pkg/multirow?lang=en? - Hoogle backend: ? * Implement grid-tables * Refactor table parser * Add two ill-examples * Update CHANGES.md * Basic documentation for tables * Fix documentation example - - - - - 670d6200 by Alex Biehl at 2018-02-01T14:58:18+01:00 Add grid table example to cheatsheet (pdf and svg need to be regenerated thought) - - - - - 4262dec9 by Alec Theriault at 2018-02-01T14:58:18+01:00 Fix infinite loop when specializing instance heads (#723) * Fix infinite loop when specializing instance heads The bug can only be triggered from TH, hence why it went un-noticed for so long. * Add test for haskell/haddock#679 and haskell/haddock#710 - - - - - 67ecd803 by Alec Theriault at 2018-02-01T14:58:18+01:00 Filter RTS arguments from 'ghc-options' arguments (#725) This fixes haskell/haddock#666. - - - - - 7db26992 by Alex Biehl at 2018-02-01T14:58:18+01:00 Quickjump Scrollable overlay - - - - - da9ff634 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Hyperlinker: Adjust parser to new PFailed constructor - - - - - 7b7cf8cb by Alexander Biehl at 2018-02-01T14:58:18+01:00 Specialize: Add missing IdP annotations - - - - - 78cd7231 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Convert: Correct pass type - - - - - a2d0f590 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Warning free compilation - - - - - cd861cf3 by Alexander Biehl at 2018-02-01T14:58:18+01:00 hadock-2.19.0 / haddock-api-2.19.0 / haddock-library-1.5.0 - - - - - c6651b72 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Adjust changelogs - - - - - 1e93da0b by Alexander Biehl at 2018-02-01T14:58:18+01:00 haddock-library: Info about breaking changes - - - - - f9b11db8 by Alec Theriault at 2018-02-02T12:36:02+01:00 Properly color pragma contents in hyperlinker The hyperlinker backend now classifies the content of pragmas as 'TkPragma'. That means that in something like '{-# INLINE foo #-}', 'foo' still gets classified as a pragma token. - - - - - c40b0043 by Alec Theriault at 2018-02-02T12:36:02+01:00 Support the new 'ITcolumn_prag' token - - - - - 4a2a4d39 by Alex Biehl at 2018-02-03T12:11:55+01:00 QuickJump: Mitigate encoding problems on Windows - - - - - bb34503a by Alex Biehl at 2018-02-04T18:39:31+01:00 Use withBinaryFile - - - - - 637605bf by Herbert Valerio Riedel at 2018-02-05T09:48:32+01:00 Try GHC 8.4.1 for Travis CI job - - - - - 7abb67e4 by Herbert Valerio Riedel at 2018-02-05T10:05:42+01:00 try harder to build w/ GHC 8.4.1 - - - - - 8255cc98 by Herbert Valerio Riedel at 2018-02-05T10:05:42+01:00 Add `SPDX-License-Identifier` as alised for "license" module header tokens C.f. SPDX 2.1 - Appendix V https://spdx.org/spdx-specification-21-web-version#h.twlc0ztnng3b The tag should appear on its own line in the source file, generally as part of a comment. SPDX-License-Identifier: <SPDX License Expression> Cherry-picked from haskell/haddock#743 - - - - - 267cd23d by Herbert Valerio Riedel at 2018-02-05T10:24:34+01:00 Make test-suite SMP compatible - - - - - 95d4bf40 by Alec Theriault at 2018-02-05T22:01:04+01:00 Hyperlink pattern synonyms and 'module' imports (#744) Links to pattern synonyms are now generated, as well as links from modules in import lists. Fixes haskell/haddock#731. - - - - - 67838dcd by Alec Theriault at 2018-02-06T08:23:36+01:00 Don't warn about missing '~' (#746) This manually filters out '~' from the list of things to warn about. It truly makes no sense to warn on this since '~' has nothing it could link to - it is magical. This fixes haskell/haddock#532. - - - - - ab6c3f9f by Alec Theriault at 2018-02-06T08:24:47+01:00 Don't barf on 'HsSpliceTy' (#745) This handles 'HsSpliceTy's by replacing them with what they expand to. IIUC everything that is happening, 'renameHsSpliceTy' should not be able to fail for the inputs we feed it from GHC. This fixes haskell/haddock#574. - - - - - 92bf95ad by Alex Biehl at 2018-02-06T08:28:23+01:00 Rename: renameHsSpliceTy ttg - - - - - 3130b1e1 by Alex Biehl at 2018-02-06T09:02:14+01:00 Expand SigDs - - - - - c72adae5 by Alex Biehl at 2018-02-06T09:20:51+01:00 fullModuleContents: support named docs - - - - - de2e4dbf by Alex Biehl at 2018-02-06T13:56:17+01:00 Hyperlinker: Also link pattern synonym arguments - - - - - b7c98237 by Alex Biehl at 2018-02-09T18:44:23+01:00 Expand SigD in a better place In https://github.com/haskell/haddock/issues/287 we found that haddock-2.19.0 would miss documentation on class methods with multiples names. This patch uses expandSigDecls in a more sensible place. - - - - - 8f598b27 by Alec Theriault at 2018-02-11T12:29:56+01:00 Add module tooltips to linked identifiers (#753) No more clicking to figure out whether your bytestring is strict or lazy! - - - - - d812e65d by Alec Theriault at 2018-02-11T12:31:44+01:00 Add 'show' option to complement 'hide' (#752) * Add 'show' option to complement 'hide' The behaviour is for flags passed in the command line to override flags in file headers. In the command line, later flags override earlier ones. Fixes haskell/haddock#751 and haskell/haddock#266. * Add a '--show-all' option - - - - - 6676cecb by Alex Biehl at 2018-02-18T11:07:15-05:00 QuickJump: Mitigate encoding problems on Windows (cherry picked from commit 86292c54bfee2343aee84559ec01f1fc68f52231) - - - - - e753dd88 by Alex Biehl at 2018-02-18T17:59:54+01:00 Use withBinaryFile - - - - - 724dc881 by Tamar Christina at 2018-02-19T05:34:49+01:00 Haddock: support splitted include paths. (#689) - - - - - 9b6d6f50 by Alex Biehl at 2018-02-19T05:57:02+01:00 Teach the HTML backend how to render methods with multiple names - - - - - a74aa754 by Alexander Biehl at 2018-02-19T10:04:34+01:00 Hoogle/Latex: Remove use of partial function - - - - - 66d8bb0e by Alec Theriault at 2018-02-25T16:04:01+01:00 Fix file handle leak (#763) (#764) Brought back some mistakenly deleted code for handling encoding and eager reading of files from e0ada1743cb722d2f82498a95b201f3ffb303137. - - - - - bb92d03d by Alex Biehl at 2018-03-02T14:21:23+01:00 Enable running test suite with stock haddock and ghc using ``` $ cabal new-run -- html-test --haddock-path=$(which haddock) --ghc-path=$(which ghc) ``` - - - - - dddb3cb2 by Alex Biehl at 2018-03-02T15:43:21+01:00 Make testsuite work with haddock-1.19.0 release (#766) - - - - - f38636ed by Alec Theriault at 2018-03-02T15:48:36+01:00 Support unicode operators, proper modules Unicode operators are a pretty big thing in Haskell, so supporting linking them seems like it outweighs the cost of the extra machinery to force Attoparsec to look for unicode. Fixes haskell/haddock#458. - - - - - 09d89f7c by Alec Theriault at 2018-03-02T15:48:43+01:00 Remove bang pattern - - - - - d150a687 by Alex Biehl at 2018-03-02T15:48:48+01:00 fix test - - - - - d6fd71a5 by Alex Biehl at 2018-03-02T16:22:38+01:00 haddock-test: Be more explicit which packages to pass We now pass `-hide-all-packages` to haddock when invoking the testsuite. This ensures we don't accidentally pick up any dependencies up through ghc.env files. - - - - - 0932c78c by Alex Biehl at 2018-03-02T17:50:38+01:00 Revert "fix test" This reverts commit 1ac2f9569242f6cb074ba6e577285a4c33ae1197. - - - - - 52516029 by Alex Biehl at 2018-03-02T18:16:50+01:00 Fix Bug548 for real - - - - - 89df9eb5 by Alex Biehl at 2018-03-05T18:28:19+01:00 Hyperlinker: Links for TyOps, class methods and associated types - - - - - d019a4cb by Ryan Scott at 2018-03-06T13:43:56-05:00 Updates for haskell/haddock#13324 - - - - - 6d5a42ce by Alex Biehl at 2018-03-10T18:25:57+01:00 Bump haddock-2.19.0.1, haddock-api-2.19.0.1, haddock-library-1.5.0.1 - - - - - c0e6f380 by Alex Biehl at 2018-03-10T18:25:57+01:00 Update changelogs for haddock-2.19.0.1 and haddock-library-1.5.0.1 - - - - - 500da489 by Herbert Valerio Riedel at 2018-03-10T18:25:57+01:00 Update to QC 2.11 - - - - - ce8362e9 by Herbert Valerio Riedel at 2018-03-10T18:25:57+01:00 Restore backward-compat with base-4.5 through base-4.8 - - - - - baae4435 by Alex Biehl at 2018-03-10T18:25:57+01:00 Bump lower bound for haddock-library - - - - - 10b7a73e by Alex Biehl at 2018-03-10T18:25:57+01:00 Haddock: Straighten out base bound - - - - - a6096f7b by Alex Biehl at 2018-03-13T08:45:06+01:00 extractDecl: Extract constructor patterns from data family instances (#776) * extractDecl: Allow extraction of data family instance constructors * extractDecl: extract data family instance constructors - - - - - ba4a0744 by Simon Jakobi at 2018-03-14T08:26:42+01:00 Readme: Update GHC version (#778) - - - - - 8de157d4 by Simon Jakobi at 2018-03-14T20:39:29+01:00 Add fixture test for definition lists - - - - - 425b46f9 by Simon Jakobi at 2018-03-14T20:39:29+01:00 Add fixture test for links - - - - - d53945d8 by Simon Jakobi at 2018-03-14T20:39:29+01:00 Add fixture test for inline links - - - - - f1dc7c99 by Simon Jakobi at 2018-03-14T20:39:29+01:00 fixtures: Slightly unmangle output - - - - - 0879d31c by Simon Jakobi at 2018-03-14T20:39:29+01:00 fixtures: Prevent stdout buffering - - - - - 1f9e5f1b by Simon Jakobi at 2018-03-14T20:39:29+01:00 haddock-library.cabal: Clean up GHC options - - - - - 066b891a by Simon Jakobi at 2018-03-14T20:39:29+01:00 Make a proper definition for the <link> parser - - - - - 573d6ba7 by Alec Theriault at 2018-03-21T09:16:57+01:00 Show where instances are defined (#748) * Indicate source module of instances Above instance, we now also display a link to the module where the instance was defined. This is sometimes helpful in figuring out what to import. * Source module for type/data families too * Remove parens * Accept tests - - - - - 99b5d28b by Alex Biehl at 2018-03-21T09:20:36+01:00 Prepare changelog for next release - - - - - 482d3a93 by Alex Biehl at 2018-03-23T15:57:36+01:00 Useful cost centres, timers and allocation counters (#785) * Add some useful cost-centres for profiling * Add withTiming for each haddock phase Invoking haddock with `--optghc=-ddump-timings` now shows the amount of time spent and the number of allocated bytes for each phase. - - - - - 773b41bb by Alec Theriault at 2018-03-27T08:35:59+02:00 @since includes package name (#749) * Metadoc stores a package name This means that '@since' annotations can be package aware. * Get the package name the right way This should extract the package name for `@since` annotations the right way. I had to move `modulePackageInfo` around to do this and, in the process, I took the liberty to update it. Since it appears that finding the package name is something that can fail, I added a warning for this case. * Silence warnings * Hide package for local 'since' annotations As discussed, this is still the usual case (and we should avoid being noisy for it). Although this commit is large, it is basically only about threading a 'Maybe Package' from 'Haddock.render' all the way to 'Haddock.Backends.Xhtml.DocMarkup.renderMeta'. * Bump binary interface version * Add a '--since-qual' option This controls when to qualify since annotations with the package they come from. The default is always, but I've left an 'external' variant where only those annotations coming from outside of the current package are qualified. * Make ParserSpec work * Make Fixtures work * Use package name even if package version is not available The @since stuff needs only the package name passed in, so it makes sense to not be forced to pass in a version too. - - - - - e42c57bc by Alex Biehl at 2018-03-27T08:42:50+02:00 haddock-2.19.1, haddock-api-2.19.1, haddock-library-1.6.0 - - - - - 8373a529 by Alex Biehl at 2018-03-28T10:17:11+02:00 Bump haddock and haddock-api to 2.20.0 - - - - - 5038eddd by Jack Henahan at 2018-04-03T13:28:12+02:00 Clear search string on hide for haskell/haddock#781 (#789) - - - - - 920ca1eb by Alex Biehl at 2018-04-03T16:35:50+02:00 Travis: Build with ghc-8.4.2 (#793) - - - - - a232f0eb by Alan Zimmerman at 2018-04-07T14:14:32+02:00 Match changes in GHC for D4199 Removing HasSourceText and SourceTextX classes. - - - - - ab85060b by Alan Zimmerman at 2018-04-09T21:20:24+02:00 Match GHC changes for TTG - - - - - 739302b6 by Alan Zimmerman at 2018-04-13T13:31:44+02:00 Match GHC for TTG implemented on HsBinds, D4581 - - - - - 2f56d3cb by Ryan Scott at 2018-04-19T11:42:58-04:00 Bump upper bound on base to < 4.13 See https://ghc.haskell.org/trac/ghc/ticket/15018. - - - - - a49df92a by Alex Biehl at 2018-04-20T07:31:44+02:00 Don't treat fixity signatures like declarations - - - - - d02c103b by Ryan Scott at 2018-04-24T11:20:11-04:00 Add regression test for haskell/haddock#413 Fixes haskell/haddock#413. - - - - - c7577f52 by Ryan Scott at 2018-04-24T13:51:06-07:00 Improve the Hoogle backend's treatment of type families (#808) Fixes parts 1 and 2 of haskell/haddock#806. - - - - - d88f85b1 by Alec Theriault at 2018-04-25T11:24:07-07:00 Replace 'attoparsec' with 'parsec' (#799) * Remove attoparsec with parsec and start fixing failed parses * Make tests pass * Fix encoding issues The Haddock parser no longer needs to worry about bytestrings. All the internal parsing work in haddock-library happens over 'Text'. * Remove attoparsec vendor * Fix stuff broken in 'attoparsec' -> 'parsec' * hyperlinks * codeblocks * examples Pretty much all issues are due to attoparsec's backtracking failure behaviour vs. parsec's non-backtracking failure behaviour. * Fix small TODOs * Missing quote + Haddocks * Better handle spaces before/after paragraphs * Address review comments - - - - - fc25e2fe by Alan Zimmerman at 2018-04-27T15:36:53+02:00 Match changes in GHC for TTG - - - - - 06175f91 by Herbert Valerio Riedel at 2018-05-01T18:11:09+02:00 Merge branch 'ghc-head' with 'ghc-8.4' - - - - - 879caaa8 by Alec Theriault at 2018-05-07T18:53:15-07:00 Filter out CRLFs in hyperlinker backend (#813) This prevents spurious lines from appearing in the final output. - - - - - 3e0120cb by Simon Jakobi at 2018-05-07T19:00:18-07:00 Add docs for some DocH constructors (#814) - - - - - 0a32c6db by Alec Theriault at 2018-05-08T02:15:45-07:00 Remove 'TokenGroup' from Hyperlinker (#818) Since the hyperlinker backend now relies on the GHC tokenizer, something like 'Bar.Baz.foo' already gets bunched together into one token (as opposed to being spread across 'Bar', '.', 'Baz', '.', and 'foo'). - - - - - 8816e783 by Simon Jakobi at 2018-05-08T10:48:11-07:00 Renamer: Warn about out of scope identifiers. (#819) - - - - - ad60366f by Ryan Scott at 2018-05-10T11:19:47-04:00 Remove Hoogle backend hack that butchers infix datatype names - - - - - 03b7cc3b by Ryan Scott at 2018-05-10T11:24:38-04:00 Wibbles - - - - - b03dd563 by Chaitanya Koparkar at 2018-05-10T11:44:58-04:00 Use the response file utilities defined in `base` (#821) Summary: The response file related modules were recently copied from `haddock` into `base`. This patch removes them from `haddock`. GHC Trac Issues: haskell/haddock#13896 - - - - - 9f298a40 by Ben Gamari at 2018-05-13T17:36:04-04:00 Account for refactoring of LitString - - - - - ea3dabe7 by Ryan Scott at 2018-05-16T09:21:43-04:00 Merge pull request haskell/haddock#826 from haskell/T825 Remove Hoogle backend hack that butchers infix datatype names - - - - - 0d234f7c by Alec Theriault at 2018-05-23T11:29:05+02:00 Use `ClassOpSig` instead of `TypeSig` for class methods (#835) * Fix minimal pragma handling Class declarations contain 'ClassOpSig' not 'Typesig'. This should fix haskell/haddock#834. * Accept html-test output - - - - - 15fc9712 by Simon Jakobi at 2018-05-31T04:17:47+02:00 Adjust to new HsDocString internals - - - - - 6f1e19a8 by Ben Gamari at 2018-06-02T16:18:58-04:00 Remove ParallelArrays and Data Parallel Haskell - - - - - 0d0355d9 by Ryan Scott at 2018-06-04T21:26:59-04:00 DerivingVia changes - - - - - 0d93475a by Simon Jakobi at 2018-06-05T19:47:05+02:00 Bump a few dependency bounds (#845) - - - - - 5cbef804 by Alec Theriault at 2018-06-05T19:47:16+02:00 Improve hyperlinker's 'spanToNewline' (#846) 'spanToNewline' is used to help break apart the source into lines which can then be partioned into CPP and non-CPP chunks. It is important that 'spanToNewline' not break apart tokens, so it needs to properly handle things like * block comments, possibly nested * string literals, possibly multi-line * CPP macros, possibly multi-line String literals in particular were not being properly handled. The fix is to to fall back in 'Text.Read.lex' to help lex things that are not comments. Fixes haskell/haddock#837. - - - - - 9094c56f by Alec Theriault at 2018-06-05T22:53:25+02:00 Extract docs from strict/unpacked constructor args (#839) This fixes haskell/haddock#836. - - - - - 70188719 by Simon Jakobi at 2018-06-08T22:20:30+02:00 Renamer: Warn about ambiguous identifiers (#831) * Renamer: Warn about ambiguous identifiers Example: Warning: 'elem' is ambiguous. It is defined * in ‘Data.Foldable’ * at /home/simon/tmp/hdk/src/Lib.hs:7:1 You may be able to disambiguate the identifier by qualifying it or by hiding some imports. Defaulting to 'elem' defined at /home/simon/tmp/hdk/src/Lib.hs:7:1 Fixes haskell/haddock#830. * Deduplicate warnings Fixes haskell/haddock#832. - - - - - 495cd1fc by Chaitanya Koparkar at 2018-06-13T23:01:34+02:00 Use the response file utilities defined in `base` (#821) Summary: The response file related modules were recently copied from `haddock` into `base`. This patch removes them from `haddock`. GHC Trac Issues: haskell/haddock#13896 - - - - - 81088732 by Ben Gamari at 2018-06-13T23:01:34+02:00 Account for refactoring of LitString - - - - - 7baf6587 by Simon Jakobi at 2018-06-13T23:05:08+02:00 Adjust to new HsDocString internals - - - - - bb61464d by Ben Gamari at 2018-06-13T23:05:22+02:00 Remove ParallelArrays and Data Parallel Haskell - - - - - 5d8cb87f by Ryan Scott at 2018-06-13T23:39:30+02:00 DerivingVia changes - - - - - 73d373a3 by Alec Theriault at 2018-06-13T23:39:30+02:00 Extract docs from strict/unpacked constructor args (#839) This fixes haskell/haddock#836. - - - - - 4865e254 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Remove `ITtildehsh` token - - - - - b867db54 by Alec Theriault at 2018-06-13T23:39:30+02:00 Filter out CRLFs in hyperlinker backend (#813) This prevents spurious lines from appearing in the final output. - - - - - 9598e392 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Add docs for some DocH constructors (#814) - - - - - 8a59035b by Alec Theriault at 2018-06-13T23:39:30+02:00 Remove 'TokenGroup' from Hyperlinker (#818) Since the hyperlinker backend now relies on the GHC tokenizer, something like 'Bar.Baz.foo' already gets bunched together into one token (as opposed to being spread across 'Bar', '.', 'Baz', '.', and 'foo'). - - - - - 29350fc8 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Renamer: Warn about out of scope identifiers. (#819) - - - - - 2590bbd9 by Ryan Scott at 2018-06-13T23:39:30+02:00 Remove Hoogle backend hack that butchers infix datatype names - - - - - a9939fdc by Ryan Scott at 2018-06-13T23:39:30+02:00 Wibbles - - - - - a22f7df4 by Alec Theriault at 2018-06-13T23:39:30+02:00 Use `ClassOpSig` instead of `TypeSig` for class methods (#835) * Fix minimal pragma handling Class declarations contain 'ClassOpSig' not 'Typesig'. This should fix haskell/haddock#834. * Accept html-test output - - - - - 8741015d by Simon Jakobi at 2018-06-13T23:39:30+02:00 Bump a few dependency bounds (#845) - - - - - 4791e1cc by Alec Theriault at 2018-06-13T23:39:30+02:00 Improve hyperlinker's 'spanToNewline' (#846) 'spanToNewline' is used to help break apart the source into lines which can then be partioned into CPP and non-CPP chunks. It is important that 'spanToNewline' not break apart tokens, so it needs to properly handle things like * block comments, possibly nested * string literals, possibly multi-line * CPP macros, possibly multi-line String literals in particular were not being properly handled. The fix is to to fall back in 'Text.Read.lex' to help lex things that are not comments. Fixes haskell/haddock#837. - - - - - 311d3216 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Renamer: Warn about ambiguous identifiers (#831) * Renamer: Warn about ambiguous identifiers Example: Warning: 'elem' is ambiguous. It is defined * in ‘Data.Foldable’ * at /home/simon/tmp/hdk/src/Lib.hs:7:1 You may be able to disambiguate the identifier by qualifying it or by hiding some imports. Defaulting to 'elem' defined at /home/simon/tmp/hdk/src/Lib.hs:7:1 Fixes haskell/haddock#830. * Deduplicate warnings Fixes haskell/haddock#832. - - - - - d0577817 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Complete FixitySig and FamilyDecl pattern matches - - - - - 055b3aa7 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Fix redundant import warnings - - - - - f9ce19b1 by Simon Jakobi at 2018-06-13T23:49:52+02:00 html-test: Accept output - - - - - 04604ea7 by Simon Jakobi at 2018-06-13T23:54:37+02:00 Bump bounds on Cabal - - - - - 0713b692 by Simon Jakobi at 2018-06-14T00:00:12+02:00 Merge branch 'ghc-head' into ghc-head-update-3 - - - - - c6a56bfd by Simon Jakobi at 2018-06-14T02:33:27+02:00 Bump ghc bound for haddock-api spec test-suite - - - - - 119d04b2 by Simon Jakobi at 2018-06-14T12:37:48+02:00 Travis: `--allow-newer` for all packages - - - - - 0e876e2c by Alex Biehl at 2018-06-14T15:28:52+02:00 Merge pull request haskell/haddock#857 from sjakobi/ghc-head-update-3 Update ghc-head - - - - - 5be46454 by Alec Theriault at 2018-06-14T21:42:45+02:00 Improved handling of interfaces in 'haddock-test' (#851) This should now work with an inplace GHC where (for instance) HTML directories may not be properly recorded in the package DB. - - - - - 96ab1387 by Vladislav Zavialov at 2018-06-14T17:06:21-04:00 Handle -XStarIsType - - - - - e518f8c4 by Ben Gamari at 2018-06-14T17:48:00-04:00 Revert unintentional reversion of fix of haskell/haddock#548 - - - - - 01b9f96d by Alan Zimmerman at 2018-06-19T11:52:22+02:00 Match changes in GHC for haskell/haddock#14259 - - - - - 7f8c8298 by Ben Gamari at 2018-06-19T18:14:27-04:00 Bump GHC version to 8.6 - - - - - 11c6b5d2 by Ryan Scott at 2018-06-19T23:17:31-04:00 Remove HsEqTy and XEqTy - - - - - b33347c2 by Herbert Valerio Riedel at 2018-06-20T23:14:52+02:00 Revert "Bump GHC version to 8.6" This was applied to the wrong branch; there's now a `ghc-8.6` branch; ghc-head is always supposed to point to GHC HEAD, i.e. an odd major version. The next version bump to `ghc-head` is supposed to go from e.g. 8.5 to 8.7 This reverts commit 5e3cf5d8868323079ff5494a8225b0467404a5d1. - - - - - f0d2460e by Herbert Valerio Riedel at 2018-06-20T23:28:46+02:00 Update Travis CI job - - - - - ef239223 by Herbert Valerio Riedel at 2018-06-20T23:32:41+02:00 Drop GHC HEAD from CI and update GHC to 8.4.3 It's a waste of resource to even try to build this branch w/ ghc-head; so let's not do that... - - - - - 41c4a9fa by Ben Gamari at 2018-06-20T18:26:20-04:00 Bump GHC version to 8.7 - - - - - 8be593dc by Herbert Valerio Riedel at 2018-06-21T22:32:15+02:00 Update CI job to use GHC 8.7.* - - - - - b91d334a by Simon Jakobi at 2018-06-30T13:41:38+02:00 README updates (#856) * README: Remove mentions of master branch * README: Add instructions for using html-test * README: Change command to run _all_ the testsuites * README: Add project overview section - - - - - f707d848 by Alec Theriault at 2018-07-05T10:43:35-04:00 Export more fixities for Hoogle (#871) This exports fixities for more things, including class methods and type-level operators. - - - - - a6d2b8dc by Alec Theriault at 2018-07-06T10:06:32-04:00 Avoid line breaks due to line length in Hoogle (#868) * Avoid line breaks due to line length in Hoogle Hoogle operates in a line-oriented fashion, so we should avoid ever breaking due to long lines. One way of doing this non-intrusively is to modify the 'DynFlags' that are threaded through the 'Hoogle' module (note this is anyways only passed through for use in the various 'showSDoc' functions). * Amend test case - - - - - 13819f71 by Alan Zimmerman at 2018-07-15T19:33:51+02:00 Match XFieldOcc rename in GHC Trac haskell/haddock#15386 - - - - - c346aa78 by Simon Jakobi at 2018-07-19T12:29:32+02:00 haddock-library: Bump bounds for containers - - - - - 722e733c by Simon Jakobi at 2018-07-19T13:36:45+02:00 tyThingToLHsDecl: Preserve type synonyms that contain a forall (#880) * tyThingToLHsDecls: Preserve type synonyms that contain a forall Fixes haskell/haddock#879. * Add Note [Invariant: Never expand type synonyms] * Clarify Note [Invariant: Never expand type synonyms] - - - - - f0bd83fd by Alec Theriault at 2018-07-19T14:39:57+02:00 Fix HEAD html-test (#860) * Update tests for 'StarIsType' * Accept tests * Revert "Update tests for 'StarIsType'" This reverts commit 7f0c01383bbba6dc5af554ee82988d2cf44e407a. - - - - - 394053a8 by Simon Jakobi at 2018-07-19T14:58:07+02:00 haddock-library: Bump bounds for containers - - - - - 1bda11a2 by Alec Theriault at 2018-07-20T09:04:03+02:00 Add HEAD.hackage overlay (#887) * Add HEAD.hackage overlay * Add HCPKG variable - - - - - c7b4ab45 by Alec Theriault at 2018-07-20T12:01:16+02:00 Refactor handling of parens in types (#874) * Fix type parenthesization in Hoogle backend Ported the logic in the HTML and LaTeX backends for adding in parens into something top-level in 'GhcUtil'. Calling that from the Hoogle backend fixes haskell/haddock#873. * Remove parenthesizing logic from LaTeX and XHTML backends Now, the only times that parenthesis in types are added in any backend is through the explicit 'HsParTy' constructor. Precedence is also represented as its own datatype. * List out cases explicitly vs. catch-all * Fix printing of parens for QuantifiedConstraints The priority of printing 'forall' types was just one too high. Fixes haskell/haddock#877. * Accept HTML output for quantified contexts test - - - - - c05d32ad by Alec Theriault at 2018-07-20T12:01:49+02:00 Preserve docs on type family instances (#867) * Preserve docs on type family instances The only problem was that the instance location was slightly off for type family instances. * Accept output - - - - - 24b39ee4 by Alec Theriault at 2018-07-20T12:02:16+02:00 Fix broken instance source links (#869) The problem manifests itself in instances that are defined in modules other than the module where the class is defined. The fix is just to thread through the 'Module' of the instance further along. Since orphan instances appear to already have been working, I didn't do anything there. - - - - - cb9d2099 by Simon Jakobi at 2018-07-20T13:39:29+02:00 README updates (#856) * README: Remove mentions of master branch * README: Add instructions for using html-test * README: Change command to run _all_ the testsuites * README: Add project overview section (cherry picked from commit 61d6f935da97eb96685f07bf385102c2dbc2a33c) - - - - - 133f24f5 by Alec Theriault at 2018-07-20T13:39:29+02:00 Export more fixities for Hoogle (#871) This exports fixities for more things, including class methods and type-level operators. (cherry picked from commit 88316b972e3d47197b1019111bae0f7f87275fce) - - - - - 11024149 by Alec Theriault at 2018-07-20T13:39:29+02:00 Avoid line breaks due to line length in Hoogle (#868) * Avoid line breaks due to line length in Hoogle Hoogle operates in a line-oriented fashion, so we should avoid ever breaking due to long lines. One way of doing this non-intrusively is to modify the 'DynFlags' that are threaded through the 'Hoogle' module (note this is anyways only passed through for use in the various 'showSDoc' functions). * Amend test case (cherry picked from commit 657b1b3d519545f8d4ca048c06210d6cbf0f0da0) - - - - - de0c139e by Simon Jakobi at 2018-07-20T13:39:29+02:00 tyThingToLHsDecl: Preserve type synonyms that contain a forall (#880) * tyThingToLHsDecls: Preserve type synonyms that contain a forall Fixes haskell/haddock#879. * Add Note [Invariant: Never expand type synonyms] * Clarify Note [Invariant: Never expand type synonyms] (cherry picked from commit c3eb3f0581f69e816f9453b1747a9f2a3ba02bb9) - - - - - 6435e952 by Alec Theriault at 2018-07-20T13:39:29+02:00 Preserve docs on type family instances (#867) * Preserve docs on type family instances The only problem was that the instance location was slightly off for type family instances. * Accept output (cherry picked from commit 133e9c2c168db19c1135479f7ab144c4e33af2a4) - - - - - 1461af39 by Alec Theriault at 2018-07-20T13:39:29+02:00 Fix broken instance source links (#869) The problem manifests itself in instances that are defined in modules other than the module where the class is defined. The fix is just to thread through the 'Module' of the instance further along. Since orphan instances appear to already have been working, I didn't do anything there. (cherry picked from commit 2de7c2acf9b1ec85b09027a8bb58bf8512e91c05) - - - - - 69d3bde1 by Alec Theriault at 2018-07-20T13:49:47+02:00 Add some more unicode related tests (#872) This has been fixed for sure ever since we switched from attoparsec to parsec. Parts of it may have been working before that, but there was a point where this would have failed (see haskell/haddock#191). A regression test never hurt anyone. :) - - - - - 6a5c73c7 by Alec Theriault at 2018-07-20T13:50:00+02:00 Misc tests (#858) * More tests * spliced types * constructor/pattern argument docs * strictness marks on fields with argument docs * latex test cases need seperate directory * Accept tests - - - - - 92ca94c6 by Alec Theriault at 2018-07-20T13:55:36+02:00 Add some more unicode related tests (#872) This has been fixed for sure ever since we switched from attoparsec to parsec. Parts of it may have been working before that, but there was a point where this would have failed (see haskell/haddock#191). A regression test never hurt anyone. :) (cherry picked from commit 5ec7715d418bfac0f26aec6039792a99a6e89370) - - - - - 981bc7fa by Simon Jakobi at 2018-07-20T15:06:06+02:00 Additional tests for the identifier parser (#816) * Add tests for the identifier parser * docs: Clarify how to delimit identifiers - - - - - 27e7c0c5 by Simon Jakobi at 2018-07-20T15:09:05+02:00 Additional tests for the identifier parser (#816) * Add tests for the identifier parser * docs: Clarify how to delimit identifiers (cherry picked from commit 0861affeca4d72938f05a2eceddfae2c19199071) - - - - - 49e1a415 by Simon Jakobi at 2018-07-20T16:02:02+02:00 Update the ghc-8.6 branch (#889) * Revert "Bump GHC version to 8.6" This was applied to the wrong branch; there's now a `ghc-8.6` branch; ghc-head is always supposed to point to GHC HEAD, i.e. an odd major version. The next version bump to `ghc-head` is supposed to go from e.g. 8.5 to 8.7 This reverts commit 5e3cf5d8868323079ff5494a8225b0467404a5d1. * README updates (#856) * README: Remove mentions of master branch * README: Add instructions for using html-test * README: Change command to run _all_ the testsuites * README: Add project overview section (cherry picked from commit 61d6f935da97eb96685f07bf385102c2dbc2a33c) * Export more fixities for Hoogle (#871) This exports fixities for more things, including class methods and type-level operators. (cherry picked from commit 88316b972e3d47197b1019111bae0f7f87275fce) * Avoid line breaks due to line length in Hoogle (#868) * Avoid line breaks due to line length in Hoogle Hoogle operates in a line-oriented fashion, so we should avoid ever breaking due to long lines. One way of doing this non-intrusively is to modify the 'DynFlags' that are threaded through the 'Hoogle' module (note this is anyways only passed through for use in the various 'showSDoc' functions). * Amend test case (cherry picked from commit 657b1b3d519545f8d4ca048c06210d6cbf0f0da0) * tyThingToLHsDecl: Preserve type synonyms that contain a forall (#880) * tyThingToLHsDecls: Preserve type synonyms that contain a forall Fixes haskell/haddock#879. * Add Note [Invariant: Never expand type synonyms] * Clarify Note [Invariant: Never expand type synonyms] (cherry picked from commit c3eb3f0581f69e816f9453b1747a9f2a3ba02bb9) * Fix HEAD html-test (#860) * Update tests for 'StarIsType' * Accept tests * Revert "Update tests for 'StarIsType'" This reverts commit 7f0c01383bbba6dc5af554ee82988d2cf44e407a. * Refactor handling of parens in types (#874) * Fix type parenthesization in Hoogle backend Ported the logic in the HTML and LaTeX backends for adding in parens into something top-level in 'GhcUtil'. Calling that from the Hoogle backend fixes haskell/haddock#873. * Remove parenthesizing logic from LaTeX and XHTML backends Now, the only times that parenthesis in types are added in any backend is through the explicit 'HsParTy' constructor. Precedence is also represented as its own datatype. * List out cases explicitly vs. catch-all * Fix printing of parens for QuantifiedConstraints The priority of printing 'forall' types was just one too high. Fixes haskell/haddock#877. * Accept HTML output for quantified contexts test * Preserve docs on type family instances (#867) * Preserve docs on type family instances The only problem was that the instance location was slightly off for type family instances. * Accept output (cherry picked from commit 133e9c2c168db19c1135479f7ab144c4e33af2a4) * Fix broken instance source links (#869) The problem manifests itself in instances that are defined in modules other than the module where the class is defined. The fix is just to thread through the 'Module' of the instance further along. Since orphan instances appear to already have been working, I didn't do anything there. (cherry picked from commit 2de7c2acf9b1ec85b09027a8bb58bf8512e91c05) * Add some more unicode related tests (#872) This has been fixed for sure ever since we switched from attoparsec to parsec. Parts of it may have been working before that, but there was a point where this would have failed (see haskell/haddock#191). A regression test never hurt anyone. :) (cherry picked from commit 5ec7715d418bfac0f26aec6039792a99a6e89370) * Misc tests (#858) * More tests * spliced types * constructor/pattern argument docs * strictness marks on fields with argument docs * latex test cases need seperate directory * Accept tests * Additional tests for the identifier parser (#816) * Add tests for the identifier parser * docs: Clarify how to delimit identifiers (cherry picked from commit 0861affeca4d72938f05a2eceddfae2c19199071) - - - - - 5ca14bed by Simon Jakobi at 2018-07-20T16:05:47+02:00 Revert "Revert "Bump GHC version to 8.6"" That commit didn't belong onto the ghc-8.6 branch. This reverts commit acbaef3b9daf1d2dea10017964bf886e77a8e967. - - - - - 2dd600dd by Simon Jakobi at 2018-07-20T16:18:21+02:00 Don't warn about ambiguous identifiers when the candidate names belong to the same type This also changes the defaulting heuristic for ambiguous identifiers. We now prefer local names primarily, and type constructors or class names secondarily. Partially fixes haskell/haddock#854. - - - - - fceb2422 by Simon Jakobi at 2018-07-20T16:18:21+02:00 outOfScope: Recommend qualifying the identifier - - - - - acea5d23 by Simon Jakobi at 2018-07-20T16:19:35+02:00 outOfScope: Recommend qualifying the identifier (cherry picked from commit 73707ed58d879cc04cb644c5dab88c39ca1465b7) - - - - - 1a83ca55 by Simon Jakobi at 2018-07-20T16:19:35+02:00 Don't warn about ambiguous identifiers when the candidate names belong to the same type This also changes the defaulting heuristic for ambiguous identifiers. We now prefer local names primarily, and type constructors or class names secondarily. Partially fixes haskell/haddock#854. (cherry picked from commit d504a2864a4e1982e142cf88c023e7caeea3b76f) - - - - - 48374451 by Masahiro Sakai at 2018-07-20T17:06:42+02:00 Add # as a special character (#884) '#' has special meaning used for anchors and can be escaped using backslash. Therefore it would be nice to be listed as special characters. - - - - - 5e1a5275 by Alec Theriault at 2018-07-20T23:37:24+02:00 Let `haddock-test` bypass interface version check (#890) This means `haddock-test` might * crash during deserialization * deserialize incorrectly Still - it means things _might_ work where they were previously sure not to. - - - - - 27286754 by Yuji Yamamoto at 2018-07-23T08:16:01+02:00 Avoid "invalid argument (invalid character)" on non-unicode Windows (#892) Steps to reproduce and the error message ==== ``` > stack haddock basement ... snip ... Warning: 'A' is out of scope. Warning: 'haddock: internal error: <stdout>: commitBuffer: invalid argument (invalid character) ``` Environment ==== OS: Windows 10 ver. 1709 haddock: [HEAD of ghc-8.4 when I reproduce the error](https://github.com/haskell/haddock/commit/532b209d127e4cecdbf7e9e3dcf4f653a5605b5a). (I had to use this version to avoid another probrem already fixed in HEAD) GHC: 8.4.3 stack: Version 1.7.1, Git revision 681c800873816c022739ca7ed14755e85a579565 (5807 commits) x86_64 hpack-0.28.2 Related pull request ==== https://github.com/haskell/haddock/pull/566 - - - - - 6729d361 by Alec Theriault at 2018-07-23T13:52:56-07:00 Accumulate explicitly which modules to load for 'attachInstances' The old approach to fixing haskell/haddock#469, while correct, consumes a lot of memory. We ended up with a HUGE 'GblRdrEnv' in 'ic_rn_gbl_env'. However, 'getNameToInstancesIndex' takes that environment and compresses it down to a much smaller 'ModuleSet'. Now, we compute that 'ModuleSet' explicitly as we process modules. That way we can just tell 'getNameToInstancesIndex' what modules to load (instead of it trying to compute that information from the interactive context). - - - - - 8cf4e6b5 by Ryan Scott at 2018-07-27T11:28:03-04:00 eqTyCon_RDR now lives in TysWiredIn After GHC commit http://git.haskell.org/ghc.git/commit/f265008fb6f70830e7e92ce563f6d83833cef071 - - - - - 1ad251a6 by Alan Zimmerman at 2018-07-30T13:28:09-04:00 Match XFieldOcc rename in GHC Trac haskell/haddock#15386 (cherry picked from commit e3926b50ab8a7269fd6904b06e881745f08bc5d6) - - - - - 8aea2492 by Richard Eisenberg at 2018-08-02T10:54:17-04:00 Update against new HsImplicitBndrs - - - - - e42cada9 by Alec Theriault at 2018-08-04T17:51:30+02:00 Latex type families (#734) * Support for type families in LaTeX The code is ported over from the XHTML backend. * Refactor XHTML and LaTeX family handling This is mostly a consolidation effort: stripping extra exports, inlining some short definitions, and trying to make the backends match. The LaTeX backend now has preliminary support for data families, although the only the data instance head is printed (not the actual constructors). Both backends also now use "newtype" for newtype data family instances. * Add some tests - - - - - 0e852512 by Alex Biehl at 2018-08-06T13:04:02+02:00 Make --package-version optional for --hoogle generation (#899) * Make --package-version optional for --hoogle generation * Import mkVersion * It's makeVersion not mkVersion - - - - - d2abd684 by Noel Bourke at 2018-08-21T09:34:18+02:00 Remove unnecessary backslashes from docs (#908) On https://haskell-haddock.readthedocs.io/en/latest/markup.html#special-characters the backslash and backtick special characters showed up with an extra backslash before them – I think the escaping is not (or no longer) needed for those characters in rst. - - - - - 7a578a9e by Matthew Pickering at 2018-08-21T09:34:50+02:00 Load plugins when starting a GHC session (#905) Fixes haskell/haddock#900 - - - - - aa3d4db3 by Matthew Pickering at 2018-08-21T09:37:34+02:00 Load plugins when starting a GHC session (#905) Fixes haskell/haddock#900 - - - - - ede91744 by Alec Theriault at 2018-08-21T09:42:52+02:00 Better test output when Haddock crashes on a test (#902) In particular: we report the tests that crashed seperately from the tests that produced incorrect output. In order for tests to pass (and exit 0), they must not crash and must produce the right output. - - - - - 4a872b84 by Guillaume Bouchard at 2018-08-21T09:45:57+02:00 Fix a typo (#878) - - - - - 4dbf7595 by Ben Sklaroff at 2018-08-21T12:04:09-04:00 Add ITcomment_line_prag token to Hyperlinker Parser This token is necessary for parsing #line pragmas inside nested comments. Reviewers: bgamari Reviewed By: bgamari Differential Revision: https://phabricator.haskell.org/D4935 - - - - - 9170b2a9 by Ben Gamari at 2018-08-21T17:55:15-04:00 Merge pull request haskell/haddock#893 from harpocrates/get-name-to-instances Accumulate explicitly which modules to load for 'attachInstances' - - - - - d57b57cc by Ben Gamari at 2018-08-21T17:59:13-04:00 Merge branch 'ghc-head' of github.com:haskell/haddock into ghc-head - - - - - 14601ca2 by Alec Theriault at 2018-08-21T19:09:37-04:00 Accumulate explicitly which modules to load for 'attachInstances' The old approach to fixing haskell/haddock#469, while correct, consumes a lot of memory. We ended up with a HUGE 'GblRdrEnv' in 'ic_rn_gbl_env'. However, 'getNameToInstancesIndex' takes that environment and compresses it down to a much smaller 'ModuleSet'. Now, we compute that 'ModuleSet' explicitly as we process modules. That way we can just tell 'getNameToInstancesIndex' what modules to load (instead of it trying to compute that information from the interactive context). (cherry picked from commit 5c7c596c51d69b92164e9ba920157b36ce2b2ec1) - - - - - 438c645e by Matthew Pickering at 2018-08-21T19:12:39-04:00 Load plugins when starting a GHC session (#905) Fixes haskell/haddock#900 (cherry picked from commit e6aa8fb47b9477cc5ef5e46097524fe83e080f6d) - - - - - a80c5161 by Alec Theriault at 2018-08-21T22:06:40-07:00 Better rendering of unboxed sums/tuples * adds space after/before the '#' marks * properly reify 'HsSumTy' in 'synifyType' - - - - - 88456cc1 by Alec Theriault at 2018-08-21T22:06:40-07:00 Handle promoted tuples in 'synifyType' When we have a fully applied promoted tuple, we can expand it out properly. - - - - - fd1c1094 by Alec Theriault at 2018-08-21T22:19:34-07:00 Accept test cases - - - - - 6e80d9e0 by Alec Theriault at 2018-08-21T22:24:03-07:00 Merge pull request haskell/haddock#914 from harpocrates/feature/unboxed-stuff Better rendering of unboxed sums, unboxed tuples, promoted tuples. - - - - - 181a23f1 by Ben Gamari at 2018-08-23T15:53:48-04:00 Merge remote-tracking branch 'origin/ghc-8.6' into ghc-8.6 - - - - - 3a18c1d8 by Alec Theriault at 2018-08-27T14:15:25-07:00 Properly synify promoted list types We reconstruct promoted list literals whenever possible. That means that 'synifyType' produces '[Int, Bool, ()] instead of (Int ': (() ': (Bool ': ([] :: [Type])))) - - - - - b4794946 by Alec Theriault at 2018-09-03T07:19:55-07:00 Only look at visible types when synifying a 'HsListTy' The other types are still looked at when considering whether to make a kind signature or not. - - - - - a231fce2 by Alec Theriault at 2018-09-03T07:38:10-07:00 Merge pull request haskell/haddock#922 from harpocrates/promoted-lists Properly synify promoted list types - - - - - 0fdf044e by Ningning Xie at 2018-09-15T10:25:58-04:00 Update according to GHC Core changes - - - - - 7379b115 by Ningning Xie at 2018-09-15T15:40:18-04:00 update dataFullSig to work with Co Quantification This should have been in the previous patch, but wasn't. - - - - - cf84a046 by Alec Theriault at 2018-09-17T20:12:18-07:00 Fix/add to various docs * Add documentation for a bunch of previously undocumented options (fixes haskell/haddock#870) * Extend the documentation of `--hoogle` considerably (see haskell/haddock#807) * Describe how to add docs to `deriving` clauses (fixes haskell/haddock#912) * Fix inaccurate docs about hyperlinking infix identifiers (fixes haskell/haddock#780) - - - - - ae017935 by Alec Theriault at 2018-09-22T08:32:16-07:00 Update Travis - - - - - d95ae753 by Alec Theriault at 2018-09-22T09:34:10-07:00 Accept failing tests Also silence orphan warnings. - - - - - f3e67024 by Alec Theriault at 2018-09-22T09:41:23-07:00 Bump haddock-api-2.21.0, haddock-library-1.7.0 * Update CHANGELOGS * Update new versions in Cabal files * Purge references to ghc-8.4/master branches in README - - - - - 3f136d4a by Alec Theriault at 2018-09-22T10:53:31-07:00 Turn haddock-library into a minor release Fix some version bounds in haddock-library too. - - - - - b9def006 by Alec Theriault at 2018-09-22T13:07:35-07:00 keep cabal.project file - - - - - 4909aca7 by Alec Theriault at 2018-10-16T09:36:30-07:00 Build on 7.4 and 7.8 - - - - - 99d20a28 by Herbert Valerio Riedel at 2018-10-16T18:45:52+02:00 Minor tweak to package description - - - - - a8059618 by Herbert Valerio Riedel at 2018-10-16T18:47:24+02:00 Merge pull request haskell/haddock#945 haddock-api 2.21.0 and haddock-library 1.6.1 release - - - - - 2d9bdfc1 by Alec Theriault at 2018-10-16T10:54:21-07:00 Bump haddock-library to 1.7.0 The 1.6.1 release should've been a major bump, since types in the `Documentation.Haddock.Parser.Monad` module changed. This version makes that module internal (as it morally should be). - - - - - ed340cef by Alec Theriault at 2018-10-16T14:59:13-07:00 Merge branch 'ghc-8.4' into ghc-8.6 - - - - - 2821a8df by Alec Theriault at 2018-10-16T15:14:48-07:00 Merge branch 'ghc-8.6' into ghc-head - - - - - a722dc84 by Alec Theriault at 2018-10-16T16:28:55-07:00 Latex type families (#734) * Support for type families in LaTeX The code is ported over from the XHTML backend. * Refactor XHTML and LaTeX family handling This is mostly a consolidation effort: stripping extra exports, inlining some short definitions, and trying to make the backends match. The LaTeX backend now has preliminary support for data families, although the only the data instance head is printed (not the actual constructors). Both backends also now use "newtype" for newtype data family instances. * Add some tests - - - - - 63377496 by Alec Theriault at 2018-10-16T16:39:07-07:00 Update changelog - - - - - 099a0110 by Alec Theriault at 2018-10-16T16:49:28-07:00 Merge pull request haskell/haddock#942 from harpocrates/update-docs Fix & add to documentation - - - - - 0927416f by Alec Theriault at 2018-10-16T16:50:14-07:00 Set UTF-8 encoding before writing files (#934) This should fix haskell/haddock#929, as well as guard against future problems of this sort in other places. Basically replaces 'writeFile' (which selects the users default locale) with 'writeUtf8File' (which always uses utf8). - - - - - 83b7b017 by Alec Theriault at 2018-10-16T17:42:05-07:00 Output pattern synonyms in Hoogle backend (#947) * Output pattern synonyms in Hoogle backend We were previously weren't outputting _any_ pattern synonyms, bundled or not. Now, we output both. Fixes haskell/haddock#946. * Update changelog - - - - - 81e5033d by Alec Theriault at 2018-10-16T18:04:40-07:00 Release `haddock{,-api}-2.22.0` This version will accompany ghc-8.6.2 - - - - - 9661744e by Alex Biehl at 2018-10-18T08:14:32-07:00 Add NewOcean theme And make it the default theme. - - - - - 7ae6d722 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Improve appearance and readability These changes include: - use latest Haskell's logo colors - decrease #content width to improve readability - use nicer font - improve sizes and distances - - - - - 37f8703d by NunoAlexandre at 2018-10-18T08:14:32-07:00 Include custom font in the html head - - - - - 1d5e1d79 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Update html test reference files - - - - - 53b7651f by NunoAlexandre at 2018-10-18T08:14:32-07:00 Make it responsive - It makes small screens taking more space than larger ones - fixes a few issues present in small screens currently - make it look good across different screen sizes. - - - - - 6aa1aeb1 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Make the style consistent with hackage Several things are addressed here: - better responsive behaviour on the header - better space usage - consistent colors overall - other nit PR comments - - - - - 3a250c5c by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Place the package name before the menu links This supports the expected responsive menu design, where the package name appears above the menu links. - - - - - cae699b3 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update html-test reference files The package name element in the package-header is now a div instead of a paragraph, and it is now above the menu ul.links instead of below. - - - - - 2ec7fd2d by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Improve synopsis style and code - Use CSS3 instead of loading pictures to show "+" and "-" symbols - Drop redundant code - - - - - 0c874c01 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Decrease space between code blocks There was too much space between code blocks as pointed out by reviewers. - - - - - 85568ce2 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Add an initial-scale property to all haddock pages This solves an issue reported about the content looking incredibly small on mobile devices. - - - - - c1538926 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Address several PR comments - Darken text color like done for hackage - Move synopsis to left side - Make table of contents stick to the left on wide screens - Wrap links to avoid page overflow - Improve expand/collapse buttons - Fix issue with content size on mobile devices - Fix issue with font-size on landscape mode - Increase width of the content - Change colors of table of contents and synopsis - Etc - - - - - e6639e5f by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Make synopsis scrollable on wide screens When the synopsis is longer than the screen, you can’t see its end and you can't scroll down either, making the content unreachable. - - - - - 1f0591ff by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Improve information density - Reduce font size - Improve space between and within code blocks - Improve alignments - Improve spacing within sub-blocks - - - - - bf083097 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Minor adjustments Bring in some adjustments made to hackage: - link colors - page header show everything when package title is too long - - - - - 10375fc7 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Fix responsive triggers overlap issue The min and max width triggers have the same values, which caused the style resolution to take an intersection of both style declarations when the screen resolution had the size of the limts (say 1280px), causing an odd behaviour and look. - - - - - 95ff2f95 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Fix issue with menu alignment on firefox Reported and described here: https://github.com/haskell/haddock/pull/721#issuecomment-374668869 - - - - - dc86587e by Alex Biehl at 2018-10-18T08:14:32-07:00 Changelog entry for NewOcean - - - - - 27195e47 by Herbert Valerio Riedel at 2018-10-18T08:14:32-07:00 html-test --accept - - - - - 83f4f9c0 by Alex Biehl at 2018-10-18T08:14:32-07:00 Avoid name shadowing - - - - - 231487f1 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update font to PT Sans Also migrate some general text related changes from hackage. - - - - - 313db81a by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Use 'flex' to fix header alignment - - - - - 5087367b by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Misc of tweaks - Update link colors to hackage scheme - Tune spacing between content elements - Update footer style - Fix and improve code blocks identation - - - - - b08020df by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update font in Xhtml.hs to PT Sans - - - - - 78ce06e3 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Improve code blocks styling - Fix and improve spacing - Improve colors and borders - - - - - 81262d20 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Make package-header caption backward-compatible The current html generator of this branch wraps the package-header caption as a div, which does not work (without style adjustments) with the old themes. Changing it from div to span does the trick, without needing to adjust the old stylesheets. - - - - - dc4475cb by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update test-suite reference html pages - - - - - 393d35d8 by Alec Theriault at 2018-10-18T08:25:36-07:00 Accept tests - - - - - a94484ba by Alec Theriault at 2018-10-21T10:29:29-07:00 Fix CHANGELOG - - - - - 8797eca3 by Alec Theriault at 2018-10-21T10:36:19-07:00 Update 'data-files' to include NewOcean stuff - - - - - 1ae51e4a by Simon Jakobi at 2018-10-23T11:29:14+02:00 Fix typo in a warning - - - - - 009ad8e8 by Alec Theriault at 2018-10-24T12:47:47-07:00 Update JS dependencies This was done via `npm audit fix`. I think this fixes haskell/haddock#903 along with some more serious vulnerabilities that nobody seems to have noticed. - - - - - 051994db by Alec Theriault at 2018-10-24T17:31:09-07:00 Resurrect the style-switcher This fixes haskell/haddock#810. Looks like things were broken during the quickjump refactor of the JS. For the (git) record: I do not think the style switcher is a good idea. I'm fixing it for the same reason @mzero added it; as an answer to "rumblings from some that they didn't want their pixels changed on bit" - - - - - 2a1d620f by Alec Theriault at 2018-10-24T17:38:07-07:00 Fix copy-pasta error in data-files - - - - - ed5bfb7f by Alec Theriault at 2018-10-24T20:42:14-07:00 Fix the synopsis button Here's these changes are supposed to do: * put the synopsis back on the right side * properly have it on the edge of the screen on wide screens * adjust the background of the synopsis to match the button (otherwise the grey blends in with what is underneath) * get rid of the dotted purple line * the synopsis contents are now scrollable even when in wide screens (this has been a long-standing bug) - - - - - 883fd74b by Alec Theriault at 2018-10-25T20:16:46-07:00 Avoid more conflicts in generated ids (#954) This fixes haskell/haddock#953 by passing more names into the generated ids. - - - - - ea54e331 by Alec Theriault at 2018-10-25T21:07:12-07:00 Don't hide bullets in method docs I think thst CSS was meant only to deal with fields and the effect on bullets was accidental. Fixes haskell/haddock#926. - - - - - 9a14ef4a by Alec Theriault at 2018-10-25T22:02:07-07:00 Indent more things + slightly smaller font - - - - - b9f17e29 by Alec Theriault at 2018-10-25T22:10:01-07:00 Merge branch 'ghc-8.6' into wip/new-ocean - - - - - 096a3cfa by Alec Theriault at 2018-10-25T22:24:38-07:00 Accept HTML output - - - - - 2669517d by Alec Theriault at 2018-10-26T09:02:35-07:00 User manual + stuff for building GHC docs - - - - - 46b27687 by Alec Theriault at 2018-10-26T09:10:59-07:00 Make 'Contents' in NewOcean scrollable This only happens if the contents block on the left is so big that it doesn't fit (vertically) on the page. If that happens, we want it to be scrollable. - - - - - 3443dd94 by Alec Theriault at 2018-10-26T09:36:46-07:00 Revert "Make 'Contents' in NewOcean scrollable" This reverts commit f909ffd8353d6463fd5dd184998a32aa98d5c922. I missed the fact this also forces the 'Contents' to always go down to the bottom of the page. - - - - - ed081424 by Alec Theriault at 2018-10-26T14:22:23-07:00 Avoid some partiality AFAICT this wasn't causing any crashes, but that's mostly because we happen not to be forcing `pkgStr` when it would diverge. We come dangerously close to doing that in `ppHtmlIndex`. Fixes haskell/haddock#569. - - - - - 6a5bec41 by Alec Theriault at 2018-10-27T10:05:04-07:00 Fix documentation in `haddock-api` (#957) * Fix misplaced Haddocks in Haddock itself Haddock should be able to generate documentation for 'haddock-api' again. * Make CI check that documentation can be built. * Add back a doc that is OK - - - - - 5100450a by Matthew Yacavone at 2018-10-27T14:51:38-04:00 More explicit foralls (GHC Proposal 0007) - - - - - 8771a6b0 by Alec Theriault at 2018-11-05T13:58:11-08:00 Only run MathJax on entities with "mathjax" class (#960) Correspondingly, we wrap all inline/diplay math in <span class="mathjax"> ... the math .... </span> This fixes haskell/haddock#959. - - - - - bd7ff5c5 by Alec Theriault at 2018-11-05T15:54:22-08:00 Deduplicate some work in 'AttachInstances' Perf only change: * avoid needlessly union-ing maps * avoid synify-ing instances twice Took this opportunity to add some docs too - - - - - cf99fd8f by Alec Theriault at 2018-11-05T15:54:22-08:00 Specialize some SYB functions Perf only change: * Add a 'SPECIALIZE' pragma to help GHC optimize a 'Data a =>' constraint * Manually specialize the needlessly general type of 'specializeTyVarBndrs' - - - - - 4f91c473 by Alec Theriault at 2018-11-05T15:54:22-08:00 Improve perf of renaming Perf only change: * don't look up type variable names (they're never in the environment) * use a difference list for accumulating missing names * more efficient 'Functor'/'Applicative' instances for 'RnM' - - - - - 4bbab0d4 by Alec Theriault at 2018-11-05T15:54:22-08:00 Faster 'Text' driven parser combinators Perf only change: * use 'getParserState'/'setParserState' to make 'Text'-optimized parser combinators * minimize uses of 'Data.Text.{pack,unpack,cons,snoc}' - - - - - fa430c02 by Alec Theriault at 2018-11-06T12:03:24-08:00 Support hyperlink labels with inline markup The parser for pictures hasn't been properly adjusted yet. - - - - - c1431035 by Alec Theriault at 2018-11-06T12:03:24-08:00 Support (and flatten) inline markup in image links Inline markup is supported in image links but, as per the [commonmark recommendation][0], it is stripped back to a plain text representation. [0]: https://spec.commonmark.org/0.28/#example-547 - - - - - d4ee1ba5 by Alec Theriault at 2018-11-06T12:03:24-08:00 Accept test case - - - - - 8088aeb1 by Alec Theriault at 2018-11-06T12:03:24-08:00 Fix/add to haddock-library test suite - - - - - e78f644d by Alec Theriault at 2018-11-06T13:26:31-08:00 Bump version bounds - - - - - 644335eb by Alec Theriault at 2018-11-06T13:53:30-08:00 Merge pull request haskell/haddock#875 from harpocrates/feature/markup-in-hyperlinks Inline markup in markdown-style links and images - - - - - e173ed0d by Alec Theriault at 2018-11-07T12:37:18-08:00 Fix issues around plus/minus * swap the minimize unicode to something more intuitive * use new unicode expander/collapser for instance lists * address some alignment issues in the "index" page - - - - - b2d92df7 by Alec Theriault at 2018-11-07T13:41:57-08:00 Allow "Contents" summary to scroll in a fixed div In the unfortunate event that the "Contents" summary doesn't fit vertically (like in the "Prelude"), it will be scrollable. - - - - - ca704c23 by Alec Theriault at 2018-11-07T13:45:15-08:00 Accept HTML output changes - - - - - 82c0ec6d by Alec Theriault at 2018-11-07T18:12:54-08:00 overflow-y 'scroll' -> 'auto' - - - - - 571d7657 by Alec Theriault at 2018-11-08T19:44:12-08:00 Clicking on "Contents" navigates to top of page - - - - - 8065a012 by Alec Theriault at 2018-11-08T19:44:17-08:00 Space out functions more Also, functions and data decls now have the same space before and after them. - - - - - cc650ede by Alec Theriault at 2018-11-09T08:13:35-08:00 Merge branch 'ghc-8.6' into wip/new-ocean - - - - - 65f8c17f by Alec Theriault at 2018-11-10T14:04:06-08:00 Update changelog - - - - - 20473847 by Alec Theriault at 2018-11-10T14:21:40-08:00 Replace oplus/ominus expander/collapser icons with triangles - - - - - 16592957 by Alec Theriault at 2018-11-10T14:35:10-08:00 Merge pull request haskell/haddock#949 from haskell/wip/new-ocean Introduce NewOcean theme. - - - - - 357cefe1 by Alec Theriault at 2018-11-10T16:02:13-08:00 Merge branch 'ghc-8.6' into ghc-head - - - - - de612267 by Alec Theriault at 2018-11-11T20:01:21-08:00 Rename 'NewOcean' theme to 'Linuwial' - - - - - 954b5baa by Alec Theriault at 2018-11-12T08:33:18-08:00 Add blockquote styling Matches b71da1feabf33efbbc517ac376bb690b5a604c2f from hackage-server. Fixes haskell/haddock#967. - - - - - d32c0b0b by Fangyi Zhou at 2018-11-12T10:24:13-08:00 Fix some broken links (#15733) Summary: For links in subpackages as well. https://phabricator.haskell.org/D5257 Test Plan: Manually verify links Reviewers: mpickering, bgamari, osa1 Reviewed By: osa1 GHC Trac Issues: haskell/haddock#15733 Differential Revision: https://phabricator.haskell.org/D5262 - - - - - 41098b1f by Alp Mestanogullari at 2018-11-15T22:40:09+01:00 Follow GHC HEAD's HsTypes.Promoted -> BasicTypes.PromotionFlag change It got introduced in ghc/ghc at ae2c9b40f5b6bf272251d1f4107c60003f541b62. - - - - - c5c1c7e0 by Alec Theriault at 2018-11-15T13:48:13-08:00 Merge pull request haskell/haddock#970 from alpmestan/alp/fix-promotionflag Follow GHC HEAD's HsTypes.Promoted -> BasicTypes.PromotionFlag change - - - - - 6473d3a4 by Shayan-Najd at 2018-11-23T01:38:49+01:00 [TTG: Handling Source Locations] Foundation and Pat Trac Issues haskell/haddock#15495 This patch removes the ping-pong style from HsPat (only, for now), using the plan laid out at https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow/HandlingSourceLocations (solution A). - the class `HasSrcSpan`, and its functions (e.g., `cL` and `dL`), are introduced - some instances of `HasSrcSpan` are introduced - some constructors `L` are replaced with `cL` - some patterns `L` are replaced with `dL->L` view pattern - some type annotation are necessarily updated (e.g., `Pat p` --> `Pat (GhcPass p)`) - - - - - 7a088dfe by Alec Theriault at 2018-11-26T11:11:28-08:00 More uniform handling of `forall`'s in HTML/LaTeX * don't forget to print explicit `forall`'s when there are arg docs * when printing an explicit `forall`, print all tyvars Fixes haskell/haddock#973 - - - - - d735e570 by Alec Theriault at 2018-12-12T08:42:09-08:00 Fix warnings, accept output * remove redundant imports (only brought to light due to recent work for improving redundant import detection) * fix a bug that was casuing exports to appear in reverse order * fix something in haddock-library that prevented compilation on old GHC's - - - - - a3852f8a by Zejun Wu at 2018-12-14T09:37:47-05:00 Output better debug infromation on internal error in extractDecl This will make investigation of haskell/haddock#979 easier - - - - - 2eccb5b9 by Alec Theriault at 2018-12-17T09:25:10-05:00 Refactor names + unused functions (#982) This commit should not introduce any change in functionality! * consistently use `getOccString` to convert `Name`s to strings * compare names directly when possible (instead of comparing strings) * get rid of unused utility functions - - - - - e82e4df8 by Alec Theriault at 2018-12-20T16:16:30-05:00 Load plugins when compiling each module (#983) * WIP: Load (typechecker) plugins from language pragmas * Revert "Load plugins when starting a GHC session (#905)" This reverts commit 72d82e52f2a6225686d9668790ac33c1d1743193. * Simplify plugin initialization code - - - - - 96e86f38 by Alec Theriault at 2018-12-23T10:23:20-05:00 Properly synify and render promoted type variables (#985) * Synify and render properly promoted type variables Fixes haskell/haddock#923. * Accept output - - - - - 23343345 by Alec Theriault at 2018-12-27T16:39:38-05:00 Remove `haddock-test`'s dep. on `syb` (#987) The functionality is easily inlined into one short function: `gmapEverywhere`. This doesn't warrant pulling in another package. - - - - - d0734f21 by Alec Theriault at 2018-12-27T16:39:52-05:00 Address deprecation warnings in `haddock-test` (#988) Fixes haskell/haddock#885. - - - - - 4d9f144e by mynguyen at 2018-12-30T23:42:26-05:00 Visible kind application haddock update - - - - - ffe0e9ed by Alec Theriault at 2019-01-07T13:55:22-08:00 Print kinded tyvars in constructors for Hoogle (#993) Fixes haskell/haddock#992 - - - - - 2e18b55d by Alec Theriault at 2019-01-10T16:42:45-08:00 Accept new output `GHC.Maybe` -> `Data.Maybe` (#996) Since 53874834b779ad0dfbcde6650069c37926da1b79 in GHC, "GHC.Maybe" is marked as `not-home`. That changes around some test output. - - - - - 055da666 by Gabor Greif at 2019-01-22T14:41:51+01:00 Lone typofix - - - - - 01bb71c9 by Alec Theriault at 2019-01-23T11:46:46-08:00 Keep forall on H98 existential data constructors (#1003) The information about whether or not there is a source-level `forall` is already available on a `ConDecl` (as `con_forall`), so we should use it instead of always assuming `False`! Fixes haskell/haddock#1002. - - - - - f9b9bc0e by Ryan Scott at 2019-01-27T09:28:12-08:00 Fix haskell/haddock#1004 with a pinch of dropForAlls - - - - - 5cfcdd0a by Alec Theriault at 2019-01-28T16:49:57-08:00 Loosen 'QuickCheck' and 'hspec' bounds It looks like the new versions don't cause any breakage and loosening the bounds helps deps fit in one stack resolver. - - - - - 3545d3dd by Alec Theriault at 2019-01-31T01:37:25-08:00 Use `.hie` files for the Hyperlinker backend (#977) # Summary This is a large architectural change to the Hyperlinker. * extract link (and now also type) information from `.hie` instead of doing ad-hoc SYB traversals of the `RenamedSource`. Also adds a superb type-on-hover feature (#715). * re-engineer the lexer to avoid needless string conversions. By going directly through GHC's `P` monad and taking bytestring slices, we avoid a ton of allocation and have better handling of position pragmas and CPP. In terms of performance, the Haddock side of things has gotten _much_ more efficient. Unfortunately, much of this is cancelled out by the increased GHC workload for generating `.hie` files. For the full set of boot libs (including `ghc`-the-library) * the sum of total time went down by 9-10% overall * the sum of total allocations went down by 6-7% # Motivation Haddock is moving towards working entirely over `.hi` and `.hie` files. This change means we no longer need the `RenamedSource` from `TypecheckedModule` (something which is _not_ in `.hi` files). # Details Along the way a bunch of things were fixed: * Cross package (and other) links are now more reliable (#496) * The lexer tries to recover from errors on every line (instead of at CPP boundaries) * `LINE`/`COLUMN` pragmas are taken into account * filter out zero length tokens before rendering * avoid recomputing the `ModuleName`-based `SrcMap` * remove the last use of `Documentation.Haddock.Utf8` (see haskell/haddock#998) * restructure temporary folder logic for `.hi`/`.hie` model - - - - - 2ded3359 by Herbert Valerio Riedel at 2019-02-02T12:06:12+01:00 Update/modernise haddock-library.cabal file - - - - - 62b93451 by Herbert Valerio Riedel at 2019-02-02T12:19:31+01:00 Tentatively declare support for unreleased base-4.13/ghc-8.8 - - - - - 6041e767 by Herbert Valerio Riedel at 2019-02-02T16:04:32+01:00 Normalise LICENSE text w/ cabal's BSD2 template Also, correct the `.cabal` files to advertise `BSD2` instead of the incorrect `BSD3` license. - - - - - 0b459d7f by Alec Theriault at 2019-02-02T18:06:12-08:00 CI: fetch GHC from validate artifact Should help make CI be less broken - - - - - 6b5c07cf by Alec Theriault at 2019-02-02T18:06:12-08:00 Fix some Hyperlinker test suite fallout * Amend `ParserSpec` to match new Hyperlinker API - pass in compiler info - strip out null tokens * Make `hypsrc-test` pass reliably - strip out `local-*` ids - strip out `line-*` ids from the `ClangCppBug` test - re-accept output - - - - - ded34791 by Nathan Collins at 2019-02-02T18:31:23-08:00 Update README instructions for Stack No need to `stack install` Haddock to test it. Indeed, `stack install` changes the `haddock` on user's `PATH` if `~/.local/bin` is on user's `PATH` which may not be desirable when hacking on Haddock. - - - - - 723298c9 by Alec Theriault at 2019-02-03T09:11:05-08:00 Remove `Documentation.Haddock.Utf8` The circumstances under which this module appeared are completely gone. The Hyperlinker backend no longer needs this module (it uses the more efficient `Encoding` module from `ghc`). Why no deprecation? Because this module really shouldn't exist! - It isn't used in `haddock-library`/`haddock-api` anymore - It was copy pasted directly from `utf8-string` - Folks seeking a boot-lib only solution can use `ghc`'s `Encoding` - - - - - 51050006 by Alec Theriault at 2019-02-03T22:58:58-08:00 Miscellaneous improvements to `Convert` (#1020) Now that Haddock is moving towards working entirely over `.hi` and `.hie` files, all declarations and types are going to be synthesized via the `Convert` module. In preparation for this change, here are a bunch of fixes to this module: * Add kind annotations to type variables in `forall`'s whose kind is not `Type`, unless the kind can be inferred from some later use of the variable. See `implicitForAll` and `noKindTyVars` in particular if you wish to dive into this. * Properly detect `HsQualTy` in `synifyType`. This is done by following suit with what GHC's `toIfaceTypeX` does and checking the first argument of `FunTy{} :: Type` to see if it classified as a given/wanted in the typechecker (see `isPredTy`). * Beef up the logic around figuring out when an explicit `forall` is needed. This includes: observing if any of the type variables will need kind signatures, if the inferred type variable order _without_ a forall will still match the one GHC claims, and some other small things. * Add some (not yet used) functionality for default levity polymorphic type signatures. This functionality similar to `fprint-explicit-runtime-reps`. Couple other smaller fixes only worth mentioning: * Show the family result signature only when it isn't `Type` * Fix rendering of implicit parameters in the LaTeX and Hoogle backends * Better handling of the return kind of polykinded H98 data declarations * Class decls produced by `tyThingToLHsDecl` now contain associated type defaults and default method signatures when appropriate * Filter out more `forall`'s in pattern synonyms - - - - - 841980c4 by Oleg Grenrus at 2019-02-04T08:44:25-08:00 Make a fixture of weird parsing of lists (#997) The second example is interesting. If there's a list directly after the header, and that list has deeper structure, the parser is confused: It finds two lists: - One with the first nested element, - everything after it I'm not trying to fix this, as I'm not even sure this is a bug, and not a feature. - - - - - 7315c0c8 by Ryan Scott at 2019-02-04T12:17:56-08:00 Fix haskell/haddock#1015 with dataConUserTyVars (#1022) The central trick in this patch is to use `dataConUserTyVars` instead of `univ_tvs ++ ex_tvs`, which displays the foralls in a GADT constructor in a way that's more faithful to how the user originally wrote it. Fixes haskell/haddock#1015. - - - - - ee0b49a3 by Ryan Scott at 2019-02-04T15:25:17-05:00 Changes from haskell/haddock#14579 We now have a top-level `tyConAppNeedsKindSig` function, which means that we can delete lots of code in `Convert`. - - - - - 1c850dc8 by Alan Zimmerman at 2019-02-05T21:54:18+02:00 Matching changes in GHC for haskell/haddock#16236 - - - - - ab03c38e by Simon Marlow at 2019-02-06T08:07:33+00:00 Merge pull request haskell/haddock#1014 from hvr/pr/bsd2-normalise Normalise LICENSE text w/ cabal's BSD2 template - - - - - 5a92ccae by Alec Theriault at 2019-02-10T06:21:55-05:00 Merge remote-tracking branch 'gitlab/wip/T16236-2' into ghc-head - - - - - c0485a1d by Alec Theriault at 2019-02-10T03:32:52-08:00 Removes `haddock-test`s dependency on `xml`/`xhtml` (#1027) This means that `html-test`, `latex-test`, `hoogle-test`, and `hypsrc-test` now only depend on GHC boot libs. So we should now be able to build and run these as part of GHC's testsuite. \o/ The reference output has changed very slightly, in three ways: * we don't convert quotes back into `&quot;` as the `xml` lib did * we don't add extra `&nbsp;` as the `xml` lib did * we now remove the entire footer `div` (instead of just emptying it) - - - - - 65a448e3 by Alec Theriault at 2019-02-11T12:27:41-05:00 Remove workaround for now-fixed Clang CPP bug (#1028) Before LLVM 6.0.1 (or 10.0 on Apple LLVM), there was a bug where lines that started with an octothorpe but turned out not to lex like pragmas would have an extra line added after them. Since this bug has been fixed upstream and that it doesn't have dire consequences anyways, the workaround is not really worth it anymore - we can just tell people to update their clang version (or re-structure their pragma code). - - - - - 360ca937 by Alec Theriault at 2019-02-13T11:36:11-05:00 Clean up logic for guessing `-B` and `--lib` (#1026) Haddock built with the `in-ghc-tree` flag tries harder to find the GHC lib folder and its own resources. This should make it possible to use `in-ghc-tree`-built Haddock without having to specify the `-B` and `--lib` options (just how you can use in-tree GHC without always specifying the `-B` option). The logic to do this relies on `getExecutablePath`, so we only get this auto-detection on platforms where this function works. - - - - - d583e364 by Alec Theriault at 2019-02-16T10:41:22-05:00 Fix tests broken by GHC Changes in 19626218566ea709b5f6f287d3c296b0c4021de2 affected some of the hyperlinker output. Accepted the new output (hovering over a `..` now shows you what that wildcard binds). Also fixed some stray deprecation warnings. - - - - - da0c42cc by Vladislav Zavialov at 2019-02-17T11:39:19+03:00 Parser changes to match !380 - - - - - ab96bed7 by Ryan Scott at 2019-02-18T04:44:08-05:00 Bump ghc version to 8.9 - - - - - 44b7c714 by Alec Theriault at 2019-02-22T05:49:43-08:00 Match GHC changes for T16185 `FunTy` now has an `AnonArgFlag` that indicates whether the arrow is a `t1 => t2` or `t1 -> t2`. This commit shouldn't change any functionality in Haddock. - - - - - 2ee653b1 by Alec Theriault at 2019-02-24T18:53:33-08:00 Update .travis.yml Points to the new GHC CI artifact. - - - - - 90939d71 by Alec Theriault at 2019-02-25T00:42:41-08:00 Support value/type namespaces on identifier links Identifier links can be prefixed with a 'v' or 't' to indicate the value or type namespace of the desired identifier. For example: -- | Some link to a value: v'Data.Functor.Identity' -- -- Some link to a type: t'Data.Functor.Identity' The default is still the type (with a warning about the ambiguity) - - - - - d6ed496c by Alec Theriault at 2019-02-25T00:42:46-08:00 Better identifier parsing * '(<|>)' and '`elem`' now get parsed and rendered properly as links * 'DbModule'/'DbUnitId' now properly get split apart into two links * tuple names now get parsed properly * some more small niceties... The identifier parsing code is more precise and more efficient (although to be fair: it is also longer and in its own module). On the rendering side, we need to pipe through information about backticks/parens/neither all the way through from renaming to the backends. In terms of impact: a total of 35 modules in the entirety of the bootlib + ghc lib docs change. The only "regression" is things like '\0'. These should be changed to @\\0@ (the path by which this previously worked seems accidental). - - - - - 3c3b404c by Alec Theriault at 2019-02-25T22:12:11-08:00 Fix standalone deriving docs Docs on standalone deriving decls for classes with associated types should be associated with the class instance, not the associated type instance. Fixes haskell/haddock#1033 - - - - - d51ef69e by Alec Theriault at 2019-02-26T19:14:59-08:00 Fix bogus identifier defaulting This avoids a situation in which an identifier would get defaulted to a completely different identifier. Prior to this commit, the 'Bug1035' test case would hyperlink 'Foo' into 'Bar'! Fixes haskell/haddock#1035. - - - - - 88cbbdc7 by Ryan Scott at 2019-02-27T10:14:03-05:00 Visible dependent quantification (#16326) changes - - - - - 0dcf6cee by Xia Li-yao at 2019-02-27T21:53:27-05:00 Menu item controlling which instances are expanded/collapsed (#1007) Adds a menu item (like "Quick Jump") for options related to displaying instances. This provides functionality for: * expanding/collapsing all instances on the currently opened page * controlling whether instances are expanded/collapsed by default * controlling whether the state of instances should be "remembered" This new functionality is implemented in Typescript in `details-helper`. The built-in-themes style switcher also got a revamp so that all three of QuickJump, the style switcher, and instance preferences now have the same style and implementation structure. See also: https://mail.haskell.org/pipermail/haskell-cafe/2019-January/130495.html Fixes haskell/haddock#698. Co-authored-by: Lysxia <lysxia at gmail.com> Co-authored-by: Nathan Collins <conathan at galois.com> - - - - - 3828c0fb by Alec Theriault at 2019-02-28T12:42:49-05:00 `--show-interface` should output to stdout. (#1040) Fixes haskell/haddock#864. - - - - - a50f4cda by gbaz at 2019-03-01T07:43:16-08:00 Increase contrast of Linuwal theme (#1037) This is to address the concern that, on less nice and older screens, some of the shades of grey blend in too easily with the white background. * darken the font slightly * darken slightly the grey behind type signatures and such * add a border and round the corners on code blocks * knock the font down by one point - - - - - ab4d41de by Alec Theriault at 2019-03-03T09:23:26-08:00 Merge branch 'ghc-8.6' into ghc-8.8 - - - - - 12f509eb by Ben Gamari at 2019-03-04T22:13:20-05:00 Remove reference to Opt_SplitObjs flag Split-objects has been removed. - - - - - 5b3e4c9a by Ryan Scott at 2019-03-06T19:16:24-05:00 Update html-test output to reflect haskell/haddock#16391 changes - - - - - fc228af1 by Alec Theriault at 2019-03-09T08:29:23-08:00 Match changes for "Stop inferring over-polymorphic kinds" The `hsq_ext` field of `HsQTvs` is now just the implicit variables (instead of also including information about which of these variables are dependent). This commit shouldn't change any functionality in Haddock. - - - - - 6ac109eb by Alec Theriault at 2019-03-09T11:22:55-08:00 Add .hi, .dyn_hi, etc files to .gitignore Fixes haskell/haddock#1030. - - - - - b55f0c05 by Alec Theriault at 2019-03-09T11:22:55-08:00 Better support for default methods in classes * default methods now get rendered differently * default associated types get rendered * fix a forgotten `s/TypeSig/ClassOpSig/` refactor in LaTeX backend * LaTeX backend now renders default method signatures NB: there is still no way to document default class members and the NB: LaTeX backend still crashes on associated types - - - - - 10aea0cf by Alec Theriault at 2019-03-09T11:22:55-08:00 Avoid multi-line `emph` in LaTeX backend `markupWarning` often processes inputs which span across paragraphs. Unfortunately, LaTeX's `emph` is not made to handle this (and will crash). Fixes haskell/haddock#936. - - - - - d22dc2c9 by Alec Theriault at 2019-03-09T11:22:55-08:00 Many LaTeX backend fixes After this commit, we can run with `--latex` on all boot libraries without crashing (although the generated LaTeX still fails to compile in a handful of larger packages like `ghc` and `base`). * Add newlines after all block elements in LaTeX. This is important to prevent the final output from being more an more indented. See the `latext-test/src/Example` test case for a sample of this. * Support associated types in class declarations (but not yet defaults) * Several small issues for producing compiling LaTeX; - avoid empy `\haddockbeginargs` lists (ex: `type family Any`) - properly escape identifiers depending on context (ex: `Int#`) - add `vbox` around `itemize`/`enumerate` (so they can be in tables) * Several spacing fixes: - limit the width of `Pretty`-arranged monospaced code - cut out extra space characters in export lists - only escape spaces if there are _multiple_ spaces - allow type signatures to be multiline (even without docs) * Remove uninteresting and repetitive `main.tex`/`haddock.sty` files from `latex-test` test reference output. Fixes haskell/haddock#935, haskell/haddock#929 (LaTeX docs for `text` build & compile) Fixes haskell/haddock#727, haskell/haddock#930 (I think both are really about type families...) - - - - - 0e6cee00 by Alec Theriault at 2019-03-29T12:11:56-07:00 Remove workaround for now-fixed Clang CPP bug (#1028) Before LLVM 6.0.1 (or 10.0 on Apple LLVM), there was a bug where lines that started with an octothorpe but turned out not to lex like pragmas would have an extra line added after them. Since this bug has been fixed upstream and that it doesn't have dire consequences anyways, the workaround is not really worth it anymore - we can just tell people to update their clang version (or re-structure their pragma code). - - - - - ce05434d by Alan Zimmerman at 2019-03-29T12:12:11-07:00 Matching changes in GHC for haskell/haddock#16236 (cherry picked from commit 3ee6526d4ae7bf4deb7cd1caf24b3d7355573576) - - - - - d85766b2 by Ben Gamari at 2019-03-29T12:14:04-07:00 Bump GHC to 8.8 - - - - - 5a82cbaf by Oleg Grenrus at 2019-05-05T13:02:00-07:00 Redo ParseModuleHeader - - - - - b9033348 by Oleg Grenrus at 2019-05-05T13:02:00-07:00 Comment C, which clarifies why e.g. ReadP is not enough - - - - - bb55c8f4 by Alec Theriault at 2019-05-13T16:10:07-07:00 Remove outdated `.ghci` files and `scripts` The `.ghci` files are actively annoying when trying to `cabal v2-repl`. As for the `scripts`, the distribution workflow is completely different. - - - - - 5ee244dc by Alec Theriault at 2019-05-13T16:10:07-07:00 Remove obsolete arcanist files + STYLE Now that GHC is hosted on Gitlab, the arcanist files don't make sense anymore. The STYLE file contains nothing more than a dead link too. - - - - - d07c1928 by Oleg Grenrus at 2019-05-13T16:41:43-07:00 Redo ParseModuleHeader - - - - - 492762d2 by Oleg Grenrus at 2019-05-13T16:41:43-07:00 Comment C, which clarifies why e.g. ReadP is not enough - - - - - af2ac773 by Ryan Scott at 2019-05-14T17:22:13-04:00 Changes for haskell/haddock#16110/#16356 - - - - - 6820ed0d by Alec Theriault at 2019-05-17T08:51:27-07:00 Unbreak haskell/haddock#1004 test case `fail` is no longer part of `Monad`. - - - - - 6bf7be98 by Alec Theriault at 2019-05-17T08:51:27-07:00 Fix haskell/haddock#1063 with better parenthesization logic for contexts The only other change in html/hoogle/hyperlinker output for the boot libraries that this caused is a fix to some Hoogle output for implicit params. ``` $ diff -r _build/docs/ old_docs diff -r _build/docs/html/libraries/base/base.txt old_docs/html/libraries/base/base.txt 13296c13296 < assertError :: (?callStack :: CallStack) => Bool -> a -> a --- > assertError :: ?callStack :: CallStack => Bool -> a -> a ``` - - - - - b5716b61 by Ryan Scott at 2019-05-22T17:24:32-04:00 Match changes with haskell/haddock#14332 - - - - - c115abf6 by Alec Theriault at 2019-05-26T16:01:58-04:00 Remove Haddock's dependency on `Cabal` At this point, Haddock depended on Cabal-the-library solely for a verbosity parser (which misleadingly accepts all sorts of verbosity options that Haddock never uses). Now, the only dependency on Cabal is for `haddock-test` (which uses Cabal to locate the Haddock interface files of a couple boot libraries). - - - - - e5b2d4a3 by Alec Theriault at 2019-05-26T16:16:25-04:00 Regression test: promoted lists in associated types When possible, associated types with promoted lists should use the promoted list literal syntax (instead of repeated applications of ': and '[]). This was fixed in 2122de5473fd5b434af690ff9ccb1a2e58491f8c. Closes haskell/haddock#466, - - - - - cc5ad5d3 by Alec Theriault at 2019-05-26T17:55:54-04:00 Merge branch 'ghc-8.6' into ghc-8.8 - - - - - 4b3301a6 by Alec Theriault at 2019-05-26T17:57:52-04:00 Release haddock-2.23, haddock-library-1.8.0 Tentatively adjust bounds and changelogs for the release to be bundled with GHC 8.8.1. - - - - - 69c7cfce by Matthew Pickering at 2019-05-30T10:54:27+01:00 Update hyperlinker tests for new types in .hie files - - - - - 29b7e738 by Zubin Duggal at 2019-05-30T10:57:51+01:00 update for new way to store hiefile headers - - - - - aeca5d5f by Zubin Duggal at 2019-06-04T18:57:42-04:00 update for new way to store hiefile headers - - - - - ba2ca518 by Ben Gamari at 2019-06-07T23:11:14+00:00 Update test output for introduction of Safe-Inferred - - - - - 3a975a6c by Ryan Scott at 2019-07-03T12:06:27-04:00 Changes for haskell/haddock#15247 - - - - - 0df46555 by Zubin Duggal at 2019-07-22T10:52:50+01:00 Fix haddockHypsrcTest - - - - - 2688686b by Sylvain Henry at 2019-09-12T23:19:39+02:00 Fix for GHC module renaming - - - - - 9ec0f3fc by Alec Theriault at 2019-09-20T03:21:00-04:00 Fix Travis CI, loosen .cabal bounds (#1089) Tentatively for the 2.23 release: * updated Travis CI to work again * tweaked bounds in the `.cabal` files * adjusted `extra-source-files` to properly identify test files - - - - - ca559beb by Matthías Páll Gissurarson at 2019-09-28T12:14:40-04:00 Small change in to facilitate extended typed-holes (#1090) This change has no functional effect on haddock itself, it just changes one pattern to use `_ (` rather than `_(`, so that we may use `_(` as a token for extended typed-holes later. - - - - - 02e28976 by Vladislav Zavialov at 2019-09-28T12:17:45-04:00 Remove spaces around @-patterns (#1093) This is needed to compile `haddock` when [GHC Proposal haskell/haddock#229](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0229-whitespace-bang-patterns.rst) is implemented. - - - - - 83cbbf55 by Alexis King at 2019-09-30T21:12:42-04:00 Fix the ignore-exports option (#1082) The `ignore-exports` option has been broken since haskell/haddock#688, as mentioned in https://github.com/haskell/haddock/pull/766#issue-172505043. This PR fixes it. - - - - - e127e0ab by Ben Gamari at 2019-10-06T15:12:06-04:00 Fix a few haddock issues - - - - - 3a0f5c89 by Zubin Duggal at 2019-10-07T17:56:13-04:00 Fix crash when there are no srcspans in the file due to CPP - - - - - 339c5ff8 by Alec Theriault at 2019-10-07T17:56:13-04:00 Prefer un-hyperlinked sources to no sources It is possible to fail to extract an HIE ast. This is however not a reason to produce _no_ output - we should still make a colorized HTML page. - - - - - d47ef478 by Alec Theriault at 2019-10-07T17:56:13-04:00 Add a regression test for haskell/haddock#1091 Previously, this input would crash Haddock. - - - - - ed7c8b0f by Alec Theriault at 2019-10-07T20:56:48-04:00 Add Hyperlinker test cases for TH-related stuff Hopefully this will guard against regressions around quasiquotes, TH quotes, and TH splices. - - - - - d00436ab by Andreas Klebinger at 2019-10-21T15:53:03+02:00 Refactor for withTiming changes. - - - - - 4230e712 by Ben Gamari at 2019-10-22T09:36:37-04:00 Merge pull request haskell/haddock#1101 from AndreasPK/withTimingRefactor Refactor for withTiming changes. - - - - - d155c5f4 by Ryan Scott at 2019-10-23T10:37:17-04:00 Reify oversaturated data family instances correctly (#1103) This fixes haskell/haddock#1103 by adapting the corresponding patch for GHC (see https://gitlab.haskell.org/ghc/ghc/issues/17296 and https://gitlab.haskell.org/ghc/ghc/merge_requests/1877). - - - - - 331a5adf by Sebastian Graf at 2019-10-25T17:14:40+02:00 Refactor for OutputableBndrId changes - - - - - 48a490e0 by Ben Gamari at 2019-10-27T10:16:16-04:00 Merge pull request haskell/haddock#1105 from sgraf812/wip/flexible-outputable Refactor for OutputableBndrId changes - - - - - f62a7dfc by Sebastian Graf at 2019-11-01T11:54:16+00:00 Define `XRec` for location information and get rid of `HasSrcSpan` In https://gitlab.haskell.org/ghc/ghc/merge_requests/1970 I propose a simpler way to encode location information into the GHC and Haddock AST while incurring no cost for e.g. TH which doesn't need location information. These are just changes that have to happen in lock step. - - - - - d9b242ed by Ryan Scott at 2019-11-03T13:20:03-05:00 Changes from haskell/haddock#14579 We now have a top-level `tyConAppNeedsKindSig` function, which means that we can delete lots of code in `Convert`. (cherry picked from commit cfd682c5fd03b099a3d78c44f9279faf56a0ac70) - - - - - dfd42406 by Sebastian Graf at 2019-11-04T07:02:14-05:00 Define `XRec` for location information and get rid of `HasSrcSpan` In https://gitlab.haskell.org/ghc/ghc/merge_requests/1970 I propose a simpler way to encode location information into the GHC and Haddock AST while incurring no cost for e.g. TH which doesn't need location information. These are just changes that have to happen in lock step. - - - - - 0b15be7c by Ben Gamari at 2019-11-09T13:21:33-05:00 Import isRuntimeRepVar from Type rather than TyCoRep isRuntimeRepVar is not longer exported from TyCoRep due to ghc#17441. - - - - - 091f7283 by Ben Gamari at 2019-11-10T12:47:06-05:00 Bump to GHC 8.10 - - - - - e88c71f2 by Ben Gamari at 2019-11-14T00:22:24-05:00 Merge pull request haskell/haddock#1110 from haskell/wip/T17441 Import isRuntimeRepVar from Type rather than TyCoRep - - - - - 4e0bbc17 by Ben Gamari at 2019-11-14T00:22:45-05:00 Version bumps for GHC 8.11 - - - - - 0e85ceb4 by Ben Gamari at 2019-11-15T11:59:45-05:00 Bump to GHC 8.10 - - - - - 00d6d68b by Ben Gamari at 2019-11-16T18:35:58-05:00 Bump ghc version to 8.11 - - - - - dde1fc3f by Ben Gamari at 2019-11-16T20:40:37-05:00 Drop support for base 4.13 - - - - - f52e331d by Vladislav Zavialov at 2019-11-24T13:02:28+03:00 Update Hyperlinker.Parser.classify to use ITdollar - - - - - 1ad96198 by Vladislav Zavialov at 2019-11-28T16:12:33+03:00 Remove HasSrcSpan (#17494) - - - - - 651afd70 by Herbert Valerio Riedel at 2019-12-08T12:08:16+01:00 Document error-prone conditional definition of instances This can easily trip up people if one isn't aware of it. Usually it's better to avoid this kind of conditionality especially for typeclasses for which there's an compat-package as conditional instances like these tend to fragment the ecosystem into those packages that go the extra mile to provide backward compat via those compat-packages and those that fail to do so. - - - - - b521af56 by Herbert Valerio Riedel at 2019-12-08T12:09:54+01:00 Fix build-failure regression for base < 4.7 The `$>` operator definition is available only since base-4.7 which unfortunately wasn't caught before release to Hackage (but has been fixed up by a metadata-revision) This commit introduces a `CompatPrelude` module which allows to reduce the amount of CPP by ousting it to a central location, i.e. the new `CompatPrelude` module. This pattern also tends to reduce the tricks needed to silence unused import warnings. Addresses haskell/haddock#1119 - - - - - 556c375d by Sylvain Henry at 2020-01-02T19:01:55+01:00 Fix after Iface modules renaming - - - - - bd6c53e5 by Sylvain Henry at 2020-01-07T00:48:48+01:00 hsyl20-modules-renamer - - - - - fb23713b by Ryan Scott at 2020-01-08T07:41:13-05:00 Changes for GHC#17608 See https://gitlab.haskell.org/ghc/ghc/merge_requests/2372 - - - - - 4a4dd382 by Ryan Scott at 2020-01-25T08:08:26-05:00 Changes for GHC#17566 See https://gitlab.haskell.org/ghc/ghc/merge_requests/2469 - - - - - e782a44d by Sylvain Henry at 2020-01-26T02:12:37+01:00 Rename PackageConfig into UnitInfo - - - - - ba3c9f05 by Sylvain Henry at 2020-01-26T02:12:37+01:00 Rename lookupPackage - - - - - ab37f9b3 by Ben Gamari at 2020-01-29T13:00:44-05:00 Merge pull request haskell/haddock#1125 from haskell/wip/T17566-take-two Changes for GHC#17566 - - - - - 3ebd5ae0 by Ryan Scott at 2020-01-31T05:56:50-05:00 Merge branch 'wip-hsyl20-package-refactor' into ghc-head - - - - - 602a747e by Richard Eisenberg at 2020-02-04T09:05:43+00:00 Echo GHC's removal of PlaceHolder module This goes with GHC's !2083. - - - - - ccfe5679 by Sylvain Henry at 2020-02-10T10:13:56+01:00 Module hierarchy: runtime (cf haskell/haddock#13009) - - - - - 554914ce by Cale Gibbard at 2020-02-10T16:10:39-05:00 Fix build of haddock in stage1 We have to use the correct version of the GHC API, but the version of the compiler itself doesn't matter. - - - - - 5b6fa2a7 by John Ericson at 2020-02-10T16:18:07-05:00 Noramlize `tested-with` fields in cabal files - - - - - e6eb3ebe by Vladislav Zavialov at 2020-02-16T13:25:26+03:00 No MonadFail/Alternative for P - - - - - 90e181f7 by Ben Gamari at 2020-02-18T14:13:47-05:00 Merge pull request haskell/haddock#1129 from obsidiansystems/wip/fix-stage1-build Fix build of haddock in stage1 - - - - - 93b64636 by Sylvain Henry at 2020-02-19T11:20:27+01:00 Modules: Driver (#13009) - - - - - da4f6c7b by Vladislav Zavialov at 2020-02-22T15:33:02+03:00 Use RealSrcSpan in InstMap - - - - - 479b1b50 by Ben Gamari at 2020-02-23T10:28:13-05:00 Merge remote-tracking branch 'upstream/ghc-head' into HEAD - - - - - 55ecacf0 by Sylvain Henry at 2020-02-25T15:18:27+01:00 Modules: Core (#13009) - - - - - 60867b3b by Vladislav Zavialov at 2020-02-28T15:53:52+03:00 Ignore the BufLoc/BufSpan added in GHC's !2516 - - - - - 1e5506d3 by Sylvain Henry at 2020-03-02T12:32:43+01:00 Modules: Core (#13009) - - - - - 6fb53177 by Richard Eisenberg at 2020-03-09T14:49:40+00:00 Changes in GHC's !1913. - - - - - 30b792ea by Ben Gamari at 2020-03-16T12:45:02-04:00 Merge pull request haskell/haddock#1130 from hsyl20/wip/hsyl20-modules-core2 Modules: Core (#13009) - - - - - cd761ffa by Sylvain Henry at 2020-03-18T15:24:00+01:00 Modules: Types - - - - - b6646486 by Ben Gamari at 2020-03-18T14:42:43-04:00 Merge pull request haskell/haddock#1133 from hsyl20/wip/hsyl20/modules/types Modules: Types - - - - - 9325d734 by Kleidukos at 2020-03-19T12:38:31-04:00 Replace the 'caption' class so that the collapsible sections are shown - - - - - 5e2bb555 by Kleidukos at 2020-03-19T12:38:31-04:00 Force ghc-8.8.3 - - - - - c6fcd0aa by Kleidukos at 2020-03-19T12:38:31-04:00 Update test fixtures - - - - - 5c849cb1 by Sylvain Henry at 2020-03-20T09:34:39+01:00 Modules: Types - - - - - 7f439155 by Alec Theriault at 2020-03-20T20:17:01-04:00 Merge branch 'ghc-8.8' into ghc-8.10 - - - - - b7904e5c by Alina Banerjee at 2020-03-20T20:24:17-04:00 Update parsing to strip whitespace from table cells (#1074) * Update parsing to strip leading & trailing whitespace from table cells * Update fixture data to disallow whitespaces at both ends in table cells * Add test case for whitespaces stripped from both ends of table cells * Update table reference test data for html tests - - - - - b9d60a59 by Alec Theriault at 2020-03-22T11:46:42-04:00 Clean up warnings * unused imports * imports of `Data.List` without import lists * missing `CompatPrelude` file in `.cabal` - - - - - 0c317dbe by Alec Theriault at 2020-03-22T18:46:54-04:00 Fix NPM security warnings This was done by calling `npm audit fix`. Note that the security issues seem to have been entirely in the build dependencies, since the output JS has not changed. - - - - - 6e306242 by Alec Theriault at 2020-03-22T20:10:52-04:00 Tentative 2.24 release Adjusted changelogs and versions in `.cabal` files in preparation for the upcoming release bundled with GHC 8.10. - - - - - 1bfb4645 by Ben Gamari at 2020-03-23T16:40:54-04:00 Merge commit '3c2944c037263b426c4fe60a3424c27b852ea71c' into HEAD More changes from the GHC types module refactoring. - - - - - be8c6f3d by Alec Theriault at 2020-03-26T20:10:53-04:00 Update `.travis.yml` to work with GHC 8.10.1 * Regenerated the Travis file with `haskell-ci` * Beef up `.cabal` files with more `tested-with` information - - - - - b025a9c6 by Alec Theriault at 2020-03-26T20:10:53-04:00 Update README Removed some out of date links/info, added some more useful links. * badge to Hackage * update old trac link * `ghc-head` => `ghc-8.10` * `cabal new-*` is now `cabal v2-*` and it should Just Work * `--test-option='--accept'` is the way to accept testsuite output - - - - - 564d889a by Alec Theriault at 2020-03-27T20:34:33-04:00 Fix crash in `haddock-library` on unicode space Our quickcheck tests for `haddock-library` stumbled across an edge case input that was causing Haddock to crash: it was a unicode space character. The root cause of the crash is that we were implicitly assuming that if a space character was not " \t\f\v\r", it would have to be "\n". We fix this by instead defining horizontal space as: any space character that is not '\n'. Fixes haskell/haddock#1142 - - - - - 2d360ba1 by Alec Theriault at 2020-03-27T21:57:32-04:00 Disallow qualified uses of reserved identifiers This a GHC bug (https://gitlab.haskell.org/ghc/ghc/issues/14109) too, but it is a relatively easy fix in Haddock. Note that the fix must live in `haddock-api` instead of `haddock-library` because we can only really decide if an identifier is a reserved one by asking the GHC lexer. Fixes haskell/haddock#952 - - - - - 47ae22ed by Alec Theriault at 2020-03-28T13:36:25-04:00 Remove unused `Haddock.Utils` functions * removed functions in `Haddock.Utils` that were not used anywhere (or exported from the `haddock-api` package) * moved GHC-specific utils from `Haddock.Utils` to `Haddock.GhcUtils` - - - - - c0291245 by Alec Theriault at 2020-03-28T13:36:25-04:00 Use TTG empty extensions to remove some `error`'s None of these error cases should ever have been reachable, so this is just a matter of leveraging the type system to assert this. * Use the `NoExtCon` and `noExtCon` to handle case matches for no extension constructors, instead of throwing an `error`. * Use the extension field of `HsSpliceTy` to ensure that this variant of `HsType` cannot exist in an `HsType DocNameI`. - - - - - 0aff8dc4 by Alec Theriault at 2020-03-28T13:36:25-04:00 Use `unLoc`/`noLoc` from GHC instead of `unL`/`reL` * `unL` is already defined by GHC as `unLoc` * `reL` is already defined by GHC as `noLoc` (in a safer way too!) * Condense `setOutputDir` and add a about exporting from GHC Fixes haskell/haddock#978 - - - - - bf6f2fb7 by Alec Theriault at 2020-03-28T13:36:25-04:00 Cleanup up GHC flags in `.cabal` files * enable more useful warning flags in `haddock-api`, handle the new warnings generated * remove `-fwarn-tabs` (now we'd use `-Wtabs`, but this has been in `-Wall` for a while now) - - - - - c576fbf1 by Alec Theriault at 2020-03-28T13:36:25-04:00 `haddock-library` document header level Document the fact the header level is going to always be between 1 and 6 inclusive. Along the way, I also optimized the parsing code a bit. - - - - - 71bce0ee by Alec Theriault at 2020-03-28T14:26:27-04:00 Disallow links in section headers This is quite straightforward to implement, since we already had a function `docToHtmlNoAnchors` (which we used to generate the link in the sidebar "Contents"). This breaks test `Bug387`, but that test case has aged badly: we now automatically generate anchors for all headings, so manually adding an anchor in a section makes no sense. Nested anchors are, as pointed out in haskell/haddock#1054, disallowed by the HTML standard. Fixes haskell/haddock#1054 - - - - - b461b0ed by Sylvain Henry at 2020-03-30T10:34:23+02:00 Modules: type checker - - - - - cd8cd1ee by Ben Gamari at 2020-03-31T12:45:02-04:00 Merge pull request haskell/haddock#1152 from hsyl20/wip/hsyl20/modules/tc Module renaming - - - - - 5e8f8ea7 by Felix Yan at 2020-04-01T17:58:06-07:00 Allow QuickCheck 2.14 Builds fine and all tests pass. - - - - - dc6b1633 by Sylvain Henry at 2020-04-05T16:43:44+02:00 Module renaming: amend previous patch - - - - - eee2f4ae by Ryan Scott at 2020-04-05T09:04:43-07:00 Fix haskell/haddock#1050 by filtering out invisible AppTy arguments This makes the `synifyType` case for `AppTy` more intelligent by taking into consideration the visibilities of each `AppTy` argument and filtering out any invisible arguments, as they aren't intended to be displayed in the source code. (See haskell/haddock#1050 for an example of what can happen if you fail to filter these out.) Along the way, I noticed that a special `synifyType` case for `AppTy t1 (CoercionTy {})` could be consolidated with the case below it, so I took the opportunity to tidy this up. - - - - - 23eb99e8 by Ben Gamari at 2020-04-07T11:19:58-04:00 Merge pull request haskell/haddock#1154 from hsyl20/wip/hsyl20/modules/tc Module renaming: amend previous patch - - - - - 072d994d by Ryan Scott at 2020-04-07T19:32:47-04:00 Make NoExtCon fields strict These changes are a part of a fix for [GHC#17992](https://gitlab.haskell.org/ghc/ghc/issues/17992). - - - - - d8ebf6c8 by Ignat Insarov at 2020-04-09T21:15:01-04:00 Recode Doc to Json. (#1159) * Recode Doc to Json. * More descriptive field labels. - - - - - 52df4b4e by Sylvain Henry at 2020-04-10T12:39:18+02:00 Module renaming - - - - - d9ab8ec8 by Cale Gibbard at 2020-04-14T11:43:34-04:00 Add instance of XCollectPat for DocNameI - - - - - 323d221d by Cale Gibbard at 2020-04-14T11:43:34-04:00 Rename XCollectPat -> CollectPass - - - - - 2df80867 by Alec Theriault at 2020-04-15T07:30:51-07:00 Prune docstrings that are never rendered When first creating a Haddock interface, trim `ifaceDocMap` and `ifaceArgMap` to not include docstrings that can never appear in the final output. Besides checking with GHC which names are exported, we also need to keep all the docs attached to instance declarations (it is much tougher to detect when an instance is fully private). This change means: * slightly smaller interface files (7% reduction on boot libs) * slightly less work to do processing docstrings that aren't used * no warnings in Haddock's output about private docstrings (see haskell/haddock#1070) I've tested manually that this does not affect any of the boot library generated docs (the only change in output was some small re-ordering in a handful of instance lists). This should mean no docstrings have been incorrectly dropped. - - - - - f49c90cc by Alec Theriault at 2020-04-15T07:30:51-07:00 Don't warn about missing links in miminal sigs When renaming the Haddock interface, never emit warnings when renaming a minimal signature. Also added some documention around `renameInterface`. Minimal signatures intentionally include references to potentially un-exported methods (see the discussion in haskell/haddock#330), so it is expected that they will not always have a link destination. On the principle that warnings should always be resolvable, this shouldn't produce a warning. See haskell/haddock#1070. - - - - - a9eda64d by Ben Gamari at 2020-04-17T09:27:35-04:00 Merge pull request haskell/haddock#1160 from hsyl20/wip/hsyl20/modules/systools Module renaming - - - - - f40d7879 by Cale Gibbard at 2020-04-20T11:30:38-04:00 Merge remote-tracking branch 'origin/ghc-head' into wip/ttg-con-pat - - - - - a50e7753 by Ben Gamari at 2020-04-20T11:36:10-04:00 Merge pull request haskell/haddock#1165 from obsidiansystems/wip/ttg-con-pat Trees that Grow refactor (GHC !2553) - - - - - 6a24795c by Alec Theriault at 2020-04-21T08:06:45-07:00 Fallback to `hiDecl` when `extractDecl` fails Sometimes, the declaration being exported is a subdecl (for instance, a record accessor getting exported at the top-level). For these cases, Haddock has to find a way to produce some synthetic sensible top-level declaration. This is done with `extractDecl`. As is shown by haskell/haddock#1067, this is sometimes impossible to do just at a syntactic level (for instance when the subdecl is re-exported). In these cases, the only sensible thing to do is to try to reify a declaration based on a GHC `TyThing` via `hiDecl`. - - - - - eee1a8b7 by Sylvain Henry at 2020-04-24T15:46:05+02:00 Module structure - - - - - 50b9259c by Iñaki at 2020-04-25T18:38:11-04:00 Add support for custom section anchors (#1179) This allows to have stable anchors for groups, even if the set of groups in the documentation is altered. The syntax for setting the anchor of a group is -- * Group name #desiredAnchor# Which will produce an html anchor of the form '#g:desiredAnchor' Co-authored-by: Iñaki García Etxebarria <git at inaki.blueleaf.cc> - - - - - 4003c97a by Ben Gamari at 2020-04-26T09:35:15-04:00 Merge pull request haskell/haddock#1166 from hsyl20/wip/hsyl20/modules/utils Module structure - - - - - 5206ab60 by Sylvain Henry at 2020-04-27T16:47:39+02:00 Renamed UnitInfo fields - - - - - c32c333b by Sylvain Henry at 2020-04-27T17:32:58+02:00 UnitId has been renamed into Unit - - - - - 3e87db64 by Sylvain Henry at 2020-04-27T17:36:00+02:00 Fix for GHC.Unit.* modules - - - - - ae3323a7 by Ben Gamari at 2020-04-29T12:36:37-04:00 Merge pull request haskell/haddock#1183 from hsyl20/wip/hsyl20/unitid Refactoring of Unit code - - - - - b105564a by Artem Pelenitsyn at 2020-05-03T08:14:10+01:00 add dependency on exceptions because GHC.Exception was boiled down (ghc haskell/haddock#18075) - - - - - 9857eff3 by Zubin Duggal at 2020-05-04T18:48:25+01:00 Atomic update of NameCache in readHieFile - - - - - 86bbb226 by Sylvain Henry at 2020-05-14T16:36:27+02:00 Fix after Config module renaming - - - - - a4bbdbc2 by Gert-Jan Bottu at 2020-05-15T22:09:44+02:00 Explicit Specificity Support for Haddock - - - - - 46199daf by Ben Gamari at 2020-05-19T09:59:56-04:00 Merge pull request haskell/haddock#1192 from hsyl20/hsyl20/modules-config Fix after Config module renaming - - - - - f9a9d2ba by Gert-Jan Bottu at 2020-05-20T16:48:38-04:00 Explicit Specificity Support for Haddock - - - - - 55c5b7ea by Ben Gamari at 2020-05-21T00:32:02-04:00 Merge commit 'a8d7e66da4dcc3b242103271875261604be42d6e' into ghc-head - - - - - a566557f by Cale Gibbard at 2020-05-21T16:02:06-04:00 isBootSummary now produces a result of type IsBootInterface - - - - - ea52f905 by Zubin Duggal at 2020-05-24T17:55:48+01:00 update for hiefile-typeclass-info - - - - - 49ba7a67 by Willem Van Onsem at 2020-05-25T12:23:01-04:00 Use floor over round to calculate the percentage (#1195) If we compile documentation where only a small fraction is undocumented, it is misleading to see 100% coverage - 99% is more intuitive. Fixes haskell/haddock#1194 - - - - - c025ebf1 by Ben Gamari at 2020-05-29T14:32:42-04:00 Merge pull request haskell/haddock#1185 from obsidiansystems/boot-disambig isBootSummary now produces a result of type IsBootInterface - - - - - 74ab9415 by Ben Gamari at 2020-05-29T20:23:39-04:00 haddock: Bounds bumps for GHC 8.12 - - - - - b40be944 by Ben Gamari at 2020-06-03T17:02:31-04:00 testsuite: Update expected output for simplified subsumption - - - - - 624be71c by Ryan Scott at 2020-06-05T12:43:23-04:00 Changes for GHC#18191 See https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3337. - - - - - fbd8f7ce by Sylvain Henry at 2020-06-08T15:31:47+02:00 Fix after unit refactoring - - - - - 743fda4d by Ben Gamari at 2020-06-09T12:09:58-04:00 Merge pull request haskell/haddock#1202 from hsyl20/wip/hsyl20/unitid-ii Fix after unit refactoring - - - - - d07a06a9 by Ryan Scott at 2020-06-13T07:16:55-04:00 Use HsForAllTelescope (GHC#18235) - - - - - 389bb60d by Ben Gamari at 2020-06-13T15:30:52-04:00 haddock: Bounds bumps for GHC 8.12 - - - - - 7a377f5f by Ben Gamari at 2020-06-17T14:53:16-04:00 Merge pull request haskell/haddock#1199 from bgamari/wip/ghc-8.12 haddock: Bounds bumps for GHC 8.12 - - - - - 9fd9e586 by Krzysztof Gogolewski at 2020-06-17T16:09:07-04:00 Adapt Haddock to LinearTypes See ghc/ghc!852. - - - - - 46fe7636 by Ben Gamari at 2020-06-18T14:20:02-04:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-head - - - - - 35a3c9e2 by Zubin Duggal at 2020-06-21T21:19:18+05:30 Use functions exported from HsToCore - - - - - 8abe3928 by Ben Gamari at 2020-06-24T13:53:39-04:00 Merge pull request haskell/haddock#1204 from wz1000/wip/haddock-hstocore Use functions exported from GHC.HsToCore.Docs - - - - - 22f2c937 by Matthías Páll Gissurarson at 2020-06-26T19:07:03+02:00 Adapt Haddock for QualifiedDo - - - - - 3f6208d7 by Vladislav Zavialov at 2020-06-28T14:28:16+03:00 Handle LexicalNegation's ITprefixminus - - - - - 03a19f41 by Sylvain Henry at 2020-07-02T09:37:38+02:00 Rename hsctarget into backend - - - - - ea17ff23 by Andreas Klebinger at 2020-07-02T17:44:18+02:00 Update for UniqFM changes. - - - - - 9872f2f3 by Ben Gamari at 2020-07-09T10:39:19-04:00 Merge pull request haskell/haddock#1209 from AndreasPK/wip/typed_uniqfm Update for UniqFM changes. - - - - - 68f7b668 by Krzysztof Gogolewski at 2020-07-12T18:16:57+02:00 Sync with GHC removing {-# CORE #-} pragma See ghc ticket haskell/haddock#18048 - - - - - eb372681 by Sylvain Henry at 2020-07-20T11:41:30+02:00 Rename hscTarget into backend - - - - - fb7f78bf by Ben Gamari at 2020-07-21T12:15:25-04:00 Merge pull request haskell/haddock#1214 from hsyl20/wip/hsyl20/hadrian/ncg Rename hscTarget into backend - - - - - 1e8f5b56 by Ben Gamari at 2020-07-23T09:11:50-04:00 Merge commit '904dce0cafe0a241dd3ef355775db47fc12f434d' into ghc-head - - - - - d8fd1775 by Zubin Duggal at 2020-07-23T18:46:40+05:30 Update for modular ping pong - - - - - 8416f872 by Ben Gamari at 2020-07-23T09:35:03-04:00 Merge pull request haskell/haddock#1200 from wz1000/wip/wz1000-modular-ping-pong Modular ping pong - - - - - a24a8577 by Ben Gamari at 2020-07-28T15:23:36-04:00 Bump GHC version to 9.0 - - - - - 6a51c9dd by Sylvain Henry at 2020-08-05T18:47:05+02:00 Fix after Outputable refactoring - - - - - c05e1c99 by Ben Gamari at 2020-08-10T14:41:41-04:00 Merge pull request haskell/haddock#1223 from hsyl20/wip/hsyl20/dynflags/exception Fix after Outputable refactoring - - - - - d964f15b by Sylvain Henry at 2020-08-12T11:58:49+02:00 Fix after HomeUnit - - - - - 8e6d5b23 by Ben Gamari at 2020-08-12T14:25:30-04:00 Merge pull request haskell/haddock#1225 from hsyl20/wip/hsyl20/plugins/homeunit Fix after HomeUnit - - - - - 8c7880fe by Sylvain Henry at 2020-08-17T14:13:29+02:00 Remove Ord FastString instance - - - - - 8ea410db by Alex Biehl at 2020-08-19T10:56:32+02:00 Another round of `npm audit fix` (#1228) This should shut down the warnings on Github. Note that the security issues seem to have been entirely in the build dependencies, since the output JS has not changed. Last NPM dependency audit happend in d576b2327e2bc117f912fe0a9d595e9ae62614e0 Co-authored-by: Alex Biehl <alex.biehl at target.com> - - - - - 7af6e2a8 by Ben Gamari at 2020-08-31T13:59:34-04:00 Merge pull request haskell/haddock#1226 from hsyl20/wip/hsyl20/fs_ord Remove Ord FastString instance - - - - - ffbc8702 by Alan Zimmerman at 2020-09-07T21:47:41+01:00 Match GHC for haskell/haddock#18639, remove GENERATED pragma - - - - - a93f1268 by Alan Zimmerman at 2020-09-07T23:11:38+01:00 Merge pull request haskell/haddock#1232 from haskell/wip/T18639-remove-generated-pragma, Match GHC for haskell/haddock#18639, remove GENERATED pragma - - - - - 1f605d50 by Ben Gamari at 2020-09-14T18:30:01-04:00 Bump GHC version to 9.1 - - - - - 6599df62 by Vladislav Zavialov at 2020-09-18T14:05:15+03:00 Bump base upper bound to 4.16 - - - - - a01b3c43 by Ben Gamari at 2020-09-22T15:41:48-04:00 Update hypsrc-test for QuickLook This appears to be a spurious change. - - - - - e9cc6cac by Vladislav Zavialov at 2020-09-26T21:00:12+03:00 Updates for the new linear types syntax: a %p -> b - - - - - 30e3ca7c by Sylvain Henry at 2020-09-29T11:18:32-04:00 Update for parser (#1234) - - - - - b172f3e3 by Vladislav Zavialov at 2020-09-30T01:01:30+03:00 Updates for the new linear types syntax: a %p -> b - - - - - 0b9c08d3 by Sylvain Henry at 2020-09-30T11:02:33+02:00 Adapt to GHC parser changes - - - - - b9540b7a by Sylvain Henry at 2020-10-12T09:13:38-04:00 Don't pass the HomeUnitId (#1239) - - - - - 34762e80 by HaskellMouse at 2020-10-13T12:58:04+03:00 Changed tests due to unification of `Nat` and `Natural` in the follwing merge request: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3583 - - - - - 256f86b6 by Vladislav Zavialov at 2020-10-15T10:48:03+03:00 Add whitespace in: map ($ v) - - - - - 4a3f711b by Alan Zimmerman at 2020-10-19T08:57:27+01:00 Match GHC, adding IsUnicodeSyntax field to HsFunTy and HsScaled - - - - - 072cdd21 by Alan Zimmerman at 2020-10-21T14:48:28-04:00 Match GHC, adding IsUnicodeSyntax field to HsFunTy and HsScaled (cherry picked from commit a7d1d8e034d25612d5d08ed8fdbf6f472aded4a1) - - - - - 9e09a445 by Alan Zimmerman at 2020-10-21T23:53:34-04:00 Match GHC, adding IsUnicodeSyntax field to HsFunTy and HsScaled (cherry picked from commit a7d1d8e034d25612d5d08ed8fdbf6f472aded4a1) - - - - - 636d7de3 by Sylvain Henry at 2020-10-26T14:31:54-04:00 GHC.Driver.Types refactoring (#1242) - - - - - a597f000 by Ryan Scott at 2020-10-29T04:18:05-04:00 Adapt to the removal of Hs{Boxed,Constraint}Tuple See ghc/ghc!4097 and GHC#18723. - - - - - b96660fb by Ryan Scott at 2020-10-30T04:53:05-04:00 Adapt to HsConDecl{H98,GADT}Details split Needed for GHC#18844. - - - - - c287d82c by Ryan Scott at 2020-10-30T19:35:59-04:00 Adapt to HsOuterTyVarBndrs These changes accompany ghc/ghc!4107, which aims to be a fix for haskell/haddock#16762. - - - - - a34c31a1 by Ryan Scott at 2020-11-13T13:38:34-05:00 Adapt to splitPiTysInvisible being renamed to splitInvisPiTys This is a part of !4434, a fix for GHC#18939. - - - - - 66ea459d by Sylvain Henry at 2020-11-16T10:59:30+01:00 Fix after Plugins moved into HscEnv - - - - - 508556d8 by Ben Gamari at 2020-11-18T15:47:40-05:00 Merge pull request haskell/haddock#1253 from hsyl20/wip/hsyl20/plugins/hscenv Fix after Plugins moved into HscEnv - - - - - 620fec1a by Andreas Klebinger at 2020-11-24T20:51:59+01:00 Update for changes in GHC's Pretty - - - - - 01cc13ab by Richard Eisenberg at 2020-11-25T23:18:35-05:00 Avoid GHC#18932. - - - - - 8d29ba21 by Cale Gibbard at 2020-11-25T23:18:35-05:00 Add type arguments to PrefixCon - - - - - 414d5f87 by Sylvain Henry at 2020-11-30T17:06:04+01:00 DynFlags's unit fields moved to HscEnv - - - - - e356668c by Ben Gamari at 2020-11-30T11:11:37-05:00 Merge pull request haskell/haddock#1258 from hsyl20/wip/hsyl20/hscenv/unitstate Unit fields moved from DynFlags to HscEnv - - - - - 7cf552f1 by Ben Gamari at 2020-12-03T10:31:27-05:00 Merge pull request haskell/haddock#1257 from AndreasPK/wip/andreask/opt_dumps Update for changes in GHC's Pretty - - - - - fc0871c3 by Veronika Romashkina at 2020-12-08T16:35:33+01:00 Fix docs links from Darcs to GitHub in intro (#1262) - - - - - 7059e808 by Veronika Romashkina at 2020-12-08T16:36:16+01:00 Use gender neutral word in docs (#1260) - - - - - 1b16e5ee by Maximilian Tagher at 2020-12-08T16:40:03+01:00 Allow scrolling search results (#1235) Closes https://github.com/haskell/haddock/issues/1231 - - - - - 8a118c01 by dependabot[bot] at 2020-12-08T16:40:25+01:00 Bump bl from 1.2.2 to 1.2.3 in /haddock-api/resources/html (#1255) Bumps [bl](https://github.com/rvagg/bl) from 1.2.2 to 1.2.3. - [Release notes](https://github.com/rvagg/bl/releases) - [Commits](https://github.com/rvagg/bl/compare/v1.2.2...v1.2.3) Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - c89ff587 by Xia Li-yao at 2020-12-08T16:42:17+01:00 Allow more characters in anchor following module reference (#1220) - - - - - 14af7d64 by Xia Li-yao at 2020-12-08T16:43:05+01:00 Add dangling changes from branches ghc-8.6 and ghc-8.8 (#1243) * Fix multiple typos and inconsistencies in doc/markup.rst Note: I noticed some overlap with haskell/haddock#1112 from @wygulmage and haskell/haddock#1081 from @parsonsmatt after creating these proposed changes - mea culpa for not looking at the open PRs sooner. * Fix haskell/haddock#1113 If no Signatures, no section of index.html * Change the formatting of missing link destinations The current formatting of the missing link destination does not really help user to understand the reasons of the missing link. To address this, I've changed the formatting in two ways: - the missing link symbol name is now fully qualified. This way you immediately know which haskell module cannot be linked. It is then easier to understand why this module does not have documentation (hidden module or broken documentation). - one line per missing link, that's more readable now that symbol name can be longer due to qualification. For example, before haddock was listing missing symbol such as: ``` could not find link destinations for: Word8 Word16 mapMaybe ``` Now it is listed as: ``` could not find link destinations for: - Data.Word.Word8 - Data.Word.Word16 - Data.Maybe.mapMaybe ``` * Add `--ignore-link-symbol` command line argument This argument can be used multiples time. A missing link to a symbol listed by `--ignore-link-symbol` won't trigger "missing link" warning. * Forbid spaces in anchors (#1148) * Improve error messages with context information (#1060) Co-authored-by: Matt Audesse <matt at mattaudesse.com> Co-authored-by: Mike Pilgrem <mpilgrem at users.noreply.github.com> Co-authored-by: Guillaume Bouchard <guillaume.bouchard at tweag.io> Co-authored-by: Pepe Iborra <pepeiborra at gmail.com> - - - - - 89e3af13 by tomjaguarpaw at 2020-12-08T18:00:04+01:00 Enable two warnings (#1245) because they will be soon be added to -Wall. See https://gitlab.haskell.org/ghc/ghc/-/issues/15656 - - - - - c3320f8d by Willem Van Onsem at 2020-12-08T18:26:55+01:00 simplify calculating percentages fixing haskell/haddock#1194 (#1236) - - - - - 685df308 by Alex Biehl at 2020-12-08T20:06:26+01:00 Changes for GHC#17566 See https://gitlab.haskell.org/ghc/ghc/merge_requests/2469 - - - - - be3ec3c0 by Alex Biehl at 2020-12-08T20:06:26+01:00 Import intercalate - - - - - 32c33912 by Matthías Páll Gissurarson at 2020-12-08T21:15:30+01:00 Adapt Haddock for QualifiedDo - - - - - 31696088 by Alex Biehl at 2020-12-08T22:06:02+01:00 Fix haddock-library tests - - - - - fbc0998a by Alex Biehl at 2020-12-08T23:08:23+01:00 Move to GitHub CI (#1266) * Initial version of ci.yml This is a straight copy from Dmitrii Kovanikov's blog post at https://kodimensional.dev/github-actions. Will adapt to haddock in successive commits. * Delete .travis.yml * Modify to only test on ghc-8.10.{1,2} * Use actions/setup-haskell at v1.1.4 * Relax QuickCheck bound on haddock-api * Remove stack matrix for now * Nail down to ghc-8.10 branch for now * Pin index state to 2020-12-08T20:13:44Z for now * Disable macOS and Windows tests for now for speed up - - - - - 5b946b9a by tomjaguarpaw at 2020-12-10T19:01:41+01:00 Enable two warnings (#1245) (#1268) because they will be soon be added to -Wall. See https://gitlab.haskell.org/ghc/ghc/-/issues/15656 - - - - - bc5a408f by dependabot[bot] at 2020-12-10T19:02:16+01:00 Bump ini from 1.3.5 to 1.3.7 in /haddock-api/resources/html (#1269) Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - d02995f1 by Andrew Martin at 2020-12-14T16:48:40-05:00 Update for boxed rep - - - - - a381aeff by Ben Gamari at 2020-12-15T15:13:30-05:00 Revert "Enable two warnings (#1245) (#1268)" As this does not build on GHC `master`. This reverts commit 7936692badfe38f23ae95b51fb7bd7c2ff7e9bce. - - - - - a63c0a9e by Ben Gamari at 2020-12-15T15:17:59-05:00 Revert "Update for boxed rep" This reverts commit 4ffb30d8b637ccebecc81ce610f0af451ac8088d. - - - - - 53bfbb29 by Ben Gamari at 2020-12-15T15:37:24-05:00 Merge remote-tracking branch 'upstream/ghc-head' into ghc-head - - - - - bae76a30 by Ben Gamari at 2020-12-16T02:44:42+00:00 Update output for nullary TyConApp optimisation (ghc/ghc!2952) - - - - - 4b733b57 by Krzysztof Gogolewski at 2020-12-16T20:03:14+01:00 Display linear/multiplicity arrows correctly (#1238) Previously we were ignoring multiplicity and displayed a %1 -> b as a -> b. - - - - - ee463bd3 by Ryan Scott at 2020-12-16T16:55:23-05:00 Adapt to HsCoreTy (formerly NewHsTypeX) becoming a type synonym Needed for !4417, the fix for GHC#15706 and GHC#18914. - - - - - ed0b02f8 by tomjaguarpaw at 2020-12-19T10:17:19+00:00 Enable two warnings (#1245) (#1268) because they will be soon be added to -Wall. See https://gitlab.haskell.org/ghc/ghc/-/issues/15656 - - - - - d80bf8f5 by Sylvain Henry at 2020-12-21T10:09:25+01:00 Fix after binder collect changes - - - - - bf4c9d32 by Adam Gundry at 2020-12-23T21:35:01+00:00 Adapt to changes to GlobalRdrElt and AvailInfo Needed for ghc/ghc!4467 - - - - - 37736c4c by John Ericson at 2020-12-28T12:27:02-05:00 Support a new ghc --make node type for parallel backpack upsweep - - - - - 717bdeac by Vladislav Zavialov at 2020-12-29T10:50:02+03:00 Inline and fix getGADTConTypeG The getGADTConTypeG used HsRecTy, which is at odds with GHC issue haskell/haddock#18782. I noticed that getGADTConTypeG was only used in the Hoogle backend. Interestingly, when handling H98 constructors, Hoogle converts RecCon to PrefixCon (see Haddock.Backends.Hoogle.ppCtor). So I changed getGADTConTypeG to handle RecConGADT in the same manner as PrefixConGADT, and after this simplification moved it into the 'where' clause of ppCtor, to the only place where it is used. The practical effect of this change is as follows. Consider this example: data TestH98 = T98 { bar::Int } data TestGADT where TG :: { foo :: Int } -> TestGADT Before this patch, haddock --hoogle used to produce: T98 :: Int -> TestH98 [TG] :: {foo :: Int} -> TestGADT Notice how the record syntax was discarded in T98 but not TG. With this patch, we always produce signatures without record syntax: T98 :: Int -> TestH98 [TG] :: Int -> TestGADT I suspect this might also be a bugfix, as currently Hoogle doesn't seem to render GADT record constructors properly. - - - - - cb1b8c56 by Andreas Abel at 2020-12-30T21:12:37+01:00 Build instructions: haddock-library and -api first! - - - - - b947f6ad by Ben Gamari at 2020-12-31T13:04:19-05:00 Merge pull request haskell/haddock#1281 from obsidiansystems/wip/backpack-j Changes to support -j with backpack - - - - - 120e1cfd by Hécate Moonlight at 2021-01-04T19:54:58+01:00 Merge pull request haskell/haddock#1282 from andreasabel/master Build instructions: haddock-library and -api first! - - - - - fd45e41a by Ben Gamari at 2021-01-05T16:14:31-05:00 Merge remote-tracking branch 'origin/ghc-8.10' into ghc-9.0 - - - - - b471bdec by Ben Gamari at 2021-01-05T16:23:02-05:00 Merge commit '1e56f63c3197e7ca1c1e506e083c2bad25d08793' into ghc-9.0 - - - - - 81cdbc41 by Alex Biehl at 2021-01-09T12:14:41+01:00 Prepare Haddock for being a GHC Plugin - - - - - b646d952 by Alex Biehl at 2021-01-09T12:14:41+01:00 Make Haddock a GHC Plugin - - - - - cc044674 by Alex Biehl at 2021-01-09T12:14:41+01:00 Add -j[n] CLI param to Haddock executable It translates to `--ghcopt=-j[n]` - - - - - 84a04073 by Alex Biehl at 2021-01-09T12:14:41+01:00 Abstract Monad for interface creation I found that when running as a plugin the lookupName function (which runs in Ghc monad) does not work correctly from the typeCheckResultAction hook. Instead, we abstracted the monad used when creating interfaces, so that access to GHC session specific parts is explicit and so that the TcM can provide their (correct) implementation of lookupName. - - - - - 5be2c4f7 by Alex Biehl at 2021-01-09T12:14:41+01:00 Accept tests - - - - - 8cefee9d by Alex Biehl at 2021-01-09T16:10:47+01:00 Add missing dependency for mtl - - - - - 3681f919 by Ben Gamari at 2021-01-13T18:39:25-05:00 Merge remote-tracking branch 'origin/ghc-9.0' into ghc-head - - - - - 33c6b152 by Hécate Moonlight at 2021-01-14T16:04:20+01:00 Merge pull request haskell/haddock#1273 from hsyl20/wip/hsyl20/arrows Fix after binder collect changes - - - - - 70d13e8e by Joachim Breitner at 2021-01-22T19:03:45+01:00 Make haddock more robust to changes to the `Language` data type With the introduction of GHC2021, the `Languages` data type in GHC will grow. In preparation of that (and to avoid changing haddock with each new language), this change makes the code handle extensions to that data type gracefully. (cherry picked from commit c341dd7c9c3fc5ebc83a2d577c5a726f3eb152a5) - - - - - 7d6dd57a by John Ericson at 2021-01-22T22:02:02+00:00 Add `NoGhcTc` instance now that it's not closed - - - - - e5fdaf0a by Alan Zimmerman at 2021-01-23T22:57:44+00:00 Merge pull request haskell/haddock#1293 from obsidiansystems/wip/fix-18936 Add `NoGhcTc` instance now that it's not closed - - - - - 989a1e05 by Oleg Grenrus at 2021-01-24T16:11:46+03:00 Add import list to Data.List - - - - - 368e144a by Ben Gamari at 2021-01-28T22:15:48+01:00 Adapt to "Make PatSyn immutable" - - - - - abe66c21 by Alfredo Di Napoli at 2021-02-01T08:05:35+01:00 Rename pprLogErrMsg to new name - - - - - e600e75c by Hécate Moonlight at 2021-02-05T14:53:00+01:00 Move CI to ghc-9.0 - - - - - dd492961 by Vladislav Zavialov at 2021-02-05T14:53:00+01:00 Update cabal.project and README build instructions - - - - - 31bd292a by Hécate Moonlight at 2021-02-05T15:03:56+01:00 Merge pull request haskell/haddock#1296 from Kleidukos/ghc-9.0 Merge the late additions to ghc-8.10 into ghc-9.0 - - - - - 6388989e by Vladislav Zavialov at 2021-02-05T17:41:57+03:00 Cleanup: fix build warnings - - - - - f99407ef by Daniel Rogozin at 2021-02-05T18:11:48+03:00 type level characters support for haddock (required for haskell/haddock#11342) - - - - - d8c6b26f by Hécate Moonlight at 2021-02-05T17:44:50+01:00 Add a CONTRIBUTING.md file - - - - - 6a01ad98 by Hécate Moonlight at 2021-02-05T17:58:16+01:00 Merge pull request haskell/haddock#1312 from Kleidukos/proper-branch-etiquette Add a CONTRIBUTING.md file - - - - - 955eecc4 by Vladislav Zavialov at 2021-02-05T20:29:00+03:00 Merge commit 'a917dfd29f3103b69378138477514cbfa38558a9' into ghc-head - - - - - 47b3d6ab by Hécate Moonlight at 2021-02-05T19:09:38+01:00 Amend the CONTRIBUTING.md file - - - - - 23de6137 by Hécate Moonlight at 2021-02-05T19:16:49+01:00 Merge pull request haskell/haddock#1313 from Kleidukos/amend-contributing Amend the CONTRIBUTING.md file - - - - - 69026b59 by Krzysztof Gogolewski at 2021-02-05T23:05:56+01:00 Display linear/multiplicity arrows correctly (#1238) Previously we were ignoring multiplicity and displayed a %1 -> b as a -> b. (cherry picked from commit b4b4d896d2d68d6c48e7db7bfe95c185ca0709cb) - - - - - ea026b78 by Oleg Grenrus at 2021-02-06T17:14:45+01:00 Add import list to Data.List - - - - - 5204326f by Hécate Moonlight at 2021-02-06T17:15:44+01:00 Merge pull request haskell/haddock#1316 from Kleidukos/explicit-imports-to-data-list Add import list to Data.List - - - - - 1f4d2136 by Ben Gamari at 2021-02-06T11:53:31-05:00 Merge remote-tracking branch 'origin/ghc-head' into wip/ghc-head-merge - - - - - 13f0d09a by Ben Gamari at 2021-02-06T11:53:45-05:00 Fix partial record selector warning - - - - - 5c115f7e by Ben Gamari at 2021-02-06T11:55:52-05:00 Merge commit 'a917dfd29f3103b69378138477514cbfa38558a9' into wip/ghc-head-merge - - - - - b6fd8b75 by Ben Gamari at 2021-02-06T12:01:31-05:00 Merge commit '41964cb2fd54b5a10f8c0f28147015b7d5ad2c02' into wip/ghc-head-merge - - - - - a967194c by Ben Gamari at 2021-02-06T18:30:35-05:00 Merge branch 'wip/ghc-head-merge' into ghc-head - - - - - 1f4c3a91 by MorrowM at 2021-02-07T01:52:33+02:00 Fix search div not scrolling - - - - - 684b1287 by Iñaki García Etxebarria at 2021-02-07T16:13:04+01:00 Add support for labeled module references Support a markdown-style way of annotating module references. For instance -- | [label]("Module.Name#anchor") will create a link that points to the same place as the module reference "Module.Name#anchor" but the text displayed on the link will be "label". - - - - - bdb55a5d by Hécate Moonlight at 2021-02-07T16:18:10+01:00 Merge pull request haskell/haddock#1319 from alexbiehl/alex/compat Backward compat: Add support for labeled module references - - - - - 6ca70991 by Hécate Moonlight at 2021-02-07T16:21:29+01:00 Merge pull request haskell/haddock#1314 from tweag/show-linear-backport Backport haskell/haddock#1238 (linear types) to ghc-9.0 - - - - - d9d73298 by Alex Biehl at 2021-02-07T17:46:25+01:00 Remove dubious parseModLink Instead construct the ModLink value directly when parsing. - - - - - 33b4d020 by Hécate Moonlight at 2021-02-07T17:52:05+01:00 Merge pull request haskell/haddock#1320 from haskell/alex/fix Remove dubious parseModLink - - - - - 54211316 by Hécate Moonlight at 2021-02-07T18:12:07+01:00 Merge pull request haskell/haddock#1318 from MorrowM/ghc-9.0 Fix search div not scrolling - - - - - 19db679e by alexbiehl-gc at 2021-02-07T18:14:46+01:00 Merge pull request haskell/haddock#1317 from bgamari/wip/ghc-head-merge Merge ghc-8.10 into ghc-head - - - - - 6bc1e9e4 by Willem Van Onsem at 2021-02-07T18:25:30+01:00 simplify calculating percentages fixing haskell/haddock#1194 (#1236) - - - - - c8537cf8 by alexbiehl-gc at 2021-02-07T18:30:40+01:00 Merge pull request haskell/haddock#1322 from haskell/alex/forward-port simplify calculating percentages fixing haskell/haddock#1194 (#1236) - - - - - 2d47ae4e by alexbiehl-gc at 2021-02-07T18:39:59+01:00 Merge branch 'ghc-head' into ghc-9.0 - - - - - 849e4733 by Hécate Moonlight at 2021-02-07T18:43:19+01:00 Merge pull request haskell/haddock#1321 from Kleidukos/ghc-9.0 Merge ghc-9.0 into ghc-head - - - - - ee6095d7 by Sylvain Henry at 2021-02-08T11:36:38+01:00 Update for Logger - - - - - 4ad688c9 by Alex Biehl at 2021-02-08T18:11:24+01:00 Merge pull request haskell/haddock#1310 from hsyl20/wip/hsyl20/logger2 Logger refactoring - - - - - 922a9e0e by Ben Gamari at 2021-02-08T12:54:33-05:00 Merge remote-tracking branch 'upstream/ghc-head' into ghc-head - - - - - 991649d2 by Sylvain Henry at 2021-02-09T10:55:17+01:00 Fix to build with HEAD - - - - - a8348dc2 by Hécate Moonlight at 2021-02-09T10:58:51+01:00 Merge pull request haskell/haddock#1327 from hsyl20/wip/hsyl20/logger2 Fix to build with HEAD - - - - - 0abdbca6 by Fendor at 2021-02-09T20:06:15+01:00 Add UnitId to Target record - - - - - d5790a0e by Alex Biehl at 2021-02-11T10:32:32+01:00 Stable sort for (data/newtype) instances - - - - - 8e6036f5 by Alex Biehl at 2021-02-11T10:32:32+01:00 Also make TyLit deterministic - - - - - f76d2945 by Hécate Moonlight at 2021-02-11T11:00:31+01:00 Merge pull request haskell/haddock#1329 from hsyl20/hsyl20/stabe_iface Stable sort for instances - - - - - 5e0469ea by Oleg Grenrus at 2021-02-14T15:28:15+02:00 Add import list to Data.List in Haddock.Interface.Create - - - - - fa57cd24 by Hécate Moonlight at 2021-02-14T17:19:27+01:00 Merge pull request haskell/haddock#1331 from phadej/more-explicit-data-list-imports Add import list to Data.List in Haddock.Interface.Create - - - - - f0cd629c by Hécate Moonlight at 2021-02-21T00:22:01+01:00 Merge pull request haskell/haddock#1311 from fendor/wip/add-targetUnitId-to-target Add UnitId to Target record - - - - - 674ef723 by Joachim Breitner at 2021-02-22T10:39:18+01:00 html-test: Always set language from ghc-9.2 on, the “default” langauge of GHC is expected to change more wildly. To prepare for that (and unblock https://gitlab.haskell.org/ghc/ghc/-/merge_requests/4853), this sets the language for all the test files to `Haskell2010`. This should insolate this test suite against changes to the default. Cherry-picked from https://github.com/haskell/haddock/pull/1341 - - - - - f072d623 by Hécate Moonlight at 2021-02-22T10:56:51+01:00 Merge pull request haskell/haddock#1342 from nomeata/joachim/haskell2010-in-tests-ghc-head html-test: Always set language - - - - - caebbfca by Hécate Moonlight at 2021-02-22T11:53:07+01:00 Clean-up of Interface and Interface.Create's imports and pragmata - - - - - f6caa89d by Hécate Moonlight at 2021-02-22T11:54:58+01:00 Merge pull request haskell/haddock#1345 from Kleidukos/head/fix-interface-imports [ghc-head] Clean-up of Interface and Interface.Create's imports and pragmata - - - - - 7395c9cb by Hécate Moonlight at 2021-02-22T18:44:57+01:00 Explicit imports for Haddock.Interface and Haddock.Interface.Create - - - - - 6e9fb5d5 by Hécate Moonlight at 2021-02-22T18:45:28+01:00 Merge pull request haskell/haddock#1348 from Kleidukos/head/explicit-imports-interface Explicit imports for Haddock.Interface and Haddock.Interface.Create - - - - - 9198b118 by Alan Zimmerman at 2021-02-22T20:04:24+00:00 Context becomes a Maybe in the GHC AST This prevents noLoc's appearing in the ParsedSource. Match the change in GHC. - - - - - 0af20f64 by Hécate Moonlight at 2021-02-23T12:36:12+01:00 Fix the call-site of guessTarget in Interface.hs Explicit the imports from GHC.HsToCore.Docs - - - - - b7886885 by Hécate Moonlight at 2021-02-23T12:37:54+01:00 Merge pull request haskell/haddock#1349 from Kleidukos/fix-interface-guesstarget-call Fix the call-site of guessTarget in Interface.hs - - - - - 9cf041ba by Sylvain Henry at 2021-02-24T11:08:20+01:00 Fix haddockHypsrcTest output in ghc-head - - - - - b194182a by Hécate Moonlight at 2021-02-24T11:12:36+01:00 Merge pull request haskell/haddock#1351 from hsyl20/wip/hsyl20/fix-head Fix haddockHypsrcTest output in ghc-head - - - - - 3ce8b375 by Shayne Fletcher at 2021-03-06T09:55:03-05:00 Add ITproj to parser - - - - - d2abf762 by Ben Gamari at 2021-03-06T19:26:49-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - a0f6047d by Andrew Martin at 2021-03-07T11:25:23-05:00 Update for boxed rep - - - - - 6f63c99e by Ben Gamari at 2021-03-10T13:20:21-05:00 Update for "FastString: Use FastMutInt instead of IORef Int" - - - - - e13f01df by Luke Lau at 2021-03-10T15:38:40-05:00 Implement template-haskell's putDoc This catches up to GHC using the new extractTHDocs function, which returns documentation added via the putDoc function (provided it was compiled with Opt_Haddock). Since it's already a map from names -> docs, there's no need to do traversal etc. It also matches the change from the argument map being made an IntMap rather than a Map Int - - - - - 89263d94 by Alan Zimmerman at 2021-03-15T17:15:26+00:00 Match changes in GHC AST for in-tree API Annotations As landed via https://gitlab.haskell.org/ghc/ghc/-/merge_requests/2418 - - - - - 28db1934 by Alan Zimmerman at 2021-03-15T20:40:09+00:00 Change some type family test results. It is not clear to me whether the original was printing incorrectly (since we did not have the TopLevel flag before now), or if this behaviour is expected. For the time being I am assuming the former. - - - - - 7c11c989 by Sylvain Henry at 2021-03-22T10:05:19+01:00 Fix after NameCache changes - - - - - addbde15 by Sylvain Henry at 2021-03-22T10:05:19+01:00 NameCache doesn't store a UniqSupply anymore - - - - - 15ec6cec by Ben Gamari at 2021-03-22T17:53:44-04:00 Bump GHC version to 9.2 - - - - - dbd6aa63 by Hécate Moonlight at 2021-03-24T14:28:36+01:00 Merge pull request haskell/haddock#1365 from hsyl20/wip/hsyl20/iface1 NameCache refactoring - - - - - 2d32da7e by Oleg Grenrus at 2021-03-27T01:12:00+02:00 Specialization of Data.List - - - - - 32b84fa6 by Fendor at 2021-03-27T10:50:17+01:00 Add UnitId to Target record This way we always know to which home-unit a given target belongs to. So far, there only exists a single home-unit at a time, but it enables having multiple home-units at the same time. - - - - - 54bf9f0e by Hécate Moonlight at 2021-03-28T14:08:35+02:00 Merge pull request haskell/haddock#1368 from fendor/target-unit-id-revert Add UnitId to Target record - - - - - 7dea168a by Alan Zimmerman at 2021-03-29T08:45:52+01:00 EPA : Rename ApiAnn to EpAnn - - - - - 72967f65 by Alfredo Di Napoli at 2021-03-29T09:47:01+02:00 pprError changed name in GHC - - - - - 4bc61035 by Alan Zimmerman at 2021-03-29T16:16:27-04:00 EPA : Rename ApiAnn to EpAnn - - - - - 108d031d by Ben Gamari at 2021-03-29T18:49:36-04:00 Merge commit '36418c4f70d7d2b179a77925b3ad5caedb08c9b5' into HEAD - - - - - 1444f700 by Ben Gamari at 2021-03-31T09:18:39-04:00 Merge pull request haskell/haddock#1370 from adinapoli/wip/adinapoli-diag-reason-severity Rename pprError to mkParserErr - - - - - d3087b79 by Ben Gamari at 2021-03-31T11:34:17-04:00 Merge commit 'd8d8024ad6796549a8d3b5512dabf3288d14e30f' into ghc-head - - - - - 170b79e9 by Ben Gamari at 2021-03-31T12:24:56-04:00 Merge remote-tracking branch 'upstream/ghc-head' into ghc-head - - - - - db0d6bae by Ben Gamari at 2021-04-10T09:34:35-04:00 Bump GHC version to 9.3 - - - - - a9f2c421 by Alan Zimmerman at 2021-04-19T18:26:46-04:00 Update for EPA changes in GHC (cherry picked from commit cafb48118f7c111020663776845897e225607b41) - - - - - 1ee4b7c7 by Sylvain Henry at 2021-05-11T10:00:06+02:00 Removal of HsVersions.h (#1388) * Update for EPA changes in GHC * Account for HsVersions.h removal Co-authored-by: Alan Zimmerman <alan.zimm at gmail.com> - - - - - 79e819e9 by Hécate Moonlight at 2021-05-11T10:14:47+02:00 Revert "Removal of HsVersions.h (#1388)" This reverts commit 72118896464f94d81f10c52f5d9261efcacc57a6. - - - - - 3dbd3f8b by Alan Zimmerman at 2021-05-11T10:15:17+02:00 Update for EPA changes in GHC - - - - - 2ce80c17 by Sylvain Henry at 2021-05-11T10:15:19+02:00 Account for HsVersions.h removal - - - - - 00e4c918 by Christiaan Baaij at 2021-05-13T08:21:56+02:00 Add Haddock support for the OPAQUE pragma (#1380) - - - - - 8f9049b2 by Hécate Moonlight at 2021-05-13T08:40:22+02:00 fixup! Use GHC 9.2 in CI runner - - - - - 27ddec38 by Alan Zimmerman at 2021-05-13T22:51:20+01:00 EPA: match changes from GHC T19834 - - - - - f8a1d714 by Felix Yan at 2021-05-14T17:10:04+02:00 Allow hspec 2.8 (#1389) All tests are passing. - - - - - df44453b by Divam Narula at 2021-05-20T15:42:42+02:00 Update ref, the variables got renamed. (#1391) This is due to ghc/ghc!5555 which caused a change in ModDetails in case of NoBackend. Now the initModDetails is used to recreate the ModDetails from interface and in-memory ModDetails is not used. - - - - - e46bfc87 by Alan Zimmerman at 2021-05-20T19:05:09+01:00 Remove Maybe from HsQualTy Match changes in GHC for haskell/haddock#19845 - - - - - 79bd7b62 by Shayne Fletcher at 2021-05-22T08:20:39+10:00 FieldOcc: rename extFieldOcc to foExt - - - - - 6ed68c74 by Ben Gamari at 2021-05-21T22:29:30-04:00 Merge commit '3b6a8774bdb543dad59b2618458b07feab8a55e9' into ghc-head - - - - - f9a02d34 by Alfredo Di Napoli at 2021-05-24T13:53:00+02:00 New Parser diagnostics interface - - - - - 392807d0 by Ben Gamari at 2021-05-24T09:57:40-04:00 Merge pull request haskell/haddock#1394 from adinapoli/wip/adinapoli-align-ps-messages Align Haddock to use the new Parser diagnostics interface - - - - - 33023cd8 by Ben Gamari at 2021-05-24T11:19:16-04:00 Revert "Add Haddock support for the OPAQUE pragma (#1380)" This reverts commit a1337c599ef7720b0482a25c55f11794112496dc. The GHC patch associated with this change is not yet ready to be merged. - - - - - 8c005af7 by Ben Simms at 2021-05-28T07:56:20+02:00 CI configuration for ghc-head (#1395) - - - - - 1e947612 by Hécate Moonlight at 2021-05-28T12:27:35+02:00 Use GHC 9.2 in CI runner (#1378) - - - - - e6fa10ab by CGenie at 2021-05-31T09:02:13+02:00 Add page about common errors (#1396) * Update index.rst Common errors page * Create common-errors.rst * Update common-errors.rst * Use GHC 9.2 in CI runner (#1378) * [haddock-api] remove .hspec-failures Co-authored-by: Hécate Moonlight <Kleidukos at users.noreply.github.com> - - - - - abc72a8d by Sylvain Henry at 2021-06-01T10:02:06+02:00 Adapt Haddock to Logger and Parser changes (#1399) - - - - - 91373656 by Zubin Duggal at 2021-06-01T20:45:10+02:00 Update haddockHypSrc tests since we now compute slighly more type info (#1397) - - - - - ed712822 by Marcin Szamotulski at 2021-06-02T08:54:33+02:00 Added myself to contributors - - - - - 49fdbcb7 by Marcin Szamotulski at 2021-06-02T08:57:24+02:00 Document multi component support - - - - - 9ddc8d7d by Hécate Moonlight at 2021-06-02T09:35:55+02:00 Merge pull request haskell/haddock#1379 from coot/coot/document-multi-component-support Document multi component support - - - - - 585b5c5e by Ben Simms at 2021-06-02T19:46:54+02:00 Update CONTRIBUTING.md (#1402) - - - - - 1df4a605 by Ben Simms at 2021-06-02T19:47:14+02:00 Update CONTRIBUTING.md (#1403) - - - - - 58ea43d2 by sheaf at 2021-06-02T22:09:06+02:00 Update Haddock Bug873 to account for renaming - - - - - c5d0ab23 by Vladislav Zavialov at 2021-06-10T13:35:42+03:00 HsToken in FunTy, RecConGADT - - - - - 1ae2f40c by Hécate Moonlight at 2021-06-11T11:19:09+02:00 Update the CI badges - - - - - 6fdc4de2 by Sylvain Henry at 2021-06-28T19:21:17+02:00 Fix mkParserOpts (#1411) - - - - - 18201670 by Alfredo Di Napoli at 2021-07-05T07:55:12+02:00 Rename getErrorMessages Lexer import This commit renames the Lexer import in `Hyperlinker.Parser` from `getErrorMessages` to `getPsErrorMessages` to eliminate the ambiguity with the `getErrorMessages` function defined in `GHC.Types.Error`. - - - - - 23173ca3 by Ben Gamari at 2021-07-07T11:31:44-04:00 Merge pull request haskell/haddock#1413 from adinapoli/wip/adinapoli-issue-19920 Rename getErrorMessages Lexer import - - - - - b3dc4ed8 by Alan Zimmerman at 2021-07-28T22:30:59+01:00 EPA: match changes from GHC T19834 (cherry picked from commit 2fec1b44e0ee7e263286709aa528b4ecb99ac6c2) - - - - - 5f177278 by Ben Gamari at 2021-08-06T01:17:37-04:00 Merge commit '2a966c8ca37' into HEAD - - - - - cdd81d08 by Marcin Szamotulski at 2021-08-08T17:19:06+02:00 coot/multiple packages (ghc-9.2) (#1418) - - - - - be0d71f1 by Marcin Szamotulski at 2021-08-16T08:46:03+02:00 coot/multiple package (ghc-head) (#1419) * FromJSON class Aeson style FromJSON class with Parsec based json parser. * doc-index.json file for multiple packages When creating haddock summary page for multiple packages render doc-index.json file using contents of all found 'doc-index.json' files. * Render doc-index.json When rendering html, render doc-index.json file independently of maybe_index_url option. doc-index.json file is useful now even if maybe_index_url is not `Nothing`. * base url option New `Flag_BaseURL` which configures from where static files are loaded (--base-url). If given and not equal "." static files are not coppied, as this indicates that they are not read from the the directory where we'd copy them. The default value is ".". - - - - - 3b09dbdf by Hécate Moonlight at 2021-10-07T23:26:03+02:00 Update GHC 9.2 to latest pre-release in CI - - - - - 7ac55417 by Zubin Duggal at 2021-10-11T12:10:19+02:00 Enable Haddock tests in GHC windows CI (#1428) * testsuite: strip windows line endings for haddock * hyperlinker: Work around double escaping (#19236) * deterministic SCC - - - - - 1cb81f25 by Andrew Lelechenko at 2021-10-12T15:23:19+02:00 haddock-library does not depend on bytestring or transformers (#1426) - - - - - a890b9aa by sheaf at 2021-10-15T22:19:42+02:00 update haddockHypsrcTest for GHC MR !6705 (#1430) - - - - - 42a55c6c by Sylvain Henry at 2021-10-15T22:20:10+02:00 Fix after PkgQual refactoring (#1429) - - - - - 91659238 by Alan Zimmerman at 2021-10-28T18:57:10+01:00 Update for changes in GHC for branch wip/az/no-srcspan-anno-instances - - - - - acf23e60 by Vladislav Zavialov at 2021-11-05T02:09:47+03:00 Do not use forall as an identifier See GHC ticket haskell/haddock#20609 - - - - - c565db0e by Krzysztof Gogolewski at 2021-11-27T02:42:35+01:00 Update after NoExtCon -> DataConCantHappen rename - - - - - b5f55590 by Artem Pelenitsyn at 2021-11-27T11:14:17+01:00 fix CI for 9.2 (#1436) - - - - - 25cd621e by Matthew Pickering at 2021-12-02T11:46:54+00:00 Update html-test for Data.List revert - - - - - 1d5ff85f by malteneuss at 2021-12-15T07:56:55+01:00 Add hint about inline link issue (#1444) - - - - - 791fde81 by Sylvain Henry at 2021-12-16T09:29:51+01:00 Bump ghc-head (#1445) * Update after NoExtCon -> DataConCantHappen rename * Update html-test for Data.List revert * Fix for new Plugins datatype Co-authored-by: Krzysztof Gogolewski <krzysztof.gogolewski at tweag.io> Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - 44236317 by Sylvain Henry at 2021-12-17T09:39:00+01:00 Fix for new Plugins datatype - - - - - 80ada0fa by Hécate Moonlight at 2021-12-17T17:28:48+01:00 Remove ghc-head workflow (#1446) Contributions of GHC glue code are now done on the GHC gitlab, not in the GitHub repo anymore. - - - - - 49e171cd by Matthew Pickering at 2021-12-28T09:47:09+00:00 Remove use of ExtendedModSummary - - - - - 0e91b5ea by askeblad at 2022-01-04T09:18:35+01:00 update URLs - - - - - 9f13c212 by Hécate Moonlight at 2022-02-25T10:19:46+01:00 Fix solver for GHC 9.2 - - - - - 386751a1 by Meng Weng Wong at 2022-02-25T19:19:11+01:00 IDoc link has bitrotted; replaced with web.archive.org cache. (#1454) - - - - - d877cbe6 by Hécate Moonlight at 2022-02-25T19:21:58+01:00 Fix haddock user guide (#1456) - - - - - cc47f036 by Andrew Lelechenko at 2022-03-04T17:29:36+01:00 Allow text-2.0 in haddock-library (#1459) - - - - - 7b3685a3 by malteneuss at 2022-03-07T19:27:24+01:00 Add multi-line style hint to style section (#1460) - - - - - c51088b8 by John Ericson at 2022-03-11T16:46:26+01:00 Fix CollectPass instance to match TTG refactor Companion to GHC !7614 (https://gitlab.haskell.org/ghc/ghc/-/merge_requests/7614) - - - - - b882195b by Vladislav Zavialov at 2022-03-14T20:32:30+01:00 Link to (~) - - - - - 877349b8 by Christiaan Baaij at 2022-03-16T09:20:43+01:00 Add Haddock support for the OPAQUE pragma - - - - - 0ea22721 by askeblad at 2022-03-16T09:44:27+01:00 typos (#1464) - - - - - a6d13da1 by Matthew Pickering at 2022-03-22T13:41:17+00:00 Minimum changes needed for compilation with hi-haddock With hi-haddock, of course there is a much large refactoring of haddock which could be achieved but that is left for a future patch which can implemented at any time independently of GHC. - - - - - e7ac9129 by Matthew Pickering at 2022-03-22T21:17:50+00:00 Update test output - - - - - 6d916214 by Matthew Pickering at 2022-03-24T15:06:26+00:00 Merge branch 'wip/opaque_pragma' into 'ghc-head' Add Haddock support for the OPAQUE pragma See merge request ghc/haddock!2 - - - - - 42208183 by Steve Hart at 2022-03-25T20:43:50+01:00 Fix CI (#1467) * CI: Reinstall GHC with docs CI tests were failing because the GHC preinstalled to the CI environment does not include documentation, which is required for running the Haddock tests. This commit causes the CI workflow to reinstall GHC with docs so that tests can succeed. - - - - - 9676fd79 by Steve Hart at 2022-03-25T21:33:34+01:00 Make links in Synopsis functional again (#1458) Commit e41c1cbe9f0476997eac7b4a3f17cbc6b2262faf added a call to e.preventDefault() when handling click events that reach a toggle element. This prevents the browser from following hyperlinks within the Synopsis section when they are clicked by a user. This commit restores functioning hyperlinks within the Synopsis section by removing the call to e.preventDefault(), as it does not appear to be necessary, and removing it increases the flexibility of the details-helper code. - - - - - d1edd637 by sheaf at 2022-04-01T12:02:02+02:00 Keep track of promotion ticks in HsOpTy Keeping track of promotion ticks in HsOpTy allows us to properly pretty-print promoted constructors such as lists. - - - - - 9dcb2dfc by Jakob Brünker at 2022-04-01T15:46:22+00:00 Add support for \cases See merge request ghc/ghc!7873 - - - - - b0412ee5 by askeblad at 2022-04-06T17:47:57+02:00 spelling errors (#1471) - - - - - 6b18829b by Vladislav Zavialov at 2022-04-06T18:53:58+02:00 Rename [] to List - - - - - 2d046691 by Vladislav Zavialov at 2022-04-07T20:25:54+03:00 HsToken ConDeclGADT con_dcolon - - - - - 90b43da4 by Steve Hart at 2022-04-12T13:29:46+02:00 Parse Markdown links at beginning of line within a paragraph (#1470) * Catch Markdown links at beginning of line within paragraph Per Issue haskell/haddock#774, Markdown links were being parsed as ordinary text when they occurred at the beginning of a line other than the first line of the paragraph. This occurred because the parser was not interpreting a left square bracket as a special character that could delimit special markup. A space character was considered a special character, so, if a space occurred at the beginning of the new line, then the parser would interpret the space by itself and then continue parsing, thereby catching the Markdown link. '\n' was not treated as a special character, so the parser did not catch a Markdown link that may have followed. Note that this will allow for Markdown links that are not surrounded by spaces. For example, the following text includes a Markdown link that will be parsed: Hello, world[label](url) This is consistent with how the parser handles other types of markup. * Remove obsolete documentation hint Commit 6b9aeafddf20efc65d3725c16e3fc43a20aac343 should eliminate the need for the workaround suggested in the documentation. - - - - - 5b08312d by Hécate Moonlight at 2022-04-12T13:36:38+02:00 Force ghc-9.2 in the cabal.project - - - - - 0d0ea349 by dependabot[bot] at 2022-04-12T13:57:41+02:00 Bump path-parse from 1.0.5 to 1.0.7 in /haddock-api/resources/html (#1469) Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.5 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - 2b9fc65e by dependabot[bot] at 2022-04-12T13:57:54+02:00 Bump copy-props from 2.0.4 to 2.0.5 in /haddock-api/resources/html (#1468) Bumps [copy-props](https://github.com/gulpjs/copy-props) from 2.0.4 to 2.0.5. - [Release notes](https://github.com/gulpjs/copy-props/releases) - [Changelog](https://github.com/gulpjs/copy-props/blob/master/CHANGELOG.md) - [Commits](https://github.com/gulpjs/copy-props/compare/2.0.4...2.0.5) --- updated-dependencies: - dependency-name: copy-props dependency-type: indirect ... Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - ea98a6fb by Ben Gamari at 2022-04-23T22:54:37-04:00 Update for GHC 9.4 - - - - - 9e11864f by Ben Gamari at 2022-04-25T16:24:31-04:00 Merge remote-tracking branch 'upstream/ghc-9.2' into ghc-head - - - - - f83cc506 by Ben Gamari at 2022-04-25T17:00:25-04:00 Bump ghc version to 9.5 - - - - - e01c2e7d by Ben Gamari at 2022-04-28T16:19:04-04:00 Revert "Bump ghc-head (#1445)" This reverts commit b29a78ef6926101338f62e84f456dac8659dc9d2. This should not have been merged. - - - - - a2b5ee8c by Ben Gamari at 2022-04-28T16:19:24-04:00 Merge commit '2627a86c' into ghc-head - - - - - 0c6fe4f9 by Ben Gamari at 2022-04-29T10:05:54-04:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-9.4 - - - - - b6e5cb0a by Ben Gamari at 2022-04-29T11:46:06-04:00 Revert "HsToken ConDeclGADT con_dcolon" This reverts commit 24208496649a02d5f87373052c430ea4a97842c5. - - - - - 15a62888 by Ben Gamari at 2022-04-29T15:12:55-04:00 Bump base upper bound - - - - - 165b9031 by Ben Gamari at 2022-04-29T23:58:38-04:00 Update test output - - - - - e0c3e5da by Phil de Joux at 2022-05-02T14:46:38+02:00 Add hlint action .hlint.yaml with ignores & CPP. (#1475) - - - - - ead1158d by Raphael Das Gupta at 2022-05-02T14:46:48+02:00 fix grammar in docs: "can the" → "can be" (#1477) - - - - - cff97944 by Ben Gamari at 2022-05-02T18:38:56-04:00 Allow base-4.17 - - - - - e4ecb201 by Phil de Joux at 2022-05-03T13:14:55+02:00 Remove unused imports that GHC warned about. (#1480) - - - - - 222890b1 by Phil de Joux at 2022-05-03T13:15:46+02:00 Follow hlint suggestion to remove redundant bang. (#1479) - - - - - 058b671f by Phil de Joux at 2022-05-03T13:34:04+02:00 Follow hlint, remove language pragmas in libs. (#1478) - - - - - 0a645049 by Ben Simms at 2022-05-03T14:19:24+02:00 Keep track of ordered list indexes and render them (#1407) * Keep track of ordered list indexes and render them * Rename some identifiers to clarify - - - - - f0433304 by Norman Ramsey at 2022-05-04T15:13:34-04:00 update for changes in GHC API - - - - - 3740cf71 by Emily Martins at 2022-05-06T18:23:48+02:00 Add link to the readthedocs in cabal description to show on hackage. (cherry picked from commit 52e2d40d47295c02d3181aac0c53028e730f1e3b) - - - - - 5d754f1e by Hécate Moonlight at 2022-05-06T18:44:57+02:00 remove Bug873 - - - - - 968fc267 by Hécate Moonlight at 2022-05-06T18:48:28+02:00 Ignore "Use second" HLint suggestion. It increases laziness. - - - - - 02d14e97 by Jade Lovelace at 2022-05-07T17:42:08+02:00 Fix hyperlinks to external items and modules (#1482) Fixes haskell/haddock#1481. There were two bugs in this: * We were assuming that we were always getting a relative path to the module in question, while Nix gives us file:// URLs sometimes. This change checks for those and stops prepending `..` to them. * We were not linking to the file under the module. This seems to have been a regression introduced by haskell/haddock#977. That is, the URLs were going to something like file:///nix/store/3bwbsy0llxxn1pixx3ll02alln56ivxy-ghc-9.0.2-doc/share/doc/ghc/html/libraries/base-4.15.1.0/src which does not have the appropriate HTML file or fragment for the item in question at the end. There is a remaining instance of the latter bug, but not in the hyperlinker: the source links to items reexported from other modules are also not including the correct file name. e.g. the reexport of Entity in esqueleto, from persistent. NOTE: This needs to get tested with relative-path located modules. It seems correct for Nix based on my testing. Testing strategy: ``` nix-shell '<nixpkgs>' --pure -A haskell.packages.ghc922.aeson mkdir /tmp/aesonbuild && cd /tmp/aesonbuild export out=/tmp/aesonbuild/out genericBuild ln -sf $HOME/co/haddock/haddock-api/resources . ./Setup haddock --with-haddock=$HOME/path/to/haddock/exec --hyperlink-source ``` - - - - - b22b87ed by Artem Pelenitsyn at 2022-05-08T16:19:47+02:00 fix parsing trailing quotes in backticked identifiers (#1408) (#1483) - - - - - 80ae107b by Alex Biehl at 2022-05-08T16:37:16+02:00 Fix "Defined by not used" error (cherry picked from commit 6e02a620a26c3a44f98675dd1b93b08070c36c0a) - - - - - 4c838e84 by Hécate Moonlight at 2022-05-08T16:37:16+02:00 Fix the changelog and bump the version of haddock-library on ghc-9.2 - - - - - fc9827b4 by Hécate Moonlight at 2022-05-08T16:40:40+02:00 Fix the changelog and bump the version of haddock-library on ghc-9.2 - - - - - b153b555 by Xia Li-yao at 2022-05-20T17:52:42+02:00 Hide synopsis from search when hidden (#1486) Fix haskell/haddock#1451 - - - - - f3e38b85 by Marcin Szamotulski at 2022-05-21T23:32:31+02:00 Allow to hide interfaces when rendering multiple components (#1487) This is useful when one wishes to `--gen-contents` when rendering multiple components, but one does not want to render all modules. This is in particular useful when adding base package. - - - - - f942863b by Marcin Szamotulski at 2022-05-24T08:29:59+02:00 Check if doc-index.json exists before reading it (#1488) - - - - - 31e92982 by Marcin Szamotulski at 2022-05-25T16:22:13+02:00 Version bump 2.26.1 (#1489) * Version bump 2.26.1 We extended format accepted by `--read-interface` option, which requires updating the minor version. * Update documentation of --read-interface option - - - - - 7cc873e0 by sheaf at 2022-05-25T16:42:31+02:00 Updated HaddockHypsrcTest output for record update changes (MR !7981) - - - - - cd196942 by Marcin Szamotulski at 2022-05-25T20:28:47+02:00 Use visibility to decide which interfaces are included in quickjump (#1490) This is also consistent with how html index is build. See haskell/cabal#7669 for rationale behind this decision. - - - - - 00c713c5 by Hécate Moonlight at 2022-05-26T17:09:15+02:00 Add code of conduct and hspec failure files in .gitignore - - - - - 2f3039f1 by Hécate Moonlight at 2022-05-26T17:10:59+02:00 Add code of conduct and hspec failure files in .gitignore - - - - - 63a5650c by romes at 2022-05-31T12:43:22+01:00 TTG: Match new GHC AST - - - - - dd7d1617 by romes at 2022-06-02T16:11:00+01:00 Update for IE changes in !8228 - - - - - c23aaab7 by cydparser at 2022-06-06T08:48:14+02:00 Fix and improve CI (#1495) * Pin GHC version before creating the freeze file * Use newest action versions * Improve caching * Avoid unnecessarily reinstalling GHC * Use GHC 9.2.2 for CI Co-authored-by: Cyd Wise <cwise at tripshot.com> - - - - - c156fa77 by Hécate Moonlight at 2022-06-06T11:59:35+02:00 Add Mergify configuration (#1496) - - - - - 2dba4188 by Hécate Moonlight at 2022-06-06T16:12:50+02:00 Bump haddock's version in cabal file to 2.26.1 (#1497) - - - - - d7d4b8b9 by Marcin Szamotulski at 2022-06-07T06:09:40+00:00 Render module tree per package in the content page (#1492) * Render module tree per package in the content page When rendering content page for multiple packages it is useful to split the module tree per package. Package names in this patch are inferred from haddock's interface file names. * Write PackageInfo into interface file To keep interface file format backward compatible, instead of using `Binary` instance for `InterfaceFile` we introduce functions to serialise and deserialise, which depends on the interface file version. - - - - - 77765665 by Mike Pilgrem at 2022-06-12T21:57:19+01:00 Fix haskell/haddock#783 Don't show button if --quickjump not present - - - - - b0e079b0 by mergify[bot] at 2022-06-13T11:49:37+00:00 Merge pull request haskell/haddock#1108 from mpilgrem/fix783 Fix haskell/haddock#783 Don't show button if --quickjump not present - - - - - 6c0292b1 by Hécate Moonlight at 2022-06-21T17:21:08+02:00 Update the contribution guide - - - - - e413b9fa by dependabot[bot] at 2022-06-21T23:38:19+02:00 Bump shell-quote from 1.6.1 to 1.7.3 in /haddock-api/resources/html (#1500) Bumps [shell-quote](https://github.com/substack/node-shell-quote) from 1.6.1 to 1.7.3. - [Release notes](https://github.com/substack/node-shell-quote/releases) - [Changelog](https://github.com/substack/node-shell-quote/blob/master/CHANGELOG.md) - [Commits](https://github.com/substack/node-shell-quote/compare/1.6.1...1.7.3) --- updated-dependencies: - dependency-name: shell-quote dependency-type: indirect ... Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - 29d0ef70 by romes at 2022-07-06T11:29:39+02:00 TTG: AST Updates for !8308 - - - - - 1bae7c87 by Alan Zimmerman at 2022-07-06T22:50:43+01:00 Match GHC changes for T21805 This brings in a newtype for FieldLabelString - - - - - 6fe8b988 by Phil de Joux at 2022-07-16T20:54:26+00:00 Bump hlint version to 3.4.1, the version with counts. (#1503) Redo the counts available with the --default option. - - - - - 48fb43af by Phil de Joux at 2022-07-19T09:32:55+02:00 Follow hlint suggestion: unused LANGUAGE pragma. (#1504) * Follow hlint suggestion: unused LANGUAGE pragma. * Ignore within modules to pass linting and pass tests. - - - - - c1cf1fa7 by Phil de Joux at 2022-07-24T13:45:59+02:00 Follow hlint suggestion: redundant $. (#1505) * Follow hlint suggestion: redundant $. * Remove $ and surplus blank lines in Operators. - - - - - 74777eb2 by Jade Lovelace at 2022-07-29T11:02:41+01:00 Fix hyperlinks to external items and modules (#1482) Fixes haskell/haddock#1481. There were two bugs in this: * We were assuming that we were always getting a relative path to the module in question, while Nix gives us file:// URLs sometimes. This change checks for those and stops prepending `..` to them. * We were not linking to the file under the module. This seems to have been a regression introduced by haskell/haddock#977. That is, the URLs were going to something like file:///nix/store/3bwbsy0llxxn1pixx3ll02alln56ivxy-ghc-9.0.2-doc/share/doc/ghc/html/libraries/base-4.15.1.0/src which does not have the appropriate HTML file or fragment for the item in question at the end. There is a remaining instance of the latter bug, but not in the hyperlinker: the source links to items reexported from other modules are also not including the correct file name. e.g. the reexport of Entity in esqueleto, from persistent. NOTE: This needs to get tested with relative-path located modules. It seems correct for Nix based on my testing. Testing strategy: ``` nix-shell '<nixpkgs>' --pure -A haskell.packages.ghc922.aeson mkdir /tmp/aesonbuild && cd /tmp/aesonbuild export out=/tmp/aesonbuild/out genericBuild ln -sf $HOME/co/haddock/haddock-api/resources . ./Setup haddock --with-haddock=$HOME/path/to/haddock/exec --hyperlink-source ``` (cherry picked from commit ab53ccf089ea703b767581ac14be0f6c78a7678a) - - - - - faa4cfcf by Hécate Moonlight at 2022-07-29T20:31:20+02:00 Merge pull request haskell/haddock#1516 from duog/9-4-backport-fix-hyperlinks Backport 9-4: Fix hyperlinks to external items and modules (#1482) - - - - - 5d2450f3 by Ben Gamari at 2022-08-05T17:41:15-04:00 Merge remote-tracking branch 'origin/ghc-9.4' - - - - - 63954f73 by Ben Gamari at 2022-08-05T19:08:36-04:00 Clean up build and testsuite for GHC 9.4 - - - - - d4568cb8 by Hécate Moonlight at 2022-08-05T19:10:49-04:00 Bump the versions - - - - - 505583a4 by Ben Gamari at 2022-08-06T13:58:27-04:00 Merge pull request haskell/haddock#1518 from bgamari/wip/ghc-9.4-merge Merge GHC 9.4 into `main` - - - - - 5706f6a4 by Ben Gamari at 2022-08-06T22:57:21-04:00 html-test: Testsuite changes for GHC 9.4.1 - - - - - 5f2a45a2 by Ben Gamari at 2022-08-15T14:33:05-04:00 doc: Fix a few minor ReST issues Sphinx was complaining about too-short title underlines. - - - - - 220e6410 by Ben Gamari at 2022-08-15T14:41:24-04:00 Merge branch 'main' into ghc-head - - - - - fbeb1b02 by Ben Gamari at 2022-08-15T14:45:16-04:00 Updates for GHC 9.5 - - - - - eee562eb by Vladislav Zavialov at 2022-08-15T14:46:13-04:00 HsToken ConDeclGADT con_dcolon - - - - - c5f073db by Ben Gamari at 2022-08-15T16:55:35-04:00 Updates for GHC 9.5 - - - - - 3f7ab242 by Vladislav Zavialov at 2022-08-15T16:55:35-04:00 HsToken ConDeclGADT con_dcolon - - - - - a18e473d by Ben Gamari at 2022-08-16T08:35:19-04:00 Merge branch 'wip/ghc-head-bump' into ghc-head - - - - - af0ff3a4 by M Farkas-Dyck at 2022-09-15T21:16:05+00:00 Disuse `mapLoc`. - - - - - a748fc38 by Matthew Farkas-Dyck at 2022-09-17T10:44:18+00:00 Scrub partiality about `NewOrData`. - - - - - 2758fb6c by John Ericson at 2022-09-18T03:27:37+02:00 Test output changed because of change to `base` Spooky, but I guess that is intended? - - - - - a7eec128 by Torsten Schmits at 2022-09-21T11:06:55+02:00 update tests for the move of tuples to GHC.Tuple.Prim - - - - - 461e7b9d by Ross Paterson at 2022-09-24T22:01:25+00:00 match implementation of GHC proposal haskell/haddock#106 (Define Kinds Without Promotion) - - - - - f7fd77ef by sheaf at 2022-10-17T14:53:01+02:00 Update Haddock for GHC MR !8563 (configuration of diagnostics) - - - - - 3d3e85ab by Vladislav Zavialov at 2022-10-22T23:04:06+03:00 Class layout info - - - - - cbde4cb0 by Simon Peyton Jones at 2022-10-25T23:19:18+01:00 Adapt to Constraint-vs-Type See haskell/haddock#21623 and !8750 - - - - - 7108ba96 by Tom Smeding at 2022-11-01T22:33:23+01:00 Remove outdated footnote about module re-exports The footnote is invalid with GHC 9.2.4 (and possibly earlier): the described behaviour in the main text works fine. - - - - - 206c6bc7 by Hécate Moonlight at 2022-11-01T23:00:46+01:00 Merge pull request haskell/haddock#1534 from tomsmeding/patch-1 - - - - - a57b4c4b by Andrew Lelechenko at 2022-11-21T00:39:52+00:00 Support mtl-2.3 - - - - - e9d62453 by Simon Peyton Jones at 2022-11-25T13:49:12+01:00 Track small API change in TyCon.hs - - - - - eb1c73f7 by Ben Gamari at 2022-12-07T08:46:21-05:00 Update for GhC 9.6 - - - - - 063268dd by Ben Gamari at 2022-12-07T11:26:32-05:00 Merge remote-tracking branch 'upstream/ghc-head' into HEAD - - - - - 4ca722fe by Ben Gamari at 2022-12-08T14:43:26-05:00 Bump bounds to accomodate base-4.18 - - - - - 340b7511 by Vladislav Zavialov at 2022-12-10T12:31:28+00:00 HsToken in HsAppKindTy - - - - - 946226ec by Ben Gamari at 2022-12-13T20:12:56-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - fd8faa66 by Ben Gamari at 2022-12-22T13:44:28-05:00 Bump GHC version to 9.7 - - - - - 2958aa9c by Ben Gamari at 2022-12-22T14:49:16-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 9e0fefd8 by Andrei Borzenkov at 2023-01-30T14:02:04+04:00 Rename () to Unit, Rename (,,...,,) to Tuple<n> - - - - - eb3968b5 by Ben Gamari at 2023-03-10T02:32:43-05:00 Bump versions for ghc-9.6 release - - - - - 4aeead36 by Adam Gundry at 2023-03-23T13:53:47+01:00 Adapt to warning categories changes - - - - - 642d8d60 by sheaf at 2023-03-29T13:35:56+02:00 Adapt to record field refactor This commit adapts to the changes in GHC MR !8686, which overhauls the treatment of record fields in the renamer, adding separate record field namespaces and entirely removing the GreName datatype. - - - - - ac8d4333 by doyougnu at 2023-03-29T11:11:44-04:00 Update UniqMap API - - - - - 7866fc86 by Ben Orchard at 2023-04-20T11:29:33+02:00 update classify with new tokens - - - - - ffcdd683 by Finley McIlwaine at 2023-04-24T09:36:18-06:00 Remove index-state - - - - - 05b70982 by Finley McIlwaine at 2023-04-26T08:16:31-06:00 `renameInterface` space leak fixes - Change logic for accumulation of names for which link warnings will be generated - Change handling of `--ignore-link-symbol` to allow qualified and unqualified names. Added to CHANGES.md - Some formatting changes and comments here and there - - - - - e5697d7c by Finley McIlwaine at 2023-04-27T18:46:36-06:00 Messy things - ghc-debug dependency and instrumentation - cabal.project custom with-compiler - hie.yaml files - traces and such - - - - - 0b8ef80b by Finley McIlwaine at 2023-05-02T18:08:52-06:00 Stop retaining GRE closures GRE closures should never be necessary to Haddock, so we never want to keep them on the heap. Despite that, they are retained by a lot of the data structures that Haddock makes use of. - Attempt to fix that situation by adding strictness to various computations and pruning the `ifaceInstances` field of `Interface` to a much thinner data type. - Removes the `ifaceFamInstances` field, as it was never used. - Move some of the attach instances types (e.g. `SimpleType`) to the types module - - - - - 8bda991b by Finley McIlwaine at 2023-05-08T16:07:51-06:00 Memory usage fixes - Refactor `ifaceDeclMap` to drastically reduce memory footprint. We no longer store all declarations associated with a given name, since we only cared to determine if the only declaration associated with a name was a value declaration. Change the `DeclMap` type to better reflect this. - Drop pre-renaming export items after the renaming step. Since the Hoogle backend used the pre-renamed export items, this isn't trivial. We now generate Hoogle output for exported declarations during the renaming step (if Hoogle output /should/ be generated), and store that with the renamed export item. - Slightly refactor Hoogle backend to handle the above change and allow for early generation of Hoogle output. - Remove the `ifaceRnDocMap` and `ifaceRnArgMap` fields of the `Interface` type, as they were never used. - Remove some unnecessary strictness - Remove a lot of dead code from `Syb` module - - - - - 1611ac0c by Finley McIlwaine at 2023-05-09T11:51:57-06:00 Unify ErrMsgM and IfM - Delete ErrMsgM, stop accumulating warnings in a writer - Make IfM a state monad, print warnings directly to stdout, move IfM type into types module - Drop ErrMsg = String synonym - Unset IORefs from plugin after they are read, preventing unnecessary retention of interfaces - - - - - 42d696ab by Finley McIlwaine at 2023-05-11T15:52:07-06:00 Thunk leak fixes The strictness introduced in this commit was motivated by observing thunk leaks in the eventlog2html output. - Refactor attach instances list comprehension to avoid large intermediate thunks - Refactor some HTML backend list comprehensions to avoid large intermediate thunks - Avoid thunks accumulating in documentation types or documentation parser - A lot of orphan NFData instances to allow us to force documentation values - - - - - 68561cf6 by Finley McIlwaine at 2023-05-11T17:02:10-06:00 Remove GHC debug dep - - - - - 10519e3d by Finley McIlwaine at 2023-05-15T12:40:48-06:00 Force HIE file path Removes a potential retainer of `ModSummary`s - - - - - 1e4a6ec6 by Finley McIlwaine at 2023-05-15T14:20:34-06:00 Re-add index-state, with-compiler, delete hie.yamls - - - - - a2363fe9 by Hécate Moonlight at 2023-05-15T22:45:16+02:00 Merge pull request haskell/haddock#1594 from FinleyMcIlwaine/finley/ghc-9.6-mem-fixes Reduce memory usage - - - - - e8a78383 by Finley McIlwaine at 2023-05-17T12:19:16-06:00 Merge branch ghc-9.6 into ghc-head - - - - - 22e25581 by Finley McIlwaine at 2023-05-17T12:20:23-06:00 Merge branch 'ghc-head' of gitlab.haskell.org:ghc/haddock into ghc-head - - - - - 41bbf0df by Bartłomiej Cieślar at 2023-05-24T08:57:58+02:00 changes to the WarningTxt cases Signed-off-by: Bartłomiej Cieślar <bcieslar2001 at gmail.com> - - - - - c686ba9b by Hécate Moonlight at 2023-06-01T14:03:02-06:00 Port the remains of Hi-Haddock - - - - - 9d8a85fd by Hécate Moonlight at 2023-06-01T14:03:06-06:00 Stdout for tests - - - - - 36331d07 by Finley McIlwaine at 2023-06-01T14:06:02-06:00 Formatting, organize imports - - - - - a06059b1 by Finley McIlwaine at 2023-06-01T14:06:04-06:00 Fix empty context confusion in Convert module - - - - - 379346ae by Finley McIlwaine at 2023-06-01T14:06:04-06:00 Fix associated type families in Hoogle output - - - - - fc6ea7ed by Finley McIlwaine at 2023-06-01T14:06:04-06:00 Fix test refs Accept several changes in Hoogle tests: Pretty printing logic no longer prints the `(Proxy (Proxy (...))` chain in Bug806 with parentheses. Since this test was only meant to verify that line breaks do not occur, accept the change. `tyThingToLHsDecl` is called for class and data declarations, which ends up "synifying" the type variables and giving unlifted types kind signatures. As a result, type variables of kind `Type -> Type` are now printed with kind signatures in Hoogle output. This could be changed by manually drop kind signatures from class variables in the Hoogle backend if the behavior is deemed unacceptable. Sometimes subordinate declarations are exported separate from their parent declarations (e.g. record selectors). In this case, a type signature is cobbled together for the export item in `extractDecl`. Since this type signature is very manually constructed, it may lack kind signatures of decls constructed from `tyThingToLHsDecl`. An example of this is the `type-sigs` Hoogle test. Change `*` to `Type` in Hoogle test refs. I don't think this will break Hoogle behavior, since it appears to not consider type signatures in search. I have not fully verified this. - - - - - e14b7e58 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Fix LaTeX backend test refs Changes to GHC pretty printing code have resulted in some differences to Haddock's LaTeX output. - Type variables are printed explicitly quantified in the LinearTypes test - Wildcard types in type family equations are now printed numbered, e.g. _1 _2, in the TypeFamilies3 test - Combined signatures in DefaultSignatures test are now documented as separate signatures - - - - - 41b5b296 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Formatting and test source updates - Stop using kind `*` in html test sources - Add TypeOperators where necessary to avoid warnings and future errors - Rename some test modules to match their module names - - - - - c640e2a2 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Fix missing deprecation warnings on record fields `lookupOccEnv` was used to resolve `OccNames` with warnings attached, but it doesn't look in the record field namespace. Thus, if a record field had a warning attached, it would not resolve and the warning map would not include it. This commit fixes by using `lookupOccEnv_WithFields` instead. - - - - - fad0c462 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Formatting and some comments - - - - - 751fd023 by Finley McIlwaine at 2023-06-01T14:11:41-06:00 Accept HTML test diffs All diffs now boil down to the expected differences resulting from declarations being reified from TyThings in hi-haddock. Surface syntax now has much less control over the syntax used in the documentation. - - - - - d835c845 by Finley McIlwaine at 2023-06-01T14:11:45-06:00 Adapt to new load' type - - - - - dcf776c4 by Finley McIlwaine at 2023-06-01T14:13:13-06:00 Update mkWarningMap and moduleWarning - - - - - 8e8432fd by Finley McIlwaine at 2023-06-01T14:28:54-06:00 Revert load' changes - - - - - aeb2982c by Finley McIlwaine at 2023-06-01T14:40:24-06:00 Accept change to Instances test in html-test Link to Data.Tuple instead of GHC.Tuple.Prim - - - - - 8adfdbac by Finley McIlwaine at 2023-06-01T15:53:17-06:00 Reset ghc dep to ^>= 9.6 - - - - - 2b1ce93d by Finley McIlwaine at 2023-06-06T07:50:04-06:00 Update CHANGES.md, user guide, recomp avoidance * Add --trace-args flag for tracing arguments received to standard output * Avoid recompiling due to changes in optimization flags * Update users guide and changes.md - - - - - f3da6676 by Finley McIlwaine at 2023-06-06T14:12:56-06:00 Add "Avoiding Recompilation" section to docs This section is a bit of a WIP due to the unstable nature of hi-haddock and the lack of tooling supporting it, but its a good start. - - - - - bf36c467 by Matthew Pickering at 2023-06-07T10:16:09+01:00 Revert back to e16e20d592a6f5d9ed1af17b77fafd6495242345 Neither of these MRs are ready to land yet which causes issues with other MRs which are ready to land and need haddock changes. - - - - - 421510a9 by Vladislav Zavialov at 2023-06-07T09:36:30+00:00 atSign has no unicode variant Prior to this change, atSign was defined as follows: atSign unicode = text (if unicode then "@" else "@") Yes, this is the same symbol '\64' and not your font playing tricks on you. Now we define: atSign = char '@' Both the LaTeX and the Xhtml backend are updated accordingly. - - - - - 3785c276 by Vladislav Zavialov at 2023-06-07T09:36:30+00:00 LaTeX: fix printing of type variable bindings Consider this type signature: kindOf :: forall {k} (a :: k). Proxy a -> Proxy k Prior to this fix, the LaTeX backend rendered it like this: kindOf :: forall k a. Proxy a -> Proxy k Now we preserve explicit specificity and kind annotations. - - - - - 0febf3a8 by Vladislav Zavialov at 2023-06-07T09:36:30+00:00 Add support for invisible binders in type declarations - - - - - 13e33bb3 by Finley McIlwaine at 2023-06-08T07:51:59-06:00 Add "Avoiding Recompilation" section to docs This section is a bit of a WIP due to the unstable nature of hi-haddock and the lack of tooling supporting it, but its a good start. - - - - - 3e5340ce by Finley McIlwaine at 2023-06-08T07:54:27-06:00 Add note about stubdir to recompilation docs - - - - - db7e84dc by Finley at 2023-06-08T08:11:03-06:00 Merge pull request haskell/haddock#1597 from haskell/finley/hi-haddock-9.6 hi-haddock for ghc 9.6 - - - - - 4e085d17 by Finley McIlwaine at 2023-06-14T13:41:06-06:00 Replace SYB traversals - - - - - 7b39aec5 by Finley McIlwaine at 2023-06-14T14:20:17-06:00 Test ref accepts, remove unused HaddockClsInst - - - - - 8f27023b by Ben Gamari at 2023-06-15T03:10:24-04:00 compiler: Cross-reference Note [StgToJS design] In particular, the numeric representations are quite useful context in a few places. - - - - - a71b60e9 by Andrei Borzenkov at 2023-06-15T03:11:00-04:00 Implement the -Wimplicit-rhs-quantification warning (#23510) GHC Proposal #425 "Invisible binders in type declarations" forbids implicit quantification of type variables that occur free on the right-hand side of a type synonym but are not mentioned on the left-hand side. The users are expected to rewrite this using invisible binders: type T1 :: forall a . Maybe a type T1 = 'Nothing :: Maybe a -- old type T1 @a = 'Nothing :: Maybe a -- new Since the @k-binders are a new feature, we need to wait for three releases before we require the use of the new syntax. In the meantime, we ought to provide users with a new warning, -Wimplicit-rhs-quantification, that would detect when such implicit quantification takes place, and include it in -Wcompat. - - - - - 0078dd00 by Sven Tennie at 2023-06-15T03:11:36-04:00 Minor refactorings to mkSpillInstr and mkLoadInstr Better error messages. And, use the existing `off` constant to reduce duplication. - - - - - 1792b57a by doyougnu at 2023-06-15T03:12:17-04:00 JS: merge util modules Merge Core and StgUtil modules for StgToJS pass. Closes: #23473 - - - - - 469ff08b by Vladislav Zavialov at 2023-06-15T03:12:57-04:00 Check visibility of nested foralls in can_eq_nc (#18863) Prior to this change, `can_eq_nc` checked the visibility of the outermost layer of foralls: forall a. forall b. forall c. phi1 forall x. forall y. forall z. phi2 ^^ up to here Then it delegated the rest of the work to `can_eq_nc_forall`, which split off all foralls: forall a. forall b. forall c. phi1 forall x. forall y. forall z. phi2 ^^ up to here This meant that some visibility flags were completely ignored. We fix this oversight by moving the check to `can_eq_nc_forall`. - - - - - 59c9065b by Luite Stegeman at 2023-06-15T03:13:37-04:00 JS: use regular mask for blocking IO Blocking IO used uninterruptibleMask which should make any thread blocked on IO unreachable by async exceptions (such as those from timeout). This changes it to a regular mask. It's important to note that the nodejs runtime does not actually interrupt the blocking IO when the Haskell thread receives an async exception, and that file positions may be updated and buffers may be written after the Haskell thread has already resumed. Any file descriptor affected by an async exception interruption should therefore be used with caution. - - - - - 907c06c3 by Luite Stegeman at 2023-06-15T03:13:37-04:00 JS: nodejs: do not set 'readable' handler on stdin at startup The Haskell runtime used to install a 'readable' handler on stdin at startup in nodejs. This would cause the nodejs system to start buffering the stream, causing data loss if the stdin file descriptor is passed to another process. This change delays installation of the 'readable' handler until the first read of stdin by Haskell code. - - - - - a54b40a9 by Luite Stegeman at 2023-06-15T03:13:37-04:00 JS: reserve one more virtual (negative) file descriptor This is needed for upcoming support of the process package - - - - - 78cd1132 by Andrei Borzenkov at 2023-06-15T11:16:11+04:00 Report scoped kind variables at the type-checking phase (#16635) This patch modifies the renamer to respect ScopedTypeVariables in kind signatures. This means that kind variables bound by the outermost `forall` now scope over the type: type F = '[Right @a @() () :: forall a. Either a ()] -- ^^^^^^^^^^^^^^^ ^^^ -- in scope here bound here However, any use of such variables is a type error, because we don't have type-level lambdas to bind them in Core. This is described in the new Note [Type variable scoping errors during type check] in GHC.Tc.Types. - - - - - df9c2090 by Finley McIlwaine at 2023-06-15T08:02:51-06:00 Use batchMsg for progress reporting during load With hi-haddock as is, there is an awkward silence during the load operation. This commit makes haddock use the default `batchMsg` Messager for progress reporting, and makes the default GHC verbosity level 1, so the user can see what GHC is doing. - - - - - f23679a8 by Hécate Moonlight at 2023-06-15T20:31:53+02:00 Merge pull request haskell/haddock#1600 from haskell/finley/hi-haddock-optim - - - - - a7982192 by Finley McIlwaine at 2023-06-15T15:02:16-06:00 hi-haddock squashed - - - - - 4a41ba75 by Sylvain Henry at 2023-06-15T18:09:15-04:00 JS: testsuite: use correct ticket number Replace #22356 with #22349 for these tests because #22356 has been fixed but now these tests fail because of #22349. - - - - - 15f150c8 by Sylvain Henry at 2023-06-15T18:09:16-04:00 JS: testsuite: update ticket numbers - - - - - 08d8e9ef by Sylvain Henry at 2023-06-15T18:09:16-04:00 JS: more triage - - - - - e8752e12 by Krzysztof Gogolewski at 2023-06-15T18:09:52-04:00 Fix test T18522-deb-ppr Fixes #23509 - - - - - c34f0c8d by Finley McIlwaine at 2023-06-15T16:22:03-06:00 Merge remote-tracking branch 'origin/ghc-9.6' into finley/hi-haddock-squashed - - - - - 62c56416 by Ben Price at 2023-06-16T05:52:39-04:00 Lint: more details on "Occurrence is GlobalId, but binding is LocalId" This is helpful when debugging a pass which accidentally shadowed a binder. - - - - - d4c10238 by Ryan Hendrickson at 2023-06-16T05:53:22-04:00 Clean a stray bit of text in user guide - - - - - 93647b5c by Vladislav Zavialov at 2023-06-16T05:54:02-04:00 testsuite: Add forall visibility test cases The added tests ensure that the type checker does not confuse visible and invisible foralls. VisFlag1: kind-checking type applications and inferred type variable instantiations VisFlag1_ql: kind-checking Quick Look instantiations VisFlag2: kind-checking type family instances VisFlag3: checking kind annotations on type parameters of associated type families VisFlag4: checking kind annotations on type parameters in type declarations with SAKS VisFlag5: checking the result kind annotation of data family instances - - - - - 40452797 by Bartłomiej Cieślar at 2023-06-16T12:26:04+02:00 Changes related to MR !10283 MR !10283 changes the alternatives for WarningTxt pass. This MR reflects those changes in the haddock codebase. Signed-off-by: Bartłomiej Cieślar <bcieslar2001 at gmail.com> - - - - - e58673bf by Ben Gamari at 2023-06-16T09:33:35-04:00 Bump GHC version to 9.8 - - - - - 74bdf972 by Ben Gamari at 2023-06-16T09:36:18-04:00 Merge commit 'fcaaad06770a26d35d4aafd65772dedadf17669c' into ghc-head - - - - - a5f0c00e by Sylvain Henry at 2023-06-16T12:25:40-04:00 JS: factorize SaneDouble into its own module Follow-up of b159e0e9 whose ticket is #22736 - - - - - 0baf9e7c by Krzysztof Gogolewski at 2023-06-16T12:26:17-04:00 Add tests for #21973 - - - - - 640ea90e by Diego Diverio at 2023-06-16T23:07:55-04:00 Update documentation for `<**>` - - - - - 2469a813 by Diego Diverio at 2023-06-16T23:07:55-04:00 Update text - - - - - 1f515bbb by Diego Diverio at 2023-06-16T23:07:55-04:00 Update examples - - - - - 7af99a0d by Diego Diverio at 2023-06-16T23:07:55-04:00 Update documentation to actually display code correctly - - - - - 800aad7e by Andrei Borzenkov at 2023-06-16T23:08:32-04:00 Type/data instances: require that variables on the RHS are mentioned on the LHS (#23512) GHC Proposal #425 "Invisible binders in type declarations" restricts the scope of type and data family instances as follows: In type family and data family instances, require that every variable mentioned on the RHS must also occur on the LHS. For example, here are three equivalent type instance definitions accepted before this patch: type family F1 a :: k type instance F1 Int = Any :: j -> j type family F2 a :: k type instance F2 @(j -> j) Int = Any :: j -> j type family F3 a :: k type instance forall j. F3 Int = Any :: j -> j - In F1, j is implicitly quantified and it occurs only on the RHS; - In F2, j is implicitly quantified and it occurs both on the LHS and the RHS; - In F3, j is explicitly quantified. Now F1 is rejected with an out-of-scope error, while F2 and F3 continue to be accepted. - - - - - 9132d529 by Sylvain Henry at 2023-06-18T02:50:34-04:00 JS: testsuite: use correct ticket numbers - - - - - c3a1274c by Sylvain Henry at 2023-06-18T02:50:34-04:00 JS: don't dump eventlog to stderr by default Fix T16707 Bump stm submodule - - - - - 89bb8ad8 by Ryan Hendrickson at 2023-06-18T02:51:14-04:00 Fix TH name lookup for symbolic tycons (#23525) - - - - - cb9e1ce4 by Finley McIlwaine at 2023-06-18T21:16:45-06:00 IPE data compression IPE data resulting from the `-finfo-table-map` flag may now be compressed by configuring the GHC build with the `--enable-ipe-data-compression` flag. This results in about a 20% reduction in the size of IPE-enabled build results. The compression library, zstd, may optionally be statically linked by configuring with the `--enabled-static-libzstd` flag (on non-darwin platforms) libzstd version 1.4.0 or greater is required. - - - - - 0cbc3ae0 by Gergő Érdi at 2023-06-19T09:11:38-04:00 Add `IfaceWarnings` to represent the `ModIface`-storable parts of a `Warnings GhcRn`. Fixes #23516 - - - - - 3e80c2b4 by Arnaud Spiwack at 2023-06-20T03:19:41-04:00 Avoid desugaring non-recursive lets into recursive lets This prepares for having linear let expressions in the frontend. When desugaring lets, SPECIALISE statements create more copies of a let binding. Because of the rewrite rules attached to the bindings, there are dependencies between the generated binds. Before this commit, we simply wrapped all these in a mutually recursive let block, and left it to the simplified to sort it out. With this commit: we are careful to generate the bindings in dependency order, so that we can wrap them in consecutive lets (if the source is non-recursive). - - - - - 9fad49e0 by Ben Gamari at 2023-06-20T03:20:19-04:00 rts: Do not call exit() from SIGINT handler Previously `shutdown_handler` would call `stg_exit` if the scheduler was Oalready found to be in `SCHED_INTERRUPTING` state (or higher). However, `stg_exit` is not signal-safe as it calls `exit` (which calls `atexit` handlers). The only safe thing to do in this situation is to call `_exit`, which terminates with minimal cleanup. Fixes #23417. - - - - - 7485f848 by Andrew Lelechenko at 2023-06-20T03:20:57-04:00 Bump Cabal submodule This requires changing the recomp007 test because now cabal passes `this-unit-id` to executable components, and that unit-id contains a hash which includes the ABI of the dependencies. Therefore changing the dependencies means that -this-unit-id changes and recompilation is triggered. The spririt of the test is to test GHC's recompilation logic assuming that `-this-unit-id` is constant, so we explicitly pass `-ipid` to `./configure` rather than letting `Cabal` work it out. - - - - - 1464a2a8 by mangoiv at 2023-06-20T03:21:34-04:00 [feat] add a hint to `HasField` error message - add a hint that indicates that the record that the record dot is used on might just be missing a field - as the intention of the programmer is not entirely clear, it is only shown if the type is known - This addresses in part issue #22382 - - - - - 418ee3dc by Finley McIlwaine at 2023-06-20T15:39:05-04:00 Remove NFData SourceText, IfaceWarnings updates The NFData SourceText instance is now available in GHC Handle mod_iface mi_warns now being IfaceWarnings - - - - - 62f31380 by Finley McIlwaine at 2023-06-20T15:39:05-04:00 Accept Instances.hs test output Due to ghc!10469. - - - - - a8f2fc0e by Ben Gamari at 2023-06-20T15:48:08-04:00 Test fixes for "Fix associated data family doc structure items" Associated data families were being given their own export DocStructureItems, which resulted in them being documented separately from their classes in haddocks. This commit fixes it. - - - - - b65e78dd by Ben Gamari at 2023-06-20T16:56:43-04:00 rts/ipe: Fix unused lock warning - - - - - 6086effd by Ben Gamari at 2023-06-20T16:56:44-04:00 rts/ProfilerReportJson: Fix memory leak - - - - - 1e48c434 by Ben Gamari at 2023-06-20T16:56:44-04:00 rts: Various warnings fixes - - - - - 471486b9 by Ben Gamari at 2023-06-20T16:56:44-04:00 rts: Fix printf format mismatch - - - - - 80603fb3 by Ben Gamari at 2023-06-20T16:56:44-04:00 rts: Fix incorrect #include <sys/poll.h> According to Alpine's warnings and poll(2), <poll.h> should be preferred. - - - - - ff18e6fd by Ben Gamari at 2023-06-20T16:56:44-04:00 nonmoving: Fix unused definition warrnings - - - - - 6e7fe8ee by Ben Gamari at 2023-06-20T16:56:44-04:00 Disable futimens on Darwin. See #22938 - - - - - b7706508 by Ben Gamari at 2023-06-20T16:56:44-04:00 rts: Fix incorrect CPP guard - - - - - 94f00e9b by Ben Gamari at 2023-06-20T16:56:44-04:00 hadrian: Ensure that -Werror is passed when compiling the RTS. Previously the `+werror` transformer would only pass `-Werror` to GHC, which does not ensure that the same is passed to the C compiler when building the RTS. Arguably this is itself a bug but for now we will just work around this by passing `-optc-Werror` to GHC. I tried to enable `-Werror` in all C compilations but the boot libraries are something of a portability nightmare. - - - - - 5fb54bf8 by Ben Gamari at 2023-06-20T16:56:44-04:00 rts: Disable `#pragma GCC`s on clang compilers Otherwise the build fails due to warnings. See #23530. - - - - - cf87f380 by Ben Gamari at 2023-06-20T16:56:44-04:00 rts: Fix capitalization of prototype - - - - - 17f250d7 by Ben Gamari at 2023-06-20T16:56:44-04:00 rts: Fix incorrect format specifier - - - - - 0ff1c501 by Josh Meredith at 2023-06-20T16:57:20-04:00 JS: remove js_broken(22576) in favour of the pre-existing wordsize(32) condition (#22576) - - - - - 3d1d42b7 by Finley McIlwaine at 2023-06-21T12:04:58-04:00 Memory usage fixes for Haddock - Do not include `mi_globals` in the `NoBackend` backend. It was only included for Haddock, but Haddock does not actually need it. This causes a 200MB reduction in max residency when generating haddocks on the Agda codebase (roughly 1GB to 800MB). - Make haddock_{parser,renamer}_perf tests more accurate by forcing docs to be written to interface files using `-fwrite-interface` Bumps haddock submodule. Metric Decrease: haddock.base - - - - - 8185b1c2 by Finley McIlwaine at 2023-06-21T12:04:58-04:00 Fix associated data family doc structure items Associated data families were being given their own export DocStructureItems, which resulted in them being documented separately from their classes in haddocks. This commit fixes it. - - - - - 4d356ea3 by Sylvain Henry at 2023-06-21T12:04:59-04:00 JS: implement TH support - Add ghc-interp.js bootstrap script for the JS interpreter - Interactively link and execute iserv code from the ghci package - Incrementally load and run JS code for splices into the running iserv Co-authored-by: Luite Stegeman <stegeman at gmail.com> - - - - - 3249cf12 by Sylvain Henry at 2023-06-21T12:04:59-04:00 Don't use getKey - - - - - f84ff161 by Sylvain Henry at 2023-06-21T12:04:59-04:00 Stg: return imported FVs This is used to determine what to link when using the interpreter. For now it's only used by the JS interpreter but it could easily be used by the native interpreter too (instead of extracting names from compiled BCOs). - - - - - fab2ad23 by Sylvain Henry at 2023-06-21T12:04:59-04:00 Fix some recompilation avoidance tests - - - - - a897dc13 by Sylvain Henry at 2023-06-21T12:04:59-04:00 TH_import_loop is now broken as expected - - - - - dbb4ad51 by Sylvain Henry at 2023-06-21T12:04:59-04:00 JS: always recompile when TH is enabled (cf #23013) - - - - - cb1ac33e by Bartłomiej Cieślar at 2023-06-21T12:56:02-04:00 Changes related to MR !10283 MR !10283 changes the alternatives for WarningTxt pass. This MR reflects those changes in the haddock codebase. Signed-off-by: Bartłomiej Cieślar <bcieslar2001 at gmail.com> - - - - - 9933e10b by Ben Gamari at 2023-06-21T12:56:02-04:00 Bump GHC version to 9.8 - - - - - 711b1d24 by Bartłomiej Cieślar at 2023-06-21T12:59:27-04:00 Add support for deprecating exported items (proposal #134) This is an implementation of the deprecated exports proposal #134. The proposal introduces an ability to introduce warnings to exports. This allows for deprecating a name only when it is exported from a specific module, rather than always depreacting its usage. In this example: module A ({-# DEPRECATED "do not use" #-} x) where x = undefined --- module B where import A(x) `x` will emit a warning when it is explicitly imported. Like the declaration warnings, export warnings are first accumulated within the `Warnings` struct, then passed into the ModIface, from which they are then looked up and warned about in the importing module in the `lookup_ie` helpers of the `filterImports` function (for the explicitly imported names) and in the `addUsedGRE(s)` functions where they warn about regular usages of the imported name. In terms of the AST information, the custom warning is stored in the extension field of the variants of the `IE` type (see Trees that Grow for more information). The commit includes a bump to the haddock submodule added in MR #28 Signed-off-by: Bartłomiej Cieślar <bcieslar2001 at gmail.com> - - - - - c1865854 by Ben Gamari at 2023-06-21T12:59:30-04:00 configure: Bump version to 9.8 Bumps Haddock submodule - - - - - fe8c18b6 by Ben Gamari at 2023-06-21T15:36:29-04:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - c61a0d5b by Ben Gamari at 2023-06-21T16:10:51-04:00 Bump GHC version to 9.9 - - - - - 4e1de71c by Ben Gamari at 2023-06-21T21:07:48-04:00 configure: Bump version to 9.9 Bumps haddock submodule. - - - - - 5b6612bc by Ben Gamari at 2023-06-23T03:56:49-04:00 rts: Work around missing prototypes errors Darwin's toolchain inexpliciably claims that `write_barrier` and friends have declarations without prototypes, despite the fact that (a) they are definitions, and (b) the prototypes appear only a few lines above. Work around this by making the definitions proper prototypes. - - - - - 43b66a13 by Matthew Pickering at 2023-06-23T03:57:26-04:00 ghcup-metadata: Fix date modifier (M = minutes, m = month) Fixes #23552 - - - - - 564164ef by Luite Stegeman at 2023-06-24T10:27:29+09:00 Support large stack frames/offsets in GHCi bytecode interpreter Bytecode instructions like PUSH_L (push a local variable) contain an operand that refers to the stack slot. Before this patch, the operand type was SmallOp (Word16), limiting the maximum stack offset to 65535 words. This could cause compiler panics in some cases (See #22888). This patch changes the operand type for stack offsets from SmallOp to Op, removing the stack offset limit. Fixes #22888 - - - - - 8d6574bc by Sylvain Henry at 2023-06-26T13:15:06-04:00 JS: support levity-polymorphic datatypes (#22360,#22291) - thread knowledge about levity into PrimRep instead of panicking - JS: remove assumption that unlifted heap objects are rts objects (TVar#, etc.) Doing this also fixes #22291 (test added). There is a small performance hit (~1% more allocations). Metric Increase: T18698a T18698b - - - - - 5578bbad by Matthew Pickering at 2023-06-26T13:15:43-04:00 MR Review Template: Mention "Blocked on Review" label In order to improve our MR review processes we now have the label "Blocked on Review" which allows people to signal that a MR is waiting on a review to happen. See: https://mail.haskell.org/pipermail/ghc-devs/2023-June/021255.html - - - - - 4427e9cf by Matthew Pickering at 2023-06-26T13:15:43-04:00 Move MR template to Default.md This makes it more obvious what you have to modify to affect the default template rather than looking in the project settings. - - - - - 522bd584 by Arnaud Spiwack at 2023-06-26T13:16:33-04:00 Revert "Avoid desugaring non-recursive lets into recursive lets" This (temporary) reverts commit 3e80c2b40213bebe302b1bd239af48b33f1b30ef. Fixes #23550 - - - - - c59fbb0b by Torsten Schmits at 2023-06-26T19:34:20+02:00 Propagate breakpoint information when inlining across modules Tracking ticket: #23394 MR: !10448 * Add constructor `IfaceBreakpoint` to `IfaceTickish` * Store breakpoint data in interface files * Store `BreakArray` for the breakpoint's module, not the current module, in BCOs * Store module name in BCOs instead of `Unique`, since the `Unique` from an `Iface` doesn't match the modules in GHCi's state * Allocate module name in `ModBreaks`, like `BreakArray` * Lookup breakpoint by module name in GHCi * Skip creating breakpoint instructions when no `ModBreaks` are available, rather than injecting `ModBreaks` in the linker when breakpoints are enabled, and panicking when `ModBreaks` is missing - - - - - 6f904808 by Greg Steuck at 2023-06-27T16:53:07-04:00 Remove undefined FP_PROG_LD_BUILD_ID from configure.ac's - - - - - e89aa072 by Andrei Borzenkov at 2023-06-27T16:53:44-04:00 Remove arity inference in type declarations (#23514) Arity inference in type declarations was introduced as a workaround for the lack of @k-binders. They were added in 4aea0a72040, so I simplified all of this by simply removing arity inference altogether. This is part of GHC Proposal #425 "Invisible binders in type declarations". - - - - - 459dee1b by Torsten Schmits at 2023-06-27T16:54:20-04:00 Relax defaulting of RuntimeRep/Levity when printing Fixes #16468 MR: !10702 Only default RuntimeRep to LiftedRep when variables are bound by the toplevel forall - - - - - 151f8f18 by Torsten Schmits at 2023-06-27T16:54:57-04:00 Remove duplicate link label in linear types docs - - - - - ecdc4353 by Rodrigo Mesquita at 2023-06-28T12:24:57-04:00 Stop configuring unused Ld command in `settings` GHC has no direct dependence on the linker. Rather, we depend upon the C compiler for linking and an object-merging program (which is typically `ld`) for production of GHCi objects and merging of C stubs into final object files. Despite this, for historical reasons we still recorded information about the linker into `settings`. Remove these entries from `settings`, `hadrian/cfg/system.config`, as well as the `configure` logic responsible for this information. Closes #23566. - - - - - bf9ec3e4 by Bryan Richter at 2023-06-28T12:25:33-04:00 Remove extraneous debug output - - - - - 7eb68dd6 by Bryan Richter at 2023-06-28T12:25:33-04:00 Work with unset vars in -e mode - - - - - 49c27936 by Bryan Richter at 2023-06-28T12:25:33-04:00 Pass positional arguments in their positions By quoting $cmd, the default "bash -i" is a single argument to run, and no file named "bash -i" actually exists to be run. - - - - - 887dc4fc by Bryan Richter at 2023-06-28T12:25:33-04:00 Handle unset value in -e context - - - - - 5ffc7d7b by Rodrigo Mesquita at 2023-06-28T21:07:36-04:00 Configure CPP into settings There is a distinction to be made between the Haskell Preprocessor and the C preprocessor. The former is used to preprocess Haskell files, while the latter is used in C preprocessing such as Cmm files. In practice, they are both the same program (usually the C compiler) but invoked with different flags. Previously we would, at configure time, configure the haskell preprocessor and save the configuration in the settings file, but, instead of doing the same for CPP, we had hardcoded in GHC that the CPP program was either `cc -E` or `cpp`. This commit fixes that asymmetry by also configuring CPP at configure time, and tries to make more explicit the difference between HsCpp and Cpp (see Note [Preprocessing invocations]). Note that we don't use the standard CPP and CPPFLAGS to configure Cpp, but instead use the non-standard --with-cpp and --with-cpp-flags. The reason is that autoconf sets CPP to "$CC -E", whereas we expect the CPP command to be configured as a standalone executable rather than a command. These are symmetrical with --with-hs-cpp and --with-hs-cpp-flags. Cleanup: Hadrian no longer needs to pass the CPP configuration for CPP to be C99 compatible through -optP, since we now configure that into settings. Closes #23422 - - - - - 5efa9ca5 by Ben Gamari at 2023-06-28T21:08:13-04:00 hadrian: Always canonicalize topDirectory Hadrian's `topDirectory` is intended to provide an absolute path to the root of the GHC tree. However, if the tree is reached via a symlink this One question here is whether the `canonicalizePath` call is expensive enough to warrant caching. In a quick microbenchmark I observed that `canonicalizePath "."` takes around 10us per call; this seems sufficiently low not to worry. Alternatively, another approach here would have been to rather move the canonicalization into `m4/fp_find_root.m4`. This would have avoided repeated canonicalization but sadly path canonicalization is a hard problem in POSIX shell. Addresses #22451. - - - - - b3e1436f by aadaa_fgtaa at 2023-06-28T21:08:53-04:00 Optimise ELF linker (#23464) - cache last elements of `relTable`, `relaTable` and `symbolTables` in `ocInit_ELF` - cache shndx table in ObjectCode - run `checkProddableBlock` only with debug rts - - - - - 30525b00 by Ben Gamari at 2023-06-28T21:09:30-04:00 compiler: Introduce MO_{ACQUIRE,RELEASE}_FENCE - - - - - b787e259 by Ben Gamari at 2023-06-28T21:09:30-04:00 compiler: Drop MO_WriteBarrier rts: Drop write_barrier - - - - - 7550b4a5 by Ben Gamari at 2023-06-28T21:09:30-04:00 rts: Drop load_store_barrier() This is no longer used. - - - - - d5f2875e by Ben Gamari at 2023-06-28T21:09:31-04:00 rts: Drop last instances of prim_{write,read}_barrier - - - - - 965ac2ba by Ben Gamari at 2023-06-28T21:09:31-04:00 rts: Eliminate remaining uses of load_load_barrier - - - - - 0fc5cb97 by Sven Tennie at 2023-06-28T21:09:31-04:00 compiler: Drop MO_ReadBarrier - - - - - 7a7d326c by Ben Gamari at 2023-06-28T21:09:31-04:00 rts: Drop load_load_barrier This is no longer used. - - - - - 9f63da66 by Sven Tennie at 2023-06-28T21:09:31-04:00 Delete write_barrier function - - - - - bb0ed354 by Ben Gamari at 2023-06-28T21:09:31-04:00 rts: Make collectFreshWeakPtrs definition a prototype x86-64/Darwin's toolchain inexplicably warns that collectFreshWeakPtrs needs to be a prototype. - - - - - ef81a1eb by Sven Tennie at 2023-06-28T21:10:08-04:00 Fix number of free double regs D1..D4 are defined for aarch64 and thus not free. - - - - - c335fb7c by Ryan Scott at 2023-06-28T21:10:44-04:00 Fix typechecking of promoted empty lists The `'[]` case in `tc_infer_hs_type` is smart enough to handle arity-0 uses of `'[]` (see the newly added `T23543` test case for an example), but the `'[]` case in `tc_hs_type` was not. We fix this by changing the `tc_hs_type` case to invoke `tc_infer_hs_type`, as prescribed in `Note [Future-proofing the type checker]`. There are some benign changes to test cases' expected output due to the new code path using `forall a. [a]` as the kind of `'[]` rather than `[k]`. Fixes #23543. - - - - - fcf310e7 by Rodrigo Mesquita at 2023-06-28T21:11:21-04:00 Configure MergeObjs supports response files rather than Ld The previous configuration script to test whether Ld supported response files was * Incorrect (see #23542) * Used, in practice, to check if the *merge objects tool* supported response files. This commit modifies the macro to run the merge objects tool (rather than Ld), using a response file, and checking the result with $NM Fixes #23542 - - - - - 78b2f3cc by Sylvain Henry at 2023-06-28T21:12:02-04:00 JS: fix JS stack printing (#23565) - - - - - 9f01d14b by Matthew Pickering at 2023-06-29T04:13:41-04:00 Add -fpolymorphic-specialisation flag (off by default at all optimisation levels) Polymorphic specialisation has led to a number of hard to diagnose incorrect runtime result bugs (see #23469, #23109, #21229, #23445) so this commit introduces a flag `-fpolymorhphic-specialisation` which allows users to turn on this experimental optimisation if they are willing to buy into things going very wrong. Ticket #23469 - - - - - b1e611d5 by Ben Gamari at 2023-06-29T04:14:17-04:00 Rip out runtime linker/compiler checks We used to choose flags to pass to the toolchain at runtime based on the platform running GHC, and in this commit we drop all of those runtime linker checks Ultimately, this represents a change in policy: We no longer adapt at runtime to the toolchain being used, but rather make final decisions about the toolchain used at /configure time/ (we have deleted Note [Run-time linker info] altogether!). This works towards the goal of having all toolchain configuration logic living in the same place, which facilities the work towards a runtime-retargetable GHC (see #19877). As of this commit, the runtime linker/compiler logic was moved to autoconf, but soon it, and the rest of the existing toolchain configuration logic, will live in the standalone ghc-toolchain program (see !9263) In particular, what used to be done at runtime is now as follows: * The flags -Wl,--no-as-needed for needed shared libs are configured into settings * The flag -fstack-check is configured into settings * The check for broken tables-next-to-code was outdated * We use the configured c compiler by default as the assembler program * We drop `asmOpts` because we already configure -Qunused-arguments flag into settings (see !10589) Fixes #23562 Co-author: Rodrigo Mesquita (@alt-romes) - - - - - 8b35e8ca by Ben Gamari at 2023-06-29T18:46:12-04:00 Define FFI_GO_CLOSURES The libffi shipped with Apple's XCode toolchain does not contain a definition of the FFI_GO_CLOSURES macro, despite containing references to said macro. Work around this by defining the macro, following the model of a similar workaround in OpenJDK [1]. [1] https://github.com/openjdk/jdk17u-dev/pull/741/files - - - - - d7ef1704 by Ben Gamari at 2023-06-29T18:46:12-04:00 base: Fix incorrect CPP guard This was guarded on `darwin_HOST_OS` instead of `defined(darwin_HOST_OS)`. - - - - - 7c7d1f66 by Ben Gamari at 2023-06-29T18:46:48-04:00 rts/Trace: Ensure that debugTrace arguments are used As debugTrace is a macro we must take care to ensure that the fact is clear to the compiler lest we see warnings. - - - - - cb92051e by Ben Gamari at 2023-06-29T18:46:48-04:00 rts: Various warnings fixes - - - - - dec81dd1 by Ben Gamari at 2023-06-29T18:46:48-04:00 hadrian: Ignore warnings in unix and semaphore-compat - - - - - d7f6448a by Matthew Pickering at 2023-06-30T12:38:43-04:00 hadrian: Fix dependencies of docs:* rule For the docs:* rule we need to actually build the package rather than just the haddocks for the dependent packages. Therefore we depend on the .conf files of the packages we are trying to build documentation for as well as the .haddock files. Fixes #23472 - - - - - cec90389 by sheaf at 2023-06-30T12:39:27-04:00 Add tests for #22106 Fixes #22106 - - - - - 083794b1 by Torsten Schmits at 2023-07-03T03:27:27-04:00 Add -fbreak-points to control breakpoint insertion Rather than statically enabling breakpoints only for the interpreter, this adds a new flag. Tracking ticket: #23057 MR: !10466 - - - - - fd8c5769 by Ben Gamari at 2023-07-03T03:28:04-04:00 rts: Ensure that pinned allocations respect block size Previously, it was possible for pinned, aligned allocation requests to allocate beyond the end of the pinned accumulator block. Specifically, we failed to account for the padding needed to achieve the requested alignment in the "large object" check. With large alignment requests, this can result in the allocator using the capability's pinned object accumulator block to service a request which is larger than `PINNED_EMPTY_SIZE`. To fix this we reorganize `allocatePinned` to consistently account for the alignment padding in all large object checks. This is a bit subtle as we must handle the case of a small allocation request filling the accumulator block, as well as large requests. Fixes #23400. - - - - - 98185d52 by Ben Gamari at 2023-07-03T03:28:05-04:00 testsuite: Add test for #23400 - - - - - 4aac0540 by Ben Gamari at 2023-07-03T03:28:42-04:00 ghc-heap: Support for BLOCKING_QUEUE closures - - - - - 03f941f4 by Ben Bellick at 2023-07-03T03:29:29-04:00 Add some structured diagnostics in Tc/Validity.hs This addresses the work of ticket #20118 Created the following constructors for TcRnMessage - TcRnInaccessibleCoAxBranch - TcRnPatersonCondFailure - - - - - 6074cc3c by Moisés Ackerman at 2023-07-03T03:30:13-04:00 Add failing test case for #23492 - - - - - 356a2692 by Moisés Ackerman at 2023-07-03T03:30:13-04:00 Use generated src span for catch-all case of record selector functions This fixes #23492. The problem was that we used the real source span of the field declaration for the generated catch-all case in the selector function, in particular in the generated call to `recSelError`, which meant it was included in the HIE output. Using `generatedSrcSpan` instead means that it is not included. - - - - - 3efe7f39 by Moisés Ackerman at 2023-07-03T03:30:13-04:00 Introduce genLHsApp and genLHsLit helpers in GHC.Rename.Utils - - - - - dd782343 by Moisés Ackerman at 2023-07-03T03:30:13-04:00 Construct catch-all default case using helpers GHC.Rename.Utils concrete helpers instead of wrapGenSpan + HS AST constructors - - - - - 0e09c38e by Ryan Hendrickson at 2023-07-03T03:30:56-04:00 Add regression test for #23549 - - - - - 32741743 by Alexis King at 2023-07-03T03:31:36-04:00 perf tests: Increase default stack size for MultiLayerModules An unhelpfully small stack size appears to have been the real culprit behind the metric fluctuations in #19293. Debugging metric decreases triggered by !10729 helped to finally identify the problem. Metric Decrease: MultiLayerModules MultiLayerModulesTH_Make T13701 T14697 - - - - - 82ac6bf1 by Bryan Richter at 2023-07-03T03:32:15-04:00 Add missing void prototypes to rts functions See #23561. - - - - - 6078b429 by Ben Gamari at 2023-07-03T03:32:51-04:00 gitlab-ci: Refactor compilation of gen_ci Flakify and document it, making it far less sensitive to the build environment. - - - - - aa2db0ae by Ben Gamari at 2023-07-03T03:33:29-04:00 testsuite: Update documentation - - - - - 924a2362 by Gregory Gerasev at 2023-07-03T03:34:10-04:00 Better error for data deriving of type synonym/family. Closes #23522 - - - - - 4457da2a by Dave Barton at 2023-07-03T03:34:51-04:00 Fix some broken links and typos - - - - - de5830d0 by Ben Gamari at 2023-07-04T22:03:59-04:00 configure: Rip out Solaris dyld check Solaris 11 was released over a decade ago and, moreover, I doubt we have any Solaris users - - - - - 59c5fe1d by doyougnu at 2023-07-04T22:04:56-04:00 CI: add JS release and debug builds, regen CI jobs - - - - - 679bbc97 by Vladislav Zavialov at 2023-07-04T22:05:32-04:00 testsuite: Do not require CUSKs Numerous tests make use of CUSKs (complete user-supplied kinds), a legacy feature scheduled for deprecation. In order to proceed with the said deprecation, the tests have been updated to use SAKS instead (standalone kind signatures). This also allows us to remove the Haskell2010 language pragmas that were added in 115cd3c85a8 to work around the lack of CUSKs in GHC2021. - - - - - 945d3599 by Ben Gamari at 2023-07-04T22:06:08-04:00 gitlab: Drop backport-for-8.8 MR template Its usefulness has long passed. - - - - - 66c721d3 by Alan Zimmerman at 2023-07-04T22:06:44-04:00 EPA: Simplify GHC/Parser.y comb2 Use the HasLoc instance from Ast.hs to allow comb2 to work with anything with a SrcSpan This gets rid of the custom comb2A, comb2Al, comb2N functions, and removes various reLoc calls. - - - - - 2be99b7e by Matthew Pickering at 2023-07-04T22:07:21-04:00 Fix deprecation warning when deprecated identifier is from another module A stray 'Just' was being printed in the deprecation message. Fixes #23573 - - - - - 46c9bcd6 by Ben Gamari at 2023-07-04T22:07:58-04:00 rts: Don't rely on initializers for sigaction_t As noted in #23577, CentOS's ancient toolchain throws spurious missing-field-initializer warnings. - - - - - ec55035f by Ben Gamari at 2023-07-04T22:07:58-04:00 hadrian: Don't treat -Winline warnings as fatal Such warnings are highly dependent upon the toolchain, platform, and build configuration. It's simply too fragile to rely on these. - - - - - 3a09b789 by Ben Gamari at 2023-07-04T22:07:58-04:00 hadrian: Only pass -Wno-nonportable-include-path on Darwin This flag, which was introduced due to #17798, is only understood by Clang and consequently throws warnings on platforms using gcc. Sadly, there is no good way to treat such warnings as non-fatal with `-Werror` so for now we simply make this flag specific to platforms known to use Clang and case-insensitive filesystems (Darwin and Windows). See #23577. - - - - - 4af7eac2 by Mario Blažević at 2023-07-04T22:08:38-04:00 Fixed ticket #23571, TH.Ppr.pprLit hanging on large numeric literals - - - - - 2304c697 by Ben Gamari at 2023-07-04T22:09:15-04:00 compiler: Make OccSet opaque - - - - - cf735db8 by Andrei Borzenkov at 2023-07-04T22:09:51-04:00 Add Note about why we need forall in Code to be on the right - - - - - fb140f82 by Hécate Moonlight at 2023-07-04T22:10:34-04:00 Relax the constraint about the foreign function's calling convention of FinalizerPtr to capi as well as ccall. - - - - - 9ce44336 by meooow25 at 2023-07-05T11:42:37-04:00 Improve the situation with the stimes cycle Currently the Semigroup stimes cycle is resolved in GHC.Base by importing stimes implementations from a hs-boot file. Resolve the cycle using hs-boot files for required classes (Num, Integral) instead. Now stimes can be defined directly in GHC.Base, making inlining and specialization possible. This leads to some new boot files for `GHC.Num` and `GHC.Real`, the methods for those are only used to implement `stimes` so it doesn't appear that these boot files will introduce any new performance traps. Metric Decrease: T13386 T8095 Metric Increase: T13253 T13386 T18698a T18698b T19695 T8095 - - - - - 9edcb1fb by Jaro Reinders at 2023-07-05T11:43:24-04:00 Refactor Unique to be represented by Word64 In #22010 we established that Int was not always sufficient to store all the uniques we generate during compilation on 32-bit platforms. This commit addresses that problem by using Word64 instead of Int for uniques. The core of the change is in GHC.Core.Types.Unique and GHC.Core.Types.Unique.Supply. However, the representation of uniques is used in many other places, so those needed changes too. Additionally, the RTS has been extended with an atomic_inc64 operation. One major change from this commit is the introduction of the Word64Set and Word64Map data types. These are adapted versions of IntSet and IntMap from the containers package. These are planned to be upstreamed in the future. As a natural consequence of these changes, the compiler will be a bit slower and take more space on 32-bit platforms. Our CI tests indicate around a 5% residency increase. Metric Increase: CoOpt_Read CoOpt_Singletons LargeRecord ManyAlternatives ManyConstructors MultiComponentModules MultiComponentModulesRecomp MultiLayerModulesTH_OneShot RecordUpdPerf T10421 T10547 T12150 T12227 T12234 T12425 T12707 T13035 T13056 T13253 T13253-spj T13379 T13386 T13719 T14683 T14697 T14766 T15164 T15703 T16577 T16875 T17516 T18140 T18223 T18282 T18304 T18698a T18698b T18923 T1969 T19695 T20049 T21839c T3064 T3294 T4801 T5030 T5321FD T5321Fun T5631 T5642 T5837 T6048 T783 T8095 T9020 T9198 T9233 T9630 T9675 T9872a T9872b T9872b_defer T9872c T9872d T9961 TcPlugin_RewritePerf UniqLoop WWRec hard_hole_fits - - - - - 6b9db7d4 by Brandon Chinn at 2023-07-05T11:44:03-04:00 Fix docs for __GLASGOW_HASKELL_FULL_VERSION__ macro - - - - - 40f4ef7c by Torsten Schmits at 2023-07-05T18:06:19-04:00 Substitute free variables captured by breakpoints in SpecConstr Fixes #23267 - - - - - 2b55cb5f by sheaf at 2023-07-05T18:07:07-04:00 Reinstate untouchable variable error messages This extra bit of information was accidentally being discarded after a refactoring of the way we reported problems when unifying a type variable with another type. This patch rectifies that. - - - - - 53ed21c5 by Rodrigo Mesquita at 2023-07-05T18:07:47-04:00 configure: Drop Clang command from settings Due to 01542cb7227614a93508b97ecad5b16dddeb6486 we no longer use the `runClang` function, and no longer need to configure into settings the Clang command. We used to determine options at runtime to pass clang when it was used as an assembler, but now that we configure at configure time we no longer need to. - - - - - 6fdcf969 by Torsten Schmits at 2023-07-06T12:12:09-04:00 Filter out nontrivial substituted expressions in substTickish Fixes #23272 - - - - - 41968fd6 by Sylvain Henry at 2023-07-06T12:13:02-04:00 JS: testsuite: use req_c predicate instead of js_broken - - - - - 74a4dd2e by Sylvain Henry at 2023-07-06T12:13:02-04:00 JS: implement some file primitives (lstat,rmdir) (#22374) - Implement lstat and rmdir. - Implement base_c_s_is* functions (testing a file type) - Enable passing tests - - - - - 7e759914 by Sylvain Henry at 2023-07-07T02:39:38-04:00 JS: cleanup utils (#23314) - Removed unused code - Don't export unused functions - Move toTypeList to Closure module - - - - - f617655c by Sylvain Henry at 2023-07-07T02:39:38-04:00 JS: rename VarType/Vt into JSRep - - - - - 19216ca5 by Sylvain Henry at 2023-07-07T02:39:38-04:00 JS: remove custom PrimRep conversion (#23314) We use the usual conversion to PrimRep and then we convert these PrimReps to JSReps. - - - - - d3de8668 by Sylvain Henry at 2023-07-07T02:39:38-04:00 JS: don't use isRuntimeRepKindedTy in JS FFI - - - - - 8d1b75cb by Matthew Pickering at 2023-07-07T02:40:15-04:00 ghcup-metadata: Also updates ghcup-nightlies-0.0.7.yaml file Fixes #23600 - - - - - e524fa7f by Matthew Pickering at 2023-07-07T02:40:15-04:00 ghcup-metadata: Use dynamically linked alpine bindists In theory these will work much better on alpine to allow people to build statically linked applications there. We don't need to distribute a statically linked application ourselves in order to allow that. Fixes #23602 - - - - - 0c2a756e by sheaf at 2023-07-07T13:45:12+02:00 Avoid incomplete record update in Haddock Hoogle This commit avoids running into an incomplete record update warning in the Hoogle backend of Haddock. This was only noticed now, because incomplete record updates were broken in GHC 9.6. Now that they are fixed, we have to avoid running into them! - - - - - b9e7beb9 by Ben Gamari at 2023-07-07T11:32:22-04:00 Drop circle-ci-job.sh - - - - - 9955eead by Ben Gamari at 2023-07-07T11:32:22-04:00 testsuite: Allow preservation of unexpected output Here we introduce a new flag to the testsuite driver, --unexpected-output-dir=<dir>, which allows the user to ask the driver to preserve unexpected output from tests. The intent is for this to be used in CI to allow users to more easily fix unexpected platform-dependent output. - - - - - 48f80968 by Ben Gamari at 2023-07-07T11:32:22-04:00 gitlab-ci: Preserve unexpected output Here we enable use of the testsuite driver's `--unexpected-output-dir` flag by CI, preserving the result as an artifact for use by users. - - - - - 76983a0d by Matthew Pickering at 2023-07-07T11:32:58-04:00 driver: Fix -S with .cmm files There was an oversight in the driver which assumed that you would always produce a `.o` file when compiling a .cmm file. Fixes #23610 - - - - - 6df15e93 by Mike Pilgrem at 2023-07-07T11:33:40-04:00 Update Hadrian's stack.yaml - - - - - 1dff43cf by Ben Gamari at 2023-07-08T05:05:37-04:00 compiler: Rework ShowSome Previously the field used to filter the sub-declarations to show was rather ad-hoc and was only able to show at most one sub-declaration. - - - - - 8165404b by Ben Gamari at 2023-07-08T05:05:37-04:00 testsuite: Add test to catch changes in core libraries This adds testing infrastructure to ensure that changes in core libraries (e.g. `base` and `ghc-prim`) are caught in CI. - - - - - ec1c32e2 by Melanie Phoenix at 2023-07-08T05:06:14-04:00 Deprecate Data.List.NonEmpty.unzip - - - - - 5d2442b8 by Ben Gamari at 2023-07-08T05:06:51-04:00 Drop latent mentions of -split-objs Closes #21134. - - - - - a9bc20cb by Oleg Grenrus at 2023-07-08T05:07:31-04:00 Add warn_and_run test kind This is a compile_and_run variant which also captures the GHC's stderr. The warn_and_run name is best I can come up with, as compile_and_run is taken. This is useful specifically for testing warnings. We want to test that when warning triggers, and it's not a false positive, i.e. that the runtime behaviour is indeed "incorrect". As an example a single test is altered to use warn_and_run - - - - - c7026962 by Ben Gamari at 2023-07-08T05:08:11-04:00 configure: Don't use ld.gold on i386 ld.gold appears to produce invalid static constructor tables on i386. While ideally we would add an autoconf check to check for this brokenness, sadly such a check isn't easy to compose. Instead to summarily reject such linkers on i386. Somewhat hackily closes #23579. - - - - - 054261dd by Andrew Lelechenko at 2023-07-08T19:32:47-04:00 Add since annotations for Data.Foldable1 - - - - - 550af505 by Sylvain Henry at 2023-07-08T19:33:28-04:00 JS: support -this-unit-id for programs in the linker (#23613) - - - - - d284470a by Andrew Lelechenko at 2023-07-08T19:34:08-04:00 Bump text submodule - - - - - 8e11630e by jade at 2023-07-10T16:58:40-04:00 Add a hint to enable ExplicitNamespaces for type operator imports (Fixes/Enhances #20007) As suggested in #20007 and implemented in !8895, trying to import type operators will suggest a fix to use the 'type' keyword, without considering whether ExplicitNamespaces is enabled. This patch will query whether ExplicitNamespaces is enabled and add a hint to suggest enabling ExplicitNamespaces if it isn't enabled, alongside the suggestion of adding the 'type' keyword. - - - - - 61b1932e by sheaf at 2023-07-10T16:59:26-04:00 tyThingLocalGREs: include all DataCons for RecFlds The GREInfo for a record field should include the collection of all the data constructors of the parent TyCon that have this record field. This information was being incorrectly computed in the tyThingLocalGREs function for a DataCon, as we were not taking into account other DataCons with the same parent TyCon. Fixes #23546 - - - - - e6627cbd by Alan Zimmerman at 2023-07-10T17:00:05-04:00 EPA: Simplify GHC/Parser.y comb3 A follow up to !10743 - - - - - ee20da34 by Andrew Lelechenko at 2023-07-10T17:01:01-04:00 Document that compareByteArrays# is available since ghc-prim-0.5.2.0 - - - - - 4926af7b by Matthew Pickering at 2023-07-10T17:01:38-04:00 Revert "Bump text submodule" This reverts commit d284470a77042e6bc17bdb0ab0d740011196958a. This commit requires that we bootstrap with ghc-9.4, which we do not require until #23195 has been completed. Subsequently this has broken nighty jobs such as the rocky8 job which in turn has broken nightly releases. - - - - - d1c92bf3 by Ben Gamari at 2023-07-11T08:07:02-04:00 compiler: Fingerprint more code generation flags Previously our recompilation check was quite inconsistent in its coverage of non-optimisation code generation flags. Specifically, we failed to account for most flags that would affect the behavior of generated code in ways that might affect the result of a program's execution (e.g. `-feager-blackholing`, `-fstrict-dicts`) Closes #23369. - - - - - eb623149 by Ben Gamari at 2023-07-11T08:07:02-04:00 compiler: Record original thunk info tables on stack Here we introduce a new code generation option, `-forig-thunk-info`, which ensures that an `stg_orig_thunk_info` frame is pushed before every update frame. This can be invaluable when debugging thunk cycles and similar. See Note [Original thunk info table frames] for details. Closes #23255. - - - - - 4731f44e by Jaro Reinders at 2023-07-11T08:07:40-04:00 Fix wrong MIN_VERSION_GLASGOW_HASKELL macros I forgot to change these after rebasing. - - - - - dd38aca9 by Andreas Schwab at 2023-07-11T13:55:56+00:00 Hadrian: enable GHCi support on riscv64 - - - - - 09a5c6cc by Josh Meredith at 2023-07-12T11:25:13-04:00 JavaScript: support unicode code points > 2^16 in toJSString using String.fromCodePoint (#23628) - - - - - 29fbbd4e by Matthew Pickering at 2023-07-12T11:25:49-04:00 Remove references to make build system in mk/build.mk Fixes #23636 - - - - - 630e3026 by sheaf at 2023-07-12T11:26:43-04:00 Valid hole fits: don't panic on a Given The function GHC.Tc.Errors.validHoleFits would end up panicking when encountering a Given constraint. To fix this, it suffices to filter out the Givens before continuing. Fixes #22684 - - - - - c39f279b by Matthew Pickering at 2023-07-12T23:18:38-04:00 Use deb10 for i386 bindists deb9 is now EOL so it's time to upgrade the i386 bindist to use deb10 Fixes #23585 - - - - - bf9b9de0 by Krzysztof Gogolewski at 2023-07-12T23:19:15-04:00 Fix #23567, a specializer bug Found by Simon in https://gitlab.haskell.org/ghc/ghc/-/issues/23567#note_507834 The testcase isn't ideal because it doesn't detect the bug in master, unless doNotUnbox is removed as in https://gitlab.haskell.org/ghc/ghc/-/issues/23567#note_507692. But I have confirmed that with that modification, it fails before and passes afterwards. - - - - - 84c1a4a2 by Bartłomiej Cieślar at 2023-07-12T23:20:08-04:00 Comments - - - - - b2846cb5 by Bartłomiej Cieślar at 2023-07-12T23:20:08-04:00 updates to comments - - - - - 2af23f0e by Bartłomiej Cieślar at 2023-07-12T23:20:08-04:00 changes - - - - - 6143838a by sheaf at 2023-07-13T08:02:17-04:00 Fix deprecation of record fields Commit 3f374399 inadvertently broke the deprecation/warning mechanism for record fields due to its introduction of record field namespaces. This patch ensures that, when a top-level deprecation is applied to an identifier, it applies to all the record fields as well. This is achieved by refactoring GHC.Rename.Env.lookupLocalTcNames, and GHC.Rename.Env.lookupBindGroupOcc, to not look up a fixed number of NameSpaces but to look up all NameSpaces and filter out the irrelevant ones. - - - - - 6fd8f566 by sheaf at 2023-07-13T08:02:17-04:00 Introduce greInfo, greParent These are simple helper functions that wrap the internal field names gre_info, gre_par. - - - - - 7f0a86ed by sheaf at 2023-07-13T08:02:17-04:00 Refactor lookupGRE_... functions This commit consolidates all the logic for looking up something in the Global Reader Environment into the single function lookupGRE. This allows us to declaratively specify all the different modes of looking up in the GlobalRdrEnv, and avoids manually passing around filtering functions as was the case in e.g. the function GHC.Rename.Env.lookupSubBndrOcc_helper. ------------------------- Metric Decrease: T8095 ------------------------- ------------------------- Metric Increase: T8095 ------------------------- - - - - - 5e951395 by Rodrigo Mesquita at 2023-07-13T08:02:54-04:00 configure: Drop DllWrap command We used to configure into settings a DllWrap command for windows builds and distributions, however, we no longer do, and dllwrap is effectively unused. This simplification is motivated in part by the larger toolchain-selection project (#19877, !9263) - - - - - e10556b6 by Teo Camarasu at 2023-07-14T16:28:46-04:00 base: fix haddock syntax in GHC.Profiling - - - - - 0f3fda81 by Matthew Pickering at 2023-07-14T16:29:23-04:00 Revert "CI: add JS release and debug builds, regen CI jobs" This reverts commit 59c5fe1d4b624423b1c37891710f2757bb58d6af. This commit added two duplicate jobs on all validate pipelines, so we are reverting for now whilst we work out what the best way forward is. Ticket #23618 - - - - - 54bca324 by Alan Zimmerman at 2023-07-15T03:23:26-04:00 EPA: Simplify GHC/Parser.y sLL Follow up to !10743 - - - - - c8863828 by sheaf at 2023-07-15T03:24:06-04:00 Configure: canonicalise PythonCmd on Windows This change makes PythonCmd resolve to a canonical absolute path on Windows, which prevents HLS getting confused (now that we have a build-time dependency on python). fixes #23652 - - - - - ca1e636a by Rodrigo Mesquita at 2023-07-15T03:24:42-04:00 Improve Note [Binder-swap during float-out] - - - - - cf86f3ec by Matthew Craven at 2023-07-16T01:42:09+02:00 Equality of forall-types is visibility aware This patch finally (I hope) nails the question of whether (forall a. ty) and (forall a -> ty) are `eqType`: they aren't! There is a long discussion in #22762, plus useful Notes: * Note [ForAllTy and type equality] in GHC.Core.TyCo.Compare * Note [Comparing visiblities] in GHC.Core.TyCo.Compare * Note [ForAllCo] in GHC.Core.TyCo.Rep It also establishes a helpful new invariant for ForAllCo, and ForAllTy, when the bound variable is a CoVar:in that case the visibility must be coreTyLamForAllTyFlag. All this is well documented in revised Notes. - - - - - 7f13acbf by Vladislav Zavialov at 2023-07-16T01:56:27-04:00 List and Tuple<n>: update documentation Add the missing changelog.md entries and @since-annotations. - - - - - 2afbddb0 by Andrei Borzenkov at 2023-07-16T10:21:24+04:00 Type patterns (#22478, #18986) Improved name resolution and type checking of type patterns in constructors: 1. HsTyPat: a new dedicated data type that represents type patterns in HsConPatDetails instead of reusing HsPatSigType 2. rnHsTyPat: a new function that renames a type pattern and collects its binders into three groups: - explicitly bound type variables, excluding locally bound variables - implicitly bound type variables from kind signatures (only if ScopedTypeVariables are enabled) - named wildcards (only from kind signatures) 2a. rnHsPatSigTypeBindingVars: removed in favour of rnHsTyPat 2b. rnImplcitTvBndrs: removed because no longer needed 3. collect_pat: updated to collect type variable binders from type patterns (this means that types and terms use the same infrastructure to detect conflicting bindings, unused variables and name shadowing) 3a. CollVarTyVarBinders: a new CollectFlag constructor that enables collection of type variables 4. tcHsTyPat: a new function that typechecks type patterns, capable of handling polymorphic kinds. See Note [Type patterns: binders and unifiers] Examples of code that is now accepted: f = \(P @a) -> \(P @a) -> ... -- triggers -Wname-shadowing g :: forall a. Proxy a -> ... g (P @a) = ... -- also triggers -Wname-shadowing h (P @($(TH.varT (TH.mkName "t")))) = ... -- t is bound at splice time j (P @(a :: (x,x))) = ... -- (x,x) is no longer rejected data T where MkT :: forall (f :: forall k. k -> Type). f Int -> f Maybe -> T k :: T -> () k (MkT @f (x :: f Int) (y :: f Maybe)) = () -- f :: forall k. k -> Type Examples of code that is rejected with better error messages: f (Left @a @a _) = ... -- new message: -- • Conflicting definitions for ‘a’ -- Bound at: Test.hs:1:11 -- Test.hs:1:14 Examples of code that is now rejected: {-# OPTIONS_GHC -Werror=unused-matches #-} f (P @a) = () -- Defined but not used: type variable ‘a’ - - - - - eb1a6ab1 by sheaf at 2023-07-16T09:20:45-04:00 Don't use substTyUnchecked in newMetaTyVar There were some comments that explained that we needed to use an unchecked substitution function because of issue #12931, but that has since been fixed, so we should be able to use substTy instead now. - - - - - c7bbad9a by sheaf at 2023-07-17T02:48:19-04:00 rnImports: var shouldn't import NoFldSelectors In an import declaration such as import M ( var ) the import of the variable "var" should **not** bring into scope record fields named "var" which are defined with NoFieldSelectors. Doing so can cause spurious "unused import" warnings, as reported in ticket #23557. Fixes #23557 - - - - - 1af2e773 by sheaf at 2023-07-17T02:48:19-04:00 Suggest similar names in imports This commit adds similar name suggestions when importing. For example module A where { spelling = 'o' } module B where { import B ( speling ) } will give rise to the error message: Module ‘A’ does not export ‘speling’. Suggested fix: Perhaps use ‘spelling’ This also provides hints when users try to import record fields defined with NoFieldSelectors. - - - - - 654fdb98 by Alan Zimmerman at 2023-07-17T02:48:55-04:00 EPA: Store leading AnnSemi for decllist in al_rest This simplifies the markAnnListA implementation in ExactPrint - - - - - 22565506 by sheaf at 2023-07-17T21:12:59-04:00 base: add COMPLETE pragma to BufferCodec PatSyn This implements CLC proposal #178, rectifying an oversight in the implementation of CLC proposal #134 which could lead to spurious pattern match warnings. https://github.com/haskell/core-libraries-committee/issues/178 https://github.com/haskell/core-libraries-committee/issues/134 - - - - - 860f6269 by sheaf at 2023-07-17T21:13:00-04:00 exactprint: silence incomplete record update warnings - - - - - df706de3 by sheaf at 2023-07-17T21:13:00-04:00 Re-instate -Wincomplete-record-updates Commit e74fc066 refactored the handling of record updates to use the HsExpanded mechanism. This meant that the pattern matching inherent to a record update was considered to be "generated code", and thus we stopped emitting "incomplete record update" warnings entirely. This commit changes the "data Origin = Source | Generated" datatype, adding a field to the Generated constructor to indicate whether we still want to perform pattern-match checking. We also have to do a bit of plumbing with HsCase, to record that the HsCase arose from an HsExpansion of a RecUpd, so that the error message continues to mention record updates as opposed to a generic "incomplete pattern matches in case" error. Finally, this patch also changes the way we handle inaccessible code warnings. Commit e74fc066 was also a regression in this regard, as we were emitting "inaccessible code" warnings for case statements spuriously generated when desugaring a record update (remember: the desugaring mechanism happens before typechecking; it thus can't take into account e.g. GADT information in order to decide which constructors to include in the RHS of the desugaring of the record update). We fix this by changing the mechanism through which we disable inaccessible code warnings: we now check whether we are in generated code in GHC.Tc.Utils.TcMType.newImplication in order to determine whether to emit inaccessible code warnings. Fixes #23520 Updates haddock submodule, to avoid incomplete record update warnings - - - - - 1d05971e by sheaf at 2023-07-17T21:13:00-04:00 Propagate long-distance information in do-notation The preceding commit re-enabled pattern-match checking inside record updates. This revealed that #21360 was in fact NOT fixed by e74fc066. This commit makes sure we correctly propagate long-distance information in do blocks, e.g. in ```haskell data T = A { fld :: Int } | B f :: T -> Maybe T f r = do a at A{} <- Just r Just $ case a of { A _ -> A 9 } ``` we need to propagate the fact that "a" is headed by the constructor "A" to see that the case expression "case a of { A _ -> A 9 }" cannot fail. Fixes #21360 - - - - - bea0e323 by sheaf at 2023-07-17T21:13:00-04:00 Skip PMC for boring patterns Some patterns introduce no new information to the pattern-match checker (such as plain variable or wildcard patterns). We can thus skip doing any pattern-match checking on them when the sole purpose for doing so was introducing new long-distance information. See Note [Boring patterns] in GHC.Hs.Pat. Doing this avoids regressing in performance now that we do additional pattern-match checking inside do notation. - - - - - ddcdd88c by Rodrigo Mesquita at 2023-07-17T21:13:36-04:00 Split GHC.Platform.ArchOS from ghc-boot into ghc-platform Split off the `GHC.Platform.ArchOS` module from the `ghc-boot` package into this reinstallable standalone package which abides by the PVP, in part motivated by the ongoing work on `ghc-toolchain` towards runtime retargetability. - - - - - b55a8ea7 by Sylvain Henry at 2023-07-17T21:14:27-04:00 JS: better implementation for plusWord64 (#23597) - - - - - 889c2bbb by sheaf at 2023-07-18T06:37:32-04:00 Do primop rep-poly checks when instantiating This patch changes how we perform representation-polymorphism checking for primops (and other wired-in Ids such as coerce). When instantiating the primop, we check whether each type variable is required to instantiated to a concrete type, and if so we create a new concrete metavariable (a ConcreteTv) instead of a simple MetaTv. (A little subtlety is the need to apply the substitution obtained from instantiating to the ConcreteTvOrigins, see Note [substConcreteTvOrigin] in GHC.Tc.Utils.TcMType.) This allows us to prevent representation-polymorphism in non-argument position, as that is required for some of these primops. We can also remove the logic in tcRemainingValArgs, except for the part concerning representation-polymorphic unlifted newtypes. The function has been renamed rejectRepPolyNewtypes; all it does now is reject unsaturated occurrences of representation-polymorphic newtype constructors when the representation of its argument isn't a concrete RuntimeRep (i.e. still a PHASE 1 FixedRuntimeRep check). The Note [Eta-expanding rep-poly unlifted newtypes] in GHC.Tc.Gen.Head gives more explanation about a possible path to PHASE 2, which would be in line with the treatment for primops taken in this patch. We also update the Core Lint check to handle this new framework. This means Core Lint now checks representation-polymorphism in continuation position like needed for catch#. Fixes #21906 ------------------------- Metric Increase: LargeRecord ------------------------- - - - - - 00648e5d by Krzysztof Gogolewski at 2023-07-18T06:38:10-04:00 Core Lint: distinguish let and letrec in locations Lint messages were saying "in the body of letrec" even for non-recursive let. I've also renamed BodyOfLetRec to BodyOfLet in stg, since there's no separate letrec. - - - - - 787bae96 by Krzysztof Gogolewski at 2023-07-18T06:38:50-04:00 Use extended literals when deriving Show This implements GHC proposal https://github.com/ghc-proposals/ghc-proposals/pull/596 Also add support for Int64# and Word64#; see testcase ShowPrim. - - - - - 257f1567 by Jaro Reinders at 2023-07-18T06:39:29-04:00 Add StgFromCore and StgCodeGen linting - - - - - 34d08a20 by Ben Gamari at 2023-07-19T03:33:22-04:00 Reg.Liveness: Strictness - - - - - c5deaa27 by Ben Gamari at 2023-07-19T03:33:22-04:00 Reg.Liveness: Don't repeatedly construct UniqSets - - - - - b947250b by Ben Gamari at 2023-07-19T03:33:22-04:00 compiler/Types: Ensure that fromList-type operations can fuse In #20740 I noticed that mkUniqSet does not fuse. In practice, allowing it to do so makes a considerable difference in allocations due to the backend. Metric Decrease: T12707 T13379 T3294 T4801 T5321FD T5321Fun T783 - - - - - 6c88c2ba by Sven Tennie at 2023-07-19T03:33:59-04:00 x86 Codegen: Implement MO_S_MulMayOflo for W16 - - - - - 5f1154e0 by Sven Tennie at 2023-07-19T03:33:59-04:00 x86 CodeGen: MO_S_MulMayOflo better error message for rep > W64 It's useful to see which value made the pattern match fail. (If it ever occurs.) - - - - - e8c9a95f by Sven Tennie at 2023-07-19T03:33:59-04:00 x86 CodeGen: Implement MO_S_MulMayOflo for W8 This case wasn't handled before. But, the test-primops test suite showed that it actually might appear. - - - - - a36f9dc9 by Sven Tennie at 2023-07-19T03:33:59-04:00 Add test for %mulmayoflo primop The test expects a perfect implementation with no false positives. - - - - - 38a36248 by Matthew Pickering at 2023-07-19T03:34:36-04:00 lint-ci-config: Generate jobs-metadata.json We also now save the jobs-metadata.json and jobs.yaml file as artifacts as: * It might be useful for someone who is modifying CI to copy jobs.yaml if they are having trouble regenerating locally. * jobs-metadata.json is very useful for downstream pipelines to work out the right job to download. Fixes #23654 - - - - - 1535a671 by Vladislav Zavialov at 2023-07-19T03:35:12-04:00 Initialize 9.10.1-notes.rst Create new release notes for the next GHC release (GHC 9.10) - - - - - 3bd4d5b5 by sheaf at 2023-07-19T03:35:53-04:00 Prioritise Parent when looking up class sub-binder When we look up children GlobalRdrElts of a given Parent, we sometimes would rather prioritise those GlobalRdrElts which have the right Parent, and sometimes prioritise those that have the right NameSpace: - in export lists, we should prioritise NameSpace - for class/instance binders, we should prioritise Parent See Note [childGREPriority] in GHC.Types.Name.Reader. fixes #23664 - - - - - 9c8fdda3 by Alan Zimmerman at 2023-07-19T03:36:29-04:00 EPA: Improve annotation management in getMonoBind Ensure the LHsDecl for a FunBind has the correct leading comments and trailing annotations. See the added note for details. - - - - - ff884b77 by Matthew Pickering at 2023-07-19T11:42:02+01:00 Remove unused files in .gitlab These were left over after 6078b429 - - - - - 29ef590c by Matthew Pickering at 2023-07-19T11:42:52+01:00 gen_ci: Add hie.yaml file This allows you to load `gen_ci.hs` into HLS, and now it is a huge module, that is quite useful. - - - - - 808b55cf by Matthew Pickering at 2023-07-19T12:24:41+01:00 ci: Make "fast-ci" the default validate configuration We are trying out a lighter weight validation pipeline where by default we just test on 5 platforms: * x86_64-deb10-slow-validate * windows * x86_64-fedora33-release * aarch64-darwin * aarch64-linux-deb10 In order to enable the "full" validation pipeline you can apply the `full-ci` label which will enable all the validation pipelines. All the validation jobs are still run on a marge batch. The goal is to reduce the overall CI capacity so that pipelines start faster for MRs and marge bot batches are faster. Fixes #23694 - - - - - 0b23db03 by Alan Zimmerman at 2023-07-20T05:28:47-04:00 EPA: Simplify GHC/Parser.y sL1 This is the next patch in a series simplifying location management in GHC/Parser.y This one simplifies sL1, to use the HasLoc instances introduced in !10743 (closed) - - - - - 3ece9856 by Ben Gamari at 2023-07-21T07:30:45-04:00 nativeGen: Explicitly set flags of text sections on Windows The binutils documentation (for COFF) claims, > If no flags are specified, the default flags depend upon the section > name. If the section name is not recognized, the default will be for the > section to be loaded and writable. We previously assumed that this would do the right thing for split sections (e.g. a section named `.text$foo` would be correctly inferred to be a text section). However, we have observed that this is not the case (at least under the clang toolchain used on Windows): when split-sections is enabled, text sections are treated by the assembler as data (matching the "default" behavior specified by the documentation). Avoid this by setting section flags explicitly. This should fix split sections on Windows. Fixes #22834. - - - - - db7f7240 by Ben Gamari at 2023-07-21T07:30:45-04:00 nativeGen: Set explicit section types on all platforms - - - - - b444c16f by Finley McIlwaine at 2023-07-21T07:31:28-04:00 Insert documentation into parsed signature modules Causes haddock comments in signature modules to be properly inserted into the AST (just as they are for regular modules) if the `-haddock` flag is given. Also adds a test that compares `-ddump-parsed-ast` output for a signature module to prevent further regressions. Fixes #23315 - - - - - f9b952a7 by Ben Gamari at 2023-07-21T11:58:05-04:00 Bump base bound to <4.20 For GHC 9.8. - - - - - c30cea53 by Ben Gamari at 2023-07-21T23:23:49-04:00 primops: Introduce unsafeThawByteArray# This addresses an odd asymmetry in the ByteArray# primops, which previously provided unsafeFreezeByteArray# but no corresponding thaw operation. Closes #22710 - - - - - 87f9bd47 by Ben Gamari at 2023-07-21T23:23:49-04:00 testsuite: Elaborate in interface stability README This discussion didn't make it into the original MR. - - - - - e4350b41 by Matthew Pickering at 2023-07-21T23:24:25-04:00 Allow users to override non-essential haddock options in a Flavour We now supply the non-essential options to haddock using the `extraArgs` field, which can be specified in a Flavour so that if an advanced user wants to change how documentation is generated then they can use something other than the `defaultHaddockExtraArgs`. This does have the potential to regress some packaging if a user has overridden `extraArgs` themselves, because now they also need to add the haddock options to extraArgs. This can easily be done by appending `defaultHaddockExtraArgs` to their extraArgs invocation but someone might not notice this behaviour has changed. In any case, I think passing the non-essential options in this manner is the right thing to do and matches what we do for the "ghc" builder, which by default doesn't pass any optmisation levels, and would likewise be very bad if someone didn't pass suitable `-O` levels for builds. Fixes #23625 - - - - - fc186b0c by Ilias Tsitsimpis at 2023-07-21T23:25:03-04:00 ghc-prim: Link against libatomic Commit b4d39adbb58 made 'hs_cmpxchg64()' available to all architectures. Unfortunately this made GHC to fail to build on armel, since armel needs libatomic to support atomic operations on 64-bit word sizes. Configure libraries/ghc-prim/ghc-prim.cabal to link against libatomic, the same way as we do in rts/rts.cabal. - - - - - 4f5538a8 by Matthew Pickering at 2023-07-21T23:25:39-04:00 simplifier: Correct InScopeSet in rule matching The in-scope set passedto the `exprIsLambda_maybe` call lacked all the in-scope binders. @simonpj suggests this fix where we augment the in-scope set with the free variables of expression which fixes this failure mode in quite a direct way. Fixes #23630 - - - - - 5ad8d597 by Krzysztof Gogolewski at 2023-07-21T23:26:17-04:00 Add a test for #23413 It was fixed by commit e1590ddc661d6: Add the SolverStage monad. - - - - - 7e05f6df by sheaf at 2023-07-21T23:26:56-04:00 Finish migration of diagnostics in GHC.Tc.Validity This patch finishes migrating the error messages in GHC.Tc.Validity to use the new diagnostic infrastructure. It also refactors the error message datatypes for class and family instances, to common them up under a single datatype as much as possible. - - - - - 4876fddc by Matthew Pickering at 2023-07-21T23:27:33-04:00 ci: Enable some more jobs to run in a marge batch In !10907 I made the majority of jobs not run on a validate pipeline but then forgot to renable a select few jobs on the marge batch MR. - - - - - 026991d7 by Jens Petersen at 2023-07-21T23:28:13-04:00 user_guide/flags.py: python-3.12 no longer includes distutils packaging.version seems able to handle this fine - - - - - b91bbc2b by Matthew Pickering at 2023-07-21T23:28:50-04:00 ci: Mention ~full-ci label in MR template We mention that if you need a full validation pipeline then you can apply the ~full-ci label to your MR in order to test against the full validation pipeline (like we do for marge). - - - - - 42b05e9b by sheaf at 2023-07-22T12:36:00-04:00 RTS: declare setKeepCAFs symbol Commit 08ba8720 failed to declare the dependency of keepCAFsForGHCi on the symbol setKeepCAFs in the RTS, which led to undefined symbol errors on Windows, as exhibited by the testcase frontend001. Thanks to Moritz Angermann and Ryan Scott for the diagnosis and fix. Fixes #22961 - - - - - a72015d6 by sheaf at 2023-07-22T12:36:01-04:00 Mark plugins-external as broken on Windows This test is broken on Windows, so we explicitly mark it as such now that we stop skipping plugin tests on Windows. - - - - - cb9c93d7 by sheaf at 2023-07-22T12:36:01-04:00 Stop marking plugin tests as fragile on Windows Now that b2bb3e62 has landed we are in a better situation with regards to plugins on Windows, allowing us to unmark many plugin tests as fragile. Fixes #16405 - - - - - a7349217 by Krzysztof Gogolewski at 2023-07-22T12:36:37-04:00 Misc cleanup - Remove unused RDR names - Fix typos in comments - Deriving: simplify boxConTbl and remove unused litConTbl - chmod -x GHC/Exts.hs, this seems accidental - - - - - 33b6850a by Vladislav Zavialov at 2023-07-23T10:27:37-04:00 Visible forall in types of terms: Part 1 (#22326) This patch implements part 1 of GHC Proposal #281, introducing explicit `type` patterns and `type` arguments. Summary of the changes: 1. New extension flag: RequiredTypeArguments 2. New user-facing syntax: `type p` patterns (represented by EmbTyPat) `type e` expressions (represented by HsEmbTy) 3. Functions with required type arguments (visible forall) can now be defined and applied: idv :: forall a -> a -> a -- signature (relevant change: checkVdqOK in GHC/Tc/Validity.hs) idv (type a) (x :: a) = x -- definition (relevant change: tcPats in GHC/Tc/Gen/Pat.hs) x = idv (type Int) 42 -- usage (relevant change: tcInstFun in GHC/Tc/Gen/App.hs) 4. template-haskell support: TH.TypeE corresponds to HsEmbTy TH.TypeP corresponds to EmbTyPat 5. Test cases and a new User's Guide section Changes *not* included here are the t2t (term-to-type) transformation and term variable capture; those belong to part 2. - - - - - 73b5c7ce by sheaf at 2023-07-23T10:28:18-04:00 Add test for #22424 This is a simple Template Haskell test in which we refer to record selectors by their exact Names, in two different ways. Fixes #22424 - - - - - 83cbc672 by Ben Gamari at 2023-07-24T07:40:49+00:00 ghc-toolchain: Initial commit - - - - - 31dcd26c by Rodrigo Mesquita at 2023-07-24T07:40:49+00:00 ghc-toolchain: Toolchain Selection This commit integrates ghc-toolchain, the brand new way of configuring toolchains for GHC, with the Hadrian build system, with configure, and extends and improves the first iteration of ghc-toolchain. The general overview is * We introduce a program invoked `ghc-toolchain --triple=...` which, when run, produces a file with a `Target`. A `GHC.Toolchain.Target.Target` describes the properties of a target and the toolchain (executables and configured flags) to produce code for that target * Hadrian was modified to read Target files, and will both * Invoke the toolchain configured in the Target file as needed * Produce a `settings` file for GHC based on the Target file for that stage * `./configure` will invoke ghc-toolchain to generate target files, but it will also generate target files based on the flags configure itself configured (through `.in` files that are substituted) * By default, the Targets generated by configure are still (for now) the ones used by Hadrian * But we additionally validate the Target files generated by ghc-toolchain against the ones generated by configure, to get a head start on catching configuration bugs before we transition completely. * When we make that transition, we will want to drop a lot of the toolchain configuration logic from configure, but keep it otherwise. * For each compiler stage we should have 1 target file (up to a stage compiler we can't run in our machine) * We just have a HOST target file, which we use as the target for stage0 * And a TARGET target file, which we use for stage1 (and later stages, if not cross compiling) * Note there is no BUILD target file, because we only support cross compilation where BUILD=HOST * (for more details on cross-compilation see discussion on !9263) See also * Note [How we configure the bundled windows toolchain] * Note [ghc-toolchain consistency checking] * Note [ghc-toolchain overview] Ticket: #19877 MR: !9263 - - - - - a732b6d3 by Rodrigo Mesquita at 2023-07-24T07:40:49+00:00 Add flag to enable/disable ghc-toolchain based configurations This flag is disabled by default, and we'll use the configure-generated-toolchains by default until we remove the toolchain configuration logic from configure. - - - - - 61eea240 by Rodrigo Mesquita at 2023-07-24T07:40:49+00:00 Split ghc-toolchain executable to new packge In light of #23690, we split the ghc-toolchain executable out of the library package to be able to ship it in the bindist using Hadrian. Ideally, we eventually revert this commit. - - - - - 38e795ff by Rodrigo Mesquita at 2023-07-24T07:40:49+00:00 Ship ghc-toolchain in the bindist Add the ghc-toolchain binary to the binary distribution we ship to users, and teach the bindist configure to use the existing ghc-toolchain. - - - - - 32cae784 by Matthew Craven at 2023-07-24T16:48:24-04:00 Kill off gen_bytearray_addr_access_ops.py The relevant primop descriptions are now generated directly by genprimopcode. This makes progress toward fixing #23490, but it is not a complete fix since there is more than one way in which cabal-reinstall (hadrian/build build-cabal) is broken. - - - - - 02e6a6ce by Matthew Pickering at 2023-07-24T16:49:00-04:00 compiler: Remove unused `containers.h` include Fixes #23712 - - - - - 822ef66b by Matthew Pickering at 2023-07-25T08:44:50-04:00 Fix pretty printing of WARNING pragmas There is still something quite unsavoury going on with WARNING pragma printing because the printing relies on the fact that for decl deprecations the SourceText of WarningTxt is empty. However, I let that lion sleep and just fixed things directly. Fixes #23465 - - - - - e7b38ede by Matthew Pickering at 2023-07-25T08:45:28-04:00 ci-images: Bump to commit which has 9.6 image The test-bootstrap job has been failing for 9.6 because we accidentally used a non-master commit. - - - - - bb408936 by Matthew Pickering at 2023-07-25T08:45:28-04:00 Update bootstrap plans for 9.6.2 and 9.4.5 - - - - - 355e1792 by Alan Zimmerman at 2023-07-26T10:17:32-04:00 EPA: Simplify GHC/Parser.y comb4/comb5 Use the HasLoc instance from Ast.hs to allow comb4/comb5 to work with anything with a SrcSpan Also get rid of some more now unnecessary reLoc calls. - - - - - 9393df83 by Gavin Zhao at 2023-07-26T10:18:16-04:00 compiler: make -ddump-asm work with wasm backend NCG Fixes #23503. Now the `-ddump-asm` flag is respected in the wasm backend NCG, so developers can directly view the generated ASM instead of needing to pass `-S` or `-keep-tmp-files` and manually find & open the assembly file. Ideally, we should be able to output the assembly files in smaller chunks like in other NCG backends. This would also make dumping assembly stats easier. However, this would require a large refactoring, so for short-term debugging purposes I think the current approach works fine. Signed-off-by: Gavin Zhao <git at gzgz.dev> - - - - - 79463036 by Krzysztof Gogolewski at 2023-07-26T10:18:54-04:00 llvm: Restore accidentally deleted code in 0fc5cb97 Fixes #23711 - - - - - 20db7e26 by Rodrigo Mesquita at 2023-07-26T10:19:33-04:00 configure: Default missing options to False when preparing ghc-toolchain Targets This commit fixes building ghc with 9.2 as the boostrap compiler. The ghc-toolchain patch assumed all _STAGE0 options were available, and forgot to account for this missing information in 9.2. Ghc 9.2 does not have in settings whether ar supports -l, hence can't report it with --info (unliked 9.4 upwards). The fix is to default the missing information (we default "ar supports -l" and other missing options to False) - - - - - fac9e84e by Naïm Favier at 2023-07-26T10:20:16-04:00 docs: Fix typo - - - - - 503fd647 by Bartłomiej Cieślar at 2023-07-26T17:23:10-04:00 This MR is an implementation of the proposal #516. It adds a warning -Wincomplete-record-selectors for usages of a record field access function (either a record selector or getField @"rec"), while trying to silence the warning whenever it can be sure that a constructor without the record field would not be invoked (which would otherwise cause the program to fail). For example: data T = T1 | T2 {x :: Bool} f a = x a -- this would throw an error g T1 = True g a = x a -- this would not throw an error h :: HasField "x" r Bool => r -> Bool h = getField @"x" j :: T -> Bool j = h -- this would throw an error because of the `HasField` -- constraint being solved See the tests DsIncompleteRecSel* and TcIncompleteRecSel for more examples of the warning. See Note [Detecting incomplete record selectors] in GHC.HsToCore.Expr for implementation details - - - - - af6fdf42 by Arnaud Spiwack at 2023-07-26T17:23:52-04:00 Fix user-facing label in MR template - - - - - 5d45b92a by Matthew Pickering at 2023-07-27T05:46:46-04:00 ci: Test bootstrapping configurations with full-ci and on marge batches There have been two incidents recently where bootstrapping has been broken by removing support for building with 9.2.*. The process for bumping the minimum required version starts with bumping the configure version and then other CI jobs such as the bootstrap jobs have to be updated. We must not silently bump the minimum required version. Now we are running a slimmed down validate pipeline it seems worthwile to test these bootstrap configurations in the full-ci pipeline. - - - - - 25d4fee7 by Matthew Pickering at 2023-07-27T05:46:46-04:00 bootstrap: Remove ghc-9_2_* plans We are anticipating shortly making it necessary to use ghc-9.4 to boot the compiler. - - - - - 2f66da16 by Matthew Pickering at 2023-07-27T05:46:46-04:00 Update bootstrap plans for ghc-platform and ghc-toolchain dependencies Fixes #23735 - - - - - c8c6eab1 by Matthew Pickering at 2023-07-27T05:46:46-04:00 bootstrap: Disable -selftest flag from bootstrap plans This saves on building one dependency (QuickCheck) which is unecessary for bootstrapping. - - - - - a80ca086 by Andrew Lelechenko at 2023-07-27T05:47:26-04:00 Link reference paper and package from System.Mem.{StableName,Weak} - - - - - a5319358 by David Knothe at 2023-07-28T13:13:10-04:00 Update Match Datatype EquationInfo currently contains a list of the equation's patterns together with a CoreExpr that is to be evaluated after a successful match on this equation. All the match-functions only operate on the first pattern of an equation - after successfully matching it, match is called recursively on the tail of the pattern list. We can express this more clearly and make the code a little more elegant by updating the datatype of EquationInfo as follows: data EquationInfo = EqnMatch { eqn_pat = Pat GhcTc, eqn_rest = EquationInfo } | EqnDone { eqn_rhs = MatchResult CoreExpr } An EquationInfo now explicitly exposes its first pattern which most functions operate on, and exposes the equation that remains after processing the first pattern. An EqnDone signifies an empty equation where the CoreExpr can now be evaluated. - - - - - 86ad1af9 by David Binder at 2023-07-28T13:13:53-04:00 Improve documentation for Data.Fixed - - - - - f8fa1d08 by Ben Gamari at 2023-07-28T13:14:31-04:00 ghc-prim: Use C11 atomics Previously `ghc-prim`'s atomic wrappers used the legacy `__sync_*` family of C builtins. Here we refactor these to rather use the appropriate C11 atomic equivalents, allowing us to be more explicit about the expected ordering semantics. - - - - - 0bfc8908 by Finley McIlwaine at 2023-07-28T18:46:26-04:00 Include -haddock in DynFlags fingerprint The -haddock flag determines whether or not the resulting .hi files contain haddock documentation strings. If the existing .hi files do not contain haddock documentation strings and the user requests them, we should recompile. - - - - - 40425c50 by Andreas Klebinger at 2023-07-28T18:47:02-04:00 Aarch64 NCG: Use encoded immediates for literals. Try to generate instr x2, <imm> instead of mov x1, lit instr x2, x1 When possible. This get's rid if quite a few redundant mov instructions. I believe this causes a metric decrease for LargeRecords as we reduce register pressure. ------------------------- Metric Decrease: LargeRecord ------------------------- - - - - - e9a0fa3f by Andrew Lelechenko at 2023-07-28T18:47:42-04:00 Bump filepath submodule to 1.4.100.4 Resolves #23741 Metric Decrease: MultiComponentModules MultiComponentModulesRecomp MultiLayerModules MultiLayerModulesRecomp T10421 T12234 T12425 T13035 T13701 T13719 T16875 T18304 T18698a T18698b T21839c T9198 TcPlugin_RewritePerf hard_hole_fits Metric decrease on Windows can be probably attributed to https://github.com/haskell/filepath/pull/183 - - - - - ee93edfd by Andrew Lelechenko at 2023-07-28T18:48:21-04:00 Add since pragmas to GHC.IO.Handle.FD - - - - - d0369802 by Simon Peyton Jones at 2023-07-30T09:24:48+01:00 Make the occurrence analyser smarter about join points This MR addresses #22404. There is a big Note Note [Occurrence analysis for join points] that explains it all. Significant changes * New field occ_join_points in OccEnv * The NonRec case of occAnalBind splits into two cases: one for existing join points (which does the special magic for Note [Occurrence analysis for join points], and one for other bindings. * mkOneOcc adds in info from occ_join_points. * All "bring into scope" activity is centralised in the new function `addInScope`. * I made a local data type LocalOcc for use inside the occurrence analyser It is like OccInfo, but lacks IAmDead and IAmALoopBreaker, which in turn makes computationns over it simpler and more efficient. * I found quite a bit of allocation in GHC.Core.Rules.getRules so I optimised it a bit. More minor changes * I found I was using (Maybe Arity) a lot, so I defined a new data type JoinPointHood and used it everwhere. This touches a lot of non-occ-anal files, but it makes everything more perspicuous. * Renamed data constructor WithUsageDetails to WUD, and WithTailUsageDetails to WTUD This also fixes #21128, on the way. --------- Compiler perf ----------- I spent quite a time on performance tuning, so even though it does more than before, the occurrence analyser runs slightly faster on average. Here are the compile-time allocation changes over 0.5% CoOpt_Read(normal) ghc/alloc 766,025,520 754,561,992 -1.5% CoOpt_Singletons(normal) ghc/alloc 759,436,840 762,925,512 +0.5% LargeRecord(normal) ghc/alloc 1,814,482,440 1,799,530,456 -0.8% PmSeriesT(normal) ghc/alloc 68,159,272 67,519,720 -0.9% T10858(normal) ghc/alloc 120,805,224 118,746,968 -1.7% T11374(normal) ghc/alloc 164,901,104 164,070,624 -0.5% T11545(normal) ghc/alloc 79,851,808 78,964,704 -1.1% T12150(optasm) ghc/alloc 73,903,664 71,237,544 -3.6% GOOD T12227(normal) ghc/alloc 333,663,200 331,625,864 -0.6% T12234(optasm) ghc/alloc 52,583,224 52,340,344 -0.5% T12425(optasm) ghc/alloc 81,943,216 81,566,720 -0.5% T13056(optasm) ghc/alloc 294,517,928 289,642,512 -1.7% T13253-spj(normal) ghc/alloc 118,271,264 59,859,040 -49.4% GOOD T15164(normal) ghc/alloc 1,102,630,352 1,091,841,296 -1.0% T15304(normal) ghc/alloc 1,196,084,000 1,166,733,000 -2.5% T15630(normal) ghc/alloc 148,729,632 147,261,064 -1.0% T15703(normal) ghc/alloc 379,366,664 377,600,008 -0.5% T16875(normal) ghc/alloc 32,907,120 32,670,976 -0.7% T17516(normal) ghc/alloc 1,658,001,888 1,627,863,848 -1.8% T17836(normal) ghc/alloc 395,329,400 393,080,248 -0.6% T18140(normal) ghc/alloc 71,968,824 73,243,040 +1.8% T18223(normal) ghc/alloc 456,852,568 453,059,088 -0.8% T18282(normal) ghc/alloc 129,105,576 131,397,064 +1.8% T18304(normal) ghc/alloc 71,311,712 70,722,720 -0.8% T18698a(normal) ghc/alloc 208,795,112 210,102,904 +0.6% T18698b(normal) ghc/alloc 230,320,736 232,697,976 +1.0% BAD T19695(normal) ghc/alloc 1,483,648,128 1,504,702,976 +1.4% T20049(normal) ghc/alloc 85,612,024 85,114,376 -0.6% T21839c(normal) ghc/alloc 415,080,992 410,906,216 -1.0% GOOD T4801(normal) ghc/alloc 247,590,920 250,726,272 +1.3% T6048(optasm) ghc/alloc 95,699,416 95,080,680 -0.6% T783(normal) ghc/alloc 335,323,384 332,988,120 -0.7% T9233(normal) ghc/alloc 709,641,224 685,947,008 -3.3% GOOD T9630(normal) ghc/alloc 965,635,712 948,356,120 -1.8% T9675(optasm) ghc/alloc 444,604,152 428,987,216 -3.5% GOOD T9961(normal) ghc/alloc 303,064,592 308,798,800 +1.9% BAD WWRec(normal) ghc/alloc 503,728,832 498,102,272 -1.1% geo. mean -1.0% minimum -49.4% maximum +1.9% In fact these figures seem to vary between platforms; generally worse on i386 for some reason. The Windows numbers vary by 1% espec in benchmarks where the total allocation is low. But the geom mean stays solidly negative, which is good. The "increase/decrease" list below covers all platforms. The big win on T13253-spj comes because it has a big nest of join points, each occurring twice in the next one. The new occ-anal takes only one iteration of the simplifier to do the inlining; the old one took four. Moreover, we get much smaller code with the new one: New: Result size of Tidy Core = {terms: 429, types: 84, coercions: 0, joins: 14/14} Old: Result size of Tidy Core = {terms: 2,437, types: 304, coercions: 0, joins: 10/10} --------- Runtime perf ----------- No significant changes in nofib results, except a 1% reduction in compiler allocation. Metric Decrease: CoOpt_Read T13253-spj T9233 T9630 T9675 T12150 T21839c LargeRecord MultiComponentModulesRecomp T10421 T13701 T10421 T13701 T12425 Metric Increase: T18140 T9961 T18282 T18698a T18698b T19695 - - - - - 42aa7fbd by Julian Ospald at 2023-07-30T17:22:01-04:00 Improve documentation around IOException and ioe_filename See: * https://github.com/haskell/core-libraries-committee/issues/189 * https://github.com/haskell/unix/pull/279 * https://github.com/haskell/unix/pull/289 - - - - - 33598ecb by Sylvain Henry at 2023-08-01T14:45:54-04:00 JS: implement getMonotonicTime (fix #23687) - - - - - d2bedffd by Bartłomiej Cieślar at 2023-08-01T14:46:40-04:00 Implementation of the Deprecated Instances proposal #575 This commit implements the ability to deprecate certain instances, which causes the compiler to emit the desired deprecation message whenever they are instantiated. For example: module A where class C t where instance {-# DEPRECATED "dont use" #-} C Int where module B where import A f :: C t => t f = undefined g :: Int g = f -- "dont use" emitted here The implementation is as follows: - In the parser, we parse deprecations/warnings attached to instances: instance {-# DEPRECATED "msg" #-} Show X deriving instance {-# WARNING "msg2" #-} Eq Y (Note that non-standalone deriving instance declarations do not support this mechanism.) - We store the resulting warning message in `ClsInstDecl` (respectively, `DerivDecl`). In `GHC.Tc.TyCl.Instance.tcClsInstDecl` (respectively, `GHC.Tc.Deriv.Utils.newDerivClsInst`), we pass on that information to `ClsInst` (and eventually store it in `IfaceClsInst` too). - Finally, when we solve a constraint using such an instance, in `GHC.Tc.Instance.Class.matchInstEnv`, we emit the appropriate warning that was stored in `ClsInst`. Note that we only emit a warning when the instance is used in a different module than it is defined, which keeps the behaviour in line with the deprecation of top-level identifiers. Signed-off-by: Bartłomiej Cieślar <bcieslar2001 at gmail.com> - - - - - d5a65af6 by Ben Gamari at 2023-08-01T14:47:18-04:00 compiler: Style fixes - - - - - 7218c80a by Ben Gamari at 2023-08-01T14:47:19-04:00 rts: Fix implicit cast This ensures that Task.h can be built with a C++ compiler. - - - - - d6d5aafc by Ben Gamari at 2023-08-01T14:47:19-04:00 testsuite: Fix warning in hs_try_putmvar001 - - - - - d9eddf7a by Ben Gamari at 2023-08-01T14:47:19-04:00 testsuite: Add AtomicModifyIORef test - - - - - f9eea4ba by Ben Gamari at 2023-08-01T14:47:19-04:00 rts: Introduce NO_WARN macro This allows fine-grained ignoring of warnings. - - - - - 497b24ec by Ben Gamari at 2023-08-01T14:47:19-04:00 rts: Simplify atomicModifyMutVar2# implementation Previously we would perform a redundant load in the non-threaded RTS in atomicModifyMutVar2# implementation for the benefit of the non-moving GC's write barrier. Eliminate this. - - - - - 52ee082b by Ben Gamari at 2023-08-01T14:47:19-04:00 rts: Introduce more principled fence operations - - - - - cd3c0377 by Ben Gamari at 2023-08-01T14:47:19-04:00 rts: Introduce SET_INFO_RELAXED - - - - - 6df2352a by Ben Gamari at 2023-08-01T14:47:19-04:00 rts: Style fixes - - - - - 4ef6f319 by Ben Gamari at 2023-08-01T14:47:19-04:00 codeGen/tsan: Rework handling of spilling - - - - - f9ca7e27 by Ben Gamari at 2023-08-01T14:47:19-04:00 hadrian: More debug information - - - - - df4153ac by Ben Gamari at 2023-08-01T14:47:19-04:00 Improve TSAN documentation - - - - - fecae988 by Ben Gamari at 2023-08-01T14:47:19-04:00 hadrian: More selective TSAN instrumentation - - - - - 465a9a0b by Alan Zimmerman at 2023-08-01T14:47:56-04:00 EPA: Provide correct annotation span for ImportDecl Use the whole declaration, rather than just the span of the 'import' keyword. Metric Decrease: T9961 T5205 Metric Increase: T13035 - - - - - ae63d0fa by Bartłomiej Cieślar at 2023-08-01T14:48:40-04:00 Add cases to T23279: HasField for deprecated record fields This commit adds additional tests from ticket #23279 to ensure that we don't regress on reporting deprecated record fields in conjunction with HasField, either when using overloaded record dot syntax or directly through `getField`. Fixes #23279 - - - - - 00fb6e6b by Andreas Klebinger at 2023-08-01T14:49:17-04:00 AArch NCG: Pure refactor Combine some alternatives. Add some line breaks for overly long lines - - - - - 8f3b3b78 by Andreas Klebinger at 2023-08-01T14:49:54-04:00 Aarch ncg: Optimize immediate use for address calculations When the offset doesn't fit into the immediate we now just reuse the general getRegister' code path which is well optimized to compute the offset into a register instead of a special case for CmmRegOff. This means we generate a lot less code under certain conditions which is why performance metrics for these improve. ------------------------- Metric Decrease: T4801 T5321FD T5321Fun ------------------------- - - - - - 74a882dc by MorrowM at 2023-08-02T06:00:03-04:00 Add a RULE to make lookup fuse See https://github.com/haskell/core-libraries-committee/issues/175 Metric Increase: T18282 - - - - - cca74dab by Ben Gamari at 2023-08-02T06:00:39-04:00 hadrian: Ensure that way-flags are passed to CC Previously the way-specific compilation flags (e.g. `-DDEBUG`, `-DTHREADED_RTS`) would not be passed to the CC invocations. This meant that C dependency files would not correctly reflect dependencies predicated on the way, resulting in the rather painful #23554. Closes #23554. - - - - - 622b483c by Jaro Reinders at 2023-08-02T06:01:20-04:00 Native 32-bit Enum Int64/Word64 instances This commits adds more performant Enum Int64 and Enum Word64 instances for 32-bit platforms, replacing the Integer-based implementation. These instances are a copy of the Enum Int and Enum Word instances with minimal changes to manipulate Int64 and Word64 instead. On i386 this yields a 1.5x performance increase and for the JavaScript back end it even yields a 5.6x speedup. Metric Decrease: T18964 - - - - - c8bd7fa4 by Sylvain Henry at 2023-08-02T06:02:03-04:00 JS: fix typos in constants (#23650) - - - - - b9d5bfe9 by Josh Meredith at 2023-08-02T06:02:40-04:00 JavaScript: update MK_TUP macros to use current tuple constructors (#23659) - - - - - 28211215 by Matthew Pickering at 2023-08-02T06:03:19-04:00 ci: Pass -Werror when building hadrian in hadrian-ghc-in-ghci job Warnings when building Hadrian can end up cluttering the output of HLS, and we've had bug reports in the past about these warnings when building Hadrian. It would be nice to turn on -Werror on at least one build of Hadrian in CI to avoid a patch introducing warnings when building Hadrian. Fixes #23638 - - - - - aca20a5d by Ben Gamari at 2023-08-02T06:03:55-04:00 codeGen: Ensure that TSAN is aware of writeArray# write barriers By using a proper release store instead of a fence. - - - - - 453c0531 by Ben Gamari at 2023-08-02T06:03:55-04:00 codeGen: Ensure that array reads have necessary barriers This was the cause of #23541. - - - - - 93a0d089 by Arnaud Spiwack at 2023-08-02T06:04:37-04:00 Add test for #23550 - - - - - 6a2f4a20 by Arnaud Spiwack at 2023-08-02T06:04:37-04:00 Desugar non-recursive lets to non-recursive lets (take 2) This reverts commit 522bd584f71ddeda21efdf0917606ce3d81ec6cc. And takes care of the case that I missed in my previous attempt. Namely the case of an AbsBinds with no type variables and no dictionary variable. Ironically, the comment explaining why non-recursive lets were desugared to recursive lets were pointing specifically at this case as the reason. I just failed to understand that it was until Simon PJ pointed it out to me. See #23550 for more discussion. - - - - - ff81d53f by jade at 2023-08-02T06:05:20-04:00 Expand documentation of List & Data.List This commit aims to improve the documentation and examples of symbols exported from Data.List - - - - - fa4e5913 by Jade at 2023-08-02T06:06:03-04:00 Improve documentation of Semigroup & Monoid This commit aims to improve the documentation of various symbols exported from Data.Semigroup and Data.Monoid - - - - - 1b27e151 by Vladislav Zavialov at 2023-08-02T10:42:11+00:00 Check for puns (see ghc#23368) - - - - - 457341fd by Vladislav Zavialov at 2023-08-02T10:42:11+00:00 Remove fake exports for (~), List, and Tuple<n> The old reasoning no longer applies, nowadays those names can be mentioned in export lists. - - - - - bf3dcddf by Vladislav Zavialov at 2023-08-02T10:42:11+00:00 Fix pretty-printing of Solo and MkSolo - - - - - e2c91bff by Gergő Érdi at 2023-08-03T02:55:46+01:00 Desugar bindings in the context of their evidence Closes #23172 - - - - - 481f4a46 by Gergő Érdi at 2023-08-03T07:48:43+01:00 Add flag to `-f{no-}specialise-incoherents` to enable/disable specialisation of incoherent instances Fixes #23287 - - - - - d751c583 by Profpatsch at 2023-08-04T12:24:26-04:00 base: Improve String & IsString documentation - - - - - 01db1117 by Ben Gamari at 2023-08-04T12:25:02-04:00 rts/win32: Ensure reliability of IO manager shutdown When the Win32 threaded IO manager shuts down, `ioManagerDie` sends an `IO_MANAGER_DIE` event to the IO manager thread using the `io_manager_event` event object. Finally, it will closes the event object, and invalidate `io_manager_event`. Previously, `readIOManagerEvent` would see that `io_manager_event` is invalid and return `0`, suggesting that everything is right with the world. This meant that if `ioManagerDie` invalidated the handle before the event manager was blocked on the event we would end up in a situation where the event manager would never realize it was asked to shut down. Fix this by ensuring that `readIOManagerEvent` instead returns `IO_MANAGER_DIE` when we detect that the event object has been invalidated by `ioManagerDie`. Fixes #23691. - - - - - fdef003a by Ryan Scott at 2023-08-04T12:25:39-04:00 Look through TH splices in splitHsApps This modifies `splitHsApps` (a key function used in typechecking function applications) to look through untyped TH splices and quasiquotes. Not doing so was the cause of #21077. This builds on !7821 by making `splitHsApps` match on `HsUntypedSpliceTop`, which contains the `ThModFinalizers` that must be run as part of invoking the TH splice. See the new `Note [Looking through Template Haskell splices in splitHsApps]` in `GHC.Tc.Gen.Head`. Along the way, I needed to make the type of `splitHsApps.set` slightly more general to accommodate the fact that the location attached to a quasiquote is a `SrcAnn NoEpAnns` rather than a `SrcSpanAnnA`. Fixes #21077. - - - - - e77a0b41 by Ben Gamari at 2023-08-04T12:26:15-04:00 Bump deepseq submodule to 1.5. And bump bounds (cherry picked from commit 1228d3a4a08d30eaf0138a52d1be25b38339ef0b) - - - - - cebb5819 by Ben Gamari at 2023-08-04T12:26:15-04:00 configure: Bump minimal boot GHC version to 9.4 (cherry picked from commit d3ffdaf9137705894d15ccc3feff569d64163e8e) - - - - - 83766dbf by Ben Gamari at 2023-08-04T12:26:15-04:00 template-haskell: Bump version to 2.21.0.0 Bumps exceptions submodule. (cherry picked from commit bf57fc9aea1196f97f5adb72c8b56434ca4b87cb) - - - - - 1211112a by Ben Gamari at 2023-08-04T12:26:15-04:00 base: Bump version to 4.19 Updates all boot library submodules. (cherry picked from commit 433d99a3c24a55b14ec09099395e9b9641430143) - - - - - 3ab5efd9 by Ben Gamari at 2023-08-04T12:26:15-04:00 testsuite: Normalise versions more aggressively In backpack hashes can contain `+` characters. (cherry picked from commit 024861af51aee807d800e01e122897166a65ea93) - - - - - d52be957 by Ben Gamari at 2023-08-04T12:26:15-04:00 testsuite: Declare bkpcabal08 as fragile Due to spurious output changes described in #23648. (cherry picked from commit c046a2382420f2be2c4a657c56f8d95f914ea47b) - - - - - e75a58d1 by Ben Gamari at 2023-08-04T12:26:15-04:00 gitlab-ci: Only mark linker_unload_native as broken in static jobs This test passes on dynamically-linked Alpine. (cherry picked from commit f356a7e8ec8ec3d6b2b30fd175598b9b80065d87) - - - - - 8b176514 by Ben Gamari at 2023-08-04T12:26:15-04:00 testsuite: Update base-exports - - - - - 4b647936 by Ben Gamari at 2023-08-04T12:26:15-04:00 testsuite/interface-stability: normalise versions This eliminates spurious changes from version bumps. - - - - - 0eb54c05 by Ben Gamari at 2023-08-04T12:26:51-04:00 linker/PEi386: Don't sign-extend symbol section number Previously we incorrectly interpreted PE section numbers as signed values. However, this isn't the case; rather, it's an unsigned 16-bit number with a few special bit-patterns (0xffff and 0xfffe). This resulted in #22941 as the linker would conclude that the sections were invalid. Fixing this required quite a bit of refactoring. Closes #22941. - - - - - fd7ce39c by Ben Gamari at 2023-08-04T12:27:28-04:00 testsuite: Mark MulMayOflo_full as broken rather than skipping To ensure that we don't accidentally fix it. See #23742. - - - - - 824092f2 by Ben Gamari at 2023-08-04T12:27:28-04:00 nativeGen/AArch64: Fix sign extension in MulMayOflo Previously the 32-bit implementations of MulMayOflo would use the a non-sensical sign-extension mode. Rewrite these to reflect what gcc 11 produces. Also similarly rework the 16- and 8-bit cases. This now passes the MulMayOflo tests in ghc/test-primops> in all four widths, including the precision tests. Fixes #23721. - - - - - 1b15dbc4 by Jan Hrček at 2023-08-04T12:28:08-04:00 Fix haddock markup in code example for coerce - - - - - 46fd8ced by Vladislav Zavialov at 2023-08-04T12:28:44-04:00 Fix (~) and (@) infix operators in TH splices (#23748) 8168b42a "Whitespace-sensitive bang patterns" allows GHC to accept the following infix operators: a ~ b = () a @ b = () But not if TH is used to generate those declarations: $([d| a ~ b = () a @ b = () |]) -- Test.hs:5:2: error: [GHC-55017] -- Illegal variable name: ‘~’ -- When splicing a TH declaration: (~_0) a_1 b_2 = GHC.Tuple.Prim.() This is easily fixed by modifying `reservedOps` in GHC.Utils.Lexeme - - - - - a1899d8f by Aaron Allen at 2023-08-04T12:29:24-04:00 [#23663] Show Flag Suggestions in GHCi Makes suggestions when using `:set` in GHCi with a misspelled flag. This mirrors how invalid flags are handled when passed to GHC directly. Logic for producing flag suggestions was moved to GHC.Driver.Sesssion so it can be shared. resolves #23663 - - - - - 03f2debd by Rodrigo Mesquita at 2023-08-04T12:30:00-04:00 Improve ghc-toolchain validation configure warning Fixes the layout of the ghc-toolchain validation warning produced by configure. - - - - - de25487d by Alan Zimmerman at 2023-08-04T12:30:36-04:00 EPA make getLocA a synonym for getHasLoc This is basically a no-op change, but allows us to make future changes that can rely on the HasLoc instances And I presume this means we can use more precise functions based on class resolution, so the Windows CI build reports Metric Decrease: T12234 T13035 - - - - - 3ac423b9 by Ben Gamari at 2023-08-04T12:31:13-04:00 ghc-platform: Add upper bound on base Hackage upload requires this. - - - - - 8ba20b21 by Matthew Craven at 2023-08-04T17:22:59-04:00 Adjust and clarify handling of primop effects Fixes #17900; fixes #20195. The existing "can_fail" and "has_side_effects" primop attributes that previously governed this were used in inconsistent and confusingly-documented ways, especially with regard to raising exceptions. This patch replaces them with a single "effect" attribute, which has four possible values: NoEffect, CanFail, ThrowsException, and ReadWriteEffect. These are described in Note [Classifying primop effects]. A substantial amount of related documentation has been re-drafted for clarity and accuracy. In the process of making this attribute format change for literally every primop, several existing mis-classifications were detected and corrected. One of these mis-classifications was tagToEnum#, which is now considered CanFail; this particular fix is known to cause a regression in performance for derived Enum instances. (See #23782.) Fixing this is left as future work. New primop attributes "cheap" and "work_free" were also added, and used in the corresponding parts of GHC.Core.Utils. In view of their actual meaning and uses, `primOpOkForSideEffects` and `exprOkForSideEffects` have been renamed to `primOpOkToDiscard` and `exprOkToDiscard`, respectively. Metric Increase: T21839c - - - - - 41bf2c09 by sheaf at 2023-08-04T17:23:42-04:00 Update inert_solved_dicts for ImplicitParams When adding an implicit parameter dictionary to the inert set, we must make sure that it replaces any previous implicit parameter dictionaries that overlap, in order to get the appropriate shadowing behaviour, as in let ?x = 1 in let ?x = 2 in ?x We were already doing this for inert_cans, but we weren't doing the same thing for inert_solved_dicts, which lead to the bug reported in #23761. The fix is thus to make sure that, when handling an implicit parameter dictionary in updInertDicts, we update **both** inert_cans and inert_solved_dicts to ensure a new implicit parameter dictionary correctly shadows old ones. Fixes #23761 - - - - - 43578d60 by Matthew Craven at 2023-08-05T01:05:36-04:00 Bump bytestring submodule to 0.11.5.1 - - - - - 91353622 by Ben Gamari at 2023-08-05T01:06:13-04:00 Initial commit of Note [Thunks, blackholes, and indirections] This Note attempts to summarize the treatment of thunks, thunk update, and indirections. This fell out of work on #23185. - - - - - 8d686854 by sheaf at 2023-08-05T01:06:54-04:00 Remove zonk in tcVTA This removes the zonk in GHC.Tc.Gen.App.tc_inst_forall_arg and its accompanying Note [Visible type application zonk]. Indeed, this zonk is no longer necessary, as we no longer maintain the invariant that types are well-kinded without zonking; only that typeKind does not crash; see Note [The Purely Kinded Type Invariant (PKTI)]. This commit removes this zonking step (as well as a secondary zonk), and replaces the aforementioned Note with the explanatory Note [Type application substitution], which justifies why the substitution performed in tc_inst_forall_arg remains valid without this zonking step. Fixes #23661 - - - - - 19dea673 by Ben Gamari at 2023-08-05T01:07:30-04:00 Bump nofib submodule Ensuring that nofib can be build using the same range of bootstrap compilers as GHC itself. - - - - - aa07402e by Luite Stegeman at 2023-08-05T23:15:55+09:00 JS: Improve compatibility with recent emsdk The JavaScript code in libraries/base/jsbits/base.js had some hardcoded offsets for fields in structs, because we expected the layout of the data structures to remain unchanged. Emsdk 3.1.42 changed the layout of the stat struct, breaking this assumption, and causing code in .hsc files accessing the stat struct to fail. This patch improves compatibility with recent emsdk by removing the assumption that data layouts stay unchanged: 1. offsets of fields in structs used by JavaScript code are now computed by the configure script, so both the .js and .hsc files will automatically use the new layout if anything changes. 2. the distrib/configure script checks that the emsdk version on a user's system is the same version that a bindist was booted with, to avoid data layout inconsistencies See #23641 - - - - - b938950d by Luite Stegeman at 2023-08-07T06:27:51-04:00 JS: Fix missing local variable declarations This fixes some missing local variable declarations that were found by running the testsuite in strict mode. Fixes #23775 - - - - - 6c0e2247 by sheaf at 2023-08-07T13:31:21-04:00 Update Haddock submodule to fix #23368 This submodule update adds the following three commits: bbf1c8ae - Check for puns 0550694e - Remove fake exports for (~), List, and Tuple<n> 5877bceb - Fix pretty-printing of Solo and MkSolo These commits fix the issues with Haddock HTML rendering reported in ticket #23368. Fixes #23368 - - - - - 5b5be3ea by Matthew Pickering at 2023-08-07T13:32:00-04:00 Revert "Bump bytestring submodule to 0.11.5.1" This reverts commit 43578d60bfc478e7277dcd892463cec305400025. Fixes #23789 - - - - - 01961be3 by Ben Gamari at 2023-08-08T02:47:14-04:00 configure: Derive library version from ghc-prim.cabal.in Since ghc-prim.cabal is now generated by Hadrian, we cannot depend upon it. Closes #23726. - - - - - 3b373838 by Ryan Scott at 2023-08-08T02:47:49-04:00 tcExpr: Push expected types for untyped TH splices inwards In !10911, I deleted a `tcExpr` case for `HsUntypedSplice` in favor of a much simpler case that simply delegates to `tcApp`. Although this passed the test suite at the time, this was actually an error, as the previous `tcExpr` case was critically pushing the expected type inwards. This actually matters for programs like the one in #23796, which GHC would not accept with type inference alone—we need full-blown type _checking_ to accept these. I have added back the previous `tcExpr` case for `HsUntypedSplice` and now explain why we have two different `HsUntypedSplice` cases (one in `tcExpr` and another in `splitHsApps`) in `Note [Looking through Template Haskell splices in splitHsApps]` in `GHC.Tc.Gen.Head`. Fixes #23796. - - - - - 0ef1d8ae by sheaf at 2023-08-08T21:26:51-04:00 Compute all emitted diagnostic codes This commit introduces in GHC.Types.Error.Codes the function constructorCodes :: forall diag. (...) => Map DiagnosticCode String which computes a collection of all the diagnostic codes that correspond to a particular type. In particular, we can compute the collection of all diagnostic codes emitted by GHC using the invocation constructorCodes @GhcMessage We then make use of this functionality in the new "codes" test which checks consistency and coverage of GHC diagnostic codes. It performs three checks: - check 1: all non-outdated GhcDiagnosticCode equations are statically used. - check 2: all outdated GhcDiagnosticCode equations are statically unused. - check 3: all statically used diagnostic codes are covered by the testsuite (modulo accepted exceptions). - - - - - 4bc7b1e5 by Fraser Tweedale at 2023-08-08T21:27:32-04:00 numberToRangedRational: fix edge cases for exp ≈ (maxBound :: Int) Currently a negative exponent less than `minBound :: Int` results in Infinity, which is very surprising and obviously wrong. ``` λ> read "1e-9223372036854775808" :: Double 0.0 λ> read "1e-9223372036854775809" :: Double Infinity ``` There is a further edge case where the exponent can overflow when increased by the number of tens places in the integer part, or underflow when decreased by the number of leading zeros in the fractional part if the integer part is zero: ``` λ> read "10e9223372036854775807" :: Double 0.0 λ> read "0.01e-9223372036854775808" :: Double Infinity ``` To resolve both of these issues, perform all arithmetic and comparisons involving the exponent in type `Integer`. This approach also eliminates the need to explicitly check the exponent against `maxBound :: Int` and `minBound :: Int`, because the allowed range of the exponent (i.e. the result of `floatRange` for the target floating point type) is certainly within those bounds. This change implements CLC proposal 192: https://github.com/haskell/core-libraries-committee/issues/192 - - - - - 6eab07b2 by Alan Zimmerman at 2023-08-08T21:28:10-04:00 EPA: Remove Location from WarningTxt source This is not needed. - - - - - 1a98d673 by Sebastian Graf at 2023-08-09T16:24:29-04:00 Cleanup a TODO introduced in 1f94e0f7 The change must have slipped through review of !4412 - - - - - 2274abc8 by Sebastian Graf at 2023-08-09T16:24:29-04:00 More explicit strictness in GHC.Real - - - - - ce8aa54c by Sebastian Graf at 2023-08-09T16:24:30-04:00 exprIsTrivial: Factor out shared implementation The duplication between `exprIsTrivial` and `getIdFromTrivialExpr_maybe` has been bugging me for a long time. This patch introduces an inlinable worker function `trivial_expr_fold` acting as the single, shared decision procedure of triviality. It "returns" a Church-encoded `Maybe (Maybe Id)`, so when it is inlined, it fuses to similar code as before. (Better code, even, in the case of `getIdFromTrivialExpr` which presently allocates a `Just` constructor that cancels away after this patch.) - - - - - d004a36d by Sebastian Graf at 2023-08-09T16:24:30-04:00 Simplify: Simplification of arguments in a single function The Simplifier had a function `simplArg` that wasn't called in `rebuildCall`, which seems to be the main way to simplify args. Hence I consolidated the code path to call `simplArg`, too, renaming to `simplLazyArg`. - - - - - 8c73505e by Sebastian Graf at 2023-08-09T16:24:30-04:00 Core.Ppr: Omit case binder for empty case alternatives A minor improvement to pretty-printing - - - - - d8d993f1 by Sebastian Graf at 2023-08-09T16:24:30-04:00 Disable tests RepPolyWrappedVar2 and RepPolyUnsafeCoerce1 in JS backend ... because those coerce between incompatible/unknown PrimReps. - - - - - f06e87e4 by Sebastian Graf at 2023-08-09T16:24:30-04:00 Inlining literals into boring contexts is OK - - - - - 4a6b7c87 by Sebastian Graf at 2023-08-09T16:24:30-04:00 Clarify floating of unsafeEqualityProofs (#23754) - - - - - b0f4752e by Sebastian Graf at 2023-08-09T16:24:30-04:00 Kill SetLevel.notWorthFloating.is_triv (#23270) We have had it since b84ba676034, when it operated on annotated expressions. Nowadays it operates on vanilla `CoreExpr` though, so we should just call `exprIsTrivial`; thus handling empty cases and string literals correctly. - - - - - 7e0c8b3b by Sebastian Graf at 2023-08-09T16:24:30-04:00 ANFise string literal arguments (#23270) This instates the invariant that a trivial CoreExpr translates to an atomic StgExpr. Nice. Annoyingly, in -O0 we sometimes generate ``` foo = case "blah"# of sat { __DEFAULT -> unpackCString# sat } ``` which makes it a bit harder to spot that we can emit a standard `stg_unpack_cstring` thunk. Fixes #23270. - - - - - 357f2738 by Sebastian Graf at 2023-08-09T16:24:30-04:00 Deactivate -fcatch-nonexhaustive-cases in ghc-bignum (#23345) - - - - - 59202c80 by Sebastian Graf at 2023-08-09T16:24:30-04:00 CorePrep: Eliminate EmptyCase and unsafeEqualityProof in CoreToStg instead We eliminate EmptyCase by way of `coreToStg (Case e _ _ []) = coreToStg e` now. The main reason is that it plays far better in conjunction with eta expansion (as we aim to do for arguments in CorePrep, #23083), because we can discard any arguments, `(case e of {}) eta == case e of {}`, whereas in `(e |> co) eta` it's impossible to discard the argument. We do also give the same treatment to unsafeCoerce proofs and treat them as trivial iff their RHS is trivial. It is also both much simpler to describe than the previous mechanism of emitting an unsafe coercion and simpler to implement, removing quite a bit of commentary and `CorePrepProv`. In the ghc/alloc perf test `LargeRecord`, we introduce an additional Simplifier iteration due to #17910. E.g., FloatOut produces a binding ``` lvl_s6uK [Occ=Once1] :: GHC.Types.Int [LclId] lvl_s6uK = GHC.Types.I# 2# lvl_s6uL [Occ=Once1] :: GHC.Types.Any [LclId] lvl_s6uL = case Unsafe.Coerce.unsafeEqualityProof ... of { Unsafe.Coerce.UnsafeRefl v2_i6tr -> lvl_s6uK `cast` (... v2_i6tr ...) } ``` That occurs once and hence is pre-inlined unconditionally in the next Simplifier pass. It's non-trivial to find a way around that, but not really harmful otherwise. Hence we accept a 1.2% increase on some architectures. Metric Increase: LargeRecord - - - - - 00d31188 by Sebastian Graf at 2023-08-09T16:24:30-04:00 CorePrep: Eta expand arguments (#23083) Previously, we'd only eta expand let bindings and lambdas, now we'll also eta expand arguments such as in T23083: ```hs g f h = f (h `seq` (h $)) ``` Unless `-fpedantic-bottoms` is set, we'll now transform to ```hs g f h = f (\eta -> h eta) ``` in CorePrep. See the new `Note [Eta expansion of arguments in CorePrep]` for the details. We only do this optimisation with -O2 because we saw 2-3% ghc/alloc regressions in T4801 and T5321FD. Fixes #23083. - - - - - bf885d7a by Matthew Craven at 2023-08-09T16:25:07-04:00 Bump bytestring submodule to 0.11.5, again Fixes #23789. The bytestring commit used here is unreleased; a release can be made when necessary. - - - - - 7acbf0fd by Sven Tennie at 2023-08-10T19:17:11-04:00 Serialize CmmRetInfo in .rodata The handling of case was missing. - - - - - 0c3136f2 by Sven Tennie at 2023-08-10T19:17:11-04:00 Reference StgRetFun payload by its struct field address This is easier to grasp than relative pointer offsets. - - - - - f68ff313 by Sven Tennie at 2023-08-10T19:17:11-04:00 Better variable name: u -> frame The 'u' was likely introduced by copy'n'paste. - - - - - 0131bb7f by Sven Tennie at 2023-08-10T19:17:11-04:00 Make checkSTACK() public Such that it can also be used in tests. - - - - - 7b6e1e53 by Sven Tennie at 2023-08-10T19:17:11-04:00 Publish stack related fields in DerivedConstants.h These will be used in ghc-heap to decode these parts of the stack. - - - - - 907ed054 by Sven Tennie at 2023-08-10T19:17:11-04:00 ghc-heap: Decode StgStack and its stack frames Previously, ghc-heap could only decode heap closures. The approach is explained in detail in note [Decoding the stack]. - - - - - 6beb6ac2 by Sven Tennie at 2023-08-10T19:17:11-04:00 Remove RetFunType from RetFun stack frame representation It's a technical detail. The single usage is replaced by a predicate. - - - - - 006bb4f3 by Sven Tennie at 2023-08-10T19:17:11-04:00 Better parameter name The call-site uses the term "offset", too. - - - - - d4c2c1af by Sven Tennie at 2023-08-10T19:17:11-04:00 Make closure boxing pure There seems to be no need to do something complicated. However, the strictness of the closure pointer matters, otherwise a thunk gets decoded. - - - - - 8d8426c9 by Sven Tennie at 2023-08-10T19:17:11-04:00 Document entertainGC in test It wasn't obvious why it's there and what its role is. Also, increase the "entertainment level" a bit. I checked in STG and Cmm dumps that this really generates closures (and is not e.g. constant folded away.) - - - - - cc52c358 by Finley McIlwaine at 2023-08-10T19:17:47-04:00 Add -dipe-stats flag This is useful for seeing which info tables have information. - - - - - 261c4acb by Finley McIlwaine at 2023-08-10T19:17:47-04:00 Add -finfo-table-map-with-fallback -finfo-table-map-with-stack The -fno-info-table-map-with-stack flag omits STACK info tables from the info table map, and the -fno-info-table-map-with-fallback flag omits info tables with defaulted source locations from the map. In a test on the Agda codebase the build results were about 7% smaller when both of those types of tables were omitted. Adds a test that verifies that passing each combination of these flags results in the correct output for -dipe-stats, which is disabled for the js backend since profiling is not implemented. This commit also refactors a lot of the logic around extracting info tables from the Cmm results and building the info table map. This commit also fixes some issues in the users guide rst source to fix warnings that were noticed while debugging the documentation for these flags. Fixes #23702 - - - - - d7047e0d by Jaro Reinders at 2023-08-14T04:41:42-04:00 Add changelog entry for specialised Enum Int64/Word64 instances - - - - - 52f5e8fb by cydparser at 2023-08-14T04:42:20-04:00 Fix -ddump-to-file and -ddump-timings interaction (#20316) - - - - - 1274c5d6 by cydparser at 2023-08-14T04:42:20-04:00 Update release notes (#20316) - - - - - 8e699b23 by Matthew Pickering at 2023-08-14T10:44:47-04:00 base: Add changelog entry for CLC #188 This proposal modified the implementations of copyBytes, moveBytes and fillBytes (as detailed in the proposal) https://github.com/haskell/core-libraries-committee/issues/188 - - - - - 026f040a by Matthew Pickering at 2023-08-14T10:45:23-04:00 packaging: Build manpage in separate directory to other documentation We were installing two copies of the manpage: * One useless one in the `share/doc` folder, because we copy the doc/ folder into share/ * The one we deliberately installed into `share/man` etc The solution is to build the manpage into the `manpage` directory when building the bindist, and then just install it separately. Fixes #23707 - - - - - 524c60c8 by Bartłomiej Cieślar at 2023-08-14T13:46:33-04:00 Report deprecated fields bound by record wildcards when used This commit ensures that we emit the appropriate warnings when a deprecated record field bound by a record wildcard is used. For example: module A where data Foo = Foo {x :: Int, y :: Bool, z :: Char} {-# DEPRECATED x "Don't use x" #-} {-# WARNING y "Don't use y" #-} module B where import A foo (Foo {..}) = x This will cause us to emit a "Don't use x" warning, with location the location of the record wildcard. Note that we don't warn about `y`, because it is unused in the RHS of `foo`. Fixes #23382 - - - - - d6130065 by Matthew Pickering at 2023-08-14T13:47:11-04:00 Add zstd suffix to jobs which rely on zstd This was causing some confusion as the job was named simply "x86_64-linux-deb10-validate", which implies a standard configuration rather than any dependency on libzstd. - - - - - e24e44fc by Matthew Pickering at 2023-08-14T13:47:11-04:00 ci: Always run project-version job This is needed for the downstream test-primops pipeline to workout what the version of a bindist produced by a pipeline is. - - - - - f17b9d62 by Matthew Pickering at 2023-08-14T13:47:11-04:00 gen_ci: Rework how jobs-metadata.json is generated * We now represent a job group a triple of Maybes, which makes it easier to work out when jobs are enabled/disabled on certain pipelines. ``` data JobGroup a = StandardTriple { v :: Maybe (NamedJob a) , n :: Maybe (NamedJob a) , r :: Maybe (NamedJob a) } ``` * `jobs-metadata.json` generation is reworked using the following algorithm. - For each pipeline type, find all the platforms we are doing builds for. - Select one build per platform - Zip together the results This way we can choose different pipelines for validate/nightly/release which makes the metadata also useful for validate pipelines. This feature is used by the test-primops downstream CI in order to select the right bindist for testing validate pipelines. This makes it easier to inspect which jobs are going to be enabled on a particular pipeline. - - - - - f9a5563d by Matthew Pickering at 2023-08-14T13:47:11-04:00 gen_ci: Rules rework In particular we now distinguish between whether we are dealing with a Nightly/Release pipeline (which labels don't matter for) and a validate pipeline where labels do matter. The overall goal here is to allow a disjunction of labels for validate pipelines, for example, > Run a job if we have the full-ci label or test-primops label Therefore the "ValidateOnly" rules are treated as a set of disjunctions rather than conjunctions like before. What this means in particular is that if we want to ONLY run a job if a label is set, for example, "FreeBSD" label then we have to override the whole label set. Fixes #23772 - - - - - d54b0c1d by Matthew Pickering at 2023-08-14T13:47:11-04:00 ci: set -e for lint-ci-config scripts - - - - - 994a9b35 by Matthew Pickering at 2023-08-14T13:47:11-04:00 ci: Fix job metadata generation - - - - - e194ed2b by Ben Gamari at 2023-08-15T00:58:09-04:00 users-guide: Note that GHC2021 doesn't include ExplicitNamespaces As noted in #23801. - - - - - d814bda9 by Ben Gamari at 2023-08-15T05:43:53-04:00 users-guide: Support both distutils and packaging As noted in #23818, some old distributions (e.g. Debian 9) only include `distutils` while newer distributions only include `packaging`. Fixes #23818. - - - - - 1726db3f by Ben Gamari at 2023-08-15T05:43:53-04:00 users-guide: Ensure extlinks is compatible with Sphinx <4 The semantics of the `extlinks` attribute annoyingly changed in Sphinx 4. Reflect this in our configuration. See #22690. Fixes #23807. - - - - - 173338cf by Matthew Pickering at 2023-08-15T22:00:24-04:00 ci: Run full-ci on master and release branches Fixes #23737 - - - - - bdab6898 by Andrew Lelechenko at 2023-08-15T22:01:03-04:00 Add @since pragmas for Data.Ord.clamp and GHC.Float.clamp - - - - - 662d351b by Matthew Pickering at 2023-08-16T09:35:04-04:00 ghc-toolchain: Match CPP args with configure script At the moment we need ghc-toolchain to precisely match the output as provided by the normal configure script. The normal configure script (FP_HSCPP_CMD_WITH_ARGS) branches on whether we are using clang or gcc so we match that logic exactly in ghc-toolchain. The old implementation (which checks if certain flags are supported) is better but for now we have to match to catch any potential errors in the configuration. Ticket: #23720 - - - - - 09c6759e by Matthew Pickering at 2023-08-16T09:35:04-04:00 configure: Fix `-Wl,--no-as-needed` check The check was failing because the args supplied by $$1 were quoted which failed because then the C compiler thought they were an input file. Fixes #23720 - - - - - 2129678b by Matthew Pickering at 2023-08-16T09:35:04-04:00 configure: Add flag which turns ghc-toolchain check into error We want to catch these errors in CI, but first we need to a flag which turns this check into an error. - - - - - 6e2aa8e0 by Matthew Pickering at 2023-08-16T09:35:04-04:00 ci: Enable --enable-strict-ghc-toolchain-check for all CI jobs This will cause any CI job to fail if we have a mismatch between what ghc-toolchain reports and what ./configure natively reports. Fixing these kinds of issues is highest priority for 9.10 release. - - - - - 12d39e24 by Rodrigo Mesquita at 2023-08-16T09:35:04-04:00 Pass user-specified options to ghc-toolchain The current user interface to configuring target toolchains is `./configure`. In !9263 we added a new tool to configure target toolchains called `ghc-toolchain`, but the blessed way of creating these toolchains is still through configure. However, we were not passing the user-specified options given with the `./configure` invocation to the ghc-toolchain tool. This commit remedies that by storing the user options and environment variables in USER_* variables, which then get passed to GHC-toolchain. The exception to the rule is the windows bundled toolchain, which overrides the USER_* variables with whatever flags the windows bundled toolchain requires to work. We consider the bundled toolchain to be effectively the user specifying options, since the actual user delegated that configuration work. Closes #23678 - - - - - f7b3c3a0 by Rodrigo Mesquita at 2023-08-16T09:35:04-04:00 ghc-toolchain: Parse javascript and ghcjs as a Arch and OS - - - - - 8a0ae4ee by Rodrigo Mesquita at 2023-08-16T09:35:04-04:00 ghc-toolchain: Fix ranlib option - - - - - 31e9ec96 by Rodrigo Mesquita at 2023-08-16T09:35:04-04:00 Check Link Works with -Werror - - - - - bc1998b3 by Matthew Pickering at 2023-08-16T09:35:04-04:00 Only check for no_compact_unwind support on darwin While writing ghc-toolchain we noticed that the FP_PROG_LD_NO_COMPACT_UNWIND check is subtly wrong. Specifically, we pass -Wl,-no_compact_unwind to cc. However, ld.gold interprets this as -n o_compact_unwind, which is a valid argument. Fixes #23676 - - - - - 0283f36e by Matthew Pickering at 2023-08-16T09:35:04-04:00 Add some javascript special cases to ghc-toolchain On javascript there isn't a choice of toolchain but some of the configure checks were not accurately providing the correct answer. 1. The linker was reported as gnu LD because the --version output mentioned gnu LD. 2. The --target flag makes no sense on javascript but it was just ignored by the linker, so we add a special case to stop ghc-toolchain thinking that emcc supports --target when used as a linker. - - - - - a48ec5f8 by Matthew Pickering at 2023-08-16T09:35:04-04:00 check for emcc in gnu_LD check - - - - - 50df2e69 by Matthew Pickering at 2023-08-16T09:35:04-04:00 Add ldOverrideWhitelist to only default to ldOverride on windows/linux On some platforms - ie darwin, javascript etc we really do not want to allow the user to use any linker other than the default one as this leads to all kinds of bugs. Therefore it is a bit more prudant to add a whitelist which specifies on which platforms it might be possible to use a different linker. - - - - - a669a39c by Matthew Pickering at 2023-08-16T09:35:04-04:00 Fix plaform glob in FPTOOLS_SET_C_LD_FLAGS A normal triple may look like x86_64-unknown-linux but when cross-compiling you get $target set to a quad such as.. aarch64-unknown-linux-gnu Which should also match this check. - - - - - c52b6769 by Matthew Pickering at 2023-08-16T09:35:04-04:00 ghc-toolchain: Pass ld-override onto ghc-toolchain - - - - - 039b484f by Matthew Pickering at 2023-08-16T09:35:04-04:00 ld override: Make whitelist override user given option - - - - - d2b63cbc by Matthew Pickering at 2023-08-16T09:35:05-04:00 ghc-toolchain: Add format mode to normalise differences before diffing. The "format" mode takes an "--input" and "--ouput" target file and formats it. This is intended to be useful on windows where the configure/ghc-toolchain target files can't be diffed very easily because the path separators are different. - - - - - f2b39e4a by Matthew Pickering at 2023-08-16T09:35:05-04:00 ghc-toolchain: Bump ci-images commit to get new ghc-wasm-meta We needed to remove -Wno-unused-command-line-argument from the arguments passed in order for the configure check to report correctly. See https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10976#note_516335 - - - - - 92103830 by Matthew Pickering at 2023-08-16T09:35:05-04:00 configure: MergeObjsCmd - distinguish between empty string and unset variable If `MergeObjsCmd` is explicitly set to the empty string then we should assume that MergeObjs is just not supported. This is especially important for windows where we set MergeObjsCmd to "" in m4/fp_setup_windows_toolchain.m4. - - - - - 3500bb2c by Matthew Pickering at 2023-08-16T09:35:05-04:00 configure: Add proper check to see if object merging works - - - - - 08c9a014 by Matthew Pickering at 2023-08-16T09:35:05-04:00 ghc-toolchain: If MergeObjsCmd is not set, replace setting with Nothing If the user explicitly chooses to not set a MergeObjsCmd then it is correct to use Nothing for tgtMergeObjs field in the Target file. - - - - - c9071d94 by Matthew Pickering at 2023-08-16T09:35:05-04:00 HsCppArgs: Augment the HsCppOptions This is important when we pass -I when setting up the windows toolchain. - - - - - 294a6d80 by Matthew Pickering at 2023-08-16T09:35:05-04:00 Set USER_CPP_ARGS when setting up windows toolchain - - - - - bde4b5d4 by Rodrigo Mesquita at 2023-08-16T09:35:05-04:00 Improve handling of Cc as a fallback - - - - - f4c1c3a3 by Rodrigo Mesquita at 2023-08-16T09:35:05-04:00 ghc-toolchain: Configure Cpp and HsCpp correctly when user specifies flags In ghc-toolchain, we were only /not/ configuring required flags when the user specified any flags at all for the of the HsCpp and Cpp tools. Otherwise, the linker takes into consideration the user specified flags to determine whether to search for a better linker implementation, but already configured the remaining GHC and platform-specific flags regardless of the user options. Other Tools consider the user options as a baseline for further configuration (see `findProgram`), so #23689 is not applicable. Closes #23689 - - - - - bfe4ffac by Matthew Pickering at 2023-08-16T09:35:05-04:00 CPP_ARGS: Put new options after user specified options This matches up with the behaviour of ghc-toolchain, so that the output of both matches. - - - - - a6828173 by Gergő Érdi at 2023-08-16T09:35:41-04:00 If a defaulting plugin made progress, re-zonk wanteds before built-in defaulting Fixes #23821. - - - - - e2b38115 by Sylvain Henry at 2023-08-17T07:54:06-04:00 JS: implement openat(AT_FDCWD...) (#23697) Use `openSync` to implement `openat(AT_FDCWD...)`. - - - - - a975c663 by sheaf at 2023-08-17T07:54:47-04:00 Use unsatisfiable for missing methods w/ defaults When a class instance has an Unsatisfiable constraint in its context and the user has not explicitly provided an implementation of a method, we now always provide a RHS of the form `unsatisfiable @msg`, even if the method has a default definition available. This ensures that, when deferring type errors, users get the appropriate error message instead of a possible runtime loop, if class default methods were defined recursively. Fixes #23816 - - - - - 45ca51e5 by Ben Gamari at 2023-08-17T15:16:41-04:00 ghc-internal: Initial commit of the skeleton - - - - - 88bbf8c5 by Ben Gamari at 2023-08-17T15:16:41-04:00 ghc-experimental: Initial commit - - - - - 664468c0 by Ben Gamari at 2023-08-17T15:17:17-04:00 testsuite/cloneStackLib: Fix incorrect format specifiers - - - - - eaa835bb by Ben Gamari at 2023-08-17T15:17:17-04:00 rts/ipe: Fix const-correctness of IpeBufferListNode Both info tables and the string table should be `const` - - - - - 78f6f6fd by Ben Gamari at 2023-08-17T15:17:17-04:00 nonmoving: Drop dead debugging utilities These are largely superceded by support in the ghc-utils GDB extension. - - - - - 3f6e8f42 by Ben Gamari at 2023-08-17T15:17:17-04:00 nonmoving: Refactor management of mark thread Here we refactor that treatment of the worker thread used by the nonmoving GC for concurrent marking, avoiding creating a new thread with every major GC cycle. As well, the new scheme is considerably easier to reason about, consolidating all state in one place, accessed via a small set of accessors with clear semantics. - - - - - 88c32b7d by Ben Gamari at 2023-08-17T15:17:17-04:00 testsuite: Skip T23221 in nonmoving GC ways This test is very dependent upon GC behavior. - - - - - 381cfaed by Ben Gamari at 2023-08-17T15:17:17-04:00 ghc-heap: Don't expose stack dirty and marking fields These are GC metadata and are not relevant to the end-user. Moreover, they are unstable which makes ghc-heap harder to test than necessary. - - - - - 16828ca5 by Luite Stegeman at 2023-08-21T18:42:53-04:00 bump process submodule to include macOS fix and JS support - - - - - b4d5f6ed by Matthew Pickering at 2023-08-21T18:43:29-04:00 ci: Add support for triggering test-primops pipelines This commit adds 4 ways to trigger testing with test-primops. 1. Applying the ~test-primops label to a validate pipeline. 2. A manually triggered job on a validate pipeline 3. A nightly pipeline job 4. A release pipeline job Fixes #23695 - - - - - 32c50daa by Matthew Pickering at 2023-08-21T18:43:29-04:00 Add test-primops label support The test-primops CI job requires some additional builds in the validation pipeline, so we make sure to enable these jobs when test-primops label is set. - - - - - 73ca8340 by Matthew Pickering at 2023-08-21T18:43:29-04:00 Revert "Aarch ncg: Optimize immediate use for address calculations" This reverts commit 8f3b3b78a8cce3bd463ed175ee933c2aabffc631. See #23793 - - - - - 5546ad9e by Matthew Pickering at 2023-08-21T18:43:29-04:00 Revert "AArch NCG: Pure refactor" This reverts commit 00fb6e6b06598752414a0b9a92840fb6ca61338d. See #23793 - - - - - 02dfcdc2 by Matthew Pickering at 2023-08-21T18:43:29-04:00 Revert "Aarch64 NCG: Use encoded immediates for literals." This reverts commit 40425c5021a9d8eb5e1c1046e2d5fa0a2918f96c. See #23793 ------------------------- Metric Increase: T4801 T5321FD T5321Fun ------------------------- - - - - - 7be4a272 by Matthew Pickering at 2023-08-22T08:55:20+01:00 ci: Remove manually triggered test-ci job This doesn't work on slimmed down pipelines as the needed jobs don't exist. If you want to run test-primops then apply the label. - - - - - 76a4d11b by Jaro Reinders at 2023-08-22T08:08:13-04:00 Remove Ptr example from roles docs - - - - - 069729d3 by Bryan Richter at 2023-08-22T08:08:49-04:00 Guard against duplicate pipelines in forks - - - - - f861423b by Rune K. Svendsen at 2023-08-22T08:09:35-04:00 dump-decls: fix "Ambiguous module name"-error Fixes errors of the following kind, which happen when dump-decls is run on a package that contains a module name that clashes with that of another package. ``` dump-decls: <no location info>: error: Ambiguous module name `System.Console.ANSI.Types': it was found in multiple packages: ansi-terminal-0.11.4 ansi-terminal-types-0.11.5 ``` - - - - - edd8bc43 by Krzysztof Gogolewski at 2023-08-22T12:31:20-04:00 Fix MultiWayIf linearity checking (#23814) Co-authored-by: Thomas BAGREL <thomas.bagrel at tweag.io> - - - - - 4ba088d1 by konsumlamm at 2023-08-22T12:32:02-04:00 Update `Control.Concurrent.*` documentation - - - - - 015886ec by ARATA Mizuki at 2023-08-22T15:13:13-04:00 Support 128-bit SIMD on AArch64 via LLVM backend - - - - - 52a6d868 by Krzysztof Gogolewski at 2023-08-22T15:13:51-04:00 Testsuite cleanup - Remove misleading help text in perf_notes, ways are not metrics - Remove no_print_summary - this was used for Phabricator - In linters tests, run 'git ls-files' just once. Previously, it was called on each has_ls_files() - Add ghc-prim.cabal to gitignore, noticed in #23726 - Remove ghc-prim.cabal, it was accidentally committed in 524c60c8cd - - - - - ab40aa52 by Alan Zimmerman at 2023-08-22T15:14:28-04:00 EPA: Use Introduce [DeclTag] in AnnSortKey The AnnSortKey is used to keep track of the order of declarations for printing when the container has split them apart. This applies to HsValBinds and ClassDecl, ClsInstDecl. When making modifications to the list of declarations, the new order must be captured for when it must be printed. For each list of declarations (binds and sigs for a HsValBind) we can just store the list in order. To recreate the list when printing, we must merge them, and this is what the AnnSortKey records. It used to be indexed by SrcSpan, we now simply index by a marker as to which list to take the next item from. - - - - - e7db36c1 by sheaf at 2023-08-23T08:41:28-04:00 Don't attempt pattern synonym error recovery This commit gets rid of the pattern synonym error recovery mechanism (recoverPSB). The rationale is that the fake pattern synonym binding that the recovery mechanism introduced could lead to undesirable knock-on errors, and it isn't really feasible to conjure up a satisfactory binding as pattern synonyms can be used both in expressions and patterns. See Note [Pattern synonym error recovery] in GHC.Tc.TyCl.PatSyn. It isn't such a big deal to eagerly fail compilation on a pattern synonym that doesn't typecheck anyway. Fixes #23467 - - - - - 6ccd9d65 by Ben Gamari at 2023-08-23T08:42:05-04:00 base: Don't use Data.ByteString.Internals.memcpy This function is now deprecated from `bytestring`. Use `Foreign.Marshal.Utils.copyBytes` instead. Fixes #23880. - - - - - 0bfa0031 by Matthew Pickering at 2023-08-23T13:43:48-04:00 hadrian: Uniformly pass buildOptions to all builders in runBuilder In Builder.hs, runBuilderWith mostly ignores the buildOptions in BuildInfo. This leads to hard to diagnose bugs as any build options you pass with runBuilderWithCmdOptions are ignored for many builders. Solution: Uniformly pass buildOptions to the invocation of cmd. Fixes #23845 - - - - - 9cac8f11 by Matthew Pickering at 2023-08-23T13:43:48-04:00 Abstract windows toolchain setup This commit splits up the windows toolchain setup logic into two functions. * FP_INSTALL_WINDOWS_TOOLCHAIN - deals with downloading the toolchain if it isn't already downloaded * FP_SETUP_WINDOWS_TOOLCHAIN - sets the environment variables to point to the correct place FP_SETUP_WINDOWS_TOOLCHAIN is abstracted from the location of the mingw toolchain and also the eventual location where we will install the toolchain in the installed bindist. This is the first step towards #23608 - - - - - 6c043187 by Matthew Pickering at 2023-08-23T13:43:48-04:00 Generate build.mk for bindists The config.mk.in script was relying on some variables which were supposed to be set by build.mk but therefore never were when used to install a bindist. Specifically * BUILD_PROF_LIBS to determine whether we had profiled libraries or not * DYNAMIC_GHC_PROGRAMS to determine whether we had shared libraries or not Not only were these never set but also not really accurate because you could have shared libaries but still statically linked ghc executable. In addition variables like GhcLibWays were just never used, so those have been deleted from the script. Now instead we generate a build.mk file which just directly specifies which RtsWays we have supplied in the bindist and whether we have DYNAMIC_GHC_PROGRAMS. - - - - - fe23629b by Matthew Pickering at 2023-08-23T13:43:48-04:00 hadrian: Add reloc-binary-dist-* targets This adds a command line option to build a "relocatable" bindist. The bindist is created by first creating a normal bindist and then installing it using the `RelocatableBuild=YES` option. This creates a bindist without any wrapper scripts pointing to the libdir. The motivation for this feature is that we want to ship relocatable bindists on windows and this method is more uniform than the ad-hoc method which lead to bugs such as #23608 and #23476 The relocatable bindist can be built with the "reloc-binary-dist" target and supports the same suffixes as the normal "binary-dist" command to specify the compression style. - - - - - 41cbaf44 by Matthew Pickering at 2023-08-23T13:43:48-04:00 packaging: Fix installation scripts on windows/RelocatableBuild case This includes quite a lot of small fixes which fix the installation makefile to work on windows properly. This also required fixing the RelocatableBuild variable which seemed to have been broken for a long while. Sam helped me a lot writing this patch by providing a windows machine to test the changes. Without him it would have taken ages to tweak everything. Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 03474456 by Matthew Pickering at 2023-08-23T13:43:48-04:00 ci: Build relocatable bindist on windows We now build the relocatable bindist target on windows, which means we test and distribute the new method of creating a relocatable bindist. - - - - - d0b48113 by Matthew Pickering at 2023-08-23T13:43:48-04:00 hadrian: Add error when trying to build binary-dist target on windows The binary dist produced by `binary-dist` target doesn't work on windows because of the wrapper script the makefile installs. In order to not surprise any packagers we just give an error if someone tries to build the old binary-dist target rather than the reloc-binary-dist target. - - - - - 7cbf9361 by Matthew Pickering at 2023-08-23T13:43:48-04:00 hadrian: Remove query' logic to use tooldir - - - - - 03fad42e by Matthew Pickering at 2023-08-23T13:43:48-04:00 configure: Set WindresCmd directly and removed unused variables For some reason there was an indirection via the Windres variable before setting WindresCmd. That indirection led to #23855. I then also noticed that these other variables were just not used anywhere when trying to work out what the correct condition was for this bit of the configure script. - - - - - c82770f5 by sheaf at 2023-08-23T13:43:48-04:00 Apply shellcheck suggestion to SUBST_TOOLDIR - - - - - 896e35e5 by sheaf at 2023-08-23T13:44:34-04:00 Compute hints from TcSolverReportMsg This commit changes how hints are handled in conjunction with constraint solver report messages. Instead of storing `[GhcHint]` in the TcRnSolverReport error constructor, we compute the hints depending on the underlying TcSolverReportMsg. This disentangles the logic and makes it easier to add new hints for certain errors. - - - - - a05cdaf0 by Alexander Esgen at 2023-08-23T13:45:16-04:00 users-guide: remove note about fatal Haddock parse failures - - - - - 4908d798 by Ben Gamari at 2023-08-23T17:36:41-04:00 base: Introduce Data.Enum - - - - - f59707c7 by Ben Gamari at 2023-08-23T17:36:41-04:00 base: Add export list to GHC.Num.Integer - - - - - b1054053 by Ben Gamari at 2023-08-23T17:36:41-04:00 base: Add export list to GHC.Num - - - - - 6baa481d by Ben Gamari at 2023-08-23T17:36:41-04:00 base: Add export list to GHC.Num.Natural - - - - - 2ac15233 by Ben Gamari at 2023-08-23T17:36:41-04:00 base: Add export list to GHC.Float - - - - - f3c489de by Ben Gamari at 2023-08-23T17:36:41-04:00 base: Add export list to GHC.Real - - - - - 94f59eaa by Ben Gamari at 2023-08-23T17:36:41-04:00 base: Eliminate module reexport in GHC.Exception The metric increase here isn't strictly due to this commit but it's a rather small, incidental change. Metric Increase: T8095 T13386 Metric Decrease: T8095 T13386 T18304 - - - - - be1fc7df by Ben Gamari at 2023-08-23T17:36:41-04:00 base: Add disclaimers in internal modules To warn users that these modules are internal and their interfaces may change with little warning. As proposed in Core Libraries Committee #146 [CLC146]. [CLC146]: https://github.com/haskell/core-libraries-committee/issues/146 - - - - - 0326f3f4 by sheaf at 2023-08-23T17:37:29-04:00 Bump Cabal submodule We need to bump the Cabal submodule to include commit ec75950 which fixes an issue with a dodgy import Rep(..) which relied on GHC bug #23570 - - - - - 0504cd08 by Facundo Domínguez at 2023-08-23T17:38:11-04:00 Fix typos in the documentation of Data.OldList.permutations - - - - - 1420b8cb by Antoine Leblanc at 2023-08-24T16:18:17-04:00 Be more eager in TyCon boot validity checking This commit performs boot-file consistency checking for TyCons into checkValidTyCl. This ensures that we eagerly catch any mismatches, which prevents the compiler from seeing these inconsistencies and panicking as a result. See Note [TyCon boot consistency checking] in GHC.Tc.TyCl. Fixes #16127 - - - - - d99c816f by Finley McIlwaine at 2023-08-24T16:18:55-04:00 Refactor estimation of stack info table provenance This commit greatly refactors the way we compute estimated provenance for stack info tables. Previously, this process was done using an entirely separate traversal of the whole Cmm code stream to build the map from info tables to source locations. The separate traversal is now fused with the Cmm code generation pipeline in GHC.Driver.Main. This results in very significant code generation speed ups when -finfo-table-map is enabled. In testing, this patch reduces code generation times by almost 30% with -finfo-table-map and -O0, and 60% with -finfo-table-map and -O1 or -O2 . Fixes #23103 - - - - - d3e0124c by Finley McIlwaine at 2023-08-24T16:18:55-04:00 Add a test checking overhead of -finfo-table-map We want to make sure we don't end up with poor codegen performance resulting from -finfo-table-map again as in #23103. This test adds a performance test tracking total allocations while compiling ExactPrint with -finfo-table-map. - - - - - fcfc1777 by Ben Gamari at 2023-08-25T10:58:16-04:00 llvmGen: Add export list to GHC.Llvm.MetaData - - - - - 5880fff6 by Ben Gamari at 2023-08-25T10:58:16-04:00 llvmGen: Allow LlvmLits in MetaExprs This omission appears to be an oversight. - - - - - 86ce92a2 by Ben Gamari at 2023-08-25T10:58:16-04:00 compiler: Move platform feature predicates to GHC.Driver.DynFlags These are useful in `GHC.Driver.Config.*`. - - - - - a6a38742 by Ben Gamari at 2023-08-25T10:58:16-04:00 llvmGen: Introduce infrastructure for module flag metadata - - - - - e9af2cf3 by Ben Gamari at 2023-08-25T10:58:16-04:00 llvmGen: Don't pass stack alignment via command line As of https://reviews.llvm.org/D103048 LLVM no longer supports the `-stack-alignment=...` flag. Instead this information is passed via a module flag metadata node. This requires dropping support for LLVM 11 and 12. Fixes #23870 - - - - - a936f244 by Alan Zimmerman at 2023-08-25T10:58:56-04:00 EPA: Keep track of "in" token for WarningTxt category A warning can now be written with a category, e.g. {-# WARNInG in "x-c" e "d" #-} Keep track of the location of the 'in' keyword and string, as well as the original SourceText of the label, in case it uses character escapes. - - - - - 3df8a653 by Matthew Pickering at 2023-08-25T17:42:18-04:00 Remove redundant import in InfoTableProv The copyBytes function is provided by the import of Foreign. Fixes #23889 - - - - - d6f807ec by Ben Gamari at 2023-08-25T17:42:54-04:00 gitlab/issue-template: Mention report-a-bug - - - - - 50b9f75d by Artin Ghasivand at 2023-08-26T20:02:50+03:30 Added StandaloneKindSignature examples to replace CUSKs ones - - - - - 2f6309a4 by Vladislav Zavialov at 2023-08-27T03:47:37-04:00 Remove outdated CPP in compiler/* and template-haskell/* The boot compiler was bumped to 9.4 in cebb5819b43. There is no point supporting older GHC versions with CPP. - - - - - 5248fdf7 by Zubin Duggal at 2023-08-28T15:01:09+05:30 testsuite: Add regression test for #23861 Simon says this was fixed by commit 8d68685468d0b6e922332a3ee8c7541efbe46137 Author: sheaf <sam.derbyshire at gmail.com> Date: Fri Aug 4 15:28:45 2023 +0200 Remove zonk in tcVTA - - - - - b6903f4d by Zubin Duggal at 2023-08-28T12:33:58-04:00 testsuite: Add regression test for #23864 Simon says this was fixed by commit 59202c800f2c97c16906120ab2561f6e1556e4af Author: Sebastian Graf <sebastian.graf at kit.edu> Date: Fri Mar 31 17:35:22 2023 +0200 CorePrep: Eliminate EmptyCase and unsafeEqualityProof in CoreToStg instead We eliminate EmptyCase by way of `coreToStg (Case e _ _ []) = coreToStg e` now. The main reason is that it plays far better in conjunction with eta expansion (as we aim to do for arguments in CorePrep, #23083), because we can discard any arguments, `(case e of {}) eta == case e of {}`, whereas in `(e |> co) eta` it's impossible to discard the argument. - - - - - 9eecdf33 by sheaf at 2023-08-28T18:54:06+00:00 Remove ScopedTypeVariables => TypeAbstractions This commit implements [amendment 604](https://github.com/ghc-proposals/ghc-proposals/pull/604/) to [GHC proposal 448](https://github.com/ghc-proposals/ghc-proposals/pull/448) by removing the implication of language extensions ScopedTypeVariables => TypeAbstractions To limit breakage, we now allow type arguments in constructor patterns when both ScopedTypeVariables and TypeApplications are enabled, but we emit a warning notifying the user that this is deprecated behaviour that will go away starting in GHC 9.12. Fixes #23776 - - - - - fadd5b4d by sheaf at 2023-08-28T18:54:06+00:00 .stderr: ScopedTypeVariables =/> TypeAbstractions This commit accepts testsuite changes for the changes in the previous commit, which mean that TypeAbstractions is no longer implied by ScopedTypeVariables. - - - - - 4f5fb500 by Greg Steuck at 2023-08-29T07:55:13-04:00 Repair `codes` test on OpenBSD by explicitly requesting extended RE - - - - - 6bbde581 by Vasily Sterekhov at 2023-08-29T12:06:58-04:00 Add test for #23540 `T23540.hs` makes use of `explainEv` from `HieQueries.hs`, so `explainEv` has been moved to `TestUtils.hs`. - - - - - 257bb3bd by Vasily Sterekhov at 2023-08-29T12:06:58-04:00 Add test for #23120 - - - - - 4f192947 by Vasily Sterekhov at 2023-08-29T12:06:58-04:00 Make some evidence uses reachable by toHie Resolves #23540, #23120 This adds spans to certain expressions in the typechecker and renamer, and lets 'toHie' make use of those spans. Therefore the relevant evidence uses for the following syntax will now show up under the expected nodes in 'HieAst's: - Overloaded literals ('IsString', 'Num', 'Fractional') - Natural patterns and N+k patterns ('Eq', 'Ord', and instances from the overloaded literals being matched on) - Arithmetic sequences ('Enum') - Monadic bind statements ('Monad') - Monadic body statements ('Monad', 'Alternative') - ApplicativeDo ('Applicative', 'Functor') - Overloaded lists ('IsList') Also see Note [Source locations for implicit function calls] In the process of handling overloaded lists I added an extra 'SrcSpan' field to 'VAExpansion' - this allows us to more accurately reconstruct the locations from the renamer in 'rebuildHsApps'. This also happens to fix #23120. See the additions to Note [Looking through HsExpanded] - - - - - fe9fcf9d by Sylvain Henry at 2023-08-29T12:07:50-04:00 ghc-heap: rename C file (fix #23898) - - - - - b60d6576 by Krzysztof Gogolewski at 2023-08-29T12:08:29-04:00 Misc cleanup - Builtin.PrimOps: ReturnsAlg was used only for unboxed tuples. Rename to ReturnsTuple. - Builtin.Utils: use SDoc for a panic message. The comment about <<details unavailable>> was obsoleted by e8d356773b56. - TagCheck: fix wrong logic. It was zipping a list 'args' with its version 'args_cmm' after filtering. - Core.Type: remove an outdated 1999 comment about unlifted polymorphic types - hadrian: remove leftover debugging print - - - - - 3054fd6d by Krzysztof Gogolewski at 2023-08-29T12:09:08-04:00 Add a regression test for #23903 The bug has been fixed by commit bad2f8b8aa8424. - - - - - 21584b12 by Ben Gamari at 2023-08-29T19:52:02-04:00 README: Refer to ghc-hq repository for contributor and governance information - - - - - e542d590 by sheaf at 2023-08-29T19:52:40-04:00 Export setInertSet from GHC.Tc.Solver.Monad We used to export getTcSInerts and setTcSInerts from GHC.Tc.Solver.Monad. These got renamed to getInertSet/setInertSet in e1590ddc. That commit also removed the export of setInertSet, but that function is useful for the GHC API. - - - - - 694ec5b1 by sheaf at 2023-08-30T10:18:32-04:00 Don't bundle children for non-parent Avails We used to bundle all children of the parent Avail with things that aren't the parent, e.g. with class C a where type T a meth :: .. we would bundle the whole Avail (C, T, meth) with all of C, T and meth, instead of only with C. Avoiding this fixes #23570 - - - - - d926380d by Krzysztof Gogolewski at 2023-08-30T10:19:08-04:00 Fix typos - - - - - d07080d2 by Josh Meredith at 2023-08-30T19:42:32-04:00 JS: Implement missing C functions `rename`, `realpath`, and `getcwd` (#23806) - - - - - e2940272 by David Binder at 2023-08-30T19:43:08-04:00 Bump submodules of hpc and hpc-bin to version 0.7.0.0 hpc 0.7.0.0 dropped SafeHaskell safety guarantees in order to simplify compatibility with newer versions of the directory package which dropped all SafeHaskell guarantees. - - - - - 5d56d05c by David Binder at 2023-08-30T19:43:08-04:00 Bump hpc bound in ghc.cabal.in - - - - - 99fff496 by Dominik Schrempf at 2023-08-31T00:04:46-04:00 ghc classes documentation: rm redundant comment - - - - - fe021bab by Dominik Schrempf at 2023-08-31T00:04:46-04:00 prelude documentation: various nits - - - - - 48c84547 by Dominik Schrempf at 2023-08-31T00:04:46-04:00 integer documentation: minor corrections - - - - - 20cd12f4 by Dominik Schrempf at 2023-08-31T00:04:46-04:00 real documentation: nits - - - - - dd39bdc0 by sheaf at 2023-08-31T00:05:27-04:00 Add a test for #21765 This issue (of reporting a constraint as being redundant even though removing it causes typechecking to fail) was fixed in aed1974e. This commit simply adds a regression test. Fixes #21765 - - - - - f1ec3628 by Andrew Lelechenko at 2023-08-31T23:53:30-04:00 Export foldl' from Prelude and bump submodules See https://github.com/haskell/core-libraries-committee/issues/167 for discussion Metric Decrease: T8095 T13386 Metric Increase: T13386 T8095 T8095 ghc/alloc decreased on x86_64, but increased on aarch64. T13386 ghc/alloc decreased on x86_64-windows, but increased on other platforms. Neither has anything to do with `foldl'`, so I conclude that both are flaky. - - - - - 3181b97d by Gergő Érdi at 2023-08-31T23:54:06-04:00 Allow cross-tyvar defaulting proposals from plugins Fixes #23832. - - - - - 495b2241 by Matthew Pickering at 2023-09-01T13:02:07+02:00 Fix issue with duplicate reexported definitions (T23616) When a class method was reexported, it's default methods were also showing up in the generated html page. The simplest and most non-invasive fix is to not look for the default method if we are just exporting the class method.. because the backends are just showing default methods when the whole class is exported. In general it would be worthwhile to rewrite this bit of code I think as the logic and what gets included is split over `lookupDocs` and `availExportDecl` it would be clearer to combine the two. The result of lookupDocs is always just passed to availExportDecl so it seems simpler and more obvious to just write the function directly. - - - - - e4af506e by Sebastian Graf at 2023-09-01T14:29:12-04:00 Clarify Note [GlobalId/LocalId] after CorePrep (#23797) Fixes #23797. - - - - - ac29787c by Sylvain Henry at 2023-09-01T14:30:02-04:00 Fix warning with UNPACK on sum type (#23921) - - - - - 9765ac7b by Zubin Duggal at 2023-09-05T00:37:45-04:00 hadrian: track python dependencies in doc rules - - - - - 1578215f by sheaf at 2023-09-05T00:38:26-04:00 Bump Haddock to fix #23616 This commit updates the Haddock submodule to include the fix to #23616. Fixes #23616 - - - - - 5a2fe35a by David Binder at 2023-09-05T00:39:07-04:00 Fix example in GHC user guide in SafeHaskell section The example given in the SafeHaskell section uses an implementation of Monad which no longer works. This MR removes the non-canonical return instance and adds the necessary instances of Functor and Applicative. - - - - - 291d81ae by Matthew Pickering at 2023-09-05T14:03:10-04:00 driver: Check transitive closure of haskell package dependencies when deciding whether to relink We were previously just checking whether direct package dependencies had been modified. This caused issues when compiling without optimisations as we wouldn't relink the direct dependency if one of its dependenices changed. Fixes #23724 - - - - - 35da0775 by Krzysztof Gogolewski at 2023-09-05T14:03:47-04:00 Re-export GHC.Utils.Panic.Plain from GHC.Utils.Panic Fixes #23930 - - - - - 6551824d by Finley McIlwaine at 2023-09-05T13:06:57-07:00 Remove fake export of `FUN` from Prelude This prevents `data FUN` from being shown at the top of the Prelude docs. Fixes \#23920 on GHC. - - - - - 3930d793 by Jaro Reinders at 2023-09-06T18:42:55-04:00 Make STG rewriter produce updatable closures - - - - - 0104221a by Krzysztof Gogolewski at 2023-09-06T18:43:32-04:00 configure: update message to use hadrian (#22616) - - - - - b34f8586 by Alan Zimmerman at 2023-09-07T10:58:38-04:00 EPA: Incorrect locations for UserTyVar with '@' In T13343.hs, the location for the @ is not within the span of the surrounding UserTyVar. type Bad @v = (forall (v1 :: RuntimeRep) (a1 :: TYPE v). a1) :: TYPE v Widen it so it is captured. Closes #23887 - - - - - 8046f020 by Finley McIlwaine at 2023-09-07T10:59:15-04:00 Bump haddock submodule to fix #23920 Removes the fake export of `FUN` from Prelude. Fixes #23920. Bumps haddock submodule. - - - - - e0aa8c6e by Krzysztof Gogolewski at 2023-09-07T11:00:03-04:00 Fix wrong role in mkSelCo_maybe In the Lint failure in #23938, we start with a coercion Refl :: T a ~R T a, and call mkSelCo (SelTyCon 1 nominal) Refl. The function incorrectly returned Refl :: a ~R a. The returned role should be nominal, according to the SelCo rule: co : (T s1..sn) ~r0 (T t1..tn) r = tyConRole tc r0 i ---------------------------------- SelCo (SelTyCon i r) : si ~r ti In this test case, r is nominal while r0 is representational. - - - - - 1d92f2df by Gergő Érdi at 2023-09-08T04:04:30-04:00 If we have multiple defaulting plugins, then we should zonk in between them after any defaulting has taken place, to avoid a defaulting plugin seeing a metavariable that has already been filled. Fixes #23821. - - - - - eaee4d29 by Gergő Érdi at 2023-09-08T04:04:30-04:00 Improvements to the documentation of defaulting plugins Based on @simonpj's draft and comments in !11117 - - - - - ede3df27 by Alan Zimmerman at 2023-09-08T04:05:06-04:00 EPA: Incorrect span for LWarnDec GhcPs The code (from T23465.hs) {-# WARNInG in "x-c" e "d" #-} e = e gives an incorrect span for the LWarnDecl GhcPs Closes #23892 It also fixes the Test23465/Test23464 mixup - - - - - a0ccef7a by Krzysztof Gogolewski at 2023-09-08T04:05:42-04:00 Valid hole fits: don't suggest unsafeCoerce (#17940) - - - - - 9ab5a448 by Alan Zimmerman at 2023-09-08T18:26:53+01:00 Match changes in wip/az/T23885-unicode-funtycon - - - - - 88b942c4 by Oleg Grenrus at 2023-09-08T19:58:42-04:00 Add warning for badly staged types. Resolves #23829. The stage violation results in out-of-bound names in splices. Technically this is an error, but someone might rely on this!? Internal changes: - we now track stages for TyVars. - thLevel (RunSplice _) = 0, instead of panic, as reifyInstances does in fact rename its argument type, and it can contain variables. - - - - - 9861f787 by Ben Gamari at 2023-09-08T19:59:19-04:00 rts: Fix invalid symbol type I suspect this code is dead since we haven't observed this failing despite the obviously incorrect macro name. - - - - - 03ed6a9a by Ben Gamari at 2023-09-08T19:59:19-04:00 testsuite: Add simple test exercising C11 atomics in GHCi See #22012. - - - - - 1aa5733a by Ben Gamari at 2023-09-08T19:59:19-04:00 rts/RtsSymbols: Add AArch64 outline atomic operations Fixes #22012 by adding the symbols described in https://github.com/llvm/llvm-project/blob/main/llvm/docs/Atomics.rst#libcalls-atomic. Ultimately this would be better addressed by #22011, but this is a first step in the right direction and fixes the immediate symptom. Note that we dropped the `__arch64_cas16` operations as these provided by all platforms's compilers. Also, we don't link directly against the libgcc/compiler-rt definitions but rather provide our own wrappers to work around broken toolchains (e.g. https://bugs.gentoo.org/868018). Generated via https://gitlab.haskell.org/ghc/ghc/-/snippets/5733. - - - - - 8f7d3041 by Matthew Pickering at 2023-09-08T19:59:55-04:00 ci: Build debian12 and fedora38 bindists This adds builds for the latest releases for fedora and debian We build these bindists in nightly and release pipelines. - - - - - a1f0d55c by Felix Leitz at 2023-09-08T20:00:37-04:00 Fix documentation around extension implication for MultiParamTypeClasses/ConstrainedClassMethods. - - - - - 98166389 by Teo Camarasu at 2023-09-12T04:30:54-04:00 docs: move -xn flag beside --nonmoving-gc It makes sense to have these beside each other as they are aliases. - - - - - f367835c by Teo Camarasu at 2023-09-12T04:30:55-04:00 nonmoving: introduce a family of dense allocators Supplement the existing power 2 sized nonmoving allocators with a family of dense allocators up to a configurable threshold. This should reduce waste from rounding up block sizes while keeping the amount of allocator sizes manageable. This patch: - Adds a new configuration option `--nonmoving-dense-allocator-count` to control the amount of these new dense allocators. - Adds some constants to `NonmovingAllocator` in order to keep marking fast with the new allocators. Resolves #23340 - - - - - 2b07bf2e by Teo Camarasu at 2023-09-12T04:30:55-04:00 Add changelog entry for #23340 - - - - - f96fe681 by sheaf at 2023-09-12T04:31:44-04:00 Use printGhciException in run{Stmt, Decls} When evaluating statements in GHCi, we need to use printGhciException instead of the printException function that GHC provides in order to get the appropriate error messages that are customised for ghci use. - - - - - d09b932b by psilospore at 2023-09-12T04:31:44-04:00 T23686: Suggest how to enable Language Extension when in ghci Fixes #23686 - - - - - da30f0be by Matthew Craven at 2023-09-12T04:32:24-04:00 Unarise: Split Rubbish literals in function args Fixes #23914. Also adds a check to STG lint that these args are properly unary or nullary after unarisation - - - - - 261b6747 by Matthew Pickering at 2023-09-12T04:33:04-04:00 darwin: Bump MAXOSX_DEPLOYMENT_TARGET to 10.13 This bumps the minumum supported version to 10.13 (High Sierra) which is 6 years old at this point. Fixes #22938 - - - - - f418f919 by Mario Blažević at 2023-09-12T04:33:45-04:00 Fix TH pretty-printing of nested GADTs, issue #23937 This commit fixes `Language.Haskell.TH.Ppr.pprint` so that it correctly pretty-prints GADTs declarations contained within data family instances. Fixes #23937 - - - - - d7a64753 by John Ericson at 2023-09-12T04:34:20-04:00 Put hadrian non-bootstrap plans through `jq` This makes it possible to review changes with conventional diffing tools. This is picking up where ad8cfed4195b1bbfc15b841f010e75e71f63157d left off. - - - - - ff0a709a by Sylvain Henry at 2023-09-12T08:46:28-04:00 JS: fix some tests - Tests using Setup programs need to pass --with-hc-pkg - Several other fixes See https://gitlab.haskell.org/ghc/ghc/-/wikis/javascript-backend/bug_triage for the current status - - - - - fc86f0e7 by Krzysztof Gogolewski at 2023-09-12T08:47:04-04:00 Fix in-scope set assertion failure (#23918) Patch by Simon - - - - - 21a906c2 by Matthew Pickering at 2023-09-12T17:21:04+02:00 Add -Winconsistent-flags warning The warning fires when inconsistent command line flags are passed. For example: * -dynamic-too and -dynamic * -dynamic-too on windows * -O and --interactive * etc This is on by default and allows users to control whether the warning is displayed and whether it should be an error or not. Fixes #22572 - - - - - dfc4f426 by Krzysztof Gogolewski at 2023-09-12T20:31:35-04:00 Avoid serializing BCOs with the internal interpreter Refs #23919 - - - - - 9217950b by Finley McIlwaine at 2023-09-13T08:06:03-04:00 Fix numa auto configure - - - - - 98e7c1cf by Simon Peyton Jones at 2023-09-13T08:06:40-04:00 Add -fno-cse to T15426 and T18964 This -fno-cse change is to avoid these performance tests depending on flukey CSE stuff. Each contains several independent tests, and we don't want them to interact. See #23925. By killing CSE we expect a 400% increase in T15426, and 100% in T18964. Metric Increase: T15426 T18964 - - - - - 236a134e by Simon Peyton Jones at 2023-09-13T08:06:40-04:00 Tiny refactor canEtaReduceToArity was only called internally, and always with two arguments equal to zero. This patch just specialises the function, and renames it to cantEtaReduceFun. No change in behaviour. - - - - - 56b403c9 by Ben Gamari at 2023-09-13T19:21:36-04:00 spec-constr: Lift argument limit for SPEC-marked functions When the user adds a SPEC argument to a function, they are informing us that they expect the function to be specialised. However, previously this instruction could be preempted by the specialised-argument limit (sc_max_args). Fix this. This fixes #14003. - - - - - 6840012e by Simon Peyton Jones at 2023-09-13T19:22:13-04:00 Fix eta reduction Issue #23922 showed that GHC was bogusly eta-reducing a join point. We should never eta-reduce (\x -> j x) to j, if j is a join point. It is extremly difficult to trigger this bug. It took me 45 mins of trying to make a small tests case, here immortalised as T23922a. - - - - - e5c00092 by Andreas Klebinger at 2023-09-14T08:57:43-04:00 Profiling: Properly escape characters when using `-pj`. There are some ways in which unusual characters like quotes or others can make it into cost centre names. So properly escape these. Fixes #23924 - - - - - ec490578 by Ellie Hermaszewska at 2023-09-14T08:58:24-04:00 Use clearer example variable names for bool eliminator - - - - - 5126a2fe by Sylvain Henry at 2023-09-15T11:18:02-04:00 Add missing int64/word64-to-double/float rules (#23907) CLC proposal: https://github.com/haskell/core-libraries-committee/issues/203 - - - - - 566ef411 by Mario Blažević at 2023-09-15T11:18:43-04:00 Fix and test TH pretty-printing of type operator role declarations This commit fixes and tests `Language.Haskell.TH.Ppr.pprint` so that it correctly pretty-prints `type role` declarations for operator names. Fixes #23954 - - - - - 8e05c54a by Simon Peyton Jones at 2023-09-16T01:42:33-04:00 Use correct FunTyFlag in adjustJoinPointType As the Lint error in #23952 showed, the function adjustJoinPointType was failing to adjust the FunTyFlag when adjusting the type. I don't think this caused the seg-fault reported in the ticket, but it is definitely. This patch fixes it. It is tricky to come up a small test case; Krzysztof came up with this one, but it only triggers a failure in GHC 9.6. - - - - - 778c84b6 by Pierre Le Marre at 2023-09-16T01:43:15-04:00 Update to Unicode 15.1.0 See: https://www.unicode.org/versions/Unicode15.1.0/ - - - - - f9d79a6c by Alan Zimmerman at 2023-09-18T00:00:14-04:00 EPA: track unicode version for unrestrictedFunTyCon Closes #23885 Updates haddock submodule - - - - - 9374f116 by Andrew Lelechenko at 2023-09-18T00:00:54-04:00 Bump parsec submodule to allow text-2.1 and bytestring-0.12 - - - - - 7ca0240e by Ben Gamari at 2023-09-18T15:16:48-04:00 base: Advertise linear time of readFloat As noted in #23538, `readFloat` has runtime that scales nonlinearly in the size of its input. Consequently, its use on untrusted input can be exploited as a denial-of-service vector. Point this out and suggest use of `read` instead. See #23538. - - - - - f3f58f13 by Simon Peyton Jones at 2023-09-18T15:17:24-04:00 Remove dead code GHC.CoreToStg.Prep.canFloat This function never fires, so we can delete it: #23965. - - - - - ccab5b15 by Ben Gamari at 2023-09-18T15:18:02-04:00 base/changelog: Move fix for #23907 to 9.8.1 section Since the fix was backported to 9.8.1 - - - - - 51b57d65 by Matthew Pickering at 2023-09-19T08:44:31-04:00 Add aarch64 alpine bindist This is dynamically linked and makes creating statically linked executables more straightforward. Fixes #23482 - - - - - 02c87213 by Matthew Pickering at 2023-09-19T08:44:31-04:00 Add aarch64-deb11 bindist This adds a debian 11 release job for aarch64. Fixes #22005 - - - - - 8b61dfd6 by Alexis King at 2023-09-19T08:45:13-04:00 Don’t store the async exception masking state in CATCH frames - - - - - 86d2971e by doyougnu at 2023-09-19T19:08:19-04:00 compiler,ghci: error codes link to HF error index closes: #23259 - adds -fprint-error-index-links={auto|always|never} flag - - - - - 5f826c18 by sheaf at 2023-09-19T19:09:03-04:00 Pass quantified tyvars in tcDefaultAssocDecl This commit passes the correct set of quantified type variables written by the user in associated type default declarations for validity checking. This ensures that validity checking of associated type defaults mirrors that of standalone type family instances. Fixes #23768 (see testcase T23734 in subsequent commit) - - - - - aba18424 by sheaf at 2023-09-19T19:09:03-04:00 Avoid panic in mkGADTVars This commit avoids panicking in mkGADTVars when we encounter a type variable as in #23784 that is bound by a user-written forall but not actually used. Fixes #23784 - - - - - a525a92a by sheaf at 2023-09-19T19:09:03-04:00 Adjust reporting of unused tyvars in data FamInsts This commit adjusts the validity checking of data family instances to improve the reporting of unused type variables. See Note [Out of scope tvs in data family instances] in GHC.Tc.Validity. The problem was that, in a situation such as data family D :: Type data instance forall (d :: Type). D = MkD the RHS passed to 'checkFamPatBinders' would be the TyCon app R:D d which mentions the type variable 'd' quantified in the user-written forall. Thus, when computing the set of unused type variables in the RHS of the data family instance, we would find that 'd' is used, and report a strange error message that would say that 'd' is not bound on the LHS. To fix this, we special-case the data-family instance case, manually extracting all the type variables that appear in the arguments of all the data constructores of the data family instance. Fixes #23778 - - - - - 28dd52ee by sheaf at 2023-09-19T19:09:03-04:00 Unused tyvars in FamInst: only report user tyvars This commit changes how we perform some validity checking for coercion axioms to mirror how we handle default declarations for associated type families. This allows us to keep track of whether type variables in type and data family instances were user-written or not, in order to only report the user-written ones in "unused type variable" error messages. Consider for example: {-# LANGUAGE PolyKinds #-} type family F type instance forall a. F = () In this case, we get two quantified type variables, (k :: Type) and (a :: k); the second being user-written, but the first is introduced by the typechecker. We should only report 'a' as being unused, as the user has no idea what 'k' is. Fixes #23734 - - - - - 1eed645c by sheaf at 2023-09-19T19:09:03-04:00 Validity: refactor treatment of data families This commit refactors the reporting of unused type variables in type and data family instances to be more principled. This avoids ad-hoc logic in the treatment of data family instances. - - - - - 35bc506b by John Ericson at 2023-09-19T19:09:40-04:00 Remove `ghc-cabal` It is dead code since the Make build system was removed. I tried to go over every match of `git grep -i ghc-cabal` to find other stray bits. Some of those might be workarounds that can be further removed. - - - - - 665ca116 by John Paul Adrian Glaubitz at 2023-09-19T19:10:39-04:00 Re-add unregisterised build support for sparc and sparc64 Closes #23959 - - - - - 142f8740 by Matthew Pickering at 2023-09-19T19:11:16-04:00 Bump ci-images to use updated version of Alex Fixes #23977 - - - - - fa977034 by John Ericson at 2023-09-21T12:55:25-04:00 Use Cabal 3.10 for Hadrian We need the newer version for `CABAL_FLAG_*` env vars for #17191. - - - - - a5d22cab by John Ericson at 2023-09-21T12:55:25-04:00 hadrian: `need` any `configure` script we will call When the script is changed, we should reconfigure. - - - - - db882b57 by John Ericson at 2023-09-21T12:55:25-04:00 hadrian: Make it easier to debug Cabal configure Right now, output is squashed. This make per-package configure scripts extremely hard to maintain, because we get vague "library is missing" errors when the actually probably is usually completely unrelated except for also involving the C/C++ toolchain. (I can always pass `-VVV` to Hadrian locally, but these errors are subtle and I often cannot reproduce them locally!) `--disable-option-checking` was added back in 75c6e0684dda585c37b4ac254cd7a13537a59a91 but seems to be a bit overkill; if other flags are passed that are not recognized behind the two from Cabal mentioned in the former comment, we *do* want to know about it. - - - - - 7ed65f5a by John Ericson at 2023-09-21T12:55:25-04:00 hadrian: Increase verbosity of certain cabal commands This is a hack to get around the cabal function we're calling *decreasing* the verbosity it passes to another function, which is the stuff we often actually care about. Sigh. Keeping this a separate commit so if this makes things too verbose it is easy to revert. - - - - - a4fde569 by John Ericson at 2023-09-21T12:55:25-04:00 rts: Move most external symbols logic to the configure script This is much more terse because we are programmatically handling the leading underscore. `findPtr` however is still handled in the Cabal file because we need a newer Cabal to pass flags to the configure script automatically. Co-Authored-By: Ben Gamari <ben at well-typed.com> - - - - - 56cc85fb by Andrew Lelechenko at 2023-09-21T12:56:21-04:00 Bump Cabal submodule to allow text-2.1 and bytestring-0.12 - - - - - 0cd6148c by Matthew Pickering at 2023-09-21T12:56:21-04:00 hadrian: Generate Distribution/Fields/Lexer.x before creating a source-dist - - - - - b10ba6a3 by Andrew Lelechenko at 2023-09-21T12:56:21-04:00 Bump hadrian's index-state to upgrade alex at least to 3.2.7.3 - - - - - 11ecc37b by Luite Stegeman at 2023-09-21T12:57:03-04:00 JS: correct file size and times Programs produced by the JavaScript backend were returning incorrect file sizes and modification times, causing cabal related tests to fail. This fixes the problem and adds an additional test that verifies basic file information operations. fixes #23980 - - - - - b35fd2cd by Ben Gamari at 2023-09-21T12:57:39-04:00 gitlab-ci: Drop libiserv from upload_ghc_libs libiserv has been merged into the ghci package. - - - - - 37ad04e8 by Ben Gamari at 2023-09-21T12:58:15-04:00 testsuite: Fix Windows line endings - - - - - 5795b365 by Ben Gamari at 2023-09-21T12:58:15-04:00 testsuite: Use makefile_test - - - - - 15118740 by Ben Gamari at 2023-09-21T12:58:55-04:00 system-cxx-std-lib: Add license and description - - - - - 0208f1d5 by Ben Gamari at 2023-09-21T12:59:33-04:00 gitlab/issue-templates: Rename bug.md -> default.md So that it is visible by default. - - - - - 23cc3f21 by Andrew Lelechenko at 2023-09-21T20:18:11+01:00 Bump submodule text to 2.1 - - - - - b8e4fe23 by Andrew Lelechenko at 2023-09-22T20:05:05-04:00 Bump submodule unix to 2.8.2.1 - - - - - 54b2016e by John Ericson at 2023-09-23T11:40:41-04:00 Move lib{numa,dw} defines to RTS configure Clean up the m4 to handle the auto case always and be more consistent. Also simplify the CPP --- we should always have both headers if we are using libnuma. "side effects" (AC_DEFINE, and AC_SUBST) are removed from the macros to better separate searching from actions taken based on search results. This might seem overkill now, but will make shuffling logic between configure scripts easier later. The macro comments are converted from `dnl` to `#` following the recomendation in https://www.gnu.org/software/autoconf/manual/autoconf-2.71/html_node/Macro-Definitions.html - - - - - d51b601b by John Ericson at 2023-09-23T11:40:50-04:00 Shuffle libzstd configuring between scripts Like the prior commit for libdw and libnuma, `AC_DEFINE` to RTS configure, `AC_SUBST` goes to the top-level configure script, and the documentation of the m4 macro is improved. - - - - - d1425af0 by John Ericson at 2023-09-23T11:41:03-04:00 Move `FP_ARM_OUTLINE_ATOMICS` to RTS configure It is just `AC_DEFINE` it belongs there instead. - - - - - 18de37e4 by John Ericson at 2023-09-23T11:41:03-04:00 Move mmap in the runtime linker check to the RTS configure `AC_DEFINE` should go there instead. - - - - - 74132c2b by Andrew Lelechenko at 2023-09-25T21:56:54-04:00 Elaborate comment on GHC_NO_UNICODE - - - - - de142aa2 by Ben Gamari at 2023-09-26T15:25:03-04:00 gitlab-ci: Mark T22012 as broken on CentOS 7 Due to #23979. - - - - - 6a896ce8 by Teo Camarasu at 2023-09-26T15:25:39-04:00 hadrian: better error for failing to find file's dependencies Resolves #24004 - - - - - d697a6c2 by Stefan Holdermans at 2023-09-26T20:58:37+00:00 Refactor uses of `partitionEithers . map` This patch changes occurences of the idiom `partitionEithers (map f xs)` by the simpler form `partitionWith f xs` where `partitionWith` is the utility function defined in `GHC.Utils.Misc`. Resolves: #23953 - - - - - 8a2968b7 by Stefan Holdermans at 2023-09-26T20:58:37+00:00 Refactor uses of `partitionEithers <$> mapM f xs` This patch changes occurences of the idiom `partitionEithers <$> mapM f xs` by the simpler form `partitionWithM f xs` where `partitionWithM` is a utility function newly added to `GHC.Utils.Misc`. - - - - - 6a27eb97 by Stefan Holdermans at 2023-09-26T20:58:37+00:00 Mark `GHC.Utils.Misc.partitionWithM` as inlineable This patch adds an `INLINEABLE` pragma for `partitionWithM` to ensure that the right-hand side of the definition of this function remains available for specialisation at call sites. - - - - - f1e5245a by David Binder at 2023-09-27T01:19:00-04:00 Add RTS option to supress tix file - - - - - 1f43124f by David Binder at 2023-09-27T01:19:00-04:00 Add expected output to testsuite in test interface-stability/base-exports - - - - - b9d2c354 by David Binder at 2023-09-27T01:19:00-04:00 Expose HpcFlags and getHpcFlags from GHC.RTS.Flags - - - - - 345675c6 by David Binder at 2023-09-27T01:19:00-04:00 Fix expected output of interface-stability test - - - - - 146e1c39 by David Binder at 2023-09-27T01:19:00-04:00 Implement getHpcFlags - - - - - 61ba8e20 by David Binder at 2023-09-27T01:19:00-04:00 Add section in user guide - - - - - ea05f890 by David Binder at 2023-09-27T01:19:01-04:00 Rename --emit-tix-file to --write-tix-file - - - - - cabce2ce by David Binder at 2023-09-27T01:19:01-04:00 Update the golden files for interface stability - - - - - 1dbdb9d0 by Krzysztof Gogolewski at 2023-09-27T01:19:37-04:00 Refactor: introduce stgArgRep The function 'stgArgType' returns the type in STG. But this violates the abstraction: in STG we're supposed to operate on PrimReps. This introduces stgArgRep ty = typePrimRep (stgArgType ty) stgArgRep1 ty = typePrimRep1 (stgArgType ty) stgArgRep_maybe ty = typePrimRep_maybe (stgArgType ty) stgArgType is still directly used for unboxed tuples (should be fixable), FFI and in ticky. - - - - - b02f8042 by Mario Blažević at 2023-09-27T17:33:28-04:00 Fix TH pretty-printer's parenthesization This PR Fixes `Language.Haskell.TH.Ppr.pprint` so it correctly emits parentheses where needed. Fixes #23962, #23968, #23971, and #23986 - - - - - 79104334 by Krzysztof Gogolewski at 2023-09-27T17:34:04-04:00 Add a testcase for #17564 The code in the ticket relied on the behaviour of Derived constraints. Derived constraints were removed in GHC 9.4 and now the code works as expected. - - - - - d7a80143 by sheaf at 2023-09-28T03:25:53-04:00 lint-codes: add new modes of operation This commit adds two new modes of operation to the lint-codes utility: list - list all statically used diagnostic codes outdated - list all outdated diagnostic codes The previous behaviour is now: test - test consistency and coverage of diagnostic codes - - - - - 477d223c by sheaf at 2023-09-28T03:25:53-04:00 lint codes: avoid using git-grep We manually traverse through the filesystem to find the diagnostic codes embedded in .stdout and .stderr files, to avoid any issues with old versions of grep. Fixes #23843 - - - - - a38ae69a by sheaf at 2023-09-28T03:25:53-04:00 lint-codes: add Hadrian targets This commit adds new Hadrian targets: codes, codes:used - list all used diagnostic codes codes:outdated - list outdated diagnostic codes This allows users to easily query GHC for used and outdated diagnostic codes, e.g. hadrian/build -j --flavour=<..> codes will list all used diagnostic codes in the command line by running the lint-codes utility in the "list codes" mode of operation. The diagnostic code consistency and coverage test is still run as usual, through the testsuite: hadrian/build test --only="codes" - - - - - 9cdd629b by Ben Gamari at 2023-09-28T03:26:29-04:00 hadrian: Install LICENSE files in bindists Fixes #23548. - - - - - b8ebf876 by Matthew Craven at 2023-09-28T03:27:05-04:00 Fix visibility when eta-reducing a type lambda Fixes #24014. - - - - - d3874407 by Torsten Schmits at 2023-09-30T16:08:10-04:00 Fix several mistakes around free variables in iface breakpoints Fixes #23612 , #23607, #23998 and #23666. MR: !11026 The fingerprinting logic in `Iface.Recomp` failed lookups when processing decls containing breakpoints for two reasons: * IfaceBreakpoint created binders for free variables instead of expressions * When collecting free names for the dependency analysis for fingerprinting, breakpoint FVs were skipped - - - - - ef5342cd by Simon Peyton Jones at 2023-09-30T16:08:48-04:00 Refactor to combine HsLam and HsLamCase This MR is pure refactoring (#23916): * Combine `HsLam` and `HsLamCase` * Combine `HsCmdLam` and `HsCmdLamCase` This just arranges to treat uniformly \x -> e \case pi -> ei \cases pis -> ie In the exising code base the first is treated differently to the latter two. No change in behaviour. More specifics: * Combine `HsLam` and `HsLamCase` (constructors of `Language.Haskell.Syntax.Expr.HsExpr`) into one data construtor covering * Lambda * `\case` * `\cases` * The new `HsLam` has an argument of type `HsLamVariant` to distinguish the three cases. * Similarly, combine `HsCmdLam` and `HsCmdLamCase` (constructors of `Language.Haskell.Syntax.Expr.HsCmd` ) into one. * Similarly, combine `mkHsLamPV` and `mkHsLamCasePV` (methods of class `DisambECP`) into one. (Thank you Alan Zimmerman.) * Similarly, combine `LambdaExpr` and `LamCaseAlt` (constructors of `Language.Haskell.Syntax.Expr.HsMatchContext`) into one: `LamAlt` with a `HsLamVariant` argument. * Similarly, combine `KappaExpr` and `ArrowLamCaseAlt` (constructors of `Language.Haskell.Syntax.Expr.HsArrowMatchContext`) into one: `ArrowLamAlt` with a `HsLamVariant` argument. * Similarly, combine `PsErrLambdaInPat` and `PsErrLambdaCaseInPat` (constructors of `GHC.Parser.Errors.Ppr.PsError`) into one. * Similarly, combine `PsErrLambdaInPat` and `PsErrLambdaCaseInPat` (constructors of `GHC.Parser.Errors.Ppr.PsError`) into one. * In the same `PsError` data type, combine `PsErrLambdaCmdInFunAppCmd` and `PsErrLambdaCaseCmdInFunAppCmd` into one. * In the same `PsError` data tpye, combine `PsErrLambdaInFunAppExpr` and `PsErrLambdaCaseInFunAppExpr` into one. p* Smilarly combine `ExpectedFunTyLam` and `ExpectedFunTyLamCase` (constructors of `GHC.Tc.Types.Origin.ExpectedFunTyOrigin`) into one. Phew! - - - - - b048bea0 by Andreas Klebinger at 2023-09-30T16:09:24-04:00 Arm: Make ppr methods easier to use by not requiring NCGConfig - - - - - 2adc0508 by Andreas Klebinger at 2023-09-30T16:09:24-04:00 AArch64: Fix broken conditional jumps for offsets >= 1MB Rewrite conditional jump instructions with offsets >= 1MB to use unconditional jumps to avoid overflowing the immediate. Fixes #23746 - - - - - 1424f790 by Alan Zimmerman at 2023-09-30T16:10:00-04:00 EPA: Replace Monoid with NoAnn We currently use the Monoid class as a constraint on Exact Print Annotation functions, so we can use mempty. But this leads to requiring Semigroup instances too, which do not always make sense. Instead, introduce a class NoAnn, with a function noAnn analogous to mempty. Closes #20372 Updates haddock submodule - - - - - c1a3ecde by Ben Gamari at 2023-09-30T16:10:36-04:00 users-guide: Refactor handling of :base-ref: et al. - - - - - bc204783 by Richard Eisenberg at 2023-10-02T14:50:52+02:00 Simplify and correct nasty case in coercion opt This fixes #21062. No test case, because triggering this code seems challenging. - - - - - 9c9ca67e by Andrew Lelechenko at 2023-10-04T05:42:28-04:00 Bump bytestring submodule to 0.12.0.2 - - - - - 4e46dc2b by Andrew Lelechenko at 2023-10-04T05:42:28-04:00 Inline bucket_match - - - - - f6b2751f by Ben Gamari at 2023-10-04T05:43:05-04:00 configure: Fix #21712 again This is a bit of a shot in the dark to fix #24033, which appears to be another instance of #21712. For some reason the ld-override logic *still* appears to be active on Darwin targets (or at least one). Consequently, on misconfigured systems we may choose a non-`ld64` linker. It's a bit unclear exactly what happened in #24033 but ultimately the check added for #21712 was not quite right, checking for the `ghc_host_os` (the value of which depends upon the bootstrap compiler) instead of the target platform. Fix this. Fixes #24033. - - - - - 2f0a101d by Krzysztof Gogolewski at 2023-10-04T05:43:42-04:00 Add a regression test for #24029 - - - - - 8cee3fd7 by sheaf at 2023-10-04T05:44:22-04:00 Fix non-symbolic children lookup of fixity decl The fix for #23664 did not correctly account for non-symbolic names when looking up children of a given parent. This one-line fix changes that. Fixes #24037 - - - - - a4785b33 by Cheng Shao at 2023-10-04T05:44:59-04:00 rts: fix incorrect ticket reference - - - - - e037f459 by Ben Gamari at 2023-10-04T05:45:35-04:00 users-guide: Fix discussion of -Wpartial-fields * fix a few typos * add a new example showing when the warning fires * clarify the existing example * point out -Wincomplete-record-selects Fixes #24049. - - - - - 8ff3134e by Matthew Pickering at 2023-10-05T05:34:58-04:00 Revert "Pass preprocessor options to C compiler when building foreign C files (#16737)" This reverts commit 1c18d3b41f897f34a93669edaebe6069f319f9e2. `-optP` should pass options to the preprocessor, that might be a very different program to the C compiler, so passing the options to the C compiler is likely to result in `-optP` being useless. Fixes #17185 and #21291 - - - - - 8f6010b9 by Ben Gamari at 2023-10-05T05:35:36-04:00 rts/nonmoving: Fix on LLP64 platforms Previously `NONMOVING_SEGMENT_MASK` and friends were defined with the `UL` size suffix. However, this is wrong on LLP64 platforms like Windows, where `long` is 32-bits. Fixes #23003. Fixes #24042. - - - - - f20d02f8 by Andreas Klebinger at 2023-10-05T05:36:14-04:00 Fix isAArch64Bitmask for 32bit immediates. Fixes #23802 - - - - - 63afb701 by Bryan Richter at 2023-10-05T05:36:49-04:00 Work around perf note fetch failure Addresses #24055. - - - - - 242102f4 by Krzysztof Gogolewski at 2023-10-05T05:37:26-04:00 Add a test for #21348 - - - - - 7d390bce by Rewbert at 2023-10-05T05:38:08-04:00 Fixes #24046 - - - - - 69abb171 by Finley McIlwaine at 2023-10-06T14:06:28-07:00 Ensure unconstrained instance dictionaries get IPE info In the `StgRhsCon` case of `GHC.Stg.Debug.collectStgRhs`, we were not coming up with an initial source span based on the span of the binder, which was causing instance dictionaries without dynamic superclass constraints to not have source locations in their IPE info. Now they do. Resolves #24005 - - - - - 390443b7 by Andreas Klebinger at 2023-10-07T10:00:20-04:00 rts: Split up rts/include/stg/MachRegs.h by arch - - - - - 3685942f by Bryan Richter at 2023-10-07T10:00:56-04:00 Actually set hackage index state Or at least, use a version of the cabal command that *claims* to set the index state. Time will tell. - - - - - 46a0e5be by Bryan Richter at 2023-10-07T10:00:56-04:00 Update hackage index state - - - - - d4b037de by Bryan Richter at 2023-10-07T10:00:56-04:00 Ensure hadrian uses CI's hackage index state - - - - - e206be64 by Andrew Lelechenko at 2023-10-08T15:06:14-04:00 Do not use O_NONBLOCK on regular files or block devices CLC proposal https://github.com/haskell/core-libraries-committee/issues/166 - - - - - a06197c4 by David Binder at 2023-10-08T15:06:55-04:00 Update hpc-bin submodule to 0.69 - - - - - ed6785b6 by David Binder at 2023-10-08T15:06:55-04:00 Update Hadrian with correct path to happy file for hpc-bin - - - - - 94066d58 by Alan Zimmerman at 2023-10-09T21:35:53-04:00 EPA: Introduce HasAnnotation class The class is defined as class HasAnnotation e where noAnnSrcSpan :: SrcSpan -> e This generalises noAnnSrcSpan, and allows noLocA :: (HasAnnotation e) => a -> GenLocated e a noLocA = L (noAnnSrcSpan noSrcSpan) - - - - - 8792a1bc by Ben Gamari at 2023-10-09T21:36:29-04:00 Bump unix submodule to v2.8.3.0 - - - - - e96c51cb by Andreas Klebinger at 2023-10-10T16:44:27+01:00 Add a flag -fkeep-auto-rules to optionally keep auto-generated rules around. The motivation for the flag is given in #21917. - - - - - 3ed58cef by Matthew Pickering at 2023-10-10T19:01:22-04:00 hadrian: Add ghcToolchain to tool args list This allows you to load ghc-toolchain and ghc-toolchain-bin into HLS. - - - - - 476c02d4 by Matthew Pickering at 2023-10-10T19:01:22-04:00 ghc-toolchain: Normalise triple via config.sub We were not normalising the target triple anymore like we did with the old make build system. Fixes #23856 - - - - - 303dd237 by Matthew Pickering at 2023-10-10T19:01:22-04:00 ghc-toolchain: Add missing vendor normalisation This is copied from m4/ghc_convert_vendor.m4 Towards #23868 - - - - - 838026c9 by Matthew Pickering at 2023-10-10T19:01:22-04:00 ghc-toolchain: Add loongarch64 to parseArch Towards #23868 - - - - - 1a5bc0b5 by Matthew Pickering at 2023-10-10T19:01:22-04:00 Add same LD hack to ghc-toolchain In the ./configure script, if you pass the `LD` variable then this has the effect of stopping use searching for a linker and hence passing `-fuse-ld=...`. We want to emulate this logic in ghc-toolchain, if a use explicilty specifies `LD` variable then don't add `-fuse-ld=..` with the goal of making ./configure and ghc-toolchain agree on which flags to use when using the C compiler as a linker. This is quite unsavoury as we don't bake the choice of LD into the configuration anywhere but what's important for now is making ghc-toolchain and ./configure agree as much as possible. See #23857 for more discussion - - - - - 42d50b5a by Ben Gamari at 2023-10-10T19:01:22-04:00 ghc-toolchain: Check for C99 support with -std=c99 Previously we failed to try enabling C99 support with `-std=c99`, as `autoconf` attempts. This broke on older compilers (e.g. CentOS 7) which don't enable C99 by default. Fixes #23879. - - - - - da2961af by Matthew Pickering at 2023-10-10T19:01:22-04:00 ghc-toolchain: Add endianess check using __BYTE_ORDER__ macro In very old toolchains the BYTE_ORDER macro is not set but thankfully the __BYTE_ORDER__ macro can be used instead. - - - - - d8da73cd by Matthew Pickering at 2023-10-10T19:01:22-04:00 configure: AC_PATH_TARGET_TOOL for LD We want to make sure that LD is set to an absolute path in order to be consistent with the `LD=$(command -v ld)` call. The AC_PATH_TARGET_TOOL macro uses the absolute path rather than AC_CHECK_TARGET_TOOL which might use a relative path. - - - - - 171f93cc by Matthew Pickering at 2023-10-10T19:01:22-04:00 ghc-toolchain: Check whether we need -std=gnu99 for CPP as well In ./configure the C99 flag is passed to the C compiler when used as a C preprocessor. So we also check the same thing in ghc-toolchain. - - - - - 89a0918d by Matthew Pickering at 2023-10-10T19:01:22-04:00 Check for --target linker flag separately to C compiler There are situations where the C compiler doesn't accept `--target` but when used as a linker it does (but doesn't do anything most likely) In particular with old gcc toolchains, the C compiler doesn't support --target but when used as a linker it does. - - - - - 37218329 by Matthew Pickering at 2023-10-10T19:01:22-04:00 Use Cc to compile test file in nopie check We were attempting to use the C compiler, as a linker, to compile a file in the nopie check, but that won't work in general as the flags we pass to the linker might not be compatible with the ones we pass when using the C compiler. - - - - - 9b2dfd21 by Matthew Pickering at 2023-10-10T19:01:22-04:00 configure: Error when ghc-toolchain fails to compile This is a small QOL change as if you are working on ghc-toolchain and it fails to compile then configure will continue and can give you outdated results. - - - - - 1f0de49a by Matthew Pickering at 2023-10-10T19:01:22-04:00 configure: Check whether -no-pie works when the C compiler is used as a linker `-no-pie` is a flag we pass when using the C compiler as a linker (see pieCCLDOpts in GHC.Driver.Session) so we should test whether the C compiler used as a linker supports the flag, rather than just the C compiler. - - - - - 62cd2579 by Matthew Pickering at 2023-10-10T19:01:22-04:00 ghc-toolchain: Remove javascript special case for --target detection emcc when used as a linker seems to ignore the --target flag, and for consistency with configure which now tests for --target, we remove this special case. - - - - - 0720fde7 by Ben Gamari at 2023-10-10T19:01:22-04:00 toolchain: Don't pass --target to emscripten toolchain As noted in `Note [Don't pass --target to emscripten toolchain]`, emscripten's `emcc` is rather inconsistent with respect to its treatment of the `--target` flag. Avoid this by special-casing this toolchain in the `configure` script and `ghc-toolchain`. Fixes on aspect of #23744. - - - - - 6354e1da by Matthew Pickering at 2023-10-10T19:01:22-04:00 hadrian: Don't pass `--gcc-options` as a --configure-arg to cabal configure Stop passing -gcc-options which mixed together linker flags and non-linker flags. There's no guarantee the C compiler will accept both of these in each mode. - - - - - c00a4bd6 by Ben Gamari at 2023-10-10T19:01:22-04:00 configure: Probe stage0 link flags For consistency with later stages and CC. - - - - - 1f11e7c4 by Sebastian Graf at 2023-10-10T19:01:58-04:00 Stricter Binary.get in GHC.Types.Unit (#23964) I noticed some thunking while looking at Core. This change has very modest, but throughout positive ghc/alloc effect: ``` hard_hole_fits(normal) ghc/alloc 283,057,664 281,620,872 -0.5% geo. mean -0.1% minimum -0.5% maximum +0.0% ``` Fixes #23964. - - - - - a4f1a181 by Bryan Richter at 2023-10-10T19:02:37-04:00 rel_eng/upload.sh cleanups - - - - - 80705335 by doyougnu at 2023-10-10T19:03:18-04:00 ci: add javascript label rule This adds a rule which triggers the javascript job when the "javascript" label is assigned to an MR. - - - - - a2c0fff6 by Matthew Craven at 2023-10-10T19:03:54-04:00 Make 'wWarningFlagsDeps' include every WarningFlag Fixes #24071. - - - - - d055f099 by Jan Hrček at 2023-10-10T19:04:33-04:00 Fix pretty printing of overlap pragmas in TH splices (fixes #24074) - - - - - 0746b868 by Andreas Klebinger at 2023-10-10T19:05:09-04:00 Aarch64 NCG: Use encoded immediates for literals. Try to generate instr x2, <imm> instead of mov x1, lit instr x2, x1 When possible. This get's rid if quite a few redundant mov instructions. I believe this causes a metric decrease for LargeRecords as we reduce register pressure. ------------------------- Metric Decrease: LargeRecord ------------------------- - - - - - 739f4e6f by Andreas Klebinger at 2023-10-10T19:05:09-04:00 AArch NCG: Refactor getRegister' Remove some special cases which can be handled just as well by the generic case. This increases code re-use while also fixing #23749. Since some of the special case wasn't upholding Note [Signed arithmetic on AArch64]. - - - - - 1b213d33 by Andreas Klebinger at 2023-10-10T19:05:09-04:00 Aarch ncg: Optimize immediate use for address calculations When the offset doesn't fit into the immediate we now just reuse the general getRegister' code path which is well optimized to compute the offset into a register instead of a special case for CmmRegOff. This means we generate a lot less code under certain conditions which is why performance metrics for these improve. ------------------------- Metric Decrease: T4801 T5321FD T5321Fun ------------------------- - - - - - b7df0732 by John Ericson at 2023-10-11T16:02:11-04:00 RTS configure: Move over mem management checks These are for heap allocation, a strictly RTS concern. All of this should boil down to `AC_DEFINE` not `AC_SUBST`, so it belongs in the RTS configure and should be safe to move without modification. The RTS configure one has a new ``` AC_CHECK_SIZEOF([void *]) ``` that the top-level configure version didn't have, so that `ac_cv_sizeof_void_p` is defined. Once more code is moved over in latter commits, that can go away. Progress towards #17191 - - - - - 41130a65 by John Ericson at 2023-10-11T16:02:11-04:00 RTS configure: Move over `__thread` check This used by (@bgamari thinks) the `GCThread` abstraction in the RTS. All of this should boil down to `AC_DEFINE` not `AC_SUBST`, so it belongs in the RTS configure and should be safe to move without modification. Progress towards #17191 - - - - - cc5ec2bd by John Ericson at 2023-10-11T16:02:11-04:00 RTS configure: Move over misc function checks These are for general use in the RTS. All of this should boil down to `AC_DEFINE` not `AC_SUBST`, so it belongs in the RTS configure and should be safe to move without modification. Progress towards #17191 - - - - - 809e7c2d by John Ericson at 2023-10-11T16:02:11-04:00 RTS configure: Move over `eventfd` check This check is for the RTS part of the event manager and has a corresponding part in `base`. All of this should boil down to `AC_DEFINE` not `AC_SUBST`, so it belongs in the RTS configure and should be safe to move without modification. Progress towards #17191 - - - - - 58f3babf by John Ericson at 2023-10-11T16:02:48-04:00 Split `FP_CHECK_PTHREADS` and move part to RTS configure `NEED_PTHREAD_LIB` is unused since 3609340743c1b25fdfd0e18b1670dac54c8d8623 (part of the make build system), and so is no longer defined. Progress towards #17191 - - - - - e99cf237 by Moritz Angermann at 2023-10-11T16:03:24-04:00 nativeGen: section flags for .text$foo only Commit 3ece9856d157c85511d59f9f862ab351bbd9b38b, was supposed to fix #22834 in !9810. It does however add "xr" indiscriminatly to .text sections even if splitSections is disabled. This leads to the assembler saying: ghc_1.s:7849:0: error: Warning: Ignoring changed section attributes for .text | 7849 | .section .text,"xr" | ^ - - - - - f383a242 by Sylvain Henry at 2023-10-11T16:04:04-04:00 Modularity: pass TempDir instead of DynFlags (#17957) - - - - - 34fc28b0 by John Ericson at 2023-10-12T06:48:28-04:00 Test that functions from `mingwex` are available Ryan wrote these two minimizations, but they never got added to the test suite. See #23309, #23378 Co-Authored-By: Ben Gamari <bgamari.foss at gmail.com> Co-Authored-By: Ryan Scott <ryan.gl.scott at gmail.com> - - - - - bdb54a0e by John Ericson at 2023-10-12T06:48:28-04:00 Do not check for the `mingwex` library in `/configure` See the recent discussion in !10360 --- Cabal will itself check for the library for the packages that need it, and while the autoconf check additionally does some other things like define a `HAS_LIBMINGWEX` C Preprocessor macro, those other things are also unused and unneeded. Progress towards #17191, which aims to get rid of `/configure` entirely. - - - - - 43e814e1 by Ben Gamari at 2023-10-12T06:49:40-04:00 base: Introduce move modules into src The only non-move changes here are whitespace changes to pass the `whitespace` test and a few testsuite adaptations. - - - - - df81536f by Moritz Angermann at 2023-10-12T06:50:16-04:00 [PEi386 linker] Bounds check and null-deref guard We should resonably be able to expect that we won't exceed the number of sections if we assume to be dealing with legal object files. We can however not guarantee that we get some negative values, and while we try to special case most, we should exclude negative indexing into the sections array. We also need to ensure that we do not try to derefences targetSection, if it is NULL, due to the switch statement. - - - - - c74c4f00 by John Ericson at 2023-10-12T10:31:13-04:00 Move apple compat check to RTS configure - - - - - c80778ea by John Ericson at 2023-10-12T10:31:13-04:00 Move clock/timer fun checks to RTS configure Actual library check (which will set the Cabal flag) is left in the top-level configure for now. Progress towards #17191 - - - - - 7f9f2686 by John Ericson at 2023-10-12T10:31:13-04:00 Move visibility and "musttail" annotation checks to the RTS configure All of this should boil down to `AC_DEFINE` not `AC_SUBST`, so it belongs in the RTS configure and should be safe to move without modification. Progress towards #17191 - - - - - ffb3efe6 by John Ericson at 2023-10-12T10:31:13-04:00 Move leading underscore checks to RTS configure `CabalLeadingUnderscore` is done via Hadrian already, so we can stop `AC_SUBST`ing it completely. - - - - - 25fa4b02 by John Ericson at 2023-10-12T10:31:13-04:00 Move alloca, fork, const, and big endian checks to RTS configure All of this should boil down to `AC_DEFINE` not `AC_SUBST`, so it belongs in the RTS configure and should be safe to move without modification. - - - - - 5170f42a by John Ericson at 2023-10-12T10:31:13-04:00 Move libdl check to RTS configure - - - - - ea7a1447 by John Ericson at 2023-10-12T10:31:13-04:00 Adjust `FP_FIND_LIBFFI` Just set vars, and `AC_SUBST` in top-level configure. Don't define `HAVE_SYSTEM_LIBFFI` because nothing is using it. It hasn't be in used since 3609340743c1b25fdfd0e18b1670dac54c8d8623 (part of the make build system). - - - - - f399812c by John Ericson at 2023-10-12T10:31:13-04:00 Split BFD support to RTS configure The flag is still in the top-level configure, but the other checks (which define various macros --- important) are in the RTS configure. - - - - - f64f44e9 by John Ericson at 2023-10-12T10:31:13-04:00 Split libm check between top level and RTS - - - - - dafc4709 by Moritz Angermann at 2023-10-12T10:31:49-04:00 CgUtils.fixStgRegStmt respect register width This change ensure that the reg + offset computation is always of the same size. Before this we could end up with a 64bit register, and then add a 32bit offset (on 32bit platforms). This not only would fail type sanity checking, but also incorrectly truncate 64bit values into 32bit values silently on 32bit architectures. - - - - - 9e6ef7ba by Matthew Pickering at 2023-10-12T20:35:00-04:00 hadrian: Decrease verbosity of cabal commands In Normal, most tools do not produce output to stdout unless there are error conditions. Reverts 7ed65f5a1bc8e040e318ccff395f53a9bbfd8217 - - - - - 08fc27af by John Ericson at 2023-10-12T20:35:36-04:00 Do not substitute `@...@` for stage-specific values in cabal files `rts` and `ghc-prim` now no longer have a `*.cabal.in` to set Cabal flag defaults; instead manual choices are passed to configure in the usual way. The old way was fundamentally broken, because it meant we were baking these Cabal files for a specific stage. Now we only do stage-agnostic @...@ substitution in cabal files (the GHC version), and so all stage-specific configuration is properly confined to `_build` and the right stage dir. Also `include-ghc-prim` is a flag that no longer exists for `ghc-prim` (it was removed in 835d8ddbbfb11796ea8a03d1806b7cee38ba17a6) so I got rid of it. Co-Authored-By: Matthew Pickering <matthewtpickering at gmail.com> - - - - - a0ac8785 by Sebastian Graf at 2023-10-14T19:17:12-04:00 Fix restarts in .ghcid Using the whole of `hadrian/` restarted in a loop for me. - - - - - fea9ecdb by Sebastian Graf at 2023-10-14T19:17:12-04:00 CorePrep: Refactor FloatingBind (#23442) A drastically improved architecture for local floating in CorePrep that decouples the decision of whether a float is going to be let- or case-bound from how far it can float (out of strict contexts, out of lazy contexts, to top-level). There are a couple of new Notes describing the effort: * `Note [Floating in CorePrep]` for the overview * `Note [BindInfo and FloatInfo]` for the new classification of floats * `Note [Floats and FloatDecision]` for how FloatInfo is used to inform floating decisions This is necessary ground work for proper treatment of Strict fields and unlifted values at top-level. Fixes #23442. NoFib results (omitted = 0.0%): ``` -------------------------------------------------------------------------------- Program Allocs Instrs -------------------------------------------------------------------------------- pretty 0.0% -1.6% scc 0.0% -1.7% -------------------------------------------------------------------------------- Min 0.0% -1.7% Max 0.0% -0.0% Geometric Mean -0.0% -0.0% ``` - - - - - 32523713 by Matthew Pickering at 2023-10-14T19:17:49-04:00 hadrian: Move ghcBinDeps into ghcLibDeps This completes a5227080b57cb51ac34d4c9de1accdf6360b818b, the `ghc-usage.txt` and `ghci-usage.txt` file are also used by the `ghc` library so need to make sure they are present in the libdir even if we are not going to build `ghc-bin`. This also fixes things for cross compilers because the stage2 cross-compiler requires the ghc-usage.txt file, but we are using the stage2 lib folder but not building stage3:exe:ghc-bin so ghc-usage.txt was not being generated. - - - - - ec3c4488 by sheaf at 2023-10-14T19:18:29-04:00 Combine GREs when combining in mkImportOccEnv In `GHC.Rename.Names.mkImportOccEnv`, we sometimes discard one import item in favour of another, as explained in Note [Dealing with imports] in `GHC.Rename.Names`. However, this can cause us to lose track of important parent information. Consider for example #24084: module M1 where { class C a where { type T a } } module M2 ( module M1 ) where { import M1 } module M3 where { import M2 ( C, T ); instance C () where T () = () } When processing the import list of `M3`, we start off (for reasons that are not relevant right now) with two `Avail`s attached to `T`, namely `C(C, T)` and `T(T)`. We combine them in the `combine` function of `mkImportOccEnv`; as described in Note [Dealing with imports] we discard `C(C, T)` in favour of `T(T)`. However, in doing so, we **must not** discard the information want that `C` is the parent of `T`. Indeed, losing track of this information can cause errors when importing, as we could get an error of the form ‘T’ is not a (visible) associated type of class ‘C’ We fix this by combining the two GREs for `T` using `plusGRE`. Fixes #24084 - - - - - 257c2807 by Ilias Tsitsimpis at 2023-10-14T19:19:07-04:00 hadrian: Pass -DNOSMP to C compiler when needed Hadrian passes the -DNOSMP flag to GHC when the target doesn't support SMP, but doesn't pass it to CC as well, leading to the following compilation error on mips64el: | Run Cc (FindCDependencies CDep) Stage1: rts/sm/NonMovingScav.c => _build/stage1/rts/build/c/sm/NonMovingScav.o.d Command line: /usr/bin/mips64el-linux-gnuabi64-gcc -E -MM -MG -MF _build/stage1/rts/build/c/hooks/FlagDefaults.thr_debug_p_o.d -MT _build/stage1/rts/build/c/hooks/FlagDefaults.o -Irts/include -I_build/stage1/rts/build -I_build/stage1/rts/build/include -Irts/include -x c rts/hooks/FlagDefaults.c -Wall -Wextra -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Winline -Wpointer-arith -Wmissing-noreturn -Wnested-externs -Wredundant-decls -Wundef -fno-strict-aliasing -DTHREADED_RTS -DDEBUG -fomit-frame-pointer -O2 -g -Irts -I_build/stage1/rts/build -DDEBUG -fno-omit-frame-pointer -g3 -O0 ===> Command failed with error code: 1 In file included from rts/include/Stg.h:348, from rts/include/Rts.h:38, from rts/hooks/FlagDefaults.c:8: rts/include/stg/SMP.h:416:2: error: #error memory barriers unimplemented on this architecture 416 | #error memory barriers unimplemented on this architecture | ^~~~~ rts/include/stg/SMP.h:440:2: error: #error memory barriers unimplemented on this architecture 440 | #error memory barriers unimplemented on this architecture | ^~~~~ rts/include/stg/SMP.h:464:2: error: #error memory barriers unimplemented on this architecture 464 | #error memory barriers unimplemented on this architecture | ^~~~~ The old make system correctly passed this flag to both GHC and CC [1]. Fix this error by passing -DNOSMP to CC as well. [1] https://gitlab.haskell.org/ghc/ghc/-/blob/00920f176b0235d5bb52a8e054d89a664f8938fe/rts/ghc.mk#L407 Closes #24082 - - - - - 13d3c613 by John Ericson at 2023-10-14T19:19:42-04:00 Users Guide: Drop dead code for Haddock refs to `parallel` I noticed while working on !11451 that `@LIBRARY_parallel_UNIT_ID@` was not substituted. It is dead code -- there is no `parallel-ref` usages and it doesn't look like there ever was (going back to 3e5d0f188d6c8633e55e9ba6c8941c07e459fa4b), so let's delete it. - - - - - fe067577 by Sylvain Henry at 2023-10-18T19:40:25-04:00 Avoid out-of-bound array access in bigNatIsPowerOf2 (fix #24066) bigNatIndex# in the `where` clause wasn't guarded by "bigNatIsZero a". - - - - - cc1625b1 by Sylvain Henry at 2023-10-18T19:40:25-04:00 Bignum: fix right shift of negative BigNat with native backend - - - - - cbe4400d by Sylvain Henry at 2023-10-18T19:40:25-04:00 Rts: expose rtsOutOfBoundsAccess symbol - - - - - 72c7380c by Sylvain Henry at 2023-10-18T19:40:25-04:00 Hadrian: enable `-fcheck-prim-bounds` in validate flavour This allows T24066 to fail when the bug is present. Otherwise the out-of-bound access isn't detected as it happens in ghc-bignum which wasn't compiled with the bounds check. - - - - - f9436990 by John Ericson at 2023-10-18T19:41:01-04:00 Make Hadrian solely responsible for substituting `docs/users_guide/ghc_config.py.in` Fixes #24091 Progress on #23966 Issue #24091 reports that `@ProjectVersion@` is no longer being substituted in the GHC user's guide. I assume this is a recent issue, but I am not sure how it's worked since c1a3ecde720b3bddc2c8616daaa06ee324e602ab; it looks like both Hadrian and configure are trying to substitute the same `.in` file! Now only Hadrian does. That is better anyways; already something that issue #23966 requested. It seems like we were missing some dependencies in Hadrian. (I really, really hate that this is possible!) Hopefully it is fixed now. - - - - - b12df0bb by John Ericson at 2023-10-18T19:41:37-04:00 `ghcversion.h`: No need to cope with undefined `ProjectPatchLevel*` Since 4e6c80197f1cc46dfdef0300de46847c7cfbdcb0, these are guaranteed to be defined. (Guaranteed including a test in the testsuite.) - - - - - 0295375a by John Ericson at 2023-10-18T19:41:37-04:00 Generate `ghcversion.h` from a `.in` file Now that there are no conditional sections (see the previous commit), we can just a do simple substitution rather than pasting it together line by line. Progress on #23966 - - - - - 740a1b85 by Krzysztof Gogolewski at 2023-10-19T11:37:20-04:00 Add a regression test for #24064 - - - - - 921fbf2f by Hécate Moonlight at 2023-10-19T11:37:59-04:00 CLC Proposal #182: Export List from Data.List Proposal link: https://github.com/haskell/core-libraries-committee/issues/182 - - - - - 4f02d3c1 by Sylvain Henry at 2023-10-20T04:01:32-04:00 rts: fix small argument passing on big-endian arch (fix #23387) - - - - - b86243b4 by Sylvain Henry at 2023-10-20T04:02:13-04:00 Interpreter: fix literal alignment on big-endian architectures (fix #19261) Literals weren't correctly aligned on big-endian, despite what the comment said. - - - - - a4b2ec47 by Sylvain Henry at 2023-10-20T04:02:54-04:00 Testsuite: recomp011 and recomp015 are fixed on powerpc These tests have been fixed but not tested and re-enabled on big-endian powerpc (see comments in #11260 and #11323) - - - - - fded7dd4 by Sebastian Graf at 2023-10-20T04:03:30-04:00 CorePrep: Allow floating dictionary applications in -O0 into a Rec (#24102) - - - - - 02efc181 by John Ericson at 2023-10-22T02:48:55-04:00 Move function checks to RTS configure Some of these functions are used in `base` too, but we can copy the checks over to its configure if that's an issue. - - - - - 5f4bccab by John Ericson at 2023-10-22T02:48:55-04:00 Move over a number of C-style checks to RTS configure - - - - - 5cf04f58 by John Ericson at 2023-10-22T02:48:55-04:00 Move/Copy more `AC_DEFINE` to RTS config Only exception is the LLVM version macros, which are used for GHC itself. - - - - - b8ce5dfe by John Ericson at 2023-10-22T02:48:55-04:00 Define `TABLES_NEXT_TO_CODE` in the RTS configure We create a new cabal flag to facilitate this. - - - - - 4a40271e by John Ericson at 2023-10-22T02:48:55-04:00 Configure scripts: `checkOS`: Make a bit more robust `mingw64` and `mingw32` are now both accepted for `OSMinGW32`. This allows us to cope with configs/triples that we haven't normalized extra being what GNU `config.sub` does. - - - - - 16bec0a0 by John Ericson at 2023-10-22T02:48:55-04:00 Generate `ghcplatform.h` from RTS configure We create a new cabal flag to facilitate this. - - - - - 7dfcab2f by John Ericson at 2023-10-22T02:48:55-04:00 Get rid of all mention of `mk/config.h` The RTS configure script is now solely responsible for managing its headers; the top level configure script does not help. - - - - - c1e3719c by Cheng Shao at 2023-10-22T02:49:33-04:00 rts: drop stale mentions of MIN_UPD_SIZE We used to have MIN_UPD_SIZE macro that describes the minimum reserved size for thunks, so that the thunk can be overwritten in place as indirections or blackholes. However, this macro has not been actually defined or used anywhere since a long time ago; StgThunkHeader already reserves a padding word for this purpose. Hence this patch which drops stale mentions of MIN_UPD_SIZE. - - - - - d24b0d85 by Andrew Lelechenko at 2023-10-22T02:50:11-04:00 base changelog: move non-backported entries from 4.19 section to 4.20 Neither !10933 (check https://hackage.haskell.org/package/base-4.19.0.0/docs/src/Text.Read.Lex.html#numberToRangedRational) nor !10189 (check https://hackage.haskell.org/package/base-4.19.0.0/docs/src/Data.List.NonEmpty.html#unzip) were backported to `base-4.19.0.0`. Moving them to `base-4.20.0.0` section. Also minor stylistic changes to other entries, bringing them to a uniform form. - - - - - de78b32a by Alan Zimmerman at 2023-10-23T09:09:41-04:00 EPA Some tweaks to annotations - Fix span for GRHS - Move TrailingAnns from last match to FunBind - Fix GADT 'where' clause span - Capture full range for a CaseAlt Match - - - - - d5a8780d by Simon Hengel at 2023-10-23T09:10:23-04:00 Update primitives.rst - - - - - 4d075924 by Josh Meredith at 2023-10-24T23:04:12+11:00 JS/userguide: add explanation of writing jsbits - - - - - 07ab5cc1 by Cheng Shao at 2023-10-24T15:40:32-04:00 testsuite: increase timeout of ghc-api tests for wasm32 ghc-api tests for wasm32 are more likely to timeout due to the large wasm module sizes, especially when testing with wasm native tail calls, given wasmtime's handling of tail call opcodes are suboptimal at the moment. It makes sense to increase timeout specifically for these tests on wasm32. This doesn't affect other targets, and for wasm32 we don't increase timeout for all tests, so not to risk letting major performance regressions slip through the testsuite. - - - - - 0d6acca5 by Greg Steuck at 2023-10-26T08:44:23-04:00 Explicitly require RLIMIT_AS before use in OSMem.c This is done elsewhere in the source tree. It also suddenly is required on OpenBSD. - - - - - 9408b086 by Sylvain Henry at 2023-10-26T08:45:03-04:00 Modularity: modularize external linker Decouple runLink from DynFlags to allow calling runLink more easily. This is preliminary work for calling Emscripten's linker (emcc) from our JavaScript linker. - - - - - e0f35030 by doyougnu at 2023-10-27T08:41:12-04:00 js: add JStg IR, remove unsaturated constructor - Major step towards #22736 and adding the optimizer in #22261 - - - - - 35587eba by Simon Peyton Jones at 2023-10-27T08:41:48-04:00 Fix a bug in tail calls with ticks See #24078 for the diagnosis. The change affects only the Tick case of occurrence analysis. It's a bit hard to test, so no regression test (yet anyway). - - - - - 9bc5cb92 by Matthew Craven at 2023-10-28T07:06:17-04:00 Teach tag-inference about SeqOp/seq# Fixes the STG/tag-inference analogue of #15226. Co-Authored-By: Simon Peyton Jones <simon.peytonjones at gmail.com> - - - - - 34f06334 by Moritz Angermann at 2023-10-28T07:06:53-04:00 [PEi386] Mask SYM_TYPE_DUP_DISCARD in makeSymbolExtra 48e391952c17ff7eab10b0b1456e3f2a2af28a9b introduced `SYM_TYPE_DUP_DISCARD` to the bitfield. The linker however, failed to mask the `SYM_TYPE_DUP_DISCARD` value. Thus `== SYM_TYPE_CODE` comparisons easily failed. This lead to us relocating DATA lookups (GOT) into E8 (call) and E9 (jump) instructions. - - - - - 5b51b2a2 by Mario Blažević at 2023-10-28T07:07:33-04:00 Fix and test for issue #24111, TH.Ppr output of pattern synonyms - - - - - 723bc352 by Alan Zimmerman at 2023-10-30T20:36:41-04:00 EPA: print doc comments as normal comments And ignore the ones allocated in haddock processing. It does not guarantee that every original haddock-like comment appears in the output, as it discards ones that have no legal attachment point. closes #23459 - - - - - 21b76843 by Simon Peyton Jones at 2023-10-30T20:37:17-04:00 Fix non-termination bug in equality solver constraint left-to-right then right to left, forever. Easily fixed. - - - - - 270867ac by Sebastian Graf at 2023-10-30T20:37:52-04:00 ghc-toolchain: build with `-package-env=-` (#24131) Otherwise globally installed libraries (via `cabal install --lib`) break the build. Fixes #24131. - - - - - 4d08364e by Alan Zimmerman at 2023-10-31T19:46:45+00:00 EPA: match changes in GHC - EPA: Comments in AnchorOperation - EPA: Remove EpaEofComment - - - - - 7a90020f by Krzysztof Gogolewski at 2023-10-31T20:03:37-04:00 docs: fix ScopedTypeVariables example (#24101) The previous example didn't compile. Furthermore, it wasn't demonstrating the point properly. I have changed it to an example which shows that 'a' in the signature must be the same 'a' as in the instance head. - - - - - 49f69f50 by Krzysztof Gogolewski at 2023-10-31T20:04:13-04:00 Fix pretty-printing of type family dependencies "where" should be after the injectivity annotation. - - - - - 73c191c0 by Ben Gamari at 2023-10-31T20:04:49-04:00 gitlab-ci: Bump LLVM bootstrap jobs to Debian 12 As the Debian 10 images have too old an LLVM. Addresses #24056. - - - - - 5b0392e0 by Matthew Pickering at 2023-10-31T20:04:49-04:00 ci: Run aarch64 llvm backend job with "LLVM backend" label This brings it into line with the x86 LLVM backend job. - - - - - 9f9c9227 by Ryan Scott at 2023-11-01T09:19:12-04:00 More robust checking for DataKinds As observed in #22141, GHC was not doing its due diligence in catching code that should require `DataKinds` in order to use. Most notably, it was allowing the use of arbitrary data types in kind contexts without `DataKinds`, e.g., ```hs data Vector :: Nat -> Type -> Type where ``` This patch revamps how GHC tracks `DataKinds`. The full specification is written out in the `DataKinds` section of the GHC User's Guide, and the implementation thereof is described in `Note [Checking for DataKinds]` in `GHC.Tc.Validity`. In brief: * We catch _type_-level `DataKinds` violations in the renamer. See `checkDataKinds` in `GHC.Rename.HsType` and `check_data_kinds` in `GHC.Rename.Pat`. * We catch _kind_-level `DataKinds` violations in the typechecker, as this allows us to catch things that appear beneath type synonyms. (We do *not* want to do this in type-level contexts, as it is perfectly fine for a type synonym to mention something that requires DataKinds while still using the type synonym in a module that doesn't enable DataKinds.) See `checkValidType` in `GHC.Tc.Validity`. * There is now a single `TcRnDataKindsError` that classifies all manner of `DataKinds` violations, both in the renamer and the typechecker. The `NoDataKindsDC` error has been removed, as it has been subsumed by `TcRnDataKindsError`. * I have added `CONSTRAINT` is `isKindTyCon`, which is what checks for illicit uses of data types at the kind level without `DataKinds`. Previously, `isKindTyCon` checked for `Constraint` but not `CONSTRAINT`. This is inconsistent, given that both `Type` and `TYPE` were checked by `isKindTyCon`. Moreover, it thwarted the implementation of the `DataKinds` check in `checkValidType`, since we would expand `Constraint` (which was OK without `DataKinds`) to `CONSTRAINT` (which was _not_ OK without `DataKinds`) and reject it. Now both are allowed. * I have added a flurry of additional test cases that test various corners of `DataKinds` checking. Fixes #22141. - - - - - 575d7690 by Sylvain Henry at 2023-11-01T09:19:53-04:00 JS: fix FFI "wrapper" and "dynamic" Fix codegen and helper functions for "wrapper" and "dynamic" foreign imports. Fix tests: - ffi006 - ffi011 - T2469 - T4038 Related to #22363 - - - - - 81fb8885 by Alan Zimmerman at 2023-11-01T22:23:56-04:00 EPA: Use full range for Anchor This change requires a series of related changes, which must all land at the same time, otherwise all the EPA tests break. * Use the current Anchor end as prior end Use the original anchor location end as the source of truth for calculating print deltas. This allows original spacing to apply in most cases, only changed AST items need initial delta positions. * Add DArrow to TrailingAnn * EPA Introduce HasTrailing in ExactPrint Use [TrailingAnn] in enterAnn and remove it from ExactPrint (LocatedN RdrName) * In HsDo, put TrailingAnns at top of LastStmt * EPA: do not convert comments to deltas when balancing. * EPA: deal with fallout from getMonoBind * EPA fix captureLineSpacing * EPA print any comments in the span before exiting it * EPA: Add comments to AnchorOperation * EPA: remove AnnEofComment, it is no longer used Updates Haddock submodule - - - - - 03e82511 by Rodrigo Mesquita at 2023-11-01T22:24:32-04:00 Fix in docs regarding SSymbol, SNat, SChar (#24119) - - - - - 362cc693 by Matthew Pickering at 2023-11-01T22:25:08-04:00 hadrian: Update bootstrap plans (9.4.6, 9.4.7, 9.6.2, 9.6.3, 9.8.1) Updating the bootstrap plans with more recent GHC versions. - - - - - 00b9b8d3 by Matthew Pickering at 2023-11-01T22:25:08-04:00 ci: Add 9.8.1 bootstrap testing job - - - - - ef3d20f8 by Matthew Pickering at 2023-11-01T22:25:08-04:00 Compatibility with 9.8.1 as boot compiler This fixes several compatability issues when using 9.8.1 as the boot compiler. * An incorrect version guard on the stack decoding logic in ghc-heap * Some ghc-prim bounds need relaxing * ghc is no longer wired in, so we have to remove the -this-unit-id ghc call. Fixes #24077 - - - - - 6755d833 by Jaro Reinders at 2023-11-03T10:54:42+01:00 Add NCG support for common 64bit operations to the x86 backend. These used to be implemented via C calls which was obviously quite bad for performance for operations like simple addition. Co-authored-by: Andreas Klebinger - - - - - 0dfb1fa7 by Vladislav Zavialov at 2023-11-03T14:08:41-04:00 T2T in Expressions (#23738) This patch implements the T2T (term-to-type) transformation in expressions. Given a function with a required type argument vfun :: forall a -> ... the user can now call it as vfun (Maybe Int) instead of vfun (type (Maybe Int)) The Maybe Int argument is parsed and renamed as a term (HsExpr), but then undergoes a conversion to a type (HsType). See the new function expr_to_type in compiler/GHC/Tc/Gen/App.hs and Note [RequiredTypeArguments and the T2T mapping] Left as future work: checking for puns. - - - - - cc1c7c54 by Duncan Coutts at 2023-11-05T00:23:44-04:00 Add a test for I/O managers It tries to cover the cases of multiple threads waiting on the same fd for reading and multiple threads waiting for writing, including wait cancellation by async exceptions. It should work for any I/O manager, in-RTS or in-Haskell. Unfortunately it will not currently work for Windows because it relies on anonymous unix sockets. It could in principle be ported to use Windows named pipes. - - - - - 2e448f98 by Cheng Shao at 2023-11-05T00:23:44-04:00 Skip the IOManager test on wasm32 arch. The test relies on the sockets API which are not (yet) available. - - - - - fe50eb35 by Cheng Shao at 2023-11-05T00:24:20-04:00 compiler: fix eager blackhole symbol in wasm32 NCG - - - - - af771148 by Cheng Shao at 2023-11-05T00:24:20-04:00 testsuite: fix optasm tests for wasm32 - - - - - 1b90735c by Matthew Pickering at 2023-11-05T00:24:20-04:00 testsuite: Add wasm32 to testsuite arches with NCG The compiler --info reports that wasm32 compilers have a NCG, so we should agree with that here. - - - - - db9a6496 by Alan Zimmerman at 2023-11-05T00:24:55-04:00 EPA: make locA a function, not a field name And use it to generalise reLoc The following for the windows pipeline one. 5.5% Metric Increase: T5205 - - - - - 833e250c by Simon Peyton Jones at 2023-11-05T00:25:31-04:00 Update the unification count in wrapUnifierX Omitting this caused type inference to fail in #24146. This was an accidental omision in my refactoring of the equality solver. - - - - - e451139f by Andreas Klebinger at 2023-11-05T00:26:07-04:00 Remove an accidental git conflict marker from a comment. - - - - - e7da0d25 by Alan Zimmerman at 2023-11-05T11:20:31+00:00 EPA: match changes in GHC, l2l cleanup - - - - - 30baac7a by Tobias Haslop at 2023-11-06T10:50:32+00:00 Add laws relating between Foldable/Traversable with their Bi- superclasses See https://github.com/haskell/core-libraries-committee/issues/205 for discussion. This commit also documents that the tuple instances only satisfy the laws up to lazyness, similar to the documentation added in !9512. - - - - - df626f00 by Tobias Haslop at 2023-11-07T02:20:37-05:00 Elaborate on the quantified superclass of Bifunctor This was requested in the comment https://github.com/haskell/core-libraries-committee/issues/93#issuecomment-1597271700 for when Traversable becomes a superclass of Bitraversable, but similarly applies to Functor/Bifunctor, which already are in a superclass relationship. - - - - - 8217acb8 by Alan Zimmerman at 2023-11-07T02:21:12-05:00 EPA: get rid of l2l and friends Replace them with l2l to convert the location la2la to convert a GenLocated thing Updates haddock submodule - - - - - dd88a260 by Luite Stegeman at 2023-11-07T02:21:53-05:00 JS: remove broken newIdents from JStg Monad GHC.JS.JStg.Monad.newIdents was broken, resulting in duplicate identifiers being generated in h$c1, h$c2, ... . This change removes the broken newIdents. - - - - - 455524a2 by Matthew Craven at 2023-11-09T08:41:59-05:00 Create specially-solved DataToTag class Closes #20532. This implements CLC proposal 104: https://github.com/haskell/core-libraries-committee/issues/104 The design is explained in Note [DataToTag overview] in GHC.Tc.Instance.Class. This replaces the existing `dataToTag#` primop. These metric changes are not "real"; they represent Unique-related flukes triggering on a different set of jobs than they did previously. See also #19414. Metric Decrease: T13386 T8095 Metric Increase: T13386 T8095 Co-authored-by: Simon Peyton Jones <simon.peytonjones at gmail.com> - - - - - a05f4554 by Alan Zimmerman at 2023-11-09T08:42:35-05:00 EPA: get rid of glRR and friends in GHC/Parser.y With the HasLoc and HasAnnotation classes, we can replace a number of type-specific helper functions in the parser with polymorphic ones instead Metric Decrease: MultiLayerModulesTH_Make - - - - - 18498538 by Cheng Shao at 2023-11-09T16:58:12+00:00 ci: bump ci-images for wasi-sdk upgrade - - - - - 52c0fc69 by PHO at 2023-11-09T19:16:22-05:00 Don't assume the current locale is *.UTF-8, set the encoding explicitly primops.txt contains Unicode characters: > LC_ALL=C ./genprimopcode --data-decl < ./primops.txt > genprimopcode: <stdin>: hGetContents: invalid argument (cannot decode byte sequence starting from 226) Hadrian must also avoid using readFile' to read primops.txt because it tries to decode the file with a locale-specific encoding. - - - - - 7233b3b1 by PHO at 2023-11-09T19:17:01-05:00 Use '[' instead of '[[' because the latter is a Bash-ism It doesn't work on platforms where /bin/sh is something other than Bash. - - - - - 6dbab180 by Simon Peyton Jones at 2023-11-09T19:17:36-05:00 Add an extra check in kcCheckDeclHeader_sig Fix #24083 by checking for a implicitly-scoped type variable that is not actually bound. See Note [Disconnected type variables] in GHC.Tc.Gen.HsType For some reason, on aarch64-darwin we saw a 2.8% decrease in compiler allocations for MultiLayerModulesTH_Make; but 0.0% on other architectures. Metric Decrease: MultiLayerModulesTH_Make - - - - - 22551364 by Sven Tennie at 2023-11-11T06:35:22-05:00 AArch64: Delete unused LDATA pseudo-instruction Though there were consuming functions for LDATA, there were no producers. Thus, the removed code was "dead". - - - - - 2a0ec8eb by Alan Zimmerman at 2023-11-11T06:35:59-05:00 EPA: harmonise acsa and acsA in GHC/Parser.y With the HasLoc class, we can remove the acsa helper function, using acsA instead. - - - - - 4ceac14d by Alan Zimmerman at 2023-11-11T15:16:41+00:00 EPA: Replace Anchor with EpaLocation Match GHC - - - - - 7ae517a0 by Teo Camarasu at 2023-11-12T08:04:12-05:00 nofib: bump submodule This includes changes that: - fix building a benchmark with HEAD - remove a Makefile-ism that causes errors in bash scripts Resolves #24178 - - - - - 3f0036ec by Alan Zimmerman at 2023-11-12T08:04:47-05:00 EPA: Replace Anchor with EpaLocation An Anchor has a location and an operation, which is either that it is unchanged or that it has moved with a DeltaPos data Anchor = Anchor { anchor :: RealSrcSpan , anchor_op :: AnchorOperation } An EpaLocation also has either a location or a DeltaPos data EpaLocation = EpaSpan !RealSrcSpan !(Strict.Maybe BufSpan) | EpaDelta !DeltaPos ![LEpaComment] Now that we do not care about always having a location in the anchor, we remove Anchor and replace it with EpaLocation We do this with a type alias initially, to ease the transition. The alias will be removed in time. We also have helpers to reconstruct the AnchorOperation from an EpaLocation. This is also temporary. Updates Haddock submodule - - - - - a7492048 by Alan Zimmerman at 2023-11-12T13:43:07+00:00 EPA: get rid of AnchorOperation Now that the Anchor type is an alias for EpaLocation, remove AnchorOperation. Updates haddock submodule - - - - - 0745c34d by Andrew Lelechenko at 2023-11-13T16:25:07-05:00 Add since annotation for showHFloat - - - - - e98051a5 by Rodrigo Mesquita at 2023-11-15T13:18:58-05:00 Suppress duplicate librares linker warning of new macOS linker Fixes #24167 XCode 15 introduced a new linker which warns on duplicate libraries being linked. To disable this warning, we pass -Wl,-no_warn_duplicate_libraries as suggested by Brad King in CMake issue #25297. This flag isn't necessarily available to other linkers on darwin, so we must only configure it into the CC linker arguments if valid. - - - - - c411c431 by Rodrigo Mesquita at 2023-11-15T13:18:58-05:00 testsuite: Encoding test witnesses recent iconv bug is fragile A regression in the new iconv() distributed with XCode 15 and MacOS Sonoma causes the test 'encoding004' to fail in the CP936 roundrip. We mark this test as fragile until this is fixed upstream (rather than broken, since previous versions of iconv pass the test) See #24161 - - - - - ce7fe5a9 by Rodrigo Mesquita at 2023-11-15T13:18:58-05:00 testsuite: Update to LC_ALL=C no longer being ignored in darwin MacOS seems to have fixed an issue where it used to ignore the variable `LC_ALL` in program invocations and default to using Unicode. Since the behaviour seems to be fixed to account for the locale variable, we mark tests that were previously broken in spite of it as fragile (since they now pass in recent macOS distributions) See #24161 - - - - - e6c803f7 by Rodrigo Mesquita at 2023-11-15T13:18:58-05:00 darwin: Fix single_module is obsolete warning In XCode 15's linker, -single_module is the default and otherwise passing it as a flag results in a warning being raised: ld: warning: -single_module is obsolete This patch fixes this warning by, at configure time, determining whether the linker supports -single_module (which is likely false for all non-darwin linkers, and true for darwin linkers in previous versions of macOS), and using that information at runtime to decide to pass or not the flag in the invocation. Fixes #24168 - - - - - 929ba2f9 by Rodrigo Mesquita at 2023-11-15T13:18:58-05:00 testsuite: Skip MultiLayerModulesTH_Make on darwin The recent toolchain upgrade on darwin machines resulted in the MultiLayerModulesTH_Make test metrics varying too much from the baseline, ultimately blocking the CI pipelines. This commit skips the test on darwin to temporarily avoid failures due to the environment change in the runners. However, the metrics divergence is being investigated still (tracked in #24177) - - - - - af261ccd by Rodrigo Mesquita at 2023-11-15T13:18:58-05:00 configure: check target (not build) understands -no_compact_unwind Previously, we were branching on whether the build system was darwin to shortcut this check, but we really want to branch on whether the target system (which is what we are configuring ld_prog for) is darwin. - - - - - 2125c176 by Luite Stegeman at 2023-11-15T13:19:38-05:00 JS: Fix missing variable declarations The JStg IR update was missing some local variable declarations that were present earlier, causing global variables to be used implicitly (or an error in JavaScript strict mode). This adds the local variable declarations again. - - - - - 99ced73b by Krzysztof Gogolewski at 2023-11-15T13:20:14-05:00 Remove loopy superclass solve mechanism Programs with a -Wloopy-superclass-solve warning will now fail with an error. Fixes #23017 - - - - - 2aff2361 by Zubin Duggal at 2023-11-15T13:20:50-05:00 users-guide: Fix links to libraries from the users-guide. The unit-ids generated in c1a3ecde720b3bddc2c8616daaa06ee324e602ab include the package name, so we don't need to explicitly add it to the links. Fixes #24151 - - - - - 27981fac by Alan Zimmerman at 2023-11-15T13:21:25-05:00 EPA: splitLHsForAllTyInvis does not return ann We did not use the annotations returned from splitLHsForAllTyInvis, so do not return them. - - - - - a6467834 by Krzysztof Gogolewski at 2023-11-15T22:22:59-05:00 Document defaulting of RuntimeReps Fixes #24099 - - - - - 2776920e by Simon Peyton Jones at 2023-11-15T22:23:35-05:00 Second fix to #24083 My earlier fix turns out to be too aggressive for data/type families See wrinkle (DTV1) in Note [Disconnected type variables] - - - - - cee81370 by Sylvain Henry at 2023-11-16T09:57:46-05:00 Fix unusable units and module reexport interaction (#21097) This commit fixes an issue with ModUnusable introduced in df0f148feae. In mkUnusableModuleNameProvidersMap we traverse the list of unusable units and generate ModUnusable origin for all the modules they contain: exposed modules, hidden modules, and also re-exported modules. To do this we have a two-level map: ModuleName -> Unit:ModuleName (aka Module) -> ModuleOrigin So for each module name "M" in broken unit "u" we have: "M" -> u:M -> ModUnusable reason However in the case of module reexports we were using the *target* module as a key. E.g. if "u:M" is a reexport for "X" from unit "o": "M" -> o:X -> ModUnusable reason Case 1: suppose a reexport without module renaming (u:M -> o:M) from unusable unit u: "M" -> o:M -> ModUnusable reason Here it's claiming that the import of M is unusable because a reexport from u is unusable. But if unit o isn't unusable we could also have in the map: "M" -> o:M -> ModOrigin ... Issue: the Semigroup instance of ModuleOrigin doesn't handle the case (ModUnusable <> ModOrigin) Case 2: similarly we could have 2 unusable units reexporting the same module without renaming, say (u:M -> o:M) and (v:M -> o:M) with u and v unusable. It gives: "M" -> o:M -> ModUnusable ... (for u) "M" -> o:M -> ModUnusable ... (for v) Issue: the Semigroup instance of ModuleOrigin doesn't handle the case (ModUnusable <> ModUnusable). This led to #21097, #16996, #11050. To fix this, in this commit we make ModUnusable track whether the module used as key is a reexport or not (for better error messages) and we use the re-export module as key. E.g. if "u:M" is a reexport for "o:X" and u is unusable, we now record: "M" -> u:M -> ModUnusable reason reexported=True So now, we have two cases for a reexport u:M -> o:X: - u unusable: "M" -> u:M -> ModUnusable ... reexported=True - u usable: "M" -> o:X -> ModOrigin ... reexportedFrom=u:M The second case is indexed with o:X because in this case the Semigroup instance of ModOrigin is used to combine valid expositions of a module (directly or via reexports). Note that module lookup functions select usable modules first (those who have a ModOrigin value), so it doesn't matter if we add new ModUnusable entries in the map like this: "M" -> { u:M -> ModUnusable ... reexported=True o:M -> ModOrigin ... } The ModOrigin one will be used. Only if there is no ModOrigin or ModHidden entry will the ModUnusable error be printed. See T21097 for an example printing several reasons why an import is unusable. - - - - - 3e606230 by Krzysztof Gogolewski at 2023-11-16T09:58:22-05:00 Fix IPE test A helper function was defined in a different module than used. To reproduce: ./hadrian/build test --test-root-dirs=testsuite/tests/rts/ipe - - - - - 49f5264b by Andreas Klebinger at 2023-11-16T20:52:11-05:00 Properly compute unpacked sizes for -funpack-small-strict-fields. Use rep size rather than rep count to compute the size. Fixes #22309 - - - - - b4f84e4b by James Henri Haydon at 2023-11-16T20:52:53-05:00 Explicit methods for Alternative Compose Explicitly define some and many in Alternative instance for Data.Functor.Compose Implementation of https://github.com/haskell/core-libraries-committee/issues/181 - - - - - 9bc0dd1f by Ignat Insarov at 2023-11-16T20:53:34-05:00 Add permutations for non-empty lists. Approved by CLC in https://github.com/haskell/core-libraries-committee/issues/68#issuecomment-1221409837 - - - - - 5643ecf9 by Andrew Lelechenko at 2023-11-16T20:53:34-05:00 Update changelog and since annotations for Data.List.NonEmpty.permutations Approved by CLC in https://github.com/haskell/core-libraries-committee/issues/68#issuecomment-1221409837 - - - - - 94ff2134 by Oleg Alexander at 2023-11-16T20:54:15-05:00 Update doc string for traceShow Updated doc string for traceShow. - - - - - faff671a by Luite Stegeman at 2023-11-17T14:12:51+01:00 JS: clean up some foreign imports - - - - - 856e0a4e by Sven Tennie at 2023-11-18T06:54:11-05:00 AArch64: Remove unused instructions As these aren't ever emitted, we don't even know if they work or will ever be used. If one of them is needed in future, we may easily re-add it. Deleted instructions are: - CMN - ANDS - BIC - BICS - EON - ORN - ROR - TST - STP - LDP - DMBSY - - - - - 615441ef by Alan Zimmerman at 2023-11-18T06:54:46-05:00 EPA: Replace Monoid with NoAnn Remove the final Monoid instances in the exact print infrastructure. For Windows CI Metric Decrease: T5205 - - - - - 5a6c49d4 by David Feuer at 2023-11-20T18:53:18-05:00 Speed up stimes in instance Semigroup Endo As discussed at https://github.com/haskell/core-libraries-committee/issues/4 - - - - - cf9da4b3 by Andrew Lelechenko at 2023-11-20T18:53:18-05:00 base: reflect latest changes in the changelog - - - - - 48bf364e by Alan Zimmerman at 2023-11-20T18:53:54-05:00 EPA: Use SrcSpan in EpaSpan This is more natural, since we already need to deal with invalid RealSrcSpans, and that is exactly what SrcSpan.UnhelpfulSpan is for. Updates haddock submodule. - - - - - 97ec37cc by Sebastian Graf at 2023-11-20T18:54:31-05:00 Add regression test for #6070 Fixes #6070. - - - - - e9d5ae41 by Owen Shepherd at 2023-11-21T18:32:23-05:00 chore: Correct typo in the gitlab MR template [skip ci] - - - - - f158a8d0 by Rodrigo Mesquita at 2023-11-21T18:32:59-05:00 Improve error message when reading invalid `.target` files A `.target` file generated by ghc-toolchain or by configure can become invalid if the target representation (`Toolchain.Target`) is changed while the files are not re-generated by calling `./configure` or `ghc-toolchain` again. There is also the issue of hadrian caching the dependencies on `.target` files, which makes parsing fail when reading reading the cached value if the representation has been updated. This patch provides a better error message in both situations, moving away from a terrible `Prelude.read: no parse` error that you would get otherwise. Fixes #24199 - - - - - 955520c6 by Ben Gamari at 2023-11-21T18:33:34-05:00 users guide: Note that QuantifiedConstraints implies ExplicitForAll Fixes #24025. - - - - - 17ec3e97 by Owen Shepherd at 2023-11-22T09:37:28+01:00 fix: Change type signatures in NonEmpty export comments to reflect reality This fixes several typos in the comments of Data.List.NonEmpty export list items. - - - - - 2fd78f9f by Samuel Thibault at 2023-11-22T11:49:13-05:00 Fix the platform string for GNU/Hurd As commited in Cargo https://github.com/haskell/cabal/pull/9434 there is confusion between "gnu" and "hurd". This got fixed in Cargo, we need the converse in Hadrian. Fixes #24180 - - - - - a79960fe by Alan Zimmerman at 2023-11-22T11:49:48-05:00 EPA: Tuple Present no longer has annotation The Present constructor for a Tuple argument will never have an exact print annotation. So make this impossible. - - - - - 121c9ab7 by David Binder at 2023-11-22T21:12:29-05:00 Unify the hpc testsuites The hpc testsuite was split between testsuite/tests/hpc and the submodule libraries/hpc/test. This commit unifies the two testsuites in the GHC repository in the directory testsuite/tests/hpc. - - - - - d2733a05 by Alan Zimmerman at 2023-11-22T21:13:05-05:00 EPA: empty tup_tail has noAnn In Parser.y, the tup_tail rule had the following option | {- empty -} %shift { return [Left noAnn] } Once this works through PostProcess.hs, it means we add an extra Missing constructor if the last item was a comma. Change the annotation type to a Bool to indicate this, and use the EpAnn Anchor for the print location for the others. - - - - - fa576eb8 by Andreas Klebinger at 2023-11-24T08:29:13-05:00 Fix FMA primops generating broken assembly on x86. `genFMA3Code` assumed that we had to take extra precations to avoid overwriting the result of `getNonClobberedReg`. One of these special cases caused a bug resulting in broken assembly. I believe we don't need to hadle these cases specially at all, which means this MR simply deletes the special cases to fix the bug. Fixes #24160 - - - - - 34d86315 by Alan Zimmerman at 2023-11-24T08:29:49-05:00 EPA: Remove parenthesizeHsType This is called from PostProcess.hs, and adds spurious parens. With the looser version of exact printing we had before we could tolerate this, as they would be swallowed by the original at the same place. But with the next change (remove EpAnnNotUsed) they result in duplicates in the output. For Darwin build: Metric Increase: MultiLayerModulesTH_OneShot - - - - - 3ede659d by Vladislav Zavialov at 2023-11-26T06:43:32-05:00 Add name for -Wdeprecated-type-abstractions (#24154) This warning had no name or flag and was triggered unconditionally. Now it is part of -Wcompat. - - - - - 7902ebf8 by Alan Zimmerman at 2023-11-26T06:44:08-05:00 EPA: Remove EpAnnNotUsed We no longer need the EpAnnNotUsed constructor for EpAnn, as we can represent an unused annotation with an anchor having a EpaDelta of zero, and empty comments and annotations. This simplifies code handling annotations considerably. Updates haddock submodule Metric Increase: parsing001 - - - - - 471b2672 by Mario Blažević at 2023-11-26T06:44:48-05:00 Bumped the upper bound of text to <2.2 - - - - - d1bf25c7 by Vladislav Zavialov at 2023-11-26T11:45:49-05:00 Term variable capture (#23740) This patch changes type variable lookup rules (lookupTypeOccRn) and implicit quantification rules (filterInScope) so that variables bound in the term namespace can be captured at the type level {-# LANGUAGE RequiredTypeArguments #-} f1 x = g1 @x -- `x` used in a type application f2 x = g2 (undefined :: x) -- `x` used in a type annotation f3 x = g3 (type x) -- `x` used in an embedded type f4 x = ... where g4 :: x -> x -- `x` used in a type signature g4 = ... This change alone does not allow us to accept examples shown above, but at least it gets them past the renamer. - - - - - da863d15 by Vladislav Zavialov at 2023-11-26T11:46:26-05:00 Update Note [hsScopedTvs and visible foralls] The Note was written before GHC gained support for visible forall in types of terms. Rewrite a few sentences and use a better example. - - - - - b5213542 by Matthew Pickering at 2023-11-27T12:53:59-05:00 testsuite: Add mechanism to collect generic metrics * Generalise the metric logic by adding an additional field which allows you to specify how to query for the actual value. Previously the method of querying the baseline value was abstracted (but always set to the same thing). * This requires rejigging how the stat collection works slightly but now it's more uniform and hopefully simpler. * Introduce some new "generic" helper functions for writing generic stats tests. - collect_size ( deviation, path ) Record the size of the file as a metric - stat_from_file ( metric, deviation, path ) Read a value from the given path, and store that as a metric - collect_generic_stat ( metric, deviation, get_stat) Provide your own `get_stat` function, `lambda way: <Int>`, which can be used to establish the current value of the metric. - collect_generic_stats ( metric_info ): Like collect_generic_stat but provide the whole dictionary of metric definitions. { metric: { deviation: <Int> current: lambda way: <Int> } } * Introduce two new "size" metrics for keeping track of build products. - `size_hello_obj` - The size of `hello.o` from compiling hello.hs - `libdir` - The total size of the `libdir` folder. * Track the number of modules in the AST tests - CountDepsAst - CountDepsParser This lays the infrastructure for #24191 #22256 #17129 - - - - - 7d9a2e44 by ARATA Mizuki at 2023-11-27T12:54:39-05:00 x86: Don't require -mavx2 when using 256-bit floating-point SIMD primitives Fixes #24222 - - - - - 4e5ff6a4 by Alan Zimmerman at 2023-11-27T12:55:15-05:00 EPA: Remove SrcSpanAnn Now that we only have a single constructor for EpAnn, And it uses a SrcSpan for its location, we can do away with SrcSpanAnn completely. It only existed to wrap the original SrcSpan in a location, and provide a place for the exact print annotation. For darwin only: Metric Increase: MultiLayerModulesTH_OneShot Updates haddock submodule - - - - - e05bca39 by Krzysztof Gogolewski at 2023-11-28T08:00:55-05:00 testsuite: don't initialize testdir to '.' The test directory is removed during cleanup, if there's an interrupt that could remove the entire repository. Fixes #24219 - - - - - af881674 by Alan Zimmerman at 2023-11-28T08:01:30-05:00 EPA: Clean up mkScope in Ast.hs Now that we have HasLoc we can get rid of all the custom variants of mkScope For deb10-numa Metric Increase: libdir - - - - - 292983c8 by Ben Gamari at 2023-11-28T22:44:28-05:00 distrib: Rediscover otool and install_name_tool on Darwin In the bindist configure script we must rediscover the `otool` and `install_name_tool`s since they may be different from the build environment. Fixes #24211. - - - - - dfe1c354 by Stefan Schulze Frielinghaus at 2023-11-28T22:45:04-05:00 llvmGen: Align objects in the data section Objects in the data section may be referenced via tagged pointers. Thus, align those objects to a 4- or 8-byte boundary for 32- or 64-bit platforms, respectively. Note, this may need to be reconsidered if objects with a greater natural alignment requirement are emitted as e.g. 128-bit atomics. Fixes #24163. - - - - - f6c486c3 by Matthew Pickering at 2023-11-29T11:08:13-05:00 metrics: Widen libdir and size_hello_obj acceptance window af8816740d9b8759be1a22af8adcb5f13edeb61d shows that the libdir size can fluctuate quite significantly even when the change is quite small. Therefore we widen the acceptance window to 10%. - - - - - 99a6a49c by Alan Zimmerman at 2023-11-29T11:08:49-05:00 EPA: Clean up TC Monad Utils We no longer need the alternative variant of addLocM (addLocMA) nor wrapLocAM, wrapLocSndMA. aarch64-darwin Metric Increase: MultiLayerModulesTH_OneShot deb10-numa-slow Metric Decrease: libdir - - - - - 94fb8d47 by Alan Zimmerman at 2023-11-29T18:10:26+00:00 Match GHC, No comments in EpaDelta for comments - - - - - cbc03fa0 by Sebastian Graf at 2023-11-30T12:37:21-05:00 perf tests: Move comments into new `Note [Sensitivity to unique increment]` (#19414) And additionally to T12545, link from T8095, T13386 to this new Note. - - - - - c7623b22 by Alan Zimmerman at 2023-11-30T12:37:56-05:00 EPA: EpaDelta for comment has no comments EpaLocation is used to position things. It has two constructors, EpaSpan holding a SrcSpan, and EpaDelta with a delta position and a possible list of comments. The comment list is needed because the location in EpaDelta has no absolute information to decide which comments should be emitted before them when printing. But it is also used for specifying the position of a comment. To prevent the absurdity of a comment position having a list of comments in it, we make EpaLocation parameterisable, using comments for the normal case and a constant for within comments. Updates haddock submodule. aarch64-darwin Metric Decrease: MultiLayerModulesTH_OneShot - - - - - bd8acc0c by Krzysztof Gogolewski at 2023-11-30T12:38:32-05:00 Kind-check body of a required forall We now require that in 'forall a -> ty', ty has kind TYPE r for some r. Fixes #24176 - - - - - 010fb784 by Owen Shepherd at 2023-12-03T00:10:09-05:00 docs(NonEmpty/group): Remove incorrect haddock link quotes in code block - - - - - cda9c12d by Owen Shepherd at 2023-12-03T00:10:09-05:00 docs(NonEmpty/group): Remove cycle from group haddock example - - - - - 495265b9 by Owen Shepherd at 2023-12-03T00:10:09-05:00 docs(NonEmpty/group): Use repl haddock syntax in group docs - - - - - d134d1de by Owen Shepherd at 2023-12-03T00:10:09-05:00 docs(NonEmpty/group): Use list [] notation in group haddock - - - - - dfcf629c by Owen Shepherd at 2023-12-03T00:10:10-05:00 docs(NonEmpty/group): Specify final property of group function in haddock - - - - - cad3b734 by Owen Shepherd at 2023-12-03T00:10:10-05:00 fix: Add missing property of List.group - - - - - bad37656 by Matthew Pickering at 2023-12-03T00:10:46-05:00 testsuite: Fix T21097b test with make 4.1 (deb9) cee81370cd6ef256f66035e3116878d4cb82e28b recently added a test which failed on deb9 because the version of make was emitting the recipe failure to stdout rather than stderr. One way to fix this is to be more precise in the test about which part of the output we care about inspecting. - - - - - 5efdf421 by Matthew Pickering at 2023-12-03T00:11:21-05:00 testsuite: Track size of libdir in bytes For consistency it's better if we track all size metrics in bytes. Metric Increase: libdir - - - - - f5eb0f29 by Matthew Pickering at 2023-12-03T00:11:22-05:00 testsuite: Remove rogue trace in testsuite I accidentally left a trace in the generics metric patch. - - - - - d5610737 by Claudio Bley at 2023-12-06T16:13:33-05:00 Only exit ghci in -e mode when :add command fails Previously, when running `ghci -e ':add Sample.hs'` the process would exit with exit code 1 if the file exists and could be loaded. Fixes #24115 - - - - - 0f0c53a5 by Vladislav Zavialov at 2023-12-06T16:14:09-05:00 T2T in Patterns (#23739) This patch implements the T2T (term-to-type) transformation in patterns. Patterns that are checked against a visible forall can now be written without the `type` keyword: \(type t) (x :: t) -> ... -- old \t (x :: t) -> ... -- new The `t` binder is parsed and renamed as a term pattern (Pat), but then undergoes a conversion to a type pattern (HsTyPat). See the new function pat_to_type_pat in compiler/GHC/Tc/Gen/Pat.hs - - - - - 10a1a6c6 by Sebastian Graf at 2023-12-06T16:14:45-05:00 Pmc: Fix SrcLoc and warning for incomplete irrefutable pats (#24234) Before, the source location would point at the surrounding function definition, causing the confusion in #24234. I also took the opportunity to introduce a new `LazyPatCtx :: HsMatchContext _` to make the warning message say "irrefutable pattern" instead of "pattern binding". - - - - - 36b9a38c by Matthew Pickering at 2023-12-06T16:15:21-05:00 libraries: Bump filepath to 1.4.200.1 and unix to 2.8.4.0 Updates filepath submodule Updates unix submodule Fixes #24240 - - - - - 91ff0971 by Matthew Pickering at 2023-12-06T16:15:21-05:00 Submodule linter: Allow references to tags We modify the submodule linter so that if the bumped commit is a specific tag then the commit is accepted. Fixes #24241 - - - - - 86f652dc by Zubin Duggal at 2023-12-06T16:15:21-05:00 hadrian: set -Wno-deprecations for directory and Win32 The filepath bump to 1.4.200.1 introduces a deprecation warning. See https://gitlab.haskell.org/ghc/ghc/-/issues/24240 https://github.com/haskell/filepath/pull/206 - - - - - 7ac6006e by Sylvain Henry at 2023-12-06T16:16:02-05:00 Zap OccInfo on case binders during StgCse #14895 #24233 StgCse can revive dead binders: case foo of dead { Foo x y -> Foo x y; ... } ===> case foo of dead { Foo x y -> dead; ... } -- dead is no longer dead So we must zap occurrence information on case binders. Fix #14895 and #24233 - - - - - 57c391c4 by Sebastian Graf at 2023-12-06T16:16:37-05:00 Cpr: Turn an assertion into a check to deal with some dead code (#23862) See the new `Note [Dead code may contain type confusions]`. Fixes #23862. - - - - - c1c8abf8 by Zubin Duggal at 2023-12-08T02:25:07-05:00 testsuite: add test for #23944 - - - - - 6329d308 by Zubin Duggal at 2023-12-08T02:25:07-05:00 driver: Only run a dynamic-too pipeline if object files are going to be generated Otherwise we run into a panic in hscMaybeWriteIface: "Unexpected DT_Dyn state when writing simple interface" when dynamic-too is enabled We could remove the panic and just write the interface even if the state is `DT_Dyn`, but it seems pointless to run the pipeline twice when `hscMaybeWriteIface` is already designed to write both `hi` and `dyn_hi` files if dynamic-too is enabled. Fixes #23944. - - - - - 28811f88 by Simon Peyton Jones at 2023-12-08T05:47:18-05:00 Improve duplicate elimination in SpecConstr This partially fixes #24229. See the new Note [Pattern duplicate elimination] in SpecConstr - - - - - fec7894f by Simon Peyton Jones at 2023-12-08T05:47:18-05:00 Make SpecConstr deal with casts better This patch does two things, to fix #23209: * It improves SpecConstr so that it no longer quantifies over coercion variables. See Note [SpecConstr and casts] * It improves the rule matcher to deal nicely with the case where the rule does not quantify over coercion variables, but the the template has a cast in it. See Note [Casts in the template] - - - - - 8db8d2fd by Zubin Duggal at 2023-12-08T05:47:54-05:00 driver: Don't lose track of nodes when we fail to resolve cycles The nodes that take part in a cycle should include both hs-boot and hs files, but when we fail to resolve a cycle, we were only counting the nodes from the graph without boot files. Fixes #24196 - - - - - c5b4efd3 by Zubin Duggal at 2023-12-08T05:48:30-05:00 testsuite: Skip MultiLayerModulesTH_OneShot on darwin See #24177 - - - - - fae472a9 by Wendao Lee at 2023-12-08T05:49:12-05:00 docs(Data.Char):Add more detailed descriptions for some functions Related changed function's docs: -GHC.Unicode.isAlpha -GHC.Unicode.isPrint -GHC.Unicode.isAlphaNum Add more details for what the function will return. Co-authored-by: Bodigrim <andrew.lelechenko at gmail.com> - - - - - ca7510e4 by Malik Ammar Faisal at 2023-12-08T05:49:55-05:00 Fix float parsing in GHC Cmm Lexer Add test case for bug #24224 - - - - - d8baa1bd by Simon Peyton Jones at 2023-12-08T15:40:37+00:00 Take care when simplifying unfoldings This MR fixes a very subtle bug exposed by #24242. See Note [Environment for simplLetUnfolding]. I also updated a bunch of Notes on shadowing - - - - - 03ca551d by Simon Peyton Jones at 2023-12-08T15:54:50-05:00 Comments only in FloatIn Relevant to #3458 - - - - - 50c78779 by Simon Peyton Jones at 2023-12-08T15:54:50-05:00 Comments only in SpecConstr - - - - - 9431e195 by Simon Peyton Jones at 2023-12-08T15:54:50-05:00 Add test for #22238 - - - - - d9e4c597 by Vladislav Zavialov at 2023-12-11T04:19:34-05:00 Make forall a keyword (#23719) Before this change, GHC used to accept `forall` as a term-level identifier: -- from constraints-0.13 forall :: forall p. (forall a. Dict (p a)) -> Dict (Forall p) forall d = ... Now it is a parse error. The -Wforall-identifier warning has served its purpose and is now a deprecated no-op. - - - - - 58d56644 by Zubin Duggal at 2023-12-11T04:20:10-05:00 driver: Ensure we actually clear the interactive context before reloading Previously we called discardIC, but immediately after set the session back to an old HscEnv that still contained the IC Partially addresses #24107 Fixes #23405 - - - - - 8e5745a0 by Zubin Duggal at 2023-12-11T04:20:10-05:00 driver: Ensure we force the lookup of old build artifacts before returning the build plan This prevents us from retaining all previous build artifacts in memory until a recompile finishes, instead only retaining the exact artifacts we need. Fixes #24118 - - - - - 105c370c by Zubin Duggal at 2023-12-11T04:20:10-05:00 testsuite: add test for #24118 and #24107 MultiLayerModulesDefsGhci was not able to catch the leak because it uses :l which discards the previous environment. Using :r catches both of these leaks - - - - - e822ff88 by Zubin Duggal at 2023-12-11T04:20:10-05:00 compiler: Add some strictness annotations to ImportSpec and related constructors This prevents us from retaining entire HscEnvs. Force these ImportSpecs when forcing the GlobalRdrEltX Adds an NFData instance for Bag Fixes #24107 - - - - - 522c12a4 by Zubin Duggal at 2023-12-11T04:20:10-05:00 compiler: Force IfGlobalRdrEnv in NFData instance. - - - - - 188b280d by Arnaud Spiwack at 2023-12-11T15:33:31+01:00 LinearTypes => MonoLocalBinds - - - - - 8e0446df by Arnaud Spiwack at 2023-12-11T15:44:28+01:00 Linear let and where bindings For expediency, the initial implementation of linear types in GHC made it so that let and where binders would always be considered unrestricted. This was rather unpleasant, and probably a big obstacle to adoption. At any rate, this was not how the proposal was designed. This patch fixes this infelicity. It was surprisingly difficult to build, which explains, in part, why it took so long to materialise. As of this patch, let or where bindings marked with %1 will be linear (respectively %p for an arbitrary multiplicity p). Unmarked let will infer their multiplicity. Here is a prototypical example of program that used to be rejected and is accepted with this patch: ```haskell f :: A %1 -> B g :: B %1 -> C h :: A %1 -> C h x = g y where y = f x ``` Exceptions: - Recursive let are unrestricted, as there isn't a clear semantics of what a linear recursive binding would be. - Destructive lets with lazy bindings are unrestricted, as their desugaring isn't linear (see also #23461). - (Strict) destructive lets with inferred polymorphic type are unrestricted. Because the desugaring isn't linear (See #18461 down-thread). Closes #18461 and #18739 Co-authored-by: @jackohughes - - - - - effa7e2d by Matthew Craven at 2023-12-12T04:37:20-05:00 Introduce `dataToTagSmall#` primop (closes #21710) ...and use it to generate slightly better code when dataToTag# is used at a "small data type" where there is no need to mess with "is_too_big_tag" or potentially look at an info table. Metric Decrease: T18304 - - - - - 35c7aef6 by Matthew Craven at 2023-12-12T04:37:20-05:00 Fix formatting of Note [alg-alt heap check] - - - - - 7397c784 by Oleg Grenrus at 2023-12-12T04:37:56-05:00 Allow untyped brackets in typed splices and vice versa. Resolves #24190 Apparently the check was essentially always (as far as I can trace back: d0d47ba76f8f0501cf3c4966bc83966ab38cac27), and while it does catch some mismatches, the type-checker will catch them too. OTOH, it prevents writing completely reasonable programs. - - - - - 32d208e1 by Vladislav Zavialov at 2023-12-12T20:41:36+03:00 EPA: Match changes to LHsToken removal - - - - - a3ee3b99 by Moritz Angermann at 2023-12-12T19:50:58-05:00 Drop hard Xcode dependency XCODE_VERSION calls out to `xcodebuild`, which is only available when having `Xcode` installed. The CommandLineTools are not sufficient. To install Xcode, you must have an apple id to download the Xcode.xip from apple. We do not use xcodebuild anywhere in our build explicilty. At best it appears to be a proxy for checking the linker or the compiler. These should rather be done with ``` xcrun ld -version ``` or similar, and not by proxy through Xcode. The CLR should be sufficient for building software on macOS. - - - - - 1c9496e0 by Vladislav Zavialov at 2023-12-12T19:51:34-05:00 docs: update information on RequiredTypeArguments Update the User's Guide and Release Notes to account for the recent progress in the implementation of RequiredTypeArguments. - - - - - d0b17576 by Ben Gamari at 2023-12-13T06:33:37-05:00 rts/eventlog: Fix off-by-one in assertion Previously we failed to account for the NULL terminator `postString` asserted that there is enough room in the buffer for the string. - - - - - a10f9b9b by Ben Gamari at 2023-12-13T06:33:37-05:00 rts/eventlog: Honor result of ensureRoomForVariableEvent is Previously we would keep plugging along, even if isn't enough room for the event. - - - - - 0e0f41c0 by Ben Gamari at 2023-12-13T06:33:37-05:00 rts/eventlog: Avoid truncating event sizes Previously ensureRoomForVariableEvent would truncate the desired size to 16-bits, resulting in #24197. Fixes #24197. - - - - - 64e724c8 by Artin Ghasivand at 2023-12-13T06:34:20-05:00 Remove the "Derived Constraint" argument of TcPluginSolver, docs - - - - - fe6d97dd by Vladislav Zavialov at 2023-12-13T06:34:56-05:00 EPA: Move tokens into GhcPs extension fields (#23447) Summary of changes * Remove Language.Haskell.Syntax.Concrete * Move all tokens into GhcPs extension fields (LHsToken -> EpToken) * Create new TTG extension fields as needed * Drop the MultAnn wrapper Updates the haddock submodule. Co-authored-by: Alan Zimmerman <alan.zimm at gmail.com> - - - - - 8106e695 by Zubin Duggal at 2023-12-13T06:35:34-05:00 testsuite: use copy_files in T23405 This prevents the tree from being dirtied when the file is modified. - - - - - ed0e4099 by Bryan Richter at 2023-12-14T04:30:53-05:00 Document ghc package's PVP-noncompliance This changes nothing, it just makes the status quo explicit. - - - - - 8bef8d9f by Luite Stegeman at 2023-12-14T04:31:33-05:00 JS: Mark spurious CI failures js_fragile(24259) This marks the spurious test failures on the JS platform as js_fragile(24259), so we don't hold up merge requests while fixing the underlying issues. See #24259 - - - - - 1c79526a by Finley McIlwaine at 2023-12-15T12:24:40-08:00 Late plugins - - - - - 000c3302 by Finley McIlwaine at 2023-12-15T12:24:40-08:00 withTiming on LateCCs and late plugins - - - - - be4551ac by Finley McIlwaine at 2023-12-15T12:24:40-08:00 add test for late plugins - - - - - 7c29da9f by Finley McIlwaine at 2023-12-15T12:24:40-08:00 Document late plugins - - - - - 9a52ae46 by Ben Gamari at 2023-12-20T07:07:26-05:00 Fix thunk update ordering Previously we attempted to ensure soundness of concurrent thunk update by synchronizing on the access of the thunk's info table pointer field. This was believed to be sufficient since the indirectee (which may expose a closure allocated by another core) would not be examined until the info table pointer update is complete. However, it turns out that this can result in data races in the presence of multiple threads racing a update a single thunk. For instance, consider this interleaving under the old scheme: Thread A Thread B --------- --------- t=0 Enter t 1 Push update frame 2 Begin evaluation 4 Pause thread 5 t.indirectee=tso 6 Release t.info=BLACKHOLE 7 ... (e.g. GC) 8 Resume thread 9 Finish evaluation 10 Relaxed t.indirectee=x 11 Load t.info 12 Acquire fence 13 Inspect t.indirectee 14 Release t.info=BLACKHOLE Here Thread A enters thunk `t` but is soon paused, resulting in `t` being lazily blackholed at t=6. Then, at t=10 Thread A finishes evaluation and updates `t.indirectee` with a relaxed store. Meanwhile, Thread B enters the blackhole. Under the old scheme this would introduce an acquire-fence but this would only synchronize with Thread A at t=6. Consequently, the result of the evaluation, `x`, is not visible to Thread B, introducing a data race. We fix this by treating the `indirectee` field as we do all other mutable fields. This means we must always access this field with acquire-loads and release-stores. See #23185. - - - - - f4b53538 by Vladislav Zavialov at 2023-12-20T07:08:02-05:00 docs: Fix link to 051-ghc-base-libraries.rst The proposal is no longer available at the previous URL. - - - - - f7e21fab by Matthew Pickering at 2023-12-21T14:57:40+00:00 hadrian: Build all executables in bin/ folder In the end the bindist creation logic copies them all into the bin folder. There is no benefit to building a specific few binaries in the lib/bin folder anymore. This also removes the ad-hoc logic to copy the touchy and unlit executables from stage0 into stage1. It takes <1s to build so we might as well just build it. - - - - - 0038d052 by Zubin Duggal at 2023-12-22T23:28:00-05:00 testsuite: mark jspace as fragile on i386. This test has been flaky for some time and has been failing consistently on i386-linux since 8e0446df landed. See #24261 - - - - - dfd670a0 by Ben Bellick at 2023-12-24T10:10:31-05:00 Deprecate -ddump-json and introduce -fdiagnostics-as-json Addresses #19278 This commit deprecates the underspecified -ddump-json flag and introduces a newer, well-specified flag -fdiagnostics-as-json. Also included is a JSON schema as part of the documentation. The -ddump-json flag will be slated for removal shortly after this merge. - - - - - 609e6225 by Ben Bellick at 2023-12-24T10:10:31-05:00 Deprecate -ddump-json and introduce -fdiagnostics-as-json Addresses #19278 This commit deprecates the underspecified -ddump-json flag and introduces a newer, well-specified flag -fdiagnostics-as-json. Also included is a JSON schema as part of the documentation. The -ddump-json flag will be slated for removal shortly after this merge. - - - - - 865513b2 by Ömer Sinan Ağacan at 2023-12-24T10:11:13-05:00 Fix BNF in user manual 6.6.8.2: formal syntax for instance declarations - - - - - c247b6be by Zubin Duggal at 2023-12-25T16:01:23-05:00 docs: document permissibility of -XOverloadedLabels (#24249) Document the permissibility introduced by https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0170-unrestricted-overloadedlabels.rst - - - - - e5b7eb59 by Ömer Sinan Ağacan at 2023-12-25T16:02:03-05:00 Fix a code block syntax in user manual sec. 6.8.8.6 - - - - - 2db11c08 by Ben Gamari at 2023-12-29T15:35:48-05:00 genSym: Reimplement via CAS on 32-bit platforms Previously the remaining use of the C implementation on 32-bit platforms resulted in a subtle bug, #24261. This was due to the C object (which used the RTS's `atomic_inc64` macro) being compiled without `-threaded` yet later being used in a threaded compiler. Side-step this issue by using the pure Haskell `genSym` implementation on all platforms. This required implementing `fetchAddWord64Addr#` in terms of CAS on 64-bit platforms. - - - - - 19328a8c by Xiaoyan Ren at 2023-12-29T15:36:30-05:00 Do not color the diagnostic code in error messages (#24172) - - - - - 685b467c by Krzysztof Gogolewski at 2023-12-29T15:37:06-05:00 Enforce that bindings of implicit parameters are lifted Fixes #24298 - - - - - bc4d67b7 by Matthew Craven at 2023-12-31T06:15:42-05:00 StgToCmm: Detect some no-op case-continuations ...and generate no code for them. Fixes #24264. - - - - - 5b603139 by Krzysztof Gogolewski at 2023-12-31T06:16:18-05:00 Revert "testsuite: mark jspace as fragile on i386." This reverts commit 0038d052c8c80b4b430bb2aa1c66d5280be1aa95. The atomicity bug should be fixed by !11802. - - - - - d55216ad by Krzysztof Gogolewski at 2024-01-01T12:05:49-05:00 Refactor: store [[PrimRep]] rather than [Type] in STG StgConApp stored a list of types. This list was used exclusively during unarisation of unboxed sums (mkUbxSum). However, this is at a wrong level of abstraction: STG shouldn't be concerned with Haskell types, only PrimReps. Update the code to store a [[PrimRep]]. Also, there's no point in storing this list when we're not dealing with an unboxed sum. - - - - - 8b340bc7 by Ömer Sinan Ağacan at 2024-01-01T12:06:29-05:00 Kind signatures docs: mention that they're allowed in newtypes - - - - - 989bf8e5 by Zubin Duggal at 2024-01-03T20:08:47-05:00 ci: Ensure we use the correct bindist name for the test artifact when generating release ghcup metadata Fixes #24268 - - - - - 89299a89 by Krzysztof Gogolewski at 2024-01-03T20:09:23-05:00 Refactor: remove calls to typePrimRepArgs The function typePrimRepArgs is just a thin wrapper around typePrimRep, adding a VoidRep if the list is empty. However, in StgToByteCode, we were discarding that VoidRep anyway, so there's no point in calling it. - - - - - c7be0c68 by mmzk1526 at 2024-01-03T20:10:07-05:00 Use "-V" for alex version check for better backward compatibility Fixes #24302. In recent versions of alex, "-v" is used for "--verbose" instead of "-version". - - - - - 67dbcc0a by Krzysztof Gogolewski at 2024-01-05T02:07:18-05:00 Fix VoidRep handling in ghci debugger 'go' inside extractSubTerms was giving a bad result given a VoidRep, attempting to round towards the next multiple of 0. I don't understand much about the debugger but the code should be better than it was. Fixes #24306 - - - - - 90ea574e by Krzysztof Gogolewski at 2024-01-05T02:07:54-05:00 VoidRep-related refactor * In GHC.StgToByteCode, replace bcIdPrimId with idPrimRep, bcIdArgRep with idArgRep, atomPrimRep with stgArgRep1. All of them were duplicates. * In GHC.Stg.Unarise, we were converting a PrimRep to a Type and back to PrimRep. Remove the calls to primRepToType and typePrimRep1 which cancel out. * In GHC.STG.Lint, GHC.StgToCmm, GHC.Types.RepType we were filtering out VoidRep from the result of typePrimRep. But typePrimRep never returns VoidRep - remove the filtering. - - - - - eaf72479 by brian at 2024-01-06T23:03:09-05:00 Add unaligned Addr# primops Implements CLC proposal #154: https://github.com/haskell/core-libraries-committee/issues/154 * add unaligned addr primops * add tests * accept tests * add documentation * fix js primops * uncomment in access ops * use Word64 in tests * apply suggestions * remove extra file * move docs * remove random options * use setByteArray# primop * better naming * update base-exports test * add base-exports for other architectures - - - - - d471d445 by Krzysztof Gogolewski at 2024-01-06T23:03:47-05:00 Remove VoidRep from PrimRep, introduce PrimOrVoidRep This introduces data PrimOrVoidRep = VoidRep | NVRep PrimRep changes typePrimRep1 to return PrimOrVoidRep, and adds a new function typePrimRepU to be used when the argument is definitely non-void. Details in Note [VoidRep] in GHC.Types.RepType. Fixes #19520 - - - - - 48720a07 by Matthew Craven at 2024-01-08T18:57:36-05:00 Apply Note [Sensitivity to unique increment] to LargeRecord - - - - - 9e2e180f by Sebastian Graf at 2024-01-08T18:58:13-05:00 Debugging: Add diffUFM for convenient diffing between UniqFMs - - - - - 948f3e35 by Sebastian Graf at 2024-01-08T18:58:13-05:00 Rename Opt_D_dump_stranal to Opt_D_dump_dmdanal ... and Opt_D_dump_str_signatures to Opt_D_dump_dmd_signatures - - - - - 4e217e3e by Sebastian Graf at 2024-01-08T18:58:13-05:00 Deprecate -ddump-stranal and -ddump-str-signatures ... and suggest -ddump-dmdanal and -ddump-dmd-signatures instead - - - - - 6c613c90 by Sebastian Graf at 2024-01-08T18:58:13-05:00 Move testsuite/tests/stranal to testsuite/tests/dmdanal A separate commit so that the rename is obvious to Git(Lab) - - - - - c929f02b by Sebastian Graf at 2024-01-08T18:58:13-05:00 CoreSubst: Stricten `substBndr` and `cloneBndr` Doing so reduced allocations of `cloneBndr` by about 25%. ``` T9233(normal) ghc/alloc 672,488,656 663,083,216 -1.4% GOOD T9675(optasm) ghc/alloc 423,029,256 415,812,200 -1.7% geo. mean -0.1% minimum -1.7% maximum +0.1% ``` Metric Decrease: T9233 - - - - - e3ca78f3 by Krzysztof Gogolewski at 2024-01-10T17:35:59-05:00 Deprecate -Wsemigroup This warning was used to prepare for Semigroup becoming a superclass of Monoid, and for (<>) being exported from Prelude. This happened in GHC 8.4 in 8ae263ceb3566 and feac0a3bc69fd3. The leftover logic for (<>) has been removed in GHC 9.8, 4d29ecdfcc79. Now the warning does nothing at all and can be deprecated. - - - - - 08d14925 by amesgen at 2024-01-10T17:36:42-05:00 WASM metadata: use correct GHC version - - - - - 7a808419 by Xiaoyan Ren at 2024-01-10T17:37:24-05:00 Allow SCC declarations in TH (#24081) - - - - - 28827c51 by Xiaoyan Ren at 2024-01-10T17:37:24-05:00 Fix prettyprinting of SCC pragmas - - - - - ae9cc1a8 by Matthew Craven at 2024-01-10T17:38:01-05:00 Fix loopification in the presence of void arguments This also removes Note [Void arguments in self-recursive tail calls], which was just misleading. It's important to count void args both in the function's arity and at the call site. Fixes #24295. - - - - - b718b145 by Zubin Duggal at 2024-01-10T17:38:36-05:00 testsuite: Teach testsuite driver about c++ sources - - - - - 09cb57ad by Zubin Duggal at 2024-01-10T17:38:36-05:00 driver: Set -DPROFILING when compiling C++ sources with profiling Earlier, we used to pass all preprocessor flags to the c++ compiler. This meant that -DPROFILING was passed to the c++ compiler because it was a part of C++ flags However, this was incorrect and the behaviour was changed in 8ff3134ed4aa323b0199ad683f72165e51a59ab6. See #21291. But that commit exposed this bug where -DPROFILING was no longer being passed when compiling c++ sources. The fix is to explicitly include -DPROFILING in `opt_cxx` when profiling is enabled to ensure we pass the correct options for the way to both C and C++ compilers Fixes #24286 - - - - - 2cf9dd96 by Zubin Duggal at 2024-01-10T17:38:36-05:00 testsuite: rename objcpp -> objcxx To avoid confusion with C Pre Processsor - - - - - af6932d6 by Simon Peyton Jones at 2024-01-10T17:39:12-05:00 Make TYPE and CONSTRAINT not-apart Issue #24279 showed up a bug in the logic in GHC.Core.Unify.unify_ty which is supposed to make TYPE and CONSTRAINT be not-apart. Easily fixed. - - - - - 4a39b5ff by Zubin Duggal at 2024-01-10T17:39:48-05:00 ci: Fix typo in mk_ghcup_metadata.py There was a missing colon in the fix to #24268 in 989bf8e53c08eb22de716901b914b3607bc8dd08 - - - - - 13503451 by Zubin Duggal at 2024-01-10T17:40:24-05:00 release-ci: remove release-x86_64-linux-deb11-release+boot_nonmoving_gc job There is no reason to have this release build or distribute this variation. This configuration is for testing purposes only. - - - - - afca46a4 by Sebastian Graf at 2024-01-10T17:41:00-05:00 Parser: Add a Note detailing why we need happy's `error` to implement layout - - - - - eaf8a06d by Krzysztof Gogolewski at 2024-01-11T00:43:17+01:00 Turn -Wtype-equality-out-of-scope on by default Also remove -Wnoncanonical-{monoid,monad}-instances from -Wcompat, since they are enabled by default. Refresh wcompat-warnings/ test with new -Wcompat warnings. Part of #24267 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 42bee5aa by Sebastian Graf at 2024-01-12T21:16:21-05:00 Arity: Require called *exactly once* for eta exp with -fpedantic-bottoms (#24296) In #24296, we had a program in which we eta expanded away an error despite the presence of `-fpedantic-bottoms`. This was caused by turning called *at least once* lambdas into one-shot lambdas, while with `-fpedantic-bottoms` it is only sound to eta expand over lambdas that are called *exactly* once. An example can be found in `Note [Combining arity type with demand info]`. Fixes #24296. - - - - - 7e95f738 by Andreas Klebinger at 2024-01-12T21:16:57-05:00 Aarch64: Enable -mfma by default. Fixes #24311 - - - - - e43788d0 by Jason Shipman at 2024-01-14T12:47:38-05:00 Add more instances for Compose: Fractional, RealFrac, Floating, RealFloat CLC proposal #226 https://github.com/haskell/core-libraries-committee/issues/226 - - - - - ae6d8cd2 by Sebastian Graf at 2024-01-14T12:48:15-05:00 Pmc: COMPLETE pragmas associated with Family TyCons should apply to representation TyCons as well (#24326) Fixes #24326. - - - - - c5fc7304 by sheaf at 2024-01-15T14:15:29-05:00 Use lookupOccRn_maybe in TH.lookupName When looking up a value, we want to be able to find both variables and record fields. So we should not use the lookupSameOccRn_maybe function, as we can't know ahead of time which record field namespace a record field with the given textual name will belong to. Fixes #24293 - - - - - da908790 by Krzysztof Gogolewski at 2024-01-15T14:16:05-05:00 Make the build more strict on documentation errors * Detect undefined labels. This can be tested by adding :ref:`nonexistent` to a documentation rst file; attempting to build docs will fail. Fixed the undefined label in `9.8.1-notes.rst`. * Detect errors. While we have plenty of warnings, we can at least enforce that Sphinx does not report errors. Fixed the error in `required_type_arguments.rst`. Unrelated change: I have documented that the `-dlint` enables `-fcatch-nonexhaustive-cases`, as can be verified by checking `enableDLint`. - - - - - 5077416e by Javier Sagredo at 2024-01-16T15:40:06-05:00 Profiling: Adds an option to not start time profiling at startup Using the functionality provided by d89deeba47ce04a5198a71fa4cbc203fe2c90794, this patch creates a new rts flag `--no-automatic-time-samples` which disables the time profiling when starting a program. It is then expected that the user starts it whenever it is needed. Fixes #24337 - - - - - 5776008c by Matthew Pickering at 2024-01-16T15:40:42-05:00 eventlog: Fix off-by-one error in postIPE We were missing the extra_comma from the calculation of the size of the payload of postIPE. This was causing assertion failures when the event would overflow the buffer by one byte, as ensureRoomForVariable event would report there was enough space for `n` bytes but then we would write `n + 1` bytes into the buffer. Fixes #24287 - - - - - 66dc09b1 by Simon Peyton Jones at 2024-01-16T15:41:18-05:00 Improve SpecConstr (esp nofib/spectral/ansi) This MR makes three improvements to SpecConstr: see #24282 * It fixes an outright (and recently-introduced) bug in `betterPat`, which was wrongly forgetting to compare the lengths of the argument lists. * It enhances ConVal to inclue a boolean for work-free-ness, so that the envt can contain non-work-free constructor applications, so that we can do more: see Note [ConVal work-free-ness] * It rejigs `subsumePats` so that it doesn't reverse the list. This can make a difference because, when patterns overlap, we arbitrarily pick the first. There is no "right" way, but this retains the old pre-subsumePats behaviour, thereby "fixing" the regression in #24282. Nofib results +======================================== | spectral/ansi -21.14% | spectral/hartel/comp_lab_zift -0.12% | spectral/hartel/parstof +0.09% | spectral/last-piece -2.32% | spectral/multiplier +6.03% | spectral/para +0.60% | spectral/simple -0.26% +======================================== | geom mean -0.18% +---------------------------------------- The regression in `multiplier` is sad, but it simply replicates GHC's previous behaviour (e.g. GHC 9.6). - - - - - 65da79b3 by Matthew Pickering at 2024-01-16T15:41:54-05:00 hadrian: Reduce Cabal verbosity The comment claims that `simpleUserHooks` decrease verbosity, and it does, but only for the `postConf` phase. The other phases are too verbose with `-V`. At the moment > 5000 lines of the build log are devoted to output from `cabal copy`. So I take the simple approach and just decrease the verbosity level again. If the output of `postConf` is essential then it would be better to implement our own `UserHooks` which doesn't decrease the verbosity for `postConf`. Fixes #24338 - - - - - 16414d7d by Matthew Pickering at 2024-01-17T10:54:59-05:00 Stop retaining old ModGuts throughout subsequent simplifier phases Each phase of the simplifier typically rewrites the majority of ModGuts, so we want to be able to release the old ModGuts as soon as possible. `name_ppr_ctxt` lives throught the whole optimiser phase and it was retaining a reference to `ModGuts`, so we were failing to release the old `ModGuts` until the end of the phase (potentially doubling peak memory usage for that particular phase). This was discovered using eras profiling (#24332) Fixes #24328 - - - - - 7f0879e1 by Matthew Pickering at 2024-01-17T10:55:35-05:00 Update nofib submodule - - - - - 320454d3 by Cheng Shao at 2024-01-17T23:02:40+00:00 ci: bump ci-images for updated wasm image - - - - - 2eca52b4 by Cheng Shao at 2024-01-17T23:06:44+00:00 base: treat all FDs as "nonblocking" on wasm On posix platforms, when performing read/write on FDs, we check the nonblocking flag first. For FDs without this flag (e.g. stdout), we call fdReady() first, which in turn calls poll() to wait for I/O to be available on that FD. This is problematic for wasm32-wasi: although select()/poll() is supported via the poll_oneoff() wasi syscall, that syscall is rather heavyweight and runtime behavior differs in different wasi implementations. The issue is even worse when targeting browsers, given there's no satisfactory way to implement async I/O as a synchronous syscall, so existing JS polyfills for wasi often give up and simply return ENOSYS. Before we have a proper I/O manager that avoids poll_oneoff() for async I/O on wasm, this patch improves the status quo a lot by merely pretending all FDs are "nonblocking". Read/write on FDs will directly invoke read()/write(), which are much more reliably handled in existing wasi implementations, especially those in browsers. Fixes #23275 and the following test cases: T7773 isEOF001 openFile009 T4808 cgrun025 Approved by CLC proposal #234: https://github.com/haskell/core-libraries-committee/issues/234 - - - - - 83c6c710 by Andrew Lelechenko at 2024-01-18T05:21:49-05:00 base: clarify how to disable warnings about partiality of Data.List.{head,tail} - - - - - c4078f2f by Simon Peyton Jones at 2024-01-18T05:22:25-05:00 Fix four bug in handling of (forall cv. body_ty) These bugs are all described in #24335 It's not easy to provoke the bug, hence no test case. - - - - - 119586ea by Alexis King at 2024-01-19T00:08:00-05:00 Always refresh profiling CCSes after running pending initializers Fixes #24171. - - - - - 9718d970 by Oleg Grenrus at 2024-01-19T00:08:36-05:00 Set default-language: GHC2021 in ghc library Go through compiler/ sources, and remove all BangPatterns (and other GHC2021 enabled extensions in these files). - - - - - 3ef71669 by Matthew Pickering at 2024-01-19T21:55:16-05:00 testsuite: Remove unused have_library function Also remove the hence unused testsuite option `--test-package-db`. Fixes #24342 - - - - - 5b7fa20c by Jade at 2024-01-19T21:55:53-05:00 Fix Spelling in the compiler Tracking: #16591 - - - - - 09875f48 by Matthew Pickering at 2024-01-20T12:20:44-05:00 testsuite: Implement `isInTreeCompiler` in a more robust way Just a small refactoring to avoid redundantly specifying the same strings in two different places. - - - - - 0d12b987 by Jade at 2024-01-20T12:21:20-05:00 Change maintainer email from cvs-ghc at haskell.org to ghc-devs at haskell.org. Fixes #22142 - - - - - eebdd316 by Apoorv Ingle at 2024-01-23T13:49:12+00:00 Changes for haskell/haddock#18324 - - - - - 1fa1c00c by Jade at 2024-01-23T19:17:03-05:00 Enhance Documentation of functions exported by Data.Function This patch aims to improve the documentation of functions exported in Data.Function Tracking: #17929 Fixes: #10065 - - - - - ab47a43d by Jade at 2024-01-23T19:17:39-05:00 Improve documentation of hGetLine. - Add explanation for whether a newline is returned - Add examples Fixes #14804 - - - - - dd4af0e5 by Cheng Shao at 2024-01-23T19:18:17-05:00 Fix genapply for cross-compilation by nuking fragile CPP logic This commit fixes incorrectly built genapply when cross compiling (#24347) by nuking all fragile CPP logic in it from the orbit. All target-specific info are now read from DerivedConstants.h at runtime, see added note for details. Also removes a legacy Makefile and adds haskell language server support for genapply. - - - - - 0cda2b8b by Cheng Shao at 2024-01-23T19:18:17-05:00 rts: enable wasm32 register mapping The wasm backend didn't properly make use of all Cmm global registers due to #24347. Now that it is fixed, this patch re-enables full register mapping for wasm32, and we can now generate smaller & faster wasm modules that doesn't always spill arguments onto the stack. Fixes #22460 #24152. - - - - - 0325a6e5 by Greg Steuck at 2024-01-24T01:29:44-05:00 Avoid utf8 in primops.txt.pp comments They don't make it through readFile' without explicitly setting the encoding. See https://gitlab.haskell.org/ghc/ghc/-/issues/17755 - - - - - 1aaf0bd8 by David Binder at 2024-01-24T01:30:20-05:00 Bump hpc and hpc-bin submodule Bump hpc to 0.7.0.1 Bump hpc-bin to commit d1780eb2 - - - - - e693a4e8 by Ben Gamari at 2024-01-24T01:30:56-05:00 testsuite: Ignore stderr in T8089 Otherwise spurious "Killed: 9" messages to stderr may cause the test to fail. Fixes #24361. - - - - - a40f4ab2 by sheaf at 2024-01-24T14:04:33-05:00 Fix FMA instruction on LLVM We were emitting the wrong instructions for fused multiply-add operations on LLVM: - the instruction name is "llvm.fma.f32" or "llvm.fma.f64", not "fmadd" - LLVM does not support other instructions such as "fmsub"; instead we implement these by flipping signs of some arguments - the instruction is an LLVM intrinsic, which requires handling it like a normal function call instead of a machine instruction Fixes #24223 - - - - - 69abc786 by Andrei Borzenkov at 2024-01-24T14:05:09-05:00 Add changelog entry for renaming tuples from (,,...,,) to Tuple<n> (24291) - - - - - 0ac8f385 by Cheng Shao at 2024-01-25T00:27:48-05:00 compiler: remove unused GHC.Linker module The GHC.Linker module is empty and unused, other than as a hack for the make build system. We can remove it now that make is long gone; the note is moved to GHC.Linker.Loader instead. - - - - - 699da01b by Hécate Moonlight at 2024-01-25T00:28:27-05:00 Clarification for newtype constructors when using `coerce` - - - - - b2d8cd85 by Matt Walker at 2024-01-26T09:50:08-05:00 Fix #24308 Add tests for semicolon separated where clauses - - - - - 0da490a1 by Ben Gamari at 2024-01-26T17:34:41-05:00 hsc2hs: Bump submodule - - - - - 3f442fd2 by Ben Gamari at 2024-01-26T17:34:41-05:00 Bump containers submodule to 0.7 - - - - - 82a1c656 by Sebastian Nagel at 2024-01-29T02:32:40-05:00 base: with{Binary}File{Blocking} only annotates own exceptions Fixes #20886 This ensures that inner, unrelated exceptions are not misleadingly annotated with the opened file. - - - - - 9294a086 by Andreas Klebinger at 2024-01-29T02:33:15-05:00 Fix fma warning when using llvm on aarch64. On aarch64 fma is always on so the +fma flag doesn't exist for that target. Hence no need to try and pass +fma to llvm. Fixes #24379 - - - - - ced2e731 by sheaf at 2024-01-29T17:27:12-05:00 No shadowing warnings for NoFieldSelector fields This commit ensures we don't emit shadowing warnings when a user shadows a field defined with NoFieldSelectors. Fixes #24381 - - - - - 8eeadfad by Patrick at 2024-01-29T17:27:51-05:00 Fix bug wrong span of nested_doc_comment #24378 close #24378 1. Update the start position of span in `nested_doc_comment` correctly. and hence the spans of identifiers of haddoc can be computed correctly. 2. add test `HaddockSpanIssueT24378`. - - - - - a557580f by Alexey Radkov at 2024-01-30T19:41:52-05:00 Fix irrelevant dodgy-foreign-imports warning on import f-pointers by value A test *сс018* is attached (not sure about the naming convention though). Note that without the fix, the test fails with the *dodgy-foreign-imports* warning passed to stderr. The warning disappears after the fix. GHC shouldn't warn on imports of natural function pointers from C by value (which is feasible with CApiFFI), such as ```haskell foreign import capi "cc018.h value f" f :: FunPtr (Int -> IO ()) ``` where ```c void (*f)(int); ``` See a related real-world use-case [here](https://gitlab.com/daniel-casanueva/pcre-light/-/merge_requests/17). There, GHC warns on import of C function pointer `pcre_free`. - - - - - ca99efaf by Alexey Radkov at 2024-01-30T19:41:53-05:00 Rename test cc018 -> T24034 - - - - - 88c38dd5 by Ben Gamari at 2024-01-30T19:42:28-05:00 rts/TraverseHeap.c: Ensure that PosixSource.h is included first - - - - - ca2e919e by Simon Peyton Jones at 2024-01-31T09:29:45+00:00 Make decomposeRuleLhs a bit more clever This fixes #24370 by making decomposeRuleLhs undertand dictionary /functions/ as well as plain /dictionaries/ - - - - - 94ce031d by Teo Camarasu at 2024-02-01T05:49:49-05:00 doc: Add -Dn flag to user guide Resolves #24394 - - - - - 31553b11 by Ben Gamari at 2024-02-01T12:21:29-05:00 cmm: Introduce MO_RelaxedRead In hand-written Cmm it can sometimes be necessary to atomically load from memory deep within an expression (e.g. see the `CHECK_GC` macro). This MachOp provides a convenient way to do so without breaking the expression into multiple statements. - - - - - 0785cf81 by Ben Gamari at 2024-02-01T12:21:29-05:00 codeGen: Use relaxed accesses in ticky bumping - - - - - be423dda by Ben Gamari at 2024-02-01T12:21:29-05:00 base: use atomic write when updating timer manager - - - - - 8a310e35 by Ben Gamari at 2024-02-01T12:21:29-05:00 Use relaxed atomics to manipulate TSO status fields - - - - - d6809ee4 by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Add necessary barriers when manipulating TSO owner - - - - - 39e3ac5d by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Use `switch` to branch on why_blocked This is a semantics-preserving refactoring. - - - - - 515eb33d by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Fix synchronization on thread blocking state We now use a release barrier whenever we update a thread's blocking state. This required widening StgTSO.why_blocked as AArch64 does not support atomic writes on 16-bit values. - - - - - eb38812e by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Fix data race in threadPaused This only affects an assertion in the debug RTS and only needs relaxed ordering. - - - - - 26c48dd6 by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Fix data race in threadStatus# - - - - - 6af43ab4 by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Fix data race in Interpreter's preemption check - - - - - 9502ad3c by Ben Gamari at 2024-02-01T12:21:29-05:00 rts/Messages: Fix data race - - - - - 60802db5 by Ben Gamari at 2024-02-01T12:21:30-05:00 rts/Prof: Fix data race - - - - - ef8ccef5 by Ben Gamari at 2024-02-01T12:21:30-05:00 rts: Use relaxed ordering on dirty/clean info tables updates When changing the dirty/clean state of a mutable object we needn't have any particular ordering. - - - - - 76fe2b75 by Ben Gamari at 2024-02-01T12:21:30-05:00 codeGen: Use relaxed-read in closureInfoPtr - - - - - a6316eb4 by Ben Gamari at 2024-02-01T12:21:30-05:00 STM: Use acquire loads when possible Full sequential consistency is not needed here. - - - - - 6bddfd3d by Ben Gamari at 2024-02-01T12:21:30-05:00 rts: Use fence rather than redundant load Previously we would use an atomic load to ensure acquire ordering. However, we now have `ACQUIRE_FENCE_ON`, which allows us to express this more directly. - - - - - 55c65dbc by Ben Gamari at 2024-02-01T12:21:30-05:00 rts: Fix data races in profiling timer - - - - - 856b5e75 by Ben Gamari at 2024-02-01T12:21:30-05:00 Add Note [C11 memory model] - - - - - 6534da24 by Cheng Shao at 2024-02-01T12:22:07-05:00 compiler: move generic cmm optimization logic in NCG to a standalone module This commit moves GHC.CmmToAsm.cmmToCmm to a standalone module, GHC.Cmm.GenericOpt. The main motivation is enabling this logic to be run in the wasm backend NCG code, which is defined in other modules that's imported by GHC.CmmToAsm, causing a cyclic dependency issue. - - - - - 87e34888 by Cheng Shao at 2024-02-01T12:22:07-05:00 compiler: explicitly disable PIC in wasm32 NCG This commit explicitly disables the ncgPIC flag for the wasm32 target. The wasm backend doesn't support PIC for the time being. - - - - - c6ce242e by Cheng Shao at 2024-02-01T12:22:07-05:00 compiler: enable generic cmm optimizations in wasm backend NCG This commit enables the generic cmm optimizations in other NCGs to be run in the wasm backend as well, followed by a late cmm control-flow optimization pass. The added optimizations do catch some corner cases not handled by the pre-NCG cmm pipeline and are useful in generating smaller CFGs. - - - - - 151dda4e by Andrei Borzenkov at 2024-02-01T12:22:43-05:00 Namespacing for WARNING/DEPRECATED pragmas (#24396) New syntax for WARNING and DEPRECATED pragmas was added, namely namespace specifierss: namespace_spec ::= 'type' | 'data' | {- empty -} warning ::= warning_category namespace_spec namelist strings deprecation ::= namespace_spec namelist strings A new data type was introduced to represent these namespace specifiers: data NamespaceSpecifier = NoSpecifier | TypeNamespaceSpecifier (EpToken "type") | DataNamespaceSpecifier (EpToken "data") Extension field XWarning now contains this NamespaceSpecifier. lookupBindGroupOcc function was changed: it now takes NamespaceSpecifier and checks that the namespace of the found names matches the passed flag. With this change {-# WARNING data D "..." #-} pragma will only affect value namespace and {-# WARNING type D "..." #-} will only affect type namespace. The same logic is applicable to DEPRECATED pragmas. Finding duplicated warnings inside rnSrcWarnDecls now takes into consideration NamespaceSpecifier flag to allow warnings with the same names that refer to different namespaces. - - - - - 38c3afb6 by Bryan Richter at 2024-02-01T12:23:19-05:00 CI: Disable the test-cabal-reinstall job Fixes #24363 - - - - - 27020458 by Matthew Craven at 2024-02-03T01:53:26-05:00 Bump bytestring submodule to something closer to 0.12.1 ...mostly so that 16d6b7e835ffdcf9b894e79f933dd52348dedd0c (which reworks unaligned writes in Builder) and the stuff in https://github.com/haskell/bytestring/pull/631 can see wider testing. The less-terrible code for unaligned writes used in Builder on hosts not known to be ulaigned-friendly also takes less effort for GHC to compile, resulting in a metric decrease for T21839c on some platforms. The metric increase on T21839r is caused by the unrelated commit 750dac33465e7b59100698a330b44de7049a345c. It perhaps warrants further analysis and discussion (see #23822) but is not critical. Metric Decrease: T21839c Metric Increase: T21839r - - - - - cdddeb0f by Rodrigo Mesquita at 2024-02-03T01:54:02-05:00 Work around autotools setting C11 standard in CC/CXX In autoconf >=2.70, C11 is set by default for $CC and $CXX via the -std=...11 flag. In this patch, we split the "-std" flag out of the $CC and $CXX variables, which we traditionally assume to be just the executable name/path, and move it to $CFLAGS/$CXXFLAGS instead. Fixes #24324 - - - - - 5ff7cc26 by Apoorv Ingle at 2024-02-03T13:14:46-06:00 Expand `do` blocks right before typechecking using the `HsExpansion` philosophy. - Fixes #18324 #20020 #23147 #22788 #15598 #22086 #21206 - The change is detailed in - Note [Expanding HsDo with HsExpansion] in `GHC.Tc.Gen.Do` - Note [Doing HsExpansion in the Renamer vs Typechecker] in `GHC.Rename.Expr` expains the rational of doing expansions in type checker as opposed to in the renamer - Adds new datatypes: - `GHC.Hs.Expr.XXExprGhcRn`: new datatype makes this expansion work easier 1. Expansion bits for Expressions, Statements and Patterns in (`ExpandedThingRn`) 2. `PopErrCtxt` a special GhcRn Phase only artifcat to pop the previous error message in the error context stack - `GHC.Basic.Origin` now tracks the reason for expansion in case of Generated This is useful for type checking cf. `GHC.Tc.Gen.Expr.tcExpr` case for `HsLam` - Kills `HsExpansion` and `HsExpanded` as we have inlined them in `XXExprGhcRn` and `XXExprGhcTc` - Ensures warnings such as 1. Pattern match checks 2. Failable patterns 3. non-() return in body statements are preserved - Kill `HsMatchCtxt` in favor of `TcMatchAltChecker` - Testcases: * T18324 T20020 T23147 T22788 T15598 T22086 * T23147b (error message check), * DoubleMatch (match inside a match for pmc check) * pattern-fails (check pattern match with non-refutable pattern, eg. newtype) * Simple-rec (rec statements inside do statment) * T22788 (code snippet from #22788) * DoExpanion1 (Error messages for body statments) * DoExpansion2 (Error messages for bind statements) * DoExpansion3 (Error messages for let statements) Also repoint haddock to the right submodule so that the test (haddockHypsrcTest) pass Metric Increase 'compile_time/bytes allocated': T9020 The testcase is a pathalogical example of a `do`-block with many statements that do nothing. Given that we are expanding the statements into function binds, we will have to bear a (small) 2% cost upfront in the compiler to unroll the statements. - - - - - 0df8ce27 by Vladislav Zavialov at 2024-02-04T03:55:14-05:00 Reduce parser allocations in allocateCommentsP In the most common case, the comment queue is empty, so we can skip the work of processing it. This reduces allocations by about 10% in the parsing001 test. Metric Decrease: MultiLayerModulesRecomp parsing001 - - - - - ae856a82 by Matthew Pickering at 2024-02-05T12:22:39+00:00 ghc-internals fallout - - - - - cfd68290 by Simon Peyton Jones at 2024-02-05T17:58:33-05:00 Stop dropping a case whose binder is demanded This MR fixes #24251. See Note [Case-to-let for strictly-used binders] in GHC.Core.Opt.Simplify.Iteration, plus #24251, for lots of discussion. Final Nofib changes over 0.1%: +----------------------------------------- | imaginary/digits-of-e2 -2.16% | imaginary/rfib -0.15% | real/fluid -0.10% | real/gamteb -1.47% | real/gg -0.20% | real/maillist +0.19% | real/pic -0.23% | real/scs -0.43% | shootout/n-body -0.41% | shootout/spectral-norm -0.12% +======================================== | geom mean -0.05% Pleasingly, overall executable size is down by just over 1%. Compile times (in perf/compiler) wobble around a bit +/- 0.5%, but the geometric mean is -0.1% which seems good. - - - - - e4d137bb by Simon Peyton Jones at 2024-02-05T17:58:33-05:00 Add Note [Bangs in Integer functions] ...to document the bangs in the functions in GHC.Num.Integer - - - - - ce90f12f by Andrei Borzenkov at 2024-02-05T17:59:09-05:00 Hide WARNING/DEPRECATED namespacing under -XExplicitNamespaces (#24396) - - - - - e2ea933f by Simon Peyton Jones at 2024-02-06T10:12:04-05:00 Refactoring in preparation for lazy skolemisation * Make HsMatchContext and HsStmtContext be parameterised over the function name itself, rather than over the pass. See [mc_fun field of FunRhs] in Language.Haskell.Syntax.Expr - Replace types HsMatchContext GhcPs --> HsMatchContextPs HsMatchContext GhcRn --> HsMatchContextRn HsMatchContext GhcTc --> HsMatchContextRn (sic! not Tc) HsStmtContext GhcRn --> HsStmtContextRn - Kill off convertHsMatchCtxt * Split GHC.Tc.Type.BasicTypes.TcSigInfo so that TcCompleteSig (describing a complete user-supplied signature) is its own data type. - Split TcIdSigInfo(CompleteSig, PartialSig) into TcCompleteSig(CSig) TcPartialSig(PSig) - Use TcCompleteSig in tcPolyCheck, CheckGen - Rename types and data constructors: TcIdSigInfo --> TcIdSig TcPatSynInfo(TPSI) --> TcPatSynSig(PatSig) - Shuffle around helper functions: tcSigInfoName (moved to GHC.Tc.Types.BasicTypes) completeSigPolyId_maybe (moved to GHC.Tc.Types.BasicTypes) tcIdSigName (inlined and removed) tcIdSigLoc (introduced) - Rearrange the pattern match in chooseInferredQuantifiers * Rename functions and types: tcMatchesCase --> tcCaseMatches tcMatchesFun --> tcFunBindMatches tcMatchLambda --> tcLambdaMatches tcPats --> tcMatchPats matchActualFunTysRho --> matchActualFunTys matchActualFunTySigma --> matchActualFunTy * Add HasDebugCallStack constraints to: mkBigCoreVarTupTy, mkBigCoreTupTy, boxTy, mkPiTy, mkPiTys, splitAppTys, splitTyConAppNoView_maybe * Use `penv` from the outer context in the inner loop of GHC.Tc.Gen.Pat.tcMultiple * Move tcMkVisFunTy, tcMkInvisFunTy, tcMkScaledFunTys down the file, factor out and export tcMkScaledFunTy. * Move isPatSigCtxt down the file. * Formatting and comments Co-authored-by: Vladislav Zavialov <vlad.z.4096 at gmail.com> - - - - - f5d3e03c by Andrei Borzenkov at 2024-02-06T10:12:04-05:00 Lazy skolemisation for @a-binders (#17594) This patch is a preparation for @a-binders implementation. The main changes are: * Skolemisation is now prepared to deal with @binders. See Note [Skolemisation overview] in GHC.Tc.Utils.Unify. Most of the action is in - Utils.Unify.matchExpectedFunTys - Gen.Pat.tcMatchPats - Gen.Expr.tcPolyExprCheck - Gen.Binds.tcPolyCheck Some accompanying refactoring: * I found that funTyConAppTy_maybe was doing a lot of allocation, and rejigged userTypeError_maybe to avoid calling it. - - - - - 532993c8 by Zubin Duggal at 2024-02-06T10:12:41-05:00 driver: Really don't lose track of nodes when we fail to resolve cycles This fixes a bug in 8db8d2fd1c881032b1b360c032b6d9d072c11723, where we could lose track of acyclic components at the start of an unresolved cycle. We now ensure we never loose track of any of these components. As T24275 demonstrates, a "cyclic" SCC might not really be a true SCC: When viewed without boot files, we have a single SCC ``` [REC main:T24275B [main:T24275B {-# SOURCE #-}, main:T24275A {-# SOURCE #-}] main:T24275A [main:T24275A {-# SOURCE #-}]] ``` But with boot files this turns into ``` [NONREC main:T24275B {-# SOURCE #-} [], REC main:T24275B [main:T24275B {-# SOURCE #-}, main:T24275A {-# SOURCE #-}] main:T24275A {-# SOURCE #-} [main:T24275B], NONREC main:T24275A [main:T24275A {-# SOURCE #-}]] ``` Note that this is truly not an SCC, as no nodes are reachable from T24275B.hs-boot. However, we treat this entire group as a single "SCC" because it seems so when we analyse the graph without taking boot files into account. Indeed, we must return a single ResolvedCycle element in the BuildPlan for this as described in Note [Upsweep]. However, since after resolving this is not a true SCC anymore, `findCycle` fails to find a cycle and we have a sub-optimal error message as a result. To handle this, I extended `findCycle` to not assume its input is an SCC, and to try harder to find cycles in its input. Fixes #24275 - - - - - b35dd613 by Zubin Duggal at 2024-02-06T10:13:17-05:00 GHCi: Lookup breakpoint CCs in the correct module We need to look up breakpoint CCs in the module that the breakpoint points to, and not the current module. Fixes #24327 - - - - - b09e6958 by Zubin Duggal at 2024-02-06T10:13:17-05:00 testsuite: Add test for #24327 - - - - - 569b4c10 by doyougnu at 2024-02-07T03:06:26-05:00 ts: add compile_artifact, ignore_extension flag In b521354216f2821e00d75f088d74081d8b236810 the testsuite gained the capability to collect generic metrics. But this assumed that the test was not linking and producing artifacts and we only wanted to track object files, interface files, or build artifacts from the compiler build. However, some backends, such as the JS backend, produce artifacts when compiling, such as the jsexe directory which we want to track. This patch: - tweaks the testsuite to collect generic metrics on any build artifact in the test directory. - expands the exe_extension function to consider windows and adds the ignore_extension flag. - Modifies certain tests to add the ignore_extension flag. Tests such as heaprof002 expect a .ps file, but on windows without ignore_extensions the testsuite will look for foo.exe.ps. Hence the flag. - adds the size_hello_artifact test - - - - - 75a31379 by doyougnu at 2024-02-07T03:06:26-05:00 ts: add wasm_arch, heapprof002 wasm extension - - - - - c9731d6d by Rodrigo Mesquita at 2024-02-07T03:07:03-05:00 Synchronize bindist configure for #24324 In cdddeb0f1280b40cc194028bbaef36e127175c4c, we set up a workaround for #24324 in the in-tree configure script, but forgot to update the bindist configure script accordingly. This updates it. - - - - - d309f4e7 by Matthew Pickering at 2024-02-07T03:07:38-05:00 distrib/configure: Fix typo in CONF_GCC_LINKER_OPTS_STAGE2 variable Instead we were setting CONF_GCC_LINK_OPTS_STAGE2 which meant that we were missing passing `--target` when invoking the linker. Fixes #24414 - - - - - 77db84ab by Ben Gamari at 2024-02-08T00:35:22-05:00 llvmGen: Adapt to allow use of new pass manager. We now must use `-passes` in place of `-O<n>` due to #21936. Closes #21936. - - - - - 3c9ddf97 by Matthew Pickering at 2024-02-08T00:35:59-05:00 testsuite: Mark length001 as fragile on javascript Modifying the timeout multiplier is not a robust way to get this test to reliably fail. Therefore we mark it as fragile until/if javascript ever supports the stack limit. - - - - - 20b702b5 by Matthew Pickering at 2024-02-08T00:35:59-05:00 Javascript: Don't filter out rtsDeps list This logic appears to be incorrect as it would drop any dependency which was not in a direct dependency of the package being linked. In the ghc-internals split this started to cause errors because `ghc-internal` is not a direct dependency of most packages, and hence important symbols to keep which are hard coded into the js runtime were getting dropped. - - - - - 2df96366 by Ben Gamari at 2024-02-08T00:35:59-05:00 base: Cleanup whitespace in cbits - - - - - 44f6557a by Ben Gamari at 2024-02-08T00:35:59-05:00 Move `base` to `ghc-internal` Here we move a good deal of the implementation of `base` into a new package, `ghc-internal` such that it can be evolved independently from the user-visible interfaces of `base`. While we want to isolate implementation from interfaces, naturally, we would like to avoid turning `base` into a mere set of module re-exports. However, this is a non-trivial undertaking for a variety of reasons: * `base` contains numerous known-key and wired-in things, requiring corresponding changes in the compiler * `base` contains a significant amount of C code and corresponding autoconf logic, which is very fragile and difficult to break apart * `base` has numerous import cycles, which are currently dealt with via carefully balanced `hs-boot` files * We must not break existing users To accomplish this migration, I tried the following approaches: * [Split-GHC.Base]: Break apart the GHC.Base knot to allow incremental migration of modules into ghc-internal: this knot is simply too intertwined to be easily pulled apart, especially given the rather tricky import cycles that it contains) * [Move-Core]: Moving the "core" connected component of base (roughly 150 modules) into ghc-internal. While the Haskell side of this seems tractable, the C dependencies are very subtle to break apart. * [Move-Incrementally]: 1. Move all of base into ghc-internal 2. Examine the module structure and begin moving obvious modules (e.g. leaves of the import graph) back into base 3. Examine the modules remaining in ghc-internal, refactor as necessary to facilitate further moves 4. Go to (2) iterate until the cost/benefit of further moves is insufficient to justify continuing 5. Rename the modules moved into ghc-internal to ensure that they don't overlap with those in base 6. For each module moved into ghc-internal, add a shim module to base with the declarations which should be exposed and any requisite Haddocks (thus guaranteeing that base will be insulated from changes in the export lists of modules in ghc-internal Here I am using the [Move-Incrementally] approach, which is empirically the least painful of the unpleasant options above Bumps haddock submodule. Metric Decrease: haddock.Cabal haddock.base Metric Increase: MultiComponentModulesRecomp T16875 size_hello_artifact - - - - - e8fb2451 by Vladislav Zavialov at 2024-02-08T00:36:36-05:00 Haddock comments on infix constructors (#24221) Rewrite the `HasHaddock` instance for `ConDecl GhcPs` to account for infix constructors. This change fixes a Haddock regression (introduced in 19e80b9af252) that affected leading comments on infix data constructor declarations: -- | Docs for infix constructor | Int :* Bool The comment should be associated with the data constructor (:*), not with its left-hand side Int. - - - - - 9060d55b by Ben Gamari at 2024-02-08T00:37:13-05:00 Add os-string as a boot package Introduces `os-string` submodule. This will be necessary for `filepath-1.5`. - - - - - 9d65235a by Ben Gamari at 2024-02-08T00:37:13-05:00 gitignore: Ignore .hadrian_ghci_multi/ - - - - - d7ee12ea by Ben Gamari at 2024-02-08T00:37:13-05:00 hadrian: Set -this-package-name When constructing the GHC flags for a package Hadrian must take care to set `-this-package-name` in addition to `-this-unit-id`. This hasn't broken until now as we have not had any uses of qualified package imports. However, this will change with `filepath-1.5` and the corresponding `unix` bump, breaking `hadrian/multi-ghci`. - - - - - f2dffd2e by Ben Gamari at 2024-02-08T00:37:13-05:00 Bump filepath to 1.5.0.0 Required bumps of the following submodules: * `directory` * `filepath` * `haskeline` * `process` * `unix` * `hsc2hs` * `Win32` * `semaphore-compat` and the addition of `os-string` as a boot package. - - - - - ab533e71 by Matthew Pickering at 2024-02-08T00:37:50-05:00 Use specific clang assembler when compiling with -fllvm There are situations where LLVM will produce assembly which older gcc toolchains can't handle. For example on Deb10, it seems that LLVM >= 13 produces assembly which the default gcc doesn't support. A more robust solution in the long term is to require a specific LLVM compatible assembler when using -fllvm. Fixes #16354 - - - - - c32b6426 by Matthew Pickering at 2024-02-08T00:37:50-05:00 Update CI images with LLVM 15, ghc-9.6.4 and cabal-install-3.10.2.0 - - - - - 5fcd58be by Matthew Pickering at 2024-02-08T00:37:50-05:00 Update bootstrap plans for 9.4.8 and 9.6.4 - - - - - 707a32f5 by Matthew Pickering at 2024-02-08T00:37:50-05:00 Add alpine 3_18 release job This is mainly experimental and future proofing to enable a smooth transition to newer alpine releases once 3_12 is too old. - - - - - c37931b3 by John Ericson at 2024-02-08T06:39:05-05:00 Generate LLVM min/max bound policy via Hadrian Per #23966, I want the top-level configure to only generate configuration data for Hadrian, not do any "real" tasks on its own. This is part of that effort --- one less file generated by it. (It is still done with a `.in` file, so in a future world non-Hadrian also can easily create this file.) Split modules: - GHC.CmmToLlvm.Config - GHC.CmmToLlvm.Version - GHC.CmmToLlvm.Version.Bounds - GHC.CmmToLlvm.Version.Type This also means we can get rid of the silly `unused.h` introduced in !6803 / 7dfcab2f4bcb7206174ea48857df1883d05e97a2 as temporary kludge. Part of #23966 - - - - - 9f987235 by Apoorv Ingle at 2024-02-08T06:39:42-05:00 Enable mdo statements to use HsExpansions Fixes: #24411 Added test T24411 for regression - - - - - f8429266 by Jade at 2024-02-08T14:56:50+01:00 Adjust test for ghc MR !10993 - - - - - 762b2120 by Jade at 2024-02-08T15:17:15+00:00 Improve Monad, Functor & Applicative docs This patch aims to improve the documentation of Functor, Applicative, Monad and related symbols. The main goal is to make it more consistent and make accessible. See also: !10979 (closed) and !10985 (closed) Ticket #17929 Updates haddock submodule - - - - - 151770ca by Josh Meredith at 2024-02-10T14:28:15-05:00 JavaScript codegen: Use GHC's tag inference where JS backend-specific evaluation inference was previously used (#24309) - - - - - 2e880635 by Zubin Duggal at 2024-02-10T14:28:51-05:00 ci: Allow release-hackage-lint to fail Otherwise it blocks the ghcup metadata pipeline from running. - - - - - b0293f78 by Matthew Pickering at 2024-02-10T14:29:28-05:00 rts: eras profiling mode The eras profiling mode is useful for tracking the life-time of closures. When a closure is written, the current era is recorded in the profiling header. This records the era in which the closure was created. * Enable with -he * User mode: Use functions ghc-experimental module GHC.Profiling.Eras to modify the era * Automatically: --automatic-era-increment, increases the user era on major collections * The first era is era 1 * -he<era> can be used with other profiling modes to select a specific era If you just want to record the era but not to perform heap profiling you can use `-he --no-automatic-heap-samples`. https://well-typed.com/blog/2024/01/ghc-eras-profiling/ Fixes #24332 - - - - - be674a2c by Jade at 2024-02-10T14:30:04-05:00 Adjust error message for trailing whitespace in as-pattern. Fixes #22524 - - - - - 53ef83f9 by doyougnu at 2024-02-10T14:30:47-05:00 gitlab: js: add codeowners Fixes: - #24409 Follow on from: - #21078 and MR !9133 - When we added the JS backend this was forgotten. This patch adds the rightful codeowners. - - - - - 8bbe12f2 by Matthew Pickering at 2024-02-10T14:31:23-05:00 Bump CI images so that alpine3_18 image includes clang15 The only changes here are that clang15 is now installed on the alpine-3_18 image. - - - - - df9fd9f7 by Sylvain Henry at 2024-02-12T12:18:42-05:00 JS: handle stored null StablePtr Some Haskell codes unsafely cast StablePtr into ptr to compare against NULL. E.g. in direct-sqlite: if castStablePtrToPtr aggStPtr /= nullPtr then where `aggStPtr` is read (`peek`) from zeroed memory initially. We fix this by giving these StablePtr the same representation as other null pointers. It's safe because StablePtr at offset 0 is unused (for this exact reason). - - - - - 55346ede by Sylvain Henry at 2024-02-12T12:18:42-05:00 JS: disable MergeObjsMode test This isn't implemented for JS backend objects. - - - - - aef587f6 by Sylvain Henry at 2024-02-12T12:18:42-05:00 JS: add support for linking C sources Support linking C sources with JS output of the JavaScript backend. See the added documentation in the users guide. The implementation simply extends the JS linker to use the objects (.o) that were already produced by the emcc compiler and which were filtered out previously. I've also added some options to control the link with C functions (see the documentation about pragmas). With this change I've successfully compiled the direct-sqlite package which embeds the sqlite.c database code. Some wrappers are still required (see the documentation about wrappers) but everything generic enough to be reused for other libraries have been integrated into rts/js/mem.js. - - - - - b71b392f by Sylvain Henry at 2024-02-12T12:18:42-05:00 JS: avoid EMCC logging spurious failure emcc would sometime output messages like: cache:INFO: generating system asset: symbol_lists/424b44514e43d789148e69e4e7d1c7fdc0350b79.json... (this will be cached in "/emsdk/upstream/emscripten/cache/symbol_lists/424b44514e43d789148e69e4e7d1c7fdc0350b79.json" for subsequent builds) cache:INFO: - ok Cf https://github.com/emscripten-core/emscripten/issues/18607 This breaks our tests matching the stderr output. We avoid this by setting EMCC_LOGGING=0 - - - - - ff2c0cc9 by Simon Peyton Jones at 2024-02-12T12:19:17-05:00 Remove a dead comment Just remove an out of date block of commented-out code, and tidy up the relevant Notes. See #8317. - - - - - bedb4f0d by Teo Camarasu at 2024-02-12T18:50:33-05:00 nonmoving: Add support for heap profiling Add support for heap profiling while using the nonmoving collector. We greatly simply the implementation by disabling concurrent collection for GCs when heap profiling is enabled. This entails that the marked objects on the nonmoving heap are exactly the live objects. Note that we match the behaviour for live bytes accounting by taking the size of objects on the nonmoving heap to be that of the segment's block rather than the object itself. Resolves #22221 - - - - - d0d5acb5 by Teo Camarasu at 2024-02-12T18:51:09-05:00 doc: Add requires prof annotation to options that require it Resolves #24421 - - - - - 6d1e2386 by Alan Zimmerman at 2024-02-13T22:00:28+03:00 EPA: Match changes to HsParTy and HsFunTy - - - - - 57bb8c92 by Cheng Shao at 2024-02-13T14:07:49-05:00 deriveConstants: add needed constants for wasm backend This commit adds needed constants to deriveConstants. They are used by RTS code in the wasm backend to support the JSFFI logic. - - - - - 615eb855 by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: make genSym use C-based atomic increment on non-JS 32-bit platforms The pure Haskell implementation causes i386 regression in unrelated work that can be fixed by using C-based atomic increment, see added comment for details. - - - - - a9918891 by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: allow JSFFI for wasm32 This commit allows the javascript calling convention to be used when the target platform is wasm32. - - - - - 8771a53b by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: allow boxed JSVal as a foreign type This commit allows the boxed JSVal type to be used as a foreign argument/result type. - - - - - 053c92b3 by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: ensure ctors have the right priority on wasm32 This commit fixes the priorities of ctors generated by GHC codegen on wasm32, see the referred note for details. - - - - - b7942e0a by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: add JSFFI desugar logic for wasm32 This commit adds JSFFI desugar logic for the wasm backend. - - - - - 2c1dca76 by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: add JavaScriptFFI to supported extension list on wasm32 This commit adds JavaScriptFFI as a supported extension when the target platform is wasm32. - - - - - 9ad0e2b4 by Cheng Shao at 2024-02-13T14:07:49-05:00 rts/ghc-internal: add JSFFI support logic for wasm32 This commit adds rts/ghc-internal logic to support the wasm backend's JSFFI functionality. - - - - - e9ebea66 by Cheng Shao at 2024-02-13T14:07:49-05:00 ghc-internal: fix threadDelay for wasm in browsers This commit fixes broken threadDelay for wasm when it runs in browsers, see added note for detailed explanation. - - - - - f85f3fdb by Cheng Shao at 2024-02-13T14:07:49-05:00 utils: add JSFFI utility code This commit adds JavaScript util code to utils to support the wasm backend's JSFFI functionality: - jsffi/post-link.mjs, a post-linker to process the linked wasm module and emit a small complement JavaScript ESM module to be used with it at runtime - jsffi/prelude.js, a tiny bit of prelude code as the JavaScript side of runtime logic - jsffi/test-runner.mjs, run the jsffi test cases Co-authored-by: amesgen <amesgen at amesgen.de> - - - - - 77e91500 by Cheng Shao at 2024-02-13T14:07:49-05:00 hadrian: distribute jsbits needed for wasm backend's JSFFI support The post-linker.mjs/prelude.js files are now distributed in the bindist libdir, so when using the wasm backend's JSFFI feature, the user wouldn't need to fetch them from a ghc checkout manually. - - - - - c47ba1c3 by Cheng Shao at 2024-02-13T14:07:49-05:00 testsuite: add opts.target_wrapper This commit adds opts.target_wrapper which allows overriding the target wrapper on a per test case basis when testing a cross target. This is used when testing the wasm backend's JSFFI functionality; the rest of the cases are tested using wasmtime, though the jsffi cases are tested using the node.js based test runner. - - - - - 8e048675 by Cheng Shao at 2024-02-13T14:07:49-05:00 testsuite: T22774 should work for wasm JSFFI T22774 works since the wasm backend now supports the JSFFI feature. - - - - - 1d07f9a6 by Cheng Shao at 2024-02-13T14:07:49-05:00 testsuite: add JSFFI test cases for wasm backend This commit adds a few test cases for the wasm backend's JSFFI functionality, as well as a simple README to instruct future contributors to add new test cases. - - - - - b8997080 by Cheng Shao at 2024-02-13T14:07:49-05:00 docs: add documentation for wasm backend JSFFI This commit adds changelog and user facing documentation for the wasm backend's JSFFI feature. - - - - - ffeb000d by David Binder at 2024-02-13T14:08:30-05:00 Add tests from libraries/process/tests and libraries/Win32/tests to GHC These tests were previously part of the libraries, which themselves are submodules of the GHC repository. This commit moves the tests directly to the GHC repository. - - - - - 5a932cf2 by David Binder at 2024-02-13T14:08:30-05:00 Do not execute win32 tests on non-windows runners - - - - - 500d8cb8 by Jade at 2024-02-13T14:09:07-05:00 prevent GHCi (and runghc) from suggesting other symbols when not finding main Fixes: #23996 - - - - - b19ec331 by Cheng Shao at 2024-02-13T14:09:46-05:00 rts: update xxHash to v0.8.2 - - - - - 4a97bdb8 by Cheng Shao at 2024-02-13T14:09:46-05:00 rts: use XXH3_64bits hash on all 64-bit platforms This commit enables XXH3_64bits hash to be used on all 64-bit platforms. Previously it was only enabled on x86_64, so platforms like aarch64 silently falls back to using XXH32 which degrades the hashing function quality. - - - - - ee01de7d by Cheng Shao at 2024-02-13T14:09:46-05:00 rts: define XXH_INLINE_ALL This commit cleans up how we include the xxhash.h header and only define XXH_INLINE_ALL, which is sufficient to inline the xxHash functions without symbol collision. - - - - - 0e01e1db by Alan Zimmerman at 2024-02-14T02:13:22-05:00 EPA: Move EpAnn out of extension points Leaving a few that are too tricky, maybe some other time. Also - remove some unneeded helpers from Parser.y - reduce allocations with strictness annotations Updates haddock submodule Metric Decrease: parsing001 - - - - - de589554 by Andreas Klebinger at 2024-02-14T02:13:59-05:00 Fix ffi callbacks with >6 args and non-64bit args. Check for ptr/int arguments rather than 64-bit width arguments when counting integer register arguments. The old approach broke when we stopped using exclusively W64-sized types to represent sub-word sized integers. Fixes #24314 - - - - - 9c588f19 by Fendor at 2024-02-14T11:05:36+01:00 Adapt to GHC giving better Name's for linking - - - - - 325b7613 by Ben Gamari at 2024-02-14T14:27:45-05:00 rts/EventLog: Place eliminate duplicate strlens Previously many of the `post*` implementations would first compute the length of the event's strings in order to determine the event length. Later we would then end up computing the length yet again in `postString`. Now we instead pass the string length to `postStringLen`, avoiding the repeated work. - - - - - 8aafa51c by Ben Gamari at 2024-02-14T14:27:46-05:00 rts/eventlog: Place upper bound on IPE string field lengths The strings in IPE events may be of unbounded length. Limit the lengths of these fields to 64k characters to ensure that we don't exceed the maximum event length. - - - - - 0e60d52c by Zubin Duggal at 2024-02-14T14:27:46-05:00 rts: drop unused postString function - - - - - d8d1333a by Cheng Shao at 2024-02-14T14:28:23-05:00 compiler/rts: fix wasm unreg regression This commit fixes two wasm unreg regressions caught by a nightly pipeline: - Unknown stg_scheduler_loopzh symbol when compiling scheduler.cmm - Invalid _hs_constructor(101) function name when handling ctor - - - - - 264a4fa9 by Owen Shepherd at 2024-02-15T09:41:06-05:00 feat: Add sortOn to Data.List.NonEmpty Adds `sortOn` to `Data.List.NonEmpty`, and adds comments describing when to use it, compared to `sortWith` or `sortBy . comparing`. The aim is to smooth out the API between `Data.List`, and `Data.List.NonEmpty`. This change has been discussed in the [clc issue](https://github.com/haskell/core-libraries-committee/issues/227). - - - - - b57200de by Fendor at 2024-02-15T09:41:47-05:00 Prefer RdrName over OccName for looking up locations in doc renaming step Looking up by OccName only does not take into account when functions are only imported in a qualified way. Fixes issue #24294 Bump haddock submodule to include regression test - - - - - 8ad02724 by Luite Stegeman at 2024-02-15T17:33:32-05:00 JS: add simple optimizer The simple optimizer reduces the size of the code generated by the JavaScript backend without the complexity and performance penalty of the optimizer in GHCJS. Also see #22736 Metric Decrease: libdir size_hello_artifact - - - - - 20769b36 by Matthew Pickering at 2024-02-15T17:34:07-05:00 base: Expose `--no-automatic-time-samples` in `GHC.RTS.Flags` API This patch builds on 5077416e12cf480fb2048928aa51fa4c8fc22cf1 and modifies the base API to reflect the new RTS flag. CLC proposal #243 - https://github.com/haskell/core-libraries-committee/issues/243 Fixes #24337 - - - - - 778e1db3 by Andrei Borzenkov at 2024-02-16T16:12:07+03:00 Namespace specifiers for fixity signatures - - - - - 08031ada by Teo Camarasu at 2024-02-16T13:37:00-05:00 base: export System.Mem.performBlockingMajorGC The corresponding C function was introduced in ba73a807edbb444c49e0cf21ab2ce89226a77f2e. As part of #22264. Resolves #24228 The CLC proposal was disccused at: https://github.com/haskell/core-libraries-committee/issues/230 Co-authored-by: Ben Gamari <bgamari.foss at gmail.com> - - - - - 1f534c2e by Florian Weimer at 2024-02-16T13:37:42-05:00 Fix C output for modern C initiative GCC 14 on aarch64 rejects the C code written by GHC with this kind of error: error: assignment to ‘ffi_arg’ {aka ‘long unsigned int’} from ‘HsPtr’ {aka ‘void *’} makes integer from pointer without a cast [-Wint-conversion] 68 | *(ffi_arg*)resp = cret; | ^ Add the correct cast. For more information on this see: https://fedoraproject.org/wiki/Changes/PortingToModernC Tested-by: Richard W.M. Jones <rjones at redhat.com> - - - - - 5d3f7862 by Matthew Craven at 2024-02-16T13:38:18-05:00 Bump bytestring submodule to 0.12.1.0 - - - - - 902ebcc2 by Ian-Woo Kim at 2024-02-17T06:01:01-05:00 Add missing BCO handling in scavenge_one. - - - - - 97d26206 by Sylvain Henry at 2024-02-17T06:01:44-05:00 Make cast between words and floats real primops (#24331) First step towards fixing #24331. Replace foreign prim imports with real primops. - - - - - a40e4781 by Sylvain Henry at 2024-02-17T06:01:44-05:00 Perf: add constant folding for bitcast between float and word (#24331) - - - - - 5fd2c00f by Sylvain Henry at 2024-02-17T06:01:44-05:00 Perf: replace stack checks with assertions in casting primops There are RESERVED_STACK_WORDS free words (currently 21) on the stack, so omit the checks. Suggested by Cheng Shao. - - - - - 401dfe7b by Sylvain Henry at 2024-02-17T06:01:44-05:00 Reexport primops from GHC.Float + add deprecation - - - - - 4ab48edb by Ben Gamari at 2024-02-17T06:02:21-05:00 rts/Hash: Don't iterate over chunks if we don't need to free data When freeing a `HashTable` there is no reason to walk over the hash list before freeing it if the user has not given us a `dataFreeFun`. Noticed while looking at #24410. - - - - - bd5a1f91 by Cheng Shao at 2024-02-17T06:03:00-05:00 compiler: add SEQ_CST fence support In addition to existing Acquire/Release fences, this commit adds SEQ_CST fence support to GHC, allowing Cmm code to explicitly emit a fence that enforces total memory ordering. The following logic is added: - The MO_SeqCstFence callish MachOp - The %prim fence_seq_cst() Cmm syntax and the SEQ_CST_FENCE macro in Cmm.h - MO_SeqCstFence lowering logic in every single GHC codegen backend - - - - - 2ce2a493 by Cheng Shao at 2024-02-17T06:03:38-05:00 testsuite: fix hs_try_putmvar002 for targets without pthread.h hs_try_putmvar002 includes pthread.h and doesn't work on targets without this header (e.g. wasm32). It doesn't need to include this header at all. This was previously unnoticed by wasm CI, though recent toolchain upgrade brought in upstream changes that completely removes pthread.h in the single-threaded wasm32-wasi sysroot, therefore we need to handle that change. - - - - - 1fb3974e by Cheng Shao at 2024-02-17T06:03:38-05:00 ci: bump ci-images to use updated wasm image This commit bumps our ci-images revision to use updated wasm image. - - - - - 56e3f097 by Andrew Lelechenko at 2024-02-17T06:04:13-05:00 Bump submodule text to 2.1.1 T17123 allocates less because of improvements to Data.Text.concat in 1a6a06a. Metric Decrease: T17123 - - - - - a7569495 by Cheng Shao at 2024-02-17T06:04:51-05:00 rts: remove redundant rCCCS initialization This commit removes the redundant logic of initializing each Capability's rCCCS to CCS_SYSTEM in initProfiling(). Before initProfiling() is called during RTS startup, each Capability's rCCCS has already been assigned CCS_SYSTEM when they're first initialized. - - - - - 7a0293cc by Ben Gamari at 2024-02-19T07:11:00-05:00 Drop dependence on `touch` This drops GHC's dependence on the `touch` program, instead implementing it within GHC. This eliminates an external dependency and means that we have one fewer program to keep track of in the `configure` script - - - - - 0dbd729e by Andrei Borzenkov at 2024-02-19T07:11:37-05:00 Parser, renamer, type checker for @a-binders (#17594) GHC Proposal 448 introduces binders for invisible type arguments (@a-binders) in various contexts. This patch implements @-binders in lambda patterns and function equations: {-# LANGUAGE TypeAbstractions #-} id1 :: a -> a id1 @t x = x :: t -- @t-binder on the LHS of a function equation higherRank :: (forall a. (Num a, Bounded a) => a -> a) -> (Int8, Int16) higherRank f = (f 42, f 42) ex :: (Int8, Int16) ex = higherRank (\ @a x -> maxBound @a - x ) -- @a-binder in a lambda pattern in an argument -- to a higher-order function Syntax ------ To represent those @-binders in the AST, the list of patterns in Match now uses ArgPat instead of Pat: data Match p body = Match { ... - m_pats :: [LPat p], + m_pats :: [LArgPat p], ... } + data ArgPat pass + = VisPat (XVisPat pass) (LPat pass) + | InvisPat (XInvisPat pass) (HsTyPat (NoGhcTc pass)) + | XArgPat !(XXArgPat pass) The VisPat constructor represents patterns for visible arguments, which include ordinary value-level arguments and required type arguments (neither is prefixed with a @), while InvisPat represents invisible type arguments (prefixed with a @). Parser ------ In the grammar (Parser.y), the lambda and lambda-cases productions of aexp non-terminal were updated to accept argpats instead of apats: aexp : ... - | '\\' apats '->' exp + | '\\' argpats '->' exp ... - | '\\' 'lcases' altslist(apats) + | '\\' 'lcases' altslist(argpats) ... + argpat : apat + | PREFIX_AT atype Function left-hand sides did not require any changes to the grammar, as they were already parsed with productions capable of parsing @-binders. Those binders were being rejected in post-processing (isFunLhs), and now we accept them. In Parser.PostProcess, patterns are constructed with the help of PatBuilder, which is used as an intermediate data structure when disambiguating between FunBind and PatBind. In this patch we define ArgPatBuilder to accompany PatBuilder. ArgPatBuilder is a short-lived data structure produced in isFunLhs and consumed in checkFunBind. Renamer ------- Renaming of @-binders builds upon prior work on type patterns, implemented in 2afbddb0f24, which guarantees proper scoping and shadowing behavior of bound type variables. This patch merely defines rnLArgPatsAndThen to process a mix of visible and invisible patterns: + rnLArgPatsAndThen :: NameMaker -> [LArgPat GhcPs] -> CpsRn [LArgPat GhcRn] + rnLArgPatsAndThen mk = mapM (wrapSrcSpanCps rnArgPatAndThen) where + rnArgPatAndThen (VisPat x p) = ... rnLPatAndThen ... + rnArgPatAndThen (InvisPat _ tp) = ... rnHsTyPat ... Common logic between rnArgPats and rnPats is factored out into the rn_pats_general helper. Type checker ------------ Type-checking of @-binders builds upon prior work on lazy skolemisation, implemented in f5d3e03c56f. This patch extends tcMatchPats to handle @-binders. Now it takes and returns a list of LArgPat rather than LPat: tcMatchPats :: ... - -> [LPat GhcRn] + -> [LArgPat GhcRn] ... - -> TcM ([LPat GhcTc], a) + -> TcM ([LArgPat GhcTc], a) Invisible binders in the Match are matched up with invisible (Specified) foralls in the type. This is done with a new clause in the `loop` worker of tcMatchPats: loop :: [LArgPat GhcRn] -> [ExpPatType] -> TcM ([LArgPat GhcTc], a) loop (L l apat : pats) (ExpForAllPatTy (Bndr tv vis) : pat_tys) ... -- NEW CLAUSE: | InvisPat _ tp <- apat, isSpecifiedForAllTyFlag vis = ... In addition to that, tcMatchPats no longer discards type patterns. This is done by filterOutErasedPats in the desugarer instead. x86_64-linux-deb10-validate+debug_info Metric Increase: MultiLayerModulesTH_OneShot - - - - - 486979b0 by Jade at 2024-02-19T07:12:13-05:00 Add specialized sconcat implementation for Data.Monoid.First and Data.Semigroup.First Approved CLC Proposal: https://github.com/haskell/core-libraries-committee/issues/246 Fixes: #24346 - - - - - 17e309d2 by John Ericson at 2024-02-19T07:12:49-05:00 Fix reST in users guide It appears that aef587f65de642142c1dcba0335a301711aab951 wasn't valid syntax. - - - - - 35b0ad90 by Brandon Chinn at 2024-02-19T07:13:25-05:00 Fix searching for errors in sphinx build - - - - - 4696b966 by Cheng Shao at 2024-02-19T07:14:02-05:00 hadrian: fix wasm backend post linker script permissions The post-link.mjs script was incorrectly copied and installed as a regular data file without executable permission, this commit fixes it. - - - - - a6142e0c by Cheng Shao at 2024-02-19T07:14:40-05:00 testsuite: mark T23540 as fragile on i386 See #24449 for details. - - - - - 249caf0d by Matthew Craven at 2024-02-19T20:36:09-05:00 Add @since annotation to Data.Data.mkConstrTag - - - - - cdd939e7 by Jade at 2024-02-19T20:36:46-05:00 Enhance documentation of Data.Complex - - - - - d04f384f by Ben Gamari at 2024-02-21T04:59:23-05:00 hadrian/bindist: Ensure that phony rules are marked as such Otherwise make may not run the rule if file with the same name as the rule happens to exist. - - - - - efcbad2d by Ben Gamari at 2024-02-21T04:59:23-05:00 hadrian: Generate HSC2HS_EXTRAS variable in bindist installation We must generate the hsc2hs wrapper at bindist installation time since it must contain `--lflag` and `--cflag` arguments which depend upon the installation path. The solution here is to substitute these variables in the configure script (see mk/hsc2hs.in). This is then copied over a dummy wrapper in the install rules. Fixes #24050. - - - - - c540559c by Matthew Pickering at 2024-02-21T04:59:23-05:00 ci: Show --info for installed compiler - - - - - ab9281a2 by Matthew Pickering at 2024-02-21T04:59:23-05:00 configure: Correctly set --target flag for linker opts Previously we were trying to use the FP_CC_SUPPORTS_TARGET with 4 arguments, when it only takes 3 arguments. Instead we need to use the `FP_PROG_CC_LINKER_TARGET` function in order to set the linker flags. Actually fixes #24414 - - - - - 9460d504 by Rodrigo Mesquita at 2024-02-21T04:59:59-05:00 configure: Do not override existing linker flags in FP_LD_NO_FIXUP_CHAINS - - - - - 77629e76 by Andrei Borzenkov at 2024-02-21T05:00:35-05:00 Namespacing for fixity signatures (#14032) Namespace specifiers were added to syntax of fixity signatures: - sigdecl ::= infix prec ops | ... + sigdecl ::= infix prec namespace_spec ops | ... To preserve namespace during renaming MiniFixityEnv type now has separate FastStringEnv fields for names that should be on the term level and for name that should be on the type level. makeMiniFixityEnv function was changed to fill MiniFixityEnv in the right way: - signatures without namespace specifiers fill both fields - signatures with 'data' specifier fill data field only - signatures with 'type' specifier fill type field only Was added helper function lookupMiniFixityEnv that takes care about looking for a name in an appropriate namespace. Updates haddock submodule. Metric Decrease: MultiLayerModulesTH_OneShot - - - - - 84357d11 by Teo Camarasu at 2024-02-21T05:01:11-05:00 rts: only collect live words in nonmoving census when non-concurrent This avoids segfaults when the mutator modifies closures as we examine them. Resolves #24393 - - - - - 9ca56dd3 by Ian-Woo Kim at 2024-02-21T05:01:53-05:00 mutex wrap in refreshProfilingCCSs - - - - - 1387966a by Cheng Shao at 2024-02-21T05:02:32-05:00 rts: remove unused HAVE_C11_ATOMICS macro This commit removes the unused HAVE_C11_ATOMICS macro. We used to have a few places that have fallback paths when HAVE_C11_ATOMICS is not defined, but that is completely redundant, since the FP_CC_SUPPORTS__ATOMICS configure check will fail when the C compiler doesn't support C11 style atomics. There are also many places (e.g. in unreg backend, SMP.h, library cbits, etc) where we unconditionally use C11 style atomics anyway which work in even CentOS 7 (gcc 4.8), the oldest distro we test in our CI, so there's no value in keeping HAVE_C11_ATOMICS. - - - - - 0f40d68f by Andreas Klebinger at 2024-02-21T05:03:09-05:00 RTS: -Ds - make sure incall is non-zero before dereferencing it. Fixes #24445 - - - - - e5886de5 by Ben Gamari at 2024-02-21T05:03:44-05:00 rts/AdjustorPool: Use ExecPage abstraction This is just a minor cleanup I found while reviewing the implementation. - - - - - 826c5b47 by Torsten Schmits at 2024-02-21T13:17:05+01:00 rename GHC.Tuple.Prim to GHC.Tuple - - - - - 09941666 by Adam Gundry at 2024-02-21T13:53:12+00:00 Define GHC2024 language edition (#24320) See https://github.com/ghc-proposals/ghc-proposals/pull/613. Also fixes #24343 and improves the documentation of language editions. Co-authored-by: Joachim Breitner <mail at joachim-breitner.de> - - - - - 2cff14d5 by Ben Gamari at 2024-02-22T09:35:56-05:00 Bump bounds - - - - - f49376b3 by Ben Gamari at 2024-02-22T09:35:56-05:00 Allow `@since` annotations in export lists Here we extend Haddock to admit `@since` annotations in export lists. These can be attached to most export list items (although not subordinate lists). These annotations supercede the declaration's `@since` annotation in produced Haddocks. - - - - - b5aa93df by Ben Gamari at 2024-02-22T12:09:06-05:00 Allow package-qualified @since declarations - - - - - 8f5957f2 by Ben Gamari at 2024-02-22T13:55:19-05:00 Documentation changes from ghc-internal restructuring Previously many declarations (e.g. `Int`) were declared to have a "home" in `Prelude`. However, now Haddock instead chooses to put these in more specific homes (e.g. `Data.Int`). Given that the "home" decision is driven by heuristics and in general these changes seem quite reasonable I am accepting them: * `Int` moved from `Prelude` to `Data.Int` * `(~)` moved from `Prelude` to `Data.Type.Equality` * `Type` moved from `GHC.Types` to `Data.Kind` * `Maybe` moved from `Prelude` to `Data.Maybe` * `Bool` moved from `Prelude` to `Data.Bool` * `Ordering` moved from `Prelude` to `Data.Ord` As well, more identifiers are now hyperlinked; it's not immediately clear *why*, but it is an improvement nevertheless. - - - - - ec33fec3 by Ben Gamari at 2024-02-22T20:36:24-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 5121a4ed by Ben Gamari at 2024-02-23T06:40:55-05:00 Allow docstrings after exports Here we extend the parser and AST to preserve docstrings following export items. We then extend Haddock to parse `@since` annotations in such docstrings, allowing changes in export structure to be properly documented. Bumps haddock submodule. - - - - - 30cfd251 by Torsten Schmits at 2024-02-24T13:00:42-05:00 rename GHC.Tuple.Prim to GHC.Tuple - - - - - 0eb2265d by Hécate Moonlight at 2024-02-24T16:02:16-05:00 Improve the synopsis and description of base - - - - - 2e36f5d2 by Jade at 2024-02-24T16:02:51-05:00 Error Messages: Properly align cyclic module error Fixes: #24476 - - - - - bbfb051c by Ben Gamari at 2024-02-24T19:10:23-05:00 Allow docstrings after exports Here we extend the parser and AST to preserve docstrings following export items. We then extend Haddock to parse `@since` annotations in such docstrings, allowing changes in export structure to be properly documented. - - - - - d8d6ad8c by Ben Gamari at 2024-02-24T19:10:23-05:00 ghc-internal: Move modules into GHC.Internal.* namespace Bumps haddock submodule due to testsuite output changes. - - - - - a82af7cd by Ben Gamari at 2024-02-24T19:10:23-05:00 ghc-internal: Rewrite `@since ` to `@since base-` These will be incrementally moved to the export sites in `base` where possible. - - - - - ca3836e1 by Ben Gamari at 2024-02-24T19:10:23-05:00 base: Migrate Haddock `not-home` pragmas from `ghc-internal` This ensures that we do not use `base` stub modules as declarations' homes when not appropriate. - - - - - c8cf3e26 by Ben Gamari at 2024-02-24T19:10:23-05:00 base: Partially freeze exports of GHC.Base Sadly there are still a few module reexports. However, at least we have decoupled from the exports of `GHC.Internal.Base`. - - - - - 272573c6 by Ben Gamari at 2024-02-24T19:10:23-05:00 Move Haddock named chunks - - - - - 2d8a881d by Ben Gamari at 2024-02-24T19:10:23-05:00 Drop GHC.Internal.Data.Int - - - - - 55c4c385 by Ben Gamari at 2024-02-24T19:10:23-05:00 compiler: Fix mention to `GHC....` modules in wasm desugaring Really, these references should be via known-key names anyways. I have fixed the proximate issue here but have opened #24472 to track the additional needed refactoring. - - - - - 64150911 by Ben Gamari at 2024-02-24T19:10:23-05:00 Accept performance shifts from ghc-internal restructure As expected, Haddock now does more work. Less expected is that some other testcases actually get faster, presumably due to less interface file loading. As well, the size_hello_artifact test regressed a bit when debug information is enabled due to debug information for the new stub symbols. Metric Decrease: T12227 T13056 Metric Increase: haddock.Cabal haddock.base MultiLayerModulesTH_OneShot size_hello_artifact - - - - - 317a915b by Ben Gamari at 2024-02-24T19:10:23-05:00 Expose GHC.Wasm.Prim from ghc-experimental Previously this was only exposed from `ghc-internal` which violates our agreement that users shall not rely on things exposed from that package. Fixes #24479. - - - - - 3bbd2bf2 by Ben Gamari at 2024-02-24T19:10:23-05:00 compiler/tc: Small optimisation of evCallStack Don't lookupIds unless we actually need them. - - - - - 3e5c9e3c by Ben Gamari at 2024-02-24T19:10:23-05:00 compiler/tc: Use toException instead of SomeException - - - - - 125714a6 by Ben Gamari at 2024-02-24T19:10:23-05:00 base: Factor out errorBelch This was useful when debugging - - - - - 3d6aae7c by Ben Gamari at 2024-02-24T19:10:23-05:00 base: Clean up imports of GHC.Stack.CloneStack - - - - - 6900306e by Ben Gamari at 2024-02-24T19:10:24-05:00 base: Move PrimMVar to GHC.Internal.MVar - - - - - 28f8a148 by Ben Gamari at 2024-02-24T19:10:24-05:00 base: Move prettyCallStack to GHC.Internal.Stack - - - - - 4892de47 by Ben Gamari at 2024-02-24T19:10:24-05:00 base: Explicit dependency to workaround #24436 Currently `ghc -M` fails to account for `.hs-boot` files correctly, leading to issues with cross-package one-shot builds failing. This currently manifests in `GHC.Exception` due to the boot file for `GHC.Internal.Stack`. Work around this by adding an explicit `import`, ensuring that `GHC.Internal.Stack` is built before `GHC.Exception`. See #24436. - - - - - 294c93a5 by Ben Gamari at 2024-02-24T19:10:24-05:00 base: Use displayException in top-level exception handler Happily this also allows us to eliminate a special case for Deadlock exceptions. Implements [CLC #198](https://github.com/haskell/core-libraries-committee/issues/198). - - - - - 732db81d by Ben Gamari at 2024-02-24T19:12:18-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - cf756a25 by Ben Gamari at 2024-02-24T22:11:53-05:00 rts: Fix symbol references in Wasm RTS - - - - - 4e4d47a0 by Jade at 2024-02-26T15:17:20-05:00 GHCi: Improve response to unloading, loading and reloading modules Fixes #13869 - - - - - f3de8a3c by Zubin Duggal at 2024-02-26T15:17:57-05:00 rel-eng/fetch-gitlab.py: Fix name of aarch64 alpine 3_18 release job - - - - - c71bfdff by Cheng Shao at 2024-02-26T15:18:35-05:00 hadrian/hie-bios: pass -j to hadrian This commit passes -j to hadrian in the hadrian/hie-bios scripts. When the user starts HLS in a fresh clone that has just been configured, it takes quite a while for hie-bios to pick up the ghc flags and start actual indexing, due to the fact that the hadrian build step defaulted to -j1, so -j speeds things up and improve HLS user experience in GHC. Also add -j flag to .ghcid to speed up ghcid, and sets the Windows build root to .hie-bios which also works and unifies with other platforms, the previous build root _hie-bios was missing from .gitignore anyway. - - - - - 50bfdb46 by Cheng Shao at 2024-02-26T15:18:35-05:00 ci: enable parallelism in hadrian/ghci scripts This commit enables parallelism when the hadrian/ghci scripts are called in CI. The time bottleneck is in the hadrian build step, but previously the build step wasn't parallelized. - - - - - 61a78231 by Felix Yan at 2024-02-26T15:19:14-05:00 m4: Correctly detect GCC version When calling as `cc`, GCC does not outputs lowercased "gcc" at least in 13.2.1 version here. ``` $ cc --version cc (GCC) 13.2.1 20230801 ... ``` This fails the check and outputs the confusing message: `configure: $CC is not gcc; assuming it's a reasonably new C compiler` This patch makes it check for upper-cased "GCC" too so that it works correctly: ``` checking version of gcc... 13.2.1 ``` - - - - - 001aa539 by Teo Camarasu at 2024-02-27T13:26:46-05:00 Fix formatting in whereFrom docstring Previously it used markdown syntax rather than Haddock syntax for code quotes - - - - - e8034d15 by Teo Camarasu at 2024-02-27T13:26:46-05:00 Move ClosureType type to ghc-internal - Use ClosureType for InfoProv.ipDesc. - Use ClosureType for CloneStack.closureType. - Now ghc-heap re-exports this type from ghc-internal. See the accompanying CLC proposal: https://github.com/haskell/core-libraries-committee/issues/210 Resolves #22600 - - - - - 3da0a551 by Matthew Craven at 2024-02-27T13:27:22-05:00 StgToJS: Simplify ExprInline constructor of ExprResult Its payload was used only for a small optimization in genAlts, avoiding a few assignments for programs of this form: case NormalDataCon arg1 arg2 of x { NormalDataCon x1 x2 -> ... ; } But when compiling with optimizations, this sort of code is generally eliminated by case-of-known-constructor in Core-to-Core. So it doesn't seem worth tracking and cleaning up again in StgToJS. - - - - - 61bc92cc by Cheng Shao at 2024-02-27T16:58:42-05:00 rts: add missing ccs_mutex guard to internal_dlopen See added comment for details. Closes #24423. - - - - - dd29d3b2 by doyougnu at 2024-02-27T16:59:23-05:00 cg: Remove GHC.Cmm.DataFlow.Collections In pursuit of #15560 and #17957 and generally removing redundancy. - - - - - d3a050d2 by Cheng Shao at 2024-02-27T17:00:00-05:00 utils: remove unused lndir from tree Ever since the removal of the make build system, the in tree lndir hasn't been actually built, so this patch removes it. - - - - - 86bf7010 by Ben Gamari at 2024-02-27T19:28:10-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 74b24a9b by Teo Camarasu at 2024-02-28T16:32:58+00:00 rts: avoid checking bdescr of value outside of Haskell heap In nonmovingTidyWeaks we want to check if the key of a weak pointer lives in the non-moving heap. We do this by checking the flags of the block the key lives in. But we need to be careful with values that live outside the Haskell heap, since they will lack a block descriptor and looking for one may lead to a segfault. In this case we should just accept that it isn't on the non-moving heap. Resolves #24492 - - - - - b4cae4ec by Simon Peyton Jones at 2024-02-29T02:10:08-05:00 In mkDataConRep, ensure the in-scope set is right A small change that fixes #24489 - - - - - 3836a110 by Cheng Shao at 2024-02-29T21:25:45-05:00 testsuite: fix T23540 fragility on 32-bit platforms T23540 is fragile on 32-bit platforms. The root cause is usage of `getEvidenceTreesAtPoint`, which internally relies on `Name`'s `Ord` instance, which is indeterministic. The solution is adding a deterministic `Ord` instance for `EvidenceInfo` and sorting the evidence trees before pretty printing. Fixes #24449. - - - - - 960c8d47 by Teo Camarasu at 2024-02-29T21:26:20-05:00 Reduce AtomicModifyIORef increment count This test leads to a lot of contention when N>2 and becomes very slow. Let's reduce the amount of work we do to compensate. Resolves #24490 - - - - - 2e46c8ad by Matthew Pickering at 2024-03-01T05:48:06-05:00 hadrian: Improve parallelism in binary-dist-dir rule I noticed that the "docs" target was needed after the libraries and executables were built. We can improve the parallelism by needing everything at once so that documentation can be built immediately after a library is built for example. - - - - - cb6c11fe by Matthew Pickering at 2024-03-01T05:48:07-05:00 ci: Bump windows and freebsd boot compilers to 9.6.4 We have previously bumped the docker images to use 9.6.4, but neglected to bump the windows images until now. - - - - - 30f06996 by Matthew Pickering at 2024-03-01T05:48:07-05:00 ci: darwin: Update to 9.6.2 for boot compiler 9.6.4 is currently broken due to #24050 Also update to use LLVM-15 rather than LLVM-11, which is out of date. - - - - - d9d69e12 by Matthew Pickering at 2024-03-01T05:48:07-05:00 Bump minimum bootstrap version to 9.6 - - - - - 67ace1c5 by Matthew Pickering at 2024-03-01T05:48:07-05:00 ci: Enable more documentation building Here we enable documentation building on 1. Darwin: The sphinx toolchain was already installed so we enable html and manpages. 2. Rocky8: Full documentation (toolchain already installed) 3. Alpine: Full documetnation (toolchain already installed) 4. Windows: HTML and manpages (toolchain already installed) Fixes #24465 - - - - - 39583c39 by Matthew Pickering at 2024-03-01T05:48:42-05:00 ci: Bump ci-images to allow updated aarch64-alpine image with llvm15 and clang15 - - - - - d91d00fc by Torsten Schmits at 2024-03-01T15:01:50-05:00 Introduce ListTuplePuns extension This implements Proposal 0475, introducing the `ListTuplePuns` extension which is enabled by default. Disabling this extension makes it invalid to refer to list, tuple and sum type constructors by using built-in syntax like `[Int]`, `(Int, Int)`, `(# Int#, Int# #)` or `(# Int | Int #)`. Instead, this syntax exclusively denotes data constructors for use with `DataKinds`. The conventional way of referring to these data constructors by prefixing them with a single quote (`'(Int, Int)`) is now a parser error. Tuple declarations have been moved to `GHC.Tuple.Prim` and the `Solo` data constructor has been renamed to `MkSolo` (in a previous commit). Unboxed tuples and sums now have real source declarations in `GHC.Types`. Unit and solo types for tuples are now called `Unit`, `Unit#`, `Solo` and `Solo#`. Constraint tuples now have the unambiguous type constructors `CTuple<n>` as well as `CUnit` and `CSolo`, defined in `GHC.Classes` like before. A new parser construct has been added for the unboxed sum data constructor declarations. The type families `Tuple`, `Sum#` etc. that were intended to provide nicer syntax have been omitted from this change set due to inference problems, to be implemented at a later time. See the MR discussion for more info. Updates the submodule utils/haddock. Updates the cabal submodule due to new language extension. Metric Increase: haddock.base Metric Decrease: MultiLayerModulesTH_OneShot size_hello_artifact Proposal document: https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0475-tuple-syntax.rst Merge request: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/8820 Tracking ticket: https://gitlab.haskell.org/ghc/ghc/-/issues/21294 - - - - - bbdb6286 by Sylvain Henry at 2024-03-01T15:01:50-05:00 JS linker: filter unboxed tuples - - - - - dec6d8d3 by Arnaud Spiwack at 2024-03-01T15:02:30-05:00 Improve error messages coming from non-linear patterns This enriched the `CtOrigin` for non-linear patterns to include data of the pattern that created the constraint (which can be quite useful if it occurs nested in a pattern) as well as an explanation why the pattern is non-restricted in (at least in some cases). - - - - - 6612388e by Arnaud Spiwack at 2024-03-01T15:02:30-05:00 Adjust documentation of linear lets according to committee decision - - - - - 1c064ef1 by Cheng Shao at 2024-03-02T17:11:19-05:00 compiler: start deprecating cmmToRawCmmHook cmmToRawCmmHook was added 4 years ago in d561c8f6244f8280a2483e8753c38e39d34c1f01. Its only user is the Asterius project, which has been archived and deprecated in favor of the ghc wasm backend. This patch starts deprecating cmmToRawCmmHook by placing a DEPRECATED pragma, and actual removal shall happen in a future GHC major release if no issue to oppose the deprecation has been raised in the meantime. - - - - - 9b74845f by Andrew Lelechenko at 2024-03-02T17:11:55-05:00 Data.List.NonEmpty.unzip: use WARNING with category instead of DEPRECATED CLC proposal: https://github.com/haskell/core-libraries-committee/issues/258 - - - - - 61bb5ff6 by Finley McIlwaine at 2024-03-04T09:01:40-08:00 add -fprof-late-overloaded and -fprof-late-overloaded-calls * Refactor late cost centre insertion for extensibility * Add two more late cost centre insertion methods that add SCCs to overloaded top level bindings and call sites with dictionary arguments. * Some tests for the basic functionality of the new insertion methods Resolves: #24500 - - - - - 82ccb801 by Andreas Klebinger at 2024-03-04T19:59:14-05:00 x86-ncg: Fix fma codegen when arguments are globals Fix a bug in the x86 ncg where results would be wrong when the desired output register and one of the input registers were the same global. Also adds a tiny optimization to make use of the memory addressing support when convenient. Fixes #24496 - - - - - 18ad1077 by Matthew Pickering at 2024-03-05T14:22:31-05:00 rel_eng: Update hackage docs upload scripts This adds the upload of ghc-internal and ghc-experimental to our scripts which upload packages to hackage. - - - - - bf47c9ba by Matthew Pickering at 2024-03-05T14:22:31-05:00 docs: Remove stray module comment from GHC.Profiling.Eras - - - - - 37d9b340 by Matthew Pickering at 2024-03-05T14:22:31-05:00 Fix ghc-internal cabal file The file mentioned some artifacts relating to the base library. I have renamed these to the new ghc-internal variants. - - - - - 23f2a478 by Matthew Pickering at 2024-03-05T14:22:31-05:00 Fix haddock source links and hyperlinked source There were a few issues with the hackage links: 1. We were using the package id rather than the package name for the package links. This is fixed by now allowing the template to mention %pkg% or %pkgid% and substituing both appropiatly. 2. The `--haddock-base-url` flag is renamed to `--haddock-for-hackage` as the new base link works on a local or remote hackage server. 3. The "src" path including too much stuff, so cross-package source links were broken as the template was getting double expanded. Fixes #24086 - - - - - 2fa336a9 by Ben Gamari at 2024-03-05T14:23:07-05:00 filepath: Bump submodule to 1.5.2.0 - - - - - 31217944 by Ben Gamari at 2024-03-05T14:23:07-05:00 os-string: Bump submodule to 2.0.2 - - - - - 4074a3f2 by Matthew Pickering at 2024-03-05T21:44:35-05:00 base: Reflect new era profiling RTS flags in GHC.RTS.Flags * -he profiling mode * -he profiling selector * --automatic-era-increment CLC proposal #254 - https://github.com/haskell/core-libraries-committee/issues/254 - - - - - a8c0e31b by Sylvain Henry at 2024-03-05T21:45:14-05:00 JS: faster implementation for some numeric primitives (#23597) Use faster implementations for the following primitives in the JS backend by not using JavaScript's BigInt: - plusInt64 - minusInt64 - minusWord64 - timesWord64 - timesInt64 Co-authored-by: Josh Meredith <joshmeredith2008 at gmail.com> - - - - - 21e3f325 by Cheng Shao at 2024-03-05T21:45:52-05:00 rts: add -xr option to control two step allocator reserved space size This patch adds a -xr RTS option to control the size of virtual memory address space reserved by the two step allocator on a 64-bit platform, see added documentation for explanation. Closes #24498. - - - - - dedcf102 by Cheng Shao at 2024-03-06T13:39:04-05:00 rts: expose HeapAlloc.h as public header This commit exposes HeapAlloc.h as a public header. The intention is to expose HEAP_ALLOCED/HEAP_ALLOCED_GC, so they can be used in assertions in other public headers, and they may also be useful for user code. - - - - - d19441d7 by Cheng Shao at 2024-03-06T13:39:04-05:00 rts: assert pointer is indeed heap allocated in Bdescr() This commit adds an assertion to Bdescr() to assert the pointer is indeed heap allocated. This is useful to rule out RTS bugs that attempt to access non-existent block descriptor of a static closure, #24492 being one such example. - - - - - 9a656a04 by Ben Gamari at 2024-03-06T13:39:39-05:00 ghc-experimental: Add dummy dependencies to work around #23942 This is a temporary measure to improve CI reliability until a proper solution is developed. Works around #23942. - - - - - 1e84b924 by Simon Peyton Jones at 2024-03-06T13:39:39-05:00 Three compile perf improvements with deep nesting These were changes are all triggered by #24471. 1. Make GHC.Core.Opt.SetLevels.lvlMFE behave better when there are many free variables. See Note [Large free-variable sets]. 2. Make GHC.Core.Opt.Arity.floatIn a bit lazier in its Cost argument. This benefits the common case where the ArityType turns out to be nullary. See Note [Care with nested expressions] 3. Make GHC.CoreToStg.Prep.cpeArg behave for deeply-nested expressions. See Note [Eta expansion of arguments in CorePrep] wrinkle (EA2). Compile times go down by up to 4.5%, and much more in artificial cases. (Geo mean of compiler/perf changes is -0.4%.) Metric Decrease: CoOpt_Read T10421 T12425 - - - - - c4b13113 by Hécate Moonlight at 2024-03-06T13:40:17-05:00 Use "module" instead of "library" when applicable in base haddocks - - - - - 9cd9efb4 by Vladislav Zavialov at 2024-03-07T13:01:54+03:00 Rephrase error message to say "visible arguments" (#24318) * Main change: make the error message generated by mkFunTysMsg more accurate by changing "value arguments" to "visible arguments". * Refactor: define a new type synonym VisArity and use it instead of Arity in a few places. It might be the case that there other places in the compiler that should talk about visible arguments rather than value arguments, but I haven't tried to find them all, focusing only on the error message reported in the ticket. - - - - - 4b6e76b5 by Patrick at 2024-03-07T22:09:30+08:00 fix haskell/haddock#24493, with module name introduced in hieAst The accompanies haddoc PR with GHC PR https://gitlab.haskell.org/ghc/ghc/-/merge_requests/12153 Two things have been done: 1. Link is introduced to every `X` in `module X where`, since we introduce the module name to HieAst, 2. `{-# LINE 4 "hypsrc-test/src/PositionPragmas.hs" #-}` is added before the `module PositionPragmas where` in ` hypsrc-test/ref/src/PositionPragmas.html `.It ensures only a single hieAst for file `hypsrc-test/src/PositionPragmas.hs` is generated. - - - - - d523a6a7 by Ben Gamari at 2024-03-07T19:40:45-05:00 Bump array submodule - - - - - 7e55003c by Ben Gamari at 2024-03-07T19:40:45-05:00 Bump stm submodule - - - - - 32d337ef by Ben Gamari at 2024-03-07T19:40:45-05:00 Introduce exception context Here we introduce the `ExceptionContext` type and `ExceptionAnnotation` class, allowing dynamically-typed user-defined annotations to be attached to exceptions. CLC Proposal: https://github.com/haskell/core-libraries-committee/issues/199 GHC Proposal: https://github.com/ghc-proposals/ghc-proposals/pull/330 - - - - - 39f3d922 by Ben Gamari at 2024-03-07T19:40:46-05:00 testsuite/interface-stability: Update documentation - - - - - fdea7ada by Ben Gamari at 2024-03-07T19:40:46-05:00 ghc-internal: comment formatting - - - - - 4fba42ef by Ben Gamari at 2024-03-07T19:40:46-05:00 compiler: Default and warn ExceptionContext constraints - - - - - 3886a205 by Ben Gamari at 2024-03-07T19:40:46-05:00 base: Introduce exception backtraces Here we introduce the `Backtraces` type and associated machinery for attaching these via `ExceptionContext`. These has a few compile-time regressions (`T15703` and `T9872d`) due to the additional dependencies in the exception machinery. As well, there is a surprisingly large regression in the `size_hello_artifact` test. This appears to be due to various `Integer` and `Read` bits now being reachable at link-time. I believe it should be possible to avoid this but I have accepted the change for now to get the feature merged. CLC Proposal: https://github.com/haskell/core-libraries-committee/issues/199 GHC Proposal: https://github.com/ghc-proposals/ghc-proposals/pull/330 Metric Increase: T15703 T9872d size_hello_artifact - - - - - 18c5409f by Ben Gamari at 2024-03-07T19:40:46-05:00 users guide: Release notes for exception backtrace work - - - - - f849c5fc by Ben Gamari at 2024-03-07T19:40:46-05:00 compiler: Don't show ExceptionContext of GhcExceptions Most GhcExceptions are user-facing errors and therefore the ExceptionContext has little value. Ideally we would enable it in the DEBUG compiler but I am leaving this for future work. - - - - - dc646e6f by Sylvain Henry at 2024-03-07T19:40:46-05:00 Disable T9930fail for the JS target (cf #19174) - - - - - bfc09760 by Alan Zimmerman at 2024-03-07T19:41:22-05:00 Update showAstData to honour blanking of AnnParen Also tweak rendering of SrcSpan to remove extra blank line. - - - - - 50454a29 by Ben Gamari at 2024-03-08T03:32:42-05:00 ghc-internal: Eliminate GHC.Internal.Data.Kind This was simply reexporting things from `ghc-prim`. Instead reexport these directly from `Data.Kind`. Also add build ordering dependency to work around #23942. - - - - - 38a4b6ab by Ben Gamari at 2024-03-08T03:33:18-05:00 rts: Fix SET_HDR initialization of retainer set This fixes a regression in retainer set profiling introduced by b0293f78cb6acf2540389e22bdda420d0ab874da. Prior to that commit the heap traversal word would be initialized by `SET_HDR` using `LDV_RECORD_CREATE`. However, the commit added a `doingLDVProfiling` check in `LDV_RECORD_CREATE`, meaning that this initialization no longer happened. Given that this initialization was awkwardly indirectly anyways, I have fixed this by explicitly initializating the heap traversal word to `NULL` in `SET_PROF_HDR`. This is equivalent to the previous behavior, but much more direct. Fixes #24513. - - - - - 635abccc by Ben Gamari at 2024-03-08T17:09:06-05:00 Bump ghc version to 9.10 - - - - - 2859a637 by Ben Gamari at 2024-03-08T18:26:47-05:00 base: Use strerror_r instead of strerror As noted by #24344, `strerror` is not necessarily thread-safe. Thankfully, POSIX.1-2001 has long offered `strerror_r`, which is safe to use. Fixes #24344. CLC discussion: https://github.com/haskell/core-libraries-committee/issues/249 - - - - - 5b934048 by Ben Gamari at 2024-03-08T18:50:12-05:00 Bump base upper bound - - - - - b30d134e by Ben Gamari at 2024-03-08T18:50:44-05:00 Testsuite output update - - - - - edb9bf77 by Jade at 2024-03-09T03:39:38-05:00 Error messages: Improve Error messages for Data constructors in type signatures. This patch improves the error messages from invalid type signatures by trying to guess what the user did and suggesting an appropriate fix. Partially fixes: #17879 - - - - - cfb197e3 by Patrick at 2024-03-09T03:40:15-05:00 HieAst: add module name #24493 The main purpose of this is to tuck the module name `xxx` in `module xxx where` into the hieAst. It should fix #24493. The following have been done: 1. Renamed and update the `tcg_doc_hdr :: Maybe (LHsDoc GhcRn)` to `tcg_hdr_info :: (Maybe (LHsDoc GhcRn), Maybe (XRec GhcRn ModuleName))` To store the located module name information. 2. update the `RenamedSource` and `RenamedStuff` with extra `Maybe (XRec GhcRn ModuleName)` located module name information. 3. add test `testsuite/tests/hiefile/should_compile/T24493.hs` to ensure the module name is added and update several relevent tests. 4. accompanied submodule haddoc test update MR in https://gitlab.haskell.org/ghc/haddock/-/merge_requests/53 - - - - - 2341d81e by Vaibhav Sagar at 2024-03-09T03:40:54-05:00 GHC.Utils.Binary: fix a couple of typos - - - - - 5580e1bd by Ben Gamari at 2024-03-09T03:41:30-05:00 rts: Drop .wasm suffix from .prof file names This replicates the behavior on Windows, where `Hi.exe` will produce profiling output named `Hi.prof` instead of `Hi.exe.prof`. While in the area I also fixed the extension-stripping logic, which incorrectly rewrote `Hi.exefoo` to `Hi.foo`. Closes #24515. - - - - - 259495ee by Cheng Shao at 2024-03-09T03:41:30-05:00 testsuite: drop exe extension from .hp & .prof filenames See #24515 for details. - - - - - c477a8d2 by Ben Gamari at 2024-03-09T03:42:05-05:00 rts/linker: Enable GOT support on all platforms There is nothing platform-dependent about our GOT implementation and GOT support is needed by `T24171` on i386. - - - - - 2e592857 by Vladislav Zavialov at 2024-03-09T03:42:41-05:00 Drop outdated comment on TcRnIllformedTypePattern This should have been done in 0f0c53a501b but I missed it. - - - - - c554b4da by Ben Gamari at 2024-03-09T09:39:20-05:00 rts/CloneStack: Bounds check array write - - - - - 15c590a5 by Ben Gamari at 2024-03-09T09:39:20-05:00 rts/CloneStack: Don't expose helper functions in header - - - - - e831ce31 by Ben Gamari at 2024-03-09T09:39:20-05:00 base: Move internals of GHC.InfoProv into GHC.InfoProv.Types Such that we can add new helpers into GHC.InfoProv.Types without breakage. - - - - - 6948e24d by Ben Gamari at 2024-03-09T09:39:20-05:00 rts: Lazily decode IPE tables Previously we would eagerly allocate `InfoTableEnt`s for each info table registered in the info table provenance map. However, this costs considerable memory and initialization time. Instead we now lazily decode these tables. This allows us to use one-third the memory *and* opens the door to taking advantage of sharing opportunities within a module. This required considerable reworking since lookupIPE now must be passed its result buffer. - - - - - 9204a04e by Ben Gamari at 2024-03-09T09:39:20-05:00 rts/IPE: Don't expose helper in header - - - - - 308926ff by Ben Gamari at 2024-03-09T09:39:20-05:00 rts/IPE: Share module_name within a Node This allows us to shave a 64-bit word off of the packed IPE entry size. - - - - - bebdea05 by Ben Gamari at 2024-03-09T09:39:20-05:00 IPE: Expose unit ID in InfoTableProv Here we add the unit ID to the info table provenance structure. - - - - - 6519c9ad by Ben Gamari at 2024-03-09T09:39:35-05:00 rts: Refactor GHC.Stack.CloneStack.decode Don't allocate a Ptr constructor per frame. - - - - - ed0b69dc by Ben Gamari at 2024-03-09T09:39:35-05:00 base: Do not expose whereFrom# from GHC.Exts - - - - - 2b1faea9 by Vladislav Zavialov at 2024-03-09T17:38:21-05:00 docs: Update info on TypeAbstractions * Mention TypeAbstractions in 9.10.1-notes.rst * Set the status to "Experimental". * Add a "Since: GHC 9.x" comment to each section. - - - - - f8b88918 by Ben Gamari at 2024-03-09T21:21:46-05:00 ci-images: Bump Alpine image to bootstrap with 9.8.2 - - - - - 705e6927 by Ben Gamari at 2024-03-09T21:21:46-05:00 testsuite: Mark T24171 as fragile due to #24512 I will fix this but not in time for 9.10.1-alpha1 - - - - - c74196e1 by Ben Gamari at 2024-03-09T21:21:46-05:00 testsuite: Mark linker_unload_native as fragile In particular this fails on platforms without `dlinfo`. I plan to address this but not before 9.10.1-alpha1. - - - - - f4d87f7a by Ben Gamari at 2024-03-09T21:21:46-05:00 configure: Bump version to 9.10 - - - - - 88df9a5f by Ben Gamari at 2024-03-09T21:21:46-05:00 Bump transformers submodule to 0.6.1.1 - - - - - 8176d5e8 by Ben Gamari at 2024-03-09T21:21:46-05:00 testsuite: Increase ulimit for T18623 1 MByte was just too tight and failed intermittently on some platforms (e.g. CentOS 7). Bumping the limit to 8 MByte should provide sufficient headroom. Fixes #23139. - - - - - c74b38a3 by Ben Gamari at 2024-03-09T21:21:46-05:00 base: Bump version to 4.20.0.0 - - - - - b2937fc3 by Ben Gamari at 2024-03-09T21:21:46-05:00 ghc-internal: Set initial version at 9.1001.0 This provides PVP compliance while maintaining a clear correspondence between GHC releases and `ghc-internal` versions. - - - - - 4ae7d868 by Ben Gamari at 2024-03-09T21:21:46-05:00 ghc-prim: Bump version to 0.11.0 - - - - - 50798dc6 by Ben Gamari at 2024-03-09T21:21:46-05:00 template-haskell: Bump version to 2.22.0.0 - - - - - 8564f976 by Ben Gamari at 2024-03-09T21:21:46-05:00 base-exports: Accommodate spurious whitespace changes in 32-bit output It appears that this was - - - - - 9d4f0e98 by Ben Gamari at 2024-03-09T21:21:46-05:00 users-guide: Move exception backtrace relnotes to 9.10 This was previously mistakenly added to the GHC 9.8 release notes. - - - - - 145eae60 by Ben Gamari at 2024-03-09T21:21:46-05:00 gitlab/rel_eng: Fix name of Rocky8 artifact - - - - - 39c2a630 by Ben Gamari at 2024-03-09T21:21:46-05:00 gitlab/rel_eng: Fix path of generate_jobs_metadata - - - - - aed034de by Ben Gamari at 2024-03-09T21:21:46-05:00 gitlab/upload: Rework recompression The old `combine` approach was quite fragile due to use of filename globbing. Moreover, it didn't parallelize well. This refactoring makes the goal more obvious, parallelizes better, and is more robust. - - - - - 9bdf3586 by Ben Gamari at 2024-03-09T21:37:44-05:00 Merge branch 'ghc-9.10' into ghc-head - - - - - cec76981 by Ben Gamari at 2024-03-09T21:54:00-05:00 Bump GHC version to 9.11 - - - - - 4c59feb7 by Ben Gamari at 2024-03-09T22:15:01-05:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-head - - - - - dc207d06 by Ben Gamari at 2024-03-10T08:56:08-04:00 configure: Bump GHC version to 9.11 Bumps haddock submodule. - - - - - 8b2513e8 by Ben Gamari at 2024-03-11T01:20:03-04:00 rts/linker: Don't unload code when profiling is enabled The heap census may contain references (e.g. `Counter.identity`) to static data which must be available when the census is reported at the end of execution. Fixes #24512. - - - - - 7810b4c3 by Ben Gamari at 2024-03-11T01:20:03-04:00 rts/linker: Don't unload native objects when dlinfo isn't available To do so is unsafe as we have no way of identifying references to symbols provided by the object. Fixes #24513. Fixes #23993. - - - - - 0590764c by Ben Gamari at 2024-03-11T01:20:39-04:00 rel_eng/upload: Purge both $rel_name/ and $ver/ This is necessary for prereleases, where GHCup accesses the release via `$ver/` - - - - - b85a4631 by Brandon Chinn at 2024-03-12T19:25:56-04:00 Remove duplicate code normalising slashes - - - - - c91946f9 by Brandon Chinn at 2024-03-12T19:25:56-04:00 Simplify regexes with raw strings - - - - - 1a5f53c6 by Brandon Chinn at 2024-03-12T19:25:57-04:00 Don't normalize backslashes in characters - - - - - 7ea971d3 by Andrei Borzenkov at 2024-03-12T19:26:32-04:00 Fix compiler crash caused by implicit RHS quantification in type synonyms (#24470) - - - - - 39f3ac3e by Cheng Shao at 2024-03-12T19:27:11-04:00 Revert "compiler: make genSym use C-based atomic increment on non-JS 32-bit platforms" This reverts commit 615eb855416ce536e02ed935ecc5a6f25519ae16. It was originally intended to fix #24449, but it was merely sweeping the bug under the rug. 3836a110577b5c9343915fd96c1b2c64217e0082 has properly fixed the fragile test, and we no longer need the C version of genSym. Furthermore, the C implementation causes trouble when compiling with clang that targets i386 due to alignment warning and libatomic linking issue, so it makes sense to revert it. - - - - - e6bfb85c by Cheng Shao at 2024-03-12T19:27:11-04:00 compiler: fix out-of-bound memory access of genSym on 32-bit This commit fixes an unnoticed out-of-bound memory access of genSym on 32-bit. ghc_unique_inc is 32-bit sized/aligned on 32-bit platforms, but we mistakenly treat it as a Word64 pointer in genSym, and therefore will accidentally load 2 garbage higher bytes, or with a small but non-zero chance, overwrite something else in the data section depends on how the linker places the data segments. This regression was introduced in !11802 and fixed here. - - - - - 77171cd1 by Ben Orchard at 2024-03-14T09:00:40-04:00 Note mutability of array and address access primops Without an understanding of immutable vs. mutable memory, the index primop family have a potentially non-intuitive type signature: indexOffAddr :: Addr# -> Int# -> a readOffAddr :: Addr# -> Int# -> State# d -> (# State# d, a #) indexOffAddr# might seem like a free generality improvement, which it certainly is not! This change adds a brief note on mutability expectations for most index/read/write access primops. - - - - - 7da7f8f6 by Alan Zimmerman at 2024-03-14T09:01:15-04:00 EPA: Fix regression discarding comments in contexts Closes #24533 - - - - - 73be65ab by Fendor at 2024-03-19T01:42:53-04:00 Fix sharing of 'IfaceTyConInfo' during core to iface type translation During heap analysis, we noticed that during generation of 'mi_extra_decls' we have lots of duplicates for the instances: * `IfaceTyConInfo NotPromoted IfaceNormalTyCon` * `IfaceTyConInfo IsPromoted IfaceNormalTyCon` which should be shared instead of duplicated. This duplication increased the number of live bytes by around 200MB while loading the agda codebase into GHCi. These instances are created during `CoreToIface` translation, in particular `toIfaceTyCon`. The generated core looks like: toIfaceTyCon = \ tc_sjJw -> case $wtoIfaceTyCon tc_sjJw of { (# ww_sjJz, ww1_sjNL, ww2_sjNM #) -> IfaceTyCon ww_sjJz (IfaceTyConInfo ww1_sjNL ww2_sjNM) } whichs removes causes the sharing to work propery. Adding explicit sharing, with NOINLINE annotations, changes the core to: toIfaceTyCon = \ tc_sjJq -> case $wtoIfaceTyCon tc_sjJq of { (# ww_sjNB, ww1_sjNC #) -> IfaceTyCon ww_sjNB ww1_sjNC } which looks much more like sharing is happening. We confirmed via ghc-debug that all duplications were eliminated and the number of live bytes are noticeably reduced. - - - - - bd8209eb by Alan Zimmerman at 2024-03-19T01:43:28-04:00 EPA: Address more 9.10.1-alpha1 regressions from recent changes Closes #24533 Hopefully for good this time - - - - - 31bf85ee by Fendor at 2024-03-19T14:48:08-04:00 Escape multiple arguments in the settings file Uses responseFile syntax. The issue arises when GHC is installed on windows into a location that has a space, for example the user name is 'Fake User'. The $topdir will also contain a space, consequentially. When we resolve the top dir in the string `-I$topdir/mingw/include`, then `words` will turn this single argument into `-I/C/Users/Fake` and `User/.../mingw/include` which trips up the flag argument parser of various tools such as gcc or clang. We avoid this by escaping the $topdir before replacing it in `initSettngs`. Additionally, we allow to escape spaces and quotation marks for arguments in `settings` file. Add regression test case to count the number of options after variable expansion and argument escaping took place. Additionally, we check that escaped spaces and double quotation marks are correctly parsed. - - - - - f45f700e by Matthew Pickering at 2024-03-19T14:48:44-04:00 Read global package database from settings file Before this patch, the global package database was always assumed to be in libdir </> package.conf.d. This causes issues in GHC's build system because there are sometimes situations where the package database you need to use is not located in the same place as the settings file. * The stage1 compiler needs to use stage1 libraries, so we should set "Global Package DB" for the stage1 compiler to the stage1 package database. * Stage 2 cross compilers need to use stage2 libraries, so likewise, we should set the package database path to `_build/stage2/lib/` * The normal situation is where the stage2 compiler uses stage1 libraries. Then everything lines up. * When installing we have rearranged everything so that the settings file and package database line up properly, so then everything should continue to work as before. In this case we set the relative package db path to `package.conf.d`, so it resolves the same as before. * ghc-pkg needs to be modified as well to look in the settings file fo the package database rather than assuming the global package database location relative to the lib folder. * Cabal/cabal-install will work correctly because they query the global package database using `--print-global-package-db`. A reasonable question is why not generate the "right" settings files in the right places in GHC's build system. In order to do this you would need to engineer wrappers for all executables to point to a specific libdir. There are also situations where the same package db is used by two different compilers with two different settings files (think stage2 cross compiler and stage3 compiler). In short, this 10 line patch allows for some reasonable simplifications in Hadrian at very little cost to anything else. Fixes #24502 - - - - - 4c8f1794 by Matthew Pickering at 2024-03-19T14:48:44-04:00 hadrian: Remove stage1 testsuite wrappers logic Now instead of producing wrappers which pass the global package database argument to ghc and ghc-pkg, we write the location of the correct package database into the settings file so you can just use the intree compiler directly. - - - - - da0d8ba5 by Matthew Craven at 2024-03-19T14:49:20-04:00 Remove unused ghc-internal module "GHC.Internal.Constants" - - - - - b56d2761 by Matthew Craven at 2024-03-19T14:49:20-04:00 CorePrep: Rework lowering of BigNat# literals Don't use bigNatFromWord#, because that's terrible: * We shouldn't have to traverse a linked list at run-time to build a BigNat# literal. That's just silly! * The static List object we have to create is much larger than the actual BigNat#'s contents, bloating code size. * We have to read the corresponding interface file, which causes un-tracked implicit dependencies. (#23942) Instead, encode them into the appropriate platform-dependent sequence of bytes, and generate code that copies these bytes at run-time from an Addr# literal into a new ByteArray#. A ByteArray# literal would be the correct thing to generate, but these are not yet supported; see also #17747. Somewhat surprisingly, this change results in a slight reduction in compiler allocations, averaging around 0.5% on ghc's compiler performance tests, including when compiling programs that contain no bignum literals to begin with. The specific cause of this has not been investigated. Since this lowering no longer reads the interface file for GHC.Num.BigNat, the reasoning in Note [Depend on GHC.Num.Integer] is obsoleted. But the story of un-tracked built-in dependencies remains complex, and Note [Tracking dependencies on primitives] now exists to explain this complexity. Additionally, many empty imports have been modified to refer to this new note and comply with its guidance. Several empty imports necessary for other reasons have also been given brief explanations. Metric Decrease: MultiLayerModulesTH_OneShot - - - - - 349ea330 by Fendor at 2024-03-19T14:50:00-04:00 Eliminate thunk in 'IfaceTyCon' Heap analysis showed that `IfaceTyCon` retains a thunk to `IfaceTyConInfo`, defeating the sharing of the most common instances of `IfaceTyConInfo`. We make sure the indirection is removed by adding bang patterns to `IfaceTyCon`. Experimental results on the agda code base, where the `mi_extra_decls` were read from disk: Before this change, we observe around 8654045 instances of: `IfaceTyCon[Name,THUNK_1_0]` But these thunks almost exclusively point to a shared value! Forcing the thunk a little bit more, leads to `ghc-debug` reporting: `IfaceTyCon[Name:Name,IfaceTyConInfo]` and a noticeable reduction of live bytes (on agda ~10%). - - - - - 594bee0b by Krzysztof Gogolewski at 2024-03-19T14:50:36-04:00 Minor misc cleanups - GHC.HsToCore.Foreign.JavaScript: remove dropRuntimeRepArgs; boxed tuples don't take RuntimeRep args - GHC.HsToCore.Foreign.Call: avoid partial pattern matching - GHC.Stg.Unarise: strengthen the assertion; we can assert that non-rubbish literals are unary rather than just non-void - GHC.Tc.Gen.HsType: make sure the fsLit "literal" rule fires - users_guide/using-warnings.rst: remove -Wforall-identifier, now deprecated and does nothing - users_guide/using.rst: fix formatting - andy_cherry/test.T: remove expect_broken_for(23272...), 23272 is fixed The rest are simple cleanups. - - - - - cf55a54b by Ben Gamari at 2024-03-19T14:51:12-04:00 mk/relpath: Fix quoting Previously there were two instances in this script which lacked proper quoting. This resulted in `relpath` invocations in the binary distribution Makefile producing incorrect results on Windows, leading to confusing failures from `sed` and the production of empty package registrations. Fixes #24538. - - - - - 5ff88389 by Bryan Richter at 2024-03-19T14:51:48-04:00 testsuite: Disable T21336a on wasm - - - - - 60023351 by Ben Gamari at 2024-03-19T22:33:10-04:00 hadrian/bindist: Eliminate extraneous `dirname` invocation Previously we would call `dirname` twice per installed library file. We now instead reuse this result. This helps appreciably on Windows, where processes are quite expensive. - - - - - 616ac300 by Ben Gamari at 2024-03-19T22:33:10-04:00 hadrian: Package mingw toolchain in expected location This fixes #24525, a regression due to 41cbaf44a6ab5eb9fa676d65d32df8377898dc89. Specifically, GHC expects to find the mingw32 toolchain in the binary distribution root. However, after this patch it was packaged in the `lib/` directory. - - - - - de9daade by Ben Gamari at 2024-03-19T22:33:11-04:00 gitlab/rel_eng: More upload.sh tweaks - - - - - 1dfe12db by Ben Gamari at 2024-03-19T22:33:11-04:00 rel_eng: Drop dead prepare_docs codepath - - - - - dd2d748b by Ben Gamari at 2024-03-19T22:33:11-04:00 rel_env/recompress_all: unxz before recompressing Previously we would rather compress the xz *again*, before in addition compressing it with the desired scheme. Fixes #24545. - - - - - 9d936c57 by Ben Gamari at 2024-03-19T22:33:11-04:00 mk-ghcup-metadata: Fix directory of testsuite tarball As reported in #24546, the `dlTest` artifact should be extracted into the `testsuite` directory. - - - - - 6d398066 by Ben Gamari at 2024-03-19T22:33:11-04:00 ghcup-metadata: Don't populate dlOutput unless necessary ghcup can apparently infer the output name of an artifact from its URL. Consequently, we should only include the `dlOutput` field when it would differ from the filename of `dlUri`. Fixes #24547. - - - - - 576f8b7e by Zubin Duggal at 2024-03-19T22:33:46-04:00 Revert "Apply shellcheck suggestion to SUBST_TOOLDIR" This reverts commit c82770f57977a2b5add6e1378f234f8dd6153392. The shellcheck suggestion is spurious and results in SUBST_TOOLDIR being a no-op. `set` sets positional arguments for bash, but we want to set the variable given as the first autoconf argument. Fixes #24542 Metric decreases because the paths in the settings file are now shorter, so we allocate less when we read the settings file. ------------------------- Metric Decrease: T12425 T13035 T9198 ------------------------- - - - - - cdfe6e01 by Fendor at 2024-03-19T22:34:22-04:00 Compact serialisation of IfaceAppArgs In #24563, we identified that IfaceAppArgs serialisation tags each cons cell element with a discriminator byte. These bytes add up quickly, blowing up interface files considerably when '-fwrite-if-simplified-core' is enabled. We compact the serialisation by writing out the length of 'IfaceAppArgs', followed by serialising the elements directly without any discriminator byte. This improvement can decrease the size of some interface files by up to 35%. - - - - - 97a2bb1c by Simon Peyton Jones at 2024-03-20T17:11:29+00:00 Expand untyped splices in tcPolyExprCheck Fixes #24559 - - - - - 5f275176 by Alan Zimmerman at 2024-03-20T22:44:12-04:00 EPA: Clean up Exactprint helper functions a bit - Introduce a helper lens to compose on `EpAnn a` vs `a` versions - Rename some prime versions of functions back to non-prime They were renamed during the rework - - - - - da2a10ce by Vladislav Zavialov at 2024-03-20T22:44:48-04:00 Type operators in promoteOccName (#24570) Type operators differ from term operators in that they are lexically classified as (type) constructors, not as (type) variables. Prior to this change, promoteOccName did not account for this difference, causing a scoping issue that affected RequiredTypeArguments. type (!@#) = Bool f = idee (!@#) -- Not in scope: ‘!@#’ (BUG) Now we have a special case in promoteOccName to account for this. - - - - - 247fc0fa by Preetham Gujjula at 2024-03-21T10:19:18-04:00 docs: Remove mention of non-existent Ord instance for Complex The documentation for Data.Complex says that the Ord instance for Complex Float is deficient, but there is no Ord instance for Complex a. The Eq instance for Complex Float is similarly deficient, so we use that as an example instead. - - - - - 6fafc51e by Andrei Borzenkov at 2024-03-21T10:19:54-04:00 Fix TH handling in `pat_to_type_pat` function (#24571) There was missing case for `SplicePat` in `pat_to_type_at` function, hence patterns with splicing that checked against `forall->` doesn't work properly because they fall into the "illegal pattern" case. Code example that is now accepted: g :: forall a -> () g $([p| a |]) = () - - - - - 52072f8e by Sylvain Henry at 2024-03-21T21:01:59-04:00 Type-check default declarations before deriving clauses (#24566) See added Note and #24566. Default declarations must be type-checked before deriving clauses. - - - - - 7dfdf3d9 by Sylvain Henry at 2024-03-21T21:02:40-04:00 Lexer: small perf changes - Use unsafeChr because we know our values to be valid - Remove some unnecessary use of `ord` (return Word8 values directly) - - - - - 864922ef by Sylvain Henry at 2024-03-21T21:02:40-04:00 JS: fix some comments - - - - - 3e0b2b1f by Sebastian Graf at 2024-03-21T21:03:16-04:00 Simplifier: Re-do dependency analysis in abstractFloats (#24551) In #24551, we abstracted a string literal binding over a type variable, triggering a CoreLint error when that binding floated to top-level. The solution implemented in this patch fixes this by re-doing dependency analysis on a simplified recursive let binding that is about to be type abstracted, in order to find the minimal set of type variables to abstract over. See wrinkle (AB5) of Note [Floating and type abstraction] for more details. Fixes #24551 - - - - - 8a8ac65a by Matthew Craven at 2024-03-23T00:20:52-04:00 Improve toInteger @Word32 on 64-bit platforms On 64-bit platforms, every Word32 fits in an Int, so we can convert to Int# without having to perform the overflow check integerFromWord# uses internally. - - - - - 0c48f2b9 by Apoorv Ingle at 2024-03-23T00:21:28-04:00 Fix for #24552 (see testcase T24552) Fixes for a bug in desugaring pattern synonyms matches, introduced while working on on expanding `do`-blocks in #18324 The `matchWrapper` unecessarily (and incorrectly) filtered out the default wild patterns in a match. Now the wild pattern alternative is simply ignored by the pm check as its origin is `Generated`. The current code now matches the expected semantics according to the language spec. - - - - - b72705e9 by Simon Peyton Jones at 2024-03-23T00:22:04-04:00 Print more info about kinds in error messages This fixes #24553, where GHC unhelpfully said error: [GHC-83865] • Expected kind ‘* -> * -> *’, but ‘Foo’ has kind ‘* -> * -> *’ See Note [Showing invisible bits of types in error messages] - - - - - 8f7cfc7e by Tristan Cacqueray at 2024-03-23T00:22:44-04:00 docs: remove the don't use float hint This hint is outdated, ``Complex Float`` are now specialised, and the heap space suggestion needs more nuance so it should be explained in the unboxed/storable array documentation. - - - - - 5bd8ed53 by Andreas Klebinger at 2024-03-23T16:18:33-04:00 NCG: Fix a bug in jump shortcutting. When checking if a jump has more than one destination account for the possibility of some jumps not being representable by a BlockId. We do so by having isJumpishInstr return a `Maybe BlockId` where Nothing represents non-BlockId jump destinations. Fixes #24507 - - - - - 8d67f247 by Ben Gamari at 2024-03-23T16:19:09-04:00 docs: Drop old release notes, add for 9.12.1 - - - - - 7db8c992 by Cheng Shao at 2024-03-25T13:45:46-04:00 rts: fix clang compilation on aarch64 This patch fixes function prototypes in ARMOutlineAtomicsSymbols.h which causes "error: address argument to atomic operation must be a pointer to _Atomic type" when compiling with clang on aarch64. - - - - - 237194ce by Sylvain Henry at 2024-03-25T13:46:27-04:00 Lexer: fix imports for Alex 3.5.1 (#24583) - - - - - 810660b7 by Cheng Shao at 2024-03-25T22:19:16-04:00 libffi-tarballs: bump libffi-tarballs submodule to libffi 3.4.6 This commit bumps the libffi-tarballs submodule to libffi 3.4.6, which includes numerous upstream libffi fixes, especially https://github.com/libffi/libffi/issues/760. - - - - - d2ba41e8 by Alan Zimmerman at 2024-03-25T22:19:51-04:00 EPA: do not duplicate comments in signature RHS - - - - - 32a8103f by Rodrigo Mesquita at 2024-03-26T21:16:12-04:00 configure: Use LDFLAGS when trying linkers A user may configure `LDFLAGS` but not `LD`. When choosing a linker, we will prefer `ldd`, then `ld.gold`, then `ld.bfd` -- however, we have to check for a working linker. If either of these fail, we try the next in line. However, we were not considering the `$LDFLAGS` when checking if these linkers worked. So we would pick a linker that does not support the current $LDFLAGS and fail further down the line when we used that linker with those flags. Fixes #24565, where `LDFLAGS=-Wl,-z,pack-relative-relocs` is not supported by `ld.gold` but that was being picked still. - - - - - bf65a7c3 by Rodrigo Mesquita at 2024-03-26T21:16:48-04:00 bindist: Clean xattrs of bin and lib at configure time For issue #21506, we started cleaning the extended attributes of binaries and libraries from the bindist *after* they were installed to workaround notarisation (#17418), as part of `make install`. However, the `ghc-toolchain` binary that is now shipped with the bindist must be run at `./configure` time. Since we only cleaned the xattributes of the binaries and libs after they were installed, in some situations users would be unable to run `ghc-toolchain` from the bindist, failing at configure time (#24554). In this commit we move the xattr cleaning logic to the configure script. Fixes #24554 - - - - - cfeb70d3 by Rodrigo Mesquita at 2024-03-26T21:17:24-04:00 Revert "NCG: Fix a bug in jump shortcutting." This reverts commit 5bd8ed53dcefe10b72acb5729789e19ceb22df66. Fixes #24586 - - - - - 13223f6d by Serge S. Gulin at 2024-03-27T07:28:51-04:00 JS: `h$rts_isProfiled` is removed from `profiling` and left its version at `rts/js/config.js` - - - - - 0acfe391 by Alan Zimmerman at 2024-03-27T07:29:27-04:00 EPA: Do not extend declaration range for trailine zero len semi The lexer inserts virtual semicolons having zero width. Do not use them to extend the list span of items in a list. - - - - - cd0fb82f by Alan Zimmerman at 2024-03-27T19:33:08+00:00 EPA: Fix FamDecl range The span was incorrect if opt_datafam_kind_sig was empty - - - - - f8f384a8 by Ben Gamari at 2024-03-29T01:23:03-04:00 Fix type of _get_osfhandle foreign import Fixes #24601. - - - - - 00d3ecf0 by Alan Zimmerman at 2024-03-29T12:19:10+00:00 EPA: Extend StringLiteral range to include trailing commas This goes slightly against the exact printing philosophy where trailing decorations should be in an annotation, but the practicalities of adding it to the WarningTxt environment, and the problems caused by deviating do not make a more principles approach worthwhile. - - - - - efab3649 by brandon s allbery kf8nh at 2024-03-31T20:04:01-04:00 clarify Note [Preproccesing invocations] - - - - - c8a4c050 by Ben Gamari at 2024-04-02T12:50:35-04:00 rts: Fix TSAN_ENABLED CPP guard This should be `#if defined(TSAN_ENABLED)`, not `#if TSAN_ENABLED`, lest we suffer warnings. - - - - - e91dad93 by Cheng Shao at 2024-04-02T12:50:35-04:00 rts: fix errors when compiling with TSAN This commit fixes rts compilation errors when compiling with TSAN: - xxx_FENCE macros are redefined and trigger CPP warnings. - Use SIZEOF_W. WORD_SIZE_IN_BITS is provided by MachDeps.h which Cmm.h doesn't include by default. - - - - - a9ab9455 by Cheng Shao at 2024-04-02T12:50:35-04:00 rts: fix clang-specific errors when compiling with TSAN This commit fixes clang-specific rts compilation errors when compiling with TSAN: - clang doesn't have -Wtsan flag - Fix prototype of ghc_tsan_* helper functions - __tsan_atomic_* functions aren't clang built-ins and sanitizer/tsan_interface_atomic.h needs to be included - On macOS, TSAN runtime library is libclang_rt.tsan_osx_dynamic.dylib, not libtsan. -fsanitize-thread as a link-time flag will take care of linking the TSAN runtime library anyway so remove tsan as an rts extra library - - - - - 865bd717 by Cheng Shao at 2024-04-02T12:50:35-04:00 compiler: fix github link to __tsan_memory_order in a comment - - - - - 07cb627c by Cheng Shao at 2024-04-02T12:50:35-04:00 ci: improve TSAN CI jobs - Run TSAN jobs with +thread_sanitizer_cmm which enables Cmm instrumentation as well. - Run TSAN jobs in deb12 which ships gcc-12, a reasonably recent gcc that @bgamari confirms he's using in #GHC:matrix.org. Ideally we should be using latest clang release for latest improvements in sanitizers, though that's left as future work. - Mark TSAN jobs as manual+allow_failure in validate pipelines. The purpose is to demonstrate that we have indeed at least fixed building of TSAN mode in CI without blocking the patch to land, and once merged other people can begin playing with TSAN using their own dev setups and feature branches. - - - - - a1c18c7b by Andrei Borzenkov at 2024-04-02T12:51:11-04:00 Merge tc_infer_hs_type and tc_hs_type into one function using ExpType philosophy (#24299, #23639) This patch implements refactoring which is a prerequisite to updating kind checking of type patterns. This is a huge simplification of the main worker that checks kind of HsType. It also fixes the issues caused by previous code duplication, e.g. that we didn't add module finalizers from splices in inference mode. - - - - - 817e8936 by Rodrigo Mesquita at 2024-04-02T20:13:05-04:00 th: Hide the Language.Haskell.TH.Lib.Internal module from haddock Fixes #24562 - - - - - b36ee57b by Sylvain Henry at 2024-04-02T20:13:46-04:00 JS: reenable h$appendToHsString optimization (#24495) The optimization introducing h$appendToHsString wasn't kicking in anymore (while it did in 9.8.1) because of the changes introduced in #23270 (7e0c8b3bab30). This patch reenables the optimization by matching on case-expression, as done in Cmm for unpackCString# standard thunks. The test is also T24495 added in the next commits (two commits for ease of backporting to 9.8). - - - - - 527616e9 by Sylvain Henry at 2024-04-02T20:13:46-04:00 JS: fix h$appendToHsString implementation (#24495) h$appendToHsString needs to wrap its argument in an updatable thunk to behave like unpackAppendCString#. Otherwise if a SingleEntry thunk is passed, it is stored as-is in a CONS cell, making the resulting list impossible to deepseq (forcing the thunk doesn't update the contents of the CONS cell)! The added test checks that the optimization kicks in and that h$appendToHsString works as intended. Fix #24495 - - - - - faa30b41 by Simon Peyton Jones at 2024-04-02T20:14:22-04:00 Deal with duplicate tyvars in type declarations GHC was outright crashing before this fix: #24604 - - - - - e0b0c717 by Simon Peyton Jones at 2024-04-02T20:14:58-04:00 Try using MCoercion in exprIsConApp_maybe This is just a simple refactor that makes exprIsConApp_maybe a little bit more direct, simple, and efficient. Metrics: compile_time/bytes allocated geo. mean -0.1% minimum -2.0% maximum -0.0% Not a big gain, but worthwhile given that the code is, if anything, easier to grok. - - - - - 15f4d867 by Duncan Coutts at 2024-04-03T01:27:17-04:00 Initial ./configure support for selecting I/O managers In this patch we just define new CPP vars, but don't yet use them or replace the existing approach. That will follow. The intention here is that every I/O manager can be enabled/disabled at GHC build time (subject to some constraints). More than one I/O manager can be enabled to be built. At least one I/O manager supporting the non-threaded RTS must be enabled as well as at least one supporting the non-threaded RTS. The I/O managers enabled here will become the choices available at runtime at RTS startup (in later patches). The choice can be made with RTS flags. There are separate sets of choices for the threaded and non-threaded RTS ways, because most I/O managers are specific to these ways. Furthermore we must establish a default I/O manager for the threaded and non-threaded RTS. Most I/O managers are platform-specific so there are checks to ensure each one can be enabled on the platform. Such checks are also where (in future) any system dependencies (e.g. libraries) can be checked. The output is a set of CPP flags (in the mk/config.h file), with one flag per named I/O manager: * IOMGR_BUILD_<name> : which ones should be built (some) * IOMGR_DEFAULT_NON_THREADED_<name> : which one is default (exactly one) * IOMGR_DEFAULT_THREADED_<name> : which one is default (exactly one) and a set of derived flags in IOManager.h * IOMGR_ENABLED_<name> : enabled for the current RTS way Note that IOMGR_BUILD_<name> just says that an I/O manager will be built for _some_ RTS way (i.e. threaded or non-threaded). The derived flags IOMGR_ENABLED_<name> in IOManager.h say if each I/O manager is enabled in the "current" RTS way. These are the ones that can be used for conditional compilation of the I/O manager code. Co-authored-by: Pi Delport <pi at well-typed.com> - - - - - 85b0f87a by Duncan Coutts at 2024-04-03T01:27:17-04:00 Change the handling of the RTS flag --io-manager= Now instead of it being just used on Windows to select between the WinIO vs the MIO or Win32-legacy I/O managers, it is now used on all platforms for selecting the I/O manager to use. Right now it remains the case that there is only an actual choice on Windows, but that will change later. Document the --io-manager flag in the user guide. This change is also reflected in the RTS flags types in the base library. Deprecate the export of IoSubSystem from GHC.RTS.Flags with a message to import it from GHC.IO.Subsystem. The way the 'IoSubSystem' is detected also changes. Instead of looking at the RTS flag, there is now a C bool global var in the RTS which gets set on startup when the I/O manager is selected. This bool var says whether the selected I/O manager classifies as "native" on Windows, which in practice means the WinIO I/O manager has been selected. Similarly, the is_io_mng_native_p RTS helper function is re-implemented in terms of the selected I/O manager, rather than based on the RTS flags. We do however remove the ./configure --native-io-manager flag because we're bringing the WinIO/MIO/Win32-legacy choice under the new general scheme for selecting I/O managers, and that new scheme involves no ./configure time user choices, just runtime RTS flag choices. - - - - - 1a8f020f by Duncan Coutts at 2024-04-03T01:27:17-04:00 Convert {init,stop,exit}IOManager to switch style Rather than ad-hoc cpp conitionals on THREADED_RTS and mingw32_HOST_OS, we use a style where we switch on the I/O manager impl, with cases for each I/O manager impl. - - - - - a5bad3d2 by Duncan Coutts at 2024-04-03T01:27:17-04:00 Split up the CapIOManager content by I/O manager Using the new IOMGR_ENABLED_<name> CPP defines. - - - - - 1d36e609 by Duncan Coutts at 2024-04-03T01:27:17-04:00 Convert initIOManagerAfterFork and wakeupIOManager to switch style - - - - - c2f26f36 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Move most of waitRead#/Write# from cmm to C Moves it into the IOManager.c where we can follow the new pattern of switching on the selected I/O manager. - - - - - 457705a8 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Move most of the delay# impl from cmm to C Moves it into the IOManager.c where we can follow the new pattern of switching on the selected I/O manager. Uses a new IOManager API: syncDelay, following the naming convention of sync* for thread-synchronous I/O & timer/delay operations. As part of porting from cmm to C, we maintain the rule that the why_blocked gets accessed using load acquire and store release atomic memory operations. There was one exception to this rule: in the delay# primop cmm code on posix (not win32), the why_blocked was being updated using a store relaxed, not a store release. I've no idea why. In this convesion I'm playing it safe here and using store release consistently. - - - - - e93058e0 by Duncan Coutts at 2024-04-03T01:27:18-04:00 insertIntoSleepingQueue is no longer public No longer defined in IOManager.h, just a private function in IOManager.c. Since it is no longer called from cmm code, just from syncDelay. It ought to get moved further into the select() I/O manager impl, rather than living in IOManager.c. On the other hand appendToIOBlockedQueue is still called from cmm code in the win32-legacy I/O manager primops async{Read,Write}#, and it is also used by the select() I/O manager. Update the CPP and comments to reflect this. - - - - - 60ce9910 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Move anyPendingTimeoutsOrIO impl from .h to .c The implementation is eventually going to need to use more private things, which will drag in unwanted includes into IOManager.h, so it's better to move the impl out of the header file and into the .c file, at the slight cost of it no longer being inline. At the same time, change to the "switch (iomgr_type)" style. - - - - - f70b8108 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Take a simpler approach to gcc warnings in IOManager.c We have lots of functions with conditional implementations for different I/O managers. Some functions, for some I/O managers, naturally have implementations that do nothing or barf. When only one such I/O manager is enabled then the whole function implementation will have an implementation that does nothing or barfs. This then results in warnings from gcc that parameters are unused, or that the function should be marked with attribute noreturn (since barf does not return). The USED_IF_THREADS trick for fine-grained warning supression is fine for just two cases, but an equivalent here would need USED_IF_THE_ONLY_ENABLED_IOMGR_IS_X_OR_Y which would have combinitorial blowup. So we take a coarse grained approach and simply disable these two warnings for the whole file. So we use a GCC pragma, with its handy push/pop support: #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wsuggest-attribute=noreturn" #pragma GCC diagnostic ignored "-Wunused-parameter" ... #pragma GCC diagnostic pop - - - - - b48805b9 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Add a new trace class for the iomanager It makes sense now for it to be separate from the scheduler class of tracers. Enabled with +RTS -Do. Document the -Do debug flag in the user guide. - - - - - f0c1f862 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Have the throwTo impl go via (new) IOManager APIs rather than directly operating on the IO manager's data structures. Specifically, when thowing an async exception to a thread that is blocked waiting for I/O or waiting for a timer, then we want to cancel that I/O waiting or cancel the timer. Currently this is done directly in removeFromQueues() in RaiseAsync.c. We want it to go via proper APIs both for modularity but also to let us support multiple I/O managers. So add sync{IO,Delay}Cancel, which is the cancellation for the corresponding sync{IO,Delay}. The implementations of these use the usual "switch (iomgr_type)" style. - - - - - 4f9e9c4e by Duncan Coutts at 2024-04-03T01:27:18-04:00 Move awaitEvent into a proper IOManager API and have the scheduler use it. Previously the scheduler calls awaitEvent directly, and awaitEvent is implemented directly in the RTS I/O managers (select, win32). This relies on the old scheme where there's a single active I/O manager for each platform and RTS way. We want to move that to go via an API in IOManager.{h,c} which can then call out to the active I/O manager. Also take the opportunity to split awaitEvent into two. The existing awaitEvent has a bool wait parameter, to say if the call should be blocking or non-blocking. We split this into two separate functions: pollCompletedTimeoutsOrIO and awaitCompletedTimeoutsOrIO. We split them for a few reasons: they have different post-conditions (specifically the await version is supposed to guarantee that there are threads runnable when it completes). Secondly, it is also anticipated that in future I/O managers the implementations of the two cases will be simpler if they are separated. - - - - - 5ad4b30f by Duncan Coutts at 2024-04-03T01:27:18-04:00 Rename awaitEvent in select and win32 I/O managers These are now just called from IOManager.c and are the per-I/O manager backend impls (whereas previously awaitEvent was the entry point). Follow the new naming convention in the IOManager.{h,c} of awaitCompletedTimeoutsOrIO, with the I/O manager's name as a suffix: so awaitCompletedTimeoutsOrIO{Select,Win32}. - - - - - d30c6bc6 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Tidy up a couple things in Select.{h,c} Use the standard #include {Begin,End}Private.h style rather than RTS_PRIVATE on individual decls. And conditionally build the code for the select I/O manager based on the new CPP IOMGR_ENABLED_SELECT rather than on THREADED_RTS. - - - - - 4161f516 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Add an IOManager API for scavenging TSO blocked_info When the GC scavenges a TSO it needs to scavenge the tso->blocked_info but the blocked_info is a big union and what lives there depends on the two->why_blocked, which for I/O-related reasons is something that in principle is the responsibility of the I/O manager and not the GC. So the right thing to do is for the GC to ask the I/O manager to sscavenge the blocked_info if it encounters any I/O-related why_blocked reasons. So we add scavengeTSOIOManager in IOManager.{h,c} with the usual style. Now as it happens, right now, there is no special scavenging to do, so the implementation of scavengeTSOIOManager is a fancy no-op. That's because the select I/O manager uses only the fd and target members, which are not GC pointers, and the win32-legacy I/O manager _ought_ to be using GC-managed heap objects for the StgAsyncIOResult but it is actually usingthe C heap, so again no GC pointers. If the win32-legacy were doing this more sensibly, then scavengeTSOIOManager would be the right place to do the GC magic. Future I/O managers will need GC heap objects in the tso->blocked_info and will make use of this functionality. - - - - - 94a87d21 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Add I/O manager API notifyIOManagerCapabilitiesChanged Used in setNumCapabilities. It only does anything for MIO on Posix. Previously it always invoked Haskell code, but that code only did anything on non-Windows (and non-JS), and only threaded. That currently effectively means the MIO I/O manager on Posix. So now it only invokes it for the MIO Posix case. - - - - - 3be6d591 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Select an I/O manager early in RTS startup We need to select the I/O manager to use during startup before the per-cap I/O manager initialisation. - - - - - aaa294d0 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Make struct CapIOManager be fully opaque Provide an opaque (forward) definition in Capability.h (since the cap contains a *CapIOManager) and then only provide a full definition in a new file IOManagerInternals.h. This new file is only supposed to be included by the IOManager implementation, not by its users. So that means IOManager.c and individual I/O manager implementations. The posix/Signals.c still needs direct access, but that should be eliminated. Anything that needs direct access either needs to be clearly part of an I/O manager (e.g. the sleect() one) or go via a proper API. - - - - - 877a2a80 by Duncan Coutts at 2024-04-03T01:27:18-04:00 The select() I/O manager does have some global initialisation It's just to make sure an exception CAF is a GC root. - - - - - 9c51473b by Duncan Coutts at 2024-04-03T01:27:18-04:00 Add tracing for the main I/O manager actions Using the new tracer class. Note: The unconditional definition of showIOManager should be compatible with the debugTrace change in 7c7d1f6. Co-authored-by: Pi Delport <pi at well-typed.com> - - - - - c7d3e3a3 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Include the default I/O manager in the +RTS --info output Document the extra +RTS --info output in the user guide - - - - - 8023bad4 by Duncan Coutts at 2024-04-03T01:27:18-04:00 waitRead# / waitWrite# do not work for win32-legacy I/O manager Previously it was unclear that they did not work because the code path was shared with other I/O managers (in particular select()). Following the code carefully shows that what actually happens is that the calling thread would block forever: the thread will be put into the blocked queue, but no other action is scheduled that will ever result in it getting unblocked. It's better to just fail loudly in case anyone accidentally calls it, also it's less confusing code. - - - - - 83a74d20 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Conditionally ignore some GCC warnings Some GCC versions don't know about some warnings, and they complain that we're ignoring unknown warnings. So we try to ignore the warning based on the GCC version. - - - - - 1adc6fa4 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Accept changes to base-exports All the changes are in fact not changes at all. Previously, the IoSubSystem data type was defined in GHC.RTS.Flags and exported from both GHC.RTS.Flags and GHC.IO.SubSystem. Now, the data type is defined in GHC.IO.SubSystem and still exported from both modules. Therefore, the same exports and same instances are still available from both modules. But the base-exports records only the defining module, and so it looks like a change when it is fully compatible. Related: we do add a deprecation to the export of the type via GHC.RTS.Flags, telling people to use the export from GHC.IO.SubSystem. Also the sort order for some unrelated Show instances changed. No idea why. The same changes apply in the other versions, with a few more changes due to sort order weirdness. - - - - - 8d950968 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Accept metric decrease in T12227 I can't think of any good reason that anything in this MR should have changed the number of allocations, up or down. (Yes this is an empty commit.) Metric Decrease: T12227 - - - - - e869605e by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Several improvements to the handling of coercions * Make `mkSymCo` and `mkInstCo` smarter Fixes #23642 * Fix return role of `SelCo` in the coercion optimiser. Fixes #23617 * Make the coercion optimiser `opt_trans_rule` work better for newtypes Fixes #23619 - - - - - 1efd0714 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 FloatOut: improve floating for join point See the new Note [Floating join point bindings]. * Completely get rid of the complicated join_ceiling nonsense, which I have never understood. * Do not float join points at all, except perhaps to top level. * Some refactoring around wantToFloat, to treat Rec and NonRec more uniformly - - - - - 9c00154d by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Improve eta-expansion through call stacks See Note [Eta expanding through CallStacks] in GHC.Core.Opt.Arity This is a one-line change, that fixes an inconsistency - || isCallStackPredTy ty + || isCallStackPredTy ty || isCallStackTy ty - - - - - 95a9a172 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Spelling, layout, pretty-printing only - - - - - bdf1660f by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Improve exprIsConApp_maybe a little Eliminate a redundant case at birth. This sometimes reduces Simplifier iterations. See Note [Case elim in exprIsConApp_maybe]. - - - - - 609cd32c by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Inline GHC.HsToCore.Pmc.Solver.Types.trvVarInfo When exploring compile-time regressions after meddling with the Simplifier, I discovered that GHC.HsToCore.Pmc.Solver.Types.trvVarInfo was very delicately balanced. It's a small, heavily used, overloaded function and it's important that it inlines. By a fluke it was before, but at various times in my journey it stopped doing so. So I just added an INLINE pragma to it; no sense in depending on a delicately-balanced fluke. - - - - - ae24c9bc by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Slight improvement in WorkWrap Ensure that WorkWrap preserves lambda binders, in case of join points. Sadly I have forgotten why I made this change (it was while I was doing a lot of meddling in the Simplifier, but * it does no harm, * it is slightly more efficient, and * presumably it made something better! Anyway I have kept it in a separate commit. - - - - - e9297181 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Use named record fields for the CastIt { ... } data constructor This is a pure refactor - - - - - b4581e23 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Remove a long-commented-out line Pure refactoring - - - - - e026bdf2 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Simplifier improvements This MR started as: allow the simplifer to do more in one pass, arising from places I could see the simplifier taking two iterations where one would do. But it turned into a larger project, because these changes unexpectedly made inlining blow up, especially join points in deeply-nested cases. The main changes are below. There are also many new or rewritten Notes. Avoiding simplifying repeatedly ~~~~~~~~~~~~~~~ See Note [Avoiding simplifying repeatedly] * The SimplEnv now has a seInlineDepth field, which says how deep in unfoldings we are. See Note [Inline depth] in Simplify.Env. Currently used only for the next point: avoiding repeatedly simplifying coercions. * Avoid repeatedly simplifying coercions. see Note [Avoid re-simplifying coercions] in Simplify.Iteration As you'll see from the Note, this makes use of the seInlineDepth. * Allow Simplify.Iteration.simplAuxBind to inline used-once things. This is another part of Note [Post-inline for single-use things], and is really good for reducing simplifier iterations in situations like case K e of { K x -> blah } wher x is used once in blah. * Make GHC.Core.SimpleOpt.exprIsConApp_maybe do some simple case elimination. Note [Case elim in exprIsConApp_maybe] * Improve the case-merge transformation: - Move the main code to `GHC.Core.Utils.mergeCaseAlts`, to join `filterAlts` and friends. See Note [Merge Nested Cases] in GHC.Core.Utils. - Add a new case for `tagToEnum#`; see wrinkle (MC3). - Add a new case to look through join points: see wrinkle (MC4) postInlineUnconditionally ~~~~~~~~~~~~~~~~~~~~~~~~~ * Allow Simplify.Utils.postInlineUnconditionally to inline variables that are used exactly once. See Note [Post-inline for single-use things]. * Do not postInlineUnconditionally join point, ever. Doing so does not reduce allocation, which is the main point, and with join points that are used a lot it can bloat code. See point (1) of Note [Duplicating join points] in GHC.Core.Opt.Simplify.Iteration. * Do not postInlineUnconditionally a strict (demanded) binding. It will not allocate a thunk (it'll turn into a case instead) so again the main point of inlining it doesn't hold. Better to check per-call-site. * Improve occurrence analyis for bottoming function calls, to help postInlineUnconditionally. See Note [Bottoming function calls] in GHC.Core.Opt.OccurAnal Inlining generally ~~~~~~~~~~~~~~~~~~ * In GHC.Core.Opt.Simplify.Utils.interestingCallContext, use RhsCtxt NonRecursive (not BoringCtxt) for a plain-seq case. See Note [Seq is boring] Also, wrinkle (SB1), inline in that `seq` context only for INLINE functions (UnfWhen guidance). * In GHC.Core.Opt.Simplify.Utils.interestingArg, - return ValueArg for OtherCon [c1,c2, ...], but - return NonTrivArg for OtherCon [] This makes a function a little less likely to inline if all we know is that the argument is evaluated, but nothing else. * isConLikeUnfolding is no longer true for OtherCon {}. This propagates to exprIsConLike. Con-like-ness has /positive/ information. Join points ~~~~~~~~~~~ * Be very careful about inlining join points. See these two long Notes Note [Duplicating join points] in GHC.Core.Opt.Simplify.Iteration Note [Inlining join points] in GHC.Core.Opt.Simplify.Inline * When making join points, don't do so if the join point is so small it will immediately be inlined; check uncondInlineJoin. * In GHC.Core.Opt.Simplify.Inline.tryUnfolding, improve the inlining heuristics for join points. In general we /do not/ want to inline join points /even if they are small/. See Note [Duplicating join points] GHC.Core.Opt.Simplify.Iteration. But sometimes we do: see Note [Inlining join points] in GHC.Core.Opt.Simplify.Inline; and the new `isBetterUnfoldingThan` function. * Do not add an unfolding to a join point at birth. This is a tricky one and has a long Note [Do not add unfoldings to join points at birth] It shows up in two places - In `mkDupableAlt` do not add an inlining - (trickier) In `simplLetUnfolding` don't add an unfolding for a fresh join point I am not fully satisifed with this, but it works and is well documented. * In GHC.Core.Unfold.sizeExpr, make jumps small, so that we don't penalise having a non-inlined join point. Performance changes ~~~~~~~~~~~~~~~~~~~ * Binary sizes fall by around 2.6%, according to nofib. * Compile times improve slightly. Here are the figures over 1%. I investiate the biggest differnce in T18304. It's a very small module, just a few hundred nodes. The large percentage difffence is due to a single function that didn't quite inline before, and does now, making code size a bit bigger. I decided gains outweighed the losses. Metrics: compile_time/bytes allocated (changes over +/- 1%) ------------------------------------------------ CoOpt_Singletons(normal) -9.2% GOOD LargeRecord(normal) -23.5% GOOD MultiComponentModulesRecomp(normal) +1.2% MultiLayerModulesTH_OneShot(normal) +4.1% BAD PmSeriesS(normal) -3.8% PmSeriesV(normal) -1.5% T11195(normal) -1.3% T12227(normal) -20.4% GOOD T12545(normal) -3.2% T12707(normal) -2.1% GOOD T13253(normal) -1.2% T13253-spj(normal) +8.1% BAD T13386(normal) -3.1% GOOD T14766(normal) -2.6% GOOD T15164(normal) -1.4% T15304(normal) +1.2% T15630(normal) -8.2% T15630a(normal) NEW T15703(normal) -14.7% GOOD T16577(normal) -2.3% GOOD T17516(normal) -39.7% GOOD T18140(normal) +1.2% T18223(normal) -17.1% GOOD T18282(normal) -5.0% GOOD T18304(normal) +10.8% BAD T18923(normal) -2.9% GOOD T1969(normal) +1.0% T19695(normal) -1.5% T20049(normal) -12.7% GOOD T21839c(normal) -4.1% GOOD T3064(normal) -1.5% T3294(normal) +1.2% BAD T4801(normal) +1.2% T5030(normal) -15.2% GOOD T5321Fun(normal) -2.2% GOOD T6048(optasm) -16.8% GOOD T783(normal) -1.2% T8095(normal) -6.0% GOOD T9630(normal) -4.7% GOOD T9961(normal) +1.9% BAD WWRec(normal) -1.4% info_table_map_perf(normal) -1.3% parsing001(normal) +1.5% geo. mean -2.0% minimum -39.7% maximum +10.8% * Runtimes generally improve. In the testsuite perf/should_run gives: Metrics: runtime/bytes allocated ------------------------------------------ Conversions(normal) -0.3% T13536a(optasm) -41.7% GOOD T4830(normal) -0.1% haddock.Cabal(normal) -0.1% haddock.base(normal) -0.1% haddock.compiler(normal) -0.1% geo. mean -0.8% minimum -41.7% maximum +0.0% * For runtime, nofib is a better test. The news is mostly good. Here are the number more than +/- 0.1%: # bytes allocated ==========================++========== imaginary/digits-of-e1 || -14.40% imaginary/digits-of-e2 || -4.41% imaginary/paraffins || -0.17% imaginary/rfib || -0.15% imaginary/wheel-sieve2 || -0.10% real/compress || -0.47% real/fluid || -0.10% real/fulsom || +0.14% real/gamteb || -1.47% real/gg || -0.20% real/infer || +0.24% real/pic || -0.23% real/prolog || -0.36% real/scs || -0.46% real/smallpt || +4.03% shootout/k-nucleotide || -20.23% shootout/n-body || -0.42% shootout/spectral-norm || -0.13% spectral/boyer2 || -3.80% spectral/constraints || -0.27% spectral/hartel/ida || -0.82% spectral/mate || -20.34% spectral/para || +0.46% spectral/rewrite || +1.30% spectral/sphere || -0.14% ==========================++========== geom mean || -0.59% real/smallpt has a huge nest of local definitions, and I could not pin down a reason for a regression. But there are three big wins! Metric Decrease: CoOpt_Singletons LargeRecord T12227 T12707 T13386 T13536a T14766 T15703 T16577 T17516 T18223 T18282 T18923 T21839c T20049 T5321Fun T5030 T6048 T8095 T9630 T783 Metric Increase: MultiLayerModulesTH_OneShot T13253-spj T18304 T18698a T9961 T3294 - - - - - 27db3c5e by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Testsuite message changes from simplifier improvements - - - - - 271a7812 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Account for bottoming functions in OccurAnal This fixes #24582, a small but long-standing bug - - - - - 0fde229f by Ben Gamari at 2024-04-04T07:04:58-04:00 testsuite: Introduce template-haskell-exports test - - - - - 0c4a9686 by Luite Stegeman at 2024-04-04T07:05:39-04:00 Update correct counter in bumpTickyAllocd - - - - - 5f085d3a by Fendor at 2024-04-04T14:47:33-04:00 Replace `SizedSeq` with `FlatBag` for flattened structure LinkedLists are notoriously memory ineffiecient when all we do is traversing a structure. As 'UnlinkedBCO' has been identified as a data structure that impacts the overall memory usage of GHCi sessions, we avoid linked lists and prefer flattened structure for storing. We introduce a new memory efficient representation of sequential elements that has special support for the cases: * Empty * Singleton * Tuple Elements This improves sharing in the 'Empty' case and avoids the overhead of 'Array' until its constant overhead is justified. - - - - - 82cfe10c by Fendor at 2024-04-04T14:47:33-04:00 Compact FlatBag array representation `Array` contains three additional `Word`'s we do not need in `FlatBag`. Move `FlatBag` to `SmallArray`. Expand the API of SmallArray by `sizeofSmallArray` and add common traversal functions, such as `mapSmallArray` and `foldMapSmallArray`. Additionally, allow users to force the elements of a `SmallArray` via `rnfSmallArray`. - - - - - 36a75b80 by Andrei Borzenkov at 2024-04-04T14:48:10-04:00 Change how invisible patterns represented in haskell syntax and TH AST (#24557) Before this patch: data ArgPat p = InvisPat (LHsType p) | VisPat (LPat p) With this patch: data Pat p = ... | InvisPat (LHsType p) ... And the same transformation in the TH land. The rest of the changes is just updating code to handle new AST and writing tests to check if it is possible to create invalid states using TH. Metric Increase: MultiLayerModulesTH_OneShot - - - - - 28009fbc by Matthew Pickering at 2024-04-04T14:48:46-04:00 Fix off by one error in seekBinNoExpand and seekBin - - - - - 9b9e031b by Ben Gamari at 2024-04-04T21:30:08-04:00 compiler: Allow more types in GHCForeignImportPrim For many, many years `GHCForeignImportPrim` has suffered from the rather restrictive limitation of not allowing any non-trivial types in arguments or results. This limitation was justified by the code generator allegely barfing in the presence of such types. However, this restriction appears to originate well before the NCG rewrite and the new NCG does not appear to have any trouble with such types (see the added `T24598` test). Lift this restriction. Fixes #24598. - - - - - 1324b862 by Alan Zimmerman at 2024-04-04T21:30:44-04:00 EPA: Use EpaLocation not SrcSpan in ForeignDecls This allows us to update them for makeDeltaAst in ghc-exactprint - - - - - 19883a23 by Alan Zimmerman at 2024-04-05T16:58:17-04:00 EPA: Use EpaLocation for RecFieldsDotDot So we can update it to a delta position in makeDeltaAst if needed. - - - - - e8724327 by Matthew Pickering at 2024-04-05T16:58:53-04:00 Remove accidentally committed test.hs - - - - - 88cb3e10 by Fendor at 2024-04-08T09:03:34-04:00 Avoid UArray when indexing is not required `UnlinkedBCO`'s can occur many times in the heap. Each `UnlinkedBCO` references two `UArray`'s but never indexes them. They are only needed to encode the elements into a `ByteArray#`. The three words for the lower bound, upper bound and number of elements are essentially unused, thus we replace `UArray` with a wrapper around `ByteArray#`. This saves us up to three words for each `UnlinkedBCO`. Further, to avoid re-allocating these words for `ResolvedBCO`, we repeat the procedure for `ResolvedBCO` and add custom `Binary` and `Show` instances. For example, agda's repl session has around 360_000 UnlinkedBCO's, so avoiding these three words is already saving us around 8MB residency. - - - - - f2cc1107 by Fendor at 2024-04-08T09:04:11-04:00 Never UNPACK `FastMutInt` for counting z-encoded `FastString`s In `FastStringTable`, we count the number of z-encoded FastStrings that exist in a GHC session. We used to UNPACK the counters to not waste memory, but live retainer analysis showed that we allocate a lot of `FastMutInt`s, retained by `mkFastZString`. We lazily compute the `FastZString`, only incrementing the counter when the `FastZString` is forced. The function `mkFastStringWith` calls `mkZFastString` and boxes the `FastMutInt`, leading to the following core: mkFastStringWith = \ mk_fs _ -> = case stringTable of { FastStringTable _ n_zencs segments# _ -> ... case ((mk_fs (I# ...) (FastMutInt n_zencs)) `cast` <Co:2> :: ...) ... Marking this field as `NOUNPACK` avoids this reboxing, eliminating the allocation of a fresh `FastMutInt` on every `FastString` allocation. - - - - - c6def949 by Matthew Pickering at 2024-04-08T16:06:51-04:00 Force in_multi to avoid retaining entire hsc_env - - - - - fbb91a63 by Fendor at 2024-04-08T16:06:51-04:00 Eliminate name thunk in declaration fingerprinting Thunk analysis showed that we have about 100_000 thunks (in agda and `-fwrite-simplified-core`) pointing to the name of the name decl. Forcing this thunk fixes this issue. The thunk created here is retained by the thunk created by forkM, it is better to eagerly force this because the result (a `Name`) is already retained indirectly via the `IfaceDecl`. - - - - - 3b7b0c1c by Alan Zimmerman at 2024-04-08T16:07:27-04:00 EPA: Use EpaLocation in WarningTxt This allows us to use an EpDelta if needed when using makeDeltaAst. - - - - - 12b997df by Alan Zimmerman at 2024-04-08T16:07:27-04:00 EPA: Move DeltaPos and EpaLocation' into GHC.Types.SrcLoc This allows us to use a NoCommentsLocation for the possibly trailing comma location in a StringLiteral. This in turn allows us to correctly roundtrip via makeDeltaAst. - - - - - 868c8a78 by Fendor at 2024-04-09T08:51:50-04:00 Prefer packed representation for CompiledByteCode As there are many 'CompiledByteCode' objects alive during a GHCi session, representing its element in a more packed manner improves space behaviour at a minimal cost. When running GHCi on the agda codebase, we find around 380 live 'CompiledByteCode' objects. Packing their respective 'UnlinkedByteCode' can save quite some pointers. - - - - - be3bddde by Alan Zimmerman at 2024-04-09T08:52:26-04:00 EPA: Capture all comments in a ClassDecl Hopefully the final fix needed for #24533 - - - - - 3d0806fc by Jade at 2024-04-10T05:39:53-04:00 Validate -main-is flag using parseIdentifier Fixes #24368 - - - - - dd530bb7 by Rodrigo Mesquita at 2024-04-10T05:40:29-04:00 rts: free error message before returning Fixes a memory leak in rts/linker/PEi386.c - - - - - e008a19a by Alexis King at 2024-04-10T05:40:29-04:00 linker: Avoid linear search when looking up Haskell symbols via dlsym See the primary Note [Looking up symbols in the relevant objects] for a more in-depth explanation. When dynamically loading a Haskell symbol (typical when running a splice or GHCi expression), before this commit we would search for the symbol in all dynamic libraries that were loaded. However, this could be very inefficient when too many packages are loaded (which can happen if there are many package dependencies) because the time to lookup the would be linear in the number of packages loaded. This commit drastically improves symbol loading performance by introducing a mapping from units to the handles of corresponding loaded dlls. These handles are returned by dlopen when we load a dll, and can then be used to look up in a specific dynamic library. Looking up a given Name is now much more precise because we can get lookup its unit in the mapping and lookup the symbol solely in the handles of the dynamic libraries loaded for that unit. In one measurement, the wait time before the expression was executed went from +-38 seconds down to +-2s. This commit also includes Note [Symbols may not be found in pkgs_loaded], explaining the fallback to the old behaviour in case no dll can be found in the unit mapping for a given Name. Fixes #23415 Co-authored-by: Rodrigo Mesquita (@alt-romes) - - - - - dcfaa190 by Rodrigo Mesquita at 2024-04-10T05:40:29-04:00 rts: Make addDLL a wrapper around loadNativeObj Rewrite the implementation of `addDLL` as a wrapper around the more principled `loadNativeObj` rts linker function. The latter should be preferred while the former is preserved for backwards compatibility. `loadNativeObj` was previously only available on ELF platforms, so this commit further refactors the rts linker to transform loadNativeObj_ELF into loadNativeObj_POSIX, which is available in ELF and MachO platforms. The refactor made it possible to remove the `dl_mutex` mutex in favour of always using `linker_mutex` (rather than a combination of both). Lastly, we implement `loadNativeObj` for Windows too. - - - - - 12931698 by Rodrigo Mesquita at 2024-04-10T05:40:29-04:00 Use symbol cache in internal interpreter too This commit makes the symbol cache that was used by the external interpreter available for the internal interpreter too. This follows from the analysis in #23415 that suggests the internal interpreter could benefit from this cache too, and that there is no good reason not to have the cache for it too. It also makes it a bit more uniform to have the symbol cache range over both the internal and external interpreter. This commit also refactors the cache into a function which is used by both `lookupSymbol` and also by `lookupSymbolInDLL`, extending the caching logic to `lookupSymbolInDLL` too. - - - - - dccd3ea1 by Ben Gamari at 2024-04-10T05:40:29-04:00 testsuite: Add test for lookupSymbolInNativeObj - - - - - 1b1a92bd by Alan Zimmerman at 2024-04-10T05:41:05-04:00 EPA: Remove unnecessary XRec in CompleteMatchSig The XRec for [LIdP pass] is not needed for exact printing, remove it. - - - - - 6e18ce2b by Ben Gamari at 2024-04-12T08:16:09-04:00 users-guide: Clarify language extension documentation Over the years the users guide's language extension documentation has gone through quite a few refactorings. In the process some of the descriptions have been rendered non-sensical. For instance, the description of `NoImplicitPrelude` actually describes the semantics of `ImplicitPrelude`. To fix this we: * ensure that all extensions are named in their "positive" sense (e.g. `ImplicitPrelude` rather than `NoImplicitPrelude`). * rework the documentation to avoid flag-oriented wording like "enable" and "disable" * ensure that the polarity of the documentation is consistent with reality. Fixes #23895. - - - - - a933aff3 by Zubin Duggal at 2024-04-12T08:16:45-04:00 driver: Make `checkHomeUnitsClosed` faster The implementation of `checkHomeUnitsClosed` was traversing every single path in the unit dependency graph - this grows exponentially and quickly grows to be infeasible on larger unit dependency graphs. Instead we replace this with a faster implementation which follows from the specificiation of the closure property - there is a closure error if there are units which are both are both (transitively) depended upon by home units and (transitively) depend on home units, but are not themselves home units. To compute the set of units required for closure, we first compute the closure of the unit dependency graph, then the transpose of this closure, and find all units that are reachable from the home units in the transpose of the closure. - - - - - 23c3e624 by Andreas Klebinger at 2024-04-12T08:17:21-04:00 RTS: Emit warning when -M < -H Fixes #24487 - - - - - d23afb8c by Ben Gamari at 2024-04-12T08:17:56-04:00 testsuite: Add broken test for CApiFFI with -fprefer-bytecode See #24634. - - - - - a4bb3a51 by Ben Gamari at 2024-04-12T08:18:32-04:00 base: Deprecate GHC.Pack As proposed in #21461. Closes #21540. - - - - - 55eb8c98 by Ben Gamari at 2024-04-12T08:19:08-04:00 ghc-internal: Fix mentions of ghc-internal in deprecation warnings Closes #24609. - - - - - b0fbd181 by Ben Gamari at 2024-04-12T08:19:44-04:00 rts: Implement set_initial_registers for AArch64 Fixes #23680. - - - - - 14c9ec62 by Ben Gamari at 2024-04-12T08:20:20-04:00 ghcup-metadata: Use Debian 9 binaries on Ubuntu 16, 17 Closes #24646. - - - - - 35a1621e by Ben Gamari at 2024-04-12T08:20:55-04:00 Bump unix submodule to 2.8.5.1 Closes #24640. - - - - - a1c24df0 by Finley McIlwaine at 2024-04-12T08:21:31-04:00 Correct default -funfolding-use-threshold in docs - - - - - 0255d03c by Oleg Grenrus at 2024-04-12T08:22:07-04:00 FastString is a __Modified__ UTF-8 - - - - - c3489547 by Matthew Pickering at 2024-04-12T13:13:44-04:00 rts: Improve tracing message when nursery is resized It is sometimes more useful to know how much bigger or smaller the nursery got when it is resized. In particular I am trying to investigate situations where we end up with fragmentation due to the nursery (#24577) - - - - - 5e4f4ba8 by Simon Peyton Jones at 2024-04-12T13:14:20-04:00 Don't generate wrappers for `type data` constructors with StrictData Previously, the logic for checking if a data constructor needs a wrapper or not would take into account whether the constructor's fields have explicit strictness (e.g., `data T = MkT !Int`), but the logic would _not_ take into account whether `StrictData` was enabled. This meant that something like `type data T = MkT Int` would incorrectly generate a wrapper for `MkT` if `StrictData` was enabled, leading to the horrible errors seen in #24620. To fix this, we disable generating wrappers for `type data` constructors altogether. Fixes #24620. Co-authored-by: Ryan Scott <ryan.gl.scott at gmail.com> - - - - - dbdf1995 by Alex Mason at 2024-04-15T15:28:26+10:00 Implements MO_S_Mul2 and MO_U_Mul2 using the UMULH, UMULL and SMULH instructions for AArch64 Also adds a test for MO_S_Mul2 - - - - - 42bd0407 by Teo Camarasu at 2024-04-16T20:06:39-04:00 Make template-haskell a stage1 package Promoting template-haskell from a stage0 to a stage1 package means that we can much more easily refactor template-haskell. We implement this by duplicating the in-tree `template-haskell`. A new `template-haskell-next` library is autogenerated to mirror `template-haskell` `stage1:ghc` to depend on the new interface of the library including the `Binary` instances without adding an explicit dependency on `template-haskell`. This is controlled by the `bootstrap-th` cabal flag When building `template-haskell` modules as part of this vendoring we do not have access to quote syntax, so we cannot use variable quote notation (`'Just`). So we either replace these with hand-written `Name`s or hide the code behind CPP. We can remove the `th_hack` from hadrian, which was required when building stage0 packages using the in-tree `template-haskell` library. For more details see Note [Bootstrapping Template Haskell]. Resolves #23536 Co-Authored-By: Sebastian Graf <sgraf1337 at gmail.com> Co-Authored-By: Matthew Craven <5086-clyring at users.noreply.gitlab.haskell.org> - - - - - 3d973e47 by Ben Gamari at 2024-04-16T20:07:15-04:00 Bump parsec submodule to 3.1.17.0 - - - - - 9d38bfa0 by Simon Peyton Jones at 2024-04-16T20:07:51-04:00 Clone CoVars in CorePrep This MR addresses #24463. It's all explained in the new Note [Cloning CoVars and TyVars] - - - - - 0fe2b410 by Andreas Klebinger at 2024-04-16T20:08:27-04:00 NCG: Fix a bug where we errounously removed a required jump instruction. Add a new method to the Instruction class to check if we can eliminate a jump in favour of fallthrough control flow. Fixes #24507 - - - - - 9f99126a by Teo Camarasu at 2024-04-16T20:09:04-04:00 Fix documentation preview from doc-tarball job - Include all the .html files and assets in the job artefacts - Include all the .pdf files in the job artefacts - Mark the artefact as an "exposed" artefact meaning it turns up in the UI. Resolves #24651 - - - - - 3a0642ea by Ben Gamari at 2024-04-16T20:09:39-04:00 rts: Ignore EINTR while polling in timerfd itimer implementation While the RTS does attempt to mask signals, it may be that a foreign library unmasks them. This previously caused benign warnings which we now ignore. See #24610. - - - - - 9a53cd3f by Alan Zimmerman at 2024-04-16T20:10:15-04:00 EPA: Add additional comments field to AnnsModule This is used in exact printing to store comments coming after the `where` keyword but before any comments allocated to imports or decls. It is used in ghc-exactprint, see https://github.com/alanz/ghc-exactprint/commit/44bbed311fd8f0d053053fef195bf47c17d34fa7 - - - - - e5c43259 by Bryan Richter at 2024-04-16T20:10:51-04:00 Remove unrunnable FreeBSD CI jobs FreeBSD runner supply is inelastic. Currently there is only one, and it's unavailable because of a hardware issue. - - - - - 914eb49a by Ben Gamari at 2024-04-16T20:11:27-04:00 rel-eng: Fix mktemp usage in recompress-all We need a temporary directory, not a file. - - - - - f30e4984 by Teo Camarasu at 2024-04-16T20:12:03-04:00 Fix ghc API link in docs/index.html This was missing part of the unit ID meaning it would 404. Resolves #24674 - - - - - d7a3d6b5 by Ben Gamari at 2024-04-16T20:12:39-04:00 template-haskell: Declare TH.Lib.Internal as not-home Rather than `hide`. Closes #24659. - - - - - 5eaa46e7 by Matthew Pickering at 2024-04-19T02:14:55-04:00 testsuite: Rename isCross() predicate to needsTargetWrapper() isCross() was a misnamed because it assumed that all cross targets would provide a target wrapper, but the two most common cross targets (javascript, wasm) don't need a target wrapper. Therefore we rename this predicate to `needsTargetWrapper()` so situations in the testsuite where we can check whether running executables requires a target wrapper or not. - - - - - 55a9d699 by Simon Peyton Jones at 2024-04-19T02:15:32-04:00 Do not float HNFs out of lambdas This MR adjusts SetLevels so that it is less eager to float a HNF (lambda or constructor application) out of a lambda, unless it gets to top level. Data suggests that this change is a small net win: * nofib bytes-allocated falls by -0.09% (but a couple go up) * perf/should_compile bytes-allocated falls by -0.5% * perf/should_run bytes-allocated falls by -0.1% See !12410 for more detail. When fiddling elsewhere, I also found that this patch had a huge positive effect on the (very delicate) test perf/should_run/T21839r But that improvement doesn't show up in this MR by itself. Metric Decrease: MultiLayerModulesRecomp T15703 parsing001 - - - - - f0701585 by Alan Zimmerman at 2024-04-19T02:16:08-04:00 EPA: Fix comments in mkListSyntaxTy0 Also extend the test to confirm. Addresses #24669, 1 of 4 - - - - - b01c01d4 by Serge S. Gulin at 2024-04-19T02:16:51-04:00 JS: set image `x86_64-linux-deb11-emsdk-closure` for build - - - - - c90c6039 by Alan Zimmerman at 2024-04-19T02:17:27-04:00 EPA: Provide correct span for PatBind And remove unused parameter in checkPatBind Contributes to #24669 - - - - - bee54c24 by Krzysztof Gogolewski at 2024-04-19T11:13:00+02:00 Update quantification order following GHC haskell/haddock#23764 - - - - - 2814eb89 by Ben Gamari at 2024-04-19T18:57:05+02:00 hypsrc-test: Fix output of PositionPragmas.html - - - - - 26036f96 by Alan Zimmerman at 2024-04-19T13:11:08-04:00 EPA: Fix span for PatBuilderAppType Include the location of the prefix @ in the span for InVisPat. Also removes unnecessary annotations from HsTP. Contributes to #24669 - - - - - dba03aab by Matthew Craven at 2024-04-19T13:11:44-04:00 testsuite: Give the pre_cmd for mhu-perf more time - - - - - d31fbf6c by Krzysztof Gogolewski at 2024-04-19T21:04:09-04:00 Fix quantification order for a `op` b and a %m -> b Fixes #23764 Implements https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0640-tyop-quantification-order.rst Updates haddock submodule. - - - - - 385cd1c4 by Sebastian Graf at 2024-04-19T21:04:45-04:00 Make `seq#` a magic Id and inline it in CorePrep (#24124) We can save much code and explanation in Tag Inference and StgToCmm by making `seq#` a known-key Magic Id in `GHC.Internal.IO` and inline this definition in CorePrep. See the updated `Note [seq# magic]`. I also implemented a new `Note [Flatten case-bind]` to get better code for otherwise nested case scrutinees. I renamed the contructors of `ArgInfo` to use an `AI` prefix in order to resolve the clash between `type CpeApp = CoreExpr` and the data constructor of `ArgInfo`, as well as fixed typos in `Note [CorePrep invariants]`. Fixes #24252 and #24124. - - - - - 275e41a9 by Jade at 2024-04-20T11:10:40-04:00 Put the newline after errors instead of before them This mainly has consequences for GHCi but also slightly alters how the output of GHC on the commandline looks. Fixes: #22499 - - - - - dd339c7a by Teo Camarasu at 2024-04-20T11:11:16-04:00 Remove unecessary stage0 packages Historically quite a few packages had to be stage0 as they depended on `template-haskell` and that was stage0. In #23536 we made it so that was no longer the case. This allows us to remove a bunch of packages from this list. A few still remain. A new version of `Win32` is required by `semaphore-compat`. Including `Win32` in the stage0 set requires also including `filepath` because otherwise Hadrian's dependency logic gets confused. Once our boot compiler has a newer version of `Win32` all of these will be able to be dropped. Resolves #24652 - - - - - 2f8e3a25 by Alan Zimmerman at 2024-04-20T11:11:52-04:00 EPA: Avoid duplicated comments in splice decls Contributes to #24669 - - - - - c70b9ddb by Serge S. Gulin at 2024-04-21T16:33:43+03:00 JS: fix typos and namings (fixes #24602) You may noted that I've also changed term of ``` , global "h$vt_double" ||= toJExpr IntV ``` See "IntV" and ``` WaitReadOp -> \[] [fd] -> pure $ PRPrimCall $ returnS (app "h$waidRead" [fd]) ``` See "h$waidRead" - - - - - 3db54f9b by Serge S. Gulin at 2024-04-21T16:33:43+03:00 JS: trivial checks for variable presence (fixes #24602) - - - - - 777f108f by Serge S. Gulin at 2024-04-21T16:33:43+03:00 JS: fs module imported twice (by emscripten and by ghc-internal). ghc-internal import wrapped in a closure to prevent conflict with emscripten (fixes #24602) Better solution is to use some JavaScript module system like AMD, CommonJS or even UMD. It will be investigated at other issues. At first glance we should try UMD (See https://github.com/umdjs/umd) - - - - - a45a5712 by Serge S. Gulin at 2024-04-21T16:33:43+03:00 JS: thread.js requires h$fds and h$fdReady to be declared for static code analysis, minimal code copied from GHCJS (fixes #24602) I've just copied some old pieces of GHCJS from publicly available sources (See https://github.com/Taneb/shims/blob/a6dd0202dcdb86ad63201495b8b5d9763483eb35/src/io.js#L607). Also I didn't put details to h$fds. I took minimal and left only its object initialization: `var h$fds = {};` - - - - - ad90bf12 by Serge S. Gulin at 2024-04-21T16:33:43+03:00 JS: heap and stack overflows reporting defined as js hard failure (fixes #24602) These errors were treated as a hard failure for browser application. The fix is trivial: just throw error. - - - - - 5962fa52 by Serge S. Gulin at 2024-04-21T16:33:44+03:00 JS: Stubs for code without actual implementation detected by Google Closure Compiler (fixes #24602) These errors were fixed just by introducing stubbed functions with throw for further implementation. - - - - - a0694298 by Serge S. Gulin at 2024-04-21T16:34:07+03:00 JS: Add externs to linker (fixes #24602) After enabling jsdoc and built-in google closure compiler types I was needed to deal with the following: 1. Define NodeJS-environment types. I've just copied minimal set of externs from semi-official repo (see https://github.com/externs/nodejs/blob/6c6882c73efcdceecf42e7ba11f1e3e5c9c041f0/v8/nodejs.js#L8). 2. Define Emscripten-environment types: `HEAP8`. Emscripten already provides some externs in our code but it supposed to be run in some module system. And its definitions do not work well in plain bundle. 3. We have some functions which purpose is to add to functions some contextual information via function properties. These functions should be marked as `modifies` to let google closure compiler remove calls if these functions are not used actually by call graph. Such functions are: `h$o`, `h$sti`, `h$init_closure`, `h$setObjInfo`. 4. STG primitives such as registries and stuff from `GHC.StgToJS`. `dXX` properties were already present at externs generator function but they are started from `7`, not from `1`. This message is related: `// fixme does closure compiler bite us here?` - - - - - e58bb29f by Serge S. Gulin at 2024-04-21T16:34:07+03:00 JS: added both tests: for size and for correctness (fixes #24602) By some reason MacOS builds add to stderr messages like: Ignoring unexpected archive entry: __.SYMDEF ... However I left stderr to `/dev/null` for compatibility with linux CI builds. - - - - - 909f3a9c by Serge S. Gulin at 2024-04-21T16:34:07+03:00 JS: Disable js linker warning for empty symbol table to make js tests running consistent across environments - - - - - 83eb10da by Serge S. Gulin at 2024-04-21T16:34:07+03:00 JS: Add special preprocessor for js files due of needing to keep jsdoc comments (fixes #24602) Our js files have defined google closure compiler types at jsdoc entries but these jsdoc entries are removed by cpp preprocessor. I considered that reusing them in javascript-backend would be a nice thing. Right now haskell processor uses `-traditional` option to deal with comments and `//` operators. But now there are following compiler options: `-C` and `-CC`. You can read about them at GCC (see https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#index-CC) and CLang (see https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-CC). It seems that `-CC` works better for javascript jsdoc than `-traditional`. At least it leaves `/* ... */` comments w/o changes. - - - - - e1cf8dc2 by brandon s allbery kf8nh at 2024-04-22T03:48:26-04:00 fix link in CODEOWNERS It seems that our local Gitlab no longer has documentation for the `CODEOWNERS` file, but the master documentation still does. Use that instead. - - - - - a27c6a49 by Fendor at 2024-04-22T10:13:03+02:00 Adapt to UserData split - - - - - 1efc5a7a by Fendor at 2024-04-22T10:13:03+02:00 Adapt to BinHandle split - - - - - 593f4e04 by Fendor at 2024-04-23T10:19:14-04:00 Add performance regression test for '-fwrite-simplified-core' - - - - - 1ba39b05 by Fendor at 2024-04-23T10:19:14-04:00 Typecheck corebindings lazily during bytecode generation This delays typechecking the corebindings until the bytecode generation happens. We also avoid allocating a thunk that is retained by `unsafeInterleaveIO`. In general, we shouldn't retain values of the hydrated `Type`, as not evaluating the bytecode object keeps it alive. It is better if we retain the unhydrated `IfaceType`. See Note [Hydrating Modules] - - - - - e916fc92 by Alan Zimmerman at 2024-04-23T10:19:50-04:00 EPA: Keep comments in a CaseAlt match The comments now live in the surrounding location, not inside the Match. Make sure we keep them. Closes #24707 - - - - - d2b17f32 by Cheng Shao at 2024-04-23T15:01:22-04:00 driver: force merge objects when building dynamic objects This patch forces the driver to always merge objects when building dynamic objects even when ar -L is supported. It is an oversight of !8887: original rationale of that patch is favoring the relatively cheap ar -L operation over object merging when ar -L is supported, which makes sense but only if we are building static objects! Omitting check for whether we are building dynamic objects will result in broken .so files with undefined reference errors at executable link time when building GHC with llvm-ar. Fixes #22210. - - - - - 209d09f5 by Julian Ospald at 2024-04-23T15:02:03-04:00 Allow non-absolute values for bootstrap GHC variable Fixes #24682 - - - - - 3fff0977 by Matthew Pickering at 2024-04-23T15:02:38-04:00 Don't depend on registerPackage function in Cabal More recent versions of Cabal modify the behaviour of libAbiHash which breaks our usage of registerPackage. It is simpler to inline the part of registerPackage that we need and avoid any additional dependency and complication using the higher-level function introduces. - - - - - c62dc317 by Cheng Shao at 2024-04-25T01:32:02-04:00 ghc-bignum: remove obsolete ln script This commit removes an obsolete ln script in ghc-bignum/gmp. See 060251c24ad160264ae8553efecbb8bed2f06360 for its original intention, but it's been obsolete for a long time, especially since the removal of the make build system. Hence the house cleaning. - - - - - 6399d52b by Cheng Shao at 2024-04-25T01:32:02-04:00 ghc-bignum: update gmp to 6.3.0 This patch bumps the gmp-tarballs submodule and updates gmp to 6.3.0. The tarball format is now xz, and gmpsrc.patch has been patched into the tarball so hadrian no longer needs to deal with patching logic when building in-tree GMP. - - - - - 65b4b92f by Cheng Shao at 2024-04-25T01:32:02-04:00 hadrian: remove obsolete Patch logic This commit removes obsolete Patch logic from hadrian, given we no longer need to patch the gmp tarball when building in-tree GMP. - - - - - 71f28958 by Cheng Shao at 2024-04-25T01:32:02-04:00 autoconf: remove obsolete patch detection This commit removes obsolete deletection logic of the patch command from autoconf scripts, given we no longer need to patch anything in the GHC build process. - - - - - daeda834 by Sylvain Henry at 2024-04-25T01:32:43-04:00 JS: correctly handle RUBBISH literals (#24664) - - - - - 8a06ddf6 by Matthew Pickering at 2024-04-25T11:16:16-04:00 Linearise ghc-internal and base build This is achieved by requesting the final package database for ghc-internal, which mandates it is fully built as a dependency of configuring the `base` package. This is at the expense of cross-package parrallelism between ghc-internal and the base package. Fixes #24436 - - - - - 94da9365 by Andrei Borzenkov at 2024-04-25T11:16:54-04:00 Fix tuple puns renaming (24702) Move tuple renaming short cutter from `isBuiltInOcc_maybe` to `isPunOcc_maybe`, so we consider incoming module. I also fixed some hidden bugs that raised after the change was done. - - - - - fa03b1fb by Fendor at 2024-04-26T18:03:13-04:00 Refactor the Binary serialisation interface The goal is simplifiy adding deduplication tables to `ModIface` interface serialisation. We identify two main points of interest that make this difficult: 1. UserData hardcodes what `Binary` instances can have deduplication tables. Moreover, it heavily uses partial functions. 2. GHC.Iface.Binary hardcodes the deduplication tables for 'Name' and 'FastString', making it difficult to add more deduplication. Instead of having a single `UserData` record with fields for all the types that can have deduplication tables, we allow to provide custom serialisers for any `Typeable`. These are wrapped in existentials and stored in a `Map` indexed by their respective `TypeRep`. The `Binary` instance of the type to deduplicate still needs to explicitly look up the decoder via `findUserDataReader` and `findUserDataWriter`, which is no worse than the status-quo. `Map` was chosen as microbenchmarks indicate it is the fastest for a small number of keys (< 10). To generalise the deduplication table serialisation mechanism, we introduce the types `ReaderTable` and `WriterTable` which provide a simple interface that is sufficient to implement a general purpose deduplication mechanism for `writeBinIface` and `readBinIface`. This allows us to provide a list of deduplication tables for serialisation that can be extended more easily, for example for `IfaceTyCon`, see the issue https://gitlab.haskell.org/ghc/ghc/-/issues/24540 for more motivation. In addition to this refactoring, we split `UserData` into `ReaderUserData` and `WriterUserData`, to avoid partial functions and reduce overall memory usage, as we need fewer mutable variables. Bump haddock submodule to accomodate for `UserData` split. ------------------------- Metric Increase: MultiLayerModulesTH_Make MultiLayerModulesRecomp T21839c ------------------------- - - - - - bac57298 by Fendor at 2024-04-26T18:03:13-04:00 Split `BinHandle` into `ReadBinHandle` and `WriteBinHandle` A `BinHandle` contains too much information for reading data. For example, it needs to keep a `FastMutInt` and a `IORef BinData`, when the non-mutable variants would suffice. Additionally, this change has the benefit that anyone can immediately tell whether the `BinHandle` is used for reading or writing. Bump haddock submodule BinHandle split. - - - - - 4d6394dd by Simon Peyton Jones at 2024-04-26T18:03:49-04:00 Fix missing escaping-kind check in tcPatSynSig Note [Escaping kind in type signatures] explains how we deal with escaping kinds in type signatures, e.g. f :: forall r (a :: TYPE r). a where the kind of the body is (TYPE r), but `r` is not in scope outside the forall-type. I had missed this subtlety in tcPatSynSig, leading to #24686. This MR fixes it; and a similar bug in tc_top_lhs_type. (The latter is tested by T24686a.) - - - - - 981c2c2c by Alan Zimmerman at 2024-04-26T18:04:25-04:00 EPA: check-exact: check that the roundtrip reproduces the source Closes #24670 - - - - - a8616747 by Andrew Lelechenko at 2024-04-26T18:05:01-04:00 Document that setEnv is not thread-safe - - - - - 1e41de83 by Bryan Richter at 2024-04-26T18:05:37-04:00 CI: Work around frequent Signal 9 errors - - - - - a6d5f9da by Naïm Favier at 2024-04-27T17:52:40-04:00 ghc-internal: add MonadFix instance for (,) Closes https://gitlab.haskell.org/ghc/ghc/-/issues/24288, implements CLC proposal https://github.com/haskell/core-libraries-committee/issues/238. Adds a MonadFix instance for tuples, permitting value recursion in the "native" writer monad and bringing consistency with the existing instance for transformers's WriterT (and, to a lesser extent, for Solo). - - - - - 64feadcd by Rodrigo Mesquita at 2024-04-27T17:53:16-04:00 bindist: Fix xattr cleaning The original fix (725343aa) was incorrect because it used the shell bracket syntax which is the quoting syntax in autoconf, making the test for existence be incorrect and therefore `xattr` was never run. Fixes #24554 - - - - - e2094df3 by damhiya at 2024-04-28T23:52:00+09:00 Make read accepts binary integer formats CLC proposal : https://github.com/haskell/core-libraries-committee/issues/177 - - - - - c62239b7 by Sylvain Henry at 2024-04-29T10:35:00+02:00 Fix tests for T22229 - - - - - 1c2fd963 by Alan Zimmerman at 2024-04-29T23:17:00-04:00 EPA: Preserve comments in Match Pats Closes #24708 Closes #24715 Closes #24734 - - - - - 4189d17e by Sylvain Henry at 2024-04-29T23:17:42-04:00 LLVM: better unreachable default destination in Switch (#24717) See added note. Co-authored-by: Siddharth Bhat <siddu.druid at gmail.com> - - - - - a3725c88 by Cheng Shao at 2024-04-29T23:18:20-04:00 ci: enable wasm jobs for MRs with wasm label This patch enables wasm jobs for MRs with wasm label. Previously the wasm label didn't actually have any effect on the CI pipeline, and full-ci needed to be applied to run wasm jobs which was a waste of runners when working on the wasm backend, hence the fix here. - - - - - 702f7964 by Matthew Pickering at 2024-04-29T23:18:56-04:00 Make interface files and object files depend on inplace .conf file A potential fix for #24737 - - - - - 728af21e by Cheng Shao at 2024-04-30T05:30:23-04:00 utils: remove obsolete vagrant scripts Vagrantfile has long been removed in !5288. This commit further removes the obsolete vagrant scripts in the tree. - - - - - 36f2c342 by Cheng Shao at 2024-04-30T05:31:00-04:00 Update autoconf scripts Scripts taken from autoconf 948ae97ca5703224bd3eada06b7a69f40dd15a02 - - - - - ecbf22a6 by Ben Gamari at 2024-04-30T05:31:36-04:00 ghcup-metadata: Drop output_name field This is entirely redundant to the filename of the URL. There is no compelling reason to name the downloaded file differently from its source. - - - - - c56d728e by Zubin Duggal at 2024-04-30T22:45:09-04:00 testsuite: Handle exceptions in framework_fail when testdir is not initialised When `framework_fail` is called before initialising testdir, it would fail with an exception reporting the testdir not being initialised instead of the actual failure. Ensure we report the actual reason for the failure instead of failing in this way. One way this can manifest is when trying to run a test that doesn't exist using `--only` - - - - - d5bea4d6 by Alan Zimmerman at 2024-04-30T22:45:45-04:00 EPA: Fix range for GADT decl with sig only Closes #24714 - - - - - 4d78c53c by Sylvain Henry at 2024-05-01T17:23:06-04:00 Fix TH dependencies (#22229) Add a dependency between Syntax and Internal (via module reexport). - - - - - 37e38db4 by Sylvain Henry at 2024-05-01T17:23:06-04:00 Bump haddock submodule - - - - - ca13075c by Sylvain Henry at 2024-05-01T17:23:47-04:00 JS: cleanup to prepare for #24743 - - - - - 40026ac3 by Alan Zimmerman at 2024-05-01T22:45:07-04:00 EPA: Preserve comments for PrefixCon Preserve comments in fun (Con {- c1 -} a b) = undefined Closes #24736 - - - - - 92134789 by Hécate Moonlight at 2024-05-01T22:45:42-04:00 Correct `@since` metadata in HpcFlags It was introduced in base-4.20, not 4.22. Fix #24721 - - - - - a580722e by Cheng Shao at 2024-05-02T08:18:45-04:00 testsuite: fix req_target_smp predicate - - - - - ac9c5f84 by Andreas Klebinger at 2024-05-02T08:18:45-04:00 STM: Remove (unused)coarse grained locking. The STM code had a coarse grained locking mode guarded by #defines that was unused. This commit removes the code. - - - - - 917ef81b by Andreas Klebinger at 2024-05-02T08:18:45-04:00 STM: Be more optimistic when validating in-flight transactions. * Don't lock tvars when performing non-committal validation. * If we encounter a locked tvar don't consider it a failure. This means in-flight validation will only fail if committing at the moment of validation is *guaranteed* to fail. This prevents in-flight validation from failing spuriously if it happens in parallel on multiple threads or parallel to thread comitting. - - - - - 167a56a0 by Alan Zimmerman at 2024-05-02T08:19:22-04:00 EPA: fix span for empty \case(s) In instance SDecide Nat where SZero %~ (SSucc _) = Disproved (\case) Ensure the span for the HsLam covers the full construct. Closes #24748 - - - - - 9bae34d8 by doyougnu at 2024-05-02T15:41:08-04:00 testsuite: expand size testing infrastructure - closes #24191 - adds windows_skip, wasm_skip, wasm_arch, find_so, _find_so - path_from_ghcPkg, collect_size_ghc_pkg, collect_object_size, find_non_inplace functions to testsuite - adds on_windows and req_dynamic_ghc predicate to testsuite The design is to not make the testsuite too smart and simply offload to ghc-pkg for locations of object files and directories. - - - - - b85b1199 by Sylvain Henry at 2024-05-02T15:41:49-04:00 GHCi: support inlining breakpoints (#24712) When a breakpoint is inlined, its context may change (e.g. tyvars in scope). We must take this into account and not used the breakpoint tick index as its sole identifier. Each instance of a breakpoint (even with the same tick index) now gets a different "info" index. We also need to distinguish modules: - tick module: module with the break array (tick counters, status, etc.) - info module: module having the CgBreakInfo (info at occurrence site) - - - - - 649c24b9 by Oleg Grenrus at 2024-05-03T20:45:42-04:00 Expose constructors of SNat, SChar and SSymbol in ghc-internal - - - - - d603f199 by Mikolaj Konarski at 2024-05-03T20:46:19-04:00 Add DCoVarSet to PluginProv (!12037) - - - - - ba480026 by Serge S. Gulin at 2024-05-03T20:47:01-04:00 JS: Enable more efficient packing of string data (fixes #24706) - - - - - be1e60ee by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Track in-scope variables in ruleCheckProgram This small patch fixes #24726, by tracking in-scope variables properly in -drule-check. Not hard to do! - - - - - 58408c77 by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Add a couple more HasCallStack constraints in SimpleOpt Just for debugging, no effect on normal code - - - - - 70e245e8 by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Add comments to Prep.hs This documentation patch fixes a TODO left over from !12364 - - - - - e5687186 by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Use HasDebugCallStack, rather than HasCallStack - - - - - 631cefec by Cheng Shao at 2024-05-03T20:48:17-04:00 driver: always merge objects when possible This patch makes the driver always merge objects with `ld -r` when possible, and only fall back to calling `ar -L` when merge objects command is unavailable. This completely reverts !8887 and !12313, given more fixes in Cabal seems to be needed to avoid breaking certain configurations and the maintainence cost is exceeding the behefits in this case :/ - - - - - 1dacb506 by Ben Gamari at 2024-05-03T20:48:53-04:00 Bump time submodule to 1.14 As requested in #24528. ------------------------- Metric Decrease: ghc_bignum_so rts_so Metric Increase: cabal_syntax_dir rts_so time_dir time_so ------------------------- - - - - - 4941b90e by Ben Gamari at 2024-05-03T20:48:53-04:00 Bump terminfo submodule to current master - - - - - 43d48b44 by Cheng Shao at 2024-05-03T20:49:30-04:00 wasm: use scheduler.postTask() for context switch when available This patch makes use of scheduler.postTask() for JSFFI context switch when it's available. It's a more principled approach than our MessageChannel based setImmediate() implementation, and it's available in latest version of Chromium based browsers. - - - - - 08207501 by Cheng Shao at 2024-05-03T20:50:08-04:00 testsuite: give pre_cmd for mhu-perf 5x time - - - - - bf3d4db0 by Alan Zimmerman at 2024-05-03T20:50:43-04:00 EPA: Preserve comments for pattern synonym sig Closes #24749 - - - - - c49493f2 by Matthew Pickering at 2024-05-04T06:02:57-04:00 tests: Widen acceptance window for dir and so size tests These are testing things which are sometimes out the control of a GHC developer. Therefore we shouldn't fail CI if something about these dependencies change because we can't do anything about it. It is still useful to have these statistics for visualisation in grafana though. Ticket #24759 - - - - - 9562808d by Matthew Pickering at 2024-05-04T06:02:57-04:00 Disable rts_so test It has already manifested large fluctuations and destabilising CI Fixes #24762 - - - - - fc24c5cf by Ryan Scott at 2024-05-04T06:03:33-04:00 unboxedSum{Type,Data}Name: Use GHC.Types as the module Unboxed sum constructors are now defined in the `GHC.Types` module, so if you manually quote an unboxed sum (e.g., `''Sum2#`), you will get a `Name` like: ```hs GHC.Types.Sum2# ``` The `unboxedSumTypeName` function in `template-haskell`, however, mistakenly believes that unboxed sum constructors are defined in `GHC.Prim`, so `unboxedSumTypeName 2` would return an entirely different `Name`: ```hs GHC.Prim.(#|#) ``` This is a problem for Template Haskell users, as it means that they can't be sure which `Name` is the correct one. (Similarly for `unboxedSumDataName`.) This patch fixes the implementations of `unboxedSum{Type,Data}Name` to use `GHC.Types` as the module. For consistency with `unboxedTupleTypeName`, the `unboxedSumTypeName` function now uses the non-punned syntax for unboxed sums (`Sum<N>#`) as the `OccName`. Fixes #24750. - - - - - 7eab4e01 by Alan Zimmerman at 2024-05-04T16:14:55+01:00 EPA: Widen stmtslist to include last semicolon Closes #24754 - - - - - 06f7db40 by Teo Camarasu at 2024-05-05T00:19:38-04:00 doc: Fix type error in hs_try_putmvar example - - - - - af000532 by Moritz Schuler at 2024-05-05T06:30:58-04:00 Fix parsing of module names in CLI arguments closes issue #24732 - - - - - da74e9c9 by Ben Gamari at 2024-05-05T06:31:34-04:00 ghc-platform: Add Setup.hs The Hadrian bootstrapping script relies upon `Setup.hs` to drive its build. Addresses #24761. - - - - - 35d34fde by Alan Zimmerman at 2024-05-05T12:52:40-04:00 EPA: preserve comments in class and data decls Fix checkTyClHdr which was discarding comments. Closes #24755 - - - - - 03c5dfbf by Simon Peyton Jones at 2024-05-05T12:53:15-04:00 Fix a float-out error Ticket #24768 showed that the Simplifier was accidentally destroying a join point. It turned out to be that we were sending a bottoming join point to the top, accidentally abstracting over /other/ join points. Easily fixed. - - - - - adba68e7 by John Ericson at 2024-05-05T19:35:56-04:00 Substitute bindist files with Hadrian not configure The `ghc-toolchain` overhaul will eventually replace all this stuff with something much more cleaned up, but I think it is still worth making this sort of cleanup in the meantime so other untanglings and dead code cleaning can procede. I was able to delete a fair amount of dead code doing this too. `LLVMTarget_CPP` is renamed to / merged with `LLVMTarget` because it wasn't actually turned into a valid CPP identifier. (Original to 1345c7cc42c45e63ab1726a8fd24a7e4d4222467, actually.) Progress on #23966 Co-Authored-By: Sylvain Henry <hsyl20 at gmail.com> - - - - - 18f4ff84 by Alan Zimmerman at 2024-05-05T19:36:32-04:00 EPA: fix mkHsOpTyPV duplicating comments Closes #24753 - - - - - a19201d4 by Matthew Craven at 2024-05-06T19:54:29-04:00 Add test cases for #24664 ...since none are present in the original MR !12463 fixing this issue. - - - - - 46328a49 by Alan Zimmerman at 2024-05-06T19:55:05-04:00 EPA: preserve comments in data decls Closes #24771 - - - - - 3b51995c by Andrei Borzenkov at 2024-05-07T14:39:40-04:00 Rename Solo# data constructor to MkSolo# (#24673) - data Solo# a = (# a #) + data Solo# a = MkSolo# a And `(# foo #)` syntax now becomes just a syntactic sugar for `MkSolo# a`. - - - - - 4d59abf2 by Arsen Arsenović at 2024-05-07T14:40:24-04:00 Add the cmm_cpp_is_gcc predicate to the testsuite A future C-- test called T24474-cmm-override-g0 relies on the GCC-specific behaviour of -g3 implying -dD, which, in turn, leads to it emitting #defines past the preprocessing stage. Clang, at least, does not do this, so the test would fail if ran on Clang. As the behaviour here being tested is ``-optCmmP-g3'' undoing effects of the workaround we apply as a fix for bug #24474, and the workaround was for GCC-specific behaviour, the test needs to be marked as fragile on other compilers. - - - - - 25b0b404 by Arsen Arsenović at 2024-05-07T14:40:24-04:00 Split out the C-- preprocessor, and make it pass -g0 Previously, C-- was processed with the C preprocessor program. This means that it inherited flags passed via -optc. A flag that is somewhat often passed through -optc is -g. At certain -g levels (>=2), GCC starts emitting defines *after* preprocessing, for the purposes of debug info generation. This is not useful for the C-- compiler, and, in fact, causes lexer errors. We can suppress this effect (safely, if supported) via -g0. As a workaround, in older versions of GCC (<=10), GCC only emitted defines if a certain set of -g*3 flags was passed. Newer versions check the debug level. For the former, we filter out those -g*3 flags and, for the latter, we specify -g0 on top of that. As a compatible and effective solution, this change adds a C-- preprocessor distinct from the C compiler and preprocessor, but that keeps its flags. The command line produced for C-- preprocessing now looks like: $pgmCmmP $optCs_without_g3 $g0_if_supported $optCmmP Closes: https://gitlab.haskell.org/ghc/ghc/-/issues/24474 - - - - - 9b4129a5 by Andreas Klebinger at 2024-05-08T13:24:20-04:00 -fprof-late: Only insert cost centres on functions/non-workfree cafs. They are usually useless and doing so for data values comes with a large compile time/code size overhead. Fixes #24103 - - - - - 259b63d3 by Sebastian Graf at 2024-05-08T13:24:57-04:00 Simplifier: Preserve OccInfo on DataAlt fields when case binder is dead (#24770) See the adjusted `Note [DataAlt occ info]`. This change also has a positive repercussion on `Note [Combine case alts: awkward corner]`. Fixes #24770. We now try not to call `dataConRepStrictness` in `adjustFieldsIdInfo` when all fields are lazy anyway, leading to a 2% ghc/alloc decrease in T9675. Metric Decrease: T9675 - - - - - 31b28cdb by Sebastian Graf at 2024-05-08T13:24:57-04:00 Kill seqRule, discard dead seq# in Prep (#24334) Discarding seq#s in Core land via `seqRule` was problematic; see #24334. So instead we discard certain dead, discardable seq#s in Prep now. See the updated `Note [seq# magic]`. This fixes the symptoms of #24334. - - - - - b2682534 by Rodrigo Mesquita at 2024-05-10T01:47:51-04:00 Document NcgImpl methods Fixes #19914 - - - - - 4d3acbcf by Zejun Wu at 2024-05-10T01:48:28-04:00 Make renamer to be more flexible with parens in the LHS of the rules We used to reject LHS like `(f a) b` in RULES and requires it to be written as `f a b`. It will be handy to allow both as the expression may be more readable with extra parens in some cases when infix operator is involved. Espceially when TemplateHaskell is used, extra parens may be added out of user's control and result in "valid" rules being rejected and there are not always ways to workaround it. Fixes #24621 - - - - - ab840ce6 by Ben Gamari at 2024-05-10T01:49:04-04:00 IPE: Eliminate dependency on Read Instead of encoding the closure type as decimal string we now simply represent it as an integer, eliminating the need for `Read` in `GHC.Internal.InfoProv.Types.peekInfoProv`. Closes #24504. ------------------------- Metric Decrease: T24602_perf_size size_hello_artifact ------------------------- - - - - - a9979f55 by Cheng Shao at 2024-05-10T01:49:43-04:00 testsuite: fix testwsdeque with recent clang This patch fixes compilation of testwsdeque.c with recent versions of clang, which will fail with the error below: ``` testwsdeque.c:95:33: error: warning: format specifies type 'long' but the argument has type 'void *' [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~~ ^ testwsdeque.c:95:39: error: warning: format specifies type 'int' but the argument has type 'StgWord' (aka 'unsigned long') [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~ ^~~ | %lu testwsdeque.c:133:42: error: error: incompatible function pointer types passing 'void (void *)' to parameter of type 'OSThreadProc *' (aka 'void *(*)(void *)') [-Wincompatible-function-pointer-types] 133 | createOSThread(&ids[n], "thief", thief, (void*)(StgWord)n); | ^~~~~ /workspace/ghc/_build/stage1/lib/../lib/x86_64-linux-ghc-9.11.20240502/rts-1.0.2/include/rts/OSThreads.h:193:51: error: note: passing argument to parameter 'startProc' here 193 | OSThreadProc *startProc, void *param); | ^ 2 warnings and 1 error generated. ``` - - - - - c2b33fc9 by Rodrigo Mesquita at 2024-05-10T01:50:20-04:00 Rename pre-processor invocation args Small clean up. Uses proper names for the various groups of arguments that make up the pre-processor invocation. - - - - - 2b1af08b by Cheng Shao at 2024-05-10T01:50:55-04:00 ghc-heap: fix typo in ghc-heap cbits - - - - - fc2d6de1 by Jade at 2024-05-10T21:07:16-04:00 Improve performance of Data.List.sort(By) This patch improves the algorithm to sort lists in base. It does so using two strategies: 1) Use a four-way-merge instead of the 'default' two-way-merge. This is able to save comparisons and allocations. 2) Use `(>) a b` over `compare a b == GT` and allow inlining and specialization. This mainly benefits types with a fast (>). Note that this *may* break instances with a *malformed* Ord instance where `a > b` is *not* equal to `compare a b == GT`. CLC proposal: https://github.com/haskell/core-libraries-committee/issues/236 Fixes #24280 ------------------------- Metric Decrease: MultiLayerModulesTH_Make T10421 T13719 T15164 T18698a T18698b T1969 T9872a T9961 T18730 WWRec T12425 T15703 ------------------------- - - - - - 1012e8aa by Matthew Pickering at 2024-05-10T21:07:52-04:00 Revert "ghcup-metadata: Drop output_name field" This reverts commit ecbf22a6ac397a791204590f94c0afa82e29e79f. This breaks the ghcup metadata generation on the nightly jobs. - - - - - daff1e30 by Jannis at 2024-05-12T13:38:35-04:00 Division by constants optimization - - - - - 413217ba by Andreas Klebinger at 2024-05-12T13:39:11-04:00 Tidy: Add flag to expose unfoldings if they take dictionary arguments. Add the flag `-fexpose-overloaded-unfoldings` to be able to control this behaviour. For ghc's boot libraries file size grew by less than 1% when it was enabled. However I refrained from enabling it by default for now. I've also added a section on specialization more broadly to the users guide. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot Metric Increase: T12425 T13386 hard_hole_fits ------------------------- - - - - - c5d89412 by Zubin Duggal at 2024-05-13T22:19:53-04:00 Don't store a GlobalRdrEnv in `mi_globals` for GHCi. GHCi only needs the `mi_globals` field for modules imported with :module +*SomeModule. It uses this field to make the top level environment in `SomeModule` available to the repl. By default, only the first target in the command line parameters is "star" loaded into GHCi. Other modules have to be manually "star" loaded into the repl. Storing the top level GlobalRdrEnv for each module is very wasteful, especially given that we will most likely never need most of these environments. Instead we store only the information needed to reconstruct the top level environment in a module, which is the `IfaceTopEnv` data structure, consisting of all import statements as well as all top level symbols defined in the module (not taking export lists into account) When a particular module is "star-loaded" into GHCi (as the first commandline target, or via an explicit `:module +*SomeModule`, we reconstruct the top level environment on demand using the `IfaceTopEnv`. - - - - - d65bf4a2 by Fendor at 2024-05-13T22:20:30-04:00 Add perf regression test for `-fwrite-if-simplified-core` - - - - - 2c0f8ddb by Andrei Borzenkov at 2024-05-13T22:21:07-04:00 Improve pattern to type pattern transformation (23739) `pat_to_type_pat` function now can handle more patterns: - TuplePat - ListPat - LitPat - NPat - ConPat Allowing these new constructors in type patterns significantly increases possible shapes of type patterns without `type` keyword. This patch also changes how lookups in `lookupOccRnConstr` are performed, because we need to fall back into types when we didn't find a constructor on data level to perform `ConPat` to type transformation properly. - - - - - be514bb4 by Cheng Shao at 2024-05-13T22:21:43-04:00 hadrian: fix hadrian building with ghc-9.10.1 - - - - - ad38e954 by Cheng Shao at 2024-05-13T22:21:43-04:00 linters: fix lint-whitespace compilation with ghc-9.10.1 - - - - - a593f284 by Andreas Klebinger at 2024-05-15T07:32:10-04:00 Expand the `inline` rule to look through casts/ticks. Fixes #24808 - - - - - b1e0c313 by Cheng Shao at 2024-05-15T07:32:46-04:00 testsuite: bump PartialDownSweep timeout to 5x on wasm32 - - - - - b2227487 by Fendor at 2024-05-15T17:14:06-04:00 Add Eq and Ord instance to `IfaceType` We add an `Ord` instance so that we can store `IfaceType` in a `Data.Map` container. This is required to deduplicate `IfaceType` while writing `.hi` files to disk. Deduplication has many beneficial consequences to both file size and memory usage, as the deduplication enables implicit sharing of values. See issue #24540 for more motivation. The `Ord` instance would be unnecessary if we used a `TrieMap` instead of `Data.Map` for the deduplication process. While in theory this is clerarly the better option, experiments on the agda code base showed that a `TrieMap` implementation has worse run-time performance characteristics. To the change itself, we mostly derive `Eq` and `Ord`. This requires us to change occurrences of `FastString` with `LexicalFastString`, since `FastString` has no `Ord` instance. We change the definition of `IfLclName` to a newtype of `LexicalFastString`, to make such changes in the future easier. Bump haddock submodule for IfLclName changes - - - - - d368f9a6 by Fendor at 2024-05-15T17:14:06-04:00 Move out LiteralMap to avoid cyclic module dependencies - - - - - 2fcc09fd by Fendor at 2024-05-15T17:14:06-04:00 Add deduplication table for `IfaceType` The type `IfaceType` is a highly redundant, tree-like data structure. While benchmarking, we realised that the high redundancy of `IfaceType` causes high memory consumption in GHCi sessions when byte code is embedded into the `.hi` file via `-fwrite-if-simplified-core` or `-fbyte-code-and-object-code`. Loading such `.hi` files from disk introduces many duplicates of memory expensive values in `IfaceType`, such as `IfaceTyCon`, `IfaceTyConApp`, `IA_Arg` and many more. We improve the memory behaviour of GHCi by adding an additional deduplication table for `IfaceType` to the serialisation of `ModIface`, similar to how we deduplicate `Name`s and `FastString`s. When reading the interface file back, the table allows us to automatically share identical values of `IfaceType`. To provide some numbers, we evaluated this patch on the agda code base. We loaded the full library from the `.hi` files, which contained the embedded core expressions (`-fwrite-if-simplified-core`). Before this patch: * Load time: 11.7 s, 2.5 GB maximum residency. After this patch: * Load time: 7.3 s, 1.7 GB maximum residency. This deduplication has the beneficial side effect to additionally reduce the size of the on-disk interface files tremendously. For example, on agda, we reduce the size of `.hi` files (with `-fwrite-if-simplified-core`): * Before: 101 MB on disk * Now: 24 MB on disk This has even a beneficial side effect on the cabal store. We reduce the size of the store on disk: * Before: 341 MB on disk * Now: 310 MB on disk Note, none of the dependencies have been compiled with `-fwrite-if-simplified-core`, but `IfaceType` occurs in multiple locations in a `ModIface`. We also add IfaceType deduplication table to .hie serialisation and refactor .hie file serialisation to use the same infrastrucutre as `putWithTables`. Bump haddock submodule to accomodate for changes to the deduplication table layout and binary interface. - - - - - 36aa7cf1 by Fendor at 2024-05-15T17:14:06-04:00 Add run-time configurability of `.hi` file compression Introduce the flag `-fwrite-if-compression=<n>` which allows to configure the compression level of writing .hi files. The motivation is that some deduplication operations are too expensive for the average use case. Hence, we introduce multiple compression levels with variable impact on performance, but still reduce the memory residency and `.hi` file size on disk considerably. We introduce three compression levels: * `1`: `Normal` mode. This is the least amount of compression. It deduplicates only `Name` and `FastString`s, and is naturally the fastest compression mode. * `2`: `Safe` mode. It has a noticeable impact on .hi file size and is marginally slower than `Normal` mode. In general, it should be safe to always use `Safe` mode. * `3`: `Full` deduplication mode. Deduplicate as much as we can, resulting in minimal .hi files, but at the cost of additional compilation time. Reading .hi files doesn't need to know the initial compression level, and can always deserialise a `ModIface`, as we write out a byte that indicates the next value has been deduplicated. This allows users to experiment with different compression levels for packages, without recompilation of dependencies. Note, the deduplication also has an additional side effect of reduced memory consumption to implicit sharing of deduplicated elements. See https://gitlab.haskell.org/ghc/ghc/-/issues/24540 for example where that matters. ------------------------- Metric Decrease: MultiLayerModulesDefsGhciWithCore T16875 T21839c T24471 hard_hole_fits libdir ------------------------- - - - - - 1e63a6fb by Matthew Pickering at 2024-05-15T17:14:07-04:00 Introduce regression tests for `.hi` file sizes Add regression tests to track how `-fwrite-if-compression` levels affect the size of `.hi` files. - - - - - 639d742b by M Farkas-Dyck at 2024-05-15T17:14:49-04:00 TTG: ApplicativeStatement exist only in Rn and Tc Co-Authored-By: romes <rodrigo.m.mesquita at gmail.com> - - - - - aa7b336b by Jade at 2024-05-15T23:06:17-04:00 Documentation: Improve documentation for symbols exported from System.IO - - - - - c561de8f by Jade at 2024-05-15T23:06:54-04:00 Improve suggestions for language extensions - When suggesting Language extensions, also suggest Extensions which imply them - Suggest ExplicitForAll and GADTSyntax instead of more specific extensions - Rephrase suggestion to include the term 'Extension' - Also moves some flag specific definitions out of Session.hs into Flags.hs (#24478) Fixes: #24477 Fixes: #24448 Fixes: #10893 - - - - - 4c7ae2a1 by Andreas Klebinger at 2024-05-15T23:07:30-04:00 Testsuite: Check if llvm assembler is available for have_llvm - - - - - bc672166 by Torsten Schmits at 2024-05-15T23:08:06-04:00 refactor quadratic search in warnMissingHomeModules - - - - - 7875e8cb by Torsten Schmits at 2024-05-15T23:08:06-04:00 add test that runs MakeDepend on thousands of modules - - - - - b84b91f5 by Adam Gundry at 2024-05-16T15:32:06-04:00 Representation-polymorphic HasField (fixes #22156) This generalises the HasField class to support representation polymorphism, so that instead of type HasField :: forall {k} . k -> Type -> Type -> Constraint we have type HasField :: forall {k} {r_rep} {a_rep} . k -> TYPE r_rep -> TYPE a_rep -> Constraint - - - - - 05285090 by Matthew Pickering at 2024-05-16T15:32:43-04:00 Bump os-string submodule to 2.0.2.2 Closes #24786 - - - - - 886ab43a by Cheng Shao at 2024-05-17T01:34:50-04:00 rts: do not prefetch mark_closure bdescr in non-moving gc when ASSERTS_ENABLED This commit fixes a small an oversight in !12148: the prefetch logic in non-moving GC may trap in debug RTS because it calls Bdescr() for mark_closure which may be a static one. It's fine in non-debug RTS because even invalid bdescr addresses are prefetched, they will not cause segfaults, so this commit implements the most straightforward fix: don't prefetch mark_closure bdescr when assertions are enabled. - - - - - b38dcf39 by Teo Camarasu at 2024-05-17T01:34:50-04:00 rts: Allocate non-moving segments with megablocks Non-moving segments are 8 blocks long and need to be aligned. Previously we serviced allocations by grabbing 15 blocks, finding an aligned 8 block group in it and returning the rest. This proved to lead to high levels of fragmentation as a de-allocating a segment caused an 8 block gap to form, and this could not be reused for allocation. This patch introduces a segment allocator based around using entire megablocks to service segment allocations in bulk. When there are no free segments, we grab an entire megablock and fill it with aligned segments. As the megablock is free, we can easily guarantee alignment. Any unused segments are placed on a free list. It only makes sense to free segments in bulk when all of the segments in a megablock are freeable. After sweeping, we grab the free list, sort it, and find all groups of segments where they cover the megablock and free them. This introduces a period of time when free segments are not available to the mutator, but the risk that this would lead to excessive allocation is low. Right after sweep, we should have an abundance of partially full segments, and this pruning step is relatively quick. In implementing this we drop the logic that kept NONMOVING_MAX_FREE segments on the free list. We also introduce an eventlog event to log the amount of pruned/retained free segments. See Note [Segment allocation strategy] Resolves #24150 ------------------------- Metric Decrease: T13253 T19695 ------------------------- - - - - - 710665bd by Cheng Shao at 2024-05-17T01:35:30-04:00 rts: fix I/O manager compilation errors for win32 target This patch fixes I/O manager compilation errors for win32 target discovered when cross-compiling to win32 using recent clang: ``` rts/win32/ThrIOManager.c:117:7: error: error: call to undeclared function 'is_io_mng_native_p'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 117 | if (is_io_mng_native_p ()) { | ^ | 117 | if (is_io_mng_native_p ()) { | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) rts/fs.c:143:28: error: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes] 143 | int setErrNoFromWin32Error () { | ^ | void | 143 | int setErrNoFromWin32Error () { | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) rts/win32/ConsoleHandler.c:227:9: error: error: call to undeclared function 'interruptIOManagerEvent'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 227 | interruptIOManagerEvent (); | ^ | 227 | interruptIOManagerEvent (); | ^ rts/win32/ConsoleHandler.c:227:9: error: note: did you mean 'getIOManagerEvent'? | 227 | interruptIOManagerEvent (); | ^ rts/include/rts/IOInterface.h:27:10: error: note: 'getIOManagerEvent' declared here 27 | void * getIOManagerEvent (void); | ^ | 27 | void * getIOManagerEvent (void); | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) rts/win32/ConsoleHandler.c:196:9: error: error: call to undeclared function 'setThreadLabel'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 196 | setThreadLabel(cap, t, "signal handler thread"); | ^ | 196 | setThreadLabel(cap, t, "signal handler thread"); | ^ rts/win32/ConsoleHandler.c:196:9: error: note: did you mean 'postThreadLabel'? | 196 | setThreadLabel(cap, t, "signal handler thread"); | ^ rts/eventlog/EventLog.h:118:6: error: note: 'postThreadLabel' declared here 118 | void postThreadLabel(Capability *cap, | ^ | 118 | void postThreadLabel(Capability *cap, | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) ``` - - - - - 28b9cee0 by Rodrigo Mesquita at 2024-05-17T01:36:05-04:00 configure: Check C99-compat for Cmm preprocessor Fixes #24815 - - - - - 8927e0c3 by Andreas Klebinger at 2024-05-17T01:36:41-04:00 Ensure `tcHasFixedRuntimeRep (# #)` returns True. - - - - - 04179044 by doyougnu at 2024-05-17T09:00:32-04:00 testsuite: make find_so regex less general Closes #24759 Background. In MR !12372 we began tracking shared object files and directories sizes for dependencies. However, this broke release builds because release builds alter the filenames swapping "in-place" for a hash. This was not considered in the MR and thus broke release pipelines. Furthermore, the rts_so test was found to be wildly varying and was therefore disabled in !12561. This commit fixes both of these issues: - fix the rts_so test by making the regex less general, now the rts_so test and all other foo.so tests must match "libHS<some-lib>-<version>-<hash|'in-place>-<ghc>". This prevents the rts_so test from accidentally matching different rts variants such as rts_threaded, which was the cause of the wild swings after !12372. - add logic to match either a hash or the string in-place. This should make the find_so function build agnostic. - - - - - 0962b50d by Andreas Klebinger at 2024-05-17T09:01:08-04:00 TagAnalysis: Treat all bottom ids as tagged during analysis. Ticket #24806 showed that we also need to treat dead end thunks as tagged during the analysis. - - - - - 7eb9f184 by Ben Gamari at 2024-05-17T11:23:37-04:00 Remove haddock submodule In preparation for merge into the GHC, as proposed in #23178. - - - - - 47b14dcc by Fendor at 2024-05-17T11:28:17-04:00 Adapt to `IfLclName` newtype changes (cherry picked from commit a711607e29b925f3d69e27c5fde4ba655c711ff1) - - - - - 6cc6681d by Fendor at 2024-05-17T11:28:17-04:00 Add IfaceType deduplication table to interface file serialisation Although we do not really need it in the interface file serialisation, as the deserialisation uses `getWithUserData`, we need to mirror the structure `getWithUserData` expects. Thus, we write essentially an empty `IfaceType` table at the end of the file, as the interface file doesn't reference `IfaceType`. (cherry picked from commit c9bc29c6a708483d2abc3d8ec9262510ce87ca61) - - - - - b9721206 by Ben Gamari at 2024-05-17T11:30:22-04:00 ghc-tags.yaml: Initial commit - - - - - 074e7d8f by Ben Gamari at 2024-05-17T11:31:29-04:00 fourmolu: Add configuration - - - - - 151b1736 by Ben Gamari at 2024-05-17T11:32:52-04:00 Makefile: Rework for use by haddock developers Previously the Makefile was present only for GHC's old make-based build system. Now since the make-based build system is gone we can use it for more useful ends. - - - - - a7dcf13b by Ben Gamari at 2024-05-17T11:36:14-04:00 Reformat with fourmolu Using previously-added configuration and `fourmolu -i .` Note that we exclude the test-cases (`./{hoogle,html-hypsrc,latex}-test`) as they are sensitive to formatting. - - - - - 0ea6017b by Ben Gamari at 2024-05-17T11:40:04-04:00 Add 'utils/haddock/' from commit 'a7dcf13bfbb97b20e75cc8ce650e2bb628db4660' git-subtree-dir: utils/haddock git-subtree-mainline: 7eb9f1849b1c72a1c61dee88462b4244550406f3 git-subtree-split: a7dcf13bfbb97b20e75cc8ce650e2bb628db4660 - - - - - aba1d304 by Hécate Moonlight at 2024-05-17T11:40:48-04:00 Add exceptions to the dangling notes list - - - - - 527bfbfb by Hécate Moonlight at 2024-05-17T11:40:52-04:00 Add haddock to the whitespace lint ignore list - - - - - 43274677 by Ben Gamari at 2024-05-17T11:41:20-04:00 git-blame-ignore-revs: Ignore haddock reformatting - - - - - 0e679e37 by Fendor at 2024-05-18T00:27:24-04:00 Pass cpp options to the CC builder in hadrian - - - - - bb40244e by Sylvain Henry at 2024-05-18T00:28:06-04:00 JS: fix allocation constant (fix #24746) - - - - - 646d30ab by Jade at 2024-05-18T19:23:31+02:00 Add highlighting for inline-code snippets in haddock - - - - - 64459a3e by Hécate Moonlight at 2024-05-19T08:42:27-04:00 haddock: Add a .readthedocs.yml file for online documentation - - - - - 7d3d9bbf by Serge S. Gulin at 2024-05-19T18:47:05+00:00 Unicode: General Category size test (related #24789) Added trivial size performance test which involves unicode general category usage via `read`. The `read` itself uses general category to detect spaces. The purpose for this test is to measure outcome of applying improvements at General Category representation in code discussed at #24789. - - - - - 8e04efcf by Alan Zimmerman at 2024-05-19T21:29:34-04:00 EPA: Remove redundant code Remove unused epAnnAnns function various cases for showAstData that no longer exist - - - - - 071d7a1e by Rodrigo Mesquita at 2024-05-20T10:55:16-04:00 Improve docs on closed type families in hs-boots Fixes #24776 - - - - - d9e2c119 by Torsten Schmits at 2024-05-20T10:55:52-04:00 Use default deviation for large-project test This new performance test has the purpose of detecting regressions in complexity in relation to the number of modules in a project, so 1% deviation is way too small to avoid false positives. - - - - - 20b0136a by Ben Gamari at 2024-05-22T00:31:39-04:00 ghcup-metadata: Various fixes from 9.10.1 Use Debian 12/x86-64, Debian 10/aarch64, and Debian 11/aarch64 bindists where possible. - - - - - 6838a7c3 by Sylvain Henry at 2024-05-22T00:32:23-04:00 Reverse arguments to stgCallocBytes (fix #24828) - - - - - f50f46c3 by Fendor at 2024-05-22T00:32:59-04:00 Add log messages for Iface serialisation compression level Fix the label of the number of 'IfaceType' entries in the log message. Add log message for the compression level that is used to serialise a an interface file. Adds `Outputable` instance for 'CompressionIFace'. - - - - - 3bad5d55 by Hécate Moonlight at 2024-05-22T00:33:40-04:00 base: Update doctests outputs ghc-internal: Update doctests outputs - - - - - 9317c6fb by David Binder at 2024-05-22T00:34:21-04:00 haddock: Fix the testsuites of the haddock-library - Apply all the metadata revisions from Hackage to the cabal file. - Fix the `ParserSpec.hs` file in the `spec` testsuite of haddock-library. - Make `CHANGES.md` an extra-doc-file instead of an extra-source-file. - - - - - 54073b02 by David Binder at 2024-05-22T00:34:21-04:00 haddock: Fix parser of @since pragma The testsuite contained tests for annotations of the form `@since foo-bar-0.5.0`, but the parser was written incorrectly. - - - - - ede6ede3 by Matthew Pickering at 2024-05-22T00:34:57-04:00 Fix nightly pages job It seems likely broken by 9f99126a which moved `index.html` from the root folder into `docs/` folder. Fixes #24840 - - - - - b7bcf729 by Cheng Shao at 2024-05-22T00:35:32-04:00 autoconf: remove unused context diff check This patch removes redundant autoconf check for the context diff program given it isn't actually been used anywhere, especially since make removal. - - - - - ea2fe66e by Hécate Moonlight at 2024-05-22T00:36:13-04:00 haddock: Rework the contributing guide - - - - - 0f302a94 by Hécate Moonlight at 2024-05-22T00:36:52-04:00 haddock: Add module relationships diagrams of haddock-api and haddock-library - - - - - d1a9f34f by Hécate Moonlight at 2024-05-22T00:36:52-04:00 Add instructions - - - - - b880ee80 by Hécate Moonlight at 2024-05-22T00:36:52-04:00 Add SVG outputs - - - - - 6d7e6ad8 by Ben Gamari at 2024-05-22T13:40:05-04:00 rts: Fix size of StgOrigThunkInfo frames Previously the entry code of the `stg_orig_thunk` frame failed to account for the size of the profiling header as it hard-coded the frame size. Fix this. Fixes #24809. - - - - - c645fe40 by Fendor at 2024-05-22T13:40:05-04:00 Add regression test T24809 for stg_orig_thunk_info_frame size - - - - - 4181aa40 by Andreas Klebinger at 2024-05-22T13:40:42-04:00 bindists: Check for existence of share folder before trying to copy it. This folder isn't distributed in windows bindists A lack of doing so resulted us copying loads of files twice. - - - - - d216510e by Matthew Pickering at 2024-05-22T13:40:42-04:00 Remove ad-hoc installation of mingw toolchain in relocatable bindists This reverts 616ac30026e8dd7d2ebb98d92dde071eedf5d951 The choice about whether to install mingw is taken in the installation makefile. This is also broken on non-windows systems. The actual issue was the EnableDistroToolchain variable wasn't declared in mk/config.mk and therefore the check to install mingw was failing. - - - - - 7b4c1998 by Cheng Shao at 2024-05-22T21:52:52-04:00 testsuite: fix T17920 for wasm backend T17920 was marked as fragile on wasm before; it can be trivially fixed by avoiding calling variadic printf() in cmm. - - - - - c739383b by Cheng Shao at 2024-05-22T21:53:29-04:00 testsuite: bump T22744 timeout to 5x - - - - - c4c6d714 by Cheng Shao at 2024-05-22T21:54:06-04:00 testsuite: don't attempt to detect host cpu features when testing cross ghc The testsuite driver CPU feature detection logic only detects host CPU and only makes sense when we are not testing a cross GHC. - - - - - 3d9e4ce6 by Simon Peyton Jones at 2024-05-22T21:54:43-04:00 Better skolemisation As #24810 showed, it is (a little) better to skolemise en-bloc, so that Note [Let-bound skolems] fires more often. See Note [Skolemisation en bloc] in GHC.Tc.Utils.Instantiate. - - - - - a3cd3a1d by Ryan Scott at 2024-05-22T21:55:19-04:00 Add missing parenthesizePat in cvtp We need to ensure that the output of `cvtp` is parenthesized (at precedence `sigPrec`) so that any pattern signatures with a surrounding pattern signature can parse correctly. Fixes #24837. - - - - - 4bb2a7cc by Hécate Moonlight at 2024-05-22T21:55:59-04:00 [base] Document the memory overhead of ByteArray Add a diagram that shows the constituent parts of a ByteArray and their memory overhead. - - - - - 8b2a016a by Hécate Moonlight at 2024-05-22T21:56:38-04:00 Haddock: Add MR template for Haddock - - - - - ead75532 by Peter Trommler at 2024-05-23T02:28:05-04:00 PPC: Support ELF v2 on powerpc64 big-endian Detect ELF v2 on PowerPC 64-bit systems. Check for `_CALL_ELF` preprocessor macro. Fixes #21191 - - - - - 9d4c10f2 by Hécate Kleidukos at 2024-05-23T02:28:44-04:00 gitlab: Add @Kleidukos to CODEOWNERS for utils/haddock - - - - - 28e64170 by Preetham Gujjula at 2024-05-23T07:20:48-04:00 haddock: Add cabal-fmt to tools for `make style` - - - - - 00126a89 by Andrei Borzenkov at 2024-05-23T07:21:24-04:00 haddock: fix verbosity option parsing - - - - - a3e0b68b by Ryan Hendrickson at 2024-05-23T15:52:03-04:00 base: specify tie-breaking behavior of min, max, and related list/Foldable functions - - - - - bdcc0f37 by doyougnu at 2024-05-24T07:51:18-04:00 cmm: add word <-> double/float bitcast - closes: #25331 This is the last step in the project plan described in #25331. This commit: - adds bitcast operands for x86_64, LLVM, aarch64 - For PPC and i386 we resort to using the cmm implementations - renames conversion MachOps from Conv to Round|Truncate - - - - - f0d257f7 by Krzysztof Gogolewski at 2024-05-24T07:51:55-04:00 StgToByteCode: minor refactor Some functions in StgToByteCode were filtering out void arguments. However, StgToByteCode is called after unarisation: the void arguments should have been removed earlier. Instead of filtering out, we assert that the args are non-void. - - - - - 03137fd2 by Krzysztof Gogolewski at 2024-05-24T07:51:55-04:00 StgToByteCode: minor refactor `layoutNativeCall` was always called with a `primRepCmmType platform` callback. Hence we can put it inside of `layoutNativeCall` rather than repeat it. - - - - - 27c430f3 by David Binder at 2024-05-24T07:52:38-04:00 haddock: Remove compatibility shims for GHC < 8.4 from haddock-library - - - - - 8dd8a076 by Cheng Shao at 2024-05-24T07:53:14-04:00 compiler: avoid saving foreign call target to local when there are no caller-save GlobalRegs This patch makes the STG->Cmm backend avoid saving foreign call target to local when there are no caller-save GlobalRegs. Since 321941a8ebe25192cdeece723e1058f2f47809ea, when we lower a foreign call, we unconditionally save the foreign call target to a temporary local first, then rely on cmmSink to clean it up later, which only happens with -fcmm-sink (implied by -O) and not in unoptimized code. And this is troublesome for the wasm backend NCG, which needs to infer a foreign call target symbol's type signature from the Cmm call site. Previously, the NCG has been emitting incorrect type signatures for unoptimized code, which happens to work with `wasm-ld` most of the time, but this is never future-proof against upstream toolchain updates, and it causes horrible breakages when LTO objects are included in linker input. Hence this patch. - - - - - 986df1ab by Cheng Shao at 2024-05-24T07:53:14-04:00 testsuite: add callee-no-local regression test - - - - - 52d62e2a by Sylvain Henry at 2024-05-24T07:53:57-04:00 Fix HasCallStack leftovers from !12514 / #24726 - - - - - c5e00c35 by crumbtoo at 2024-05-24T07:54:38-04:00 user_guide: Fix typo in MultiWayIf chapter Close #24829 - - - - - bd323b0e by Ben Gamari at 2024-05-24T07:55:15-04:00 base: Ensure that CHANGELOG is included in extra-source-files This was missed in the `ghc-internal` split. Closes #24831. - - - - - 1bfd32e8 by Ben Gamari at 2024-05-24T07:55:15-04:00 base: Fix changelog reference to setBacktraceMechanismState (cherry picked from commit b63f7ba01fdfd98a01d2f0dec8d9262b3e595c5d) - - - - - 43e8e4f3 by Sylvain Henry at 2024-05-24T12:16:43-04:00 Float/double unboxed literal support for HexFloatLiterals (fix #22155) - - - - - 4a7f4713 by Fendor at 2024-05-24T12:17:19-04:00 Improve test labels for binary interface file size tests Test labels for binary interface file sizes are hard to read and overly verbose at the same time. Extend the name for the metric title, but shorten it in the actual comparison table. - - - - - 14e554cf by Zubin Duggal at 2024-05-24T12:17:55-04:00 Revert "Fix haskell/haddock#783 Don't show button if --quickjump not present" This reverts commit 7776566531e72c415f66dd3b13da9041c52076aa. - - - - - f56838c3 by Ben Gamari at 2024-05-24T12:17:55-04:00 Fix default hyperlinked sources pattern Previously this didn't include the `%M` token which manifested as broken links to the hyperlinked sources of reexports of declarations defined in other packages. Fixes haddock#1628. (cherry picked from commit 1432bcc943d41736eca491ecec4eb9a6304dab36) - - - - - 42efa62c by Ben Gamari at 2024-05-24T12:17:55-04:00 Make DocPaths a proper data type (cherry picked from commit 7f3a5c4da0023ae47b4c376c9b1ea2d706c94d8c) - - - - - 53d9ceb3 by Ben Gamari at 2024-05-24T12:17:55-04:00 haddock: Bump version to 2.30 (cherry picked from commit 994989ed3d535177e57b778629726aeabe8c7602) - - - - - e4db1112 by Zubin Duggal at 2024-05-24T12:17:55-04:00 haddock-api: allow base 4.20 and ghc 9.11 - - - - - e294f7a2 by PHO at 2024-05-24T12:17:55-04:00 Add a flag "threaded" for building haddock with the threaded RTS GHC isn't guaranteed to have a threaded RTS. There should be a way to build it with the vanilla one. (cherry picked from commit 75a94e010fb5b0236c670d22b04f5472397dc15d) - - - - - 51165bc9 by Andreas Klebinger at 2024-05-25T10:58:03-04:00 Update ticky counter event docs. Add the info about the info table address and json fields. Fixes #23200 - - - - - 98597ad5 by Sylvain Henry at 2024-05-25T10:58:45-04:00 Export extractPromotedList (#24866) This can be useful in plugins. - - - - - 228dcae6 by Teo Camarasu at 2024-05-28T13:12:24+00:00 template-haskell: Move wired-ins to ghc-internal Thus we make `template-haskell` reinstallable and keep it as the public API for Template Haskell. All of the wired-in identifiers are moved to `ghc-internal`. This necessitates also moving much of `ghc-boot-th` into `ghc-internal`. These modules are then re-exported from `ghc-boot-th` and `template-haskell`. To avoid a dependency on `template-haskell` from `lib:ghc`, we instead depend on the TH ASTs via `ghc-boot-th`. As `template-haskell` no longer has special status, we can drop the logic adding an implicit dependency on `template-haskell` when using TH. We can also drop the `template-haskell-next` package, which was previously used when bootstrapping. When bootstrapping, we need to vendor the TH AST modules from `ghc-internal` into `ghc-boot-th`. This is controlled by the `bootstrap` cabal flag as before. See Note [Bootstrapping Template Haskell]. We split out a GHC.Internal.TH.Lift module resolving #24752. This module is only built when not bootstrapping. Resolves #24703 ------------------------- Metric Increase: ghc_boot_th_dir ghc_boot_th_so ------------------------- - - - - - 62dded28 by Teo Camarasu at 2024-05-28T13:12:24+00:00 testsuite: mark tests broken by #24886 Now that `template-haskell` is no longer wired-in. These tests are triggering #24886, and so need to be marked broken. - - - - - 3ca72ad9 by Cheng Shao at 2024-05-30T02:57:06-04:00 rts: fix missing function prototypes in ClosureMacros.h - - - - - e0029e3d by Andreas Klebinger at 2024-05-30T02:57:43-04:00 UnliftedFFITypes: Allow `(# #)` as argument when it's the only argument. This allows representing functions like: int foo(void); to be imported like this: foreign import ccall "a_number_c" c_number :: (# #) -> Int64# Which can be useful when the imported function isn't implicitly stateful. - - - - - d0401335 by Matthew Pickering at 2024-05-30T02:58:19-04:00 ci: Update ci-images commit for fedora38 image The fedora38 nightly job has been failing for quite a while because `diff` was no longer installed. The ci-images bump explicitly installs `diffutils` into these images so hopefully they now pass again. - - - - - 3c97c74a by Jan Hrček at 2024-05-30T02:58:58-04:00 Update exactprint docs - - - - - 77760cd7 by Jan Hrček at 2024-05-30T02:58:58-04:00 Incorporate review feedback - - - - - 87591368 by Jan Hrček at 2024-05-30T02:58:58-04:00 Remove no longer relevant reference to comments - - - - - 05f4f142 by Jan Hrček at 2024-05-30T02:58:59-04:00 Replace outdated code example - - - - - 45a4a5f3 by Andreas Klebinger at 2024-05-30T02:59:34-04:00 Reword error resulting from missing -XBangPatterns. It can be the result of either a bang pattern or strict binding, so now we say so instead of claiming it must be a bang pattern. Fixes #21032 - - - - - e17f2df9 by Cheng Shao at 2024-05-30T03:00:10-04:00 testsuite: bump MultiLayerModulesDefsGhciReload timeout to 10x - - - - - 7a660042 by Cheng Shao at 2024-05-30T14:42:29-04:00 rts: ensure gc_thread/gen_workspace is allocated with proper alignment gc_thread/gen_workspace are required to be aligned by 64 bytes. However, this property has not been properly enforced before, and numerous alignment violations at runtime has been caught by UndefinedBehaviorSanitizer that look like: ``` rts/sm/GC.c:1167:8: runtime error: member access within misaligned address 0x0000027a3390 for type 'gc_thread' (aka 'struct gc_thread_'), which requires 64 byte alignment 0x0000027a3390: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1167:8 rts/sm/GC.c:1184:13: runtime error: member access within misaligned address 0x0000027a3450 for type 'gen_workspace' (aka 'struct gen_workspace_'), which requires 64 byte alignment 0x0000027a3450: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1184:13 ``` This patch fixes the gc_thread/gen_workspace misalignment issue by explicitly allocating them with alignment constraint. - - - - - c77a48af by Cheng Shao at 2024-05-30T14:42:29-04:00 rts: fix an unaligned load in nonmoving gc This patch fixes an unaligned load in nonmoving gc by ensuring the closure address is properly untagged first before attempting to prefetch its header. The unaligned load is reported by UndefinedBehaviorSanitizer: ``` rts/sm/NonMovingMark.c:921:9: runtime error: member access within misaligned address 0x0042005f3a71 for type 'StgClosure' (aka 'struct StgClosure_'), which requires 8 byte alignment 0x0042005f3a71: note: pointer points here 00 00 00 98 43 13 8e 12 7f 00 00 50 3c 5f 00 42 00 00 00 58 17 b7 92 12 7f 00 00 89 cb 5e 00 42 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/NonMovingMark.c:921:9 ``` This issue had previously gone unnoticed since it didn't really harm runtime correctness, the invalid header address directly loaded from a tagged pointer is only used as prefetch address and will not cause segfaults. However, it still should be corrected because the prefetch would be rendered useless by this issue, and untagging only involves a single bitwise operation without memory access so it's cheap enough to add. - - - - - 05c4fafb by Cheng Shao at 2024-05-30T14:42:29-04:00 rts: use __builtin_offsetof to implement STG_FIELD_OFFSET This patch fixes the STG_FIELD_OFFSET macro definition by using __builtin_offsetof, which is what gcc/clang uses to implement offsetof in standard C. The previous definition that uses NULL pointer involves subtle undefined behavior in C and thus reported by UndefinedBehaviorSanitizer as well: ``` rts/Capability.h:243:58: runtime error: member access within null pointer of type 'Capability' (aka 'struct Capability_') SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Capability.h:243:58 ``` - - - - - 5ff83bfc by Sylvain Henry at 2024-05-30T14:43:10-04:00 JS: remove useless h$CLOCK_REALTIME (#23202) - - - - - 95ef2d58 by Matthew Pickering at 2024-05-30T14:43:47-04:00 ghcup-metadata: Fix metadata generation There were some syntax errors in the generation script which were preventing it from running. I have tested this with: ``` nix shell --extra-experimental-features nix-command -f .gitlab/rel_eng -c ghcup-metadata --metadata ghcup-0.0.7.yaml --date="2024-05-27" --pipeline-id=95534 --version=9.11.20240525 ``` which completed successfully. - - - - - 1bc66ee4 by Jakob Bruenker at 2024-05-30T14:44:22-04:00 Add diagrams to Arrows documentation This adds diagrams to the documentation of Arrows, similar to the ones found on https://www.haskell.org/arrows/. It does not add diagrams for ArrowChoice for the time being, mainly because it's not clear to me how to visually distinguish them from the ones for Arrow. Ideally, you might want to do something like highlight the arrows belonging to the same tuple or same Either in common colors, but that's not really possible with unicode. - - - - - d10a1c65 by Matthew Craven at 2024-05-30T23:35:48-04:00 Make UnsafeSNat et al. into pattern synonyms ...so that they do not cause coerce to bypass the nominal role on the corresponding singleton types when they are imported. See Note [Preventing unsafe coercions for singleton types] and the discussion at #23478. This also introduces unsafeWithSNatCo (and analogues for Char and Symbol) so that users can still access the dangerous coercions that importing the real constructors would allow, but only in a very localized way. - - - - - 0958937e by Cheng Shao at 2024-05-30T23:36:25-04:00 hadrian: build C/C++ with split sections when enabled When split sections is enabled, ensure -fsplit-sections is passed to GHC as well when invoking GHC to compile C/C++; and pass -ffunction-sections -fdata-sections to gcc/clang when compiling C/C++ with the hadrian Cc builder. Fixes #23381. - - - - - 02b1f91e by Cheng Shao at 2024-05-30T23:36:25-04:00 driver: build C/C++ with -ffunction-sections -fdata-sections when split sections is enabled When -fsplit-sections is passed to GHC, pass -ffunction-sections -fdata-sections to gcc/clang when building C/C++. Previously, -fsplit-sections was only respected by the NCG/LLVM backends, but not the unregisterised backend; the GHC driver did not pass -fdata-sections and -ffunction-sections to the C compiler, which resulted in excessive executable sizes. Fixes #23381. ------------------------- Metric Decrease: size_hello_artifact size_hello_unicode ------------------------- - - - - - fd47e2e3 by Cheng Shao at 2024-05-30T23:37:00-04:00 testsuite: mark process005 as fragile on JS - - - - - 34a04ea1 by Matthew Pickering at 2024-05-31T06:08:36-04:00 Add -Wderiving-typeable to -Wall Deriving `Typeable` does nothing, and it hasn't done for a long while. There has also been a warning for a long while which warns you about uselessly deriving it but it wasn't enabled in -Wall. Fixes #24784 - - - - - 75fa7b0b by Matthew Pickering at 2024-05-31T06:08:36-04:00 docs: Fix formatting of changelog entries - - - - - 303c4b33 by Preetham Gujjula at 2024-05-31T06:09:21-04:00 docs: Fix link to injective type families paper Closes #24863 - - - - - df97e9a6 by Ben Gamari at 2024-05-31T06:09:57-04:00 ghc-internal: Fix package description The previous description was inherited from `base` and was inappropriate for `ghc-internal`. Also fix the maintainer and bug reporting fields. Closes #24906. - - - - - bf0737c0 by Cheng Shao at 2024-05-31T06:10:33-04:00 compiler: remove ArchWasm32 special case in cmmDoCmmSwitchPlans This patch removes special consideration for ArchWasm32 in cmmDoCmmSwitchPlans, which means the compiler will now disable cmmImplementSwitchPlans for wasm unreg backend, just like unreg backend of other targets. We enabled it in the past to workaround some compile-time panic in older versions of LLVM, but those panics are no longer present, hence no need to keep this workaround. - - - - - 7eda4bd2 by Cheng Shao at 2024-05-31T15:52:04-04:00 utils: add hie.yaml config file for ghc-config Add hie.yaml to ghc-config project directory so it can be edited using HLS. - - - - - 1e5752f6 by Cheng Shao at 2024-05-31T15:52:05-04:00 hadrian: handle findExecutable "" gracefully hadrian may invoke findExecutable "" at run-time due to a certain program is not found by configure script. Which is fine and findExecutable is supposed to return Nothing in this case. However, on Windows there's a directory bug that throws an exception (see https://github.com/haskell/directory/issues/180), so we might as well use a wrapper for findExecutable and handle exceptions gracefully. - - - - - 4eb5ad09 by Cheng Shao at 2024-05-31T15:52:05-04:00 configure: do not set LLC/OPT/LLVMAS fallback values when FIND_LLVM_PROG fails When configure fails to find LLC/OPT/LLVMAS within supported version range, it used to set "llc"/"opt"/"clang" as fallback values. This behavior is particularly troublesome when the user has llc/opt/clang with other versions in their PATH and run the testsuite, since hadrian will incorrectly assume have_llvm=True and pass that to the testsuite driver, resulting in annoying optllvm test failures (#23186). If configure determines llc/opt/clang wouldn't work, then we shouldn't pretend it'll work at all, and the bindist configure will invoke FIND_LLVM_PROG check again at install time anyway. - - - - - 5f1afdf7 by Sylvain Henry at 2024-05-31T15:52:52-04:00 Introduce UniqueSet and use it to replace 'UniqSet Unique' 'UniqSet Unique' represents a set of uniques as a 'Map Unique Unique', which is wasting space (associated key/value are always the same). Fix #23572 and #23605 - - - - - e0aa42b9 by crumbtoo at 2024-05-31T15:53:33-04:00 Improve template-haskell haddocks Closes #15822 - - - - - ae170155 by Olivier Benz at 2024-06-01T09:35:17-04:00 Bump max LLVM version to 19 (not inclusive) - - - - - 92aa65ea by Matthew Pickering at 2024-06-01T09:35:17-04:00 ci: Update CI images to test LLVM 18 The debian12 image in this commit has llvm 18 installed. - - - - - adb1fe42 by Serge S. Gulin at 2024-06-01T09:35:53-04:00 Unicode: make ucd2haskell build-able again ucd2haskell tool used streamly library which version in cabal was out of date. It is updated to the latest version at hackage with deprecated parts rewritten. Also following fixes were applied to existing code in suppose that from its last run the code structure was changed and now it was required to be up to date with actual folder structures: 1. Ghc module path environment got a suffix with `src`. 2. Generated code got 2.1 `GHC.Internal` prefix for `Data.*`. 2.2 `GHC.Unicode.Internal` swapped on `GHC.Internal.Unicode` according to actual structure. - - - - - ad56fd84 by Jade at 2024-06-01T09:36:29-04:00 Replace 'NB' with 'Note' in error messages - - - - - 6346c669 by Cheng Shao at 2024-06-01T09:37:04-04:00 compiler: fix -ddump-cmm-raw when compiling .cmm This patch fixes missing -ddump-cmm-raw output when compiling .cmm, which is useful for debugging cmm related codegen issues. - - - - - 1c834ad4 by Ryan Scott at 2024-06-01T09:37:40-04:00 Print namespace specifiers in FixitySig's Outputable instance For whatever reason, the `Outputable` instance for `FixitySig` simply did not print out namespace specifiers, leading to the confusing `-ddump-splices` output seen in #24911. This patch corrects this oversight. Fixes #24911. - - - - - cf49fb5f by Sylvain Henry at 2024-06-01T09:38:19-04:00 Configure: display C++ compiler path - - - - - f9c1ae12 by Cheng Shao at 2024-06-02T14:01:55-04:00 hadrian: disable PIC for in-tree GMP on wasm32 This patch disables PIC for in-tree GMP on wasm32 target. Enabling PIC unconditionally adds undesired code size and runtime overhead for wasm32. - - - - - 1a32f828 by Cheng Shao at 2024-06-02T14:01:55-04:00 hadrian: disable in-tree gmp fft code path for wasm32 This patch disables in-tree GMP FFT code paths for wasm32 target in order to give up some performance of multiplying very large operands in exchange for reduced code size. - - - - - 06277d56 by Cheng Shao at 2024-06-02T14:01:55-04:00 hadrian: build in-tree GMP with malloc-notreentrant on wasm32 This patch makes hadrian build in-tree GMP with the --enable-alloca=malloc-notreentrant configure option. We will only need malloc-reentrant when we have threaded RTS and SMP support on wasm32, which will take some time to happen, before which we should use malloc-notreentrant to avoid undesired runtime overhead. - - - - - 9f614270 by ARATA Mizuki at 2024-06-02T14:02:35-04:00 Set package include paths when assembling .S files Fixes #24839. Co-authored-by: Sylvain Henry <hsyl20 at gmail.com> - - - - - 4998a6ed by Alex Mason at 2024-06-03T02:09:29-04:00 Improve performance of genericWordQuotRem2Op (#22966) Implements the algorithm from compiler-rt's udiv128by64to64default. This rewrite results in a roughly 24x improvement in runtime on AArch64 (and likely any other arch that uses it). - - - - - ae50a8eb by Cheng Shao at 2024-06-03T02:10:05-04:00 testsuite: mark T7773 as fragile on wasm - - - - - c8ece0df by Fendor at 2024-06-03T19:43:22-04:00 Migrate `Finder` component to `OsPath`, fixed #24616 For each module in a GHCi session, we keep alive one `ModLocation`. A `ModLocation` is fairly inefficiently packed, as `String`s are expensive in memory usage. While benchmarking the agda codebase, we concluded that we keep alive around 11MB of `FilePath`'s, solely retained by `ModLocation`. We provide a more densely packed encoding of `ModLocation`, by moving from `FilePath` to `OsPath`. Further, we migrate the full `Finder` component to `OsPath` to avoid unnecessary transformations. As the `Finder` component is well-encapsulated, this requires only a minimal amount of changes in other modules. We introduce pattern synonym for 'ModLocation' which maintains backwards compatibility and avoids breaking consumers of 'ModLocation'. - - - - - 0cff083a by Cheng Shao at 2024-06-03T19:43:58-04:00 compiler: emit NaturallyAligned when element type & index type are the same width This commit fixes a subtle mistake in alignmentFromTypes that used to generate Unaligned when element type & index type are the same width. Fixes #24930. - - - - - 18f63970 by Sebastian Graf at 2024-06-04T05:05:27-04:00 Parser: Remove unused `apats` rule - - - - - 38757c30 by David Knothe at 2024-06-04T05:05:27-04:00 Implement Or Patterns (#22596) This commit introduces a new language extension, `-XOrPatterns`, as described in GHC Proposal 522. An or-pattern `pat1; ...; patk` succeeds iff one of the patterns `pat1`, ..., `patk` succeed, in this order. See also the summary `Note [Implmentation of OrPatterns]`. Co-Authored-By: Sebastian Graf <sgraf1337 at gmail.com> - - - - - 395412e8 by Cheng Shao at 2024-06-04T05:06:04-04:00 compiler/ghci/rts: remove stdcall support completely We have formally dropped i386 windows support (#18487) a long time ago. The stdcall foreign call convention is only used by i386 windows, and the legacy logic around it is a significant maintenance burden for future work that adds arm64 windows support (#24603). Therefore, this patch removes stdcall support completely from the compiler as well as the RTS (#24883): - stdcall is still recognized as a FFI calling convention in Haskell syntax. GHC will now unconditionally emit a warning (-Wunsupported-calling-conventions) and treat it as ccall. - Apart from minimum logic to support the parsing and warning logic, all other code paths related to stdcall has been completely stripped from the compiler. - ghci only supports FFI_DEFAULT_ABI and ccall convention from now on. - FFI foreign export adjustor code on all platforms no longer handles the stdcall case and only handles ccall from now on. - The Win32 specific parts of RTS no longer has special code paths for stdcall. This commit is the final nail on the coffin for i386 windows support. Further commits will perform more housecleaning to strip the legacy code paths and pave way for future arm64 windows support. - - - - - d1fe9ab6 by Cheng Shao at 2024-06-04T05:06:04-04:00 rts: remove legacy i386 windows code paths This commit removes some legacy i386 windows related code paths in the RTS, given this target is no longer supported. - - - - - a605e4b2 by Cheng Shao at 2024-06-04T05:06:04-04:00 autoconf: remove i386 windows related logic This commit removes legacy i386 windows logic in autoconf scripts. - - - - - 91e5ac5e by Cheng Shao at 2024-06-04T05:06:04-04:00 llvm-targets: remove i386 windows support This commit removes i386 windows from llvm-targets and the script to generate it. - - - - - 65fe75a4 by Cheng Shao at 2024-06-04T05:06:04-04:00 libraries/utils: remove stdcall related legacy logic This commit removes stdcall related legacy logic in libraries and utils. ccall should be used uniformly for all supported windows hosts from now on. - - - - - d2a83302 by Cheng Shao at 2024-06-04T05:06:04-04:00 testsuite: adapt the testsuite for stdcall removal This patch adjusts test cases to handle the stdcall removal: - Some stdcall usages are replaced with ccall since stdcall doesn't make sense anymore. - We also preserve some stdcall usages, and check in the expected warning messages to ensure GHC always warn about stdcall usages (-Wunsupported-calling-conventions) as expected. - Error code testsuite coverage is slightly improved, -Wunsupported-calling-conventions is now tested. - Obsolete code paths related to i386 windows are also removed. - - - - - cef8f47a by Cheng Shao at 2024-06-04T05:06:04-04:00 docs: minor adjustments for stdcall removal This commit include minor adjustments of documentation related to stdcall removal. - - - - - 54332437 by Cheng Shao at 2024-06-04T05:06:04-04:00 docs: mention i386 Windows removal in 9.12 changelog This commit mentions removal of i386 Windows support and stdcall related change in the 9.12 changelog. - - - - - 2aaea8a1 by Cheng Shao at 2024-06-04T05:06:40-04:00 hadrian: improve user settings documentation This patch adds minor improvements to hadrian user settings documentation: - Add missing `ghc.cpp.opts` case - Remove non-existent `cxx` case - Clarify `cc.c.opts` also works for C++, while `cc.deps.opts` doesn't - Add example of passing configure argument to autoconf packages - - - - - 71010381 by Alex Mason at 2024-06-04T12:09:07-04:00 Add AArch64 CLZ, CTZ, RBIT primop implementations. Adds support for emitting the clz and rbit instructions, which are used by GHC.Prim.clz*#, GHC.Prim.ctz*# and GHC.Prim.bitReverse*#. - - - - - 44e2abfb by Cheng Shao at 2024-06-04T12:09:43-04:00 hadrian: add +text_simdutf flavour transformer to allow building text with simdutf This patch adds a +text_simdutf flavour transformer to hadrian to allow downstream packagers and users that build from source to opt-in simdutf support for text, in order to benefit from SIMD speedup at run-time. It's still disabled by default for the time being. - - - - - 077cb2e1 by Cheng Shao at 2024-06-04T12:09:43-04:00 ci: enable +text_simdutf flavour transformer for wasm jobs This commit enables +text_simdutf flavour transformer for wasm jobs, so text is now built with simdutf support for wasm. - - - - - b23746ad by Teo Camarasu at 2024-06-04T22:50:50-04:00 base: Use TemplateHaskellQuotes in instance Lift ByteArray Resolves #24852 - - - - - 3fd25743 by Teo Camarasu at 2024-06-04T22:50:50-04:00 base: Mark addrToByteArray as NOINLINE This function should never be inlined in order to keep code size small. - - - - - 98ad1ea5 by Cheng Shao at 2024-06-04T22:51:26-04:00 compiler: remove unused CompilerInfo/LinkerInfo types This patch removes CompilerInfo/LinkerInfo types from the compiler since they aren't actually used anywhere. - - - - - 11795244 by Cheng Shao at 2024-06-05T06:33:17-04:00 rts: remove unused PowerPC/IA64 native adjustor code This commit removes unused PowerPC/IA64 native adjustor code which is never actually enabled by autoconf/hadrian. Fixes #24920. - - - - - 5132754b by Sylvain Henry at 2024-06-05T06:33:57-04:00 RTS: fix warnings with doing*Profiling (#24918) - - - - - accc8c33 by Cheng Shao at 2024-06-05T11:35:36-04:00 hadrian: don't depend on inplace/mingw when --enable-distro-toolchain on Windows - - - - - 6ffbd678 by Cheng Shao at 2024-06-05T11:35:37-04:00 autoconf: normalize paths of some build-time dependencies on Windows This commit applies path normalization via cygpath -m to some build-time dependencies on Windows. Without this logic, the /clang64/bin prefixed msys2-style paths cause the build to fail with --enable-distro-toolchain. - - - - - 075dc6d4 by Cheng Shao at 2024-06-05T11:36:12-04:00 hadrian: remove OSDarwin mention from speedHack This commit removes mentioning of OSDarwin from speedHack, since speedHack is purely for i386 and we no longer support i386 darwin (#24921). - - - - - 83235c4c by Cheng Shao at 2024-06-05T11:36:12-04:00 compiler: remove 32-bit darwin logic This commit removes all 32-bit darwin logic from the compiler, given we no longer support 32-bit apple systems (#24921). Also contains a bit more cleanup of obsolete i386 windows logic. - - - - - 1eb99bc3 by Cheng Shao at 2024-06-05T11:36:12-04:00 rts: remove 32-bit darwin/ios logic This commit removes 32-bit darwin/ios related logic from the rts, given we no longer support them (#24921). - - - - - 24f65892 by Cheng Shao at 2024-06-05T11:36:12-04:00 llvm-targets: remove 32-bit darwin/ios targets This commit removes 32-bit darwin/ios targets from llvm-targets given we no longer support them (#24921). - - - - - ccdbd689 by Cheng Shao at 2024-06-05T11:36:12-04:00 testsuite: remove 32-bit darwin logic This commit removes 32-bit darwin logic from the testsuite given it's no longer supported (#24921). Also contains more cleanup of obsolete i386 windows logic. - - - - - 11d661c4 by Cheng Shao at 2024-06-05T11:36:13-04:00 docs: mention 32-bit darwin/ios removal in 9.12 changelog This commit mentions removal of 32-bit darwin/ios support (#24921) in the 9.12 changelog. - - - - - 7c173310 by Georgi Lyubenov at 2024-06-05T15:17:22-04:00 Add firstA and secondA to Data.Bitraversable Please see https://github.com/haskell/core-libraries-committee/issues/172 for related discussion - - - - - 3b6f9fd1 by Ben Gamari at 2024-06-05T15:17:59-04:00 base: Fix name of changelog Fixes #24899. Also place it under `extra-doc-files` to better reflect its nature and avoid triggering unnecessary recompilation if it changes. - - - - - 1f4d2ef7 by Sebastian Graf at 2024-06-05T15:18:34-04:00 Announce Or-patterns in the release notes for GHC 9.12 (#22596) Leftover from !9229. - - - - - 8650338d by Jan Hrček at 2024-06-06T10:39:24-04:00 Improve haddocks of Language.Haskell.Syntax.Pat.Pat - - - - - 2eee65e1 by Cheng Shao at 2024-06-06T10:40:00-04:00 testsuite: bump T7653 timeout for wasm - - - - - 990fed60 by Sylvain Henry at 2024-06-07T14:45:23-04:00 StgToCmm: refactor opTranslate and friends - Change arguments order to avoid `\args -> ...` lambdas - Fix documentation - Rename StgToCmm options ("big" doesn't mean anything) - - - - - 1afad514 by Sylvain Henry at 2024-06-07T14:45:23-04:00 NCG x86: remove dead code (#5444) Since 6755d833af8c21bbad6585144b10e20ac4a0a1ab this code is dead. - - - - - 595c0894 by Cheng Shao at 2024-06-07T14:45:58-04:00 testsuite: skip objc-hi/objcxx-hi when cross compiling objc-hi/objcxx-hi should be skipped when cross compiling. The existing opsys('darwin') predicate only asserts the host system is darwin but tells us nothing about the target, hence the oversight. - - - - - edfe6140 by qqwy at 2024-06-08T11:23:54-04:00 Replace '?callStack' implicit param with HasCallStack in GHC.Internal.Exception.throw - - - - - 35a64220 by Cheng Shao at 2024-06-08T11:24:30-04:00 rts: cleanup inlining logic This patch removes pre-C11 legacy code paths related to INLINE_HEADER/STATIC_INLINE/EXTERN_INLINE macros, ensure EXTERN_INLINE is treated as static inline in most cases (fixes #24945), and also corrects the comments accordingly. - - - - - 9ea90ed2 by Andrew Lelechenko at 2024-06-08T11:25:06-04:00 CODEOWNERS: add @core-libraries to track base interface changes A low-tech tactical solution for #24919 - - - - - 580fef7b by Ben Gamari at 2024-06-09T01:27:21-04:00 ghc-internal: Update CHANGELOG to reflect current version - - - - - 391ecff5 by Ben Gamari at 2024-06-09T01:27:21-04:00 ghc-internal: Update prologue.txt to reflect package description - - - - - 3dca3b7d by Ben Gamari at 2024-06-09T01:27:57-04:00 compiler: Clarify comment regarding need for MOVABS The comment wasn't clear in stating that it was only applicable to immediate source and memory target operands. - - - - - 6bd850e8 by doyougnu at 2024-06-09T21:02:14-04:00 JS: establish single source of truth for symbols In pursuit of: #22736. This MR moves ad-hoc symbols used throughout the js backend into a single symbols file. Why? First, this cleans up the code by removing ad-hoc strings created on the fly and therefore makes the code more maintainable. Second, it makes it much easier to eventually type these identifiers. - - - - - f3017dd3 by Cheng Shao at 2024-06-09T21:02:49-04:00 rts: replace ad-hoc MYTASK_USE_TLV with proper CC_SUPPORTS_TLS This patch replaces the ad-hoc `MYTASK_USE_TLV` with the `CC_SUPPORTS_TLS` macro. If TLS support is detected by autoconf, then we should use that for managing `myTask` in the threaded RTS. - - - - - e17d7e8c by Ben Gamari at 2024-06-11T05:25:21-04:00 users-guide: Fix stylistic issues in 9.12 release notes - - - - - 8a8a982a by Hugo Peters at 2024-06-11T05:25:57-04:00 fix typo in the simplifier debug output: baling -> bailing - - - - - 16475bb8 by Hécate Moonlight at 2024-06-12T03:07:55-04:00 haddock: Correct the Makefile to take into account Darwin systems - - - - - a2f60da5 by Hécate Kleidukos at 2024-06-12T03:08:35-04:00 haddock: Remove obsolete links to github.com/haskell/haddock in the docs - - - - - de4395cd by qqwy at 2024-06-12T03:09:12-04:00 Add `__GLASGOW_HASKELL_ASSERTS_IGNORED__` as CPP macro name if `-fasserts-ignored is set. This allows users to create their own Control.Exception.assert-like functionality that does something other than raising an `AssertFailed` exception. Fixes #24967 - - - - - 0e9c4dee by Ryan Hendrickson at 2024-06-12T03:09:53-04:00 compiler: add hint to TcRnBadlyStaged message - - - - - 2747cd34 by Simon Peyton Jones at 2024-06-12T12:51:37-04:00 Fix a QuickLook bug This MR fixes the bug exposed by #24676. The problem was that quickLookArg was trying to avoid calling tcInstFun unnecessarily; but it was in fact necessary. But that in turn forced me into a significant refactoring, putting more fields into EValArgQL. Highlights: see Note [Quick Look overview] in GHC.Tc.Gen.App * Instantiation variables are now distinguishable from ordinary unification variables, by level number = QLInstVar. This is treated like "level infinity". See Note [The QLInstVar TcLevel] in GHC.Tc.Utils.TcType. * In `tcApp`, we don't track the instantiation variables in a set Delta any more; instead, we just tell them apart by their level number. * EValArgQL now much more clearly captures the "half-done" state of typechecking an argument, ready for later resumption. See Note [Quick Look at value arguments] in GHC.Tc.Gen.App * Elminated a bogus (never used) fast-path in GHC.Tc.Utils.Instantiate.instCallConstraints See Note [Possible fast path for equality constraints] Many other small refactorings. - - - - - 1b1523b1 by George Thomas at 2024-06-12T12:52:18-04:00 Fix non-compiling extensible record `HasField` example - - - - - 97b141a3 by Zubin Duggal at 2024-06-12T12:52:55-04:00 haddock: Fix hyperlinker source urls (#24907) This fixes a bug introduced by f56838c36235febb224107fa62334ebfe9941aba Links to external modules in the hyperlinker are uniformly generated using splicing the template given to us instead of attempting to construct the url in an ad-hoc manner. - - - - - 954f864c by Zubin Duggal at 2024-06-12T12:52:55-04:00 haddock: Add name anchor to external source urls from documentation page URLs for external source links from documentation pages were missing a splice location for the name. Fixes #24912 - - - - - b0b64177 by Simon Peyton Jones at 2024-06-12T12:53:31-04:00 Prioritise nominal equalities The main payload of this patch is * Prioritise nominal equalities in the constraint solver. This ameliorates the incompleteness of solving for representational constraints over newtypes: see #24887. See (EX2) in Note [Decomposing newtype equalities] in GHC.Tc.Solver.Equality In doing this patch I tripped over some other things that I refactored: * Move `isCoVarType` from `GHC.Core.Type` to `GHC.Core.Predicate` where it seems more at home. * Clarify the "rewrite role" of a constraint. I was very puzzled about what the role of, say `(Eq a)` might be, but see the new Note [The rewrite-role of a constraint]. In doing so I made predTypeEqRel crash when given a non-equality. Usually it expects an equality; but it was being mis-used for the above rewrite-role stuff. - - - - - cb7c1b83 by Liam Goodacre at 2024-06-12T12:54:09-04:00 compiler: missing-deriving-strategies suggested fix Extends the missing-deriving-strategies warning with a suggested fix that includes which deriving strategies were assumed. For info about the warning, see comments for `TcRnNoDerivStratSpecified`, `TcRnNoDerivingClauseStrategySpecified`, & `TcRnNoStandaloneDerivingStrategySpecified`. For info about the suggested fix, see `SuggestExplicitDerivingClauseStrategies` & `SuggestExplicitStandalanoDerivingStrategy`. docs: Rewords missing-deriving-strategies to mention the suggested fix. Resolves #24955 - - - - - 4e36d3a3 by Jan Hrček at 2024-06-12T12:54:48-04:00 Further haddocks improvements in Language.Haskell.Syntax.Pat.Pat - - - - - 558353f4 by Cheng Shao at 2024-06-12T12:55:24-04:00 rts: use page sized mblocks on wasm This patch changes mblock size to page size on wasm. It allows us to simplify our wasi-libc fork, makes it much easier to test third party libc allocators like emmalloc/mimalloc, as well as experimenting with threaded RTS in wasm. - - - - - b3cc5366 by Matthew Pickering at 2024-06-12T23:06:57-04:00 compiler: Make ghc-experimental not wired in If you need to wire in definitions, then place them in ghc-internal and reexport them from ghc-experimental. Ticket #24903 - - - - - 700eeab9 by Hécate Kleidukos at 2024-06-12T23:07:37-04:00 base: Use a more appropriate unicode arrow for the ByteArray diagram This commit rectifies the usage of a unicode arrow in favour of one that doesn't provoke mis-alignment. - - - - - cca7de25 by Matthew Pickering at 2024-06-12T23:08:14-04:00 ghcup-metadata: Fix debian version ranges This was caught by `ghcup-ci` failing and attempting to install a deb12 bindist on deb11. ``` configure: WARNING: m4/prep_target_file.m4: Expecting YES/NO but got in ArSupportsDashL_STAGE0. Defaulting to False. bin/ghc-toolchain-bin: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by bin/ghc-toolchain-bin) bin/ghc-toolchain-bin: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /tmp/tmp.LBhwvFbVoy/foobarbaz/.ghcup/tmp/ghcup-708d9668d5d82287/ghc-9.11.20240609-x86_64-unknown-linux/bin/../lib/x86_64-linux-ghc-9.11.20240609/libHSunix-2.8.5.1-inplace-ghc9.11.20240609.so) bin/ghc-toolchain-bin: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /tmp/tmp.LBhwvFbVoy/foobarbaz/.ghcup/tmp/ghcup-708d9668d5d82287/ghc-9.11.20240609-x86_64-unknown-linux/bin/../lib/x86_64-linux-ghc-9.11.20240609/libHSunix-2.8.5.1-inplace-ghc9.11.20240609.so) ``` Fixes #24974 - - - - - 7b23ce8b by Pierre Le Marre at 2024-06-13T15:35:04-04:00 ucd2haskell: remove Streamly dependency + misc - Remove dead code. - Remove `streamly` dependency. - Process files with `bytestring`. - Replace Unicode files parsers with the corresponding ones from the package `unicode-data-parser`. - Simplify cabal file and rename module - Regenerate `ghc-internal` Unicode files with new header - - - - - 4570319f by Jacco Krijnen at 2024-06-13T15:35:41-04:00 Document how to run haddocks tests (#24976) Also remove ghc 9.7 requirement - - - - - fb629e24 by amesgen at 2024-06-14T00:28:20-04:00 compiler: refactor lower_CmmExpr_Ptr - - - - - def46c8c by amesgen at 2024-06-14T00:28:20-04:00 compiler: handle CmmRegOff in lower_CmmExpr_Ptr - - - - - ce76bf78 by Simon Peyton Jones at 2024-06-14T00:28:56-04:00 Small documentation update in Quick Look - - - - - 19bcfc9b by Simon Peyton Jones at 2024-06-14T14:44:19-04:00 Add hack for #24623 ..Th bug in #24623 is randomly triggered by this MR!.. - - - - - 7a08a025 by Simon Peyton Jones at 2024-06-14T14:44:19-04:00 Various fixes to type-tidying This MR was triggered by #24868, but I found a number of bugs and infelicities in type-tidying as I went along. Highlights: * Fix to #24868 is in GHC.Tc.Errors.report_unsolved: avoid using the OccNames of /bound/ variables when tidying /free/ variables; see the call to `tidyAvoiding`. That avoid the gratuitous renaming which was the cause of #24868. See Note [tidyAvoiding] in GHC.Core.TyCo.Tidy * Refactor and document the tidying of open types. See GHC.Core.TyCo.Tidy Note [Tidying open types] Note [Tidying is idempotent] * Tidy the coercion variable in HoleCo. That's important so that tidied types have tidied kinds. * Some small renaming to make things consistent. In particular the "X" forms return a new TidyEnv. E.g. tidyOpenType :: TidyEnv -> Type -> Type tidyOpenTypeX :: TidyEnv -> Type -> (TidyEnv, Type) - - - - - 2eac0288 by Simon Peyton Jones at 2024-06-14T14:44:19-04:00 Wibble - - - - - e5d24cc2 by Simon Peyton Jones at 2024-06-14T14:44:20-04:00 Wibbles - - - - - 246bc3a4 by Simon Peyton Jones at 2024-06-14T14:44:56-04:00 Localise a case-binder in SpecConstr.mkSeqs This small change fixes #24944 See (SCF1) in Note [SpecConstr and strict fields] - - - - - a5994380 by Sylvain Henry at 2024-06-15T03:20:29-04:00 PPC: display foreign label in panic message (cf #23969) - - - - - bd95553a by Rodrigo Mesquita at 2024-06-15T03:21:06-04:00 cmm: Parse MO_BSwap primitive operation Parsing this operation allows it to be tested using `test-primops` in a subsequent MR. - - - - - e0099721 by Andrew Lelechenko at 2024-06-16T17:57:38-04:00 Make flip representation polymorphic, similar to ($) and (&) CLC proposal: https://github.com/haskell/core-libraries-committee/issues/245 - - - - - 118a1292 by Alan Zimmerman at 2024-06-16T17:58:15-04:00 EPA: Add location to Match Pats list So we can freely modify the pats and the following item spacing will still be valid when exact printing. Closes #24862 - - - - - db343324 by Fabricio de Sousa Nascimento at 2024-06-17T10:01:51-04:00 compiler: Rejects RULES whose LHS immediately fails to type-check Fixes GHC crashing on `decomposeRuleLhs` due to ignoring coercion values. This happens when we have a RULE that does not type check, and enable `-fdefer-type-errors`. We prevent this to happen by rejecting RULES with an immediately LHS type error. Fixes #24026 - - - - - e7a95662 by Dylan Thinnes at 2024-06-17T10:02:35-04:00 Add hscTypecheckRenameWithDiagnostics, for HLS (#24996) Use runHsc' in runHsc so that both functions can't fall out of sync We're currently copying parts of GHC code to get structured warnings in HLS, so that we can recreate `hscTypecheckRenameWithDiagnostics` locally. Once we get this function into GHC we can drop the copied code in future versions of HLS. - - - - - d70abb49 by sheaf at 2024-06-18T18:47:20-04:00 Clarify -XGADTs enables existential quantification Even though -XGADTs does not turn on -XExistentialQuantification, it does allow the user of existential quantification syntax, without needing to use GADT-style syntax. Fixes #20865 - - - - - 13fdf788 by David Binder at 2024-06-18T18:48:02-04:00 Add RTS flag --read-tix-file (GHC Proposal 612) This commit introduces the RTS flag `--read-tix-file=<yes|no>` which controls whether a preexisting .tix file is read in at the beginning of a program run. The default is currently `--read-tix-file=yes` but will change to `--read-tix-file=no` in a future release of GHC. For this reason, whenever a .tix file is read in a warning is emitted to stderr. This warning can be silenced by explicitly passing the `--read-tix-file=yes` option. Details can be found in the GHC proposal cited below. Users can query whether this flag has been used with the help of the module `GHC.RTS.Flags`. A new field `readTixFile` was added to the record `HpcFlags`. These changes have been discussed and approved in - GHC proposal 612: https://github.com/ghc-proposals/ghc-proposals/pull/612 - CLC proposal 276: https://github.com/haskell/core-libraries-committee/issues/276 - - - - - f0e3cb6a by Fendor at 2024-06-18T18:48:38-04:00 Improve sharing of duplicated values in `ModIface`, fixes #24723 As a `ModIface` often contains duplicated values that are not necessarily shared, we improve sharing by serialising the `ModIface` to an in-memory byte array. Serialisation uses deduplication tables, and deserialisation implicitly shares duplicated values. This helps reducing the peak memory usage while compiling in `--make` mode. The peak memory usage is especially smaller when generating interface files with core expressions (`-fwrite-if-simplified-core`). On agda, this reduces the peak memory usage: * `2.2 GB` to `1.9 GB` for a ghci session. On `lib:Cabal`, we report: * `570 MB` to `500 MB` for a ghci session * `790 MB` to `667 MB` for compiling `lib:Cabal` with ghc There is a small impact on execution time, around 2% on the agda code base. - - - - - 1bab7dde by Fendor at 2024-06-18T18:48:38-04:00 Avoid unneccessarily re-serialising the `ModIface` To reduce memory usage of `ModIface`, we serialise `ModIface` to an in-memory byte array, which implicitly shares duplicated values. This serialised byte array can be reused to avoid work when we actually write the `ModIface` to disk. We introduce a new field to `ModIface` which allows us to save the byte array, and write it direclty to disk if the `ModIface` wasn't changed after the initial serialisation. This requires us to change absolute offsets, for example to jump to the deduplication table for `Name` or `FastString` with relative offsets, as the deduplication byte array doesn't contain header information, such as fingerprints. To allow us to dump the binary blob to disk, we need to replace all absolute offsets with relative ones. We introduce additional helpers for `ModIface` binary serialisation, which construct relocatable binary blobs. We say the binary blob is relocatable, if the binary representation can be moved and does not contain any absolute offsets. Further, we introduce new primitives for `Binary` that allow to create relocatable binaries, such as `forwardGetRel` and `forwardPutRel`. ------------------------- Metric Decrease: MultiLayerModulesDefsGhcWithCore Metric Increase: MultiComponentModules MultiLayerModules T10421 T12150 T12234 T12425 T13035 T13253-spj T13701 T13719 T14697 T15703 T16875 T18698b T18140 T18304 T18698a T18730 T18923 T20049 T24582 T5837 T6048 T9198 T9961 mhu-perf ------------------------- These metric increases may look bad, but they are all completely benign, we simply allocate 1 MB per module for `shareIface`. As this allocation is quite quick, it has a negligible impact on run-time performance. In fact, the performance difference wasn't measurable on my local machine. Reducing the size of the pre-allocated 1 MB buffer avoids these test failures, but also requires us to reallocate the buffer if the interface file is too big. These reallocations *did* have an impact on performance, which is why I have opted to accept all these metric increases, as the number of allocated bytes is merely a guidance. This 1MB allocation increase causes a lot of tests to fail that generally have a low allocation number. E.g., increasing from 40MB to 41MB is a 2.5% increase. In particular, the tests T12150, T13253-spj, T18140, T18304, T18698a, T18923, T20049, T24582, T5837, T6048, and T9961 only fail on i386-darwin job, where the number of allocated bytes seems to be lower than in other jobs. The tests T16875 and T18698b fail on i386-linux for the same reason. - - - - - 099992df by Andreas Klebinger at 2024-06-18T18:49:14-04:00 Improve documentation of @Any@ type. In particular mention possible uses for non-lifted types. Fixes #23100. - - - - - 5e75412b by Jakob Bruenker at 2024-06-18T18:49:51-04:00 Update user guide to indicate support for 64-tuples - - - - - 4f5da595 by Andreas Klebinger at 2024-06-18T18:50:28-04:00 lint notes: Add more info to notes.stdout When fixing a note reference CI fails with a somewhat confusing diff. See #21123. This commit adds a line to the output file being compared which hopefully makes it clear this is the list of broken refs, not all refs. Fixes #21123 - - - - - 1eb15c61 by Jakob Bruenker at 2024-06-18T18:51:04-04:00 docs: Update mention of ($) type in user guide Fixes #24909 - - - - - 1d66c9e3 by Jan Hrček at 2024-06-18T18:51:47-04:00 Remove duplicate Anno instances - - - - - 8ea0ba95 by Sven Tennie at 2024-06-18T18:52:23-04:00 AArch64: Delete unused RegNos This has the additional benefit of getting rid of the -1 encoding (real registers start at 0.) - - - - - 325422e0 by Sjoerd Visscher at 2024-06-18T18:53:04-04:00 Bump stm submodule to current master - - - - - 64fba310 by Cheng Shao at 2024-06-18T18:53:40-04:00 testsuite: bump T17572 timeout on wasm32 - - - - - eb612fbc by Sven Tennie at 2024-06-19T06:46:00-04:00 AArch64: Simplify BL instruction The BL constructor carried unused data in its third argument. - - - - - b0300503 by Alan Zimmerman at 2024-06-19T06:46:36-04:00 TTG: Move SourceText from `Fixity` to `FixitySig` It is only used there, simplifies the use of `Fixity` in the rest of the code, and is moved into a TTG extension point. Precedes !12842, to simplify it - - - - - 842e119b by Rodrigo Mesquita at 2024-06-19T06:47:13-04:00 base: Deprecate some .Internal modules Deprecates the following modules according to clc-proposal #217: https://github.com/haskell/core-libraries-committee/issues/217 * GHC.TypeNats.Internal * GHC.TypeLits.Internal * GHC.ExecutionStack.Internal Closes #24998 - - - - - 24e89c40 by Jacco Krijnen at 2024-06-20T07:21:27-04:00 ttg: Use List instead of Bag in AST for LHsBindsLR Considering that the parser used to create a Bag of binds using a cons-based approach, it can be also done using lists. The operations in the compiler don't really require Bag. By using lists, there is no dependency on GHC.Data.Bag anymore from the AST. Progress towards #21592 - - - - - 04f5bb85 by Simon Peyton Jones at 2024-06-20T07:22:03-04:00 Fix untouchability test This MR fixes #24938. The underlying problem was tha the test for "does this implication bring in scope any equalities" was plain wrong. See Note [Tracking Given equalities] and Note [Let-bound skolems] both in GHC.Tc.Solver.InertSet. Then * Test LocalGivenEqs succeeds for a different reason than before; see (LBS2) in Note [Let-bound skolems] * New test T24938a succeeds because of (LBS2), whereas it failed before. * Test LocalGivenEqs2 now fails, as it should. * Test T224938, the repro from the ticket, fails, as it should. - - - - - 9a757a27 by Simon Peyton Jones at 2024-06-20T07:22:40-04:00 Fix demand signatures for join points This MR tackles #24623 and #23113 The main change is to give a clearer notion of "worker/wrapper arity", esp for join points. See GHC.Core.Opt.DmdAnal Note [Worker/wrapper arity and join points] This Note is a good summary of what this MR does: (1) The "worker/wrapper arity" of an Id is * For non-join-points: idArity * The join points: the join arity (Id part only of course) This is the number of args we will use in worker/wrapper. See `ww_arity` in `dmdAnalRhsSig`, and the function `workWrapArity`. (2) A join point's demand-signature arity may exceed the Id's worker/wrapper arity. See the `arity_ok` assertion in `mkWwBodies`. (3) In `finaliseArgBoxities`, do trimBoxity on any argument demands beyond the worker/wrapper arity. (4) In WorkWrap.splitFun, make sure we split based on the worker/wrapper arity (re)-computed by workWrapArity. - - - - - 5e8faaf1 by Jan Hrček at 2024-06-20T07:23:20-04:00 Update haddocks of Import/Export AST types - - - - - cd512234 by Hécate Kleidukos at 2024-06-20T07:24:02-04:00 haddock: Update bounds in cabal files and remove allow-newer stanza in cabal.project - - - - - 8a8ff8f2 by Rodrigo Mesquita at 2024-06-20T07:24:38-04:00 cmm: Don't parse MO_BSwap for W8 Don't support parsing bswap8, since bswap8 is not really an operation and would have to be implemented as a no-op (and currently is not implemented at all). Fixes #25002 - - - - - 5cc472f5 by sheaf at 2024-06-20T07:25:14-04:00 Delete unused testsuite files These files were committed by mistake in !11902. This commit simply removes them. - - - - - 7b079378 by Matthew Pickering at 2024-06-20T07:25:50-04:00 Remove left over debugging pragma from 2016 This pragma was accidentally introduced in 648fd73a7b8fbb7955edc83330e2910428e76147 The top-level cost centres lead to a lack of optimisation when compiling with profiling. - - - - - c872e09b by Hécate Kleidukos at 2024-06-20T19:28:36-04:00 haddock: Remove unused pragmata, qualify usages of Data.List functions, add more sanity checking flags by default This commit enables some extensions and GHC flags in the cabal file in a way that allows us to reduce the amount of prologuing on top of each file. We also prefix the usage of some List functions that removes ambiguity when they are also exported from the Prelude, like foldl'. In general, this has the effect of pointing out more explicitly that a linked list is used. Metric Increase: haddock.Cabal haddock.base haddock.compiler - - - - - 8c87d4e1 by Arnaud Spiwack at 2024-06-20T19:29:12-04:00 Add test case for #23586 - - - - - 568de8a5 by Arnaud Spiwack at 2024-06-20T19:29:12-04:00 When matching functions in rewrite rules: ignore multiplicity When matching a template variable to an expression, we check that it has the same type as the matched expression. But if the variable `f` has type `A -> B` while the expression `e` has type `A %1 -> B`, the match was previously rejected. A principled solution would have `f` substituted by `\(%Many x) -> e x` or some other appropriate coercion. But since linearity is not properly checked in Core, we can be cheeky and simply ignore multiplicity while matching. Much easier. This has forced a change in the linter which, when `-dlinear-core-lint` is off, must consider that `a -> b` and `a %1 -> b` are equal. This is achieved by adding an argument to configure the behaviour of `nonDetCmpTypeX` and modify `ensureEqTys` to call to the new behaviour which ignores multiplicities when comparing two `FunTy`. Fixes #24725. - - - - - c8a8727e by Simon Peyton Jones at 2024-06-20T19:29:12-04:00 Faster type equality This MR speeds up type equality, triggered by perf regressions that showed up when fixing #24725 by parameterising type equality over whether to ignore multiplicity. The changes are: * Do not use `nonDetCmpType` for type /equality/. Instead use a specialised type-equality function, which we have always had! `nonDetCmpType` remains, but I did not invest effort in refactoring or optimising it. * Type equality is parameterised by - whether to expand synonyms - whether to respect multiplicities - whether it has a RnEnv2 environment In this MR I systematically specialise it for static values of these parameters. Much more direct and predictable than before. See Note [Specialising type equality] * We want to avoid comparing kinds if possible. I refactored how this happens, at least for `eqType`. See Note [Casts and coercions in type comparison] * To make Lint fast, we want to avoid allocating a thunk for <msg> in ensureEqTypes ty1 ty2 <msg> because the test almost always succeeds, and <msg> isn't needed. See Note [INLINE ensureEqTys] Metric Decrease: T13386 T5030 - - - - - 21fc180b by Ryan Hendrickson at 2024-06-22T10:40:55-04:00 base: Add inits1 and tails1 to Data.List - - - - - d640a3b6 by Sebastian Graf at 2024-06-22T10:41:32-04:00 Derive previously hand-written `Lift` instances (#14030) This is possible now that #22229 is fixed. - - - - - 33fee6a2 by Sebastian Graf at 2024-06-22T10:41:32-04:00 Implement the "Derive Lift instances for data types in template-haskell" proposal (#14030) After #22229 had been fixed, we can finally derive the `Lift` instance for the TH AST, as proposed by Ryan Scott in https://mail.haskell.org/pipermail/libraries/2015-September/026117.html. Fixes #14030, #14296, #21759 and #24560. The residency of T24471 increases by 13% because we now load `AnnLookup` from its interface file, which transitively loads the whole TH AST. Unavoidable and not terrible, I think. Metric Increase: T24471 - - - - - 383c01a8 by Matthew Pickering at 2024-06-22T10:42:08-04:00 bindist: Use complete relative paths when cding to directories If a user has configured CDPATH on their system then `cd lib` may change into an unexpected directory during the installation process. If you write `cd ./lib` then it will not consult `CDPATH` to determine what you mean. I have added a check on ghcup-ci to verify that the bindist installation works in this situation. Fixes #24951 - - - - - 5759133f by Hécate Kleidukos at 2024-06-22T10:42:49-04:00 haddock: Use the more precise SDocContext instead of DynFlags The pervasive usage of DynFlags (the parsed command-line options passed to ghc) blurs the border between different components of Haddock, and especially those that focus solely on printing text on the screen. In order to improve the understanding of the real dependencies of a function, the pretty-printer options are made concrete earlier in the pipeline instead of late when pretty-printing happens. This also has the advantage of clarifying which functions actually require DynFlags for purposes other than pretty-printing, thus making the interactions between Haddock and GHC more understandable when exploring the code base. See Henry, Ericson, Young. "Modularizing GHC". https://hsyl20.fr/home/files/papers/2022-ghc-modularity.pdf. 2022 - - - - - 749e089b by Alexander McKenna at 2024-06-22T10:43:24-04:00 Add INLINE [1] pragma to compareInt / compareWord To allow rules to be written on the concrete implementation of `compare` for `Int` and `Word`, we need to have an `INLINE [1]` pragma on these functions, following the `matching_overloaded_methods_in_rules` note in `GHC.Classes`. CLC proposal https://github.com/haskell/core-libraries-committee/issues/179 Fixes https://gitlab.haskell.org/ghc/ghc/-/issues/22643 - - - - - db033639 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 ci: Enable strict ghc-toolchain setting for bindists - - - - - 14308a8f by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 ghc-toolchain: Improve parse failure error Improves the error message for when `ghc-toolchain` fails to read a valid `Target` value from a file (in doFormat mode). - - - - - 6e7cfff1 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 bindist: ghc-toolchain related options in configure - - - - - 958d6931 by Matthew Pickering at 2024-06-24T17:21:15-04:00 ci: Fail when bindist configure fails when installing bindist It is better to fail earlier if the configure step fails rather than carrying on for a more obscure error message. - - - - - f48d157d by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 ghc-toolchain: Fix error logging indentation - - - - - f1397104 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 bindist: Correct default.target substitution The substitution on `default.target.in` must be done after `PREP_TARGET_FILE` is called -- that macro is responsible for setting the variables that will be effectively substituted in the target file. Otherwise, the target file is invalid. Fixes #24792 #24574 - - - - - 665e653e by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 configure: Prefer tool name over tool path It is non-obvious whether the toolchain configuration should use full-paths to tools or simply their names. In addressing #24574, we've decided to prefer executable names over paths, ultimately, because the bindist configure script already does this, thus is the default in ghcs out there. Updates the in-tree configure script to prefer tool names (`AC_CHECK_TOOL` rather than `AC_PATH_TOOL`) and `ghc-toolchain` to ignore the full-path-result of `findExecutable`, which it previously used over the program name. This change doesn't undo the fix in bd92182cd56140ffb2f68ec01492e5aa6333a8fc because `AC_CHECK_TOOL` still takes into account the target triples, unlike `AC_CHECK_PROG/AC_PATH_PROG`. - - - - - 463716c2 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 dist: Don't forget to configure JavascriptCPP We introduced a configuration step for the javascript preprocessor, but only did so for the in-tree configure script. This commit makes it so that we also configure the javascript preprocessor in the configure shipped in the compiler bindist. - - - - - e99cd73d by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 distrib: LlvmTarget in distrib/configure LlvmTarget was being set and substituted in the in-tree configure, but not in the configure shipped in the bindist. We want to set the LlvmTarget to the canonical LLVM name of the platform that GHC is targetting. Currently, that is going to be the boostrapped llvm target (hence the code which sets LlvmTarget=bootstrap_llvm_target). - - - - - 4199aafe by Matthew Pickering at 2024-06-24T17:21:51-04:00 Update bootstrap plans for recent GHC versions (9.6.5, 9.8.2, 9.10.10) - - - - - f599d816 by Matthew Pickering at 2024-06-24T17:21:51-04:00 ci: Add 9_10 bootstrap testing job - - - - - 8f4b799d by Hécate Kleidukos at 2024-06-24T17:22:30-04:00 haddock: Move the usage of mkParserOpts directly to ppHyperlinkedModuleSource in order to avoid passing a whole DynFlags Follow up to !12931 - - - - - 210cf1cd by Hécate Kleidukos at 2024-06-24T17:22:30-04:00 haddock: Remove cabal file linting rule This will be reintroduced with a properly ignored commit when the cabal files are themselves formatted for good. - - - - - 7fe85b13 by Peter Trommler at 2024-06-24T22:03:41-04:00 PPC NCG: Fix sign hints in C calls Sign hints for parameters are in the second component of the pair. Fixes #23034 - - - - - 949a0e0b by Andrew Lelechenko at 2024-06-24T22:04:17-04:00 base: fix missing changelog entries - - - - - 1bfa9111 by Andreas Klebinger at 2024-06-26T21:49:53-04:00 GHCi interpreter: Tag constructor closures when possible. When evaluating PUSH_G try to tag the reference we are pushing if it's a constructor. This is potentially helpful for performance and required to fix #24870. - - - - - caf44a2d by Andrew Lelechenko at 2024-06-26T21:50:30-04:00 Implement Data.List.compareLength and Data.List.NonEmpty.compareLength `compareLength xs n` is a safer and faster alternative to `compare (length xs) n`. The latter would force and traverse the entire spine (potentially diverging), while the former traverses as few elements as possible. The implementation is carefully designed to maintain as much laziness as possible. As per https://github.com/haskell/core-libraries-committee/issues/257 - - - - - f4606ae0 by Serge S. Gulin at 2024-06-26T21:51:05-04:00 Unicode: adding compact version of GeneralCategory (resolves #24789) The following features are applied: 1. Lookup code like Cmm-switches (draft implementation proposed by Sylvain Henry @hsyl20) 2. Nested ifs (logarithmic search vs linear search) (the idea proposed by Sylvain Henry @hsyl20) ------------------------- Metric Decrease: size_hello_artifact size_hello_unicode ------------------------- - - - - - 0e424304 by Hécate Kleidukos at 2024-06-26T21:51:44-04:00 haddock: Restructure import statements This commit removes idiosyncrasies that have accumulated with the years in how import statements were laid out, and defines clear but simple guidelines in the CONTRIBUTING.md file. - - - - - 9b8ddaaf by Arnaud Spiwack at 2024-06-26T21:52:23-04:00 Rename test for #24725 I must have fumbled my tabs when I copy/pasted the issue number in 8c87d4e1136ae6d28e92b8af31d78ed66224ee16. - - - - - b0944623 by Arnaud Spiwack at 2024-06-26T21:52:23-04:00 Add original reproducer for #24725 - - - - - 77ce65a5 by Matthew Pickering at 2024-06-27T07:57:14-04:00 Expand LLVM version matching regex for compability with bsd systems sed on BSD systems (such as darwin) does not support the + operation. Therefore we take the simple minded approach of manually expanding group+ to groupgroup*. Fixes #24999 - - - - - bdfe4a9e by Matthew Pickering at 2024-06-27T07:57:14-04:00 ci: On darwin configure LLVMAS linker to match LLC and OPT toolchain The version check was previously broken so the toolchain was not detected at all. - - - - - 07e03a69 by Matthew Pickering at 2024-06-27T07:57:15-04:00 Update nixpkgs commit for darwin toolchain One dependency (c-ares) changed where it hosted the releases which breaks the build with the old nixpkgs commit. - - - - - 144afed7 by Rodrigo Mesquita at 2024-06-27T07:57:50-04:00 base: Add changelog entry for #24998 - - - - - eebe1658 by Sylvain Henry at 2024-06-28T07:13:26-04:00 X86/DWARF: support no tables-next-to-code and asm-shortcutting (#22792) - Without TNTC (tables-next-to-code), we must be careful to not duplicate labels in pprNatCmmDecl. Especially, as a CmmProc is identified by the label of its entry block (and not of its info table), we can't reuse the same label to delimit the block end and the proc end. - We generate debug infos from Cmm blocks. However, when asm-shortcutting is enabled, some blocks are dropped at the asm codegen stage and some labels in the DebugBlocks become missing. We fix this by filtering the generated debug-info after the asm codegen to only keep valid infos. Also add some related documentation. - - - - - 6e86d82b by Sylvain Henry at 2024-06-28T07:14:06-04:00 PPC NCG: handle JMP to ForeignLabels (#23969) - - - - - 9e4b4b0a by Sylvain Henry at 2024-06-28T07:14:06-04:00 PPC NCG: support loading 64-bit value on 32-bit arch (#23969) - - - - - 50caef3e by Sylvain Henry at 2024-06-28T07:14:46-04:00 Fix warnings in genapply - - - - - 37139b17 by Matthew Pickering at 2024-06-28T07:15:21-04:00 libraries: Update os-string to 2.0.4 This updates the os-string submodule to 2.0.4 which removes the usage of `TemplateHaskell` pragma. - - - - - 0f3d3bd6 by Sylvain Henry at 2024-06-30T00:47:40-04:00 Bump array submodule - - - - - 354c350c by Sylvain Henry at 2024-06-30T00:47:40-04:00 GHCi: Don't use deprecated sizeofMutableByteArray# - - - - - 35d65098 by Ben Gamari at 2024-06-30T00:47:40-04:00 primops: Undeprecate addr2Int# and int2Addr# addr2Int# and int2Addr# were marked as deprecated with the introduction of the OCaml code generator (1dfaee318171836b32f6b33a14231c69adfdef2f) due to its use of tagged integers. However, this backend has long vanished and `base` has all along been using `addr2Int#` in the Show instance for Ptr. While it's unlikely that we will have another backend which has tagged integers, we may indeed support platforms which have tagged pointers. Consequently we undeprecate the operations but warn the user that the operations may not be portable. - - - - - 3157d817 by Sylvain Henry at 2024-06-30T00:47:41-04:00 primops: Undeprecate par# par# is still used in base and it's not clear how to replace it with spark# (see #24825) - - - - - c8d5b959 by Ben Gamari at 2024-06-30T00:47:41-04:00 Primops: Make documentation generation more efficient Previously we would do a linear search through all primop names, doing a String comparison on the name of each when preparing the HsDocStringMap. Fix this. - - - - - 65165fe4 by Ben Gamari at 2024-06-30T00:47:41-04:00 primops: Ensure that deprecations are properly tracked We previously failed to insert DEPRECATION pragmas into GHC.Prim's ModIface, meaning that they would appear in the Haddock documentation but not issue warnings. Fix this. See #19629. Haddock also needs to be fixed: https://github.com/haskell/haddock/issues/223 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - bc1d435e by Mario Blažević at 2024-06-30T00:48:20-04:00 Improved pretty-printing of unboxed TH sums and tuples, fixes #24997 - - - - - 0d170eaf by Zubin Duggal at 2024-07-04T11:08:41-04:00 compiler: Turn `FinderCache` into a record of operations so that GHC API clients can have full control over how its state is managed by overriding `hsc_FC`. Also removes the `uncacheModule` function as this wasn't being used by anything since 1893ba12fe1fa2ade35a62c336594afcd569736e Fixes #23604 - - - - - 4664997d by Teo Camarasu at 2024-07-04T11:09:18-04:00 Add HasCallStack to T23221 This makes the test a bit easier to debug - - - - - 66919dcc by Teo Camarasu at 2024-07-04T11:09:18-04:00 rts: use live words to estimate heap size We use live words rather than live blocks to determine the size of the heap for determining memory retention. Most of the time these two metrics align, but they can come apart in normal usage when using the nonmoving collector. The nonmoving collector leads to a lot of partially occupied blocks. So, using live words is more accurate. They can also come apart when the heap is suffering from high levels fragmentation caused by small pinned objects, but in this case, the block size is the more accurate metric. Since this case is best avoided anyway. It is ok to accept the trade-off that we might try (and probably) fail to return more memory in this case. See also the Note [Statistics for retaining memory] Resolves #23397 - - - - - 8dfca66a by Oleg Grenrus at 2024-07-04T11:09:55-04:00 Add reflections of GHC.TypeLits/Nats type families ------------------------- Metric Increase: ghc_experimental_dir ghc_experimental_so ------------------------- - - - - - 6c469bd2 by Adam Gundry at 2024-07-04T11:10:33-04:00 Correct -Wpartial-fields warning to say "Definition" rather than "Use" Fixes #24710. The message and documentation for `-Wpartial-fields` were misleading as (a) the warning occurs at definition sites rather than use sites, and (b) the warning relates to the definition of a field independently of the selector function (e.g. because record updates are also partial). - - - - - 977b6b64 by Max Ulidtko at 2024-07-04T11:11:11-04:00 GHCi: Support local Prelude Fixes #10920, an issue where GHCi bails out when started alongside a file named Prelude.hs or Prelude.lhs (even empty file suffices). The in-source Note [GHCi and local Preludes] documents core reasoning. Supplementary changes: * add debug traces for module lookups under -ddump-if-trace; * drop stale comment in GHC.Iface.Load; * reduce noise in -v3 traces from GHC.Utils.TmpFs; * new test, which also exercizes HomeModError. - - - - - 87cf4111 by Ryan Scott at 2024-07-04T11:11:47-04:00 Add missing gParPat in cvtp's ViewP case When converting a `ViewP` using `cvtp`, we need to ensure that the view pattern is parenthesized so that the resulting code will parse correctly when roundtripped back through GHC's parser. Fixes #24894. - - - - - b05613c5 by Adam Gundry at 2024-07-04T11:12:23-04:00 Use structured error representation for module cycle errors (see #18516) This removes the re-export of cyclicModuleErr from the top-level GHC module. - - - - - 70389749 by Adam Gundry at 2024-07-04T11:12:23-04:00 Use structured error representation when reloading a nonexistent module - - - - - 680ade3d by sheaf at 2024-07-04T11:12:23-04:00 Use structured errors for a Backpack instantiation error - - - - - 97c6d6de by sheaf at 2024-07-04T11:12:23-04:00 Move mkFileSrcSpan to GHC.Unit.Module.Location - - - - - f9e7bd9b by Adriaan Leijnse at 2024-07-04T11:12:59-04:00 ttg: Remove SourceText from OverloadedLabel Progress towards #21592 - - - - - 00d63245 by Alexander Foremny at 2024-07-04T11:12:59-04:00 AST: GHC.Prelude -> Prelude Refactor occurrences to GHC.Prelude with Prelude within Language/Haskell. Progress towards #21592 - - - - - cc846ea5 by Alexander Foremny at 2024-07-04T11:12:59-04:00 AST: remove occurrences of GHC.Unit.Module.ModuleName `GHC.Unit.Module` re-exports `ModuleName` from `Language.Haskell.Syntax.Module.Name`. Progress towards #21592 - - - - - 24c7d287 by Fabian Kirchner at 2024-07-04T11:12:59-04:00 AST: move Data instance definition for ModuleName to GHC.Unit.Types To remove the dependency on GHC.Utils.Misc inside Language.Haskell.Syntax.Module.Name, the instance definition is moved from there into GHC.Unit.Types. Progress towards #21592 - - - - - 6cbba381 by Fabian Kirchner at 2024-07-04T11:12:59-04:00 AST: move negateOverLitVal into GHC.Hs.Lit The function negateOverLitVal is not used within Language.Haskell and therefore can be moved to the respective module inside GHC.Hs. Progress towards #21592 - - - - - 611aa7c6 by Fabian Kirchner at 2024-07-04T11:12:59-04:00 AST: move conDetailsArity into GHC.Rename.Module The function conDetailsArity is only used inside GHC.Rename.Module. We therefore move it there from Language.Haskell.Syntax.Lit. Progress towards #21592 - - - - - 1b968d16 by Mauricio at 2024-07-04T11:12:59-04:00 AST: Remove GHC.Utils.Assert from GHC Simple cleanup. Progress towards #21592 - - - - - 3d192e5d by Fabian Kirchner at 2024-07-04T11:12:59-04:00 ttg: extract Specificity, ForAllTyFlag and helper functions from GHC.Types.Var Progress towards #21592 Specificity, ForAllTyFlag and its' helper functions are extracted from GHC.Types.Var and moved into a new module Language.Haskell.Syntax.Specificity. Note: Eventually (i.e. after Language.Haskell.Syntax.Decls does not depend on GHC.* anymore) these should be moved into Language.Haskell.Syntax.Decls. At this point, this would cause cyclic dependencies. - - - - - 257d1adc by Adowrath at 2024-07-04T11:12:59-04:00 ttg: Split HsSrcBang, remove ref to DataCon from Syntax.Type Progress towards #21592 This splits HsSrcBang up, creating the new HsBang within `Language.Haskell.Syntax.Basic`. `HsBang` holds the unpackedness and strictness information, while `HsSrcBang` only adds the SourceText for usage within the compiler directly. Inside the AST, to preserve the SourceText, it is hidden behind the pre-existing extension point `XBindTy`. All other occurrences of `HsSrcBang` were adapted to deconstruct the inner `HsBang`, and when interacting with the `BindTy` constructor, the hidden `SourceText` is extracted/inserted into the `XBindTy` extension point. `GHC.Core.DataCon` exports both `HsSrcBang` and `HsBang` for convenience. A constructor function `mkHsSrcBang` that takes all individual components has been added. Two exceptions has been made though: - The `Outputable HsSrcBang` instance is replaced by `Outputable HsBang`. While being only GHC-internal, the only place it's used is in outputting `HsBangTy` constructors -- which already have `HsBang`. It wouldn't make sense to reconstruct a `HsSrcBang` just to ignore the `SourceText` anyway. - The error `TcRnUnexpectedAnnotation` did not use the `SourceText`, so it too now only holds a `HsBang`. - - - - - 24757fec by Mauricio at 2024-07-04T11:12:59-04:00 AST: Moved definitions that use GHC.Utils.Panic to GHC namespace Progress towards #21592 - - - - - 9be49379 by Mike Pilgrem at 2024-07-04T11:13:41-04:00 Fix #25032 Refer to Cabal's `includes` field, not `include-files` - - - - - 9e2ecf14 by Andrew Lelechenko at 2024-07-04T11:14:17-04:00 base: fix more missing changelog entries - - - - - a82121b3 by Peter Trommler at 2024-07-04T11:14:53-04:00 X86 NCG: Fix argument promotion in foreign C calls Promote 8 bit and 16 bit signed arguments by sign extension. Fixes #25018 - - - - - fab13100 by Bryan Richter at 2024-07-04T11:15:29-04:00 Add .gitlab/README.md with creds instructions - - - - - 564981bd by Matthew Pickering at 2024-07-05T07:35:29-04:00 configure: Set LD_STAGE0 appropiately when 9.10.1 is used as a boot compiler In 9.10.1 the "ld command" has been removed, so we fall back to using the more precise "merge objects command" when it's available as LD_STAGE0 is only used to set the object merging command in hadrian. Fixes #24949 - - - - - a949c792 by Matthew Pickering at 2024-07-05T07:35:29-04:00 hadrian: Don't build ghci object files for ./hadrian/ghci target There is some convoluted logic which determines whether we build ghci object files are not. In any case, if you set `ghcDynPrograms = pure False` then it forces them to be built. Given we aren't ever building executables with this flavour it's fine to leave `ghcDynPrograms` as the default and it should be a bit faster to build less. Also fixes #24949 - - - - - 48bd8f8e by Matthew Pickering at 2024-07-05T07:36:06-04:00 hadrian: Remove STG dump from ticky_ghc flavour transformer This adds 10-15 minutes to build time, it is a better strategy to precisely enable dumps for the modules which show up prominently in a ticky profile. Given I am one of the only people regularly building ticky compilers I think it's worthwhile to remove these. Fixes #23635 - - - - - 5b1aefb7 by Matthew Pickering at 2024-07-05T07:36:06-04:00 hadrian: Add dump_stg flavour transformer This allows you to write `--flavour=default+ticky_ghc+dump_stg` if you really want STG for all modules. - - - - - ab2b60b6 by Sven Tennie at 2024-07-08T15:03:41-04:00 AArch64: Simplify stmtToInstrs type There's no need to hand `Nothing`s around... (there was no case with a `BlockId`.) - - - - - 71a7fa8c by Sven Tennie at 2024-07-08T15:03:41-04:00 AArch64: Simplify stmtsToInstrs type The `BlockId` parameter (`bid`) is never used, only handed around. Deleting it simplifies the surrounding code. - - - - - 8bf6fd68 by Simon Peyton Jones at 2024-07-08T15:04:17-04:00 Fix eta-expansion in Prep As #25033 showed, we were eta-expanding in a way that broke a join point, which messed up Note [CorePrep invariants]. The fix is rather easy. See Wrinkle (EA1) of Note [Eta expansion of arguments in CorePrep] - - - - - 96acf823 by Sjoerd Visscher at 2024-07-09T06:16:14-04:00 One-shot Haddock - - - - - 74ec4c06 by Sjoerd Visscher at 2024-07-09T06:16:14-04:00 Remove haddock-stdout test option Superseded by output handling of Hadrian - - - - - ed8a8f0b by Rodrigo Mesquita at 2024-07-09T06:16:51-04:00 ghc-boot: Relax Cabal bound Fixes #25013 - - - - - 3f9548fe by Matthew Pickering at 2024-07-09T06:17:36-04:00 ci: Unset ALEX/HAPPY variables when testing bootstrap jobs Ticket #24826 reports a regression in 9.10.1 when building from a source distribution. This patch is an attempt to reproduce the issue on CI by more aggressively removing `alex` and `happy` from the environment. - - - - - aba2c9d4 by Andrea Bedini at 2024-07-09T06:17:36-04:00 hadrian: Ignore build-tool-depends fields in cabal files hadrian does not utilise the build-tool-depends fields in cabal files and their presence can cause issues when building source distribution (see #24826) Ideally Cabal would support building "full" source distributions which would remove the need for workarounds in hadrian but for now we can patch the build-tool-depends out of the cabal files. Fixes #24826 - - - - - 12bb9e7b by Matthew Pickering at 2024-07-09T06:18:12-04:00 testsuite: Don't attempt to link when checking whether a way is supported It is sufficient to check that the simple test file compiles as it will fail if there are not the relevant library files for the requested way. If you break a way so badly that even a simple executable fails to link (as I did for profiled dynamic way), it will just mean the tests for that way are skipped on CI rather than displayed. - - - - - 46ec0a8e by Torsten Schmits at 2024-07-09T13:37:02+02:00 Improve docs for NondecreasingIndentation The text stated that this affects indentation of layouts nested in do expressions, while it actually affects that of do layouts nested in any other. - - - - - dddc9dff by Zubin Duggal at 2024-07-12T11:41:24-04:00 compiler: Fingerprint -fwrite-if-simplified-core We need to recompile if this flag is changed because later modules might depend on the simplified core for this module if -fprefer-bytecode is enabled. Fixes #24656 - - - - - 145a6477 by Matthew Pickering at 2024-07-12T11:42:00-04:00 Add support for building profiled dynamic way The main payload of this change is to hadrian. * Default settings will produced dynamic profiled objects * `-fexternal-interpreter` is turned on in some situations when there is an incompatibility between host GHC and the way attempting to be built. * Very few changes actually needed to GHC There are also necessary changes to the bootstrap plans to work with the vendored Cabal dependency. These changes should ideally be reverted by the next GHC release. In hadrian support is added for building profiled dynamic libraries (nothing too exciting to see there) Updates hadrian to use a vendored Cabal submodule, it is important that we replace this usage with a released version of Cabal library before the 9.12 release. Fixes #21594 ------------------------- Metric Increase: libdir ------------------------- - - - - - 414a6950 by Matthew Pickering at 2024-07-12T11:42:00-04:00 testsuite: Make find_so regex more precise The hash contains lowercase [a-z0-9] and crucially not _p which meant we sometimes matched on `libHS.._p` profiled shared libraries rather than the normal shared library. - - - - - dee035bf by Alex Mason at 2024-07-12T11:42:41-04:00 ncg(aarch64): Add fsqrt instruction, byteSwap primitives [#24956] Implements the FSQRT machop using native assembly rather than a C call. Implements MO_BSwap by producing assembly to do the byte swapping instead of producing a foreign call a C function. In `tar`, the hot loop for `deserialise` got almost 4x faster by avoiding the foreign call which caused spilling live variables to the stack -- this means the loop did 4x more memory read/writing than necessary in that particular case! - - - - - 5104ee61 by Sylvain Henry at 2024-07-12T11:43:23-04:00 Linker: use m32 allocator for sections when NEED_PLT (#24432) Use M32 allocator to avoid fragmentation when allocating ELF sections. We already did this when NEED_PLT was undefined. Failing to do this led to relocations impossible to fulfil (#24432). - - - - - 52d66984 by Sylvain Henry at 2024-07-12T11:43:23-04:00 RTS: allow M32 allocation outside of 4GB range when assuming -fPIC - - - - - c34fef56 by Sylvain Henry at 2024-07-12T11:43:23-04:00 Linker: fix stub offset Remove unjustified +8 offset that leads to memory corruption (cf discussion in #24432). - - - - - 280e4bf5 by Simon Peyton Jones at 2024-07-12T11:43:59-04:00 Make type-equality on synonyms a bit faster This MR make equality fast for (S tys1 `eqType` S tys2), where S is a non-forgetful type synonym. It doesn't affect compile-time allocation much, but then comparison doesn't allocate anyway. But it seems like a Good Thing anyway. See Note [Comparing type synonyms] in GHC.Core.TyCo.Compare and Note [Forgetful type synonyms] in GHC.Core.TyCon Addresses #25009. - - - - - cb83c347 by Alan Zimmerman at 2024-07-12T11:44:35-04:00 EPA: Bring back SrcSpan in EpaDelta When processing files in ghc-exactprint, the usual workflow is to first normalise it with makeDeltaAst, and then operate on it. But we need the original locations to operate on it, in terms of finding things. So restore the original SrcSpan for reference in EpaDelta - - - - - 7bcda869 by Matthew Pickering at 2024-07-12T11:45:11-04:00 Update alpine release job to 3.20 alpine 3.20 was recently released and uses a new python and sphinx toolchain which could be useful to test. - - - - - 43aa99b8 by Matthew Pickering at 2024-07-12T11:45:11-04:00 testsuite: workaround bug in python-3.12 There is some unexplained change to binding behaviour in python-3.12 which requires moving this import from the top-level into the scope of the function. I didn't feel any particular desire to do a deep investigation as to why this changed as the code works when modified like this. No one in the python IRC channel seemed to know what the problem was. - - - - - e3914028 by Adam Sandberg Ericsson at 2024-07-12T11:45:47-04:00 initialise mmap_32bit_base during RTS startup #24847 - - - - - 86b8ecee by Hécate Kleidukos at 2024-07-12T11:46:27-04:00 haddock: Only fetch supported languages and extensions once per Interface list This reduces the number of operations done on each Interface, because supported languages and extensions are determined from architecture and operating system of the build host. This information remains stable across Interfaces, and as such doesn not need to be recovered for each Interface. - - - - - 4f85366f by sheaf at 2024-07-13T05:58:14-04:00 Testsuite: use py-cpuinfo to compute CPU features This replaces the rather hacky logic we had in place for checking CPU features. In particular, this means that feature availability now works properly on Windows. - - - - - 41f1354d by Matthew Pickering at 2024-07-13T05:58:51-04:00 testsuite: Replace $CC with $TEST_CC The TEST_CC variable should be set based on the test compiler, which may be different to the compiler which is set to CC on your system (for example when cross compiling). Fixes #24946 - - - - - 572fbc44 by sheaf at 2024-07-15T08:30:32-04:00 isIrrefutableHsPat: consider COMPLETE pragmas This patch ensures we taken into account COMPLETE pragmas when we compute whether a pattern is irrefutable. In particular, if a pattern synonym is the sole member of a COMPLETE pragma (without a result TyCon), then we consider a pattern match on that pattern synonym to be irrefutable. This affects the desugaring of do blocks, as it ensures we don't use a "fail" operation. Fixes #15681 #16618 #22004 - - - - - 84dadea9 by Zubin Duggal at 2024-07-15T08:31:09-04:00 haddock: Handle non-hs files, so that haddock can generate documentation for modules with foreign imports and template haskell. Fixes #24964 - - - - - 0b4ff9fa by Zubin Duggal at 2024-07-15T12:12:30-04:00 haddock: Keep track of warnings/deprecations from dependent packages in `InstalledInterface` and use this to propagate these on items re-exported from dependent packages. Fixes #25037 - - - - - b8b4b212 by Zubin Duggal at 2024-07-15T12:12:30-04:00 haddock: Keep track of instance source locations in `InstalledInterface` and use this to add source locations on out of package instances Fixes #24929 - - - - - 559a7a7c by Matthew Pickering at 2024-07-15T12:13:05-04:00 ci: Refactor job_groups definition, split up by platform The groups are now split up so it's easier to see which jobs are generated for each platform No change in behaviour, just refactoring. - - - - - 20383006 by Matthew Pickering at 2024-07-16T11:48:25+01:00 ci: Replace debian 10 with debian 12 on validation jobs Since debian 10 is now EOL we migrate onwards to debian 12 as the basis for most platform independent validation jobs. - - - - - 12d3b66c by Matthew Pickering at 2024-07-17T13:22:37-04:00 ghcup-metadata: Fix use of arch argument The arch argument was ignored when making the jobname, which lead to failures when generating metadata for the alpine_3_18-aarch64 bindist. Fixes #25089 - - - - - bace981e by Matthew Pickering at 2024-07-19T10:14:02-04:00 testsuite: Delay querying ghc-pkg to find .so dirs until test is run The tests which relied on find_so would fail when `test` was run before the tree was built. This was because `find_so` was evaluated too eagerly. We can fix this by waiting to query the location of the libraries until after the compiler has built them. - - - - - 478de1ab by Torsten Schmits at 2024-07-19T10:14:37-04:00 Add `complete` pragmas for backwards compat patsyns `ModLocation` and `ModIface` !12347 and !12582 introduced breaking changes to these two constructors and mitigated that with pattern synonyms. - - - - - b57792a8 by Matthew Pickering at 2024-07-19T10:15:13-04:00 ci: Fix ghcup-metadata generation (again) I made some mistakes in 203830065b81fe29003c1640a354f11661ffc604 * Syntax error * The aarch-deb11 bindist doesn't exist I tested against the latest nightly pipeline locally: ``` nix run .gitlab/generate-ci#generate-job-metadata nix shell -f .gitlab/rel_eng/ -c ghcup-metadata --pipeline-id 98286 --version 9.11.20240715 --fragment --date 2024-07-17 --metadata=/tmp/meta ``` - - - - - 1fa35b64 by Andreas Klebinger at 2024-07-19T17:35:20+02:00 Revert "Allow non-absolute values for bootstrap GHC variable" This broke configure in subtle ways resulting in #25076 where hadrian didn't end up the boot compiler it was configured to use. This reverts commit 209d09f52363b261b900cf042934ae1e81e2caa7. - - - - - 55117e13 by Simon Peyton Jones at 2024-07-24T02:41:12-04:00 Fix bad bug in mkSynonymTyCon, re forgetfulness As #25094 showed, the previous tests for forgetfulness was plain wrong, when there was a forgetful synonym in the RHS of a synonym. - - - - - a8362630 by Sergey Vinokurov at 2024-07-24T12:22:45-04:00 Define Eq1, Ord1, Show1 and Read1 instances for basic Generic representation types This way the Generically1 newtype could be used to derive Eq1 and Ord1 for user types with DerivingVia. The CLC proposal is https://github.com/haskell/core-libraries-committee/issues/273. The GHC issue is https://gitlab.haskell.org/ghc/ghc/-/issues/24312. - - - - - de5d9852 by Simon Peyton Jones at 2024-07-24T12:23:22-04:00 Address #25055, by disabling case-of-runRW# in Gentle phase See Note [Case-of-case and full laziness] in GHC.Driver.Config.Core.Opt.Simplify - - - - - 3f89ab92 by Andreas Klebinger at 2024-07-25T14:12:54+02:00 Fix -freg-graphs for FP and AARch64 NCG (#24941). It seems we reserve 8 registers instead of four for global regs based on the layout in Note [AArch64 Register assignments]. I'm not sure it's neccesary, but for now we just accept this state of affairs and simple update -fregs-graph to account for this. - - - - - f6b4c1c9 by Simon Peyton Jones at 2024-07-27T09:45:44-04:00 Fix nasty bug in occurrence analyser As #25096 showed, the occurrence analyser was getting one-shot info flat out wrong. This commit does two things: * It fixes the bug and actually makes the code a bit tidier too. The work is done in the new function GHC.Core.Opt.OccurAnal.mkRhsOccEnv, especially the bit that prepares the `occ_one_shots` for the RHS. See Note [The OccEnv for a right hand side] * When floating out a binding we must be conservative about one-shot info. But we were zapping the entire demand info, whereas we only really need zap the /top level/ cardinality. See Note [Floatifying demand info when floating] in GHC.Core.Opt.SetLevels For some reason there is a 2.2% improvement in compile-time allocation for CoOpt_Read. Otherwise nickels and dimes. Metric Decrease: CoOpt_Read - - - - - 646ee207 by Torsten Schmits at 2024-07-27T09:46:20-04:00 add missing cell in flavours table - - - - - ec2eafdb by Ben Gamari at 2024-07-28T20:51:12+02:00 users-guide: Drop mention of dead __PARALLEL_HASKELL__ macro This has not existed for over a decade. - - - - - e2f2a56e by Arnaud Spiwack at 2024-07-28T22:21:07-04:00 Add tests for 25081 - - - - - 23f50640 by Arnaud Spiwack at 2024-07-28T22:21:07-04:00 Scale multiplicity in list comprehension Fixes #25081 - - - - - d2648289 by romes at 2024-07-30T01:38:12-04:00 TTG HsCmdArrForm: use Fixity via extension point Also migrate Fixity from GHC.Hs to Language.Haskell.Syntax since it no longer uses any GHC-specific data types. Fixed arrow desugaring bug. (This was dead code before.) Remove mkOpFormRn, it is also dead code, only used in the arrow desugaring now removed. Co-authored-by: Fabian Kirchner <kirchner at posteo.de> Co-authored-by: Alan Zimmerman <alan.zimm at gmail.com> - - - - - e258ad54 by Matthew Pickering at 2024-07-30T01:38:48-04:00 ghcup-metadata: More metadata fixes * Incorrect version range on the alpine bindists * Missing underscore in "unknown_versioning" Fixes #25119 - - - - - 72b54c07 by Rodrigo Mesquita at 2024-08-01T00:47:29-04:00 Deriving-via one-shot strict state Monad instances A small refactor to use deriving via GHC.Utils.Monad.State.Strict Monad instances for state Monads with unboxed/strict results which all re-implemented the one-shot trick in the instance and used unboxed tuples: * CmmOptM in GHC.Cmm.GenericOpt * RegM in GHC.CmmToAsm.Reg.Linear.State * UniqSM in GHC.Types.Unique.Supply - - - - - bfe4b3d3 by doyougnu at 2024-08-01T00:48:06-04:00 Rts linker: add case for pc-rel 64 relocation part of the upstream haskell.nix patches - - - - - 5843c7e3 by doyougnu at 2024-08-01T00:48:42-04:00 RTS linker: aarch64: better debug information Dump better debugging information when a symbol address is null. Part of the haskell.nix patches upstream project Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - c2e9c581 by Rodrigo Mesquita at 2024-08-01T00:49:18-04:00 base: Add haddocks to HasExceptionContext Fixes #25091 - - - - - f954f428 by Sylvain Henry at 2024-08-01T00:49:59-04:00 Only lookup ghcversion.h file in the RTS include-dirs by default. The code was introduced in 3549c952b535803270872adaf87262f2df0295a4. It used `getPackageIncludePath` which name doesn't convey that it looks into all include paths of the preload units too. So this behavior is probably unintentional and it should be ok to change it. Fix #25106 - - - - - 951ce3d5 by Matthew Pickering at 2024-08-01T00:50:35-04:00 driver: Fix -Wmissing-home-modules when multiple units have the same module name It was assumed that module names were unique but that isn't true with multiple units. The fix is quite simple, maintain a set of `(ModuleName, UnitId)` and query that to see whether the module has been specified. Fixes #25122 - - - - - bae1fea4 by sheaf at 2024-08-01T00:51:15-04:00 PMC: suggest in-scope COMPLETE sets when possible This commit modifies GHC.HsToCore.Pmc.Solver.generateInhabitingPatterns to prioritise reporting COMPLETE sets in which all of the ConLikes are in scope. This avoids suggesting out of scope constructors when displaying an incomplete pattern match warning, e.g. in baz :: Ordering -> Int baz = \case EQ -> 5 we prefer: Patterns of type 'Ordering' not matched: LT GT over: Patterns of type 'Ordering' not matched: OutOfScope Fixes #25115 - - - - - ff158fcd by Tommy Bidne at 2024-08-02T01:14:32+12:00 Print exception metadata in default handler CLC proposals 231 and 261: - Add exception type metadata to SomeException's displayException. - Add "Exception" header to default exception handler. See: https://github.com/haskell/core-libraries-committee/issues/231 https://github.com/haskell/core-libraries-committee/issues/261 Update stm submodule for test fixes. - - - - - 8b2f70a2 by Andrei Borzenkov at 2024-08-01T23:00:46-04:00 Type syntax in expressions (#24159, #24572, #24226) This patch extends the grammar of expressions with syntax that is typically found only in types: * function types (a -> b), (a ->. b), (a %m -> b) * constrained types (ctx => t) * forall-quantification (forall tvs. t) The new forms are guarded behind the RequiredTypeArguments extension, as specified in GHC Proposal #281. Examples: {-# LANGUAGE RequiredTypeArguments #-} e1 = f (Int -> String) -- function type e2 = f (Int %1 -> String) -- linear function type e3 = f (forall a. Bounded a => a) -- forall type, constraint The GHC AST and the TH AST have been extended as follows: syntax | HsExpr | TH.Exp ---------------+----------+-------------- a -> b | HsFunArr | ConE (->) a %m -> b | HsFunArr | ConE FUN ctx => t | HsQual | ConstrainedE forall a. t | HsForAll | ForallE forall a -> t | HsForAll | ForallVisE Additionally, a new warning flag -Wview-pattern-signatures has been introduced to aid with migration to the new precedence of (e -> p :: t). Co-authored-by: Vladislav Zavialov <vlad.z.4096 at gmail.com> - - - - - 66e7f57d by Brandon Chinn at 2024-08-01T21:50:58-07:00 Implement MultilineStrings (#24390) This commit adds support for multiline strings, proposed at https://github.com/ghc-proposals/ghc-proposals/pull/569. Multiline strings can now be written as: myString = """ this is a multiline string """ The multiline string will have leading indentation stripped away. Full details of this post-processing may be found at the new GHC.Parser.String module. In order to cleanly implement this and maximize reusability, I broke out the lexing logic for strings out of Lexer.x into a new GHC.Parser.String module, which lexes strings with any provided "get next character" function. This also gave us the opportunity to clean up this logic, and even optimize it a bit. With this change, parsing string literals now takes 25% less time and 25% less space. - - - - - cf47b96f by Rodrigo Mesquita at 2024-08-03T05:59:40-04:00 hi: Stable sort avails Sorting the Avails in DocStructures is required to produce fully deterministic interface files in presence of re-exported modules. Fixes #25104 - - - - - af2ae742 by M. Taimoor Zaeem at 2024-08-03T18:52:50+05:00 haddock: decrease margin on top of small headings - - - - - a1e42e7a by Rodrigo Mesquita at 2024-08-05T21:03:04-04:00 hi: Deterministic ImportedMods in Usages The `mi_usages` field of the interface files must use a deterministic list of `Usage`s to guarantee a deterministic interface. However, this list was, in its origins, constructed from a `ModuleEnv` which uses a non-deterministic ordering that was leaking into the interface. Specifically, ImportedMods = ModuleEnv ... would get converted to a list and then passed to `mkUsageInfo` to construct the Usages. The solution is simple. Back `ImportedMods` with a deterministic map. `Map Module ...` is enough, since the Ord instance for `Module` already uses a stable, deterministic, comparison. Fixes #25131 - - - - - eb1cb536 by Serge S. Gulin at 2024-08-06T08:54:55+00:00 testsuite: extend size performance tests with gzip (fixes #25046) The main purpose is to create tests for minimal app (hello world and its variations, i.e. unicode used) distribution size metric. Many platforms support distribution in compressed form via gzip. It would be nice to collect information on how much size is taken by the executional bundle for each platform at minimal edge case. 2 groups of tests are added: 1. We extend javascript backend size tests with gzip-enabled versions for all cases where an optimizing compiler is used (for now it is google closure compiler). 2. We add trivial hello world tests with gzip-enabled versions for all other platforms at CI pipeline where no external optimizing compiler is used. - - - - - d94410f8 by Rodrigo Mesquita at 2024-08-07T11:49:19-04:00 ghc-internal: @since for backtraceDesired Fixes point 1 in #25052 - - - - - bfe600f5 by Rodrigo Mesquita at 2024-08-07T11:49:19-04:00 ghc-internal: No trailing whitespace in exceptions Fixes #25052 - - - - - 62650d9f by Andreas Klebinger at 2024-08-07T11:49:54-04:00 Add since annotation for -fkeep-auto-rules. This partially addresses #25082. - - - - - 5f0e23fd by Andreas Klebinger at 2024-08-07T11:49:54-04:00 Mention `-fkeep-auto-rules` in release notes. It was added earlier but hadn't appeared in any release notes yet. Partially addresses #25082. - - - - - 7446a09a by Sylvain Henry at 2024-08-07T11:50:35-04:00 Cmm: don't perform unsound optimizations on 32-bit compiler hosts - beef61351b240967b49169d27a9a19565cf3c4af enabled the use of MO_Add/MO_Sub for 64-bit operations in the C and LLVM backends - 6755d833af8c21bbad6585144b10e20ac4a0a1ab did the same for the x86 NCG backend However we store some literal values as `Int` in the compiler. As a result, some Cmm optimizations transformed target 64-bit literals into compiler `Int`. If the compiler is 32-bit, this leads to computing with wrong literals (see #24893 and #24700). This patch disables these Cmm optimizations for 32-bit compilers. This is unsatisfying (optimizations shouldn't be compiler-word-size dependent) but it fixes the bug and it makes the patch easy to backport. A proper fix would be much more invasive but it shall be implemented in the future. Co-authored-by: amesgen <amesgen at amesgen.de> - - - - - d59faaf2 by Vladislav Zavialov at 2024-08-07T11:51:11-04:00 docs: Update info on RequiredTypeArguments Add a section on "types in terms" that were implemented in 8b2f70a202 and remove the now outdated suggestion of using `type` for them. - - - - - 39fd6714 by Sylvain Henry at 2024-08-07T11:51:52-04:00 JS: fix minor typo in base's jsbits - - - - - e7764575 by Sylvain Henry at 2024-08-07T11:51:52-04:00 RTS: remove hack to force old cabal to build a library with only JS sources Need to extend JSC externs with Emscripten RTS definitions to avoid JSC_UNDEFINED_VARIABLE errors when linking without the emcc rts. Fix #25138 Some recompilation avoidance tests now fail. This is tracked with the other instances of this failure in #23013. My hunch is that they were working by chance when we used the emcc linker. Metric Decrease: T24602_perf_size - - - - - d1a40233 by Brandon Chinn at 2024-08-07T11:53:08-04:00 Support multiline strings in type literals (#25132) - - - - - 610840eb by Sylvain Henry at 2024-08-07T11:53:50-04:00 JS: fix callback documentation (#24377) Fix #24377 - - - - - 6ae4b76a by Zubin Duggal at 2024-08-13T13:36:57-04:00 haddock: Build haddock-api and haddock-library using hadrian We build these two packages as regular boot library dependencies rather than using the `in-ghc-tree` flag to include the source files into the haddock executable. The `in-ghc-tree` flag is moved into haddock-api to ensure that haddock built from hackage can still find the location of the GHC bindist using `ghc-paths`. Addresses #24834 This causes a metric decrease under non-release flavours because under these flavours libraries are compiled with optimisation but executables are not. Since we move the bulk of the code from the haddock executable to the haddock-api library, we see a metric decrease on the validate flavours. Metric Decrease: haddock.Cabal haddock.base haddock.compiler - - - - - 51ffba5d by Arnaud Spiwack at 2024-08-13T13:37:50-04:00 Add an extension field to HsRecFields This is the Right Thing to Do™. And it prepares for storing a multiplicity coercion there. First step of the plan outlined here and below https://gitlab.haskell.org/ghc/ghc/-/merge_requests/12947#note_573091 - - - - - 4d2faeeb by Arnaud Spiwack at 2024-08-13T13:37:50-04:00 Add test for #24961 - - - - - 623b4337 by Arnaud Spiwack at 2024-08-13T13:37:50-04:00 Ensures that omitted record fields in pattern have multiplicity Many Omitted fields were simply ignored in the type checker and produced incorrect Core code. Fixes #24961 Metric Increase: RecordUpdPerf - - - - - c749bdfd by Sylvain Henry at 2024-08-13T13:38:41-04:00 AARCH64 linker: skip NONE relocations This patch is part of the patches upstreamed from haskell.nix. See https://github.com/input-output-hk/haskell.nix/pull/1960 for the original report/patch. - - - - - 682a6a41 by Brandon Chinn at 2024-08-13T13:39:17-04:00 Support multiline strings in TH - - - - - ee0a9c18 by Matthew Pickering at 2024-08-14T14:27:39-04:00 Extend -reexported-module flag to support module renaming The -reexported-module flag now supports renaming -rexported-modules. ``` -rexported-module "A as B" ``` This feature is only relevant to multi-component sessions. Fixes #25139 - - - - - e9496000 by Arnaud Spiwack at 2024-08-14T14:28:20-04:00 Don't restrict eta-reduction of linear functions This commit simply removes code. All the supporting implementation has been done as part of !12883. Closes #25129 - - - - - 2bb4156e by sheaf at 2024-08-14T14:28:56-04:00 Allow @ character in C labels Generated symbol names can include the '@' character, for example when using `__attribute__((vectorcall))`. - - - - - 7602ca23 by Sylvain Henry at 2024-08-14T14:29:36-04:00 Linker: replace blind tuple with a datatype + docs - - - - - bdd77b9e by sheaf at 2024-08-16T12:47:11-04:00 isIrrefutableHsPat: look up ConLikes in the HscEnv At GhcRn stage, in isIrrefutableHsPat we only looked up data constructors in the RdrEnv, which meant that we lacked fallibility information for out-of-scope constructors (which can arise from Template Haskell splices). Instead, we use 'lookupGREInfo', which looks up the information in the type environment. This was the correct function to call all along, but was not used in 572fbc44 due to import cycle reasons. The appropriate functions, 'irrefutableConLike{Rn,Tc}' have been moved to 'GHC.Rename.Env', which avoids import cycles. Fixes #25164 - - - - - 4bee377c by Sylvain Henry at 2024-08-16T12:47:53-04:00 Linker: some refactoring to prepare for #24886 - Rename LoadedBCOs into LazyBCOs - Bundle SptEntries with CompiledByteCode and removed [SptEntry] field from the BCOs constructor - Rename Linkable's LM constructor into Linkable: in the past we had LM and LP for Module and Package, now we only have the former. - Rename Unlinked into LinkablePart (and linkableUnlinked into linkableParts) - Use NonEmpty to encode invariant in Linkable's linkableParts type - Add helpers: linkableLibs, linkableBCOs, etc. - Add documentation - Remove partial nameOfObject - Rename nameOfObject_maybe into linkablePartPath - Rename byteCodeOfObject into linkablePartAllBCOs. - Refactor linkablePartAllBCOs to avoid a panic if a LazyBCO has a C stub. Document the fact that LazyBCOs are returned in this case (contrary to linkableBCOs which only returns non-lazy ones) Refactoring done while trying to understand how to adapt the linker code to support the JS backend too (cf #24886). - - - - - fa0dbaca by Mario Blažević at 2024-08-17T03:31:32+00:00 Implements the Exportable Named Default proposal (#24305) This squashed commit adds support for exportable named defaults, the accepted GHC proposal at https://github.com/ghc-proposals/ghc-proposals/pull/409 The proposal extends the Haskell '98 declarations default (Int, Double) which were implicitly always applying to Num class alone, to allow specifying an arbitrary single-parameter class: default IsString (Text, String) The effect of this declaration would be to eliminate the ambiguous type errors around string literals when OverloadedStrings extension is active. The declaration by itself has effect only in its module, so the proposal also adds the ability to export class defaults: module MyModule (default IsIstring) Once the language extension is published and established, we can consider using it in base and other libraries. See Note [Named default declarations] in GHC.Tc.Gen.Default for implementation details. - - - - - 1deba6b2 by Simon Peyton Jones at 2024-08-17T13:58:13-04:00 Make kick-out more selective This MR revised the crucial kick-out criteria in the constraint solver. Ticket #24984 showed an example in which * We were kicking out unnecessarily * That gave rise to extra work, of course * But it /also/ led to exponentially-sized coercions due to lack of sharing in coercions (something we want to fix separately #20264) This MR sharpens up the kick-out criteria; specifially in (KK2) we look only under type family applications if (fs>=fw). This forced me to understand the existing kick-out story, and I ended up rewriting many of the careful Notes in GHC.Tc.Solver.InertSet. Especially look at the new `Note [The KickOut Criteria]` The proof of termination is not air-tight, but it is better than before, and both Richard and I think it's correct :-). - - - - - 88488847 by Cheng Shao at 2024-08-18T04:44:01+02:00 testsuite: remove undesired -fasm flag from test ways This patch removes the -fasm flag from test ways, except ways like optasm that explicitly state they are meant to be compiled with NCG backend. Most test ways should use the default codegen backend, and the precense of -fasm can cause stderr mismatches like this when GHC is configured with the unregisterised backend: ``` --- /dev/null +++ /tmp/ghctest-3hydwldj/test spaces/testsuite/tests/profiling/should_compile/prof-late-cc.run/prof-late-cc.comp.stderr.normalised @@ -0,0 +1,2 @@ +when making flags consistent: warning: [GHC-74335] [-Winconsistent-flags (in -Wdefault)] + Target platform uses unregisterised ABI, so compiling via C *** unexpected failure for prof-late-cc(prof_no_auto) ``` This has been breaking the wasm unreg nightly job since !12595 landed. - - - - - 3a145315 by Cheng Shao at 2024-08-18T13:05:45-04:00 ghci: fix isMinTTY.h casing for Windows targets This commit fixes isMinTTY.h casing in isMinTTY.c that's compiled for Windows targets. While this looks harmless given Windows filesystems are case-insensitive by default, it does cause a compilation warning with recent versions of clang, so we might as well fix the casing: ``` driver\ghci\isMinTTY.c:10:10: error: warning: non-portable path to file '"isMinTTY.h"'; specified path differs in case from file name on disk [-Wnonportable-include-path] | 10 | #include "isMINTTY.h" | ^ #include "isMINTTY.h" ^~~~~~~~~~~~ "isMinTTY.h" 1 warning generated. ``` - - - - - 5f972bfb by Zubin Duggal at 2024-08-21T03:18:15-04:00 compiler: Fix pretty printing of ticked prefix constructors (#24237) - - - - - ef0a08e7 by Mike Pilgrem at 2024-08-21T03:18:57-04:00 Fix #15773 Clarify further -rtsopts 'defaults' in docs - - - - - 05a4be58 by Sebastian Graf at 2024-08-21T03:19:33-04:00 Improve efficiency of `assertError` (#24625) ... by moving `lazy` to the exception-throwing branch. It's all documented in `Note [Strictness of assertError]`. - - - - - c29b2b5a by sheaf at 2024-08-21T13:11:30-04:00 GHCi debugger: drop record name spaces for Ids When binding new local variables at a breakpoint, we should create Ids with variable namespace, and not record field namespace. Otherwise the rest of the compiler falls over because the IdDetails are wrong. Fixes #25109 - - - - - bd82ac9f by Hécate Kleidukos at 2024-08-21T13:12:12-04:00 base: Final deprecation of GHC.Pack The timeline mandated by #21461 has come to its term and after two years and four minor releases, we are finally removing GHC.Pack from base. Closes #21536 - - - - - 5092dbff by Sylvain Henry at 2024-08-21T13:12:54-04:00 JS: support rubbish static literals (#25177) Support for rubbish dynamic literals was added in #24664. This patch does the same for static literals. Fix #25177 - - - - - b5a2c061 by Phil de Joux at 2024-08-21T13:13:33-04:00 haddock docs: prefix comes before, postfix comes after - - - - - 6fde3685 by Marcin Szamotulski at 2024-08-21T23:15:39-04:00 haddock: include package info with --show-interface - - - - - 7e02111b by Andreas Klebinger at 2024-08-21T23:16:15-04:00 Document the (x86) SIMD macros. Fixes #25021. - - - - - 05116c83 by Rodrigo Mesquita at 2024-08-22T10:37:44-04:00 ghc-internal: Derive version from ghc's version Fixes #25005 - - - - - 73f5897d by Ben Gamari at 2024-08-22T10:37:44-04:00 base: Deprecate GHC.Desugar See https://github.com/haskell/core-libraries-committee/issues/216. This will be removed in GHC 9.14. - - - - - 821d0a9a by Cheng Shao at 2024-08-22T10:38:22-04:00 compiler: Store ForeignStubs and foreign C files in interfaces This data is used alongside Core bindings to reconstruct intermediate build products when linking Template Haskell splices with bytecode. Since foreign stubs and files are generated in the pipeline, they were lost with only Core bindings stored in interfaces. The interface codec type `IfaceForeign` contains a simplified representation of `ForeignStubs` and the set of foreign sources that were manually added by the user. When the backend phase writes an interface, `mkFullIface` calls `encodeIfaceForeign` to read foreign source file contents and assemble `IfaceForeign`. After the recompilation status check of an upstream module, `initWholeCoreBindings` calls `decodeIfaceForeign` to restore `ForeignStubs` and write the contents of foreign sources to the file system as temporary files. The restored foreign inputs are then processed by `hscInteractive` in the same manner as in a regular pipeline. When linking the stub objects for splices, they are excluded from suffix adjustment for the interpreter way through a new flag in `Unlinked`. For details about these processes, please consult Note [Foreign stubs and TH bytecode linking]. Metric Decrease: T13701 - - - - - f0408eeb by Cheng Shao at 2024-08-23T10:37:10-04:00 git: remove a.out and include it in .gitignore a.out is a configure script byproduct. It was mistakenly checked into the tree in !13118. This patch removes it, and include it in .gitignore to prevent a similar error in the future. - - - - - 1f95c5e4 by Matthew Pickering at 2024-08-23T10:37:46-04:00 docs: Fix code-block syntax on old sphinx version This code-block directive breaks the deb9 sphinx build. Fixes #25201 - - - - - 27dceb42 by Sylvain Henry at 2024-08-26T11:05:11-04:00 JS: add basic support for POSIX *at functions (#25190) openat/fstatat/unlinkat/dup are now used in the recent release of the `directory` and `file-io` packages. As such, these functions are (indirectly) used in the following tests one we'll bump the `directory` submodule (see !13122): - openFile008 - jsOptimizer - T20509 - bkpcabal02 - bkpcabal03 - bkpcabal04 - - - - - c68be356 by Matthew Pickering at 2024-08-26T11:05:11-04:00 Update directory submodule to latest master The primary reason for this bump is to fix the warning from `ghc-pkg check`: ``` Warning: include-dirs: /data/home/ubuntu/.ghcup/ghc/9.6.2/lib/ghc-9.6.2/lib/../lib/aarch64-linux-ghc-9.6.2/directory-1.3.8.1/include doesn't exist or isn't a directory ``` This also requires adding the `file-io` package as a boot library (which is discussed in #25145) Fixes #23594 #25145 - - - - - 4ee094d4 by Matthew Pickering at 2024-08-26T11:05:47-04:00 Fix aarch64-alpine target platform description We are producing bindists where the target triple is aarch64-alpine-linux when it should be aarch64-unknown-linux This is because the bootstrapped compiler originally set the target triple to `aarch64-alpine-linux` which is when propagated forwards by setting `bootstrap_target` from the bootstrap compiler target. In order to break this chain we explicitly specify build/host/target for aarch64-alpine. This requires a new configure flag `--enable-ignore-` which just switches off a validation check that the target platform of the bootstrap compiler is the same as the build platform. It is the same, but the name is just wrong. These commits can be removed when the bootstrap compiler has the correct target triple (I looked into patching this on ci-images, but it looked hard to do correctly as the build/host platform is not in the settings file). Fixes #25200 - - - - - e0e0f2b2 by Matthew Pickering at 2024-08-26T11:05:47-04:00 Bump nixpkgs commit for gen_ci script - - - - - 63a27091 by doyougnu at 2024-08-26T20:39:30-04:00 rts: win32: emit additional debugging information -- migration from haskell.nix - - - - - aaab3d10 by Vladislav Zavialov at 2024-08-26T20:40:06-04:00 Only export defaults when NamedDefaults are enabled (#25206) This is a reinterpretation of GHC Proposal #409 that avoids a breaking change introduced in fa0dbaca6c "Implements the Exportable Named Default proposal" Consider a module M that has no explicit export list: module M where default (Rational) Should it export the default (Rational)? The proposal says "yes", and there's a test case for that: default/DefaultImport04.hs However, as it turns out, this change in behavior breaks existing programs, e.g. the colour-2.3.6 package can no longer be compiled, as reported in #25206. In this patch, we make implicit exports of defaults conditional on the NamedDefaults extension. This fix is unintrusive and compliant with the existing proposal text (i.e. it does not require a proposal amendment). Should the proposal be amended, we can go for a simpler solution, such as requiring all defaults to be exported explicitly. Test case: testsuite/tests/default/T25206.hs - - - - - 3a5bebf8 by Matthew Pickering at 2024-08-28T14:16:42-04:00 simplifier: Fix space leak during demand analysis The lazy structure (a list) in a strict field in `DmdType` is not fully forced which leads to a very large thunk build-up. It seems there is likely still more work to be done here as it seems we may be trading space usage for work done. For now, this is the right choice as rather than using all the memory on my computer, compilation just takes a little bit longer. See #25196 - - - - - c2525e9e by Ryan Scott at 2024-08-28T14:17:17-04:00 Add missing parenthesizeHsType in cvtp's InvisP case We need to ensure that when we convert an `InvisP` (invisible type pattern) to a `Pat`, we parenthesize it (at precedence `appPrec`) so that patterns such as `@(a :: k)` will parse correctly when roundtripped back through the parser. Fixes #25209. - - - - - 1499764f by Sjoerd Visscher at 2024-08-29T16:52:56+02:00 Haddock: Add no-compilation flag This flag makes sure to avoid recompilation of the code when generating documentation by only reading the .hi and .hie files, and throw an error if it can't find them. - - - - - 768fe644 by Andreas Klebinger at 2024-09-03T13:15:20-04:00 Add functions to check for weakly pinned arrays. This commit adds `isByteArrayWeaklyPinned#` and `isMutableByteArrayWeaklyPinned#` primops. These check if a bytearray is *weakly* pinned. Which means it can still be explicitly moved by the user via compaction but won't be moved by the RTS. This moves us one more stop closer to nailing down #22255. - - - - - b16605e7 by Arsen Arsenović at 2024-09-03T13:16:05-04:00 ghc-toolchain: Don't leave stranded a.outs when testing for -g0 This happened because, when ghc-toolchain tests for -g0, it does so by compiling an empty program. This compilation creates an a.out. Since we create a temporary directory, lets place the test program compilation in it also, so that it gets cleaned up. Fixes: 25b0b40467d0a12601497117c0ad14e1fcab0b74 Closes: https://gitlab.haskell.org/ghc/ghc/-/issues/25203 - - - - - 83e70b14 by Torsten Schmits at 2024-09-03T13:16:41-04:00 Build foreign objects for TH with interpreter's way when loading from iface Fixes #25211 When linking bytecode for TH from interface core bindings with `-fprefer-byte-code`, foreign sources are loaded from the interface as well and compiled to object code in an ad-hoc manner. The results are then loaded by the interpreter, whose way may differ from the current build's target way. This patch ensures that foreign objects are compiled with the interpreter's way. - - - - - 0d3bc2fa by Cheng Shao at 2024-09-04T07:20:06-04:00 rts: fix checkClosure error message This patch fixes an error message in checkClosure() when the closure has already been evacuated. The previous logic was meant to print the evacuated closure's type in the error message, but it was completely wrong, given info was not really an info table, but a tagged pointer that points to the closure's new address. - - - - - fb0a4e5c by Sven Tennie at 2024-09-04T07:20:43-04:00 MO_AcquireFence: Less restrictive barrier GCC and CLang translate the built-in `atomic_thread_fence(memory_order_acquire)` to `dmb ishld`, which is a bit less restrictive than `dmb ish` (which also implies stores.) - - - - - a45f1488 by Fendor at 2024-09-04T20:22:00-04:00 testsuite: Add support to capture performance metrics via 'perf' Performance metrics collected via 'perf' can be more accurate for run-time performance than GHC's rts, due to the usage of hardware counters. We allow performance tests to also record PMU events according to 'perf list'. - - - - - ce61fca5 by Fendor at 2024-09-04T20:22:00-04:00 gitlab-ci: Add nightly job for running the testsuite with perf profiling support - - - - - 6dfb9471 by Fendor at 2024-09-04T20:22:00-04:00 Enable perf profiling for compiler performance tests - - - - - da306610 by sheaf at 2024-09-04T20:22:41-04:00 RecordCon lookup: don't allow a TyCon This commit adds extra logic when looking up a record constructor. If GHC.Rename.Env.lookupOccRnConstr returns a TyCon (as it may, due to the logic explained in Note [Pattern to type (P2T) conversion]), we emit an error saying that the data constructor is not in scope. This avoids the compiler falling over shortly thereafter, in the call to 'lookupConstructorInfo' inside 'GHC.Rename.Env.lookupRecFieldOcc', because the record constructor would not have been a ConLike. Fixes #25056 - - - - - 9c354beb by Matthew Pickering at 2024-09-04T20:23:16-04:00 Use deterministic names for temporary files When there are multiple threads they can race to create a temporary file, in some situations the thread will create ghc_1.c and in some it will create ghc_2.c. This filename ends up in the debug info for object files after compiling a C file, therefore contributes to object nondeterminism. In order to fix this we store a prefix in `TmpFs` which serves to namespace temporary files. The prefix is populated from the counter in TmpFs when the TmpFs is forked. Therefore the TmpFs must be forked outside the thread which consumes it, in a deterministic order, so each thread always receives a TmpFs with the same prefix. This assumes that after the initial TmpFs is created, all other TmpFs are created from forking the original TmpFs. Which should have been try anyway as otherwise there would be file collisions and non-determinism. Fixes #25224 - - - - - 59906975 by Hécate Kleidukos at 2024-09-05T10:57:15-04:00 Silence x-partial in Haddock.Backends.Xhtml This is an unfortunate consequence of two mechanisms: * GHC provides (possibly-empty) lists of names * The functions that retrieve those names are not equipped to do error reporting, and thus accept these lists at face value. They will have to be attached an effect for error reporting in a later refactoring - - - - - 8afbab62 by Hécate Kleidukos at 2024-09-05T10:57:15-04:00 hadrian: Support loading haddock in ghci There is one tricky aspect with wired-in packages where the boot package is built with `-this-unit-id ghc` but the dependency is reported as `-package-id ghc-9.6...`. This has never been fixed in GHC as the situation of loading wired-in packages into the multi-repl seems like quite a niche feature that is always just easier to workaround. - - - - - 6cac9eb8 by Matthew Pickering at 2024-09-05T10:57:15-04:00 hadrian/multi: Load all targets when ./hadrian/ghci-multi is called This seems to make a bit more sense than just loading `ghc` component (and dependencies). - - - - - 7d84df86 by Matthew Pickering at 2024-09-05T10:57:51-04:00 ci: Beef up determinism interface test There have recently been some determinism issues with the simplifier and documentation. We enable more things to test in the ABI test to check that we produce interface files deterministically. - - - - - 5456e02e by Sylvain Henry at 2024-09-06T11:57:01+02:00 Transform some StgRhsClosure into StgRhsCon after unarisation (#25166) Before unarisation we may have code like: Test.foo :: Test.D [GblId, Unf=OtherCon []] = \u [] case (# |_| #) [GHC.Types.(##)] of sat_sAw [Occ=Once1] { __DEFAULT -> Test.D [GHC.Types.True sat_sAw]; }; After unarisation we get: Test.foo :: Test.D [GblId, Unf=OtherCon []] = {} \u [] Test.D [GHC.Types.True 2#]; Notice that it's still an Updatable closure for no reason anymore. This patch transforms appropriate StgRhsClosures into StgRhsCons after unarisation, allowing these closures to be statically allocated. Now we get the expected: Test.foo :: Test.D [GblId, Unf=OtherCon []] = Test.D! [GHC.Types.True 2#]; Fix #25166 To avoid duplicating code, this patch refactors the mk(Top)StgRhs functions and put them in a GHC.Stg.Make module alongside the new mk(Top)StgRhsCon_maybe functions. - - - - - 958b4518 by Hécate Kleidukos at 2024-09-06T16:40:56-04:00 haddock: Add missing requirements.txt for the online manual - - - - - 573f9833 by Sven Tennie at 2024-09-08T09:58:21+00:00 AArch64: Implement takeRegRegMoveInstr This has likely been forgotten. - - - - - 20b0de7d by Hécate Kleidukos at 2024-09-08T14:19:28-04:00 haddock: Configuration fix for ReadTheDocs - - - - - 03055c71 by Sylvain Henry at 2024-09-09T14:58:15-04:00 JS: fake support for native adjustors (#25159) The JS backend doesn't support adjustors (I believe) and in any case if it ever supports them it will be a native support, not one via libffi. - - - - - 5bf0e6bc by Sylvain Henry at 2024-09-09T14:58:56-04:00 JS: remove redundant h$lstat It was introduced a second time by mistake in 27dceb42376c34b99a38e36a33b2abc346ed390f (cf #25190) - - - - - ffbc2ab0 by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Refactor only newSysLocalDs * Change newSysLocalDs to take a scaled type * Add newSysLocalMDs that takes a type and makes a ManyTy local Lots of files touched, nothing deep. - - - - - 7124e4ad by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Don't introduce 'nospec' on the LHS of a RULE This patch address #25160. The main payload is: * When desugaring the LHS of a RULE, do not introduce the `nospec` call for non-canonical evidence. See GHC.Core.InstEnv Note [Coherence and specialisation: overview] The `nospec` call usually introdued in `dsHsWrapper`, but we don't want it on the LHS of a RULE (that's what caused #25160). So now `dsHsWrapper` takes a flag to say if it's on the LHS of a RULE. See wrinkle (NC1) in `Note [Desugaring non-canonical evidence]` in GHC.HsToCore.Binds. But I think this flag will go away again when I have finished with my (entirely separate) speciaise-on-values patch (#24359). All this meant I had to re-understand the `nospec` stuff and coherence, and that in turn made me do some refactoring, and add a lot of new documentation The big change is that in GHC.Core.InstEnv, I changed the /type synonym/ `Canonical` into a /data type/ `CanonicalEvidence` and documented it a lot better. That in turn made me realise that CalLStacks were being treated with a bit of a hack, which I documented in `Note [CallStack and ExecptionContext hack]`. - - - - - 663daf8d by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Add defaulting of equalities This MR adds one new defaulting strategy to the top-level defaulting story: see Note [Defaulting equalities] in GHC.Tc.Solver. This resolves #25029 and #25125, which showed that users were accidentally relying on a GHC bug, which was fixed by commit 04f5bb85c8109843b9ac2af2a3e26544d05e02f4 Author: Simon Peyton Jones <simon.peytonjones at gmail.com> Date: Wed Jun 12 17:44:59 2024 +0100 Fix untouchability test This MR fixes #24938. The underlying problem was tha the test for "does this implication bring in scope any equalities" was plain wrong. This fix gave rise to a number of user complaints; but the improved defaulting story of this MR largely resolves them. On the way I did a bit of refactoring, of course * Completely restructure the extremely messy top-level defaulting code. The new code is in GHC.Tc.Solver.tryDefaulting, and is much, much, much esaier to grok. - - - - - e28cd021 by Andrzej Rybczak at 2024-09-10T00:41:18-04:00 Don't name a binding pattern It's a keyword when PatternSynonyms are set. - - - - - b09571e2 by Simon Peyton Jones at 2024-09-10T00:41:54-04:00 Do not use an error thunk for an absent dictionary In worker/wrapper we were using an error thunk for an absent dictionary, but that works very badly for -XDictsStrict, or even (as #24934 showed) in some complicated cases involving strictness analysis and unfoldings. This MR just uses RubbishLit for dictionaries. Simple. No test case, sadly because our only repro case is rather complicated. - - - - - 8bc9f5f6 by Hécate Kleidukos at 2024-09-10T00:42:34-04:00 haddock: Remove support for applehelp format in the Manual - - - - - 9ca15506 by doyougnu at 2024-09-10T10:46:38-04:00 RTS linker: add support for hidden symbols (#25191) Add linker support for hidden symbols. We basically treat them as weak symbols. Patch upstreamed from haskell.nix Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 3b2dc826 by Sven Tennie at 2024-09-10T10:47:14-04:00 Fix C warnings (#25237) GCC 14 treats the fixed warnings as errors by default. I.e. we're gaining GCC 14 compatibility with these fixes. - - - - - 05715994 by Sylvain Henry at 2024-09-10T10:47:55-04:00 JS: fix codegen of static string data Before this patch, when string literals are made trivial, we would generate `h$("foo")` instead of `h$str("foo")`. This was introduced by mistake in 6bd850e887b82c5a28bdacf5870d3dc2fc0f5091. - - - - - 949ebced by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Re-organise cross-OS compatibility layer - - - - - 84ac9a99 by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Remove CPP for obsolete GHC and Cabal versions - - - - - 370d1599 by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Move the changelog file to the 'extra-doc-files' section in the cabal file - - - - - cfbff65a by Simon Peyton Jones at 2024-09-10T19:20:16-04:00 Add ZonkAny and document it This MR fixed #24817 by adding ZonkAny, which takes a Nat argument. See Note [Any types] in GHC.Builtin.Types, especially wrinkle (Any4). - - - - - 0167e472 by Matthew Pickering at 2024-09-11T02:41:42-04:00 hadrian: Make sure ffi headers are built before using a compiler When we are using ffi adjustors then we rely on `ffi.h` and `ffitarget.h` files during code generation when compiling stubs. Therefore we need to add this dependency to the build system (which this patch does). Reproducer, configure with `--enable-libffi-adjustors` and then build "_build/stage1/libraries/ghc-prim/build/GHC/Types.p_o". Observe that this fails before this patch and works afterwards. Fixes #24864 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 0f696958 by Rodrigo Mesquita at 2024-09-11T02:42:18-04:00 base: Deprecate BCO primops exports from GHC.Exts See https://github.com/haskell/core-libraries-committee/issues/212. These reexports will be removed in GHC 9.14. - - - - - cf0e7729 by Alan Zimmerman at 2024-09-11T02:42:54-04:00 EPA: Remove Anchor = EpaLocation synonym This just causes confusion. - - - - - 8e462f4d by Andrew Lelechenko at 2024-09-11T22:20:37-04:00 Bump submodule deepseq to 1.5.1.0 - - - - - aa4500ae by Sebastian Graf at 2024-09-11T22:21:13-04:00 User's guide: Fix the "no-backtracking" example of -XOrPatterns (#25250) Fixes #25250. - - - - - 1c479c01 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add Native Code Generator (NCG) This architecture wasn't supported before. Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 51b678e1 by Sven Tennie at 2024-09-12T10:39:38+00:00 Adjust test timings for slower computers Increase the delays a bit to be able to run these tests on slower computers. The reference was a Lichee Pi 4a RISCV64 machine. - - - - - a0e41741 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add RTS linker This architecture wasn't supported before. Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - d365b1d4 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Ignore divbyzero test The architecture's behaviour differs from the test's expectations. See comment in code why this is okay. - - - - - abf3d699 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Enable MulMayOflo_full test It works and thus can be tested. - - - - - 38c7ea8c by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: LibffiAdjustor: Ensure code caches are flushed RISCV64 needs a specific code flushing sequence (involving fence.i) when new code is created/loaded. - - - - - 7edc6965 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add additional linker symbols for builtins We're relying on some GCC/Clang builtins. These need to be visible to the linker (and not be stripped away.) - - - - - 92ad3d42 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add GHCi support As we got a RTS linker for this architecture now, we can enable GHCi for it. - - - - - a145f701 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Set codeowners of the NCG - - - - - 8e6d58cf by Sven Tennie at 2024-09-12T10:39:38+00:00 Add test for C calling convention Ensure that parameters and return values are correctly processed. A dedicated test (like this) helps to get the subtleties of calling conventions easily right. The test is failing for WASM32 and marked as fragile to not forget to investigate this (#25249). - - - - - fff55592 by Torsten Schmits at 2024-09-12T21:50:34-04:00 finder: Add `IsBootInterface` to finder cache keys - - - - - cdf530df by Alan Zimmerman at 2024-09-12T21:51:10-04:00 EPA: Sync ghc-exactprint to GHC - - - - - 1374349b by Sebastian Graf at 2024-09-13T07:52:11-04:00 DmdAnal: Fast path for `multDmdType` (#25196) This is in order to counter a regression exposed by SpecConstr. Fixes #25196. - - - - - 80769bc9 by Andrew Lelechenko at 2024-09-13T07:52:47-04:00 Bump submodule array to 0.5.8.0 - - - - - 49ac3fb8 by Sylvain Henry at 2024-09-16T10:33:01-04:00 Linker: add support for extra built-in symbols (#25155) See added Note [Extra RTS symbols] and new user guide entry. Co-authored-by: Hamish Mackenzie <Hamish.K.Mackenzie at gmail.com> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 3939a8bf by Samuel Thibault at 2024-09-16T10:33:44-04:00 GNU/Hurd: Add getExecutablePath support GNU/Hurd exposes it as /proc/self/exe just like on Linux. - - - - - d3b19851 by Sylvain Henry at 2024-09-17T11:03:28-04:00 RTS: expose closure_sizeW_ (#25252) C code using the closure_sizeW macro can't be linked with the RTS linker without this patch. It fails with: ghc-9.11.20240911: Failed to lookup symbol: closure_sizeW_ Fix #25252 Co-authored-by: Hamish Mackenzie <Hamish.K.Mackenzie at gmail.com> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 137bf74d by Sebastian Graf at 2024-09-17T11:04:05-04:00 HsExpr: Inline `HsWrap` into `WrapExpr` This nice refactoring was suggested by Simon during review: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13261#note_583374 Fixes #25264. - - - - - 7fd9e5e2 by Sebastian Graf at 2024-09-17T11:04:05-04:00 Pmc: Improve Desugaring of overloaded list patterns (#25257) This actually makes things simpler. Fixes #25257. - - - - - e4169ba9 by Ben Gamari at 2024-09-18T07:55:28-04:00 configure: Correctly report when subsections-via-symbols is disabled As noted in #24962, currently subsections-via-symbols is disabled on AArch64/Darwin due to alleged breakage. However, `configure` reports to the user that it is enabled. Fix this. - - - - - 9d20a787 by Mario Blažević at 2024-09-18T07:56:08-04:00 Modified the default export implementation to match the amended spec - - - - - 35eb4f42 by Sylvain Henry at 2024-09-18T07:57:00-04:00 FFI: don't ppr Id/Var symbols with debug info (#25255) Even if `-dpp-debug` is enabled we should still generate valid C code. So we disable debug info printing when rendering with Code style. - - - - - 9e96dad8 by Sebastian Graf at 2024-09-21T17:47:59-04:00 Demand: Combine examples into Note (#25107) Just a leftover from !13060. Fixes #25107. - - - - - 21aaa34b by sheaf at 2024-09-21T17:48:36-04:00 Use x86_64-unknown-windows-gnu target for LLVM on Windows - - - - - 992a7624 by sheaf at 2024-09-21T17:48:36-04:00 LLVM: use -relocation-model=pic on Windows This is necessary to avoid the segfaults reported in #22487. Fixes #22487 - - - - - c50d29be by Ryan Hendrickson at 2024-09-21T17:49:15-04:00 compiler: Use type abstractions when deriving For deriving newtype and deriving via, in order to bring type variables needed for the coercions into scope, GHC generates type signatures for derived class methods. As a simplification, drop the type signatures and instead use type abstractions to bring method type variables into scope. - - - - - f04fd0ae by Zubin Duggal at 2024-09-21T17:49:51-04:00 driver: Ensure we run driverPlugin for staticPlugins (#25217) driverPlugins are only run when the plugin state changes. This meant they were never run for static plugins, as their state never changes. We need to keep track of whether a static plugin has been initialised to ensure we run static driver plugins at least once. This necessitates an additional field in the `StaticPlugin` constructor as this state has to be bundled with the plugin itself, as static plugins have no name/identifier we can use to otherwise reference them - - - - - 620becd7 by Andreas Klebinger at 2024-09-21T17:50:27-04:00 Allow unknown fd device types for setNonBlockingMode. This allows fds with a unknown device type to have blocking mode set. This happens for example for fds from the inotify subsystem. Fixes #25199. - - - - - c76e25b3 by Hécate Kleidukos at 2024-09-21T17:51:07-04:00 Use Hackage version of Cabal 3.14.0.0 for Hadrian. We remove the vendored Cabal submodule. Also update the bootstrap plans Fixes #25086 - - - - - 6c83fd7f by Zubin Duggal at 2024-09-21T17:51:07-04:00 ci: Ensure we source ci.sh in any jobs that run commands outside of ci.sh ci.sh sets up the toolchain environment, including paths for the cabal directory, the toolchain binaries etc. If we run any commands outside of ci.sh, unless we source ci.sh we will use the wrong values for these environment variables. In particular, I ran into an issue where the cabal invocation `hadrian/ghci` was using an old index state despite `ci.sh setup` updating and setting the correct index state. This is because `ci.sh` sets the `CABAL_DIR` to a different place, which is where the index was downloaded to, but we were using the default cabal directory outside ci.sh The solution is to source the correct environment `ci.sh` using `. ci.sh setup` - - - - - 9586998d by Sven Tennie at 2024-09-21T17:51:43-04:00 ghc-toolchain: Set -fuse-ld even for ld.bfd This reflects the behaviour of the autoconf scripts. - - - - - d7016e0d by Sylvain Henry at 2024-09-21T17:52:24-04:00 Parser: be more careful when lexing extended literals (#25258) Previously we would lex invalid prefixes like "8#Int3" as [8#Int, 3]. A side-effect of this patch is that we now allow negative unsigned extended literals. They trigger an overflow warning later anyway. - - - - - ca67d7cb by Zubin Duggal at 2024-09-22T02:34:06-04:00 rts: Ensure we dump new Cost Centres added by freshly loaded objects to the eventlog. To do this, we keep track of the ID of the last cost centre we dumped in DUMPED_CC_ID, and call dumpCostCentresToEventLog from refreshProfilingCCSs, which will dump all the new cost centres up to the one we already dumped in DUMPED_CC_ID. Fixes #24148 - - - - - c0df5aa9 by Alan Zimmerman at 2024-09-22T02:34:42-04:00 EPA: Replace AnnsModule am_main with EpTokens Working towards removing `AddEpAnn` - - - - - 2a551cd5 by Matthew Pickering at 2024-09-24T16:33:50+05:30 ci: Run abi-test on test-abi label - - - - - ab4039ac by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 testsuite: Add a test for object determinism Extends the abi_test with an object determinism check Also includes a standalone test to be run by developers manually when debugging issues with determinism. - - - - - d62c18d8 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Sampling uniques in the CG To achieve object determinism, the passes processing Cmm and the rest of the code generation pipeline musn't create new uniques which are non-deterministic. This commit changes occurrences of non-deterministic unique sampling within these code generation passes by a deterministic unique sampling strategy by propagating and threading through a deterministic incrementing counter in them. The threading is done implicitly with `UniqDSM` and `UniqDSMT`. Secondly, the `DUniqSupply` used to run a `UniqDSM` must be threaded through all passes to guarantee uniques in different passes are unique amongst them altogether. Specifically, the same `DUniqSupply` must be threaded through the CG Streaming pipeline, starting with Driver.Main calling `StgToCmm.codeGen`, `cmmPipeline`, `cmmToRawCmm`, and `codeOutput` in sequence. To thread resources through the `Stream` abstraction, we use the `UniqDSMT` transformer on top of `IO` as the Monad underlying the Stream. `UniqDSMT` will thread the `DUniqSupply` through every pass applied to the `Stream`, for every element. We use @type CgStream = Stream (UniqDSMT IO)@ for the Stream used in code generation which that carries through the deterministic unique supply. See Note [Deterministic Uniques in the CG] - - - - - 3bbe4af4 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Cmm unique renaming pass To achieve object determinism, we need to prevent the non-deterministic uniques from leaking into the object code. We can do this by deterministically renaming the non-external uniques in the Cmm groups that are yielded right after StgToCmm. The key to deterministic renaming is observing that the order of declarations, instructions, and data in the Cmm groups are already deterministic (modulo other determinism bugs), regardless of the uniques. We traverse the Cmm AST in this deterministic order and rename the uniques, incrementally, in the order they are found, thus making them deterministic. This renaming is guarded by -fobject-determinism which is disabled by default for now. This is one of the key passes for object determinism. Read about the overview of object determinism and a more detailed explanation of this pass in: * Note [Object determinism] * Note [Renaming uniques deterministically] Significantly closes the gap to #12935 - - - - - 8357ed50 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: DCmmGroup vs CmmGroup Part of our strategy in producing deterministic objects, namely, renaming all Cmm uniques in order, depend on the object code produced having a deterministic order (say, A_closure always comes before B_closure). However, the use of LabelMaps in the Cmm representation invalidated this requirement because the LabelMaps elements would already be in a non-deterministic order (due to the original uniques), and the renaming in sequence wouldn't work because of that non-deterministic order. Therefore, we now start off with lists in CmmGroup (which preserve the original order), and convert them into LabelMaps (for performance in the code generator) after the uniques of the list elements have been renamed. See Note [DCmmGroup vs CmmGroup or: Deterministic Info Tables] and #12935. Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - 0e675fb8 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Don't print unique in pprFullName This unique was leaking as part of the profiling description in info tables when profiling was enabled, despite not providing information relevant to the profile. - - - - - 340f58b0 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: UDFM for distinct-constructor-tables In order to produce deterministic objects when compiling with -distinct-constructor-tables, we also have to update the data constructor map to be backed by a deterministic unique map (UDFM) rather than a non-deterministic one (UniqMap). - - - - - 282f37a0 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: InfoTableMap uniques in generateCgIPEStub Fixes object determinism when using -finfo-table-map Make sure to also deterministically rename the IPE map (as per Note [Renaming uniques deterministically]), and to use a deterministic unique supply when creating new labels for the IPE information to guarantee deterministic objects when IPE information is requested. Note that the Cmm group produced in generateCgIPEStub must /not/ be renamed because renaming uniques is not idempotent, and the references to the previously renamed code in the IPE Cmm group would be renamed twice and become invalid references to non-existent symbols. We do need to det-rename the InfoTableMap that is created in the conversion from Core to Stg. This is not a problem since that map won't refer any already renamed names (since it was created before the renaming). - - - - - 7b37afc9 by Zubin Duggal at 2024-09-24T16:33:50+05:30 ci: Allow abi-test to fail. We are not fully deterministic yet, see #12935 for work that remains to be done. - - - - - a63ee33a by Simon Peyton Jones at 2024-09-25T17:08:24-04:00 Add Given injectivity for built-in type families Ticket #24845 asks (reasonably enough) that if we have [G] a+b ~ 0 then we also know [G] a ~ 0, b ~ 0 and similar injectivity-like facts for other built-in type families. The status quo was that we never generate evidence for injectivity among Givens -- but it is quite reasonnable to do so. All we need is to have /evidence/ for the new constraints This MR implements that goal. I also took the opportunity to * Address #24978: refactoring UnivCo * Fix #25248, which was a consequences of the previous formulation of UnivCo As a result this MR touches a lot of code. The big things are: * Coercion constructor UnivCo now takes a [Coercion] as argument to express the coercions on which the UnivCo depends. A nice consequence is that UnivCoProvenance now has no free variables, simpler in a number of places. * Coercion constructors AxiomInstCo and AxiomRuleCo are combined into AxiomCo. The new AxiomCo, carries a (slightly oddly named) CoAxiomRule, which itself is a sum type of the various forms of built-in axiom. See Note [CoAxiomRule] in GHC.Core.Coercion.Axiom A merit of this is that we can separate the case of open and closed type families, and eliminate the redundant `BranchIndex` in the former case. * Much better representation for data BuiltInSynFamily, which means we no longer need to enumerate built-in axioms as well as built-in tycons. * There is a massive refactor in GHC.Builtin.Types.Literals, which contains all the built-in axioms for type-level operations (arithmetic, append, cons etc). A big change is that instead of redundantly having (a) a hand-written matcher, and (b) a template-based "proves" function, which were hard to keep in sync, the two are derive from one set of human-supplied info. See GHC.Builtin.Types.Literals.mkRewriteAxiom, and friends. * Significant changes in GHC.Tc.Solver.Equality to account for the new opportunity for Given/Given equalities. Smaller things * Improve pretty-printing to avoid parens around atomic coercions. * Do proper eqType in findMatchingIrreds, not `eqTypeNoKindCheck`. Looks like a bug, Richard agrees. * coercionLKind and coercionRKind are hot functions. I refactored the implementation (which I had to change anyway) to increase sharing. See Note [coercionKind performance] in GHC.Core.Coercion * I wrote a new Note [Finding orphan names] in GHC.Core.FVs about orphan names * I improved the `is_concrete` flag in GHC.Core.Type.buildSynTyCon, to avoid calling tyConsOfType. I forget exactly why I did this, but it's definitely better now. * I moved some code from GHC.Tc.Types.Constraint into GHC.Tc.Types.CtLocEnv and I renamed the module GHC.Tc.Types.CtLocEnv to GHC.Tc.Types.CtLoc - - - - - dd8ef342 by Ryan Scott at 2024-09-25T17:09:01-04:00 Resolve ambiguous method-bound type variables in vanilla defaults and GND When defining an instance of a class with a "vanilla" default, such as in the following example (from #14266): ```hs class A t where f :: forall x m. Monoid x => t m -> m f = <blah> instance A [] ``` We have to reckon with the fact that the type of `x` (bound by the type signature for the `f` method) is ambiguous. If we don't deal with the ambiguity somehow, then when we generate the following code: ```hs instance A [] where f = $dmf @[] -- NB: the type of `x` is still ambiguous ``` Then the generated code will not typecheck. (Issue #25148 is a more recent example of the same problem.) To fix this, we bind the type variables from the method's original type signature using `TypeAbstractions` and instantiate `$dmf` with them using `TypeApplications`: ```hs instance A [] where f @x @m = $dmf @[] @x @m -- `x` is no longer ambiguous ``` Note that we only do this for vanilla defaults and not for generic defaults (i.e., defaults using `DefaultSignatures`). For the full details, see `Note [Default methods in instances] (Wrinkle: Ambiguous types from vanilla method type signatures)`. The same problem arose in the code generated by `GeneralizedNewtypeDeriving`, as we also fix it here using the same technique. This time, we can take advantage of the fact that `GeneralizedNewtypeDeriving`-generated code _already_ brings method-bound type variables into scope via `TypeAbstractions` (after !13190), so it is very straightforward to visibly apply the type variables on the right-hand sides of equations. See `Note [GND and ambiguity]`. Fixes #14266. Fixes #25148. - - - - - 0a4da5d2 by ARATA Mizuki at 2024-09-25T17:09:41-04:00 Document primitive string literals and desugaring of string literals Fixes #17474 and #17974 Co-authored-by: Matthew Craven <5086-clyring at users.noreply.gitlab.haskell.org> - - - - - ad0731ad by Zubin Duggal at 2024-09-25T17:10:18-04:00 rts: Fix segfault when using non-moving GC with profiling `nonMovingCollect()` swaps out the `static_flag` value used as a sentinel for `gct->scavenged_static_objects`, but the subsequent call `resetStaticObjectForProfiling()` sees the old value of `static_flag` used as the sentinel and segfaults. So we must call `resetStaticObjectForProfiling()` before calling `nonMovingCollect()` as otherwise it looks for the incorrect sentinel value Fixes #25232 and #23958 Also teach the testsuite driver about nonmoving profiling ways and stop disabling metric collection when nonmoving GC is enabled. - - - - - e7a26d7a by Sylvain Henry at 2024-09-25T17:11:00-04:00 Fix interaction between fork and kqueue (#24672) A kqueue file descriptor isn't inherited by a child created with fork. As such we mustn't try to close this file descriptor as we would close a random one, e.g. the one used by timerfd. Fix #24672 - - - - - 6863503c by Simon Peyton Jones at 2024-09-25T17:11:37-04:00 Improve GHC.Tc.Solver.defaultEquality This MR improves GHC.Tc.Solver.defaultEquality to solve #25251. The main change is to use checkTyEqRhs to check the equality, so that we do promotion properly. But within that we needed a small enhancement to LC_Promote. See Note [Defaulting equalites] (DE4) and (DE5) The tricky case is (alas) hard to trigger, so I have not added a regression test. - - - - - 97a6c6c3 by Sylvain Henry at 2024-09-25T17:12:18-04:00 JS: fix h$withCStringOnHeap helper (#25288) strlen returns the length of the string without the \0 terminating byte, hence CString weren't properly allocated on the heap (ending \0 byte was missing). - - - - - 5f7c20bc by Ben Gamari at 2024-09-26T04:14:05-04:00 base: Propagate `error` CallStack to thrown exception Previously `errorCallWithCallStackException` failed to propagate its `CallStack` argument, which represents the call-chain of the preceding `error` call, to the exception that it returned. Consequently, the call-stack of `error` calls were quite useless. Unfortunately, this is the second time that I have fixed this but it seems the first must have been lost in rebasing. Fixes a bug in the implementation of CLC proposal 164 <https://github.com/haskell/core-libraries-committee/issues/164> Fixes #24807. - - - - - c20d5186 by Matthew Pickering at 2024-09-26T04:14:42-04:00 driver: Fix -working-dir for foreign files -working-dir definitely needs more serious testing, there are some easy ways to test this. * Modify Cabal to call ghc using -working-dir rather than changing directory. * Modify the testsuite to run ghc using `-working-dir` rather than running GHC with cwd = temporary directory. However this will have to wait until after 9.12. Fixes #25150 - - - - - 88eaa7ac by Sylvain Henry at 2024-09-26T04:15:24-04:00 Enum deriving: reuse predError, succError, toEnumError Reuse predError, succError, and toEnumError when deriving Enum instances to avoid generating different error strings per instance. E.g. before this patch for every instance for a type FOO we would generate a string: "pred{FOO}: tried to take `pred' of first tag in enumeration"# - - - - - e9fa1163 by Sylvain Henry at 2024-09-26T04:15:24-04:00 Enum deriving: generate better code (#16364) Generate better code for Enum.toEnum: check both the lower and the upper bounds at once with an unsigned comparison. Initially I've used a type ascription with a call to 'fromIntegral', hence the slight refactoring of nlAscribe. Using 'fromIntegral' was problematic (too low in the module hierarchy) so 'enumIntToWord' was introduced instead. Combined with the previous commit, T21839c ghc/alloc decrease by 5% Metric Decrease: T21839c - - - - - 383af074 by Sylvain Henry at 2024-09-26T04:16:06-04:00 Core: add absorb rules for binary or/and (#16351) Rules: x or (x and y) ==> x x and (x or y) ==> x - - - - - 783c8b29 by Matthew Pickering at 2024-09-26T12:07:44-04:00 Don't compile `asBox` with -fprof-late The `asBox` function is intended to store exactly the closure which the user passes to it. Placing a cost centre on asBox introduces a thunk, which violates this expectation and can change the result of using asBox when profiling is enabled. See #25212 for more details and ample opportunity to discuss if this is a bug or not. - - - - - 0967dcc7 by Matthew Pickering at 2024-09-26T12:07:44-04:00 Fix normalisation of .prof files Fix 1: If a cost centre contained CAF then the normalisation was corrupted, now only check if CAF is at the start of a line. Fix 2: "no location info" contain a space, which messed up the next normalisation logic which assumed that columns didn't have spaced in. - - - - - 9eda1cb9 by Matthew Pickering at 2024-09-26T12:07:44-04:00 testsuite: Fix normalisation of prof_files removing newlines These normalisation steps were collapsing lines together, which made subsequent normalisation steps fail. ``` foo x y z CAF x y z qux x y z ``` was getting normalised to ``` foo x y z qux x y z ``` which means that subsequent line based filters would not work correctly. - - - - - 2b25f9e2 by Matthew Pickering at 2024-09-26T12:07:44-04:00 packaging: Enable late-ccs for release flavour This enables late cost centres when building profiled libraries and subsequently greatly improves the resolution of cost centre stacks when profiling. This patch also introduces the `grep_prof` test modifier which is used to apply a further filter to the .prof file before they are compared. Fixes #21732 ------------------------- Metric Increase: libdir ------------------------- - - - - - bb030d0d by Brandon Chinn at 2024-09-26T12:08:21-04:00 Replace manual string lexing (#25158) Metric Increase: MultilineStringsPerf This commit replaces the manual string lexing logic with native Alex lexing syntax. This aligns the lexer much closer to the Haskell Report, making it easier to see how the implementation and spec relate. This slightly increases memory usage when compiling multiline strings because we now have two distinct phases: lexing the multiline string with Alex and post-processing the string afterwards. Before, these were done at the same time, but separating them allows us to push as much logic into normal Alex lexing as possible. Since multiline strings are a new feature, this regression shouldn't be too noticeable. We can optimize this over time. - - - - - 16742987 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Revert !4655: Stop 'import "base" Prelude' removing implicit Prelude import This behaviour is problematic for the principle reason that `import Prelude` may not refer to the `base` package, and in which case importing an entirely unrelated module causing your implicit prelude to leave the scope is extremely surprising. See the added test for this example. Discussion on #17045. The secondary reason for reverting this patch is that "base" can't be a wired in package any more (see #24903), so we have to remove special logic which singles out base from the compiler. The rule for implicit shadowing is now simply: * If you write import Prelude (..) then you don't get an implicit prelude import * If you write import "foobar" Prelude (..) for all pkgs foobar, you get an implicit import of prelude. If you want to write a package import of Prelude, then you can enable `NoImplicitPrelude` for the module in question to recover the behaviour of ghc-9.2-9.10. Fixes #17045 - - - - - 57c50f41 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Rename COMPILING_BASE_PACKAGE to COMPILING_GHC_INTERNAL_PACKAGE The COMPILING_BASE_PACKAGE macro is concerned with issues defining symbols and using symbols in the same compilation unit. However, these symbols now exist in ghc-internal rather than base, so we should rename the macro accordingly. The code is guards is likely never used as we never produce windows DLLs but it is simpler to just perform the renaming for now. These days there is little doubt that this macro defined in this ad-hoc manner would be permitted to exist, but these days are not those days. Fixes #25221 - - - - - 70764243 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Preload ghc-internal rather than base This occurence of baseUnitId was missed when moving the bulk of internal definitions into `ghc-internal`. We need to remove this preloading of `base` now because `base` should not be wired in. Towards #24903 - - - - - 12915609 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Remove Data.List compat warning There is currently a warning implemented in -Wcompat which warns you when importing Data.List in a non-qualified manner. ``` A.hs:3:8: warning: [-Wcompat-unqualified-imports] To ensure compatibility with future core libraries changes imports to Data.List should be either qualified or have an explicit import list. | 3 | import Data.List | ^^^^^^^^^ Ok, one module loaded. ``` GHC ticket: https://gitlab.haskell.org/ghc/ghc/-/issues/17244 CLC discussion: https://groups.google.com/g/haskell-core-libraries/c/q3zHLmzBa5E This warning was implemented as part of the migration to making Data.List monomorphic again (and to be used like Data.Set, Data.Map etc). That doesn't seem like it happened, and I imagine that the current CLC would require a new proposal anyway in order to do that now. It's not clear in any case what "future core libraries changes" we are waiting to happen before this warning can be removed. Given the first phase of the proposal has lasted 5 years it doesn't seem that anyone is motivated to carry the proposal to completion. It does seem a bit unnecessary to include a warning in the compiler about "future changes to the module" when there's no timeline or volunteer to implement these changes. The removal of this warning was discussed again at: https://github.com/haskell/core-libraries-committee/issues/269 During the discussion there was no new enthusiasm to move onto the next stages of the proposal so we are removing the warning to unblock the reinstallable "base" project (#24903) Fixes #24904 - - - - - d4e4d498 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Move Control.Monad.Zip into ghc-internal mzip is wired in and therefore needs to be in ghc-internal. Fixes #25222 Towards #24903 - - - - - d3dacdfb by Matthew Pickering at 2024-09-26T12:08:57-04:00 Unwire the base package This patch just removes all the functions related to wiring-in the base package and the `-this-unit-id=base` flag from the cabal file. After this commit "base" becomes just like any other package and the door is opened to moving base into an external repo and releasing base on a separate schedule to the rest of ghc. Closes #24903 - - - - - 1b39363b by Patrick at 2024-09-27T06:10:19-04:00 Add entity information to HieFile #24544 Enhanced HieFile to capture entity information for identifiers, enabling better support for language tools and protocols. See issue #24544 for more details. Work have been done: * Introduction of new data type `EntityInfo` in `GHC.Iface.Ext.Types`. * Add extra field `hie_entity_infos :: NameEntityInfo` to `HieFile` to store the mapping from entity name to corresponding entity infos in `GHC.Iface.Ext.Types`. * Compute `EntityInfo` for each entity name in the HieAst from `TyThing, Id, OccName` when generating the `HieFile` in `GHC.Iface.Ext.Ast`. * Add test T24544 to test the generation of `EntityInfo`. - - - - - 4f3618d8 by sheaf at 2024-09-27T06:10:57-04:00 The X86 SIMD patch. This commit adds support for 128 bit wide SIMD vectors and vector operations to GHC's X86 native code generator. Main changes: - Introduction of vector formats (`GHC.CmmToAsm.Format`) - Introduction of 128-bit virtual register (`GHC.Platform.Reg`), and removal of unused Float virtual register. - Refactor of `GHC.Platform.Reg.Class.RegClass`: it now only contains two classes, `RcInteger` (for general purpose registers) and `RcFloatOrVector` (for registers that can be used for scalar floating point values as well as vectors). - Modify `GHC.CmmToAsm.X86.Instr.regUsageOfInstr` to keep track of which format each register is used at, so that the register allocator can know if it needs to spill the entire vector register or just the lower 64 bits. - Modify spill/load/reg-2-reg code to account for vector registers (`GHC.CmmToAsm.X86.Instr.{mkSpillInstr, mkLoadInstr, mkRegRegMoveInstr, takeRegRegMoveInstr}`). - Modify the register allocator code (`GHC.CmmToAsm.Reg.*`) to propagate the format we are storing in any given register, for instance changing `Reg` to `RegFormat` or `GlobalReg` to `GlobalRegUse`. - Add logic to lower vector `MachOp`s to X86 assembly (see `GHC.CmmToAsm.X86.CodeGen`) - Minor cleanups to genprimopcode, to remove the llvm_only attribute which is no longer applicable. Tests for this feature are provided in the "testsuite/tests/simd" directory. Fixes #7741 Keeping track of register formats adds a small memory overhead to the register allocator (in particular, regUsageOfInstr now allocates more to keep track of the `Format` each register is used at). This explains the following metric increases. ------------------------- Metric Increase: T12707 T13035 T13379 T3294 T4801 T5321FD T5321Fun T783 ------------------------- - - - - - 10e431ef by sheaf at 2024-09-27T06:10:57-04:00 Use xmm registers in genapply This commit updates genapply to use xmm, ymm and zmm registers, for stg_ap_v16/stg_ap_v32/stg_ap_v64, respectively. It also updates the Cmm lexer and parser to produce Cmm vectors rather than 128/256/512 bit wide scalars for V16/V32/V64, removing bits128, bits256 and bits512 in favour of vectors. The Cmm Lint check is weakened for vectors, as (in practice, e.g. on X86) it is okay to use a single vector register to hold multiple different types of data, and we don't know just from seeing e.g. "XMM1" how to interpret the 128 bits of data within. Fixes #25062 - - - - - 8238fb2d by sheaf at 2024-09-27T06:10:57-04:00 Add vector fused multiply-add operations This commit adds fused multiply add operations such as `fmaddDoubleX2#`. These are handled both in the X86 NCG and the LLVM backends. - - - - - 2cb7b748 by sheaf at 2024-09-27T06:10:57-04:00 Add vector shuffle primops This adds vector shuffle primops, such as ``` shuffleFloatX4# :: FloatX4# -> FloatX4# -> (# Int#, Int#, Int#, Int# #) -> FloatX4# ``` which shuffle the components of the input two vectors into the output vector. NB: the indices must be compile time literals, to match the X86 SHUFPD instruction immediate and the LLVM shufflevector instruction. These are handled in the X86 NCG and the LLVM backend. Tested in simd009. - - - - - 0d2428d6 by sheaf at 2024-09-27T06:10:57-04:00 Add Broadcast MachOps This adds proper MachOps for broadcast instructions, allowing us to produce better code for broadcasting a value than simply packing that value (doing many vector insertions in a row). These are lowered in the X86 NCG and LLVM backends. In the LLVM backend, it uses the previously introduced shuffle instructions. - - - - - e6c19a41 by sheaf at 2024-09-27T06:10:57-04:00 Fix treatment of signed zero in vector negation This commit fixes the handling of signed zero in floating-point vector negation. A slight hack was introduced to work around the fact that Cmm doesn't currently have a notion of signed floating point literals (see get_float_broadcast_value_reg). This can be removed once CmmFloat can express the value -0.0. The simd006 test has been updated to use a stricter notion of equality of floating-point values, which ensure the validity of this change. - - - - - f496ff7f by sheaf at 2024-09-27T06:10:57-04:00 Add min/max primops This commit adds min/max primops, such as minDouble# :: Double# -> Double# -> Double# minFloatX4# :: FloatX4# -> FloatX4# -> FloatX4# minWord16X8# :: Word16X8# -> Word16X8# -> Word16X8# These are supported in: - the X86, AArch64 and PowerPC NCGs, - the LLVM backend, - the WebAssembly and JavaScript backends. Fixes #25120 - - - - - 5dd2a423 by sheaf at 2024-09-27T06:10:57-04:00 Add test for C calls & SIMD vectors - - - - - f824e1ee by sheaf at 2024-09-27T06:10:58-04:00 Add test for #25169 - - - - - d54db7f3 by sheaf at 2024-09-27T06:10:58-04:00 Fix #25169 using Plan A from the ticket We now compile certain low-level Cmm functions in the RTS multiple times, with different levels of vector support. We then dispatch at runtime in the RTS, based on what instructions are supported. See Note [realArgRegsCover] in GHC.Cmm.CallConv. Fixes #25169 ------------------------- Metric Increase: T10421 T12425 T18730 T1969 T9198 ------------------------- - - - - - d5f8778a by sheaf at 2024-09-27T06:10:58-04:00 Fix C calls with SIMD vectors This commit fixes the code generation for C calls, to take into account the calling convention. This is particularly tricky on Windows, where all vectors are expected to be passed by reference. See Note [The Windows X64 C calling convention] in GHC.CmmToAsm.X86.CodeGen. - - - - - f64bd564 by sheaf at 2024-09-27T06:10:58-04:00 X86 CodeGen: refactor getRegister CmmLit This refactors the code dealing with loading literals into registers, removing duplication and putting all the code in a single place. It also changes which XOR instruction is used to place a zero value into a register, so that we use VPXOR for a 128-bit integer vector when AVX is supported. - - - - - ab12de6b by sheaf at 2024-09-27T06:10:58-04:00 X86 genCCall: promote arg before calling evalArgs The job of evalArgs is to ensure each argument is put into a temporary register, so that it can then be loaded directly into one of the argument registers for the C call, without the generated code clobbering any other register used for argument passing. However, if we promote arguments after calling evalArgs, there is the possibility that the code used for the promotion will clobber a register, defeating the work of evalArgs. To avoid this, we first promote arguments, and only then call evalArgs. - - - - - 8fd12429 by sheaf at 2024-09-27T06:10:58-04:00 X86 genCCall64: simplify loadArg code This commit simplifies the argument loading code by making the assumption that it is safe to directly load the argument into register, because doing so will not clobber any previous assignments. This assumption is borne from the use of 'evalArgs', which evaluates any arguments which might necessitate non-trivial code generation into separate temporary registers. - - - - - 12504a9f by sheaf at 2024-09-27T06:10:58-04:00 LLVM: propagate GlobalRegUse information This commit ensures we keep track of how any particular global register is being used in the LLVM backend. This informs the LLVM type annotations, and avoids type mismatches of the following form: argument is not of expected type '<2 x double>' call ccc <2 x double> (<2 x double>) (<4 x i32> arg) - - - - - 2bb1e8df by Cheng Shao at 2024-09-27T06:11:35-04:00 Link bytecode from interface-stored core bindings in oneshot mode !13042 Part of #T25090 If the flag `-fprefer-byte-code` is given when compiling a module containing TH, GHC will use Core bindings stored in interfaces to compile and link bytecode for splices. This was only implemented for `--make` mode initially, so this commit adds the same mechanism to oneshot mode (`-c`). When an interface is loaded into the EPS in `loadInterface` that has dehydrated Core bindings, an entry is added to the new field `eps_iface_bytecode`, containing an IO action that produces a bytecode `Linkable`, lazily processing the `mi_extra_decls` by calling `loadIfaceByteCode`. When Template Haskell dependencies are resolved in `getLinkDeps`, this action is looked up after loading a module's interface. If it exists, the action is evaluated and the bytecode is added to the set of `Linkable`s used for execution of the splice; otherwise it falls back on the traditional object file. Metric Decrease: MultiLayerModules T13701 - - - - - 7cb7172e by Matthew Pickering at 2024-09-27T06:12:12-04:00 ci: Fix variable inheritence for ghcup-metadata testing job Downstream in ghcup-ci we use the CONFIGURE_ARGS variable to determine how to setup all the different jobs. On the downstream trigger this was being inherited from the default setting in .gitlab.yml file. Therefore this led to job failures as the necessary CONFIGURE_ARGS were not being passed to the configure script when installing the bindist. See docs: * https://docs.gitlab.com/ee/ci/yaml/#inherit * https://docs.gitlab.com/ee/ci/yaml/#triggerforward 1. inherit:variables:fals - This stops the global variables being inherited into the job and hence forwarded onto the downstream job. 2. trigger:forward:* - yaml_variables: true (default) pass yaml variables to downstream, this is important to pass the upstream pipeline id to downstream. - pipeline_variables: false (default) but don't pass pipeline variables (normal environment variables). Fixes #25294 - - - - - 9ffd6163 by Leo at 2024-09-27T16:26:01+05:30 Fix typo in Prelude doc for (>>=) Fix a minor typo ("equivialent" instead of "equivalent") in the documentation for (>>=) in the prelude. - - - - - 5745dbd3 by Vladislav Zavialov at 2024-09-27T16:26:52+05:30 Wildcard binders in type declarations (#23501) Add support for wildcard binders in type declarations: type Const a b = a -- BEFORE: the `b` had to be named -- even if unused on the RHS type Const a _ = a -- AFTER: the compiler accepts -- a wildcard binder `_` The new feature is part of GHC Proposal #425 "Invisible binders in type declarations", and more specifically its amendment #641. Just like a named binder, a wildcard binder `_` may be: * plain: _ * kinded: (_ :: k -> Type) * invisible, plain: @_ * invisible, kinded: @(_ :: k -> Type) Those new forms of binders are allowed to occur on the LHSs of data, newtype, type, class, and type/data family declarations: data D _ = ... newtype N _ = ... type T _ = ... class C _ where ... type family F _ data family DF _ (Test case: testsuite/tests/typecheck/should_compile/T23501a.hs) However, we choose to reject them in forall telescopes and type family result variable binders (the latter being part of the TypeFamilyDependencies extension): type family Fd a = _ -- disallowed (WildcardBndrInTyFamResultVar) fn :: forall _. Int -- disallowed (WildcardBndrInForallTelescope) (Test case: testsuite/tests/rename/should_fail/T23501_fail.hs) See the new Notes: * Note [Type variable binders] * Note [Wildcard binders in disallowed contexts] To accommodate the new forms of binders, HsTyVarBndr was changed as follows (demonstrated without x-fields for clarity) -- BEFORE (ignoring x-fields and locations) data HsTyVarBndr flag = UserTyVar flag Name | KindedTyVar flag Name HsKind -- AFTER (ignoring x-fields and locations) data HsTyVarBndr flag = HsTvb flag HsBndrVar HsBndrKind data HsBndrVar = HsBndrVar Name | HsBndrWildCard data HsBndrKind = HsBndrNoKind | HsBndrKind LHsKind The rest of the patch is downstream from this change. To avoid a breaking change to the TH AST, we generate fresh names to replace wildcard binders instead of adding a dedicated representation for them (as discussed in #641). And to put a cherry on top of the cake, we now allow wildcards in kind-polymorphic type variable binders in constructor patterns, see Note [Type patterns: binders and unifiers] and the tyPatToBndr function in GHC.Tc.Gen.HsType; example: fn (MkT @(_ :: forall k. k -> Type) _ _) = ... (Test case: testsuite/tests/typecheck/should_compile/T23501b.hs) - - - - - ff2bdca2 by Matthew Pickering at 2024-09-27T16:27:08+05:30 ci: Push perf notes from wasm jobs It was observed in #25299 that we were failing to push performance numbers from the wasm jobs. In future we might want to remove this ad-hoc check but for now it's easier to add another special case. Towards #25299 - - - - - 4c76f75c by Zubin Duggal at 2024-09-27T16:44:00+05:30 Bump GHC version to 9.12 - - - - - e4ac1b0d by Zubin Duggal at 2024-09-27T19:12:24+05:30 Bump GHC version to 9.13 - - - - - da20cac1 by Andreas Klebinger at 2024-10-02T22:18:48-04:00 SpecConstr: Introduce a separate argument limit for forced specs. We used to put no limit at all on specializations forced via the SPEC argument. This isn't always reasonable so we introduce a very high limit that applies to forced specializations, a flag to control it, and we now emit a warning if we fail a specialization because we exceed the warning. Fixes #25197 - - - - - 39497eed by Andreas Klebinger at 2024-10-02T22:19:24-04:00 ghc-experimental: Expose primops and ghc extensions via GHC.PrimOps This will be the new place for functions that would have gone into GHC.Exts in the past but are not stable enough to do so now. Addresses #25242 - - - - - e9dc2690 by Sylvain Henry at 2024-10-02T22:20:06-04:00 RTS: cleanup timerfd file descriptors after a fork (#25280) When we init a timerfd-based ticker, we should be careful to cleanup the old file descriptors (e.g. after a fork). - - - - - 64e876bc by Rodrigo Mesquita at 2024-10-02T22:20:43-04:00 determinism: Deterministic MonadGetUnique LlvmM Update LlvmM to thread a unique deterministic supply (using UniqDSMT), and use it in the MonadGetUnique instance. This makes uniques sampled from LlvmM deterministic, which guarantees object determinism with -fllvm. Fixes #25274 - - - - - 36bbb167 by Matthew Pickering at 2024-10-02T22:21:18-04:00 Bump LLVM upper bound to allow LLVM 19 Also bumps the ci-images commit so that the deb12 images uses LLVM 19 for testing. ------------------------- Metric Decrease: size_hello_artifact_gzip size_hello_unicode_gzip ------------------------- Fixes #25295 - - - - - 0029ca91 by Matthew Pickering at 2024-10-02T22:21:54-04:00 configure: Allow happy-2.0.2 happy-2.0.2 can be used to compile GHC. happy-2.0 and 2.0.1 have bugs which make it unsuitable to use. The version bound is now == 1.20.* || >= 2.0.2 && < 2.1 Fixes #25276 - - - - - 92976985 by ARATA Mizuki at 2024-10-02T22:22:35-04:00 Use bundled llc/opt on Windows (#22438) - - - - - af59749a by Matthew Pickering at 2024-10-02T22:23:11-04:00 Fix registerArch for riscv64 The register allocator doesn't support vector registers on riscv64, therefore advertise as NoVectors. Fixes #25314 - - - - - a49e66fc by Matthew Pickering at 2024-10-02T22:23:11-04:00 riscv: Avoid using csrr instruction to test for vector registers The csrr instruction isn't allowed in qemu user-mode, and raises an illegal instruction error when it is encountered. Therefore for now, we just hard-code that there is no support for vector registers since the rest of the compiler doesn't support vector registers for riscv. Fixes #25312 - - - - - 115a30e9 by Andreas Klebinger at 2024-10-02T22:23:11-04:00 Add support for fp min/max to riscv Fixes #25313 - - - - - f28b5992 by Ben Gamari at 2024-10-02T22:23:47-04:00 testsuite/perf: Report better error message on malformed note Previously a malformed perf note resulted in very poor errors. Here we slight improve this situation. - - - - - 51377508 by Ben Gamari at 2024-10-02T22:23:47-04:00 testsuite: Handle division-by-zero more gracefully Previously we would fail with an ZeroDivisionError. Fixes #25321 - - - - - 50490075 by Matthew Pickering at 2024-10-03T05:55:13-04:00 ci: Add nightly & release ubuntu-22.04 jobs This adds build of bindists on ubuntu-22.04 on nightly and release pipelines. We also update ghcup-metadata to provide ubuntu-22.04 bindists on ubuntu-22.04. Fixes #25317 - - - - - 9cf1cef5 by Zubin Duggal at 2024-10-03T05:55:49-04:00 haddock: Bump binary interface version to 46. This allows haddock to give good error messages when being used on mismatched interface files. We bump to 46 since GHC 9.12 uses version 45: https://gitlab.haskell.org/ghc/ghc/-/commit/362afd632032ee8f174690c3ffe0015076b83ce6 This should have been done in e4ac1b0d281b85a0144d1ef6f84a1df00e236052 but was overlooked. - - - - - 2293c0b7 by Andreas Klebinger at 2024-10-03T05:56:25-04:00 Change versionig of ghc-experimental to follow ghc versions. Just like ghc-internal it will now use the @ProjectVersionForLib@ macro for versioning. This means for ghc=9.10.1, ghc-experimental's version will be 9.1001.0 and so on. This fixes #25289 - - - - - 876d6e0e by Ben Gamari at 2024-10-04T15:07:53+01:00 base: Add `HasCallStack` constraint to `ioError` As proposed in core-libraries-committee#275. - - - - - 9bfd9fd0 by Matthew Pickering at 2024-10-04T15:08:03+01:00 Fix toException method for ExceptionWithContext Fixes #25235 - - - - - ac004028 by Matthew Pickering at 2024-10-04T15:09:07+01:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - bcb293f2 by Cheng Shao at 2024-10-04T17:59:28-04:00 testsuite: remove accidentally checked in debug print logic - - - - - 68e2da5a by Rodrigo Mesquita at 2024-10-05T10:36:15-04:00 Deprecation for WarnCompatUnqualifiedImports Fixes #25330 - - - - - 4327f0e8 by Andrew Lelechenko at 2024-10-05T10:36:52-04:00 Restrict Data.List.NonEmpty.unzip to NonEmpty (a, b) -> (NonEmpty a, NonEmpty b) Implementing the final phase of CLC proposal https://github.com/haskell/core-libraries-committee/issues/86 - - - - - ceca9efb by Cheng Shao at 2024-10-06T02:18:31+00:00 driver: fix runWorkerLimit on wasm This commit fixes link-time unresolved symbol errors for sem_open etc on wasm, by making runWorkerLimit always behave single-threaded. This avoids introducing the jobserver logic into the final wasm module and thus avoids referencing the posix semaphore symbols. - - - - - 135fd1ac by Torsten Schmits at 2024-10-06T02:18:31+00:00 Parallelize getRootSummary computations in dep analysis downsweep This reuses the upsweep step's infrastructure to process batches of modules in parallel. I benchmarked this by running `ghc -M` on two sets of 10,000 modules; one with a linear dependency chain and the other with a binary tree. Comparing different values for the number of modules per thread suggested an optimum at `length targets `div` (n_cap * 2)`, with results similar to this one (6 cores, 12 threads): ``` Benchmark 1: linear 1 jobs Time (mean ± σ): 1.775 s ± 0.026 s [User: 1.377 s, System: 0.399 s] Range (min … max): 1.757 s … 1.793 s 2 runs Benchmark 2: linear 6 jobs Time (mean ± σ): 876.2 ms ± 20.9 ms [User: 1833.2 ms, System: 518.6 ms] Range (min … max): 856.2 ms … 898.0 ms 3 runs Benchmark 3: linear 12 jobs Time (mean ± σ): 793.5 ms ± 23.2 ms [User: 2318.9 ms, System: 718.6 ms] Range (min … max): 771.9 ms … 818.0 ms 3 runs ``` Results don't differ much when the batch size is reduced to a quarter of that, but there's significant thread scheduling overhead for a size of 1: ``` Benchmark 1: linear 1 jobs Time (mean ± σ): 2.611 s ± 0.029 s [User: 2.851 s, System: 0.783 s] Range (min … max): 2.591 s … 2.632 s 2 runs Benchmark 2: linear 6 jobs Time (mean ± σ): 1.189 s ± 0.007 s [User: 2.707 s, System: 1.103 s] Range (min … max): 1.184 s … 1.194 s 2 runs Benchmark 3: linear 12 jobs Time (mean ± σ): 1.097 s ± 0.006 s [User: 2.938 s, System: 1.300 s] Range (min … max): 1.093 s … 1.101 s 2 runs ``` Larger batches also slightly worsen performance. - - - - - 535a2117 by Daniel Díaz at 2024-10-06T09:51:46-04:00 Clarify the meaning of "exactly once" in LinearTypes Solves documentaion issue #25084. - - - - - 92f8939a by Krzysztof Gogolewski at 2024-10-06T09:52:22-04:00 Only allow (a => b) :: Constraint rather than CONSTRAINT rep Fixes #25243 - - - - - 4a2f0f13 by Alan Zimmerman at 2024-10-07T05:16:54-04:00 EPA: Remove unused hsCaseAnnsRest We never populate it, so remove it. - - - - - 5099057b by John Paul Adrian Glaubitz at 2024-10-07T05:17:40-04:00 rts: Fix invocation of __ieee_set_fp_control() on alpha-linux Fixes the following error when building GHC on alpha-linux: rts/posix/Signals.c: In function ‘initDefaultHandlers’: rts/posix/Signals.c:709:5: error: error: implicit declaration of function ‘ieee_set_fp_control’ [-Wimplicit-function-declaration] 709 | ieee_set_fp_control(0); | ^~~~~~~~~~~~~~~~~~~ | 709 | ieee_set_fp_control(0); | - - - - - c9590ba0 by Teo Camarasu at 2024-10-07T05:18:17-04:00 Add changelog entries for !12479 - - - - - bf9c9566 by Matthew Pickering at 2024-10-07T13:19:30-04:00 javascript: Read fields of ObjectBlock lazily When linking a module with a large dependency footprint too much of the object files were forced during linking. This lead to a large amount of memory taken up by thunks which would never be forced On the PartialDownsweep test this halves the memory required (from 25G to 13G). Towards #25324 ------------------------- Metric Increase: size_hello_obj ------------------------- - - - - - 571329df by Matthew Pickering at 2024-10-07T13:20:06-04:00 ci: Run the i386 validation job when i386 label is set This is helpful when making changes to base and must update the javascript and i386 base exports files. - - - - - e68f9aaf by Matthew Pickering at 2024-10-07T13:20:42-04:00 Rewrite partitionByWorkerSize to avoid pattern match checker bug With `-g3` the pattern match checker would warn about these incomplete patterns. This affects the debug_info builds on CI. ``` Pattern match(es) are non-exhaustive In an equation for ‘go’: Patterns of type ‘[a]’, ‘[a]’, ‘[SpecFailWarning]’ not matched: (_:_) _ _ | 2514 | go [] small warnings = (small, warnings) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^... ``` Workaround for #25338 - - - - - d915dc8b by Arnaud Spiwack at 2024-10-07T19:23:00-04:00 Remove the wrapper/coercion-passing logic for submultiplicity checks Instead, we use a dedicated DelayedError, which is emitted systematically on submultiplicity checks, but is suppressed if we can indeed solve the submultiplicity constraint with a reflexivity coercion. This way, we don't have to return anything from `tcSubMult`, which now looks like a regular constraint check, the rest is implementation detail. This removes all of the strange boilerplate that I'd been struggling with under the previous implementation. Even if submultiplicity checks are not properly constraints, this way it's contained entirely within a `WantedConstraint`. Much more pleasant. Closes #25128. - - - - - 1d226116 by Sven Tennie at 2024-10-07T19:23:37-04:00 AArch64: Implement switch/jump tables (#19912) This improves the performance of Cmm switch statements (compared to a chain of if statements.) - - - - - 3fe621dd by Mario Blažević at 2024-10-07T19:24:18-04:00 Fixes #25256, missing parens inside TH-printed pattern type signature - - - - - ea4b4391 by ARATA Mizuki at 2024-10-07T19:24:59-04:00 Better documentation for floatRange function Closes #16479 - - - - - ff09205c by Andreas Klebinger at 2024-10-07T19:25:35-04:00 Adjust progress message for hadrian to include cwd. Fixes #25335 - - - - - 5fd320da by Sven Tennie at 2024-10-07T19:26:12-04:00 CCallConv test: Align argument types The C calling convention / standard requires that arguments and their values are of the same type. - - - - - c6e5fd3d by Cheng Shao at 2024-10-07T19:26:47-04:00 hadrian: remove unused ghciWithDebugger field from flavour config This patch removes the ghciWithDebugger field from flavour config since it's actually not used anywhere. - - - - - 9c9c790d by sheaf at 2024-10-07T19:27:23-04:00 user's guide: update docs for X86 CPU flags This commit updates the section of the user's guide pertaining to X86 feature flags with the following changes: - the NCG backend now supports SIMD, so remove all text that says the contrary, - the LLVM backend does not "automatically detect" features, so remove any text that makes that claim. - - - - - a1ecc826 by Sven Tennie at 2024-10-08T13:36:03-04:00 ci: RISCV64 cross-compile testing This adds a validation job which tests that we can build a riscv64 cross compiler and build a simple program using it. We do not currently run the whole testsuite. Towards #25254 Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - d5c2577f by Arnaud Spiwack at 2024-10-08T13:36:44-04:00 Remove unused accumulators in partition_errors - - - - - 55609880 by Andrzej Rybczak at 2024-10-09T16:41:46-04:00 Fix typo in the @since annotation of annotateIO - - - - - ef481813 by Alan Zimmerman at 2024-10-09T16:42:23-04:00 EPA: Remove [AddEpAnn] from (most of) HsExpr EPA: introduce EpAnnLam for lambda annotationsi, and remove `glAA` from `Parser.y`, it is the same as `glR` EPA: Remove unused annotation from XOpApp EPA: Use EpToken for XNPat and XNegApp EPA: specific anns for XExplicitTuple / XTuplePat / sumPatParens. EPA: Use specific annotation for MultiIf EPA: Move annotations into FunRhs EPA: Remove [AddEpAnn] from SigPat and ExprWithTySig EPA: Remove [AddEpAnn] from ArithSeq EPA: Remove [AddEpAnn] from HsProc EPA: Remove [AddEpAnn] from HsStatic EPA: Remove [AddEpAnn] from BindStmt EPA: Remove [AddEpAnn] from TransStmt EPA: Remove [AddEpAnn] from HsTypedSplice EPA: Remove [AddEpAnn] from HsUntypedSpliceExpr - - - - - 69960230 by Fabian Thorand at 2024-10-10T19:03:59+00:00 Handle exceptions from IO manager backend If an IO manager backend throws, it will not actually have registered the file descriptor. However, at that point, the IO manager state was already updated to assume the file descriptor is being tracked, leading to errors and an eventual deadlock down the line as documented in the issue #21969. The fix for this is to undo the IO manager state change in case the backend throws (just as we already do when the backend signals that the file type is not supported). The exception then bubbles up to user code. That way we make sure that 1. the bookkeeping state of the IO manager is consistent with the actions taken by the backend, even in the presence of unexpected failures, and 2. the error is not silent and visible to user code, making failures easier to debug. - - - - - 1587cccf by Hassan Al-Awwadi at 2024-10-11T03:52:36-04:00 Put RdrName in the foExt field of FieldOcc The main purpose of this commit is to rip RdrName out of FieldOcc, in accordance with #21592, and as a side note it has simplified the method we use to deal with ambiguity somewhat. To do the first, we make FieldOccs store (LIdP p) instead of always storing Located RdrName, and moved the readername to the extension points where necessary. For the second, well, we just turn an ambiguous RdrName into a unbound Name through mkUnboundName. Later during disambiguateRecordBinds of the type checking phase, we will try and do type-directed disambiguation based on the rdrName field (for now), so this hack works out fine. See Note [Ambiguous FieldOcc in record updates] for more details. There are two additional minor changes in this commit: * The HsRecSel constructor of HsExpr has been moved to the extension constuctors, since its really GHC specific. * HsProjection no longer has a Located DotFieldOcc as a field, but just a regular DotFieldOcc, since DotFieldOcc already wraps a located FieldLabelString co-authored by: @Jade <Jade512 at proton.me> @alt-romes <rodrigo.m.mesquita at gmail.com> - - - - - 2338a971 by Cheng Shao at 2024-10-11T03:53:13-04:00 driver: bail out when -fllvm is passed to GHC not configured with LLVM This patch makes GHC bail out with an proper error message when it's not configured with LLVM but users attempt to pass -fllvm, see #25011 and added comment for details. Fixes #25011 Co-authored-by: Rodrigo Mesquita <rodrigo.m.mesquita at gmail.com> - - - - - 78ad81ec by Cristiano Moraes at 2024-10-11T03:53:55-04:00 configure: Find C++ probing when GCC version is the latest but G++ is old #23118 - - - - - 083703a1 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Consider Wanteds with rewriters as insoluble This MR fixes #25325 See GHC.Tc.Types.Constraint, Note [Insoluble Wanteds], especially (IW2) There is a small change in the error message for T14172, but it looks entirely acceptable to me. - - - - - 0dfaeb66 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Wibbles - - - - - 09d24d82 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Spelling errors - - - - - 694489ed by sheaf at 2024-10-11T03:55:14-04:00 LLVM: use sse4.2 instead of sse42 LLVM expects the former instead of the latter since version 3.4. Fixes #25019 - - - - - 06ae8507 by sheaf at 2024-10-11T03:55:14-04:00 LLVM: make SSE4.2 imply +popcnt For consistency with the NCG as well as with Clang and GCC, we make the SSE4.2 feature flag imply +popcnt when using the LLVM backend. Fixes #25353 - - - - - 3fe843c7 by Cheng Shao at 2024-10-11T03:55:50-04:00 Drop obsolete libffi Makefile This patch drops obsolete libffi Makefile from the tree, given it's completely unused since removal of make build system in !7094. - - - - - df70405c by Ben Gamari at 2024-10-11T03:56:26-04:00 ghc-internal: Fix incomplete matches on IOError As noted in #25362, these incomplete matches were previously not being warned about. They were easily addressed by use of `GHC.Internal.Event.Windows.withException`. Closes #25362. - - - - - 8584504b by Matthew Pickering at 2024-10-11T03:57:02-04:00 compiler: Fix orientation of GHC.Hs.Doc boot file We should be free to import things from Language.Haskell.Syntax in GHC modules. Therefore the the boot file for the loop between ImpExp and GHC.Hs.Doc was in the wrong place. Issue #21592 - - - - - d029f170 by Ben Gamari at 2024-10-11T23:43:17-04:00 testsuite: Normalise trailing digits from hole fits output The type variables in the holes fit output from `abstract_refinement_hole_fits` is quite sensitive to compiler configuration. Specifically, a slight change in the inlining behavior of `throw` changes type variable naming in `(>>=)` and a few others. Ideally we would make hole fits output more deterministic but in the meantime we simply normalise this difference away as it not relevant to the test's goal. - - - - - da5d7d0d by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Add test for #25066 - - - - - eb7ddae1 by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Fix #25066 As noted in #25066, the exception backtrace proposal introduced a rather subtle performance regression due to simplification producing Core which the demand analyser concludes may diverge with a precise exception. The nature of the problem is more completely described in the new Note [Hiding precise exception signature in throw]. The (rather hacky) solution we use here hides the problematic optimisation through judicious use of `noinline`. Ultimately however we will want a more principled solution (e.g. #23847). Fixes #255066 CLC proposal: https://github.com/haskell/core-libraries-committee/issues/290 Metric Decrease: T9872d - - - - - 0060ece7 by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Improve documentation of Control.Exception.Backtrace - - - - - 18f532f3 by Ben Gamari at 2024-10-11T23:43:53-04:00 Bump process submodule to v1.6.25.0 - - - - - a9a3badf by Hassan Al-Awwadi at 2024-10-11T23:44:29-04:00 Move HsInteger and HsRat to an extension constructor These constructors were only used during the TC stage, or during template haskell. It seemed clear that it was independent of the source syntax represented in L.H.S, and thus we removed it according to #21592. - - - - - 4dd30cba by Artem Pelenitsyn at 2024-10-11T23:45:09-04:00 Docs: Linear types: link Strict Patterns subsection Also, fix a bug in RST with missing newline before a listing. Co-authored-by: Arnaud Spiwack <arnaud at spiwack.net> - - - - - adca5f2b by Ben Gamari at 2024-10-11T23:45:45-04:00 users guide: Address remaining TODOs in eventlog format docs Closes #25296. - - - - - 9291c125 by Sylvain Henry at 2024-10-11T23:46:26-04:00 Fix z-encoding of tuples (#25364) Tuples with prefix/suffix strings weren't always properly encoded with their shortcut notations. Fix this. - - - - - c08b68bc by Sven Tennie at 2024-10-11T23:47:01-04:00 Delete constants that can be deduced There are macros in MachRegs.h to figure those out. - - - - - 8b402da2 by Zubin Duggal at 2024-10-12T20:36:57+00:00 hadrian: Handle broken symlinks properly when creating source dist directories If we have a broken symlink in the repository, don't try to `need` the symlink or the target of the symlink. Attempting to do so has `shake` attempt to read the target to compute its hash, which fails because the target doesn't exist. - - - - - 16f97667 by Zubin Duggal at 2024-10-12T20:36:57+00:00 hadrian: exclude cabal.project.symlink.broken from source archives Cabal 3.14 introduced a broken symlink in its testsuite. Unfortunately, this broke our source distribution as we use use `tar --dereference` to avoid issues with symlink compatibility on windows, and `tar --dereference` chokes when it encounters any broken symlinks. We can't get rid of `--dereference` because symlinks are generally broken on windows, so the only option is to exclude this file from source archives. see also https://github.com/haskell/cabal/issues/10442 - - - - - f1a2c9fc by Zubin Duggal at 2024-10-12T20:36:57+00:00 Bump Cabal submodule to 3.14 Metric Decrease: MultiLayerModulesTH_OneShot Metric Increase: haddock.Cabal - - - - - 745dd590 by Ben Gamari at 2024-10-14T09:13:12-04:00 users-guide: Document GHCi :where command Resolve #24509. - - - - - e9cc4699 by Alan Zimmerman at 2024-10-14T09:13:48-04:00 EPA: Remove [AddEpAnn] from IE, Pat and some Tys EPA: Remove [AddEpAnn] from LazyPat EPA: Remove [AddEpAnn] from RecordCon/RecordUpd/ConPat EPA: Remove [AddEpAnn] from HsFieldBind EPA: Remove [AddEpAnn] from PatSynBind EPA: Remove [AddEpAnn] from IPBind EPA: Remove [AddEpAnn] from FixSig EPA: Remove [AddEpAnn] from activation rules EPA: Remove [AddEpann] from SpecInstSig EPA: Remove [AddEpAnn] from MinimalSig EPA: Remove [AddEpAnn] from SCCFunSig EPA: Remove [AddEpAnn] from CompleteMatchSig EPA: Remove [AddEpAnn] from AnnSig, as used in PatSynSig, ClassOpSig, TypeSig EPA: Remove [AddEpAnn] from IEThingAbs EPA: Remove [AddEpAnn] from IEThingAll / IEThingWith EPA: Remove [AddEpAnn] from IEModuleContents EPA: Remove [AddEpAnn] from HsOpTy EPA: Remove [AddEpAnn] for various binders EPA: Remove [AddEpAnn] for HsIParamTy - - - - - 81a570bf by Sebastian Graf at 2024-10-14T22:15:31-04:00 Desugaring, plus -Wincomplete-record-selectors This commit does several related things: * Major refactor of the handling of applications in the desugarer. Now all applications are handled in `dsApp`, `ds_app` and related functions. This dramatically simplifies the code and removes complicated cruft that had accumulated. Hooray. Fixes #25281. * Improve the handling of -Wincomplete-record-selectors. We now incorporate the result type of unsaturated record selector applications as well as consider long-distance information in getField applications. Plus, the implmentation now builds the improved `dsApp` stuff above, so it is much easier to understand. Plus, incorporates improved error message wording suggested by Adam Gundry in !12685. Fixes #24824, #24891 See the long Note [Detecting incomplete record selectors] * Add -Wincomplete-record-selectors to -Wall, as specified in GHC Proposal 516. To do this, I also had to add -Wno-incomplete-record-selectors to the build flags for Cabal in GHC's CI. See hadrian/src/Settings/Warnings.hs. We can remove this when Cabal is updated so that it doesn't trigger the warning: https://github.com/haskell/cabal/issues/10402 2.6% decrease in compile time allocation in RecordUpPerf Metric Decrease: RecordUpdPerf - - - - - ae7bc08e by Simon Peyton Jones at 2024-10-14T22:15:31-04:00 Elmininate incomplete record selectors This patch is a pure refactor of GHC's source code, to avoid the use of partial record selectors. It was provoked by adding -Wincomplete-record-selectors to -Wall (as the GHC Proposal specified), which in turn showed up lots of places where GHC was using incomplete record selectors. This patch does mostly-simple refactoring to make it clear to the pattern match checker that there is in fact no partiality. There is one externally-visible change: I changed the data type HoleFit to split out the two cases data HoleFit = TcHoleFit TcHoleFit | RawHoleFit SDoc data TcHoleFit = HoleFit { ...lots of fields } There are large swathes of code that just deal with `TcHoleFit`, and having it as a separate data types makes it apparent that `RawHoleFit` can't occur. This makes it much better -- but the change is visible in the HolePlugin interface. I decided that there are so few clients of this API that it's worth the change. I moved several functions from Language.Haskell.Syntax to GHC.Hs. Reason, when instantiated at (GhcPass _), the extension data construtcor is guaranteed unused, and that justifies omitted patterns in these functions. By putting them in GHC.Hs.X I can specialise the type for (GhcPass _) and thereby make the function total. An interesting side-light is that there were a few local function definitions without a type signature, like this one in GHC.Parser.Header convImport (L _ i) = (ideclPkgQual i, reLoc $ ideclName i) This is fully closed, and so is generalised; but that generalises it to any old pass, not (GhcPass _), so GHC rightly complains about the use of the selector `ideclPkgQual`. I added a type signature to `i`, thus convImport (L _ (i::ImportDecl GhcPs)) = (ideclPkgQual i, reLoc $ ideclName i) which specialised the function enough to make the record selector complete. Quite a surprising consequence of local let-generalisation! - - - - - 6a067226 by Simon Peyton Jones at 2024-10-14T22:15:31-04:00 Add -Werror=-Wno-error=incomplete-record-selectors to hadrian-multi In the main MR, -Wall now includes -Wincomplete-record-selectors. However `hadrian-multi` has many, many warnings about incomplete record selectors, so this patch stops those warnings being treated as errors. (See discussion on !13308.) A better fix would be to remove the use of incomplete record selectors, since each of them represents a potential crash. - - - - - edeafc14 by Ben Gamari at 2024-10-14T22:16:08-04:00 users-guide: Document field coalescence - - - - - 55b83587 by ARATA Mizuki at 2024-10-14T22:16:49-04:00 LLVM backend: Use correct rounding for Float literals Fixes #22033 - - - - - e59fe5c6 by Hassan Al-Awwadi at 2024-10-15T08:25:33+00:00 Changed import from Ghc. module to L.H.S module Progresses #21592 For some reason we still imported GHC.Types.Fixity when the definitino of Fixity and LexicalFixity have already been moved to Language.Haskell.Syntax.Basic. This fixes that for - - - - - ab1767d5 by Simon Peyton Jones at 2024-10-15T23:45:04-04:00 Add a release-notes entry for -Wincomplete-record-selectors - - - - - 6f0a62db by ur4t at 2024-10-16T15:33:43+00:00 GHCi: fix improper location of ghci_history file Fixes #24266 - - - - - 5f67db48 by Alan Zimmerman at 2024-10-17T05:18:43-04:00 EPA: Remove [AddEpAnn] commit 3 EPA: Remove [AddEpAnn] from HsDocTy EPA: Remove [AddEpAnn] from HsBangTy EPA: Remove [AddEpAnn] from HsExplicitListTy EPA: Remove [AddEpAnn] from HsExplicitTupleTy EPA: Remove [AddEpAnn] from HsTypedBracket EPA: Remove [AddEpAnn] from HsUntypedBracket EPA: Remove [AddEpAnn] from PatBuilderOpApp EPA: break out 'EpToken "|"' from ClassDecl anns EPA: Remove [AddEpAnn] from ClassDecl EPA: Remove [AddEpAnn] from SynDecl - - - - - fbbbd010 by Daan Rijks at 2024-10-17T05:19:19-04:00 Expand the haddocks for Control.Category - - - - - 076c1a10 by Andrew Lelechenko at 2024-10-17T05:19:19-04:00 documentation: more examples for Control.Category - - - - - 90891962 by Cheng Shao at 2024-10-17T16:41:18+00:00 ghci: mitigate host/target word size mismatch in BCOByteArray serialization This patch mitigates a severe host/target word size mismatch issue in BCOByteArray serialization logic introduced since !12142, see added note for detailed explanation. - - - - - 839ac52e by Cheng Shao at 2024-10-17T16:41:18+00:00 ghci: use plain malloc for mkConInfoTable on non-TNTC platforms This patch avoids using mmap() to allocate executable memory for mkConInfoTable on platforms without tables-next-to-code, see added comment for explanation. - - - - - a998f69d by Cheng Shao at 2024-10-17T16:41:18+00:00 ghc-internal: add missing CPPs for wasm This patch adds some missing CPP guards to ghc-internal, given those functions are non existent on wasm and would cause linking issues. - - - - - 71a471e7 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: rename prelude.js to prelude.mjs This commit renames prelude.js to prelude.mjs for wasm backend rts jsbits, and slightly adjusts the jsbits contents. This is for preparing the implementation of dyld.mjs that contains wasm dynamic linker logic, which needs to import prelude.mjs as a proper ESM module. - - - - - 33d9db17 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: add __wrapped_freeJSVal This commit wraps imported freeJSVal in a __wrapped_freeJSVal C function for wasm backend RTS. In general, wasm imports are only supposed to be directly called by C; they shouldn't be used as function pointers, which confuses wasm-ld at link-time when generating shared libraries. - - - - - 0d0a16a8 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: correct stale link in comment - - - - - 90a35c41 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: drop interpretBCO support from non-dyn ways on wasm This commit drops interpretBCO support from non dynamic rts ways on wasm. The bytecode interpreter is only useful when the RTS linker also works, and on wasm it only works for dynamic ways anyway. An additional benefit of dropping interpretBCO is reduction in code size of linked wasm modules, especially since interpretBCO references ffi_call which is an auto-generated large function in libffi-wasm and unused by most user applications. - - - - - 98a32ec5 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: don't build predefined GloblRegs for wasm PIC mode This commit wraps the predefined GlobalRegs in Wasm.S under a CPP guard to prevent building for PIC mode. When building dynamic ways of RTS, the wasm globals that represent STG GlobalRegs will be created and supplied by dyld.mjs. The current wasm dylink convention doesn't properly support exporting relocatable wasm globals at all, any wasm global exported by a .so is assumed to be a GOT.mem entry. - - - - - bef94bde by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: fix conflicting StgRun definitions on wasm This commit fixes conflicting StgRun definition when building dynamic ways of RTS for wasm in unregisterised mode. - - - - - a6a82cdb by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: use targetSupportsRPaths predicate This commit changes the hostSupportsRPaths predicate to targetSupportsRPaths and use that to decide whether to pass RPATH-related link-time options. It's not applied to stage0, we should just use the default link-time options of stageBoot ghc. - - - - - f232c872 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: disable internal-interpreter of ghc library when cross compiling This commit disable the internal-interpreter flag of ghc library when cross compiling, only external interpreter works in such cases. - - - - - 577c1819 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: enable internal-interpreter for ghc-bin stage0 This commit enables internal-interpreter flag for ghc-bin even when compiling stage0, as long as target supports ghci. It enables ghci functionality for cross targets that support ghci, since cross ghc-bin is really stage0. - - - - - c247f2ee by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: fix CFLAGS for gmp shared objs on wasm This commit adds -fvisibility=default to CFLAGS of gmp when building for wasm. This is required to generate the ghc-bignum shared library without linking errors. Clang defaults to -fvisibility=hidden for wasm targets, which will cause issues when a symbol is expected to be exported in a shared library but without explicit visibility attribute annotation. - - - - - 775410fd by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: re-enable PIC for gmp on wasm This commit re-enables --with-pic=yes configuration option of gmp when building for wasm, given we're about to include support for shared libraries, TH and ghci. - - - - - b45080a3 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: add the host_fully_static flavour transformer This commit adds the host_fully_static flavour transformer to hadrian, which ensures stage0 is fully statically linked while still permitting stage1 libdir to contain shared libraries. This is intended to be used by the wasm backend to build portable linux bindists that contain wasm shared libraries. - - - - - 5043507c by Cheng Shao at 2024-10-17T16:41:18+00:00 ci: update wasm jobs configuration This commit bumps ci-image revision to use updated wasm toolchain, and use host_fully_static instead of fully_static for wasm jobs so to ensure wasm shared libraries can be properly built. - - - - - 2956a3f7 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian/testsuite: implement config.cross logic This commit implements the config.cross field in the testsuite driver. It comes from the "cross compiling" ghc info field for both in-tree/out-of-tree GHC, and is an accurate predicate of whether we're cross-compiling or not (compared to the precense of target emulator), and is useful to implement predicates to assert the precense of internal interpreter (only available on non-cross GHC) for tests that do require it (e.g. plugins). - - - - - 8c74a0ed by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian/compiler: implement targetRTSLinkerOnlySupportsSharedLibs This patch implements the targetRTSLinkerOnlySupportsSharedLibs predicate in hadrian. Its definition in hadrian is the single source of truth, and the information propagates to ghc settings file, ghc driver and testsuite driver. It is used in various places to ensure dynamic dependency is selected when the target RTS linker only supports loading dynamic code. - - - - - b4c3c340 by Cheng Shao at 2024-10-17T16:41:18+00:00 testsuite: don't use host cpu features when testing cross ghc This patch disables CPU feature detection logic when testing cross GHC, since those features don't make sense for the target anyway. - - - - - 3c21b696 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: implement & use req_plugins predicate This commit implements req_plugins predicate to indicate that the test requires plugin functionality. Currently this means cross GHC is disabled since internal-interpreter doesn't work in cross GHC yet. - - - - - 93b8af80 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: make use of config.interp_force_dyn This commit takes config.interp_force_dyn into consideration when setting up TH/ghci way flags. - - - - - 94673d41 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: bump T17572 timeout - - - - - 2b5efc2d by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: bump T22744 pre_cmd timeout - - - - - 45102e2a by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip terminfo_so for cross ghc - - - - - 05e40406 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: fix shared library size tests for cross ghc This commit fixes shared library size tests (e.g. array_so in testsuite/tests/perf/size/all.T) when testing cross ghc. Previously, if shared library file extension of host and target differs, those tests will fail with framework errors due to not finding the right files. - - - - - fa68f833 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip ghc api tests that attempt to spawn processes inside wasm This commit skips a few ghc api tests on wasm, since they would attempt to spawn processes inside wasm, which is not supported at all. - - - - - 1241c04e by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip T22840 due to broken -dtag-inference-checks on wasm - - - - - 78c8b900 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: ensure $(ghciWayFlags) can be overridden This commit revises boilerplate.mk in testsuite as well as a few other places, to ensure the tests that do make use of $(ghciWayFlags) can receive the right $(ghciWayFlags) from testsuite driver config. - - - - - 47989ecc by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: skip rdynamic on wasm - - - - - fefb4ea1 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: skip T2615 on wasm This commit marks T2615 as skip on wasm, given LD_* environment variables aren't supported on wasm anyway. - - - - - 77c79762 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: mark MultiLayerModulesTH_Make/MultiLayerModulesTH_OneShot as fragile on wasm - - - - - 69bb4745 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: fix T16180 on wasm This commit fixes T16180 on wasm once TH support is flipped on. The fix is simply adding right asm code for wasm. - - - - - 621c753d by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: fix -fexternal-interpreter flag for JS backend Previously, -fexternal-interpreter is broken for JS backend, since GHC would attempt to launch a non-existent ghc-iserv* executable. This commit fixes it by adjusting pattern matching order in setTopSessionDynFlags. - - - - - 80aa8983 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: use interpreterDynamic predicate in preloadLib This commit use the interpreterDynamic predicate in preloadLib to decide if we should do dynLoadObjs instead of loadObj. Previously we used hostIsDynamic which was only written with non-cross internal interpreter in mind. The testsuite is also adjusted to remove hard-wired -fPIC flag for cbits (doesn't work in i386 RTS linker in vanilla way, #25260) and properly pass ghc_th_way_flags to ghc. - - - - - 74411461 by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix Cmm dynamic CLabels for wasm This commit fixes the handling of dynamic CLabels for the wasm backend. Just do the simplest handling: preserve the original CLabel, both unreg/NCG backends can handle them properly without issue. - - - - - f6abaf13 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: add necessary compile-time flags for wasm PIC mode This commit adds necessary compile-time flags when compiling for wasm PIC mode, see added comment for detailed explanation. - - - - - 9745fcfb by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: add necessary link-time flags for wasm shared libs This commit adds necessary link-time flags for wasm shared libs, see added comments for detailed explanation. - - - - - 649aae00 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: enforce -fno-use-rpaths for wasm This commit ensures the GHC driver never passes any RPATH-related link-time flags on wasm, which is not supported at all. - - - - - 47baa904 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: ensure static archives are picked when linking static .wasm modules This commit ensures static archives are picked when linking .wasm modules which are supposed to be fully static, even when ghc may be invoked with -dynamic, see added comment for explanation. - - - - - fc3a5591 by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix dynamic_too_enable for targets that require dynamic libraries This commit fixes dynamic_too_enable for targets whose RTS linker can only load dynamic code. - - - - - 94ef949e by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix checkNonStdWay for targets that require dynamic libraries This commit fixes checkNonStdWay to ensure that for targets whose RTS linker can only load dynamic code, the dynamic way of object is selected. - - - - - 88e99248 by Cheng Shao at 2024-10-17T16:41:24+00:00 ghc-bin: enforce dynamic way when the target requires so This commit makes ghc-bin use dynamic way when it is doing interactive stuff on certain targets whose RTS linker can only handle dynamic code. - - - - - 549582ef by Cheng Shao at 2024-10-17T16:41:24+00:00 hadrian/ghci: add wasm dyld This commit adds the wasm dynamic linker implementation, as well as ghci logic to call it and hadrian logic to install it to the correct location. See the top-level note in utils/jsffi/dyld.mjs for more details. - - - - - b562e3a6 by Cheng Shao at 2024-10-17T16:41:29+00:00 driver: fix getGccSearchDirectory for wasm target This commit fixes getGccSearchDirectory logic for wasm target, ensures the correct search directory containing libc.so etc can be found by GHC. getGccSearchDirectory is also exported so it can be used elsewhere to obtain the wasi-sdk libdir and pass to the dyld script. - - - - - 2d6107dc by Cheng Shao at 2024-10-17T16:41:29+00:00 driver: add wasm backend iserv logic This commit adds wasm backend iserv logic to the driver, see added comments for explanation. - - - - - 61f5baa5 by Cheng Shao at 2024-10-17T16:41:29+00:00 compiler: add PIC support to wasm backend NCG This commit adds support for generating PIC to the wasm backend NCG. - - - - - 652e7239 by Cheng Shao at 2024-10-17T16:41:29+00:00 hadrian/compiler: flip on support for shared libs & ghci for wasm This commit flips on the support for shared libs and ghci for the wasm target, given all required support logic has been added in previous commits. - - - - - 74a1f681 by Cheng Shao at 2024-10-17T16:41:29+00:00 testsuite: flip on support for shared libs, TH & ghci for wasm This commit flips on support for shared libs, TH & ghci for wasm in the testsuite, given support has been landed in previous commits. - - - - - 525d451e by Cheng Shao at 2024-10-17T23:03:34-04:00 Revert "compiler: start deprecating cmmToRawCmmHook" This reverts commit 1c064ef1f3e1aa2afc996e962ad53effa99ec5f4. Turns out the GHC-WPC project does use it to observe Cmm in the pipeline, see #25363. - - - - - 5bcfefd5 by Cheng Shao at 2024-10-17T23:04:09-04:00 rts: fix pointer overflow undefined behavior in bytecode interpreter This patch fixes an unnoticed undefined behavior in the bytecode interpreter. It can be caught by building `rts/Interpreter.c` with `-fsanitize=pointer-overflow`, the warning message is something like: ``` rts/Interpreter.c:1369:13: runtime error: addition of unsigned offset to 0x004200197660 overflowed to 0x004200197658 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1369:13 rts/Interpreter.c:1265:13: runtime error: addition of unsigned offset to 0x004200197660 overflowed to 0x004200197658 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1265:13 rts/Interpreter.c:1645:13: runtime error: addition of unsigned offset to 0x0042000b22f8 overflowed to 0x0042000b22f0 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1645:13 ``` Whenever we do something like `SpW(-1)`, the negative argument is implicitly converted to an unsigned integer type and causes pointer arithmetic overflow. It happens to be harmless for most targets since overflowing would wrap the result to desired value, but it's still coincidental and undefined behavior. Furthermore, it causes real damage to the wasm backend, given clang-20 will emit invalid wasm code that crashes at run-time for this kind of C code! (see https://github.com/llvm/llvm-project/issues/108770) The fix here is adding some explicit casts to ensure we always use the signed `ptrdiff_t` type as right hand operand of pointer arithmetic. - - - - - eb67875f by Matthew Craven at 2024-10-18T12:18:35+00:00 Bump transformers submodule The svg image files mentioned in transformers.cabal were previously not checked in, which broke sdist generation. - - - - - 366a1109 by Matthew Craven at 2024-10-18T12:18:35+00:00 Remove reference to non-existent file in haddock.cabal - - - - - 826852e9 by Matthew Craven at 2024-10-18T12:18:35+00:00 Move tests T11462 and T11525 into tests/tcplugins - - - - - dbe27152 by Matthew Craven at 2024-10-18T12:18:35+00:00 Repair the 'build-cabal' hadrian target Fixes #23117. Fixes #23281. Fixes #23490. This required: * Updating the bit-rotted compiler/Setup.hs and its setup-depends * Listing a few recently-added libraries and utilities in cabal.project-reinstall * Setting allow-boot-library-installs to 'True' since Cabal now considers the 'ghc' package itself a boot library for the purposes of this flag Additionally, the allow-newer block in cabal.project-reinstall was removed. This block was probably added because when the libraries/Cabal submodule is too new relative to the cabal-install executable, solving the setup-depends for any package with a custom setup requires building an old Cabal (from Hackage) against the in-tree version of base, and this can fail un-necessarily due to tight version bounds on base. However, the blind allow-newer can also cause the solver to go berserk and choose a stupid build plan that has no business succeeding, and the failures when this happens are dreadfully confusing. (See #23281 and #24363.) Why does setup-depends solving insist on an old version of Cabal? See: https://github.com/haskell/cabal/blob/0a0b33983b0f022b9697f7df3a69358ee9061a89/cabal-install/src/Distribution/Client/ProjectPlanning.hs#L1393-L1410 The right solution here is probably to use the in-tree cabal-install from libraries/Cabal/cabal-install with the build-cabal target rather than whatever the environment happens to provide. But this is left for future work. - - - - - b3c00c62 by Matthew Craven at 2024-10-18T12:18:35+00:00 Revert "CI: Disable the test-cabal-reinstall job" This reverts commit 38c3afb64d3ffc42f12163c6f0f0d5c414aa8255. - - - - - a04959b8 by Daneel Yaitskov at 2024-10-19T09:34:15-04:00 base: speed up traceEventIO and friends when eventlogging is turned off #17949 Check the RTS flag before doing any work with the given lazy string. Fix #17949 Co-authored-by: Michael Peyton Jones <me at michaelpj.com> Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - eff16c22 by Matthew Pickering at 2024-10-19T21:55:55-04:00 ci: Add support for ONLY_JOBS variable to trigger any validation pipeline By setting the ONLY_JOBS variable to the name of the job (or multiple jobs), the resulting pipeline will include a validation job for that pipeline. For example - if you set ONLY_JOBS="x86_64-linux-ubuntu22_04-validate" then a ubuntu22_04 job will be included in the validation pipeline. This is useful for testing specific jobs. Fixes #25332 - - - - - 280b6278 by Zubin Duggal at 2024-10-19T21:56:31-04:00 rel-eng: ghcup metadata generation: generated yaml anchors with meaningful names (cherry picked from commit d83f5bd730a8aef37d8a38b3560590d9798f8e45) - - - - - 25edf849 by Alan Zimmerman at 2024-10-19T21:57:08-04:00 EPA: Remove [AddEpAnn] Commit 4 EPA: Remove [AddEpAnn] from DataDecl This is quite a big change. The most important part is moving the annotations into HsDataDefn, using a specific annotation data type. It has a knock-on to everything that uses HsDataDefn EPA: Remove [AddEpAnn] for FunDep EPA: Remove [AddEpann] from FamilyDecl EPA: Remove [AddEpAnn] From InjectivityAnn EPA: Remove [AddEpAnn] from DefaultDecl EPA: Remove [AddEpAnn] from RuleDecls EPA: Remove [AddEpAnn] from Warnings - - - - - d5f42045 by Luite Stegeman at 2024-10-20T16:34:47-04:00 Interpreter: Add locking for communication with external interpreter This adds locking to communication with the external interpreter to prevent concurrent tasks interfering with each other. This fixes Template Haskell with the external interpreter in parallel (-j) builds. Fixes #25083 - - - - - d6bfea76 by Matthew James Kraai at 2024-10-20T16:35:29-04:00 Use monospace font for "Either a b" in fmap docs The documentation for fmap shows "`Either a b`" in the default font instead of showing "Either a b" in a monospace font. - - - - - 4bc7f9c8 by Luite Stegeman at 2024-10-20T16:36:15-04:00 Parser: remove non-ASCII characters from Parser.y Non-ASCII characters in the source causes a problem with the default Haskell Language Server setup in VSCode. Two characters seems to have been left in by accident. Workaround for #25396 - - - - - 7f61ed4e by Alan Zimmerman at 2024-10-21T06:39:45-04:00 EPA: Remove [AddEpAnn] Commit 5 EPA: Remove [AddEpAnn] from AnnPragma EPA: Remove [AddEpAnn] From ForeignDecl EPA: Remove [AddEpAnn] from RoleAnnotDecl EPA: Remove [AddEpAnn] from StandaloneKindSig EPA: Remove [AddEpAnn] From HsDeriving EPA: Remove [AddEpAnn] from ConDeclField EPA: Remove [AddEpAnn] from ConDeclGADT EPA: Remove [AddEpAnn] from ConDeclH98 EPA: Remove [AddEpAnn] from ClsInstDecl - - - - - f8694fe7 by Cheng Shao at 2024-10-21T06:40:21-04:00 wasm: bump dyld v8 heap size limit This patch adds `--max-old-space-size=8192` to wasm dyld shebang arguments to bump V8 heap size limit. The default limit (`heap_size_limit` returned by `v8.getHeapStatistics()`) is dynamically determined and a bit too low under certain workloads, and V8 would waste too much CPU time to garbage collect old generation heap more aggressively. Bumping the limit to 8G doesn't imply dyld would really take that much memory at run-time, but it lessens V8 heap stress significantly. - - - - - d328d173 by Luite Stegeman at 2024-10-21T12:39:18+00:00 Add requestTickyCounterSamples to GHC.Internal.Profiling This allows the user to request ticky counters to be written to the eventlog at specific times. See #24645 - - - - - 71765b1d by Simon Peyton Jones at 2024-10-21T20:55:00-04:00 Move defaulting code into a new module GHC.Tc.Solver had reached 4,000 lines -- although quite a lot of them are comments. This MR * Adds the new module GHC.Tc.Solver.Default, which has all the complex, but well modularised, defaulting code * Moves a bit of code from GHC.Tc.Solver into the existing GHC.Tc.Solver.Solve. Notably solveWanteds and simplifyWantedsTcM, which are called from GHC.Tc.Solver.Default It's a pure refactor. No code changes. - - - - - a398227b by Simon Peyton Jones at 2024-10-21T20:55:00-04:00 Improve the generalisation code in Solver.simplifyInfer The code in `decideQuantification` has become quite complicated. This MR straightens it out, adds a new Note, and on the way fixes #25266. See especially Note [decideAndPromoteTyVars] which is is where all the action happens in this MR. - - - - - 148059fe by Andrzej Rybczak at 2024-10-21T20:55:40-04:00 Adjust catches to properly rethrow exceptions https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13302 implemented exception rethrowing proposal, but it didn't adjust `catches`. This fixes it. - - - - - 25121dbc by doyougnu at 2024-10-22T09:38:18-04:00 linker: add --optimistic-linking flag This patch adds: - the --optimistic-linking flag which binds unknown symbols in the runtime linker to 0xDEADBEEF instead of exiting with failure - The test T25240 which tests these flags using dead code in the FFI system. - closes #25240 This patch is part of the upstreaming haskell.nix patches project. - - - - - f19e076d by doyougnu at 2024-10-22T09:38:18-04:00 ghc-internal: hide linkerOptimistic in MiscFlags - - - - - edc02197 by Cheng Shao at 2024-10-22T09:38:54-04:00 hadrian: fix bindist executable wrapper logic for cross targets This commit fixes an oversight of hadrian wrapper generation logic: when doing cross compilation, `wrapper` is called on executable names with cross prefix, therefore we must use `isSuffixOf` when matching to take the cross prefix into account. Also add missing cross prefix to ghci wrapper content and fix hsc2hs wrapper logic. - - - - - edf3bdf5 by Andreas Klebinger at 2024-10-22T16:30:42-04:00 mkTick: Push ticks through unsafeCoerce#. unsafeCoerce# doesn't exist at runtime so we should treat it like a Cast for the purpose of mkTick. This means if we have `{-# SCC foo #-} (unsafeCoerce# trivial_expr))` we now push the scope part of the cost centre up to `trivial_expr` at which point we can discard it completely if the expression is trivial enough. This fixes #25212. - - - - - 1bdb1317 by Cheng Shao at 2024-10-22T16:31:17-04:00 hadrian: enable late-CCS for perf flavour as well This patch enables late-CCS for perf flavour so that the testsuite can pass for perf as well. Fixes #25308. - - - - - fde12aba by Cheng Shao at 2024-10-22T16:31:54-04:00 hadrian: make sure ghc-bin internal-interpreter is disabled for stage0 when not cross compiling This patch disables internal-interpreter flag for stage0 ghc-bin when not cross compiling, see added comment for explanation. Fixes #25406. - - - - - 6ab8d751 by ignatiusm at 2024-10-24T01:23:35-04:00 Improve heap overflow exception message (#25198) Catch heap overflow exceptions and suggest using `+RTS -M<size>`. Fix #25198 - - - - - b3f7fb80 by Rodrigo Mesquita at 2024-10-24T01:24:12-04:00 determinism: Interface re-export list det In 'DocStructureItem' we want to make sure the 'Avails' are sorted, for interface file determinism. This commit introduces 'DetOrdAvails', a newtype that should only be constructed by sorting Avails with 'sortAvails' unless the avails are known to be deterministically ordered. This newtype is used by 'DocStructureItem' where 'Avails' was previously used to ensure the list of avails is deterministically sorted by construction. Note: Even though we order the constructors and avails in the interface file, the order of constructors in the haddock output is still determined from the order of declaration in the source. This was also true before, when the list of constructors in the interface file <docs> section was non-deterministic. Some haddock tests such as "ConstructorArgs" observe this (check the order of constructors in out/ConstructorArgs.html vs src/ConstructorArgs.hs vs its interface file) The updated tests are caused by haddock corners where the order in the source is not preserved (and was non-deterministic before this PR): * Module header in the latex backend * Re-export of pattern synonyms associated to a datatype (#25342) Fixes #25304 - - - - - e39c8c99 by Rodrigo Mesquita at 2024-10-24T01:24:12-04:00 Revert "ci: Allow abi-test to fail." After #25304, the abi-test with interface and object determinism succeeds. This reverts commit 7b37afc9f3e79559055488998ee73187886a0e00. - - - - - 7b1b0c6d by Alan Zimmerman at 2024-10-24T13:07:02-04:00 EPA: reduce [AddEpann] in AnnList Remove it from the `al_rest` field, and make `AnnList` parameterized on a type to be used in `al_rest`, for the various use cases. - - - - - 4a00731e by Rodrigo Mesquita at 2024-10-24T13:07:38-04:00 Fix -fobject-determinism flag definition The flag should be defined as an fflag to make sure the -fno-object-determinism flag is also an available option. Fixes #25397 - - - - - 55e4b9f2 by Sebastian Graf at 2024-10-25T07:01:54-04:00 CorePrep: Attach evaldUnfolding to floats to detect more values See `Note [Pin evaluatedness on floats]`. - - - - - 9f57c96d by Sebastian Graf at 2024-10-25T07:01:54-04:00 Make DataCon workers strict in strict fields (#20749) This patch tweaks `exprIsConApp_maybe`, `exprIsHNF` and friends, and Demand Analysis so that they exploit and maintain strictness of DataCon workers. See `Note [Strict fields in Core]` for details. Very little needed to change, and it puts field seq insertion done by Tag Inference into a new perspective: That of *implementing* strict field semantics. Before Tag Inference, DataCon workers are strict. Afterwards they are effectively lazy and field seqs happen around use sites. History has shown that there is no other way to guarantee taggedness and thus the STG Strict Field Invariant. Knock-on changes: * I reworked the whole narrative around "Tag inference". It's now called "EPT enforcement" and I recycyled the different overview Notes into `Note [EPT enforcement]`. * `exprIsHNF` previously used `exprOkForSpeculation` on unlifted arguments instead of recursing into `exprIsHNF`. That regressed the termination analysis in CPR analysis (which simply calls out to `exprIsHNF`), so I made it call `exprOkForSpeculation`, too. * There's a small regression in Demand Analysis, visible in the changed test output of T16859: Previously, a field seq on a variable would give that variable a "used exactly once" demand, now it's "used at least once", because `dmdTransformDataConSig` accounts for future uses of the field that actually all go through the case binder (and hence won't re-enter the potential thunk). The difference should hardly be observable. * The Simplifier's fast path for data constructors only applies to lazy data constructors now. I observed regressions involving Data.Binary.Put's `Pair` data type. * Unfortunately, T21392 does no longer reproduce after this patch, so I marked it as "not broken" in order to track whether we regress again in the future. Fixes #20749, the satisfying conclusion of an annoying saga (cf. the ideas in #21497 and #22475). Compiler perf generally improves, sometimes drastically: Baseline Test Metric value New value Change -------------------------------------------------------------------------------- ManyConstructors(normal) ghc/alloc 3,629,760,116 3,711,852,800 +2.3% BAD MultiLayerModulesTH_OneShot(normal) ghc/alloc 2,502,735,440 2,565,282,888 +2.5% BAD T12707(normal) ghc/alloc 804,399,798 791,807,320 -1.6% GOOD T17516(normal) ghc/alloc 964,987,744 1,008,383,520 +4.5% T18140(normal) ghc/alloc 75,381,152 49,860,560 -33.9% GOOD T18698b(normal) ghc/alloc 232,614,457 184,262,736 -20.8% GOOD T18923(normal) ghc/alloc 62,002,368 58,301,408 -6.0% GOOD T20049(normal) ghc/alloc 75,719,168 70,494,368 -6.9% GOOD T3294(normal) ghc/alloc 1,237,925,833 1,157,638,992 -6.5% GOOD T9233(normal) ghc/alloc 686,490,105 635,166,688 -7.5% GOOD geo. mean -0.7% minimum -33.9% maximum +4.5% I looked at T17516. It seems we do a few more simplifier iterations and end up with a larger program. It seems that some things inline more, while other things inline less. I don't see low-hanging fruit. I also looked at MultiLayerModulesTH_OneShot. It appears we generate a strange join point in the `getUnique` method of `Uniquable GHC.Unit.Types.Module` that should better call-site inline, but does not. Perhaps with !11492. NoFib does not seem affected much either: +-------------------------------++--+------------+-----------+---------------+-----------+ | || | base/ | std. err. | T20749/ (rel) | std. err. | +===============================++==+============+===========+===============+===========+ | spectral/last-piece || | 7.263e8 | 0.0% | +0.62% | 0.0% | +===============================++==+============+===========+===============+===========+ | geom mean || | +0.00% | | | | +-------------------------------++--+------------+-----------+---------------+-----------+ I had a look at last-piece. Nothing changes in stg-final, but there is a bit of ... movement around Data.Map.insert's use of GHC.Exts.lazy that is gone in stg-final. Co-Authored-By: Jaro Reinders <jaro.reinders at gmail.com> Metric Decrease: T12707 T18140 T18698b T18923 T19695 T20049 T3294 T9233 T21839c Metric Increase: ManyConstructors MultiLayerModulesTH_OneShot - - - - - 0225249a by Simon Peyton Jones at 2024-10-25T07:02:32-04:00 Some renaming This is a pure refactor, tidying up some inconsistent naming: isEqPred --> isEqClassPred isEqPrimPred --> isEqPred isReprEqPrimPred --> isReprEqPred mkPrimEqPred --> mkNomEqPred mkReprPrimEqPred --> mkReprEqPred mkPrimEqPredRold --> mkEqPredRole Plus I moved mkNomEqPred, mkReprEqPred, mkEqPredRolek from GHC.Core.Coercion to GHC.Core.Predicate where they belong. That means that Coercion imports Predicate rather than vice versa -- better. - - - - - 15a3456b by Ryan Hendrickson at 2024-10-25T07:02:32-04:00 compiler: Fix deriving with method constraints See Note [Inferred contexts from method constraints] Co-authored-by: Simon Peyton Jones <simon.peytonjones at gmail.com> - - - - - dbc77ce8 by Alan Zimmerman at 2024-10-25T18:20:13+01:00 EPA: Remove AddEpann commit 7 EPA: Remove [AddEpAnn] from HYPHEN in Parser.y The return value is never used, as it is part of the backpack configuration parsing. EPA: Remove last [AddEpAnn] usages Remove residual usage in GHC. It is still used - In haddock TTG extension point definitions (to be removed) - Some check-exact residual, to be removed - Comments around DisambECP in PostProcess EPA: Clean up [AddEpAnn] from check-exact There is one left, to be cleaned up when we remove AddEpann itself EPA: Remove [AddEpAnn] from haddock The TTG extension points need a value, it is not critical what that value is, in most cases. EPA: Remove AddEpAnn from HsRuleAnn EPA: Remove AddEpAnn from HsCmdArrApp - - - - - 23ddcc01 by Simon Peyton Jones at 2024-10-26T12:44:34-04:00 Fix optimisation of InstCo It turned out (#25387) that the fix to #15725 was not quite right: commit 48efbc04bd45d806c52376641e1a7ed7278d1ec7 Date: Mon Oct 15 10:25:02 2018 +0200 Fix #15725 with an extra Sym Optimising InstCo is quite subtle, and the invariants surrounding the LiftingContext in the coercion optimiser were not stated explicitly. This patch refactors the InstCo optimisation, and documents these invariants. See * Note [Optimising InstCo] * Note [The LiftingContext in optCoercion] I also did some refactoring of course: * Instead of a Bool swap-flag, I am not using GHC.Types.Basic.SwapFlag * I added some invariant-checking the coercion-construction functions in GHC.Core.Coercion.Opt. (Sadly these invariants don't hold during typechecking, becuase the types are un-zonked, so I can't put these checks in GHC.Core.Coercion.) - - - - - 589fea7f by Cheng Shao at 2024-10-27T05:36:38-04:00 ghcid: use multi repl for ghcid - - - - - d52a0475 by Andrew Lelechenko at 2024-10-27T05:37:13-04:00 documentation: add motivating section to Control.Monad.Fix - - - - - 301c3b54 by Cheng Shao at 2024-10-27T05:37:49-04:00 wasm: fix safari console error message related to import("node:timers") This patch fixes the wasm backend JSFFI prelude script to avoid calling `import("node:timers")` on non-deno hosts. Safari doesn't like it and would print an error message to the console. Fixes https://gitlab.haskell.org/ghc/ghc-wasm-meta/-/issues/13. - - - - - 9f02dfb5 by Simon Peyton Jones at 2024-10-27T15:10:08-04:00 Add a missing tidy in UnivCo We were failing to tidy the argument coercions of a UnivCo, which led directly to #25391. The fix is, happily, trivial. I don't have a small repro case (it came up when building horde-ad, which uses typechecker plugins). It should be possible to make a repro case, by using a plugin (which builds a UnivCo) but I decided it was not worth the bother. The bug is egregious and easily fixed. - - - - - 853050c3 by Andrew Lelechenko at 2024-10-27T15:10:44-04:00 Bump text submodule to 2.1.2 - - - - - 90746a59 by Andrew Lelechenko at 2024-10-27T15:10:44-04:00 hadrian: allow -Wunused-imports for text package - - - - - 8a6691c3 by Alan Zimmerman at 2024-10-27T19:44:48+00:00 EPA: Remove AddEpAnn Commit 8/final EPA: Remove AddEpAnn from AnnList EPA: Remove AddEpAnn from GrhsAnn This is the last actual use EPA: Remove NameAdornment from NameAnn Also rework AnnContext to use EpToken, and AnnParen EPA: Remove AddEpAnn. Final removal There are now none left, except for in a large note/comment in PostProcess, describing the historical transition to the disambiguation infrastructure - - - - - d5e7990c by Alan Zimmerman at 2024-10-28T21:41:05+00:00 EPA: Remove AnnKeywordId. This was used as part of AddEpAnn, and is no longer needed. Also remove all the haddock comments about which of are attached to the various parts of the AST. This is now clearly captured in the appropriate TTG extension points, and the `ExactPrint.hs` file. - - - - - e08b8370 by Serge S. Gulin at 2024-10-29T23:17:01-04:00 JS: Re-add optimization for literal strings in genApp (fixes #23479) Based on https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10588/ Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Andrei Borzenkov <root at sandwitch.dev> Co-authored-by: Danil Berestov <goosedb at yandex.ru> ------------------------- Metric Decrease: T25046_perf_size_gzip size_hello_artifact size_hello_artifact_gzip size_hello_unicode size_hello_unicode_gzip ------------------------- - - - - - e3496ef6 by Cheng Shao at 2024-10-29T23:17:37-04:00 compiler: remove unused hscDecls/hscDeclsWithLocation This patch removes unused `hscDecls`/`hscDeclsWithLocation` functions from the compiler, to reduce maintenance burden when doing refactorings related to ghci. - - - - - b1eed26f by Cheng Shao at 2024-10-29T23:18:13-04:00 testsuite: add T25414 test case marked as broken This commit adds T25414 test case to demonstrate #25414. It is marked as broken and will be fixed by the next commit. - - - - - e70009bc by Cheng Shao at 2024-10-29T23:18:13-04:00 driver: fix foreign stub handling logic in hscParsedDecls This patch fixes foreign stub handling logic in `hscParsedDecls`. Previously foreign stubs were simply ignored here, so any feature that involve foreign stubs would not work in ghci (e.g. CApiFFI). The patch reuses `generateByteCode` logic and eliminates a large chunk of duplicate logic that implements Core to bytecode generation pipeline here. Fixes #25414. - - - - - 1d7cd7fe by Andreas Klebinger at 2024-10-30T19:14:28-04:00 Add since tag for -fwrite-if-compression in user guide. Partial fix for #25395 - - - - - b349fd1b by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: Remove some unused functions - - - - - f859d61c by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: use explicit vertical bar token for ExplicitSum / SumPat - - - - - 721ac00d by Ben Gamari at 2024-10-31T08:37:38-04:00 rts/Disassembler: Fix encoding of BRK_FUN instruction The offset of the CC field was not updated after the encoding change in b85b11994e0130ff2401dd4bbdf52330e0bcf776. Fix this. Fixes #25374. - - - - - 0bc94360 by Alan Zimmerman at 2024-10-31T08:38:15-04:00 EPA: Bring in last EpToken usages For import declarations, NameAnnCommas and NPlusKPat. And remove anchor, it is the same as epaLocationRealSrcSpan. - - - - - 0b11cdc0 by sheaf at 2024-10-31T08:38:55-04:00 Assert that ctEvCoercion is called on an equality Calling 'ctEvCoercion' on non-equality constraints is always incorrect. We add an assertion to this function to detect such cases; for example a type-checking plugin might erroneously do this. - - - - - ea458779 by doyougnu at 2024-11-01T18:11:33-04:00 ghc-internal: strict, unboxed src loc ranges - closes: #20449 - See CLC proposal: #55 - - - - - 778ac793 by Kazuki Okamoto at 2024-11-01T18:12:13-04:00 No haddock markup in doctest line - - - - - cf0deeaf by Andreas Klebinger at 2024-11-02T17:54:52-04:00 Reword -fexpose-overloaded-unfoldings docs. This should make them slightly clearer. Fixes #24844 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 1c21e7d4 by Andreas Klebinger at 2024-11-02T17:55:29-04:00 Compile T25062 simd tests even if we can't run them. Helps avoid them being utterly broken. Fixes #25341 - - - - - 573cad4b by Cheng Shao at 2024-11-02T17:56:04-04:00 Remove unused USE_REPORT_PRELUDE code paths from the tree This patch removes unused `USE_REPORT_PRELUDE` code paths from the tree. They have been present since the first git revision 4fb94ae5e5d632748fa2e6c35e259eccc5a1a3f4, and might have been useful for debugging purposes many years ago, but these code paths are never actually built. Removing these ease maintenance of relevant modules in the future, and also allows us to get rid of `CPP` extension in those modules as a nice byproduct. - - - - - 97f600c6 by Hassan Al-Awwadi at 2024-11-04T15:52:12+00:00 Refactored BooleanFormula to be in line with TTG (#21592) There are two parts to this commit. * We moved the definition of BooleanFormula over to L.H.S.BooleanFormula * We parameterized the BooleanFormula over the pass The GHC specific details of BooleanFormula remain in Ghc.Data.BooleanFormula. Because its parameterized over the pass its no longer a functor or traversable, but we defined bfMap and bfTraverse for the cases where we needed fmap and traverse originally. Most other changes are just churn. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot ------------------------- - - - - - d4fd3580 by Andreas Klebinger at 2024-11-05T07:36:16-05:00 ghc-heap: Fix incomplete selector warnings. Use utility functions instead of selectors to read partial attributes. Part of fixing #25380. - - - - - fdd9f62a by Peter Trommler at 2024-11-05T07:36:51-05:00 PPC NCG: Implement fmin and fmax - - - - - 8e217256 by Mike Pilgrem at 2024-11-07T04:34:20-05:00 Re CLC #293 - Don't specify Data.List.NonEmpty in terms of partial See https://github.com/haskell/core-libraries-committee/issues/293 `List.init` had already been driven out of `tails1` by 21fc180bec93d964a7f4ffdf2429ef6f74b49ab6 but this specification also avoided partial `fromList`, so I preferred it. The `changelog.md` for `base` is updated, with an entry added under `base-4.22.0.0`. - - - - - 346e4cd1 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: copy zip files into the correct directory Fixes #25446 - - - - - bbdbe225 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: Sign .gz bindists too Fixes #25447 - - - - - 0c722e14 by Hécate Kleidukos at 2024-11-07T04:35:37-05:00 hadrian: Enforce the usage of GHC >=9.8.1 for ghci-multi GHC 9.6 no good when it comes to multi-repl stuff, despite being well within the range of n-2 releases for bootstrapping, when the script was adapted to load haddock, in !12851 - - - - - d8f8a1c3 by Sylvain Henry at 2024-11-07T19:27:46-05:00 Handle the special ghc-prim:GHC.Prim module in the compiler Before this patch, some custom hacks were necessary in ghc-prim's Setup.hs to register the GHC.Prim (virtual) module and in Hadrian to generate haddocks properly. In this patch we special-case this module in the compiler itself instead (which it already is, see ghcPrimIface in GHC.Iface.Load). From Cabal/Hadrian's perspective GHC.Prim is now just a normal autogenerated module. This simplification is worthwhile on its own. It was found while looking into the work needed for #24453 which aims to merge ghc-prim, ghc-bignum, and ghc-internal. It's also one step closer to remove ghc-prim's custom setup. - - - - - a55adc8e by Cheng Shao at 2024-11-07T19:28:22-05:00 Clean up obsolete CPP guarded code paths from the tree This patch cleans up obsolete CPP guarded code paths from the tree. The minimum supported boot GHC version is 9.6, and all the pre-9.6 era code paths can be removed. - - - - - 9ede97f3 by Cheng Shao at 2024-11-07T19:28:58-05:00 Remove obsolete executable wrappers from the tree The executable wrappers are handled by hadrian and bindist Makefile. The various .wrapper scripts in the tree are unused since removal of Make build system, so this patch removes them all. - - - - - 7d42b2df by tristian at 2024-11-07T19:29:40-05:00 TcRnDuplicateDecls now suggests to use the DuplicateRecordFields extension. Fixes: !24627 - - - - - e56ed179 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: normalise some versions in callstacks (cherry picked from commit f230e29f30d0c1c566d4dd251807fcab76a2710e) - - - - - a28fc903 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: use -fhide-source-paths to normalise some backpack tests (cherry picked from commit b19de476bc5ce5c7792e8af1354b94a4286a1a13) - - - - - ed16d303 by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite/haddock: strip version identifiers and unit hashes from html tests (cherry picked from commit fbf0889eadc410d43dd5c1657e320634b6738fa5) - - - - - e45e5836 by Zubin Duggal at 2024-11-11T15:16:36+05:30 haddock: oneshot tests can drop files if they share modtimes. Stop this by including the filename in the key. Ideally we would use `ghc -M` output to do a proper toposort Partially addresses #25372 (cherry picked from commit e78c7ef96e395f1ef41f04790aebecd0409b92b9) - - - - - 9104e6eb by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: fix normalisation of T9930fail so that it doesn't get tripped up by ghc executable (ARGV[0]) differences (cherry picked from commit a79a587e025d42d34bb30e115fc5c7cab6c1e030) - - - - - 2c31264a by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: normalise windows file seperators (cherry picked from commit f858875e03b9609656b542aaaaff85ad0a83878a) - - - - - 2807f91b by Zubin Duggal at 2024-11-11T15:21:30+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites - - - - - c02add17 by Ben Gamari at 2024-11-12T01:22:11-05:00 configure: Check version number validity Here we verify the previously informal invariant that stable release version numbers must have three components, preventing costly failed releases. Specifically, the check fails in the following scenarios: * `version=9.13` while `RELEASE=YES` since this would imply a release made from an unstable branch * `version=9.13.0` since unstable versions should only have two components * `version=9.12` since this has the wrong number of version components for a stable branch Fixes #25390. - - - - - 747fd322 by Teo Camarasu at 2024-11-12T01:22:49-05:00 docs: link to #14474 in the template-haskell docs - - - - - 6d96bb62 by Zubin Duggal at 2024-11-12T01:23:25-05:00 testsuite: normalise execvp vs exec differences in process tests Fixes #25431 - - - - - 502e6711 by Torsten Schmits at 2024-11-12T01:24:01-05:00 fix test lint that accumulated while the checks were broken I didn't fix the issues flagged by the #ifdef linter because it were so many that it seemed like the rule has become obsolete. - - - - - 223a4cb5 by Torsten Schmits at 2024-11-12T01:24:02-05:00 test driver: fix file collection for regex linters When a testsuite linter is executed with the `tracked` strategy, the driver runs `git ls-tree` to collect eligible files. This appears to have ceased producing any paths – `ls-tree` restricts its results to the current working directory, which is `testsuite/tests/linters` in this case. As a quick fix, this patch changes the working directory to match expectations. - - - - - 9ad9ac63 by Alan Zimmerman at 2024-11-12T01:24:39-05:00 EPA: Capture location of '_' for wild card type binder And keep track of promotion status in HsExplicitTupleTy, so the round-trip ppr test works for it. Updates Haddock output too, using the PromotionFlag in HsExplicitTupleTy. Closes #25454 - - - - - c37b96fa by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix setImmediate() implementation for Cloudflare Workers This patch fixes setImmediate() implementation for Cloudflare Workers in the wasm backend's js prelude script. Cloudflare Workers doesn't support the MessageChannel API, and we use a setTimeout() based fallback implementation in this case. - - - - - bea8ea4c by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix FinalizationRegistry logic for Cloudflare Workers This patch fixes FinalizationRegistry related logic for Cloudflare Workers in wasm backend js post linker. Cloudflare Workers doesn't support FinalizationRegistry, in this case we use a dummy implementation that doesn't do anything. - - - - - 00d551bf by Cheng Shao at 2024-11-13T08:48:21-05:00 Remove obsolete cross-port script This patch removes the obsolete cross-port script in the tree. The script was based on the legacy Make build system which has been pruned from the tree long ago. For hadrian, proper support for two-stage bootstrapping onto a new unsupported platform is a work in progress in !11444. - - - - - 75a2eae4 by Cheng Shao at 2024-11-13T08:48:58-05:00 hadrian: fix bindist makefile for wasm32-wasi target This patch fixes one incoherent place between bindist makefile and hadrian logic: I forgot to include wasi/wasm32 in OsSupportsGHCi/ArchSupportsGHCi as well. And this results in incorrect settings file generated after installing the bindist, and "Use interpreter"/"Have interpreter" fields incorrectly have "NO" values where they should be "YES" like --info output of in-tree version. - - - - - 0614abef by Alan Zimmerman at 2024-11-13T08:49:34-05:00 EPA: Correctly capture leading semis in decl list Closes #25467 - - - - - 00d58ae1 by Sebastian Graf at 2024-11-13T15:21:23-05:00 DmdAnal: Make `prompt#` lazy (#25439) This applies the same treatment to `prompt#` as for `catch#`. See `Note [Strictness for mask/unmask/catch/prompt]`. Fixes #25439. - - - - - 93233a66 by Ben Gamari at 2024-11-13T15:21:59-05:00 boot: Do not attempt to update config.sub While Apple ARM hardware was new we found that the autoconf scripts included in some boot packages were too old. As a mitigation for this, we introduced logic in the `boot` script to update the `config.sub` with that from the GHC tree. However, this causes submodules which have `config.sub` committted to appear to be dirty. This is a considerable headache. Now since `config.sub` with full platform support is more common we can remove `boot`'s `config.sub` logic. Fixes #19574. - - - - - fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 0c86f627 by Ben Gamari at 2024-12-13T20:27:28-05:00 rts: Fix incorrect format specifiers in era profiling Fixes #25581. - - - - - 26 changed files: - .ghcid - + .git-blame-ignore-revs - .gitattributes - .gitignore - .gitlab-ci.yml - + .gitlab/README.md - .gitlab/ci.sh - − .gitlab/circle-ci-job.sh - .gitlab/darwin/nix/sources.json - .gitlab/darwin/toolchain.nix - − .gitlab/gen-ci.cabal - − .gitlab/gen_ci.hs - + .gitlab/generate-ci/LICENSE - + .gitlab/generate-ci/README.mkd - + .gitlab/generate-ci/flake.lock - + .gitlab/generate-ci/flake.nix - + .gitlab/generate-ci/gen_ci.hs - + .gitlab/generate-ci/generate-ci.cabal - + .gitlab/generate-ci/generate-job-metadata - + .gitlab/generate-ci/generate-jobs - .gitlab/hie.yaml → .gitlab/generate-ci/hie.yaml - − .gitlab/generate_job_metadata - − .gitlab/generate_jobs - .gitlab/hello.hs - − .gitlab/issue_templates/bug.md - + .gitlab/issue_templates/default.md The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a623a3dad3dc9b4e74c5c2562b9f9a0058720d29...0c86f627786488b1ac97f5c0a5d8c928cc97a6be -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a623a3dad3dc9b4e74c5c2562b9f9a0058720d29...0c86f627786488b1ac97f5c0a5d8c928cc97a6be You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 14 09:18:07 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Sat, 14 Dec 2024 04:18:07 -0500 Subject: [Git][ghc/ghc][wip/ghc-9.12-release] 6 commits: ghc-internal: Drop GHC.Internal.Data.Enum Message-ID: <675d4d4f24340_26142c41633841755@gitlab.mail> Zubin pushed to branch wip/ghc-9.12-release at Glasgow Haskell Compiler / GHC Commits: e226fcf0 by Ben Gamari at 2024-12-14T14:47:47+05:30 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. (cherry picked from commit 55d8304e02000b3ec33d254794e84d159dc93926) - - - - - 227c86d4 by Ben Gamari at 2024-12-14T14:47:47+05:30 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 (cherry picked from commit 56b9f484fd89b5c2c69045dcd5690f68699ba0b1) - - - - - ce8458e9 by Ben Gamari at 2024-12-14T14:47:47+05:30 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 (cherry picked from commit 336d392e417203c492fec15ecf91dd444cb70936) - - - - - 65c1928d by Ben Gamari at 2024-12-14T14:47:47+05:30 base: Mention incorrect Data.Enum addition in changelog (cherry picked from commit dd7ca93903eba8c63261656ca3d245f9e8baa662) - - - - - fee61e14 by Ben Gamari at 2024-12-14T14:47:47+05:30 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. (cherry picked from commit dfd1db48aaa1ee6c109e9a05ce34672418f17f59) - - - - - 643e280c by Zubin Duggal at 2024-12-14T14:47:47+05:30 RELEASE=YES - - - - - 14 changed files: - configure.ac - libraries/base/base.cabal.in - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/Data/Enum.hs → libraries/base/src/Data/Bounded.hs - libraries/base/src/Data/Enum.hs - libraries/ghc-internal/ghc-internal.cabal.in - libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs - libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs - 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 Changes: ===================================== configure.ac ===================================== @@ -13,7 +13,7 @@ dnl # see what flags are available. (Better yet, read the documentation!) # -AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) +AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.1], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) # Version on master must be X.Y (not X.Y.Z) for ProjectVersionMunged variable # to be useful (cf #19058). However, the version must have three components # (X.Y.Z) on stable branches (e.g. ghc-9.2) to ensure that pre-releases are @@ -22,7 +22,7 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-ha AC_CONFIG_MACRO_DIRS([m4]) # Set this to YES for a released version, otherwise NO -: ${RELEASE=NO} +: ${RELEASE=YES} # The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line # above. If this is not a released version, then we will append the ===================================== libraries/base/base.cabal.in ===================================== @@ -46,8 +46,10 @@ Library , Data.Bifoldable1 , Data.Bifunctor , Data.Bitraversable + , Data.Bounded , Data.Char , Data.Complex + , Data.Enum , Data.Fixed , Data.Foldable1 , Data.Functor.Classes @@ -95,7 +97,6 @@ Library , Data.Dynamic , Data.Either , Data.Eq - , Data.Enum , Data.Foldable , Data.Function , Data.Functor ===================================== libraries/base/changelog.md ===================================== @@ -2,6 +2,8 @@ ## 4.21.0.0 December 2024 * Shipped with GHC 9.12.1 + * Introduce `Data.Bounded` module exporting the `Bounded` typeclass (finishing [CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) + * Deprecate export of `Bounded` class from `Data.Enum` ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * `GHC.Desugar` has been deprecated and should be removed in GHC 9.14. ([CLC proposal #216](https://github.com/haskell/core-libraries-committee/issues/216)) * Add a `readTixFile` field to the `HpcFlags` record in `GHC.RTS.Flags` ([CLC proposal #276](https://github.com/haskell/core-libraries-committee/issues/276)) * Add `compareLength` to `Data.List` and `Data.List.NonEmpty` ([CLC proposal #257](https://github.com/haskell/core-libraries-committee/issues/257)) @@ -48,8 +50,9 @@ `ioError` to prevent leaking the implementation of these error functions into the callstack. -## 4.20.0.0 May 2024 +## 4.20.0.0 *May 2024* * Shipped with GHC 9.10.1 + * Introduce `Data.Enum` module exporting both `Enum` and `Bounded`. Note that the export of `Bounded` will be deprecated in a future release ([CLC proposal #208](https://github.com/haskell/core-libraries-committee/issues/208)) * Deprecate `GHC.Pack` ([#21461](https://gitlab.haskell.org/ghc/ghc/-/issues/21461)) * Export `foldl'` from `Prelude` ([CLC proposal #167](https://github.com/haskell/core-libraries-committee/issues/167)) * The top-level handler for uncaught exceptions now displays the output of `displayException` rather than `show` ([CLC proposal #198](https://github.com/haskell/core-libraries-committee/issues/198)) ===================================== libraries/ghc-internal/src/GHC/Internal/Data/Enum.hs → libraries/base/src/Data/Bounded.hs ===================================== @@ -1,22 +1,25 @@ +{-# LANGUAGE Safe #-} {-# LANGUAGE NoImplicitPrelude #-} ----------------------------------------------------------------------------- -- | --- Module : GHC.Internal.Data.Enum +-- Module : Data.Bounded -- Copyright : (c) The University of Glasgow, 1992-2002 -- License : see libraries/base/LICENSE -- --- Maintainer : ghc-devs at haskell.org +-- Maintainer : cvs-ghc at haskell.org -- Stability : stable -- Portability : non-portable (GHC extensions) -- --- The 'Enum' and 'Bounded' classes. +-- The 'Bounded' class. +-- +-- @since 4.22.0.0 -- ----------------------------------------------------------------------------- -module GHC.Internal.Data.Enum +module Data.Bounded ( Bounded(..) - , Enum(..) ) where -import GHC.Internal.Enum +import GHC.Enum + ===================================== libraries/base/src/Data/Enum.hs ===================================== @@ -1,7 +1,8 @@ {-# LANGUAGE Safe #-} +{-# LANGUAGE NoImplicitPrelude #-} +----------------------------------------------------------------------------- -- | --- -- Module : Data.Enum -- Copyright : (c) The University of Glasgow, 1992-2002 -- License : see libraries/base/LICENSE @@ -10,12 +11,16 @@ -- Stability : stable -- Portability : non-portable (GHC extensions) -- --- The 'Enum' and 'Bounded' classes. +-- The 'Enum' class. +-- +-- @since 4.20.0.0 -- +----------------------------------------------------------------------------- module Data.Enum - (Bounded(..), - Enum(..) - ) where + ( Enum(..) + , {-# DEPRECATED "Bounded should be imported from Data.Bounded" #-} + Bounded(..) + ) where -import GHC.Internal.Data.Enum \ No newline at end of file +import GHC.Internal.Enum ===================================== libraries/ghc-internal/ghc-internal.cabal.in ===================================== @@ -117,7 +117,6 @@ Library GHC.Internal.Data.Dynamic GHC.Internal.Data.Either GHC.Internal.Data.Eq - GHC.Internal.Data.Enum GHC.Internal.Data.Foldable GHC.Internal.Data.Function GHC.Internal.Data.Functor ===================================== libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs ===================================== @@ -1,6 +1,7 @@ {-# LANGUAGE Trustworthy #-} -{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE StandaloneDeriving #-} ----------------------------------------------------------------------------- -- | @@ -34,6 +35,8 @@ module GHC.Internal.IO.SubSystem ( ) where import GHC.Internal.Base +import GHC.Internal.Show +import GHC.Internal.Enum #if defined(mingw32_HOST_OS) import GHC.Internal.IO.Unsafe @@ -55,6 +58,10 @@ data IoSubSystem -- native APIs for I/O, including IOCP and RIO. deriving (Eq) +-- N.B. These are currently unused by GHC but is needed for stability of @base at . +deriving instance Enum IoSubSystem +deriving instance Show IoSubSystem + -- | Conditionally execute an action depending on the configured I/O subsystem. -- On POSIX systems always execute the first action. -- On Windows execute the second action if WINIO as active, otherwise fall back to ===================================== libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs ===================================== @@ -18,7 +18,7 @@ import GHC.Generics (Generic) import GHC.Internal.Base import GHC.Internal.Show import GHC.Internal.Generics -import GHC.Internal.Data.Enum +import GHC.Internal.Enum #endif -- | The language extensions known to GHC. ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11536,10 +11544,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11564,6 +11568,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11618,10 +11626,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11634,6 +11638,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11692,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -14571,10 +14579,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -14599,6 +14603,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -14653,10 +14661,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -14669,6 +14673,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -14727,6 +14735,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -15544,6 +15553,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.JS.Prim.JSException -- Defined in ‘GHC.Internal.JS.Prim’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11800,10 +11808,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11828,6 +11832,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11882,10 +11890,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11898,6 +11902,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11957,6 +11965,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12789,6 +12798,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IO.Windows.Handle.CONSOLE_READCONSOLE_CONTROL -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.NativeHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.ConsoleHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -751,6 +751,14 @@ module Data.Bool where otherwise :: Bool (||) :: Bool -> Bool -> Bool +module Data.Bounded where + -- Safety: Safe + type Bounded :: * -> Constraint + class Bounded a where + minBound :: a + maxBound :: a + {-# MINIMAL minBound, maxBound #-} + module Data.Char where -- Safety: Trustworthy type Char :: * @@ -11536,10 +11544,6 @@ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Bounded GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11564,6 +11568,10 @@ instance GHC.Internal.Enum.Bounded () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Bounded GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Bounded GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Bounded (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (t :: k). GHC.Internal.Enum.Bounded (GHC.Internal.Data.Proxy.Proxy t) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Bounded (f (g a)) => GHC.Internal.Enum.Bounded (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ instance GHC.Internal.Enum.Bounded GHC.Internal.Int.Int16 -- Defined in ‘GHC.Internal.Int’ @@ -11618,10 +11626,6 @@ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Inter instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Iff a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Ior a) -- Defined in ‘GHC.Internal.Data.Bits’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Bits.Xor a) -- Defined in ‘GHC.Internal.Data.Bits’ -instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ -instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ -instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance GHC.Internal.Enum.Enum GHC.Types.Bool -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Char -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Int -- Defined in ‘GHC.Internal.Enum’ @@ -11634,6 +11638,10 @@ instance GHC.Internal.Enum.Enum () -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecCount -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.VecElem -- Defined in ‘GHC.Internal.Enum’ instance GHC.Internal.Enum.Enum GHC.Types.Word -- Defined in ‘GHC.Internal.Enum’ +instance GHC.Internal.Enum.Enum GHC.Internal.Unicode.GeneralCategory -- Defined in ‘GHC.Internal.Unicode’ +instance forall k (a :: k) (b :: k). (a ~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k1 k2 (a :: k1) (b :: k2). (a ~~ b) => GHC.Internal.Enum.Enum (a GHC.Internal.Data.Type.Equality.:~~: b) -- Defined in ‘GHC.Internal.Data.Type.Equality’ +instance forall k (s :: k). GHC.Internal.Enum.Enum (GHC.Internal.Data.Proxy.Proxy s) -- Defined in ‘GHC.Internal.Data.Proxy’ instance forall k (a :: k). GHC.Internal.Enum.Enum (Data.Fixed.Fixed a) -- Defined in ‘Data.Fixed’ instance forall k1 k2 (f :: k1 -> *) (g :: k2 -> k1) (a :: k2). GHC.Internal.Enum.Enum (f (g a)) => GHC.Internal.Enum.Enum (Data.Functor.Compose.Compose f g a) -- Defined in ‘Data.Functor.Compose’ instance forall a. GHC.Internal.Enum.Enum a => GHC.Internal.Enum.Enum (GHC.Internal.Data.Functor.Identity.Identity a) -- Defined in ‘GHC.Internal.Data.Functor.Identity’ @@ -11692,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12514,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -10558,6 +10558,7 @@ instance forall a. GHC.Internal.Data.String.IsString a => GHC.Internal.Data.Stri instance forall a. (a ~ GHC.Types.Char) => GHC.Internal.Data.String.IsString [a] -- Defined in ‘GHC.Internal.Data.String’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. (GHC.Internal.Enum.Enum a, GHC.Internal.Enum.Bounded a, GHC.Classes.Eq a) => GHC.Internal.Enum.Enum (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10576,6 +10577,7 @@ instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Inter instance forall a. GHC.Internal.Show.Show (GHC.Internal.Ptr.FunPtr a) -- Defined in ‘GHC.Internal.Ptr’ instance forall a. GHC.Internal.Show.Show (GHC.Internal.Ptr.Ptr a) -- Defined in ‘GHC.Internal.Ptr’ instance GHC.Internal.Show.Show GHC.Internal.IO.MaskingState -- Defined in ‘GHC.Internal.IO’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ instance GHC.Classes.Eq GHC.Types.Char -- Defined in ‘GHC.Classes’ instance GHC.Classes.Eq GHC.Types.Double -- Defined in ‘GHC.Classes’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 ===================================== @@ -10561,6 +10561,7 @@ instance forall a. GHC.Internal.Data.String.IsString a => GHC.Internal.Data.Stri instance forall a. (a ~ GHC.Types.Char) => GHC.Internal.Data.String.IsString [a] -- Defined in ‘GHC.Internal.Data.String’ instance forall a. GHC.Internal.Enum.Bounded a => GHC.Internal.Enum.Bounded (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. (GHC.Internal.Enum.Enum a, GHC.Internal.Enum.Bounded a, GHC.Classes.Eq a) => GHC.Internal.Enum.Enum (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ @@ -10579,6 +10580,7 @@ instance forall a. GHC.Internal.Show.Show a => GHC.Internal.Show.Show (GHC.Inter instance forall a. GHC.Internal.Show.Show (GHC.Internal.Ptr.FunPtr a) -- Defined in ‘GHC.Internal.Ptr’ instance forall a. GHC.Internal.Show.Show (GHC.Internal.Ptr.Ptr a) -- Defined in ‘GHC.Internal.Ptr’ instance GHC.Internal.Show.Show GHC.Internal.IO.MaskingState -- Defined in ‘GHC.Internal.IO’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Classes.Eq GHC.Types.Bool -- Defined in ‘GHC.Classes’ instance GHC.Classes.Eq GHC.Types.Char -- Defined in ‘GHC.Classes’ instance GHC.Classes.Eq GHC.Types.Double -- Defined in ‘GHC.Classes’ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6cb5e233c48f5b26b7081c207067b7ef92bcc72b...643e280c0f66be4a63ce79fb55dc5ec674b94442 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6cb5e233c48f5b26b7081c207067b7ef92bcc72b...643e280c0f66be4a63ce79fb55dc5ec674b94442 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 14 09:31:31 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Sat, 14 Dec 2024 04:31:31 -0500 Subject: [Git][ghc/ghc][master] TNTC: set CmmProc entry_label properly (#25565) Message-ID: <675d5073c0f96_26142c6e017c4472@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 62a2b25f by Sylvain Henry at 2024-12-14T04:31:09-05:00 TNTC: set CmmProc entry_label properly (#25565) Before this patch we were renaming the entry label of a CmmProc late in the CmmToAsm pass. It led to inconsistencies and to some labels being used in info tables but not being emitted (#25565). Now we set the CmmProc entry label earlier in the StgToCmm monad and we don't renamed it afterwards. - - - - - 2 changed files: - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/StgToCmm/Monad.hs Changes: ===================================== compiler/GHC/CmmToAsm/X86/Ppr.hs ===================================== @@ -76,14 +76,11 @@ pprNatCmmDecl config proc@(CmmProc top_info entry_lbl _ (ListGraph blocks)) = let platform = ncgPlatform config top_info_table = topInfoTable proc -- we need a label to delimit the proc code (e.g. in debug builds). When - -- we have an info table, we reuse the info table label. Otherwise we make - -- a fresh "entry" label from the label of the entry block. We can't reuse - -- the entry block label as-is, otherwise we get redundant labels: - -- delimiters for the entry block and for the whole proc are the same (see - -- #22792). + -- we have an info table, we reuse the info table label. Otherwise we use + -- the entry label. proc_lbl = case top_info_table of Just (CmmStaticsRaw info_lbl _) -> info_lbl - Nothing -> toProcDelimiterLbl entry_lbl + Nothing -> entry_lbl -- handle subsections_via_symbols when enabled and when we have an -- info-table to link to. See Note [Subsections Via Symbols] ===================================== compiler/GHC/StgToCmm/Monad.hs ===================================== @@ -798,7 +798,17 @@ emitProc mb_info lbl live blocks offset do_layout tinfo = TopInfo { info_tbls = DWrap infos , stack_info=sinfo} - proc_block = CmmProc tinfo lbl live blks + -- we must be careful to: + -- 1. not emit a proc label twice (#22792) + -- 2. emit it at least once! (#25565) + -- + -- (2) happened because the entry label was the label of a basic + -- block that got dropped (empty basic block...), hence we never + -- generated a label for it after we fixed (1) where we were + -- always emitting entry label. + proc_lbl = toProcDelimiterLbl lbl + + proc_block = CmmProc tinfo proc_lbl live blks ; state <- getState ; setState $ state { cgs_tops = cgs_tops state `snocOL` proc_block } } View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/62a2b25f6cd1947c85a7d847a8f88bb0de5d80fd -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/62a2b25f6cd1947c85a7d847a8f88bb0de5d80fd You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 14 09:32:21 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Sat, 14 Dec 2024 04:32:21 -0500 Subject: [Git][ghc/ghc][master] 2 commits: Make filter functionality for system tools line-based Message-ID: <675d50a5b0d93_26142c7193b4477cb@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: b339e7c3 by Simon Hengel at 2024-12-14T04:31:47-05:00 Make filter functionality for system tools line-based This is more efficient as: - All existing filter functions were line-based anyway. They broke up the input into lines and then joined it back together. - We already break up the output from system tools into lines when processing it. Splitting up the output of system tools once and then filtering and processing it reduces both code and runtime complexity. - - - - - 39669077 by Simon Hengel at 2024-12-14T04:31:47-05:00 Refactoring: Don't use a `Chan` when parsing SysTools output - - - - - 4 changed files: - compiler/GHC/Driver/Config/Linker.hs - compiler/GHC/Linker/Config.hs - compiler/GHC/SysTools/Process.hs - compiler/GHC/SysTools/Tasks.hs Changes: ===================================== compiler/GHC/Driver/Config/Linker.hs ===================================== @@ -27,9 +27,8 @@ initLinkerConfig dflags = ld_filter = case platformOS (targetPlatform dflags) of OSSolaris2 -> sunos_ld_filter _ -> id - sunos_ld_filter :: String -> String - sunos_ld_filter = unlines . sunos_ld_filter' . lines - sunos_ld_filter' x = if (undefined_found x && ld_warning_found x) + sunos_ld_filter :: [String] -> [String] + sunos_ld_filter x = if (undefined_found x && ld_warning_found x) then (ld_prefix x) ++ (ld_postfix x) else x breakStartsWith x y = break (isPrefixOf x) y ===================================== compiler/GHC/Linker/Config.hs ===================================== @@ -22,6 +22,6 @@ data LinkerConfig = LinkerConfig , linkerOptionsPre :: [Option] -- ^ Linker options (before user options) , linkerOptionsPost :: [Option] -- ^ Linker options (after user options) , linkerTempDir :: TempDir -- ^ Temporary directory to use - , linkerFilter :: String -> String -- ^ Output filter + , linkerFilter :: [String] -> [String] -- ^ Output filter } ===================================== compiler/GHC/SysTools/Process.hs ===================================== @@ -149,7 +149,7 @@ runSomethingResponseFile :: Logger -> TmpFs -> TempDir - -> (String->String) + -> ([String] -> [String]) -> String -> String -> [Option] @@ -195,7 +195,7 @@ runSomethingResponseFile logger tmpfs tmp_dir filter_fn phase_name pgm args mb_e ] runSomethingFiltered - :: Logger -> (String->String) -> String -> String -> [Option] + :: Logger -> ([String] -> [String]) -> String -> String -> [Option] -> Maybe FilePath -> Maybe [(String,String)] -> IO () runSomethingFiltered logger filter_fn phase_name pgm args mb_cwd mb_env = @@ -235,7 +235,7 @@ withPipe = bracket createPipe $ \ (readEnd, writeEnd) -> do hClose readEnd hClose writeEnd -builderMainLoop :: Logger -> (String -> String) -> FilePath +builderMainLoop :: Logger -> ([String] -> [String]) -> FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> IO ExitCode builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = withPipe $ \ (readEnd, writeEnd) -> do @@ -245,13 +245,11 @@ builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = withPipe $ \ (rea associateHandle' =<< handleToHANDLE readEnd #endif - chan <- newChan - -- We use a mask here rather than a bracket because we want -- to distinguish between cleaning up with and without an -- exception. This is to avoid calling terminateProcess -- unless an exception was raised. - let safely inner = mask $ \restore -> do + mask $ \restore -> do -- acquire -- On Windows due to how exec is emulated the old process will exit and -- a new process will be created. This means waiting for termination of @@ -282,9 +280,9 @@ builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = withPipe $ \ (rea getLocaleEncoding >>= hSetEncoding readEnd hSetNewlineMode readEnd nativeNewlineMode hSetBuffering readEnd LineBuffering - let make_reader_proc h = forkIO $ readerProc chan h filter_fn - bracketOnError (make_reader_proc readEnd) killThread $ \_ -> - inner hProcess + messages <- parseBuildMessages . filter_fn . lines <$> hGetContents readEnd + mapM_ processBuildMessage messages + waitForProcess hProcess hClose hStdIn case r of Left (SomeException e) -> do @@ -292,70 +290,55 @@ builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = withPipe $ \ (rea throw e Right s -> do return s - safely $ \h -> do - processBuildMessages chan - waitForProcess h where - processBuildMessages :: Chan BuildMessage -> IO () - processBuildMessages chan = do - msg <- readChan chan + processBuildMessage :: BuildMessage -> IO () + processBuildMessage msg = do case msg of BuildMsg msg -> do logInfo logger $ withPprStyle defaultUserStyle msg - processBuildMessages chan BuildError loc msg -> do logMsg logger errorDiagnostic (mkSrcSpan loc loc) $ withPprStyle defaultUserStyle msg - processBuildMessages chan - EOF -> - return () - -readerProc :: Chan BuildMessage -> Handle -> (String -> String) -> IO () -readerProc chan hdl filter_fn = - (do str <- hGetContents hdl - loop (lines (filter_fn str)) Nothing) - `finally` - writeChan chan EOF - -- ToDo: check errors more carefully - -- ToDo: in the future, the filter should be implemented as - -- a stream transformer. + +parseBuildMessages :: [String] -> [BuildMessage] +parseBuildMessages str = loop str Nothing where - loop [] Nothing = return () - loop [] (Just err) = writeChan chan err + loop :: [String] -> Maybe BuildMessage -> [BuildMessage] + loop [] Nothing = [] + loop [] (Just err) = [err] loop (l:ls) in_err = case in_err of Just err@(BuildError srcLoc msg) | leading_whitespace l -> loop ls (Just (BuildError srcLoc (msg $$ text l))) - | otherwise -> do - writeChan chan err - checkError l ls + | otherwise -> + err : checkError l ls Nothing -> checkError l ls - _ -> panic "readerProc/loop" + _ -> panic "parseBuildMessages/loop" + checkError :: String -> [String] -> [BuildMessage] checkError l ls = case parseError l of - Nothing -> do - writeChan chan (BuildMsg (text l)) - loop ls Nothing - Just (file, lineNum, colNum, msg) -> do - let srcLoc = mkSrcLoc (mkFastString file) lineNum colNum + Nothing -> + BuildMsg (text l) : loop ls Nothing + Just (srcLoc, msg) -> do loop ls (Just (BuildError srcLoc (text msg))) + leading_whitespace :: String -> Bool leading_whitespace [] = False leading_whitespace (x:_) = isSpace x -parseError :: String -> Maybe (String, Int, Int, String) +parseError :: String -> Maybe (SrcLoc, String) parseError s0 = case breakColon s0 of Just (filename, s1) -> case breakIntColon s1 of Just (lineNum, s2) -> case breakIntColon s2 of Just (columnNum, s3) -> - Just (filename, lineNum, columnNum, s3) + Just (mkSrcLoc (mkFastString filename) lineNum columnNum, s3) Nothing -> - Just (filename, lineNum, 0, s2) + Just (mkSrcLoc (mkFastString filename) lineNum 0, s2) Nothing -> Nothing Nothing -> Nothing @@ -385,4 +368,3 @@ breakIntColon xs = case break (':' ==) xs of data BuildMessage = BuildMsg !SDoc | BuildError !SrcLoc !SDoc - | EOF ===================================== compiler/GHC/SysTools/Tasks.hs ===================================== @@ -63,8 +63,8 @@ augmentImports dflags ("-include":fp:fps) = "-include" : augmentByWorkingDirecto augmentImports dflags (fp1: fp2: fps) = fp1 : augmentImports dflags (fp2:fps) -- | Discard some harmless warnings from gcc that we can't turn off -cc_filter :: String -> String -cc_filter = unlines . doFilter . lines where +cc_filter :: [String] -> [String] +cc_filter = doFilter where {- gcc gives warnings in chunks like so: In file included from /foo/bar/baz.h:11, View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/62a2b25f6cd1947c85a7d847a8f88bb0de5d80fd...3966907789043f731a6b15f73594ca148505b0a0 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/62a2b25f6cd1947c85a7d847a8f88bb0de5d80fd...3966907789043f731a6b15f73594ca148505b0a0 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 14 10:34:00 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Sat, 14 Dec 2024 05:34:00 -0500 Subject: [Git][ghc/ghc][wip/romes/25513] base: displayException for SomeAsyncException Message-ID: <675d5f188ebb7_26142c118448453829@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/25513 at Glasgow Haskell Compiler / GHC Commits: 033ef48d by Rodrigo Mesquita at 2024-12-14T10:33:39+00:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 2 changed files: - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs Changes: ===================================== libraries/base/changelog.md ===================================== @@ -1,6 +1,8 @@ # Changelog for [`base` package](http://hackage.haskell.org/package/base) ## 4.22.0.0 *TBA* + * Define `displayException` of `SomeAsyncException` to unwrap the exception. + ([CLC proposal #309](https://github.com/haskell/core-libraries-committee/issues/309)) * Restrict `Data.List.NonEmpty.unzip` to `NonEmpty (a, b) -> (NonEmpty a, NonEmpty b)`. ([CLC proposal #86](https://github.com/haskell/core-libraries-committee/issues/86)) * Modify the implementation of `Control.Exception.throw` to avoid call-sites being inferred as diverging via precise exception. ([GHC #25066](https://gitlab.haskell.org/ghc/ghc/-/issues/25066), [CLC proposal #290](https://github.com/haskell/core-libraries-committee/issues/290)) ===================================== libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs ===================================== @@ -187,7 +187,8 @@ instance Show SomeAsyncException where showsPrec p (SomeAsyncException e) = showsPrec p e -- | @since base-4.7.0.0 -instance Exception SomeAsyncException +instance Exception SomeAsyncException where + displayException (SomeAsyncException e) = displayException e -- | @since base-4.7.0.0 asyncExceptionToException :: Exception e => e -> SomeException View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/033ef48d0d846ec9cbffb8808fef57967015c23a -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/033ef48d0d846ec9cbffb8808fef57967015c23a You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 14 22:08:20 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Sat, 14 Dec 2024 17:08:20 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 5 commits: TNTC: set CmmProc entry_label properly (#25565) Message-ID: <675e01d477605_267aa09647cc53159@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 62a2b25f by Sylvain Henry at 2024-12-14T04:31:09-05:00 TNTC: set CmmProc entry_label properly (#25565) Before this patch we were renaming the entry label of a CmmProc late in the CmmToAsm pass. It led to inconsistencies and to some labels being used in info tables but not being emitted (#25565). Now we set the CmmProc entry label earlier in the StgToCmm monad and we don't renamed it afterwards. - - - - - b339e7c3 by Simon Hengel at 2024-12-14T04:31:47-05:00 Make filter functionality for system tools line-based This is more efficient as: - All existing filter functions were line-based anyway. They broke up the input into lines and then joined it back together. - We already break up the output from system tools into lines when processing it. Splitting up the output of system tools once and then filtering and processing it reduces both code and runtime complexity. - - - - - 39669077 by Simon Hengel at 2024-12-14T04:31:47-05:00 Refactoring: Don't use a `Chan` when parsing SysTools output - - - - - 54207750 by Simon Peyton Jones at 2024-12-14T17:07:56-05:00 Tidy up the handling of `assert` Fixes #25493 - - - - - d6f995b8 by Rodrigo Mesquita at 2024-12-14T17:07:57-05:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 10 changed files: - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/Driver/Config/Linker.hs - compiler/GHC/Linker/Config.hs - compiler/GHC/StgToCmm/Monad.hs - compiler/GHC/SysTools/Process.hs - compiler/GHC/SysTools/Tasks.hs - compiler/GHC/Tc/Gen/Head.hs - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/Base.hs - libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs Changes: ===================================== compiler/GHC/CmmToAsm/X86/Ppr.hs ===================================== @@ -76,14 +76,11 @@ pprNatCmmDecl config proc@(CmmProc top_info entry_lbl _ (ListGraph blocks)) = let platform = ncgPlatform config top_info_table = topInfoTable proc -- we need a label to delimit the proc code (e.g. in debug builds). When - -- we have an info table, we reuse the info table label. Otherwise we make - -- a fresh "entry" label from the label of the entry block. We can't reuse - -- the entry block label as-is, otherwise we get redundant labels: - -- delimiters for the entry block and for the whole proc are the same (see - -- #22792). + -- we have an info table, we reuse the info table label. Otherwise we use + -- the entry label. proc_lbl = case top_info_table of Just (CmmStaticsRaw info_lbl _) -> info_lbl - Nothing -> toProcDelimiterLbl entry_lbl + Nothing -> entry_lbl -- handle subsections_via_symbols when enabled and when we have an -- info-table to link to. See Note [Subsections Via Symbols] ===================================== compiler/GHC/Driver/Config/Linker.hs ===================================== @@ -27,9 +27,8 @@ initLinkerConfig dflags = ld_filter = case platformOS (targetPlatform dflags) of OSSolaris2 -> sunos_ld_filter _ -> id - sunos_ld_filter :: String -> String - sunos_ld_filter = unlines . sunos_ld_filter' . lines - sunos_ld_filter' x = if (undefined_found x && ld_warning_found x) + sunos_ld_filter :: [String] -> [String] + sunos_ld_filter x = if (undefined_found x && ld_warning_found x) then (ld_prefix x) ++ (ld_postfix x) else x breakStartsWith x y = break (isPrefixOf x) y ===================================== compiler/GHC/Linker/Config.hs ===================================== @@ -22,6 +22,6 @@ data LinkerConfig = LinkerConfig , linkerOptionsPre :: [Option] -- ^ Linker options (before user options) , linkerOptionsPost :: [Option] -- ^ Linker options (after user options) , linkerTempDir :: TempDir -- ^ Temporary directory to use - , linkerFilter :: String -> String -- ^ Output filter + , linkerFilter :: [String] -> [String] -- ^ Output filter } ===================================== compiler/GHC/StgToCmm/Monad.hs ===================================== @@ -798,7 +798,17 @@ emitProc mb_info lbl live blocks offset do_layout tinfo = TopInfo { info_tbls = DWrap infos , stack_info=sinfo} - proc_block = CmmProc tinfo lbl live blks + -- we must be careful to: + -- 1. not emit a proc label twice (#22792) + -- 2. emit it at least once! (#25565) + -- + -- (2) happened because the entry label was the label of a basic + -- block that got dropped (empty basic block...), hence we never + -- generated a label for it after we fixed (1) where we were + -- always emitting entry label. + proc_lbl = toProcDelimiterLbl lbl + + proc_block = CmmProc tinfo proc_lbl live blks ; state <- getState ; setState $ state { cgs_tops = cgs_tops state `snocOL` proc_block } } ===================================== compiler/GHC/SysTools/Process.hs ===================================== @@ -149,7 +149,7 @@ runSomethingResponseFile :: Logger -> TmpFs -> TempDir - -> (String->String) + -> ([String] -> [String]) -> String -> String -> [Option] @@ -195,7 +195,7 @@ runSomethingResponseFile logger tmpfs tmp_dir filter_fn phase_name pgm args mb_e ] runSomethingFiltered - :: Logger -> (String->String) -> String -> String -> [Option] + :: Logger -> ([String] -> [String]) -> String -> String -> [Option] -> Maybe FilePath -> Maybe [(String,String)] -> IO () runSomethingFiltered logger filter_fn phase_name pgm args mb_cwd mb_env = @@ -235,7 +235,7 @@ withPipe = bracket createPipe $ \ (readEnd, writeEnd) -> do hClose readEnd hClose writeEnd -builderMainLoop :: Logger -> (String -> String) -> FilePath +builderMainLoop :: Logger -> ([String] -> [String]) -> FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> IO ExitCode builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = withPipe $ \ (readEnd, writeEnd) -> do @@ -245,13 +245,11 @@ builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = withPipe $ \ (rea associateHandle' =<< handleToHANDLE readEnd #endif - chan <- newChan - -- We use a mask here rather than a bracket because we want -- to distinguish between cleaning up with and without an -- exception. This is to avoid calling terminateProcess -- unless an exception was raised. - let safely inner = mask $ \restore -> do + mask $ \restore -> do -- acquire -- On Windows due to how exec is emulated the old process will exit and -- a new process will be created. This means waiting for termination of @@ -282,9 +280,9 @@ builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = withPipe $ \ (rea getLocaleEncoding >>= hSetEncoding readEnd hSetNewlineMode readEnd nativeNewlineMode hSetBuffering readEnd LineBuffering - let make_reader_proc h = forkIO $ readerProc chan h filter_fn - bracketOnError (make_reader_proc readEnd) killThread $ \_ -> - inner hProcess + messages <- parseBuildMessages . filter_fn . lines <$> hGetContents readEnd + mapM_ processBuildMessage messages + waitForProcess hProcess hClose hStdIn case r of Left (SomeException e) -> do @@ -292,70 +290,55 @@ builderMainLoop logger filter_fn pgm real_args mb_cwd mb_env = withPipe $ \ (rea throw e Right s -> do return s - safely $ \h -> do - processBuildMessages chan - waitForProcess h where - processBuildMessages :: Chan BuildMessage -> IO () - processBuildMessages chan = do - msg <- readChan chan + processBuildMessage :: BuildMessage -> IO () + processBuildMessage msg = do case msg of BuildMsg msg -> do logInfo logger $ withPprStyle defaultUserStyle msg - processBuildMessages chan BuildError loc msg -> do logMsg logger errorDiagnostic (mkSrcSpan loc loc) $ withPprStyle defaultUserStyle msg - processBuildMessages chan - EOF -> - return () - -readerProc :: Chan BuildMessage -> Handle -> (String -> String) -> IO () -readerProc chan hdl filter_fn = - (do str <- hGetContents hdl - loop (lines (filter_fn str)) Nothing) - `finally` - writeChan chan EOF - -- ToDo: check errors more carefully - -- ToDo: in the future, the filter should be implemented as - -- a stream transformer. + +parseBuildMessages :: [String] -> [BuildMessage] +parseBuildMessages str = loop str Nothing where - loop [] Nothing = return () - loop [] (Just err) = writeChan chan err + loop :: [String] -> Maybe BuildMessage -> [BuildMessage] + loop [] Nothing = [] + loop [] (Just err) = [err] loop (l:ls) in_err = case in_err of Just err@(BuildError srcLoc msg) | leading_whitespace l -> loop ls (Just (BuildError srcLoc (msg $$ text l))) - | otherwise -> do - writeChan chan err - checkError l ls + | otherwise -> + err : checkError l ls Nothing -> checkError l ls - _ -> panic "readerProc/loop" + _ -> panic "parseBuildMessages/loop" + checkError :: String -> [String] -> [BuildMessage] checkError l ls = case parseError l of - Nothing -> do - writeChan chan (BuildMsg (text l)) - loop ls Nothing - Just (file, lineNum, colNum, msg) -> do - let srcLoc = mkSrcLoc (mkFastString file) lineNum colNum + Nothing -> + BuildMsg (text l) : loop ls Nothing + Just (srcLoc, msg) -> do loop ls (Just (BuildError srcLoc (text msg))) + leading_whitespace :: String -> Bool leading_whitespace [] = False leading_whitespace (x:_) = isSpace x -parseError :: String -> Maybe (String, Int, Int, String) +parseError :: String -> Maybe (SrcLoc, String) parseError s0 = case breakColon s0 of Just (filename, s1) -> case breakIntColon s1 of Just (lineNum, s2) -> case breakIntColon s2 of Just (columnNum, s3) -> - Just (filename, lineNum, columnNum, s3) + Just (mkSrcLoc (mkFastString filename) lineNum columnNum, s3) Nothing -> - Just (filename, lineNum, 0, s2) + Just (mkSrcLoc (mkFastString filename) lineNum 0, s2) Nothing -> Nothing Nothing -> Nothing @@ -385,4 +368,3 @@ breakIntColon xs = case break (':' ==) xs of data BuildMessage = BuildMsg !SDoc | BuildError !SrcLoc !SDoc - | EOF ===================================== compiler/GHC/SysTools/Tasks.hs ===================================== @@ -63,8 +63,8 @@ augmentImports dflags ("-include":fp:fps) = "-include" : augmentByWorkingDirecto augmentImports dflags (fp1: fp2: fps) = fp1 : augmentImports dflags (fp2:fps) -- | Discard some harmless warnings from gcc that we can't turn off -cc_filter :: String -> String -cc_filter = unlines . doFilter . lines where +cc_filter :: [String] -> [String] +cc_filter = doFilter where {- gcc gives warnings in chunks like so: In file included from /foo/bar/baz.h:11, ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -805,32 +805,22 @@ tcCheckId name res_ty tcInferId :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) -- Look up an occurrence of an Id -- Do not instantiate its type -tcInferId lname@(L _ id_name) +tcInferId lname@(L loc id_name) + | id_name `hasKey` assertIdKey - = do { dflags <- getDynFlags + = -- See Note [Overview of assertions] + do { dflags <- getDynFlags ; if gopt Opt_IgnoreAsserts dflags then tc_infer_id lname - else tc_infer_assert lname } + else tc_infer_id (L loc assertErrorName) } | otherwise - = do { (expr, ty) <- tc_infer_id lname - ; traceTc "tcInferId" (ppr id_name <+> dcolon <+> ppr ty) - ; return (expr, ty) } - -tc_infer_assert :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) --- Deal with an occurrence of 'assert' --- See Note [Adding the implicit parameter to 'assert'] -tc_infer_assert (L loc assert_name) - = do { assert_error_id <- tcLookupId assertErrorName - ; (wrap, id_rho) <- topInstantiate (OccurrenceOf assert_name) - (idType assert_error_id) - ; return (mkHsWrap wrap (HsVar noExtField (L loc assert_error_id)), id_rho) - } + = tc_infer_id lname tc_infer_id :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) tc_infer_id (L loc id_name) = do { thing <- tcLookup id_name - ; case thing of + ; (expr,ty) <- case thing of ATcId { tct_id = id } -> do { check_local_id id ; return_id id } @@ -845,12 +835,45 @@ tc_infer_id (L loc id_name) (tcTyThingTyCon_maybe -> Just tc) -> failIllegalTyCon WL_Anything (tyConName tc) ATyVar name _ -> failIllegalTyVal name - _ -> failWithTc $ TcRnExpectedValueId thing } + _ -> failWithTc $ TcRnExpectedValueId thing + + ; traceTc "tcInferId" (ppr id_name <+> dcolon <+> ppr ty) + ; return (expr, ty) } where return_id id = return (HsVar noExtField (L loc id), idType id) -{- Note [Suppress hints with RequiredTypeArguments] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +{- Note [Overview of assertions] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you write (assert pred x) then + + * If `-fignore-asserts` (which sets Opt_IgnoreAsserts) is on, the code is + typechecked as written, but `assert`, defined in GHC.Internal.Base + assert _pred r = r + simply ignores `pred` + + * But without `-fignore-asserts`, GHC rewrites it to (assertError pred e) + and that is defined in GHC.Internal.IO.Exception as + assertError :: (?callStack :: CallStack) => Bool -> a -> a + which does test the predicate and, if it is not True, throws an exception, + capturing the CallStack. + + This rewrite is done in `tcInferId`. + +So `-fignore-asserts` makes the assertion go away altogether, which may be good for +production code. + +The reason that `assert` and `assertError` are defined in very different modules +is a historical accident. + +Note: the Haddock for `assert` is on `GHC.Internal.Base.assert`, since that is +what appears in the user's source proram. + +It's not entirely kosher to rewrite `assert` to `assertError`, because there's no +way to "undo" if you want to see the original source code in the typechecker +output. We can fix this if it becomes a problem. + +Note [Suppress hints with RequiredTypeArguments] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When a type variable is used at the term level, GHC assumes the user might have made a typo and suggests a term variable with a similar name. @@ -948,16 +971,8 @@ tcInferPatSyn ps nonBidirectionalErr :: Name -> TcRnMessage nonBidirectionalErr = TcRnPatSynNotBidirectional -{- Note [Adding the implicit parameter to 'assert'] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The typechecker transforms (assert e1 e2) to (assertError e1 e2). -This isn't really the Right Thing because there's no way to "undo" -if you want to see the original source code in the typechecker -output. We'll have fix this in due course, when we care more about -being able to reconstruct the exact original program. - -Note [Typechecking data constructors] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +{- Note [Typechecking data constructors] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ As per Note [Polymorphisation of linear fields] in GHC.Core.Multiplicity, linear fields of data constructors get a polymorphic multiplicity when the data constructor is used as a term: ===================================== libraries/base/changelog.md ===================================== @@ -1,6 +1,8 @@ # Changelog for [`base` package](http://hackage.haskell.org/package/base) ## 4.22.0.0 *TBA* + * Define `displayException` of `SomeAsyncException` to unwrap the exception. + ([CLC proposal #309](https://github.com/haskell/core-libraries-committee/issues/309)) * Restrict `Data.List.NonEmpty.unzip` to `NonEmpty (a, b) -> (NonEmpty a, NonEmpty b)`. ([CLC proposal #86](https://github.com/haskell/core-libraries-committee/issues/86)) * Modify the implementation of `Control.Exception.throw` to avoid call-sites being inferred as diverging via precise exception. ([GHC #25066](https://gitlab.haskell.org/ghc/ghc/-/issues/25066), [CLC proposal #290](https://github.com/haskell/core-libraries-committee/issues/290)) ===================================== libraries/ghc-internal/src/GHC/Internal/Base.hs ===================================== @@ -2107,6 +2107,9 @@ id x = x -- Assertion function. This simply ignores its boolean argument. -- The compiler may rewrite it to @('assertError' line)@. +-- The Haddock below is attached to `assert`, since that is +-- what occurs in source programs. +-- See Note [Overview of assertions] in GHC.Tc.Gen.Head -- | If the first argument evaluates to 'True', then the result is the -- second argument. Otherwise an 'Control.Exception.AssertionFailed' exception @@ -2115,14 +2118,9 @@ id x = x -- -- Assertions can normally be turned on or off with a compiler flag -- (for GHC, assertions are normally on unless optimisation is turned on --- with @-O@ or the @-fignore-asserts@ --- option is given). When assertions are turned off, the first --- argument to 'assert' is ignored, and the second argument is --- returned as the result. - --- SLPJ: in 5.04 etc 'assert' is in GHC.Prim, --- but from Template Haskell onwards it's simply --- defined here in Base.hs +-- with @-O@ or the @-fignore-asserts@ option is given). When assertions +-- are turned off, the first argument to 'assert' is ignored, and the second +-- argument is returned as the result. assert :: Bool -> a -> a assert _pred r = r ===================================== libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs ===================================== @@ -187,7 +187,8 @@ instance Show SomeAsyncException where showsPrec p (SomeAsyncException e) = showsPrec p e -- | @since base-4.7.0.0 -instance Exception SomeAsyncException +instance Exception SomeAsyncException where + displayException (SomeAsyncException e) = displayException e -- | @since base-4.7.0.0 asyncExceptionToException :: Exception e => e -> SomeException @@ -438,6 +439,7 @@ instance Show IOException where _ -> showString " (" . showString s . showString ")") assertError :: (?callStack :: CallStack) => Bool -> a -> a +-- See Note [Overview of assertions] in GHC.Tc.Gen.Head assertError predicate v | predicate = v | otherwise = lazy $ unsafeDupablePerformIO $ do -- lazy: See Note [Strictness of assertError] View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3c8fd6c74eb22e29f4f5397bf4deec1b6cded99f...d6f995b86abec29f058d374450036e34a1ae174a -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3c8fd6c74eb22e29f4f5397bf4deec1b6cded99f...d6f995b86abec29f058d374450036e34a1ae174a You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 14 23:00:27 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Sat, 14 Dec 2024 18:00:27 -0500 Subject: [Git][ghc/ghc][wip/T25445b] 62 commits: Remove TcRnDeprecatedInvisTyArgInConPat mechanism Message-ID: <675e0e0be832c_267aa0120a6d85699@gitlab.mail> Simon Peyton Jones pushed to branch wip/T25445b at Glasgow Haskell Compiler / GHC Commits: 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 9c53489d by Andrei Borzenkov at 2024-12-12T15:06:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 13fe48d4 by Matthew Pickering at 2024-12-12T15:07:19-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - 62a2b25f by Sylvain Henry at 2024-12-14T04:31:09-05:00 TNTC: set CmmProc entry_label properly (#25565) Before this patch we were renaming the entry label of a CmmProc late in the CmmToAsm pass. It led to inconsistencies and to some labels being used in info tables but not being emitted (#25565). Now we set the CmmProc entry label earlier in the StgToCmm monad and we don't renamed it afterwards. - - - - - b339e7c3 by Simon Hengel at 2024-12-14T04:31:47-05:00 Make filter functionality for system tools line-based This is more efficient as: - All existing filter functions were line-based anyway. They broke up the input into lines and then joined it back together. - We already break up the output from system tools into lines when processing it. Splitting up the output of system tools once and then filtering and processing it reduces both code and runtime complexity. - - - - - 39669077 by Simon Hengel at 2024-12-14T04:31:47-05:00 Refactoring: Don't use a `Chan` when parsing SysTools output - - - - - 3e1e9438 by Simon Peyton Jones at 2024-12-14T23:00:05+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - b507e652 by Simon Peyton Jones at 2024-12-14T23:00:05+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - 28 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/Opt/Specialise.hs - compiler/GHC/Core/SimpleOpt.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/Core/Type.hs - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Data/Unboxed.hs - compiler/GHC/Driver/Config/Linker.hs - compiler/GHC/Driver/Env.hs - compiler/GHC/Driver/Flags.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Hs/Dump.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/9e9e411745d48bf3a485d520147309a93a9a7721...b507e652e201674d60d08c075319e72159461643 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/9e9e411745d48bf3a485d520147309a93a9a7721...b507e652e201674d60d08c075319e72159461643 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 15 03:28:36 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Sat, 14 Dec 2024 22:28:36 -0500 Subject: [Git][ghc/ghc][master] Tidy up the handling of `assert` Message-ID: <675e4ce45785_d14af1474edc504d@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 64756530 by Simon Peyton Jones at 2024-12-14T22:28:04-05:00 Tidy up the handling of `assert` Fixes #25493 - - - - - 3 changed files: - compiler/GHC/Tc/Gen/Head.hs - libraries/ghc-internal/src/GHC/Internal/Base.hs - libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs Changes: ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -805,32 +805,22 @@ tcCheckId name res_ty tcInferId :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) -- Look up an occurrence of an Id -- Do not instantiate its type -tcInferId lname@(L _ id_name) +tcInferId lname@(L loc id_name) + | id_name `hasKey` assertIdKey - = do { dflags <- getDynFlags + = -- See Note [Overview of assertions] + do { dflags <- getDynFlags ; if gopt Opt_IgnoreAsserts dflags then tc_infer_id lname - else tc_infer_assert lname } + else tc_infer_id (L loc assertErrorName) } | otherwise - = do { (expr, ty) <- tc_infer_id lname - ; traceTc "tcInferId" (ppr id_name <+> dcolon <+> ppr ty) - ; return (expr, ty) } - -tc_infer_assert :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) --- Deal with an occurrence of 'assert' --- See Note [Adding the implicit parameter to 'assert'] -tc_infer_assert (L loc assert_name) - = do { assert_error_id <- tcLookupId assertErrorName - ; (wrap, id_rho) <- topInstantiate (OccurrenceOf assert_name) - (idType assert_error_id) - ; return (mkHsWrap wrap (HsVar noExtField (L loc assert_error_id)), id_rho) - } + = tc_infer_id lname tc_infer_id :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) tc_infer_id (L loc id_name) = do { thing <- tcLookup id_name - ; case thing of + ; (expr,ty) <- case thing of ATcId { tct_id = id } -> do { check_local_id id ; return_id id } @@ -845,12 +835,45 @@ tc_infer_id (L loc id_name) (tcTyThingTyCon_maybe -> Just tc) -> failIllegalTyCon WL_Anything (tyConName tc) ATyVar name _ -> failIllegalTyVal name - _ -> failWithTc $ TcRnExpectedValueId thing } + _ -> failWithTc $ TcRnExpectedValueId thing + + ; traceTc "tcInferId" (ppr id_name <+> dcolon <+> ppr ty) + ; return (expr, ty) } where return_id id = return (HsVar noExtField (L loc id), idType id) -{- Note [Suppress hints with RequiredTypeArguments] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +{- Note [Overview of assertions] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you write (assert pred x) then + + * If `-fignore-asserts` (which sets Opt_IgnoreAsserts) is on, the code is + typechecked as written, but `assert`, defined in GHC.Internal.Base + assert _pred r = r + simply ignores `pred` + + * But without `-fignore-asserts`, GHC rewrites it to (assertError pred e) + and that is defined in GHC.Internal.IO.Exception as + assertError :: (?callStack :: CallStack) => Bool -> a -> a + which does test the predicate and, if it is not True, throws an exception, + capturing the CallStack. + + This rewrite is done in `tcInferId`. + +So `-fignore-asserts` makes the assertion go away altogether, which may be good for +production code. + +The reason that `assert` and `assertError` are defined in very different modules +is a historical accident. + +Note: the Haddock for `assert` is on `GHC.Internal.Base.assert`, since that is +what appears in the user's source proram. + +It's not entirely kosher to rewrite `assert` to `assertError`, because there's no +way to "undo" if you want to see the original source code in the typechecker +output. We can fix this if it becomes a problem. + +Note [Suppress hints with RequiredTypeArguments] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When a type variable is used at the term level, GHC assumes the user might have made a typo and suggests a term variable with a similar name. @@ -948,16 +971,8 @@ tcInferPatSyn ps nonBidirectionalErr :: Name -> TcRnMessage nonBidirectionalErr = TcRnPatSynNotBidirectional -{- Note [Adding the implicit parameter to 'assert'] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The typechecker transforms (assert e1 e2) to (assertError e1 e2). -This isn't really the Right Thing because there's no way to "undo" -if you want to see the original source code in the typechecker -output. We'll have fix this in due course, when we care more about -being able to reconstruct the exact original program. - -Note [Typechecking data constructors] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +{- Note [Typechecking data constructors] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ As per Note [Polymorphisation of linear fields] in GHC.Core.Multiplicity, linear fields of data constructors get a polymorphic multiplicity when the data constructor is used as a term: ===================================== libraries/ghc-internal/src/GHC/Internal/Base.hs ===================================== @@ -2107,6 +2107,9 @@ id x = x -- Assertion function. This simply ignores its boolean argument. -- The compiler may rewrite it to @('assertError' line)@. +-- The Haddock below is attached to `assert`, since that is +-- what occurs in source programs. +-- See Note [Overview of assertions] in GHC.Tc.Gen.Head -- | If the first argument evaluates to 'True', then the result is the -- second argument. Otherwise an 'Control.Exception.AssertionFailed' exception @@ -2115,14 +2118,9 @@ id x = x -- -- Assertions can normally be turned on or off with a compiler flag -- (for GHC, assertions are normally on unless optimisation is turned on --- with @-O@ or the @-fignore-asserts@ --- option is given). When assertions are turned off, the first --- argument to 'assert' is ignored, and the second argument is --- returned as the result. - --- SLPJ: in 5.04 etc 'assert' is in GHC.Prim, --- but from Template Haskell onwards it's simply --- defined here in Base.hs +-- with @-O@ or the @-fignore-asserts@ option is given). When assertions +-- are turned off, the first argument to 'assert' is ignored, and the second +-- argument is returned as the result. assert :: Bool -> a -> a assert _pred r = r ===================================== libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs ===================================== @@ -438,6 +438,7 @@ instance Show IOException where _ -> showString " (" . showString s . showString ")") assertError :: (?callStack :: CallStack) => Bool -> a -> a +-- See Note [Overview of assertions] in GHC.Tc.Gen.Head assertError predicate v | predicate = v | otherwise = lazy $ unsafeDupablePerformIO $ do -- lazy: See Note [Strictness of assertError] View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/64756530071afccf6ab339e8ee7bf4cad598b931 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/64756530071afccf6ab339e8ee7bf4cad598b931 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 15 03:29:07 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Sat, 14 Dec 2024 22:29:07 -0500 Subject: [Git][ghc/ghc][master] base: displayException for SomeAsyncException Message-ID: <675e4d0374428_d14af142c560549e0@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 8658fbc1 by Rodrigo Mesquita at 2024-12-14T22:28:41-05:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 2 changed files: - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs Changes: ===================================== libraries/base/changelog.md ===================================== @@ -1,6 +1,8 @@ # Changelog for [`base` package](http://hackage.haskell.org/package/base) ## 4.22.0.0 *TBA* + * Define `displayException` of `SomeAsyncException` to unwrap the exception. + ([CLC proposal #309](https://github.com/haskell/core-libraries-committee/issues/309)) * Restrict `Data.List.NonEmpty.unzip` to `NonEmpty (a, b) -> (NonEmpty a, NonEmpty b)`. ([CLC proposal #86](https://github.com/haskell/core-libraries-committee/issues/86)) * Modify the implementation of `Control.Exception.throw` to avoid call-sites being inferred as diverging via precise exception. ([GHC #25066](https://gitlab.haskell.org/ghc/ghc/-/issues/25066), [CLC proposal #290](https://github.com/haskell/core-libraries-committee/issues/290)) ===================================== libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs ===================================== @@ -187,7 +187,8 @@ instance Show SomeAsyncException where showsPrec p (SomeAsyncException e) = showsPrec p e -- | @since base-4.7.0.0 -instance Exception SomeAsyncException +instance Exception SomeAsyncException where + displayException (SomeAsyncException e) = displayException e -- | @since base-4.7.0.0 asyncExceptionToException :: Exception e => e -> SomeException View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8658fbc15fa2d73636eeca0b75848e61091d7960 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8658fbc15fa2d73636eeca0b75848e61091d7960 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 15 15:52:06 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Sun, 15 Dec 2024 10:52:06 -0500 Subject: [Git][ghc/ghc][wip/ghc-9.12-release] 2 commits: base: Reintroduce {Show,Enum} IoSubSystem Message-ID: <675efb26d9357_172ee71b81040708a9@gitlab.mail> Zubin pushed to branch wip/ghc-9.12-release at Glasgow Haskell Compiler / GHC Commits: 032b058c by Ben Gamari at 2024-12-15T21:21:51+05:30 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. (cherry picked from commit dfd1db48aaa1ee6c109e9a05ce34672418f17f59) - - - - - dc7c0f85 by Zubin Duggal at 2024-12-15T21:21:51+05:30 RELEASE=YES - - - - - 6 changed files: - configure.ac - libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs - 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 Changes: ===================================== configure.ac ===================================== @@ -13,7 +13,7 @@ dnl # see what flags are available. (Better yet, read the documentation!) # -AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) +AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.1], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION]) # Version on master must be X.Y (not X.Y.Z) for ProjectVersionMunged variable # to be useful (cf #19058). However, the version must have three components # (X.Y.Z) on stable branches (e.g. ghc-9.2) to ensure that pre-releases are @@ -22,7 +22,7 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.0], [glasgow-ha AC_CONFIG_MACRO_DIRS([m4]) # Set this to YES for a released version, otherwise NO -: ${RELEASE=NO} +: ${RELEASE=YES} # The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line # above. If this is not a released version, then we will append the ===================================== libraries/ghc-internal/src/GHC/Internal/IO/SubSystem.hs ===================================== @@ -1,6 +1,7 @@ {-# LANGUAGE Trustworthy #-} -{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE StandaloneDeriving #-} ----------------------------------------------------------------------------- -- | @@ -34,6 +35,8 @@ module GHC.Internal.IO.SubSystem ( ) where import GHC.Internal.Base +import GHC.Internal.Show +import GHC.Internal.Enum #if defined(mingw32_HOST_OS) import GHC.Internal.IO.Unsafe @@ -55,6 +58,10 @@ data IoSubSystem -- native APIs for I/O, including IOCP and RIO. deriving (Eq) +-- N.B. These are currently unused by GHC but is needed for stability of @base at . +deriving instance Enum IoSubSystem +deriving instance Show IoSubSystem + -- | Conditionally execute an action depending on the configured I/O subsystem. -- On POSIX systems always execute the first action. -- On Windows execute the second action if WINIO as active, otherwise fall back to ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -11700,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12522,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -14735,6 +14735,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -15552,6 +15553,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.JS.Prim.JSException -- Defined in ‘GHC.Internal.JS.Prim’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -11965,6 +11965,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12797,6 +12798,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IO.Windows.Handle.CONSOLE_READCONSOLE_CONTROL -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.NativeHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ instance GHC.Internal.Show.Show (GHC.Internal.IO.Windows.Handle.Io GHC.Internal.IO.Windows.Handle.ConsoleHandle) -- Defined in ‘GHC.Internal.IO.Windows.Handle’ ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -11700,6 +11700,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceStrictness -- Define instance GHC.Internal.Enum.Enum GHC.Internal.Generics.SourceUnpackedness -- Defined in ‘GHC.Internal.Generics’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.Device.SeekMode -- Defined in ‘GHC.Internal.IO.Device’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoCostCentres -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoHeapProfile -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘GHC.Internal.RTS.Flags’ @@ -12522,6 +12523,7 @@ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.Types.NewlineMode -- Defi instance [safe] GHC.Internal.Show.Show ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common.FileLockingNotSupported -- Defined in ‘ghc-internal-9.1100.0:GHC.Internal.IO.Handle.Lock.Common’ instance GHC.Internal.Show.Show GHC.Internal.IO.Handle.HandlePosn -- Defined in ‘GHC.Internal.IO.Handle’ instance GHC.Internal.Show.Show GHC.Internal.IO.IOMode.IOMode -- Defined in ‘GHC.Internal.IO.IOMode’ +instance GHC.Internal.Show.Show GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ instance GHC.Internal.Show.Show GHC.Internal.IOPort.IOPortException -- Defined in ‘GHC.Internal.IOPort’ instance GHC.Internal.Show.Show GHC.Internal.InfoProv.Types.InfoProv -- Defined in ‘GHC.Internal.InfoProv.Types’ instance GHC.Internal.Show.Show GHC.Internal.RTS.Flags.CCFlags -- Defined in ‘GHC.Internal.RTS.Flags’ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/643e280c0f66be4a63ce79fb55dc5ec674b94442...dc7c0f8593eac2613f3b9e1785d13a90ec99045f -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/643e280c0f66be4a63ce79fb55dc5ec674b94442...dc7c0f8593eac2613f3b9e1785d13a90ec99045f You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 15 15:58:43 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Sun, 15 Dec 2024 10:58:43 -0500 Subject: [Git][ghc/ghc][wip/ghc-9.12-release] ci: allow test-primops to fail as a workaround to #25582 Message-ID: <675efcb3384e9_172ee71ddcc2c72915@gitlab.mail> Zubin pushed to branch wip/ghc-9.12-release at Glasgow Haskell Compiler / GHC Commits: daf659b6 by Zubin Duggal at 2024-12-15T21:28:10+05:30 ci: allow test-primops to fail as a workaround to #25582 - - - - - 1 changed file: - .gitlab-ci.yml Changes: ===================================== .gitlab-ci.yml ===================================== @@ -913,6 +913,9 @@ test-primops-nightly: test-primops-release: extends: .test-primops + # test-primops upstream is failing with a link error + # See https://gitlab.haskell.org/ghc/ghc/-/issues/25582 + allow_failure: true rules: - if: '$RELEASE_JOB == "yes"' View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/daf659b6e3c8f2a84100fbee797cd9d457c00df5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/daf659b6e3c8f2a84100fbee797cd9d457c00df5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 15 16:35:37 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Sun, 15 Dec 2024 11:35:37 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 4 commits: Tidy up the handling of `assert` Message-ID: <675f0559ed431_389053281ec8967ba@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 64756530 by Simon Peyton Jones at 2024-12-14T22:28:04-05:00 Tidy up the handling of `assert` Fixes #25493 - - - - - 8658fbc1 by Rodrigo Mesquita at 2024-12-14T22:28:41-05:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - f4a0bf2d by ARATA Mizuki at 2024-12-15T11:35:15-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - ce338a17 by Simon Peyton Jones at 2024-12-15T11:35:15-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 14 changed files: - compiler/GHC/Llvm/Ppr.hs - compiler/GHC/Rename/Bind.hs - compiler/GHC/Rename/Env.hs - compiler/GHC/Tc/Gen/Head.hs - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/Base.hs - libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs - + testsuite/tests/rename/should_fail/T25437.hs - + testsuite/tests/rename/should_fail/T25437.stderr - testsuite/tests/rename/should_fail/T5001b.stderr - testsuite/tests/rename/should_fail/all.T - + testsuite/tests/simd/should_run/T25561.hs - + testsuite/tests/simd/should_run/T25561.stdout - testsuite/tests/simd/should_run/all.T Changes: ===================================== compiler/GHC/Llvm/Ppr.hs ===================================== @@ -669,9 +669,7 @@ ppTypeLit = ppTypeLit' [] {-# SPECIALIZE ppTypeLit :: LlvmCgConfig -> LlvmLit -> HLine #-} -- see Note [SPECIALIZE to HDoc] in GHC.Utils.Outputable ppTypeLit' :: IsLine doc => [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> doc -ppTypeLit' attrs opts l = case l of - LMVectorLit {} -> ppLit opts l - _ -> ppLlvmType (getLitType l) <+> ppSpaceJoin ppLlvmParamAttr attrs <+> ppLit opts l +ppTypeLit' attrs opts l = ppLlvmType (getLitType l) <+> ppSpaceJoin ppLlvmParamAttr attrs <+> ppLit opts l {-# SPECIALIZE ppTypeLit' :: [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> SDoc #-} {-# SPECIALIZE ppTypeLit' :: [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> HLine #-} -- see Note [SPECIALIZE to HDoc] in GHC.Utils.Outputable ===================================== compiler/GHC/Rename/Bind.hs ===================================== @@ -956,7 +956,8 @@ rnMethodBinds is_cls_decl cls ktv_names binds sigs ; let (spec_prags, other_sigs) = partition (isSpecLSig <||> isSpecInstLSig) sigs bound_nms = mkNameSet (collectHsBindsBinders CollNoDictBinders binds') sig_ctxt | is_cls_decl = ClsDeclCtxt cls - | otherwise = InstDeclCtxt bound_nms + | otherwise = InstDeclCtxt (mkOccEnv [ (nameOccName n, n) + | n <- nonDetEltsUniqSet bound_nms ]) ; (spec_prags', spg_fvs) <- renameSigs sig_ctxt spec_prags ; (other_sigs', sig_fvs) <- bindLocalNamesFV ktv_names $ renameSigs sig_ctxt other_sigs @@ -1071,18 +1072,9 @@ renameSigs ctxt sigs ; return (good_sigs, sig_fvs) } ---------------------- --- We use lookupSigOccRn in the signatures, which is a little bit unsatisfactory --- because this won't work for: --- instance Foo T where --- {-# INLINE op #-} --- Baz.op = ... --- We'll just rename the INLINE prag to refer to whatever other 'op' --- is in scope. (I'm assuming that Baz.op isn't in scope unqualified.) --- Doesn't seem worth much trouble to sort this. - renameSig :: HsSigCtxt -> Sig GhcPs -> RnM (Sig GhcRn, FreeVars) renameSig ctxt sig@(TypeSig _ vs ty) - = do { new_vs <- mapM (lookupSigOccRnN ctxt sig) vs + = do { new_vs <- mapM (lookupSigOccRn ctxt sig) vs ; let doc = TypeSigCtx (ppr_sig_bndrs vs) ; (new_ty, fvs) <- rnHsSigWcType doc ty ; return (TypeSig noAnn new_vs new_ty, fvs) } @@ -1091,7 +1083,7 @@ renameSig ctxt sig@(ClassOpSig _ is_deflt vs ty) = do { defaultSigs_on <- xoptM LangExt.DefaultSignatures ; when (is_deflt && not defaultSigs_on) $ addErr (TcRnUnexpectedDefaultSig sig) - ; new_v <- mapM (lookupSigOccRnN ctxt sig) vs + ; new_v <- mapM (lookupSigOccRn ctxt sig) vs ; (new_ty, fvs) <- rnHsSigType ty_ctxt TypeLevel ty ; return (ClassOpSig noAnn is_deflt new_v new_ty, fvs) } where @@ -1119,7 +1111,7 @@ renameSig _ (SpecInstSig (_, src) ty) renameSig ctxt sig@(SpecSig _ v tys inl) = do { new_v <- case ctxt of TopSigCtxt {} -> lookupLocatedOccRn v - _ -> lookupSigOccRnN ctxt sig v + _ -> lookupSigOccRn ctxt sig v ; (new_ty, fvs) <- foldM do_one ([],emptyFVs) tys ; return (SpecSig noAnn new_v new_ty inl, fvs) } where @@ -1130,7 +1122,7 @@ renameSig ctxt sig@(SpecSig _ v tys inl) ; return ( new_ty:tys, fvs_ty `plusFV` fvs) } renameSig ctxt sig@(InlineSig _ v s) - = do { new_v <- lookupSigOccRnN ctxt sig v + = do { new_v <- lookupSigOccRn ctxt sig v ; return (InlineSig noAnn new_v s, emptyFVs) } renameSig ctxt (FixSig _ fsig) @@ -1138,11 +1130,11 @@ renameSig ctxt (FixSig _ fsig) ; return (FixSig noAnn new_fsig, emptyFVs) } renameSig ctxt sig@(MinimalSig (_, s) (L l bf)) - = do new_bf <- bfTraverse (lookupSigOccRnN ctxt sig) bf + = do new_bf <- bfTraverse (lookupSigOccRn ctxt sig) bf return (MinimalSig (noAnn, s) (L l new_bf), emptyFVs) renameSig ctxt sig@(PatSynSig _ vs ty) - = do { new_vs <- mapM (lookupSigOccRnN ctxt sig) vs + = do { new_vs <- mapM (lookupSigOccRn ctxt sig) vs ; (ty', fvs) <- rnHsSigType ty_ctxt TypeLevel ty ; return (PatSynSig noAnn new_vs ty', fvs) } where @@ -1150,7 +1142,7 @@ renameSig ctxt sig@(PatSynSig _ vs ty) <+> ppr_sig_bndrs vs) renameSig ctxt sig@(SCCFunSig (_, st) v s) - = do { new_v <- lookupSigOccRnN ctxt sig v + = do { new_v <- lookupSigOccRn ctxt sig v ; return (SCCFunSig (noAnn, st) new_v s, emptyFVs) } -- COMPLETE Sigs can refer to imported IDs which is why we use ===================================== compiler/GHC/Rename/Env.hs ===================================== @@ -34,7 +34,7 @@ module GHC.Rename.Env ( ChildLookupResult(..), lookupSubBndrOcc_helper, - HsSigCtxt(..), lookupLocalTcNames, lookupSigOccRn, lookupSigOccRnN, + HsSigCtxt(..), lookupLocalTcNames, lookupSigOccRn, lookupSigCtxtOccRn, lookupInstDeclBndr, lookupFamInstName, @@ -2072,6 +2072,28 @@ data HsSigCtxt = ... | TopSigCtxt NameSet | .... f :: C a => a -> a -- No, not ok class C a where f :: a -> a + +Note [Signatures in instance decls] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Consider + class C a where + op :: a -> a + nop :: a -> a + + instance C ty where + bop :: [a] -> [a] + bop x = x + + nop :: [a] -> [a] + +When renameing the `bop` binding we'll give it an UnboundName (still with +OccName "bop") because `bop` is not a method of C. Then + +* when doing lookupSigOcc on `bop :: blah` we want to find `bop`, even though it + is an UnboundName (failing to do this causes #16610, and #25437) + +* When doing lookupSigOcc on `nop :: blah` we want to complain that there + is no accompanying binding, even though `nop` is a class method -} data HsSigCtxt @@ -2079,8 +2101,8 @@ data HsSigCtxt -- See Note [Signatures for top level things] | LocalBindCtxt NameSet -- In a local binding, binding these names | ClsDeclCtxt Name -- Class decl for this class - | InstDeclCtxt NameSet -- Instance decl whose user-written method - -- bindings are for these methods + | InstDeclCtxt (OccEnv Name) -- Instance decl whose user-written method + -- bindings are described by this OccEnv | HsBootCtxt NameSet -- Top level of a hs-boot file, binding these names | RoleAnnotCtxt NameSet -- A role annotation, with the names of all types -- in the group @@ -2095,14 +2117,10 @@ instance Outputable HsSigCtxt where lookupSigOccRn :: HsSigCtxt -> Sig GhcPs - -> LocatedA RdrName -> RnM (LocatedA Name) + -> GenLocated (EpAnn ann) RdrName + -> RnM (GenLocated (EpAnn ann) Name) lookupSigOccRn ctxt sig = lookupSigCtxtOccRn ctxt (hsSigDoc sig) -lookupSigOccRnN :: HsSigCtxt - -> Sig GhcPs - -> LocatedN RdrName -> RnM (LocatedN Name) -lookupSigOccRnN ctxt sig = lookupSigCtxtOccRn ctxt (hsSigDoc sig) - -- | Lookup a name in relation to the names in a 'HsSigCtxt' lookupSigCtxtOccRn :: HsSigCtxt -> SDoc -- ^ description of thing we're looking up, @@ -2155,34 +2173,37 @@ lookupBindGroupOcc ctxt what rdr_name also_try_tycon_ns ns_spec RoleAnnotCtxt ns -> lookup_top (elem_name_set_with_namespace ns) LocalBindCtxt ns -> lookup_group ns ClsDeclCtxt cls -> lookup_cls_op cls - InstDeclCtxt ns -> if uniqSetAny isUnboundName ns -- #16610 - then return $ NE.singleton $ Right $ mkUnboundNameRdr rdr_name - else lookup_top (elem_name_set_with_namespace ns) + InstDeclCtxt occ_env-> lookup_inst occ_env where elem_name_set_with_namespace ns n = check_namespace n && (n `elemNameSet` ns) check_namespace = coveredByNamespaceSpecifier ns_spec . nameNameSpace namespace = occNameSpace occ - occ = rdrNameOcc rdr_name - relevant_gres = - RelevantGREs - { includeFieldSelectors = WantBoth - , lookupVariablesForFields = True - , lookupTyConsAsWell = also_try_tycon_ns } - ok_gre = greIsRelevant relevant_gres namespace + occ = rdrNameOcc rdr_name + ok_gre = greIsRelevant relevant_gres namespace + relevant_gres = RelevantGREs { includeFieldSelectors = WantBoth + , lookupVariablesForFields = True + , lookupTyConsAsWell = also_try_tycon_ns } finish err gre | ok_gre gre - = NE.singleton (Right $ greName gre) + = NE.singleton (Right (greName gre)) | otherwise = NE.singleton (Left err) + succeed_with n = return $ NE.singleton $ Right n + lookup_cls_op cls = NE.singleton <$> lookupSubBndrOcc AllDeprecationWarnings cls doc rdr_name where doc = text "method of class" <+> quotes (ppr cls) + lookup_inst occ_env -- See Note [Signatures in instance decls] + = case lookupOccEnv occ_env occ of + Nothing -> bale_out_with [] + Just n -> succeed_with n + lookup_top keep_me = do { env <- getGlobalRdrEnv ; let occ = rdrNameOcc rdr_name @@ -2205,7 +2226,7 @@ lookupBindGroupOcc ctxt what rdr_name also_try_tycon_ns ns_spec ; let candidates_msg = candidates $ localRdrEnvElts env ; case mname of Just n - | n `elemNameSet` bound_names -> return $ NE.singleton $ Right n + | n `elemNameSet` bound_names -> succeed_with n | otherwise -> bale_out_with local_msg Nothing -> bale_out_with candidates_msg } ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -805,32 +805,22 @@ tcCheckId name res_ty tcInferId :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) -- Look up an occurrence of an Id -- Do not instantiate its type -tcInferId lname@(L _ id_name) +tcInferId lname@(L loc id_name) + | id_name `hasKey` assertIdKey - = do { dflags <- getDynFlags + = -- See Note [Overview of assertions] + do { dflags <- getDynFlags ; if gopt Opt_IgnoreAsserts dflags then tc_infer_id lname - else tc_infer_assert lname } + else tc_infer_id (L loc assertErrorName) } | otherwise - = do { (expr, ty) <- tc_infer_id lname - ; traceTc "tcInferId" (ppr id_name <+> dcolon <+> ppr ty) - ; return (expr, ty) } - -tc_infer_assert :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) --- Deal with an occurrence of 'assert' --- See Note [Adding the implicit parameter to 'assert'] -tc_infer_assert (L loc assert_name) - = do { assert_error_id <- tcLookupId assertErrorName - ; (wrap, id_rho) <- topInstantiate (OccurrenceOf assert_name) - (idType assert_error_id) - ; return (mkHsWrap wrap (HsVar noExtField (L loc assert_error_id)), id_rho) - } + = tc_infer_id lname tc_infer_id :: LocatedN Name -> TcM (HsExpr GhcTc, TcSigmaType) tc_infer_id (L loc id_name) = do { thing <- tcLookup id_name - ; case thing of + ; (expr,ty) <- case thing of ATcId { tct_id = id } -> do { check_local_id id ; return_id id } @@ -845,12 +835,45 @@ tc_infer_id (L loc id_name) (tcTyThingTyCon_maybe -> Just tc) -> failIllegalTyCon WL_Anything (tyConName tc) ATyVar name _ -> failIllegalTyVal name - _ -> failWithTc $ TcRnExpectedValueId thing } + _ -> failWithTc $ TcRnExpectedValueId thing + + ; traceTc "tcInferId" (ppr id_name <+> dcolon <+> ppr ty) + ; return (expr, ty) } where return_id id = return (HsVar noExtField (L loc id), idType id) -{- Note [Suppress hints with RequiredTypeArguments] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +{- Note [Overview of assertions] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you write (assert pred x) then + + * If `-fignore-asserts` (which sets Opt_IgnoreAsserts) is on, the code is + typechecked as written, but `assert`, defined in GHC.Internal.Base + assert _pred r = r + simply ignores `pred` + + * But without `-fignore-asserts`, GHC rewrites it to (assertError pred e) + and that is defined in GHC.Internal.IO.Exception as + assertError :: (?callStack :: CallStack) => Bool -> a -> a + which does test the predicate and, if it is not True, throws an exception, + capturing the CallStack. + + This rewrite is done in `tcInferId`. + +So `-fignore-asserts` makes the assertion go away altogether, which may be good for +production code. + +The reason that `assert` and `assertError` are defined in very different modules +is a historical accident. + +Note: the Haddock for `assert` is on `GHC.Internal.Base.assert`, since that is +what appears in the user's source proram. + +It's not entirely kosher to rewrite `assert` to `assertError`, because there's no +way to "undo" if you want to see the original source code in the typechecker +output. We can fix this if it becomes a problem. + +Note [Suppress hints with RequiredTypeArguments] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When a type variable is used at the term level, GHC assumes the user might have made a typo and suggests a term variable with a similar name. @@ -948,16 +971,8 @@ tcInferPatSyn ps nonBidirectionalErr :: Name -> TcRnMessage nonBidirectionalErr = TcRnPatSynNotBidirectional -{- Note [Adding the implicit parameter to 'assert'] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The typechecker transforms (assert e1 e2) to (assertError e1 e2). -This isn't really the Right Thing because there's no way to "undo" -if you want to see the original source code in the typechecker -output. We'll have fix this in due course, when we care more about -being able to reconstruct the exact original program. - -Note [Typechecking data constructors] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +{- Note [Typechecking data constructors] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ As per Note [Polymorphisation of linear fields] in GHC.Core.Multiplicity, linear fields of data constructors get a polymorphic multiplicity when the data constructor is used as a term: ===================================== libraries/base/changelog.md ===================================== @@ -1,6 +1,8 @@ # Changelog for [`base` package](http://hackage.haskell.org/package/base) ## 4.22.0.0 *TBA* + * Define `displayException` of `SomeAsyncException` to unwrap the exception. + ([CLC proposal #309](https://github.com/haskell/core-libraries-committee/issues/309)) * Restrict `Data.List.NonEmpty.unzip` to `NonEmpty (a, b) -> (NonEmpty a, NonEmpty b)`. ([CLC proposal #86](https://github.com/haskell/core-libraries-committee/issues/86)) * Modify the implementation of `Control.Exception.throw` to avoid call-sites being inferred as diverging via precise exception. ([GHC #25066](https://gitlab.haskell.org/ghc/ghc/-/issues/25066), [CLC proposal #290](https://github.com/haskell/core-libraries-committee/issues/290)) ===================================== libraries/ghc-internal/src/GHC/Internal/Base.hs ===================================== @@ -2107,6 +2107,9 @@ id x = x -- Assertion function. This simply ignores its boolean argument. -- The compiler may rewrite it to @('assertError' line)@. +-- The Haddock below is attached to `assert`, since that is +-- what occurs in source programs. +-- See Note [Overview of assertions] in GHC.Tc.Gen.Head -- | If the first argument evaluates to 'True', then the result is the -- second argument. Otherwise an 'Control.Exception.AssertionFailed' exception @@ -2115,14 +2118,9 @@ id x = x -- -- Assertions can normally be turned on or off with a compiler flag -- (for GHC, assertions are normally on unless optimisation is turned on --- with @-O@ or the @-fignore-asserts@ --- option is given). When assertions are turned off, the first --- argument to 'assert' is ignored, and the second argument is --- returned as the result. - --- SLPJ: in 5.04 etc 'assert' is in GHC.Prim, --- but from Template Haskell onwards it's simply --- defined here in Base.hs +-- with @-O@ or the @-fignore-asserts@ option is given). When assertions +-- are turned off, the first argument to 'assert' is ignored, and the second +-- argument is returned as the result. assert :: Bool -> a -> a assert _pred r = r ===================================== libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs ===================================== @@ -187,7 +187,8 @@ instance Show SomeAsyncException where showsPrec p (SomeAsyncException e) = showsPrec p e -- | @since base-4.7.0.0 -instance Exception SomeAsyncException +instance Exception SomeAsyncException where + displayException (SomeAsyncException e) = displayException e -- | @since base-4.7.0.0 asyncExceptionToException :: Exception e => e -> SomeException @@ -438,6 +439,7 @@ instance Show IOException where _ -> showString " (" . showString s . showString ")") assertError :: (?callStack :: CallStack) => Bool -> a -> a +-- See Note [Overview of assertions] in GHC.Tc.Gen.Head assertError predicate v | predicate = v | otherwise = lazy $ unsafeDupablePerformIO $ do -- lazy: See Note [Strictness of assertError] ===================================== testsuite/tests/rename/should_fail/T25437.hs ===================================== @@ -0,0 +1,16 @@ +{-# LANGUAGE ScopedTypeVariables #-} + +module T25437 where + +class C a where + foo :: Int -> Maybe a + +instance C (Maybe x) where + foo :: Int -> Maybe [a] + +instance C [x] where + foo :: forall b. Int -> Maybe [b] + foo _ = Just @[b] [] + + something :: x -> x + something = () ===================================== testsuite/tests/rename/should_fail/T25437.stderr ===================================== @@ -0,0 +1,5 @@ +T25437.hs:9:3: error: [GHC-44432] + The class method signature for ‘foo’ lacks an accompanying binding + +T25437.hs:16:3: error: [GHC-54721] + ‘something’ is not a (visible) method of class ‘C’ ===================================== testsuite/tests/rename/should_fail/T5001b.stderr ===================================== @@ -1,5 +1,4 @@ T5001b.hs:10:17: error: [GHC-44432] The INLINE pragma for ‘genum’ lacks an accompanying binding - Suggested fix: - Move the INLINE pragma to the declaration site of ‘genum’. + ===================================== testsuite/tests/rename/should_fail/all.T ===================================== @@ -231,3 +231,4 @@ test('T14032c', normal, compile_fail, ['']) test('T14032f', normal, compile_fail, ['']) test('T23501_fail', normal, compile_fail, ['']) test('T23501_fail_ext', normal, compile_fail, ['']) +test('T25437', normal, compile_fail, ['']) ===================================== testsuite/tests/simd/should_run/T25561.hs ===================================== @@ -0,0 +1,11 @@ +{-# LANGUAGE MagicHash, UnboxedTuples #-} +import Data.Array.Base +import Data.Array.IO.Internals +import GHC.Exts +import GHC.IO + +main :: IO () +main = do + ma@(IOUArray (STUArray l _ _ mba)) <- newListArray (0, 10) ([0..10] :: [Float]) + IO $ \s -> (# writeFloatArrayAsFloatX4# mba 1# (broadcastFloatX4# 3.0#) s, () #) + print =<< getElems ma ===================================== testsuite/tests/simd/should_run/T25561.stdout ===================================== @@ -0,0 +1 @@ +[0.0,3.0,3.0,3.0,3.0,5.0,6.0,7.0,8.0,9.0,10.0] ===================================== testsuite/tests/simd/should_run/all.T ===================================== @@ -66,6 +66,7 @@ test('simd_insert_array', [], compile_and_run, ['']) test('T22187', [],compile,['']) test('T22187_run', [],compile_and_run,['']) test('T25062_V16', [], compile_and_run, ['']) +test('T25561', [], compile_and_run, ['']) # Even if the CPU we run on doesn't support *executing* those tests we should try to # compile them. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/d6f995b86abec29f058d374450036e34a1ae174a...ce338a17abeed39a90e73384908828a2c6396297 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/d6f995b86abec29f058d374450036e34a1ae174a...ce338a17abeed39a90e73384908828a2c6396297 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 15 17:06:17 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Sun, 15 Dec 2024 12:06:17 -0500 Subject: [Git][ghc/ghc][wip/T20264] 95 commits: Remove TcRnDeprecatedInvisTyArgInConPat mechanism Message-ID: <675f0c89731d7_3890536cff5c99860@gitlab.mail> Simon Peyton Jones pushed to branch wip/T20264 at Glasgow Haskell Compiler / GHC Commits: 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 9c53489d by Andrei Borzenkov at 2024-12-12T15:06:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 13fe48d4 by Matthew Pickering at 2024-12-12T15:07:19-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - 62a2b25f by Sylvain Henry at 2024-12-14T04:31:09-05:00 TNTC: set CmmProc entry_label properly (#25565) Before this patch we were renaming the entry label of a CmmProc late in the CmmToAsm pass. It led to inconsistencies and to some labels being used in info tables but not being emitted (#25565). Now we set the CmmProc entry label earlier in the StgToCmm monad and we don't renamed it afterwards. - - - - - b339e7c3 by Simon Hengel at 2024-12-14T04:31:47-05:00 Make filter functionality for system tools line-based This is more efficient as: - All existing filter functions were line-based anyway. They broke up the input into lines and then joined it back together. - We already break up the output from system tools into lines when processing it. Splitting up the output of system tools once and then filtering and processing it reduces both code and runtime complexity. - - - - - 39669077 by Simon Hengel at 2024-12-14T04:31:47-05:00 Refactoring: Don't use a `Chan` when parsing SysTools output - - - - - 3e1e9438 by Simon Peyton Jones at 2024-12-14T23:00:05+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - b507e652 by Simon Peyton Jones at 2024-12-14T23:00:05+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - d82cd6a6 by Joseph Fourment at 2024-12-15T16:37:09+00:00 compiler: introduce type variable unfoldings The plan for #20264 is to introduce let-bound types to have observable sharing in types. To avoid the need to carry an environment when dealing with occurrences of these type variables, we embed the types they're bound to (if any) in a `tv_unfolding :: Maybe Type` attribute. This way, one can look through let-bound type variables using `coreView` and friends. In particular, definitional equality looks through unfoldings. - - - - - 296a6cc0 by Joseph Fourment at 2024-12-15T16:37:09+00:00 simple-opt: don't inline type-lets - - - - - 952eddc5 by Joseph Fourment at 2024-12-15T16:37:09+00:00 specialise: fix type-lets in DFun unfoldings During specialisation, a dictionary being specialised gets a new unfolding by turning `DFun \ bndrs -> MkD @<T1> ... @<Tm> <op1> ... <opn>` into `DFun \ spec_bndrs -> MkD @((\ bndrs -> TYPE: <T1>) spec_args) ... ((\ bndrs -> <opn>) spec_args)` which in turns gets beta-reduced into `DFun \ spec_bndrs -> MkD (let { bndrs = spec_args } in TYPE: <T1>) ... (let { bndrs = spec_args } in <opn>)`. Previously, such let binders would immediately be substituted into the type so it didn't cause any issue, but now we want to avoid inlining. Arguments of the form `let { bndrs = spec_args } in TYPE: <T1>` are not considered as type arguments since they're not of the canonical form `TYPE: something`. This commit restores the previous behavior of substituting the specialised type arguments. Alternatively, we could attach some floated type bindings to `DFun`s. - - - - - f14dfa02 by Joseph Fourment at 2024-12-15T16:37:09+00:00 occur-anal: implement occurence analysis for type variables In order to find out let-bound type variables that are used only once, in the hope of inlining them, we need to track type variables as well in the occurrence analiser. Just like Id's, we attach an `OccInfo` to each (immutable) type variable, and we walk into types and coercions to accurately gather occurrences. - - - - - 2013ad95 by Joseph Fourment at 2024-12-15T16:37:09+00:00 simplifier: don't inline type-lets Keep propagating type-lets further down the pipeline, in the simplifier. We also update CallArity, CprAnal, DmdAnal, WorkWrap, and Specialise to ignore type-lets. - - - - - 953e3d95 by Joseph Fourment at 2024-12-15T16:37:09+00:00 prep: make type-lets pass through CorePrep As a first attempt, ignore type-lets in CorePrep to avoid crashes. However, this is not enough: CorePrep also does some let-floating. If we don't float type-lets along with value-level let-bindings, the latter can float out of the scope of a type variable in use. - - - - - 2487bdaa by Joseph Fourment at 2024-12-15T16:37:09+00:00 simple-opt: fix simple_type_bind Also: - Inline small types using a new typeIsSmallEnoughToInline predicate - Inline single-occurrence variables - - - - - 14658926 by Joseph Fourment at 2024-12-15T16:37:09+00:00 simple-opt: make beta-reduction use simple_bind_type - - - - - f4bdf5a0 by Joseph Fourment at 2024-12-15T16:37:09+00:00 iface: add IfaceTypeLetBndr to represent non-top-level type-let binders IfaceLetBndr isn't fit to represent type-let binders, as it includes a bunch of vacuous flags for Ids only. Instead of putting squares in circles, I added a new constructor for type binders. The downside is that it breaks existing iface files, so since we can't bootstrap yet so we have to bootstrap a cherry-picked branch and then checkout again to build with --freeze1. To avoid similar issues in the future, IfaceTyVarInfoItem serialises with a tag despite there being only one constructor for now. - - - - - 6fb97ab4 by Joseph Fourment at 2024-12-15T16:37:09+00:00 dmd-anal: prefix unused variable with _ to avoid warning - - - - - 670bba04 by Joseph Fourment at 2024-12-15T16:37:09+00:00 type: inline unfoldView in sORTKind_maybe - - - - - 696eb27f by Joseph Fourment at 2024-12-15T16:37:09+00:00 tidy: deal with type-lets - - - - - 1b0329c9 by Joseph Fourment at 2024-12-15T16:37:09+00:00 notes: add Note [Type and coercion lets] - - - - - 9c4937e5 by Joseph Fourment at 2024-12-15T16:37:10+00:00 notes: update Note [Comparing nullary type synonyms] to account for type variables While updating backlinks, I noticed the optimisation for type variables could be performed in more places. - - - - - 89ab94e9 by Joseph Fourment at 2024-12-15T16:37:10+00:00 simplifier: inline single-occurring type-lets - - - - - 09767789 by Joseph Fourment at 2024-12-15T16:37:10+00:00 cleanup: remove NOINLINE on tyVarOccInfo - - - - - f21d0aa3 by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 Wibbles - - - - - 53082465 by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 Wibbles - - - - - fb5d0346 by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 Progress - - - - - 12b18e6a by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 Progress - - - - - 12e904c4 by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 More progress - - - - - c862cec6 by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 Progress ...doesn't compile though - - - - - d7944f3f by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 Mostly working now - - - - - 059771ad by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 Aggressively create type-lets - - - - - 01e210d5 by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 more progress - - - - - 054e3e28 by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 More progress - - - - - 31c066ea by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 Temp debug printing - - - - - 993f12c9 by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 Remove bogus assert - - - - - 886c462e by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 Fix anoher couple of bugs in SimpleOpt and exprIsTrivial - - - - - 68bcd293 by Simon Peyton Jones at 2024-12-15T16:37:10+00:00 Improve zonking of foreign decls to avoid TcTyVars escaping - - - - - 9676d828 by Simon Peyton Jones at 2024-12-15T16:37:11+00:00 Wibbles - - - - - dab8eb02 by Simon Peyton Jones at 2024-12-15T16:37:11+00:00 Some small wibbles - - - - - f0b157e3 by Simon Peyton Jones at 2024-12-15T16:37:11+00:00 Improvements - - - - - 20 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Coercion/Axiom.hs - compiler/GHC/Core/FVs.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Make.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/CSE.hs - compiler/GHC/Core/Opt/CallArity.hs - compiler/GHC/Core/Opt/CprAnal.hs - compiler/GHC/Core/Opt/DmdAnal.hs - compiler/GHC/Core/Opt/FloatIn.hs - compiler/GHC/Core/Opt/OccurAnal.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/1cf19e53374cf9bace9fcf4a0dacf08c959fbd6a...f0b157e369afdf77577bb00b9baf61c6ca4d8318 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/1cf19e53374cf9bace9fcf4a0dacf08c959fbd6a...f0b157e369afdf77577bb00b9baf61c6ca4d8318 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 15 21:08:16 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Sun, 15 Dec 2024 16:08:16 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25494 Message-ID: <675f454037a43_3890531daf9fc1129eb@gitlab.mail> Simon Peyton Jones pushed new branch wip/T25494 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25494 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 15 22:13:28 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Sun, 15 Dec 2024 17:13:28 -0500 Subject: [Git][ghc/ghc][wip/T25494] Wibble imports Message-ID: <675f5488cdbcb_38905323e234c1218dc@gitlab.mail> Simon Peyton Jones pushed to branch wip/T25494 at Glasgow Haskell Compiler / GHC Commits: 80c38aef by Simon Peyton Jones at 2024-12-15T22:13:11+00:00 Wibble imports - - - - - 1 changed file: - compiler/GHC/Tc/Gen/Head.hs Changes: ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -35,7 +35,6 @@ import {-# SOURCE #-} GHC.Tc.Gen.Splice( getUntypedSpliceBody ) import GHC.Prelude import GHC.Hs -import GHC.Hs.Syn.Type import GHC.Tc.Gen.HsType import GHC.Tc.Gen.Bind( chooseInferredQuantifiers ) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/80c38aef9567fcb7d8b935f0b445beaf864e6482 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/80c38aef9567fcb7d8b935f0b445beaf864e6482 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 15 23:26:23 2024 From: gitlab at gitlab.haskell.org (Brandon Chinn (@brandonchinn178)) Date: Sun, 15 Dec 2024 18:26:23 -0500 Subject: [Git][ghc/ghc][wip/interpolated-strings] 12 commits: JS: Basic cleanup for unused stuff to simplify things. Message-ID: <675f659fd4ec0_3890532b89f8c1280c7@gitlab.mail> Brandon Chinn pushed to branch wip/interpolated-strings at Glasgow Haskell Compiler / GHC Commits: 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - 68a934bf by Brandon Chinn at 2024-12-09T19:29:36-08:00 Unify ITstring + ITstringMulti - - - - - f18000a3 by Brandon Chinn at 2024-12-15T15:25:35-08:00 Unify HsString + HsMultilineString - - - - - f5a7d44e by Brandon Chinn at 2024-12-15T15:25:36-08:00 Move multiline string processing functions to top-level - - - - - c69c7da8 by Brandon Chinn at 2024-12-15T15:25:36-08:00 Always use processCharsSingle to get StringLexError - - - - - 40a9d445 by Brandon Chinn at 2024-12-15T15:25:36-08:00 Implement interpolated strings - - - - - 30 changed files: - compiler/GHC.hs - compiler/GHC/Hs/Expr.hs - compiler/GHC/Hs/Lit.hs - compiler/GHC/Hs/Syn/Type.hs - compiler/GHC/Hs/Utils.hs - compiler/GHC/HsToCore/Match/Literal.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/Lexer.x - compiler/GHC/Parser/String.hs - compiler/GHC/Rename/Expr.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Rename/Splice.hs - compiler/GHC/StgToJS/Apply.hs - compiler/GHC/StgToJS/Arg.hs - compiler/GHC/StgToJS/CodeGen.hs - compiler/GHC/StgToJS/Expr.hs - compiler/GHC/StgToJS/Ids.hs - compiler/GHC/StgToJS/Linker/Linker.hs - compiler/GHC/StgToJS/Monad.hs - compiler/GHC/StgToJS/Object.hs - compiler/GHC/StgToJS/Symbols.hs - compiler/GHC/StgToJS/Types.hs - compiler/GHC/Tc/Gen/HsType.hs - compiler/GHC/Tc/Utils/Instantiate.hs - compiler/GHC/Tc/Utils/TcMType.hs - compiler/GHC/ThToHs.hs - compiler/GHC/Unit/Module/Graph.hs - compiler/Language/Haskell/Syntax/Expr.hs - compiler/Language/Haskell/Syntax/Extension.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f560c8b4cc972354a489872b78b6078c4392cfe3...40a9d4458428aeab496a9ab1864da368a7ef15f4 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f560c8b4cc972354a489872b78b6078c4392cfe3...40a9d4458428aeab496a9ab1864da368a7ef15f4 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 15 23:35:54 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Sun, 15 Dec 2024 18:35:54 -0500 Subject: [Git][ghc/ghc][master] LLVM: When emitting a vector literal with ppTypeLit, include the type information Message-ID: <675f67dac861c_3890532b0b16413351b@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - 4 changed files: - compiler/GHC/Llvm/Ppr.hs - + testsuite/tests/simd/should_run/T25561.hs - + testsuite/tests/simd/should_run/T25561.stdout - testsuite/tests/simd/should_run/all.T Changes: ===================================== compiler/GHC/Llvm/Ppr.hs ===================================== @@ -669,9 +669,7 @@ ppTypeLit = ppTypeLit' [] {-# SPECIALIZE ppTypeLit :: LlvmCgConfig -> LlvmLit -> HLine #-} -- see Note [SPECIALIZE to HDoc] in GHC.Utils.Outputable ppTypeLit' :: IsLine doc => [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> doc -ppTypeLit' attrs opts l = case l of - LMVectorLit {} -> ppLit opts l - _ -> ppLlvmType (getLitType l) <+> ppSpaceJoin ppLlvmParamAttr attrs <+> ppLit opts l +ppTypeLit' attrs opts l = ppLlvmType (getLitType l) <+> ppSpaceJoin ppLlvmParamAttr attrs <+> ppLit opts l {-# SPECIALIZE ppTypeLit' :: [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> SDoc #-} {-# SPECIALIZE ppTypeLit' :: [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> HLine #-} -- see Note [SPECIALIZE to HDoc] in GHC.Utils.Outputable ===================================== testsuite/tests/simd/should_run/T25561.hs ===================================== @@ -0,0 +1,11 @@ +{-# LANGUAGE MagicHash, UnboxedTuples #-} +import Data.Array.Base +import Data.Array.IO.Internals +import GHC.Exts +import GHC.IO + +main :: IO () +main = do + ma@(IOUArray (STUArray l _ _ mba)) <- newListArray (0, 10) ([0..10] :: [Float]) + IO $ \s -> (# writeFloatArrayAsFloatX4# mba 1# (broadcastFloatX4# 3.0#) s, () #) + print =<< getElems ma ===================================== testsuite/tests/simd/should_run/T25561.stdout ===================================== @@ -0,0 +1 @@ +[0.0,3.0,3.0,3.0,3.0,5.0,6.0,7.0,8.0,9.0,10.0] ===================================== testsuite/tests/simd/should_run/all.T ===================================== @@ -66,6 +66,7 @@ test('simd_insert_array', [], compile_and_run, ['']) test('T22187', [],compile,['']) test('T22187_run', [],compile_and_run,['']) test('T25062_V16', [], compile_and_run, ['']) +test('T25561', [], compile_and_run, ['']) # Even if the CPU we run on doesn't support *executing* those tests we should try to # compile them. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2d3a0a70def8a2044f2954b29df1a186b3f08dcc -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2d3a0a70def8a2044f2954b29df1a186b3f08dcc You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 15 23:38:09 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Sun, 15 Dec 2024 18:38:09 -0500 Subject: [Git][ghc/ghc][master] Fix signature lookup in instance declarations Message-ID: <675f68618baf_4041fbcdcc52636@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 6 changed files: - compiler/GHC/Rename/Bind.hs - compiler/GHC/Rename/Env.hs - + testsuite/tests/rename/should_fail/T25437.hs - + testsuite/tests/rename/should_fail/T25437.stderr - testsuite/tests/rename/should_fail/T5001b.stderr - testsuite/tests/rename/should_fail/all.T Changes: ===================================== compiler/GHC/Rename/Bind.hs ===================================== @@ -956,7 +956,8 @@ rnMethodBinds is_cls_decl cls ktv_names binds sigs ; let (spec_prags, other_sigs) = partition (isSpecLSig <||> isSpecInstLSig) sigs bound_nms = mkNameSet (collectHsBindsBinders CollNoDictBinders binds') sig_ctxt | is_cls_decl = ClsDeclCtxt cls - | otherwise = InstDeclCtxt bound_nms + | otherwise = InstDeclCtxt (mkOccEnv [ (nameOccName n, n) + | n <- nonDetEltsUniqSet bound_nms ]) ; (spec_prags', spg_fvs) <- renameSigs sig_ctxt spec_prags ; (other_sigs', sig_fvs) <- bindLocalNamesFV ktv_names $ renameSigs sig_ctxt other_sigs @@ -1071,18 +1072,9 @@ renameSigs ctxt sigs ; return (good_sigs, sig_fvs) } ---------------------- --- We use lookupSigOccRn in the signatures, which is a little bit unsatisfactory --- because this won't work for: --- instance Foo T where --- {-# INLINE op #-} --- Baz.op = ... --- We'll just rename the INLINE prag to refer to whatever other 'op' --- is in scope. (I'm assuming that Baz.op isn't in scope unqualified.) --- Doesn't seem worth much trouble to sort this. - renameSig :: HsSigCtxt -> Sig GhcPs -> RnM (Sig GhcRn, FreeVars) renameSig ctxt sig@(TypeSig _ vs ty) - = do { new_vs <- mapM (lookupSigOccRnN ctxt sig) vs + = do { new_vs <- mapM (lookupSigOccRn ctxt sig) vs ; let doc = TypeSigCtx (ppr_sig_bndrs vs) ; (new_ty, fvs) <- rnHsSigWcType doc ty ; return (TypeSig noAnn new_vs new_ty, fvs) } @@ -1091,7 +1083,7 @@ renameSig ctxt sig@(ClassOpSig _ is_deflt vs ty) = do { defaultSigs_on <- xoptM LangExt.DefaultSignatures ; when (is_deflt && not defaultSigs_on) $ addErr (TcRnUnexpectedDefaultSig sig) - ; new_v <- mapM (lookupSigOccRnN ctxt sig) vs + ; new_v <- mapM (lookupSigOccRn ctxt sig) vs ; (new_ty, fvs) <- rnHsSigType ty_ctxt TypeLevel ty ; return (ClassOpSig noAnn is_deflt new_v new_ty, fvs) } where @@ -1119,7 +1111,7 @@ renameSig _ (SpecInstSig (_, src) ty) renameSig ctxt sig@(SpecSig _ v tys inl) = do { new_v <- case ctxt of TopSigCtxt {} -> lookupLocatedOccRn v - _ -> lookupSigOccRnN ctxt sig v + _ -> lookupSigOccRn ctxt sig v ; (new_ty, fvs) <- foldM do_one ([],emptyFVs) tys ; return (SpecSig noAnn new_v new_ty inl, fvs) } where @@ -1130,7 +1122,7 @@ renameSig ctxt sig@(SpecSig _ v tys inl) ; return ( new_ty:tys, fvs_ty `plusFV` fvs) } renameSig ctxt sig@(InlineSig _ v s) - = do { new_v <- lookupSigOccRnN ctxt sig v + = do { new_v <- lookupSigOccRn ctxt sig v ; return (InlineSig noAnn new_v s, emptyFVs) } renameSig ctxt (FixSig _ fsig) @@ -1138,11 +1130,11 @@ renameSig ctxt (FixSig _ fsig) ; return (FixSig noAnn new_fsig, emptyFVs) } renameSig ctxt sig@(MinimalSig (_, s) (L l bf)) - = do new_bf <- bfTraverse (lookupSigOccRnN ctxt sig) bf + = do new_bf <- bfTraverse (lookupSigOccRn ctxt sig) bf return (MinimalSig (noAnn, s) (L l new_bf), emptyFVs) renameSig ctxt sig@(PatSynSig _ vs ty) - = do { new_vs <- mapM (lookupSigOccRnN ctxt sig) vs + = do { new_vs <- mapM (lookupSigOccRn ctxt sig) vs ; (ty', fvs) <- rnHsSigType ty_ctxt TypeLevel ty ; return (PatSynSig noAnn new_vs ty', fvs) } where @@ -1150,7 +1142,7 @@ renameSig ctxt sig@(PatSynSig _ vs ty) <+> ppr_sig_bndrs vs) renameSig ctxt sig@(SCCFunSig (_, st) v s) - = do { new_v <- lookupSigOccRnN ctxt sig v + = do { new_v <- lookupSigOccRn ctxt sig v ; return (SCCFunSig (noAnn, st) new_v s, emptyFVs) } -- COMPLETE Sigs can refer to imported IDs which is why we use ===================================== compiler/GHC/Rename/Env.hs ===================================== @@ -34,7 +34,7 @@ module GHC.Rename.Env ( ChildLookupResult(..), lookupSubBndrOcc_helper, - HsSigCtxt(..), lookupLocalTcNames, lookupSigOccRn, lookupSigOccRnN, + HsSigCtxt(..), lookupLocalTcNames, lookupSigOccRn, lookupSigCtxtOccRn, lookupInstDeclBndr, lookupFamInstName, @@ -2072,6 +2072,28 @@ data HsSigCtxt = ... | TopSigCtxt NameSet | .... f :: C a => a -> a -- No, not ok class C a where f :: a -> a + +Note [Signatures in instance decls] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Consider + class C a where + op :: a -> a + nop :: a -> a + + instance C ty where + bop :: [a] -> [a] + bop x = x + + nop :: [a] -> [a] + +When renameing the `bop` binding we'll give it an UnboundName (still with +OccName "bop") because `bop` is not a method of C. Then + +* when doing lookupSigOcc on `bop :: blah` we want to find `bop`, even though it + is an UnboundName (failing to do this causes #16610, and #25437) + +* When doing lookupSigOcc on `nop :: blah` we want to complain that there + is no accompanying binding, even though `nop` is a class method -} data HsSigCtxt @@ -2079,8 +2101,8 @@ data HsSigCtxt -- See Note [Signatures for top level things] | LocalBindCtxt NameSet -- In a local binding, binding these names | ClsDeclCtxt Name -- Class decl for this class - | InstDeclCtxt NameSet -- Instance decl whose user-written method - -- bindings are for these methods + | InstDeclCtxt (OccEnv Name) -- Instance decl whose user-written method + -- bindings are described by this OccEnv | HsBootCtxt NameSet -- Top level of a hs-boot file, binding these names | RoleAnnotCtxt NameSet -- A role annotation, with the names of all types -- in the group @@ -2095,14 +2117,10 @@ instance Outputable HsSigCtxt where lookupSigOccRn :: HsSigCtxt -> Sig GhcPs - -> LocatedA RdrName -> RnM (LocatedA Name) + -> GenLocated (EpAnn ann) RdrName + -> RnM (GenLocated (EpAnn ann) Name) lookupSigOccRn ctxt sig = lookupSigCtxtOccRn ctxt (hsSigDoc sig) -lookupSigOccRnN :: HsSigCtxt - -> Sig GhcPs - -> LocatedN RdrName -> RnM (LocatedN Name) -lookupSigOccRnN ctxt sig = lookupSigCtxtOccRn ctxt (hsSigDoc sig) - -- | Lookup a name in relation to the names in a 'HsSigCtxt' lookupSigCtxtOccRn :: HsSigCtxt -> SDoc -- ^ description of thing we're looking up, @@ -2155,34 +2173,37 @@ lookupBindGroupOcc ctxt what rdr_name also_try_tycon_ns ns_spec RoleAnnotCtxt ns -> lookup_top (elem_name_set_with_namespace ns) LocalBindCtxt ns -> lookup_group ns ClsDeclCtxt cls -> lookup_cls_op cls - InstDeclCtxt ns -> if uniqSetAny isUnboundName ns -- #16610 - then return $ NE.singleton $ Right $ mkUnboundNameRdr rdr_name - else lookup_top (elem_name_set_with_namespace ns) + InstDeclCtxt occ_env-> lookup_inst occ_env where elem_name_set_with_namespace ns n = check_namespace n && (n `elemNameSet` ns) check_namespace = coveredByNamespaceSpecifier ns_spec . nameNameSpace namespace = occNameSpace occ - occ = rdrNameOcc rdr_name - relevant_gres = - RelevantGREs - { includeFieldSelectors = WantBoth - , lookupVariablesForFields = True - , lookupTyConsAsWell = also_try_tycon_ns } - ok_gre = greIsRelevant relevant_gres namespace + occ = rdrNameOcc rdr_name + ok_gre = greIsRelevant relevant_gres namespace + relevant_gres = RelevantGREs { includeFieldSelectors = WantBoth + , lookupVariablesForFields = True + , lookupTyConsAsWell = also_try_tycon_ns } finish err gre | ok_gre gre - = NE.singleton (Right $ greName gre) + = NE.singleton (Right (greName gre)) | otherwise = NE.singleton (Left err) + succeed_with n = return $ NE.singleton $ Right n + lookup_cls_op cls = NE.singleton <$> lookupSubBndrOcc AllDeprecationWarnings cls doc rdr_name where doc = text "method of class" <+> quotes (ppr cls) + lookup_inst occ_env -- See Note [Signatures in instance decls] + = case lookupOccEnv occ_env occ of + Nothing -> bale_out_with [] + Just n -> succeed_with n + lookup_top keep_me = do { env <- getGlobalRdrEnv ; let occ = rdrNameOcc rdr_name @@ -2205,7 +2226,7 @@ lookupBindGroupOcc ctxt what rdr_name also_try_tycon_ns ns_spec ; let candidates_msg = candidates $ localRdrEnvElts env ; case mname of Just n - | n `elemNameSet` bound_names -> return $ NE.singleton $ Right n + | n `elemNameSet` bound_names -> succeed_with n | otherwise -> bale_out_with local_msg Nothing -> bale_out_with candidates_msg } ===================================== testsuite/tests/rename/should_fail/T25437.hs ===================================== @@ -0,0 +1,16 @@ +{-# LANGUAGE ScopedTypeVariables #-} + +module T25437 where + +class C a where + foo :: Int -> Maybe a + +instance C (Maybe x) where + foo :: Int -> Maybe [a] + +instance C [x] where + foo :: forall b. Int -> Maybe [b] + foo _ = Just @[b] [] + + something :: x -> x + something = () ===================================== testsuite/tests/rename/should_fail/T25437.stderr ===================================== @@ -0,0 +1,5 @@ +T25437.hs:9:3: error: [GHC-44432] + The class method signature for ‘foo’ lacks an accompanying binding + +T25437.hs:16:3: error: [GHC-54721] + ‘something’ is not a (visible) method of class ‘C’ ===================================== testsuite/tests/rename/should_fail/T5001b.stderr ===================================== @@ -1,5 +1,4 @@ T5001b.hs:10:17: error: [GHC-44432] The INLINE pragma for ‘genum’ lacks an accompanying binding - Suggested fix: - Move the INLINE pragma to the declaration site of ‘genum’. + ===================================== testsuite/tests/rename/should_fail/all.T ===================================== @@ -231,3 +231,4 @@ test('T14032c', normal, compile_fail, ['']) test('T14032f', normal, compile_fail, ['']) test('T23501_fail', normal, compile_fail, ['']) test('T23501_fail_ext', normal, compile_fail, ['']) +test('T25437', normal, compile_fail, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/bfacc086604c18e30758772a05a8c81e3a4e01bc -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/bfacc086604c18e30758772a05a8c81e3a4e01bc You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 16 01:11:44 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Sun, 15 Dec 2024 20:11:44 -0500 Subject: [Git][ghc/ghc][wip/T20264] Rmmove trace Message-ID: <675f7e507e737_4041fcd4e48530ee@gitlab.mail> Simon Peyton Jones pushed to branch wip/T20264 at Glasgow Haskell Compiler / GHC Commits: 63954e4c by Simon Peyton Jones at 2024-12-16T01:11:28+00:00 Rmmove trace - - - - - 1 changed file: - compiler/GHC/Core/Opt/SetLevels.hs Changes: ===================================== compiler/GHC/Core/Opt/SetLevels.hs ===================================== @@ -1804,12 +1804,13 @@ abstractVars :: Level -> LevelEnv -> DVarSet -> AbsVars -- Uniques are not deterministic. abstractVars dest_lvl (LE { le_subst = subst, le_lvl_env = lvl_env }) in_fvs = -- NB: sortQuantVars might not put duplicates next to each other - pprTrace "abstractVars" - (vcat [ text "r7:" <+> ppr r7 - , text "r1:" <+> ppr r1 - , text "r2:" <+> ppr r3 - , text "r3:" <+> ppr r3 - , text "subst:" <+> ppr subst ]) r7 +-- pprTrace "abstractVars" +-- (vcat [ text "r7:" <+> ppr r7 +-- , text "r1:" <+> ppr r1 +-- , text "r2:" <+> ppr r3 +-- , text "r3:" <+> ppr r3 +-- , text "subst:" <+> ppr subst ]) + r7 where r7 = map zap r6 r6 = dep_anal r5 View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/63954e4cbca1ee47fa2290cf8406588e6bfee045 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/63954e4cbca1ee47fa2290cf8406588e6bfee045 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 16 10:01:32 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Mon, 16 Dec 2024 05:01:32 -0500 Subject: [Git][ghc/ghc] Pushed new tag ghc-9.12.1 Message-ID: <675ffa7c6b963_27d8384aada86297e@gitlab.mail> Zubin pushed new tag ghc-9.12.1 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/ghc-9.12.1 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 16 12:07:00 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Mon, 16 Dec 2024 07:07:00 -0500 Subject: [Git][ghc/ghc][ghc-9.12] 39 commits: rts/linker: Fix out-of-bounds mapping logic Message-ID: <676017e4c3660_34f7feadce74255f7@gitlab.mail> Zubin pushed to branch ghc-9.12 at Glasgow Haskell Compiler / GHC Commits: 83377584 by Ben Gamari at 2024-12-13T09:52:25+05:30 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. (cherry picked from commit 292ed74ea908b64490e91346b890cbebdcde37d0) - - - - - 194ad792 by Ben Gamari at 2024-12-13T09:53:38+05:30 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ (cherry picked from commit 952a1243a77ac73222659a49a642b20e80d77cdb) - - - - - f5ed23d9 by Ben Gamari at 2024-12-13T09:53:50+05:30 rts/linker: Clarify debug output (cherry picked from commit 20912f5bac6fe4146172accc1849d9b762eb45e3) - - - - - 051d8a37 by Ben Gamari at 2024-12-13T09:54:37+05:30 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. (cherry picked from commit a104508d2ea5bbc61c4a756dca42fc043b329709) - - - - - fa0348b8 by Cheng Shao at 2024-12-13T09:54:47+05:30 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. (cherry picked from commit 88c4fe1d8a3bdbedf3972fde12f663a974cc2191) - - - - - 563a3124 by Ben Gamari at 2024-12-13T09:54:56+05:30 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. (cherry picked from commit c3fc9b861fd00a85a4fcbd9960b8242d9fabe04b) - - - - - a9e0cfe7 by Ben Gamari at 2024-12-13T09:55:33+05:30 testsuite: Handle division-by-zero more gracefully Previously we would fail with an ZeroDivisionError. Fixes #25321 (cherry picked from commit 513775082b89deae3f83896031caf0e89a7ed333) - - - - - a2c033cf by Ben Gamari at 2024-12-13T09:55:33+05:30 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. (cherry picked from commit 7890f2d8526dd90584eaa181ab10bd30d90e6743) - - - - - 14d80de1 by Brandon Chinn at 2024-12-13T09:56:20+05:30 Fix panic in multiline string with unterminated gap (#25530) (cherry picked from commit a8ceccf397216f63d609c4f7471506773c98572f) - - - - - 4ae5ef94 by Brandon Chinn at 2024-12-13T09:56:29+05:30 Add test case for unterminated multiline string (cherry picked from commit 9e464ad01f5f60f774504fcaf8d0c30bdd291159) - - - - - 2feb717e by Matthew Pickering at 2024-12-13T09:56:47+05:30 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 (cherry picked from commit 13fe48d40004d9cdf3c73300a18f144bdc5191d9) - - - - - c0b36c68 by Ben Gamari at 2024-12-13T09:56:55+05:30 testsuite: Add test for #25560 (cherry picked from commit 683115a40fd989a287fa51efe140af9448526098) - - - - - 74e42943 by Ben Gamari at 2024-12-13T09:57:04+05:30 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. (cherry picked from commit e745e3a30670440c9cf65450835d4eddada784eb) - - - - - f8b36d9b by Ben Gamari at 2024-12-13T09:57:17+05:30 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. (cherry picked from commit 41dae5b86955094aa4c5647f63f1f52f1a8a5519) - - - - - ada12a20 by Ben Gamari at 2024-12-13T09:57:41+05:30 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. (cherry picked from commit 9efbc51f99118e8f9c3abf2bcb6dc3295893ded6) - - - - - f43b1d65 by Ben Gamari at 2024-12-13T09:57:53+05:30 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. (cherry picked from commit 34d3e8e69b62b92cc438514f7fb8e37ce639efea) - - - - - 5c9c3e3f by Zubin Duggal at 2024-12-13T10:00:58+05:30 Bump Cabal submodule to 3.14.1.0 - - - - - 89790626 by Zubin Duggal at 2024-12-13T10:16:14+05:30 Bump directory submodule to 0.12.2.0 - - - - - 9321f8b7 by Andreas Klebinger at 2024-12-13T10:24:04+05:30 Document -fmax-forced-spec-args=⟨n⟩ in the 9.12 changelog. Fixes #25544 (cherry picked from commit e2d2645c01d45149420bb07987b1634e577adc04) - - - - - 66d66a25 by Andreas Klebinger at 2024-12-13T10:25:30+05:30 Document -fwrite-if-compression in release notes. (cherry picked from commit 93335a250347ed0591d240701a56ff171a9a5561) - - - - - f29620c8 by Adam Gundry at 2024-12-13T10:27:57+05:30 Fix formatting issues and make corrections to 9.12.1 release notes (cherry picked from commit 6ce3e546083304c4f2da060184b3b73f48dd8fc0) - - - - - 15c719f3 by Zubin Duggal at 2024-12-13T16:59:48+05:30 Changelog fixes - - - - - dc86785e by Zubin Duggal at 2024-12-13T16:59:48+05:30 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore - - - - - fc647a65 by Ben Gamari at 2024-12-13T16:59:48+05:30 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. (cherry picked from commit 1e84b41108d96cb721dd11281105fdf621105a12) - - - - - cbfd0829 by Zubin Duggal at 2024-12-13T16:59:48+05:30 release: copy index.html from correct directory - - - - - 0ba478fe by Matthew Pickering at 2024-12-13T16:59:48+05:30 configure: Allow happy-2.0.2 happy-2.0.2 can be used to compile GHC. happy-2.0 and 2.0.1 have bugs which make it unsuitable to use. The version bound is now == 1.20.* || >= 2.0.2 && < 2.1 Fixes #25276 (cherry picked from commit 0029ca91c845dd4530eb2c4606ad5bd59775cec2) - - - - - 24b4914a by Cristiano Moraes at 2024-12-13T16:59:48+05:30 configure: Find C++ probing when GCC version is the latest but G++ is old #23118 (cherry picked from commit 78ad81ecef846f73fee0f6c1a86cd6f19aa29b21) - - - - - 95d35d6c by Ben Gamari at 2024-12-13T16:59:48+05:30 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. (cherry picked from commit 1fd83f865ffb620f4f7c4c59787710206dcadb90) - - - - - 86f29950 by Ben Gamari at 2024-12-13T16:59:48+05:30 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. (cherry picked from commit 992259962191b0b774dfeeabb46729376c7fe7cf) - - - - - dde3796b by Zubin Duggal at 2024-12-13T23:41:56+05:30 hadrian-multi: warn on unused imports os-string has redundant imports - - - - - 52b58a66 by Zubin Duggal at 2024-12-13T23:41:56+05:30 ghcup metadata: output metadata fragment in CI - - - - - 39e4fed1 by Zubin Duggal at 2024-12-13T23:41:56+05:30 rel-eng: ghcup metadata generation: generated yaml anchors with meaningful names (cherry picked from commit d83f5bd730a8aef37d8a38b3560590d9798f8e45) (cherry picked from commit 280b627869da55a22b4b9a3458e6115b06b5fff4) - - - - - e226fcf0 by Ben Gamari at 2024-12-14T14:47:47+05:30 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. (cherry picked from commit 55d8304e02000b3ec33d254794e84d159dc93926) - - - - - 227c86d4 by Ben Gamari at 2024-12-14T14:47:47+05:30 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 (cherry picked from commit 56b9f484fd89b5c2c69045dcd5690f68699ba0b1) - - - - - ce8458e9 by Ben Gamari at 2024-12-14T14:47:47+05:30 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 (cherry picked from commit 336d392e417203c492fec15ecf91dd444cb70936) - - - - - 65c1928d by Ben Gamari at 2024-12-14T14:47:47+05:30 base: Mention incorrect Data.Enum addition in changelog (cherry picked from commit dd7ca93903eba8c63261656ca3d245f9e8baa662) - - - - - 032b058c by Ben Gamari at 2024-12-15T21:21:51+05:30 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. (cherry picked from commit dfd1db48aaa1ee6c109e9a05ce34672418f17f59) - - - - - dc7c0f85 by Zubin Duggal at 2024-12-15T21:21:51+05:30 RELEASE=YES - - - - - daf659b6 by Zubin Duggal at 2024-12-15T21:28:10+05:30 ci: allow test-primops to fail as a workaround to #25582 - - - - - 17 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 - compiler/GHC/Builtin/Names.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/Parser/Lexer.x - compiler/GHC/Tc/Instance/Family.hs - compiler/GHC/Tc/Module.hs - configure.ac - docs/users_guide/9.12.1-notes.rst - docs/users_guide/using-optimisation.rst - hadrian/bootstrap/plan-9_10_1.json - hadrian/bootstrap/plan-9_6_1.json - hadrian/bootstrap/plan-9_6_2.json The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/5d938345841e3dff6a1dfa129202ba939a4564c9...daf659b6e3c8f2a84100fbee797cd9d457c00df5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/5d938345841e3dff6a1dfa129202ba939a4564c9...daf659b6e3c8f2a84100fbee797cd9d457c00df5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 16 13:19:35 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Mon, 16 Dec 2024 08:19:35 -0500 Subject: [Git][ghc/ghc] Pushed new tag ghc-9.12.1-release Message-ID: <676028e7d8068_10a236753334663b@gitlab.mail> Zubin pushed new tag ghc-9.12.1-release at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/ghc-9.12.1-release You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 16 17:14:01 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Mon, 16 Dec 2024 12:14:01 -0500 Subject: [Git][ghc/ghc][wip/T25445b] 6 commits: Tidy up the handling of `assert` Message-ID: <67605fd9b1661_360ce83fcb0416377@gitlab.mail> Simon Peyton Jones pushed to branch wip/T25445b at Glasgow Haskell Compiler / GHC Commits: 64756530 by Simon Peyton Jones at 2024-12-14T22:28:04-05:00 Tidy up the handling of `assert` Fixes #25493 - - - - - 8658fbc1 by Rodrigo Mesquita at 2024-12-14T22:28:41-05:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 80f0e02d by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - 175a1355 by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - 30 changed files: - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/Opt/Specialise.hs - compiler/GHC/Core/SimpleOpt.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/Type.hs - compiler/GHC/Data/Unboxed.hs - compiler/GHC/Hs/Dump.hs - compiler/GHC/Llvm/Ppr.hs - compiler/GHC/Rename/Bind.hs - compiler/GHC/Rename/Env.hs - compiler/GHC/Tc/Gen/Head.hs - compiler/GHC/Tc/Solver/Equality.hs - compiler/GHC/Tc/TyCl.hs - compiler/GHC/Tc/Utils/TcType.hs - compiler/GHC/Types/Var.hs - libraries/base/changelog.md - libraries/ghc-internal/src/GHC/Internal/Base.hs - libraries/ghc-internal/src/GHC/Internal/IO/Exception.hs - + testsuite/tests/rename/should_fail/T25437.hs - + testsuite/tests/rename/should_fail/T25437.stderr - testsuite/tests/rename/should_fail/T5001b.stderr - testsuite/tests/rename/should_fail/all.T - + testsuite/tests/simd/should_run/T25561.hs - + testsuite/tests/simd/should_run/T25561.stdout The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b507e652e201674d60d08c075319e72159461643...175a1355341e5594ae16515b485c3ebedb88c057 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/b507e652e201674d60d08c075319e72159461643...175a1355341e5594ae16515b485c3ebedb88c057 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 16 17:18:57 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Mon, 16 Dec 2024 12:18:57 -0500 Subject: [Git][ghc/ghc][wip/T25494] 3 commits: LLVM: When emitting a vector literal with ppTypeLit, include the type information Message-ID: <676061011cf01_360ce85786f41691e@gitlab.mail> Simon Peyton Jones pushed to branch wip/T25494 at Glasgow Haskell Compiler / GHC Commits: 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 101de9f5 by Simon Peyton Jones at 2024-12-16T11:10:33+00:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - 13 changed files: - compiler/GHC/Llvm/Ppr.hs - compiler/GHC/Rename/Bind.hs - compiler/GHC/Rename/Env.hs - compiler/GHC/Tc/Gen/Expr.hs - compiler/GHC/Tc/Gen/Head.hs - compiler/GHC/Tc/Utils/Unify.hs - + testsuite/tests/rename/should_fail/T25437.hs - + testsuite/tests/rename/should_fail/T25437.stderr - testsuite/tests/rename/should_fail/T5001b.stderr - testsuite/tests/rename/should_fail/all.T - + testsuite/tests/simd/should_run/T25561.hs - + testsuite/tests/simd/should_run/T25561.stdout - testsuite/tests/simd/should_run/all.T Changes: ===================================== compiler/GHC/Llvm/Ppr.hs ===================================== @@ -669,9 +669,7 @@ ppTypeLit = ppTypeLit' [] {-# SPECIALIZE ppTypeLit :: LlvmCgConfig -> LlvmLit -> HLine #-} -- see Note [SPECIALIZE to HDoc] in GHC.Utils.Outputable ppTypeLit' :: IsLine doc => [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> doc -ppTypeLit' attrs opts l = case l of - LMVectorLit {} -> ppLit opts l - _ -> ppLlvmType (getLitType l) <+> ppSpaceJoin ppLlvmParamAttr attrs <+> ppLit opts l +ppTypeLit' attrs opts l = ppLlvmType (getLitType l) <+> ppSpaceJoin ppLlvmParamAttr attrs <+> ppLit opts l {-# SPECIALIZE ppTypeLit' :: [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> SDoc #-} {-# SPECIALIZE ppTypeLit' :: [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> HLine #-} -- see Note [SPECIALIZE to HDoc] in GHC.Utils.Outputable ===================================== compiler/GHC/Rename/Bind.hs ===================================== @@ -956,7 +956,8 @@ rnMethodBinds is_cls_decl cls ktv_names binds sigs ; let (spec_prags, other_sigs) = partition (isSpecLSig <||> isSpecInstLSig) sigs bound_nms = mkNameSet (collectHsBindsBinders CollNoDictBinders binds') sig_ctxt | is_cls_decl = ClsDeclCtxt cls - | otherwise = InstDeclCtxt bound_nms + | otherwise = InstDeclCtxt (mkOccEnv [ (nameOccName n, n) + | n <- nonDetEltsUniqSet bound_nms ]) ; (spec_prags', spg_fvs) <- renameSigs sig_ctxt spec_prags ; (other_sigs', sig_fvs) <- bindLocalNamesFV ktv_names $ renameSigs sig_ctxt other_sigs @@ -1071,18 +1072,9 @@ renameSigs ctxt sigs ; return (good_sigs, sig_fvs) } ---------------------- --- We use lookupSigOccRn in the signatures, which is a little bit unsatisfactory --- because this won't work for: --- instance Foo T where --- {-# INLINE op #-} --- Baz.op = ... --- We'll just rename the INLINE prag to refer to whatever other 'op' --- is in scope. (I'm assuming that Baz.op isn't in scope unqualified.) --- Doesn't seem worth much trouble to sort this. - renameSig :: HsSigCtxt -> Sig GhcPs -> RnM (Sig GhcRn, FreeVars) renameSig ctxt sig@(TypeSig _ vs ty) - = do { new_vs <- mapM (lookupSigOccRnN ctxt sig) vs + = do { new_vs <- mapM (lookupSigOccRn ctxt sig) vs ; let doc = TypeSigCtx (ppr_sig_bndrs vs) ; (new_ty, fvs) <- rnHsSigWcType doc ty ; return (TypeSig noAnn new_vs new_ty, fvs) } @@ -1091,7 +1083,7 @@ renameSig ctxt sig@(ClassOpSig _ is_deflt vs ty) = do { defaultSigs_on <- xoptM LangExt.DefaultSignatures ; when (is_deflt && not defaultSigs_on) $ addErr (TcRnUnexpectedDefaultSig sig) - ; new_v <- mapM (lookupSigOccRnN ctxt sig) vs + ; new_v <- mapM (lookupSigOccRn ctxt sig) vs ; (new_ty, fvs) <- rnHsSigType ty_ctxt TypeLevel ty ; return (ClassOpSig noAnn is_deflt new_v new_ty, fvs) } where @@ -1119,7 +1111,7 @@ renameSig _ (SpecInstSig (_, src) ty) renameSig ctxt sig@(SpecSig _ v tys inl) = do { new_v <- case ctxt of TopSigCtxt {} -> lookupLocatedOccRn v - _ -> lookupSigOccRnN ctxt sig v + _ -> lookupSigOccRn ctxt sig v ; (new_ty, fvs) <- foldM do_one ([],emptyFVs) tys ; return (SpecSig noAnn new_v new_ty inl, fvs) } where @@ -1130,7 +1122,7 @@ renameSig ctxt sig@(SpecSig _ v tys inl) ; return ( new_ty:tys, fvs_ty `plusFV` fvs) } renameSig ctxt sig@(InlineSig _ v s) - = do { new_v <- lookupSigOccRnN ctxt sig v + = do { new_v <- lookupSigOccRn ctxt sig v ; return (InlineSig noAnn new_v s, emptyFVs) } renameSig ctxt (FixSig _ fsig) @@ -1138,11 +1130,11 @@ renameSig ctxt (FixSig _ fsig) ; return (FixSig noAnn new_fsig, emptyFVs) } renameSig ctxt sig@(MinimalSig (_, s) (L l bf)) - = do new_bf <- bfTraverse (lookupSigOccRnN ctxt sig) bf + = do new_bf <- bfTraverse (lookupSigOccRn ctxt sig) bf return (MinimalSig (noAnn, s) (L l new_bf), emptyFVs) renameSig ctxt sig@(PatSynSig _ vs ty) - = do { new_vs <- mapM (lookupSigOccRnN ctxt sig) vs + = do { new_vs <- mapM (lookupSigOccRn ctxt sig) vs ; (ty', fvs) <- rnHsSigType ty_ctxt TypeLevel ty ; return (PatSynSig noAnn new_vs ty', fvs) } where @@ -1150,7 +1142,7 @@ renameSig ctxt sig@(PatSynSig _ vs ty) <+> ppr_sig_bndrs vs) renameSig ctxt sig@(SCCFunSig (_, st) v s) - = do { new_v <- lookupSigOccRnN ctxt sig v + = do { new_v <- lookupSigOccRn ctxt sig v ; return (SCCFunSig (noAnn, st) new_v s, emptyFVs) } -- COMPLETE Sigs can refer to imported IDs which is why we use ===================================== compiler/GHC/Rename/Env.hs ===================================== @@ -34,7 +34,7 @@ module GHC.Rename.Env ( ChildLookupResult(..), lookupSubBndrOcc_helper, - HsSigCtxt(..), lookupLocalTcNames, lookupSigOccRn, lookupSigOccRnN, + HsSigCtxt(..), lookupLocalTcNames, lookupSigOccRn, lookupSigCtxtOccRn, lookupInstDeclBndr, lookupFamInstName, @@ -2072,6 +2072,28 @@ data HsSigCtxt = ... | TopSigCtxt NameSet | .... f :: C a => a -> a -- No, not ok class C a where f :: a -> a + +Note [Signatures in instance decls] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Consider + class C a where + op :: a -> a + nop :: a -> a + + instance C ty where + bop :: [a] -> [a] + bop x = x + + nop :: [a] -> [a] + +When renameing the `bop` binding we'll give it an UnboundName (still with +OccName "bop") because `bop` is not a method of C. Then + +* when doing lookupSigOcc on `bop :: blah` we want to find `bop`, even though it + is an UnboundName (failing to do this causes #16610, and #25437) + +* When doing lookupSigOcc on `nop :: blah` we want to complain that there + is no accompanying binding, even though `nop` is a class method -} data HsSigCtxt @@ -2079,8 +2101,8 @@ data HsSigCtxt -- See Note [Signatures for top level things] | LocalBindCtxt NameSet -- In a local binding, binding these names | ClsDeclCtxt Name -- Class decl for this class - | InstDeclCtxt NameSet -- Instance decl whose user-written method - -- bindings are for these methods + | InstDeclCtxt (OccEnv Name) -- Instance decl whose user-written method + -- bindings are described by this OccEnv | HsBootCtxt NameSet -- Top level of a hs-boot file, binding these names | RoleAnnotCtxt NameSet -- A role annotation, with the names of all types -- in the group @@ -2095,14 +2117,10 @@ instance Outputable HsSigCtxt where lookupSigOccRn :: HsSigCtxt -> Sig GhcPs - -> LocatedA RdrName -> RnM (LocatedA Name) + -> GenLocated (EpAnn ann) RdrName + -> RnM (GenLocated (EpAnn ann) Name) lookupSigOccRn ctxt sig = lookupSigCtxtOccRn ctxt (hsSigDoc sig) -lookupSigOccRnN :: HsSigCtxt - -> Sig GhcPs - -> LocatedN RdrName -> RnM (LocatedN Name) -lookupSigOccRnN ctxt sig = lookupSigCtxtOccRn ctxt (hsSigDoc sig) - -- | Lookup a name in relation to the names in a 'HsSigCtxt' lookupSigCtxtOccRn :: HsSigCtxt -> SDoc -- ^ description of thing we're looking up, @@ -2155,34 +2173,37 @@ lookupBindGroupOcc ctxt what rdr_name also_try_tycon_ns ns_spec RoleAnnotCtxt ns -> lookup_top (elem_name_set_with_namespace ns) LocalBindCtxt ns -> lookup_group ns ClsDeclCtxt cls -> lookup_cls_op cls - InstDeclCtxt ns -> if uniqSetAny isUnboundName ns -- #16610 - then return $ NE.singleton $ Right $ mkUnboundNameRdr rdr_name - else lookup_top (elem_name_set_with_namespace ns) + InstDeclCtxt occ_env-> lookup_inst occ_env where elem_name_set_with_namespace ns n = check_namespace n && (n `elemNameSet` ns) check_namespace = coveredByNamespaceSpecifier ns_spec . nameNameSpace namespace = occNameSpace occ - occ = rdrNameOcc rdr_name - relevant_gres = - RelevantGREs - { includeFieldSelectors = WantBoth - , lookupVariablesForFields = True - , lookupTyConsAsWell = also_try_tycon_ns } - ok_gre = greIsRelevant relevant_gres namespace + occ = rdrNameOcc rdr_name + ok_gre = greIsRelevant relevant_gres namespace + relevant_gres = RelevantGREs { includeFieldSelectors = WantBoth + , lookupVariablesForFields = True + , lookupTyConsAsWell = also_try_tycon_ns } finish err gre | ok_gre gre - = NE.singleton (Right $ greName gre) + = NE.singleton (Right (greName gre)) | otherwise = NE.singleton (Left err) + succeed_with n = return $ NE.singleton $ Right n + lookup_cls_op cls = NE.singleton <$> lookupSubBndrOcc AllDeprecationWarnings cls doc rdr_name where doc = text "method of class" <+> quotes (ppr cls) + lookup_inst occ_env -- See Note [Signatures in instance decls] + = case lookupOccEnv occ_env occ of + Nothing -> bale_out_with [] + Just n -> succeed_with n + lookup_top keep_me = do { env <- getGlobalRdrEnv ; let occ = rdrNameOcc rdr_name @@ -2205,7 +2226,7 @@ lookupBindGroupOcc ctxt what rdr_name also_try_tycon_ns ns_spec ; let candidates_msg = candidates $ localRdrEnvElts env ; case mname of Just n - | n `elemNameSet` bound_names -> return $ NE.singleton $ Right n + | n `elemNameSet` bound_names -> succeed_with n | otherwise -> bale_out_with local_msg Nothing -> bale_out_with candidates_msg } ===================================== compiler/GHC/Tc/Gen/Expr.hs ===================================== @@ -296,13 +296,6 @@ tcExpr e@(ExprWithTySig {}) res_ty = tcApp e res_ty tcExpr (XExpr e) res_ty = tcXExpr e res_ty -tcExpr e@(HsOverLit _ lit) res_ty - = do { mb_res <- tcShortCutLit lit res_ty - -- See Note [Short cut for overloaded literals] in GHC.Tc.Zonk.Type - ; case mb_res of - Just lit' -> return (HsOverLit noExtField lit') - Nothing -> tcApp e res_ty } - -- Typecheck an occurrence of an unbound Id -- -- Some of these started life as a true expression hole "_". @@ -353,6 +346,51 @@ tcExpr e@(HsLam x lam_variant matches) res_ty = do { (wrap, matches') <- tcLambdaMatches e lam_variant matches [] res_ty ; return (mkHsWrap wrap $ HsLam x lam_variant matches') } +{- +************************************************************************ +* * + Overloaded literals +* * +************************************************************************ +-} + +tcExpr e@(HsOverLit _ lit) res_ty + = -- See Note [Typechecking overloaded literals] + do { mb_res <- tcShortCutLit lit res_ty + -- See Note [Short cut for overloaded literals] in GHC.Tc.Utils.TcMType + ; case mb_res of + Just lit' -> return (HsOverLit noExtField lit') + Nothing -> tcApp e res_ty } + -- Why go via tcApp? See Note [Typechecking overloaded literals] + +{- Note [Typechecking overloaded literals] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Generally speaking, an overloaded literal like "3" typechecks as if you +had written (fromInteger (3 :: Integer)). But in practice it's a little +tricky: + +* Rebindable syntax (see #19154 and !4981). With rebindable syntax we might have + fromInteger :: Integer -> forall a. Num a => a + and then we might hope to use a Visible Type Application (VTA) to write + 3 @Int + expecting it to expand to + fromInteger (3::Integer) @Int dNumInt + To achieve that, we need to + * treat the application using `tcApp` to deal with the VTA + * treat the overloaded literal as the "head" of an application; + see `GHC.Tc.Gen.Head.tcInferAppHead`. + +* Short-cutting. If we have + xs :: [Int] + xs = [3,4,5,6... ] + then it's a huge short-cut (in compile time) to just cough up the `Int` literal + for `3`, rather than (fromInteger @Int d), with a wanted constraint `[W] Num Int`. + See Note [Short cut for overloaded literals] in GHC.Tc.Utils.TcMType. + + We can only take this short-cut if rebindable syntax is off; see `tcShortCutLit`. +-} + + {- ************************************************************************ * * ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -765,6 +765,8 @@ tcInferOverLit lit@(OverLit { ol_val = val -- where fromInteger is gotten by looking up from_name, and -- the (3 :: Integer) is returned by mkOverLit -- Ditto the string literal "foo" to (fromString ("foo" :: String)) + -- + -- See Note [Typechecking overloaded literals] in GHC.Tc.Gen.Expr do { hs_lit <- mkOverLit val ; from_id <- tcLookupId from_name ; (wrap1, from_ty) <- topInstantiate (LiteralOrigin lit) (idType from_id) @@ -781,9 +783,10 @@ tcInferOverLit lit@(OverLit { ol_val = val from_expr = mkHsWrap (wrap2 <.> wrap1) $ HsVar noExtField (L loc from_id) witness = HsApp noExtField (L (l2l loc) from_expr) lit_expr - lit' = lit { ol_ext = OverLitTc { ol_rebindable = rebindable - , ol_witness = witness - , ol_type = res_ty } } + lit' = OverLit { ol_val = val + , ol_ext = OverLitTc { ol_rebindable = rebindable + , ol_witness = witness + , ol_type = res_ty } } ; return (HsOverLit noExtField lit', res_ty) } {- ********************************************************************* ===================================== compiler/GHC/Tc/Utils/Unify.hs ===================================== @@ -305,7 +305,7 @@ Both ultimately handled by matchExpectedFunTys. * For the Lambda case there are two sub-cases: * An expression with a type signature: (\ @a x y -> blah) :: hs_ty This is handled by `GHC.Tc.Gen.Head.tcExprWithSig`, which kind-checks - the signature and hands off to `tcExprPolyCheck` vai `tcPolyLExprSig` + the signature and hands off to `tcExprPolyCheck` via `tcPolyLExprSig`. Note that the foralls at the top of hs_ty scope over the expression. * A higher order call: h e, where h :: poly_ty -> blah ===================================== testsuite/tests/rename/should_fail/T25437.hs ===================================== @@ -0,0 +1,16 @@ +{-# LANGUAGE ScopedTypeVariables #-} + +module T25437 where + +class C a where + foo :: Int -> Maybe a + +instance C (Maybe x) where + foo :: Int -> Maybe [a] + +instance C [x] where + foo :: forall b. Int -> Maybe [b] + foo _ = Just @[b] [] + + something :: x -> x + something = () ===================================== testsuite/tests/rename/should_fail/T25437.stderr ===================================== @@ -0,0 +1,5 @@ +T25437.hs:9:3: error: [GHC-44432] + The class method signature for ‘foo’ lacks an accompanying binding + +T25437.hs:16:3: error: [GHC-54721] + ‘something’ is not a (visible) method of class ‘C’ ===================================== testsuite/tests/rename/should_fail/T5001b.stderr ===================================== @@ -1,5 +1,4 @@ T5001b.hs:10:17: error: [GHC-44432] The INLINE pragma for ‘genum’ lacks an accompanying binding - Suggested fix: - Move the INLINE pragma to the declaration site of ‘genum’. + ===================================== testsuite/tests/rename/should_fail/all.T ===================================== @@ -231,3 +231,4 @@ test('T14032c', normal, compile_fail, ['']) test('T14032f', normal, compile_fail, ['']) test('T23501_fail', normal, compile_fail, ['']) test('T23501_fail_ext', normal, compile_fail, ['']) +test('T25437', normal, compile_fail, ['']) ===================================== testsuite/tests/simd/should_run/T25561.hs ===================================== @@ -0,0 +1,11 @@ +{-# LANGUAGE MagicHash, UnboxedTuples #-} +import Data.Array.Base +import Data.Array.IO.Internals +import GHC.Exts +import GHC.IO + +main :: IO () +main = do + ma@(IOUArray (STUArray l _ _ mba)) <- newListArray (0, 10) ([0..10] :: [Float]) + IO $ \s -> (# writeFloatArrayAsFloatX4# mba 1# (broadcastFloatX4# 3.0#) s, () #) + print =<< getElems ma ===================================== testsuite/tests/simd/should_run/T25561.stdout ===================================== @@ -0,0 +1 @@ +[0.0,3.0,3.0,3.0,3.0,5.0,6.0,7.0,8.0,9.0,10.0] ===================================== testsuite/tests/simd/should_run/all.T ===================================== @@ -66,6 +66,7 @@ test('simd_insert_array', [], compile_and_run, ['']) test('T22187', [],compile,['']) test('T22187_run', [],compile_and_run,['']) test('T25062_V16', [], compile_and_run, ['']) +test('T25561', [], compile_and_run, ['']) # Even if the CPU we run on doesn't support *executing* those tests we should try to # compile them. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/80c38aef9567fcb7d8b935f0b445beaf864e6482...101de9f53e2503700958a078c7203d7223ee63db -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/80c38aef9567fcb7d8b935f0b445beaf864e6482...101de9f53e2503700958a078c7203d7223ee63db You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 16 17:44:47 2024 From: gitlab at gitlab.haskell.org (Matthew Pickering (@mpickering)) Date: Mon, 16 Dec 2024 12:44:47 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/backpack-fix-hpt-violation Message-ID: <6760670f79620_3aa8f21fa38879147@gitlab.mail> Matthew Pickering pushed new branch wip/backpack-fix-hpt-violation at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/backpack-fix-hpt-violation You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 16 19:52:23 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Mon, 16 Dec 2024 14:52:23 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports] 45 commits: Escape multiple arguments in the settings file Message-ID: <676084f79a9f1_3aa8f2feccfc1048f@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports at Glasgow Haskell Compiler / GHC Commits: 9cd1ae5b by Fendor at 2024-12-13T13:18:27+01:00 Escape multiple arguments in the settings file Uses responseFile syntax. The issue arises when GHC is installed on windows into a location that has a space, for example the user name is 'Fake User'. The $topdir will also contain a space, consequentially. When we resolve the top dir in the string `-I$topdir/mingw/include`, then `words` will turn this single argument into `-I/C/Users/Fake` and `User/.../mingw/include` which trips up the flag argument parser of various tools such as gcc or clang. We avoid this by escaping the $topdir before replacing it in `initSettngs`. Additionally, we allow to escape spaces and quotation marks for arguments in `settings` file. Add regression test case to count the number of options after variable expansion and argument escaping took place. Additionally, we check that escaped spaces and double quotation marks are correctly parsed. (cherry picked from commit 31bf85ee49fe2ca0b17eaee0774e395f017a9373) - - - - - 8d3b0c32 by Andreas Klebinger at 2024-12-13T13:29:03+01:00 Changelog for !11938 - Escape multiple arguments in the settings file. - - - - - 156b8aa3 by Andreas Klebinger at 2024-12-13T19:46:22+01:00 RTS: Emit warning when -M < -H Fixes #24487 (cherry picked from commit 9e91744a19dcd699896341baadf98f99b1250839) - - - - - 8af48c80 by Serge S. Gulin at 2024-12-16T15:35:38+01:00 JS: trivial checks for variable presence (fixes #24602) (cherry picked from commit 3db54f9bcdcd20a2497447bf76176470db900143) - - - - - d9ee94b1 by Serge S. Gulin at 2024-12-16T15:35:38+01:00 JS: fs module imported twice (by emscripten and by ghc-internal). ghc-internal import wrapped in a closure to prevent conflict with emscripten (fixes #24602) Better solution is to use some JavaScript module system like AMD, CommonJS or even UMD. It will be investigated at other issues. At first glance we should try UMD (See https://github.com/umdjs/umd) (cherry picked from commit 777f108f74f0a81274775d504dffe46c5fdfc33f) - - - - - 453136ed by Serge S. Gulin at 2024-12-16T15:35:38+01:00 JS: thread.js requires h$fds and h$fdReady to be declared for static code analysis, minimal code copied from GHCJS (fixes #24602) I've just copied some old pieces of GHCJS from publicly available sources (See https://github.com/Taneb/shims/blob/a6dd0202dcdb86ad63201495b8b5d9763483eb35/src/io.js#L607). Also I didn't put details to h$fds. I took minimal and left only its object initialization: `var h$fds = {};` (cherry picked from commit a45a57127bb7eaceae92e0edf057c053eb4d5367) - - - - - 52a4801a by Serge S. Gulin at 2024-12-16T15:35:38+01:00 JS: heap and stack overflows reporting defined as js hard failure (fixes #24602) These errors were treated as a hard failure for browser application. The fix is trivial: just throw error. (cherry picked from commit ad90bf1237e0c9d2013399bd8cd1315f2845d9e7) - - - - - 0df9f8c2 by Serge S. Gulin at 2024-12-16T15:35:38+01:00 JS: Stubs for code without actual implementation detected by Google Closure Compiler (fixes #24602) These errors were fixed just by introducing stubbed functions with throw for further implementation. (cherry picked from commit 5962fa526e071d77fd4970b57d957a622e13207c) - - - - - 7ee4e1e4 by Serge S. Gulin at 2024-12-16T15:35:38+01:00 JS: Add externs to linker (fixes #24602) After enabling jsdoc and built-in google closure compiler types I was needed to deal with the following: 1. Define NodeJS-environment types. I've just copied minimal set of externs from semi-official repo (see https://github.com/externs/nodejs/blob/6c6882c73efcdceecf42e7ba11f1e3e5c9c041f0/v8/nodejs.js#L8). 2. Define Emscripten-environment types: `HEAP8`. Emscripten already provides some externs in our code but it supposed to be run in some module system. And its definitions do not work well in plain bundle. 3. We have some functions which purpose is to add to functions some contextual information via function properties. These functions should be marked as `modifies` to let google closure compiler remove calls if these functions are not used actually by call graph. Such functions are: `h$o`, `h$sti`, `h$init_closure`, `h$setObjInfo`. 4. STG primitives such as registries and stuff from `GHC.StgToJS`. `dXX` properties were already present at externs generator function but they are started from `7`, not from `1`. This message is related: `// fixme does closure compiler bite us here?` (cherry picked from commit a0694298aad5f2f428311d6e787484a250c9de43) - - - - - f26f6b93 by Serge S. Gulin at 2024-12-16T15:35:38+01:00 JS: added both tests: for size and for correctness (fixes #24602) By some reason MacOS builds add to stderr messages like: Ignoring unexpected archive entry: __.SYMDEF ... However I left stderr to `/dev/null` for compatibility with linux CI builds. (cherry picked from commit e58bb29f8a4808fd4b74b653b1893f78121c7df4) - - - - - 690eca97 by Serge S. Gulin at 2024-12-16T15:35:38+01:00 JS: Disable js linker warning for empty symbol table to make js tests running consistent across environments (cherry picked from commit 909f3a9c8dac5d15c2492c008e370be60f50b50c) - - - - - b042a3cb by Serge S. Gulin at 2024-12-16T15:36:14+01:00 JS: Add special preprocessor for js files due of needing to keep jsdoc comments (fixes #24602) Our js files have defined google closure compiler types at jsdoc entries but these jsdoc entries are removed by cpp preprocessor. I considered that reusing them in javascript-backend would be a nice thing. Right now haskell processor uses `-traditional` option to deal with comments and `//` operators. But now there are following compiler options: `-C` and `-CC`. You can read about them at GCC (see https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#index-CC) and CLang (see https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-CC). It seems that `-CC` works better for javascript jsdoc than `-traditional`. At least it leaves `/* ... */` comments w/o changes. (cherry picked from commit 83eb10da239e6bef0d06dbba174809f99c463d8d) - - - - - 057e804e by Cheng Shao at 2024-12-16T15:42:57+01:00 Update autoconf scripts Scripts taken from autoconf 948ae97ca5703224bd3eada06b7a69f40dd15a02 (cherry picked from commit 36f2c3422d7f3620078dba701f57275a3708aff5) - - - - - d8a57db8 by Sylvain Henry at 2024-12-16T16:06:10+01:00 GHCi: support inlining breakpoints (#24712) When a breakpoint is inlined, its context may change (e.g. tyvars in scope). We must take this into account and not used the breakpoint tick index as its sole identifier. Each instance of a breakpoint (even with the same tick index) now gets a different "info" index. We also need to distinguish modules: - tick module: module with the break array (tick counters, status, etc.) - info module: module having the CgBreakInfo (info at occurrence site) (cherry picked from commit b85b11994e0130ff2401dd4bbdf52330e0bcf776) - - - - - 91074878 by Cheng Shao at 2024-12-16T16:12:05+01:00 wasm: use scheduler.postTask() for context switch when available This patch makes use of scheduler.postTask() for JSFFI context switch when it's available. It's a more principled approach than our MessageChannel based setImmediate() implementation, and it's available in latest version of Chromium based browsers. (cherry picked from commit 43d48b449a46e805e3baeafbafa62b6cd6f761c9) - - - - - 942fbd6a by Matthew Craven at 2024-12-16T16:23:38+01:00 Add test cases for #24664 ...since none are present in the original MR !12463 fixing this issue. (cherry picked from commit a19201d42cfd3aa54faeb1b5a95b715b9a67a01a) - - - - - a1e922e5 by Arsen Arsenović at 2024-12-16T16:27:33+01:00 Split out the C-- preprocessor, and make it pass -g0 Previously, C-- was processed with the C preprocessor program. This means that it inherited flags passed via -optc. A flag that is somewhat often passed through -optc is -g. At certain -g levels (>=2), GCC starts emitting defines *after* preprocessing, for the purposes of debug info generation. This is not useful for the C-- compiler, and, in fact, causes lexer errors. We can suppress this effect (safely, if supported) via -g0. As a workaround, in older versions of GCC (<=10), GCC only emitted defines if a certain set of -g*3 flags was passed. Newer versions check the debug level. For the former, we filter out those -g*3 flags and, for the latter, we specify -g0 on top of that. As a compatible and effective solution, this change adds a C-- preprocessor distinct from the C compiler and preprocessor, but that keeps its flags. The command line produced for C-- preprocessing now looks like: $pgmCmmP $optCs_without_g3 $g0_if_supported $optCmmP Closes: https://gitlab.haskell.org/ghc/ghc/-/issues/24474 (cherry picked from commit 25b0b40467d0a12601497117c0ad14e1fcab0b74) - - - - - 022935ee by Andreas Klebinger at 2024-12-16T16:46:11+01:00 Add release notes for some backported 9.10.2 patches. Contains notes for: !11938: Escape multiple arguments in the settings file !12201: RTS: Emit warning when -M < -H !12495: Update autoconf scripts !12500: GHCi: support cross-module inlining of breakpoints !12550: wasm: use scheduler.postTask() for context switch when available !12569: Split out the C-- preprocessor, and make it pass -g0 - - - - - a6c4ca60 by Andreas Klebinger at 2024-12-16T16:49:59+01:00 -fprof-late: Only insert cost centres on functions/non-workfree cafs. They are usually useless and doing so for data values comes with a large compile time/code size overhead. Fixes #24103 (cherry picked from commit 9b4129a580e6c1d18197ef2ed3a8b89d52a2b133) - - - - - 11e1012c by Ben Gamari at 2024-12-16T16:51:24+01:00 IPE: Eliminate dependency on Read Instead of encoding the closure type as decimal string we now simply represent it as an integer, eliminating the need for `Read` in `GHC.Internal.InfoProv.Types.peekInfoProv`. Closes #24504. ------------------------- Metric Decrease: T24602_perf_size size_hello_artifact ------------------------- (cherry picked from commit ab840ce6f83a74f36dac939d087b69f97404399a) - - - - - e890b435 by Cheng Shao at 2024-12-16T16:59:10+01:00 testsuite: fix testwsdeque with recent clang This patch fixes compilation of testwsdeque.c with recent versions of clang, which will fail with the error below: ``` testwsdeque.c:95:33: error: warning: format specifies type 'long' but the argument has type 'void *' [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~~ ^ testwsdeque.c:95:39: error: warning: format specifies type 'int' but the argument has type 'StgWord' (aka 'unsigned long') [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~ ^~~ | %lu testwsdeque.c:133:42: error: error: incompatible function pointer types passing 'void (void *)' to parameter of type 'OSThreadProc *' (aka 'void *(*)(void *)') [-Wincompatible-function-pointer-types] 133 | createOSThread(&ids[n], "thief", thief, (void*)(StgWord)n); | ^~~~~ /workspace/ghc/_build/stage1/lib/../lib/x86_64-linux-ghc-9.11.20240502/rts-1.0.2/include/rts/OSThreads.h:193:51: error: note: passing argument to parameter 'startProc' here 193 | OSThreadProc *startProc, void *param); | ^ 2 warnings and 1 error generated. ``` (cherry picked from commit a9979f55d0f688fabd25ee318e44b9addd904988) - - - - - 0ffb1664 by Cheng Shao at 2024-12-16T16:59:27+01:00 ghc-heap: fix typo in ghc-heap cbits (cherry picked from commit 2b1af08b94024c104b54eadd710855e9f8a90fb6) - - - - - a72a494b by doyougnu at 2024-12-16T17:22:19+01:00 testsuite: expand size testing infrastructure - closes #24191 - adds windows_skip, wasm_skip, wasm_arch, find_so, _find_so - path_from_ghcPkg, collect_size_ghc_pkg, collect_object_size, find_non_inplace functions to testsuite - adds on_windows and req_dynamic_ghc predicate to testsuite The design is to not make the testsuite too smart and simply offload to ghc-pkg for locations of object files and directories. (cherry picked from commit 9bae34d87f6c978e03031c549920071857c9080c) - - - - - 2f396501 by Matthew Pickering at 2024-12-16T17:23:21+01:00 tests: Widen acceptance window for dir and so size tests These are testing things which are sometimes out the control of a GHC developer. Therefore we shouldn't fail CI if something about these dependencies change because we can't do anything about it. It is still useful to have these statistics for visualisation in grafana though. Ticket #24759 (cherry picked from commit c49493f242fc78fbf23ef3642df531a19c3b4b24) - - - - - b0f86d81 by Matthew Pickering at 2024-12-16T17:23:30+01:00 Disable rts_so test It has already manifested large fluctuations and destabilising CI Fixes #24762 (cherry picked from commit 9562808d02db67838844d874c632f18af904949c) - - - - - 2117cacc by Torsten Schmits at 2024-12-16T17:25:54+01:00 refactor quadratic search in warnMissingHomeModules (cherry picked from commit bc672166acd8f2815d58b6d214e69373abec4486) - - - - - 582bd263 by Torsten Schmits at 2024-12-16T17:26:46+01:00 add test that runs MakeDepend on thousands of modules (cherry picked from commit 7875e8cbe5d9b69a1a77354317b2bf9478172686) - - - - - 26a989fc by Matthew Pickering at 2024-12-16T17:27:50+01:00 driver: Fix -Wmissing-home-modules when multiple units have the same module name It was assumed that module names were unique but that isn't true with multiple units. The fix is quite simple, maintain a set of `(ModuleName, UnitId)` and query that to see whether the module has been specified. Fixes #25122 (cherry picked from commit 951ce3d5904a1d34d49787d444f99e251e24d4e7) - - - - - 03a5778b by Sylvain Henry at 2024-12-16T20:00:40+01:00 Reverse arguments to stgCallocBytes (fix #24828) (cherry picked from commit 6838a7c32ca29b5d44adc9d6280d3a960f31be7c) - - - - - 4acf252e by Ben Gamari at 2024-12-16T20:08:29+01:00 rts: Fix size of StgOrigThunkInfo frames Previously the entry code of the `stg_orig_thunk` frame failed to account for the size of the profiling header as it hard-coded the frame size. Fix this. Fixes #24809. (cherry picked from commit 6d7e6ad803be11cb7a79dca727c37e4ef21cda4b) - - - - - 32cffba0 by Fendor at 2024-12-16T20:08:48+01:00 Add regression test T24809 for stg_orig_thunk_info_frame size (cherry picked from commit c645fe406cd4a3f4c152e51dfbcdeeb5e2930fb1) - - - - - a98be934 by Andreas Klebinger at 2024-12-16T20:13:33+01:00 bindists: Check for existence of share folder before trying to copy it. This folder isn't distributed in windows bindists A lack of doing so resulted us copying loads of files twice. (cherry picked from commit 4181aa40fff5653a121cd2ece33ab0f7454d421d) - - - - - 4c8ecfb2 by Matthew Pickering at 2024-12-16T20:13:41+01:00 Remove ad-hoc installation of mingw toolchain in relocatable bindists This reverts 616ac30026e8dd7d2ebb98d92dde071eedf5d951 The choice about whether to install mingw is taken in the installation makefile. This is also broken on non-windows systems. The actual issue was the EnableDistroToolchain variable wasn't declared in mk/config.mk and therefore the check to install mingw was failing. (cherry picked from commit d216510e43deca5a9a221d2b799face293e38299) - - - - - a2dbc969 by Cheng Shao at 2024-12-16T20:17:32+01:00 testsuite: fix T17920 for wasm backend T17920 was marked as fragile on wasm before; it can be trivially fixed by avoiding calling variadic printf() in cmm. (cherry picked from commit 7b4c19983bf6bc11b519b437a6204c38672721ea) - - - - - b4ea6f4c by Simon Peyton Jones at 2024-12-16T20:19:30+01:00 Better skolemisation As #24810 showed, it is (a little) better to skolemise en-bloc, so that Note [Let-bound skolems] fires more often. See Note [Skolemisation en bloc] in GHC.Tc.Utils.Instantiate. (cherry picked from commit 3d9e4ce68a55f6bc5246d2d77729676010e85bbd) - - - - - b3e59558 by Ryan Scott at 2024-12-16T20:21:10+01:00 Add missing parenthesizePat in cvtp We need to ensure that the output of `cvtp` is parenthesized (at precedence `sigPrec`) so that any pattern signatures with a surrounding pattern signature can parse correctly. Fixes #24837. (cherry picked from commit a3cd3a1d0d186f2aa4d0273c6b3e74a442de2ef0) - - - - - 9bdcf5f1 by crumbtoo at 2024-12-16T20:21:18+01:00 user_guide: Fix typo in MultiWayIf chapter Close #24829 (cherry picked from commit c5e00c35927d574f71bf77449817b131d1749750) - - - - - 0afc5c79 by Cheng Shao at 2024-12-16T20:21:31+01:00 rts: fix missing function prototypes in ClosureMacros.h (cherry picked from commit 3ca72ad974169aa39f391774875a9cc2a77ee967) - - - - - ab780a99 by Cheng Shao at 2024-12-16T20:21:44+01:00 rts: use __builtin_offsetof to implement STG_FIELD_OFFSET This patch fixes the STG_FIELD_OFFSET macro definition by using __builtin_offsetof, which is what gcc/clang uses to implement offsetof in standard C. The previous definition that uses NULL pointer involves subtle undefined behavior in C and thus reported by UndefinedBehaviorSanitizer as well: ``` rts/Capability.h:243:58: runtime error: member access within null pointer of type 'Capability' (aka 'struct Capability_') SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Capability.h:243:58 ``` (cherry picked from commit 05c4fafbc1693164d5f06ed062fc73bbf3f78deb) - - - - - 2aa0ec1b by Cheng Shao at 2024-12-16T20:21:49+01:00 rts: fix an unaligned load in nonmoving gc This patch fixes an unaligned load in nonmoving gc by ensuring the closure address is properly untagged first before attempting to prefetch its header. The unaligned load is reported by UndefinedBehaviorSanitizer: ``` rts/sm/NonMovingMark.c:921:9: runtime error: member access within misaligned address 0x0042005f3a71 for type 'StgClosure' (aka 'struct StgClosure_'), which requires 8 byte alignment 0x0042005f3a71: note: pointer points here 00 00 00 98 43 13 8e 12 7f 00 00 50 3c 5f 00 42 00 00 00 58 17 b7 92 12 7f 00 00 89 cb 5e 00 42 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/NonMovingMark.c:921:9 ``` This issue had previously gone unnoticed since it didn't really harm runtime correctness, the invalid header address directly loaded from a tagged pointer is only used as prefetch address and will not cause segfaults. However, it still should be corrected because the prefetch would be rendered useless by this issue, and untagging only involves a single bitwise operation without memory access so it's cheap enough to add. (cherry picked from commit c77a48af6e1f38337b305fec794e8c999f1c7f3a) - - - - - e72b0841 by Cheng Shao at 2024-12-16T20:21:54+01:00 rts: ensure gc_thread/gen_workspace is allocated with proper alignment gc_thread/gen_workspace are required to be aligned by 64 bytes. However, this property has not been properly enforced before, and numerous alignment violations at runtime has been caught by UndefinedBehaviorSanitizer that look like: ``` rts/sm/GC.c:1167:8: runtime error: member access within misaligned address 0x0000027a3390 for type 'gc_thread' (aka 'struct gc_thread_'), which requires 64 byte alignment 0x0000027a3390: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1167:8 rts/sm/GC.c:1184:13: runtime error: member access within misaligned address 0x0000027a3450 for type 'gen_workspace' (aka 'struct gen_workspace_'), which requires 64 byte alignment 0x0000027a3450: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1184:13 ``` This patch fixes the gc_thread/gen_workspace misalignment issue by explicitly allocating them with alignment constraint. (cherry picked from commit 7a660042395614e4b19534baf5b779f65059861e) - - - - - 04c07ba1 by Cheng Shao at 2024-12-16T20:23:22+01:00 hadrian: disable PIC for in-tree GMP on wasm32 This patch disables PIC for in-tree GMP on wasm32 target. Enabling PIC unconditionally adds undesired code size and runtime overhead for wasm32. (cherry picked from commit f9c1ae122ec642c0d9236dffc971bc2d1ca38fba) - - - - - a9c7753c by Cheng Shao at 2024-12-16T20:23:30+01:00 hadrian: disable in-tree gmp fft code path for wasm32 This patch disables in-tree GMP FFT code paths for wasm32 target in order to give up some performance of multiplying very large operands in exchange for reduced code size. (cherry picked from commit 1a32f82807ae01813f14bdf12fed75eb32799e18) - - - - - c5f4f43a by Cheng Shao at 2024-12-16T20:23:56+01:00 hadrian: build in-tree GMP with malloc-notreentrant on wasm32 This patch makes hadrian build in-tree GMP with the --enable-alloca=malloc-notreentrant configure option. We will only need malloc-reentrant when we have threaded RTS and SMP support on wasm32, which will take some time to happen, before which we should use malloc-notreentrant to avoid undesired runtime overhead. (cherry picked from commit 06277d56de91c8d21cbf71e8bc4096925b863acc) - - - - - 2689edf9 by Andreas Klebinger at 2024-12-16T20:31:21+01:00 Add release notes for some backported patches. Add entries for the following backported MRs: !12498: -fprof-late: Don't add cost centres to static data. !12565: IPE: Eliminate dependency on Read !12591: ghc-heap: fix typo in ghc-heap cbits !12607: refactor quadratic search in warnMissingHomeModules !12621: rts: Fix size of StgOrigThunkInfo frames !12649 # bindists: Check for existence of shared folder before trying to copy it. !12653: Better skolemisation !12734: Various rts fixes for issues spotted by UndefinedBehaviorSanitizer !12592: hadrian: adjust in-tree GMP configure options for wasm32 - - - - - 30 changed files: - compiler/GHC.hs - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Core/LateCC.hs - compiler/GHC/Core/LateCC/TopLevelBinds.hs - compiler/GHC/Core/LateCC/Types.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/Type.hs - compiler/GHC/Core/Utils.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/Pipeline/Execute.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Iface/Recomp/Flags.hs - compiler/GHC/Runtime/Eval.hs - compiler/GHC/Runtime/Eval/Types.hs - compiler/GHC/Runtime/Interpreter.hs - compiler/GHC/Settings.hs - compiler/GHC/Settings/IO.hs - compiler/GHC/StgToByteCode.hs - compiler/GHC/StgToCmm/InfoTableProv.hs - compiler/GHC/StgToJS/Linker/Linker.hs - compiler/GHC/StgToJS/Rts/Rts.hs - compiler/GHC/SysTools/Cpp.hs - compiler/GHC/SysTools/Tasks.hs - compiler/GHC/Tc/Types/Evidence.hs - compiler/GHC/Tc/Utils/Instantiate.hs - compiler/GHC/Tc/Utils/TcType.hs - compiler/GHC/Tc/Utils/Unify.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/220f15b278acb09433b529cf91c10fc756f6e67e...2689edf9b54149ffa64d87487e18f4f9b6818f90 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/220f15b278acb09433b529cf91c10fc756f6e67e...2689edf9b54149ffa64d87487e18f4f9b6818f90 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 16 23:15:31 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Mon, 16 Dec 2024 18:15:31 -0500 Subject: [Git][ghc/ghc][wip/rts-warnings] rts: Fix incorrect format specifiers in era profiling Message-ID: <6760b49367e7e_4ac1ebd600-358@gitlab.mail> Ben Gamari pushed to branch wip/rts-warnings at Glasgow Haskell Compiler / GHC Commits: 5431f5c4 by Ben Gamari at 2024-12-16T18:15:16-05:00 rts: Fix incorrect format specifiers in era profiling Fixes #25581. - - - - - 1 changed file: - rts/ProfHeap.c Changes: ===================================== rts/ProfHeap.c ===================================== @@ -958,9 +958,9 @@ dumpCensus( Census *census ) count * sizeof(W_)); break; case HEAP_BY_ERA: - fprintf(hp_file, "%lu", (StgWord)ctr->identity); + fprintf(hp_file, "%" FMT_Word, (StgWord)ctr->identity); char str_era[100]; - sprintf(str_era, "%lu", (StgWord)ctr->identity); + sprintf(str_era, "%" FMT_Word, (StgWord)ctr->identity); traceHeapProfSampleString(0, str_era, count * sizeof(W_)); break; case HEAP_BY_MOD: View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5431f5c4ce9e96bab459af13b55891f8defb6fb7 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5431f5c4ce9e96bab459af13b55891f8defb6fb7 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Mon Dec 16 23:47:53 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 16 Dec 2024 18:47:53 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 5 commits: LLVM: When emitting a vector literal with ppTypeLit, include the type information Message-ID: <6760bc29e5a7a_2acba1bda607561e@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 80f0e02d by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - 175a1355 by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - cc3e1525 by Simon Peyton Jones at 2024-12-16T18:47:00-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - 30 changed files: - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/Opt/Specialise.hs - compiler/GHC/Core/SimpleOpt.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/Type.hs - compiler/GHC/Data/Unboxed.hs - compiler/GHC/Hs/Dump.hs - compiler/GHC/Llvm/Ppr.hs - compiler/GHC/Rename/Bind.hs - compiler/GHC/Rename/Env.hs - compiler/GHC/Tc/Gen/Expr.hs - compiler/GHC/Tc/Gen/Head.hs - compiler/GHC/Tc/Solver/Equality.hs - compiler/GHC/Tc/TyCl.hs - compiler/GHC/Tc/Utils/TcType.hs - compiler/GHC/Tc/Utils/Unify.hs - compiler/GHC/Types/Var.hs - + testsuite/tests/rename/should_fail/T25437.hs - + testsuite/tests/rename/should_fail/T25437.stderr - testsuite/tests/rename/should_fail/T5001b.stderr - testsuite/tests/rename/should_fail/all.T - + testsuite/tests/simd/should_run/T25561.hs - + testsuite/tests/simd/should_run/T25561.stdout - testsuite/tests/simd/should_run/all.T Changes: ===================================== compiler/GHC/Core.hs ===================================== @@ -14,9 +14,10 @@ module GHC.Core ( -- * In/Out type synonyms InId, InBind, InExpr, InAlt, InArg, InType, InKind, - InBndr, InVar, InCoercion, InTyVar, InCoVar, + InBndr, InVar, InCoercion, InTyVar, InCoVar, InTyCoVar, OutId, OutBind, OutExpr, OutAlt, OutArg, OutType, OutKind, - OutBndr, OutVar, OutCoercion, OutTyVar, OutCoVar, MOutCoercion, + OutBndr, OutVar, OutCoercion, OutTyVar, OutCoVar, + OutTyCoVar, MOutCoercion, -- ** 'Expr' construction mkLet, mkLets, mkLetNonRec, mkLetRec, mkLams, ===================================== compiler/GHC/Core/Coercion.hs ===================================== @@ -2283,7 +2283,7 @@ liftCoSubstTyVarBndrUsing view_co fun lc@(LC subst cenv) old_var stuff = fun lc old_kind eta = view_co stuff k1 = coercionLKind eta - new_var = uniqAway (getSubstInScope subst) (setVarType old_var k1) + new_var = uniqAway (substInScopeSet subst) (setVarType old_var k1) lifted = mkGReflRightCo Nominal (TyVarTy new_var) eta -- :: new_var ~ new_var |> eta @@ -2303,7 +2303,7 @@ liftCoSubstCoVarBndrUsing view_co fun lc@(LC subst cenv) old_var stuff = fun lc old_kind eta = view_co stuff k1 = coercionLKind eta - new_var = uniqAway (getSubstInScope subst) (setVarType old_var k1) + new_var = uniqAway (substInScopeSet subst) (setVarType old_var k1) -- old_var :: s1 ~r s2 -- eta :: (s1' ~r s2') ~N (t1 ~r t2) @@ -2387,7 +2387,7 @@ lcLookupCoVar (LC subst _) cv = lookupCoVar subst cv -- | Get the 'InScopeSet' from a 'LiftingContext' lcInScopeSet :: LiftingContext -> InScopeSet -lcInScopeSet (LC subst _) = getSubstInScope subst +lcInScopeSet (LC subst _) = substInScopeSet subst {- %************************************************************************ ===================================== compiler/GHC/Core/Lint.hs ===================================== @@ -82,7 +82,6 @@ import GHC.Types.Demand ( splitDmdSig, isDeadEndDiv ) import GHC.Builtin.Names import GHC.Builtin.Types.Prim -import GHC.Builtin.Types ( multiplicityTy ) import GHC.Data.Bag import GHC.Data.List.SetOps @@ -96,16 +95,16 @@ import GHC.Utils.Error import qualified GHC.Utils.Error as Err import GHC.Utils.Logger +import GHC.Data.Pair +import GHC.Base (oneShot) +import GHC.Data.Unboxed + import Control.Monad import Data.Foldable ( for_, toList ) import Data.List.NonEmpty ( NonEmpty(..), groupWith ) -import Data.List ( partition ) import Data.Maybe import Data.IntMap.Strict ( IntMap ) import qualified Data.IntMap.Strict as IntMap ( lookup, keys, empty, fromList ) -import GHC.Data.Pair -import GHC.Base (oneShot) -import GHC.Data.Unboxed {- Note [Core Lint guarantee] @@ -552,7 +551,7 @@ Check a core binding, returning the list of variables bound. -- Let lintRecBindings :: TopLevelFlag -> [(Id, CoreExpr)] - -> ([LintedId] -> LintM a) -> LintM (a, [UsageEnv]) + -> ([OutId] -> LintM a) -> LintM (a, [UsageEnv]) lintRecBindings top_lvl pairs thing_inside = lintIdBndrs top_lvl bndrs $ \ bndrs' -> do { ues <- zipWithM lint_pair bndrs' rhss @@ -566,14 +565,14 @@ lintRecBindings top_lvl pairs thing_inside ; lintLetBind top_lvl Recursive bndr' rhs rhs_ty ; return ue } -lintLetBody :: LintLocInfo -> [LintedId] -> CoreExpr -> LintM (LintedType, UsageEnv) +lintLetBody :: LintLocInfo -> [OutId] -> CoreExpr -> LintM (OutType, UsageEnv) lintLetBody loc bndrs body = do { (body_ty, body_ue) <- addLoc loc (lintCoreExpr body) ; mapM_ (lintJoinBndrType body_ty) bndrs ; return (body_ty, body_ue) } -lintLetBind :: TopLevelFlag -> RecFlag -> LintedId - -> CoreExpr -> LintedType -> LintM () +lintLetBind :: TopLevelFlag -> RecFlag -> OutId + -> CoreExpr -> OutType -> LintM () -- Binder's type, and the RHS, have already been linted -- This function checks other invariants lintLetBind top_lvl rec_flag binder rhs rhs_ty @@ -664,7 +663,7 @@ lintLetBind top_lvl rec_flag binder rhs rhs_ty -- join point. -- -- See Note [Checking StaticPtrs]. -lintRhs :: Id -> CoreExpr -> LintM (LintedType, UsageEnv) +lintRhs :: Id -> CoreExpr -> LintM (OutType, UsageEnv) -- NB: the Id can be Linted or not -- it's only used for -- its OccInfo and join-pointer-hood lintRhs bndr rhs @@ -696,7 +695,7 @@ lintRhs _bndr rhs = fmap lf_check_static_ptrs getLintFlags >>= go -- | Lint the RHS of a join point with expected join arity of @n@ (see Note -- [Join points] in "GHC.Core"). -lintJoinLams :: JoinArity -> Maybe Id -> CoreExpr -> LintM (LintedType, UsageEnv) +lintJoinLams :: JoinArity -> Maybe Id -> CoreExpr -> LintM (OutType, UsageEnv) lintJoinLams join_arity enforce rhs = go join_arity rhs where @@ -857,26 +856,7 @@ that: it really is a value, albeit a zero-bit value. ************************************************************************ -} --- Linted things: substitution applied, and type is linted -type LintedType = Type -type LintedKind = Kind -type LintedCoercion = Coercion -type LintedTyCoVar = TyCoVar -type LintedId = Id - --- | Lint an expression cast through the given coercion, returning the type --- resulting from the cast. -lintCastExpr :: CoreExpr -> LintedType -> Coercion -> LintM LintedType -lintCastExpr expr expr_ty co - = do { co' <- lintCoercion co - ; let (Pair from_ty to_ty, role) = coercionKindRole co' - ; checkValueType to_ty $ - text "target of cast" <+> quotes (ppr co') - ; lintRole co' Representational role - ; ensureEqTys from_ty expr_ty (mkCastErr expr co' from_ty expr_ty) - ; return to_ty } - -lintCoreExpr :: CoreExpr -> LintM (LintedType, UsageEnv) +lintCoreExpr :: InExpr -> LintM (OutType, UsageEnv) -- The returned type has the substitution from the monad -- already applied to it: -- lintCoreExpr e subst = exprType (subst e) @@ -887,29 +867,32 @@ lintCoreExpr :: CoreExpr -> LintM (LintedType, UsageEnv) -- See Note [GHC Formalism] lintCoreExpr (Var var) - = do - var_pair@(var_ty, _) <- lintIdOcc var 0 - -- See Note [Linting representation-polymorphic builtins] - checkRepPolyBuiltin (Var var) [] var_ty - --checkDataToTagPrimOpTyCon (Var var) [] - return var_pair + = do { var_pair@(var_ty, _) <- lintIdOcc var 0 + -- See Note [Linting representation-polymorphic builtins] + ; checkRepPolyBuiltin (Var var) [] var_ty + --checkDataToTagPrimOpTyCon (Var var) [] + ; return var_pair } lintCoreExpr (Lit lit) = return (literalType lit, zeroUE) lintCoreExpr (Cast expr co) - = do (expr_ty, ue) <- markAllJoinsBad (lintCoreExpr expr) + = do { (expr_ty, ue) <- markAllJoinsBad (lintCoreExpr expr) -- markAllJoinsBad: see Note [Join points and casts] - to_ty <- lintCastExpr expr expr_ty co - return (to_ty, ue) + + ; lintCoercion co + ; lintRole co Representational (coercionRole co) + ; Pair from_ty to_ty <- substCoKindM co + ; checkValueType (typeKind to_ty) $ + text "target of cast" <+> quotes (ppr co) + ; ensureEqTys from_ty expr_ty (mkCastErr expr co from_ty expr_ty) + ; return (to_ty, ue) } lintCoreExpr (Tick tickish expr) - = do case tickish of - Breakpoint _ _ ids _ -> forM_ ids $ \id -> do - checkDeadIdOcc id - lookupIdInScope id - _ -> return () - markAllJoinsBadIf block_joins $ lintCoreExpr expr + = do { case tickish of + Breakpoint _ _ ids _ -> forM_ ids $ \id -> lintIdOcc id 0 + _ -> return () + ; markAllJoinsBadIf block_joins $ lintCoreExpr expr } where block_joins = not (tickish `tickishScopesLike` SoftScope) -- TODO Consider whether this is the correct rule. It is consistent with @@ -921,12 +904,12 @@ lintCoreExpr (Tick tickish expr) lintCoreExpr (Let (NonRec tv (Type ty)) body) | isTyVar tv = -- See Note [Linting type lets] - do { ty' <- lintType ty - ; lintTyBndr tv $ \ tv' -> + do { ty' <- lintTypeAndSubst ty + ; lintTyCoBndr tv $ \ tv' -> do { addLoc (RhsOf tv) $ lintTyKind tv' ty' -- Now extend the substitution so we -- take advantage of it in the body - ; extendTvSubstL tv ty' $ + ; extendTvSubstL tv ty' $ addLoc (BodyOfLet tv) $ lintCoreExpr body } } @@ -939,7 +922,8 @@ lintCoreExpr (Let (NonRec bndr rhs) body) -- Now lint the binder ; lintBinder LetBind bndr $ \bndr' -> do { lintLetBind NotTopLevel NonRecursive bndr' rhs rhs_ty - ; addAliasUE bndr let_ue (lintLetBody (BodyOfLet bndr') [bndr'] body) } } + ; addAliasUE bndr' let_ue $ + lintLetBody (BodyOfLet bndr') [bndr'] body } } | otherwise = failWithL (mkLetErr bndr rhs) -- Not quite accurate @@ -967,20 +951,24 @@ lintCoreExpr e@(Let (Rec pairs) body) lintCoreExpr e@(App _ _) | Var fun <- fun , fun `hasKey` runRWKey + -- See Note [Linting of runRW#] -- N.B. we may have an over-saturated application of the form: -- runRW (\s -> \x -> ...) y - , ty_arg1 : ty_arg2 : arg3 : rest <- args - = do { fun_pair1 <- lintCoreArg (idType fun, zeroUE) ty_arg1 - ; (fun_ty2, ue2) <- lintCoreArg fun_pair1 ty_arg2 - -- See Note [Linting of runRW#] - ; let lintRunRWCont :: CoreArg -> LintM (LintedType, UsageEnv) - lintRunRWCont expr@(Lam _ _) = - lintJoinLams 1 (Just fun) expr - lintRunRWCont other = markAllJoinsBad $ lintCoreExpr other + , ty_arg1 : ty_arg2 : cont_arg : rest <- args + = do { let lint_rw_cont :: CoreArg -> Mult -> UsageEnv -> LintM (OutType, UsageEnv) + lint_rw_cont expr@(Lam _ _) mult fun_ue + = do { (arg_ty, arg_ue) <- lintJoinLams 1 (Just fun) expr + ; let app_ue = addUE fun_ue (scaleUE mult arg_ue) + ; return (arg_ty, app_ue) } + + lint_rw_cont expr mult ue + = lintValArg expr mult ue -- TODO: Look through ticks? - ; (arg3_ty, ue3) <- lintRunRWCont arg3 - ; app_ty <- lintValApp arg3 fun_ty2 arg3_ty ue2 ue3 - ; lintCoreArgs app_ty rest } + + ; runrw_pr <- lintApp (text "runRW# expression") + lintTyArg lint_rw_cont + (idType fun) [ty_arg1,ty_arg2,cont_arg] zeroUE + ; lintCoreArgs runrw_pr rest } | otherwise = do { fun_pair <- lintCoreFun fun (length args) @@ -1016,24 +1004,23 @@ lintCoreExpr (Lam var expr) lintCoreExpr (Case scrut var alt_ty alts) = lintCaseExpr scrut var alt_ty alts --- This case can't happen; linting types in expressions gets routed through --- lintCoreArgs +-- This case can't happen; linting types in expressions gets routed through lintTyArg lintCoreExpr (Type ty) = failWithL (text "Type found as expression" <+> ppr ty) lintCoreExpr (Coercion co) -- See Note [Coercions in terms] - = do { co' <- addLoc (InCo co) $ - lintCoercion co - ; return (coercionType co', zeroUE) } + = do { addLoc (InCo co) $ lintCoercion co + ; ty <- substTyM (coercionType co) + ; return (ty, zeroUE) } ---------------------- -lintIdOcc :: Var -> Int -- Number of arguments (type or value) being passed - -> LintM (LintedType, UsageEnv) -- returns type of the *variable* -lintIdOcc var nargs - = addLoc (OccOf var) $ - do { checkL (isNonCoVarId var) - (text "Non term variable" <+> ppr var) +lintIdOcc :: InId -> Int -- Number of arguments (type or value) being passed + -> LintM (OutType, UsageEnv) -- returns type of the *variable* +lintIdOcc in_id nargs + = addLoc (OccOf in_id) $ + do { checkL (isNonCoVarId in_id) + (text "Non term variable" <+> ppr in_id) -- See GHC.Core Note [Variable occurrences in Core] -- Check that the type of the occurrence is the same @@ -1047,32 +1034,31 @@ lintIdOcc var nargs -- (Maybe a) from the binding site with bogus (Maybe a1) from -- the occurrence site. Comparing un-substituted types finesses -- this altogether - ; (bndr, linted_bndr_ty) <- lookupIdInScope var - ; let occ_ty = idType var - bndr_ty = idType bndr - ; ensureEqTys occ_ty bndr_ty $ - mkBndrOccTypeMismatchMsg bndr var bndr_ty occ_ty + ; out_ty <- lintVarOcc in_id -- Check for a nested occurrence of the StaticPtr constructor. -- See Note [Checking StaticPtrs]. ; lf <- getLintFlags ; when (nargs /= 0 && lf_check_static_ptrs lf /= AllowAnywhere) $ - checkL (idName var /= makeStaticName) $ + checkL (idName in_id /= makeStaticName) $ text "Found makeStatic nested in an expression" - ; checkDeadIdOcc var - ; checkJoinOcc var nargs - ; case isDataConId_maybe var of + ; checkDeadIdOcc in_id + + ; case isDataConId_maybe in_id of Nothing -> return () Just dc -> checkTypeDataConOcc "expression" dc - ; usage <- varCallSiteUsage var + ; checkJoinOcc in_id nargs + ; usage <- varCallSiteUsage in_id + + ; return (out_ty, usage) } + - ; return (linted_bndr_ty, usage) } lintCoreFun :: CoreExpr -> Int -- Number of arguments (type or val) being passed - -> LintM (LintedType, UsageEnv) -- Returns type of the *function* + -> LintM (OutType, UsageEnv) -- Returns type of the *function* lintCoreFun (Var var) nargs = lintIdOcc var nargs @@ -1107,8 +1093,8 @@ checkDeadIdOcc id = return () ------------------ -lintJoinBndrType :: LintedType -- Type of the body - -> LintedId -- Possibly a join Id +lintJoinBndrType :: OutType -- Type of the body + -> OutId -- Possibly a join Id -> LintM () -- Checks that the return type of a join Id matches the body -- E.g. join j x = rhs in body @@ -1195,7 +1181,7 @@ checkDataToTagPrimOpTyCon _ _ = pure () -- See Note [Linting representation-polymorphic builtins]. checkRepPolyBuiltin :: CoreExpr -- ^ the function (head of the application) we are checking -> [CoreArg] -- ^ the arguments to the application - -> LintedType -- ^ the instantiated type of the overall application + -> OutType -- ^ the instantiated type of the overall application -> LintM () checkRepPolyBuiltin (Var fun_id) args app_ty = do { do_rep_poly_checks <- lf_check_fixed_rep <$> getLintFlags @@ -1214,7 +1200,7 @@ checkRepPolyBuiltin (Var fun_id) args app_ty } checkRepPolyBuiltin _ _ _ = return () -checkRepPolyNewtypeApp :: DataCon -> [CoreArg] -> LintedType -> LintM () +checkRepPolyNewtypeApp :: DataCon -> [CoreArg] -> OutType -> LintM () checkRepPolyNewtypeApp nt args app_ty -- If the newtype is saturated, we're OK. | any isValArg args @@ -1333,13 +1319,14 @@ concreteTyVarPositions fun_id conc_tvs -- Check that the usage of var is consistent with var itself, and pop the var -- from the usage environment (this is important because of shadowing). -checkLinearity :: UsageEnv -> Var -> LintM UsageEnv +checkLinearity :: UsageEnv -> OutVar -> LintM UsageEnv checkLinearity body_ue lam_var = case varMultMaybe lam_var of Just mult -> do let (lhs, body_ue') = popUE body_ue lam_var - err_msg = text "Linearity failure in lambda:" <+> ppr lam_var - $$ ppr lhs <+> text "⊈" <+> ppr mult + err_msg = vcat [ text "Linearity failure in lambda:" <+> ppr lam_var + , ppr lhs <+> text "⊈" <+> ppr mult + , ppr body_ue ] ensureSubUsage lhs mult err_msg return body_ue' Nothing -> return body_ue -- A type variable @@ -1461,33 +1448,28 @@ subtype of the required type, as one would expect. -- Takes the functions type and arguments as argument. -- Returns the *result* of applying the function to arguments. -- e.g. f :: Int -> Bool -> Int would return `Int` as result type. -lintCoreArgs :: (LintedType, UsageEnv) -> [CoreArg] -> LintM (LintedType, UsageEnv) -lintCoreArgs (fun_ty, fun_ue) args = foldM lintCoreArg (fun_ty, fun_ue) args +lintCoreArgs :: (OutType, UsageEnv) -> [InExpr] -> LintM (OutType, UsageEnv) +lintCoreArgs (fun_ty, fun_ue) args + = lintApp (text "expression") + lintTyArg lintValArg fun_ty args fun_ue -lintCoreArg :: (LintedType, UsageEnv) -> CoreArg -> LintM (LintedType, UsageEnv) +lintTyArg :: InExpr -> LintM OutType -- Type argument -lintCoreArg (fun_ty, ue) (Type arg_ty) +lintTyArg (Type arg_ty) = do { checkL (not (isCoercionTy arg_ty)) (text "Unnecessary coercion-to-type injection:" <+> ppr arg_ty) - ; arg_ty' <- lintType arg_ty - ; res <- lintTyApp fun_ty arg_ty' - ; return (res, ue) } - --- Coercion argument -lintCoreArg (fun_ty, ue) (Coercion co) - = do { co' <- addLoc (InCo co) $ - lintCoercion co - ; res <- lintCoApp fun_ty co' - ; return (res, ue) } - --- Other value argument -lintCoreArg (fun_ty, fun_ue) arg + ; lintTypeAndSubst arg_ty } +lintTyArg arg + = failWithL (hang (text "Expected type argument but found") 2 (ppr arg)) + +lintValArg :: InExpr -> Mult -> UsageEnv -> LintM (OutType, UsageEnv) +lintValArg arg mult fun_ue = do { (arg_ty, arg_ue) <- markAllJoinsBad $ lintCoreExpr arg -- See Note [Representation polymorphism invariants] in GHC.Core - ; flags <- getLintFlags + ; flags <- getLintFlags ; when (lf_check_fixed_rep flags) $ -- Only check that 'arg_ty' has a fixed RuntimeRep -- if 'lf_check_fixed_rep' is on. @@ -1496,13 +1478,14 @@ lintCoreArg (fun_ty, fun_ue) arg <+> ppr arg <+> dcolon <+> parens (ppr arg_ty <+> dcolon <+> ppr (typeKind arg_ty))) } - ; lintValApp arg fun_ty arg_ty fun_ue arg_ue } + ; let app_ue = addUE fun_ue (scaleUE mult arg_ue) + ; return (arg_ty, app_ue) } ----------------- lintAltBinders :: UsageEnv -> Var -- Case binder - -> LintedType -- Scrutinee type - -> LintedType -- Constructor type + -> OutType -- Scrutinee type + -> OutType -- Constructor type -> [(Mult, OutVar)] -- Binders -> LintM UsageEnv -- If you edit this function, you may need to update the GHC formalism @@ -1545,7 +1528,7 @@ checkCaseLinearity ue case_bndr var_w bndr = do ----------------- -lintTyApp :: LintedType -> LintedType -> LintM LintedType +lintTyApp :: OutType -> OutType -> LintM OutType lintTyApp fun_ty arg_ty | Just (tv,body_ty) <- splitForAllTyVar_maybe fun_ty = do { lintTyKind tv arg_ty @@ -1558,35 +1541,13 @@ lintTyApp fun_ty arg_ty | otherwise = failWithL (mkTyAppMsg fun_ty arg_ty) ------------------ -lintCoApp :: LintedType -> LintedCoercion -> LintM LintedType -lintCoApp fun_ty co - | Just (cv,body_ty) <- splitForAllCoVar_maybe fun_ty - , let co_ty = coercionType co - cv_ty = idType cv - , cv_ty `eqType` co_ty - = do { in_scope <- getInScope - ; let init_subst = mkEmptySubst in_scope - subst = extendCvSubst init_subst cv co - ; return (substTy subst body_ty) } - - | Just (_, _, arg_ty', res_ty') <- splitFunTy_maybe fun_ty - , co_ty `eqType` arg_ty' - = return (res_ty') - - | otherwise - = failWithL (mkCoAppMsg fun_ty co) - - where - co_ty = coercionType co - ----------------- -- | @lintValApp arg fun_ty arg_ty@ lints an application of @fun arg@ -- where @fun :: fun_ty@ and @arg :: arg_ty@, returning the type of the -- application. -lintValApp :: CoreExpr -> LintedType -> LintedType -> UsageEnv -> UsageEnv - -> LintM (LintedType, UsageEnv) +lintValApp :: CoreExpr -> OutType -> OutType -> UsageEnv -> UsageEnv + -> LintM (OutType, UsageEnv) lintValApp arg fun_ty arg_ty fun_ue arg_ue | Just (_, w, arg_ty', res_ty') <- splitFunTy_maybe fun_ty = do { ensureEqTys arg_ty' arg_ty (mkAppMsg arg_ty' arg_ty arg) @@ -1597,7 +1558,7 @@ lintValApp arg fun_ty arg_ty fun_ue arg_ue where err2 = mkNonFunAppMsg fun_ty arg_ty arg -lintTyKind :: OutTyVar -> LintedType -> LintM () +lintTyKind :: OutTyVar -> OutType -> LintM () -- Both args have had substitution applied -- If you edit this function, you may need to update the GHC formalism @@ -1607,7 +1568,7 @@ lintTyKind tyvar arg_ty addErrL (mkKindErrMsg tyvar arg_ty $$ (text "Linted Arg kind:" <+> ppr arg_kind)) where tyvar_kind = tyVarKind tyvar - arg_kind = typeKind arg_ty + arg_kind = typeKind arg_ty {- ************************************************************************ @@ -1617,86 +1578,92 @@ lintTyKind tyvar arg_ty ************************************************************************ -} -lintCaseExpr :: CoreExpr -> Id -> Type -> [CoreAlt] -> LintM (LintedType, UsageEnv) -lintCaseExpr scrut var alt_ty alts = - do { let e = Case scrut var alt_ty alts -- Just for error messages - - -- Check the scrutinee - ; (scrut_ty, scrut_ue) <- markAllJoinsBad $ lintCoreExpr scrut - -- See Note [Join points are less general than the paper] - -- in GHC.Core - ; let scrut_mult = idMult var - - ; alt_ty <- addLoc (CaseTy scrut) $ - lintValueType alt_ty - ; var_ty <- addLoc (IdTy var) $ - lintValueType (idType var) - - -- We used to try to check whether a case expression with no - -- alternatives was legitimate, but this didn't work. - -- See Note [No alternatives lint check] for details. - - -- Check that the scrutinee is not a floating-point type - -- if there are any literal alternatives - -- See GHC.Core Note [Case expression invariants] item (5) - -- See Note [Rules for floating-point comparisons] in GHC.Core.Opt.ConstantFold - ; let isLitPat (Alt (LitAlt _) _ _) = True - isLitPat _ = False - ; checkL (not $ isFloatingPrimTy scrut_ty && any isLitPat alts) - (text "Lint warning: Scrutinising floating-point expression with literal pattern in case analysis (see #9238)." - $$ text "scrut" <+> ppr scrut) - - ; case tyConAppTyCon_maybe (idType var) of - Just tycon - | debugIsOn - , isAlgTyCon tycon - , not (isAbstractTyCon tycon) - , null (tyConDataCons tycon) - , not (exprIsDeadEnd scrut) - -> pprTrace "Lint warning: case binder's type has no constructors" (ppr var <+> ppr (idType var)) - -- This can legitimately happen for type families - $ return () - _otherwise -> return () - - -- Don't use lintIdBndr on var, because unboxed tuple is legitimate - - ; subst <- getSubst - ; ensureEqTys var_ty scrut_ty (mkScrutMsg var var_ty scrut_ty subst) - -- See GHC.Core Note [Case expression invariants] item (7) - - ; lintBinder CaseBind var $ \_ -> - do { -- Check the alternatives - ; alt_ues <- mapM (lintCoreAlt var scrut_ty scrut_mult alt_ty) alts - ; let case_ue = (scaleUE scrut_mult scrut_ue) `addUE` supUEs alt_ues - ; checkCaseAlts e scrut_ty alts - ; return (alt_ty, case_ue) } } - -checkCaseAlts :: CoreExpr -> LintedType -> [CoreAlt] -> LintM () +lintCaseExpr :: CoreExpr -> InId -> InType -> [CoreAlt] -> LintM (OutType, UsageEnv) +lintCaseExpr scrut case_bndr alt_ty alts + = do { let e = Case scrut case_bndr alt_ty alts -- Just for error messages + + -- Check the scrutinee + ; (scrut_ty', scrut_ue) <- markAllJoinsBad $ lintCoreExpr scrut + -- See Note [Join points are less general than the paper] + -- in GHC.Core + + ; alt_ty' <- addLoc (CaseTy scrut) $ lintValueType alt_ty + + ; checkCaseAlts e scrut scrut_ty' alts + + -- Lint the case-binder. Must do this after linting the scrutinee + -- because the case-binder isn't in scope in the scrutineex + ; lintBinder CaseBind case_bndr $ \case_bndr' -> + -- Don't use lintIdBndr on case_bndr, because unboxed tuple is legitimate + + do { let case_bndr_ty' = idType case_bndr' + scrut_mult = idMult case_bndr' + + ; ensureEqTys case_bndr_ty' scrut_ty' (mkScrutMsg case_bndr case_bndr_ty' scrut_ty') + -- See GHC.Core Note [Case expression invariants] item (7) + + ; -- Check the alternatives + ; alt_ues <- mapM (lintCoreAlt case_bndr' scrut_ty' scrut_mult alt_ty') alts + ; let case_ue = (scaleUE scrut_mult scrut_ue) `addUE` supUEs alt_ues + ; return (alt_ty', case_ue) } } + +checkCaseAlts :: InExpr -> InExpr -> OutType -> [CoreAlt] -> LintM () -- a) Check that the alts are non-empty -- b1) Check that the DEFAULT comes first, if it exists -- b2) Check that the others are in increasing order -- c) Check that there's a default for infinite types +-- d) Check that the scrutinee is not a floating-point type +-- if there are any literal alternatives +-- e) Check if the scrutinee type has no constructors +-- +-- We used to try to check whether a case expression with no +-- alternatives was legitimate, but this didn't work. +-- See Note [No alternatives lint check] for details. +-- -- NB: Algebraic cases are not necessarily exhaustive, because -- the simplifier correctly eliminates case that can't -- possibly match. - -checkCaseAlts e ty alts = - do { checkL (all non_deflt con_alts) (mkNonDefltMsg e) - -- See GHC.Core Note [Case expression invariants] item (2) - - ; checkL (increasing_tag con_alts) (mkNonIncreasingAltsMsg e) - -- See GHC.Core Note [Case expression invariants] item (3) - - -- For types Int#, Word# with an infinite (well, large!) number of - -- possible values, there should usually be a DEFAULT case - -- But (see Note [Empty case alternatives] in GHC.Core) it's ok to - -- have *no* case alternatives. - -- In effect, this is a kind of partial test. I suppose it's possible - -- that we might *know* that 'x' was 1 or 2, in which case - -- case x of { 1 -> e1; 2 -> e2 } - -- would be fine. - ; checkL (isJust maybe_deflt || not is_infinite_ty || null alts) - (nonExhaustiveAltsMsg e) } +checkCaseAlts e scrut scrut_ty alts + = do { checkL (all non_deflt con_alts) (mkNonDefltMsg e) + -- See GHC.Core Note [Case expression invariants] item (2) + + ; checkL (increasing_tag con_alts) (mkNonIncreasingAltsMsg e) + -- See GHC.Core Note [Case expression invariants] item (3) + + -- For types Int#, Word# with an infinite (well, large!) number of + -- possible values, there should usually be a DEFAULT case + -- But (see Note [Empty case alternatives] in GHC.Core) it's ok to + -- have *no* case alternatives. + -- In effect, this is a kind of partial test. I suppose it's possible + -- that we might *know* that 'x' was 1 or 2, in which case + -- case x of { 1 -> e1; 2 -> e2 } + -- would be fine. + ; checkL (isJust maybe_deflt || not is_infinite_ty || null alts) + (nonExhaustiveAltsMsg e) + + -- Check that the scrutinee is not a floating-point type + -- if there are any literal alternatives + -- See GHC.Core Note [Case expression invariants] item (5) + -- See Note [Rules for floating-point comparisons] in GHC.Core.Opt.ConstantFold + ; checkL (not $ isFloatingPrimTy scrut_ty && any is_lit_alt alts) + (text "Lint warning: Scrutinising floating-point expression with literal pattern in case analysis (see #9238)." + $$ text "scrut" <+> ppr scrut) + + -- Check if scrutinee type has no constructors + -- Just a trace message for now + ; case tyConAppTyCon_maybe scrut_ty of + Just tycon + | debugIsOn + , isAlgTyCon tycon + , not (isAbstractTyCon tycon) + , null (tyConDataCons tycon) + , not (exprIsDeadEnd scrut) + -> pprTrace "Lint warning: case scrutinee type has no constructors" + (ppr scrut_ty) + -- This can legitimately happen for type families + $ return () + _otherwise -> return () + } where (con_alts, maybe_deflt) = findDefault alts @@ -1707,21 +1674,24 @@ checkCaseAlts e ty alts = non_deflt (Alt DEFAULT _ _) = False non_deflt _ = True - is_infinite_ty = case tyConAppTyCon_maybe ty of + is_lit_alt (Alt (LitAlt _) _ _) = True + is_lit_alt _ = False + + is_infinite_ty = case tyConAppTyCon_maybe scrut_ty of Nothing -> False Just tycon -> isPrimTyCon tycon -lintAltExpr :: CoreExpr -> LintedType -> LintM UsageEnv +lintAltExpr :: CoreExpr -> OutType -> LintM UsageEnv lintAltExpr expr ann_ty = do { (actual_ty, ue) <- lintCoreExpr expr ; ensureEqTys actual_ty ann_ty (mkCaseAltMsg expr actual_ty ann_ty) ; return ue } -- See GHC.Core Note [Case expression invariants] item (6) -lintCoreAlt :: Var -- Case binder - -> LintedType -- Type of scrutinee - -> Mult -- Multiplicity of scrutinee - -> LintedType -- Type of the alternative +lintCoreAlt :: OutId -- Case binder + -> OutType -- Type of scrutinee + -> Mult -- Multiplicity of scrutinee + -> OutType -- Type of the alternative -> CoreAlt -> LintM UsageEnv -- If you edit this function, you may need to update the GHC formalism @@ -1730,8 +1700,8 @@ lintCoreAlt case_bndr _ scrut_mult alt_ty (Alt DEFAULT args rhs) = do { lintL (null args) (mkDefaultArgsMsg args) ; rhs_ue <- lintAltExpr rhs alt_ty ; let (case_bndr_usage, rhs_ue') = popUE rhs_ue case_bndr - err_msg = text "Linearity failure in the DEFAULT clause:" <+> ppr case_bndr - $$ ppr case_bndr_usage <+> text "⊈" <+> ppr scrut_mult + err_msg = vcat [ text "Linearity failure in the DEFAULT clause:" <+> ppr case_bndr + , ppr case_bndr_usage <+> text "⊈" <+> ppr scrut_mult ] ; ensureSubUsage case_bndr_usage scrut_mult err_msg ; return rhs_ue' } @@ -1765,9 +1735,10 @@ lintCoreAlt case_bndr scrut_ty _scrut_mult alt_ty alt@(Alt (DataAlt con) args rh -- And now bring the new binders into scope ; lintBinders CasePatBind args $ \ args' -> do - { - rhs_ue <- lintAltExpr rhs alt_ty - ; rhs_ue' <- addLoc (CasePat alt) (lintAltBinders rhs_ue case_bndr scrut_ty con_payload_ty (zipEqual "lintCoreAlt" multiplicities args')) + { rhs_ue <- lintAltExpr rhs alt_ty + ; rhs_ue' <- addLoc (CasePat alt) $ + lintAltBinders rhs_ue case_bndr scrut_ty con_payload_ty + (zipEqual "lintCoreAlt" multiplicities args') ; return $ deleteUE rhs_ue' case_bndr } } @@ -1812,7 +1783,7 @@ lintLinearBinder doc actual_usage described_usage -- 1. Lint var types or kinds (possibly substituting) -- 2. Add the binder to the in scope set, and if its a coercion var, -- we may extend the substitution to reflect its (possibly) new kind -lintBinders :: BindingSite -> [Var] -> ([Var] -> LintM a) -> LintM a +lintBinders :: HasDebugCallStack => BindingSite -> [InVar] -> ([OutVar] -> LintM a) -> LintM a lintBinders _ [] linterF = linterF [] lintBinders site (var:vars) linterF = lintBinder site var $ \var' -> lintBinders site vars $ \ vars' -> @@ -1820,36 +1791,30 @@ lintBinders site (var:vars) linterF = lintBinder site var $ \var' -> -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] -lintBinder :: BindingSite -> Var -> (Var -> LintM a) -> LintM a +lintBinder :: HasDebugCallStack => BindingSite -> InVar -> (OutVar -> LintM a) -> LintM a lintBinder site var linterF | isTyCoVar var = lintTyCoBndr var linterF | otherwise = lintIdBndr NotTopLevel site var linterF -lintTyBndr :: TyVar -> (LintedTyCoVar -> LintM a) -> LintM a -lintTyBndr = lintTyCoBndr -- We could specialise it, I guess - -lintTyCoBndr :: TyCoVar -> (LintedTyCoVar -> LintM a) -> LintM a +lintTyCoBndr :: HasDebugCallStack => TyCoVar -> (OutTyCoVar -> LintM a) -> LintM a lintTyCoBndr tcv thing_inside - = do { subst <- getSubst - ; tcv_type' <- lintType (varType tcv) - ; let tcv' = uniqAway (getSubstInScope subst) $ - setVarType tcv tcv_type' - subst' = extendTCvSubstWithClone subst tcv tcv' + = do { tcv_type' <- lintTypeAndSubst (varType tcv) + ; let tcv_kind' = typeKind tcv_type' - -- See (FORALL1) and (FORALL2) in GHC.Core.Type + -- See (FORALL1) and (FORALL2) in GHC.Core.Type ; if (isTyVar tcv) then -- Check that in (forall (a:ki). blah) we have ki:Type - lintL (isLiftedTypeKind (typeKind tcv_type')) $ + lintL (isLiftedTypeKind tcv_kind') $ hang (text "TyVar whose kind does not have kind Type:") - 2 (ppr tcv' <+> dcolon <+> ppr tcv_type' <+> dcolon <+> ppr (typeKind tcv_type')) + 2 (ppr tcv <+> dcolon <+> ppr tcv_type' <+> dcolon <+> ppr tcv_kind') else -- Check that in (forall (cv::ty). blah), -- then ty looks like (t1 ~# t2) lintL (isCoVarType tcv_type') $ text "CoVar with non-coercion type:" <+> pprTyVar tcv - ; updateSubst subst' (thing_inside tcv') } + ; addInScopeTyCoVar tcv tcv_type' thing_inside } -lintIdBndrs :: forall a. TopLevelFlag -> [Id] -> ([LintedId] -> LintM a) -> LintM a +lintIdBndrs :: forall a. TopLevelFlag -> [InId] -> ([OutId] -> LintM a) -> LintM a lintIdBndrs top_lvl ids thing_inside = go ids thing_inside where @@ -1900,10 +1865,9 @@ lintIdBndr top_lvl bind_site id thing_inside ; lintL (not (bind_site == LambdaBind && isEvaldUnfolding (idUnfolding id))) (text "Lambda binder with value or OtherCon unfolding.") - ; linted_ty <- addLoc (IdTy id) (lintValueType id_ty) + ; out_ty <- addLoc (IdTy id) (lintValueType id_ty) - ; addInScopeId id linted_ty $ - thing_inside (setIdType id linted_ty) } + ; addInScopeId id out_ty thing_inside } where id_ty = idType id @@ -1920,13 +1884,47 @@ lintIdBndr top_lvl bind_site id thing_inside %************************************************************************ -} -lintValueType :: Type -> LintM LintedType +{- Note [Linting types and coercions] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Notice that + lintType :: InType -> LintM () + lintCoercion :: InCoercion -> LintM () +Neither returns anything. + +If you need the kind of the type, then do `typeKind` and then apply +the ambient substitution using `substTyM`. Note that the substitution +empty unless there is shadowing or type-lets; and if the substitution is +empty, the `substTyM` is a no-op. + +It is better to take the kind and then substitute, rather than substitute +and then take the kind, becaues the kind is usually smaller. + +Note: you might wonder if we should apply the same logic to expressions. +Why do we have + lintExpr :: InExpr -> LintM OutType +Partly inertia; but also taking the type of an expresison involve looking +down a deep chain of let's, whereas that is not true of taking the kind +of a type. It'd be worth an experiment though. + +Historical note: in the olden days we had + lintType :: InType -> LintM OutType +but that burned a huge amount of allocation building an OutType that was +often discarded, or used only to get its kind. + +I also experimented with + lintType :: InType -> LintM OutKind +but that too was slower. It is also much simpler to return ()! If we +return the kind we have to duplicate the logic in `typeKind`; and it is +much worse for coercions. +-} + +lintValueType :: Type -> LintM OutType -- Types only, not kinds -- Check the type, and apply the substitution to it -- See Note [Linting type lets] lintValueType ty = addLoc (InType ty) $ - do { ty' <- lintType ty + do { ty' <- lintTypeAndSubst ty ; let sk = typeKind ty' ; lintL (isTYPEorCONSTRAINT sk) $ hang (text "Ill-kinded type:" <+> ppr ty) @@ -1938,15 +1936,15 @@ checkTyCon tc = checkL (not (isTcTyCon tc)) (text "Found TcTyCon:" <+> ppr tc) ------------------- -checkTyCoVarInScope :: Subst -> TyCoVar -> LintM () -checkTyCoVarInScope subst tcv - = checkL (tcv `isInScope` subst) $ - hang (text "The type or coercion variable" <+> pprBndr LetBind tcv) - 2 (text "is out of scope") - -------------------- -lintType :: Type -> LintM LintedType +lintTypeAndSubst :: InType -> LintM OutType +lintTypeAndSubst ty = do { lintType ty; substTyM ty } + -- In GHCi we may lint an expression with a free + -- type variable. Then it won't be in the + -- substitution, but it should be in scope +lintType :: InType -> LintM () +-- See Note [Linting types and coercions] +-- -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] lintType (TyVarTy tv) @@ -1954,25 +1952,20 @@ lintType (TyVarTy tv) = failWithL (mkBadTyVarMsg tv) | otherwise - = do { subst <- getSubst - ; case lookupTyVar subst tv of - Just linted_ty -> return linted_ty - - -- In GHCi we may lint an expression with a free - -- type variable. Then it won't be in the - -- substitution, but it should be in scope - Nothing -> do { checkTyCoVarInScope subst tv - ; return (TyVarTy tv) } - } + = do { _ <- lintVarOcc tv + ; return () } lintType ty@(AppTy t1 t2) | TyConApp {} <- t1 = failWithL $ text "TyConApp to the left of AppTy:" <+> ppr ty | otherwise - = do { t1' <- lintType t1 - ; t2' <- lintType t2 - ; lint_ty_app ty (typeKind t1') [t2'] - ; return (AppTy t1' t2') } + = do { let (fun_ty, arg_tys) = collect t1 [t2] + ; lintType fun_ty + ; fun_kind <- substTyM (typeKind fun_ty) + ; lint_ty_app ty fun_kind arg_tys } + where + collect (AppTy f a) as = collect f (a:as) + collect fun as = (fun, as) lintType ty@(TyConApp tc tys) | isTypeSynonymTyCon tc || isTypeFamilyTyCon tc @@ -1987,78 +1980,68 @@ lintType ty@(TyConApp tc tys) | otherwise -- Data types, data families, primitive types = do { checkTyCon tc - ; tys' <- mapM lintType tys - ; lint_ty_app ty (tyConKind tc) tys' - ; return (TyConApp tc tys') } + ; lint_ty_app ty (tyConKind tc) tys } -- arrows can related *unlifted* kinds, so this has to be separate from -- a dependent forall. lintType ty@(FunTy af tw t1 t2) - = do { t1' <- lintType t1 - ; t2' <- lintType t2 - ; tw' <- lintType tw - ; lintArrow (text "type or kind" <+> quotes (ppr ty)) t1' t2' tw' - ; let real_af = chooseFunTyFlag t1 t2 - ; unless (real_af == af) $ addErrL $ - hang (text "Bad FunTyFlag in FunTy") - 2 (vcat [ ppr ty - , text "FunTyFlag =" <+> ppr af - , text "Computed FunTyFlag =" <+> ppr real_af ]) - ; return (FunTy af tw' t1' t2') } - -lintType ty@(ForAllTy (Bndr tcv vis) body_ty) - | not (isTyCoVar tcv) - = failWithL (text "Non-Tyvar or Non-Covar bound in type:" <+> ppr ty) - | otherwise - = lintTyCoBndr tcv $ \tcv' -> - do { body_ty' <- lintType body_ty - ; lintForAllBody tcv' body_ty' + = do { lintType t1 + ; lintType t2 + ; lintType tw + ; lintArrow (text "type or kind" <+> quotes (ppr ty)) af t1 t2 tw } + +lintType ty@(ForAllTy {}) + = go [] ty + where + go :: [OutTyCoVar] -> InType -> LintM () + -- Loop, collecting the forall-binders + go tcvs ty@(ForAllTy (Bndr tcv _) body_ty) + | not (isTyCoVar tcv) + = failWithL (text "Non-TyVar or Non-CoVar bound in type:" <+> ppr ty) - ; when (isCoVar tcv) $ - lintL (tcv `elemVarSet` tyCoVarsOfType body_ty) $ - text "Covar does not occur in the body:" <+> (ppr tcv $$ ppr body_ty) - -- See GHC.Core.TyCo.Rep Note [Unused coercion variable in ForAllTy] + | otherwise + = lintTyCoBndr tcv $ \tcv' -> + do { -- See GHC.Core.TyCo.Rep Note [Unused coercion variable in ForAllTy] + -- Suspicious because it works on InTyCoVar; c.f. ForAllCo + when (isCoVar tcv) $ + lintL (anyFreeVarsOfType (== tcv) body_ty) $ + text "Covar does not occur in the body:" <+> (ppr tcv $$ ppr body_ty) - ; return (ForAllTy (Bndr tcv' vis) body_ty') } + ; go (tcv' : tcvs) body_ty } -lintType ty@(LitTy l) - = do { lintTyLit l; return ty } + go tcvs body_ty + = do { lintType body_ty + ; lintForAllBody tcvs body_ty } lintType (CastTy ty co) - = do { ty' <- lintType ty - ; co' <- lintStarCoercion co - ; let tyk = typeKind ty' - cok = coercionLKind co' - ; ensureEqTys tyk cok (mkCastTyErr ty co tyk cok) - ; return (CastTy ty' co') } + = do { lintType ty + ; ty_kind <- substTyM (typeKind ty) + ; co_lk <- lintStarCoercion co + ; ensureEqTys ty_kind co_lk (mkCastTyErr ty co ty_kind co_lk) } -lintType (CoercionTy co) - = do { co' <- lintCoercion co - ; return (CoercionTy co') } +lintType (LitTy l) = lintTyLit l +lintType (CoercionTy co) = lintCoercion co ----------------- -lintForAllBody :: LintedTyCoVar -> LintedType -> LintM () +lintForAllBody :: [OutTyCoVar] -> InType -> LintM () -- Do the checks for the body of a forall-type -lintForAllBody tcv body_ty - = do { checkValueType body_ty (text "the body of forall:" <+> ppr body_ty) - - -- For type variables, check for skolem escape +lintForAllBody tcvs body_ty + = do { -- For type variables, check for skolem escape -- See Note [Phantom type variables in kinds] in GHC.Core.Type -- The kind of (forall cv. th) is liftedTypeKind, so no -- need to check for skolem-escape in the CoVar case - ; let body_kind = typeKind body_ty - ; when (isTyVar tcv) $ - case occCheckExpand [tcv] body_kind of + body_kind <- substTyM (typeKind body_ty) + ; case occCheckExpand tcvs body_kind of Just {} -> return () Nothing -> failWithL $ hang (text "Variable escape in forall:") - 2 (vcat [ text "tyvar:" <+> ppr tcv + 2 (vcat [ text "tycovars (reversed):" <+> ppr tcvs , text "type:" <+> ppr body_ty , text "kind:" <+> ppr body_kind ]) - } + ; checkValueType body_kind (text "the body of forall:" <+> ppr body_ty) } ----------------- -lintTySynFamApp :: Bool -> InType -> TyCon -> [InType] -> LintM LintedType +lintTySynFamApp :: Bool -> InType -> TyCon -> [InType] -> LintM () -- The TyCon is a type synonym or a type family (not a data family) -- See Note [Linting type synonym applications] -- c.f. GHC.Tc.Validity.check_syn_tc_app @@ -2070,63 +2053,51 @@ lintTySynFamApp report_unsat ty tc tys -- Deal with type synonyms | ExpandsSyn tenv rhs tys' <- expandSynTyCon_maybe tc tys , let expanded_ty = mkAppTys (substTy (mkTvSubstPrs tenv) rhs) tys' - = do { -- Kind-check the argument types, but without reporting - -- un-saturated type families/synonyms - tys' <- setReportUnsat False (mapM lintType tys) - - ; when report_unsat $ - do { _ <- lintType expanded_ty - ; return () } + = do { when report_unsat $ do { _ <- lintType expanded_ty + ; return () } - ; lint_ty_app ty (tyConKind tc) tys' - ; return (TyConApp tc tys') } + ; -- Kind-check the argument types, but without reporting + -- un-saturated type families/synonyms + ; setReportUnsat False $ + lint_ty_app ty (tyConKind tc) tys } -- Otherwise this must be a type family | otherwise - = do { tys' <- mapM lintType tys - ; lint_ty_app ty (tyConKind tc) tys' - ; return (TyConApp tc tys') } + = lint_ty_app ty (tyConKind tc) tys ----------------- --- Confirms that a type is really TYPE r or Constraint -checkValueType :: LintedType -> SDoc -> LintM () -checkValueType ty doc +-- Confirms that a kind is really TYPE r or Constraint +checkValueType :: OutKind -> SDoc -> LintM () +checkValueType kind doc = lintL (isTYPEorCONSTRAINT kind) (text "Non-Type-like kind when Type-like expected:" <+> ppr kind $$ text "when checking" <+> doc) - where - kind = typeKind ty ----------------- -lintArrow :: SDoc -> LintedType -> LintedType -> LintedType -> LintM () +lintArrow :: SDoc -> FunTyFlag -> InType -> InType -> InType -> LintM () -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] -lintArrow what t1 t2 tw -- Eg lintArrow "type or kind `blah'" k1 k2 kw - -- or lintArrow "coercion `blah'" k1 k2 kw - = do { unless (isTYPEorCONSTRAINT k1) (report (text "argument") k1) - ; unless (isTYPEorCONSTRAINT k2) (report (text "result") k2) - ; unless (isMultiplicityTy kw) (report (text "multiplicity") kw) } +lintArrow what af t1 t2 tw -- Eg lintArrow "type or kind `blah'" k1 k2 kw + -- or lintArrow "coercion `blah'" k1 k2 kw + = do { k1 <- substTyM (typeKind t1) + ; k2 <- substTyM (typeKind t2) + ; kw <- substTyM (typeKind tw) + ; unless (isTYPEorCONSTRAINT k1) (report (text "argument") t1 k1) + ; unless (isTYPEorCONSTRAINT k2) (report (text "result") t2 k2) + ; unless (isMultiplicityTy kw) (report (text "multiplicity") tw kw) + + ; let real_af = chooseFunTyFlag t1 t2 + ; unless (real_af == af) $ addErrL $ + hang (text "Bad FunTyFlag") + 2 (vcat [ text "FunTyFlag =" <+> ppr af + , text "Computed FunTyFlag =" <+> ppr real_af + , text "in" <+> what ]) } where - k1 = typeKind t1 - k2 = typeKind t2 - kw = typeKind tw - report ar k = addErrL (vcat [ hang (text "Ill-kinded" <+> ar) - 2 (text "in" <+> what) - , what <+> text "kind:" <+> ppr k ]) + report ar t k = addErrL (hang (text "Ill-kinded" <+> ar) + 2 (vcat [ ppr t <+> dcolon <+> ppr k + , text "in" <+> what ])) ----------------- -lint_ty_app :: Type -> LintedKind -> [LintedType] -> LintM () -lint_ty_app msg_ty k tys - -- See Note [Avoiding compiler perf traps when constructing error messages.] - = lint_app (\msg_ty -> text "type" <+> quotes (ppr msg_ty)) msg_ty k tys - ----------------- -lint_co_app :: Coercion -> LintedKind -> [LintedType] -> LintM () -lint_co_app msg_ty k tys - -- See Note [Avoiding compiler perf traps when constructing error messages.] - = lint_app (\msg_ty -> text "coercion" <+> quotes (ppr msg_ty)) msg_ty k tys - ----------------- lintTyLit :: TyLit -> LintM () lintTyLit (NumTyLit n) | n >= 0 = return () @@ -2135,69 +2106,112 @@ lintTyLit (NumTyLit n) lintTyLit (StrTyLit _) = return () lintTyLit (CharTyLit _) = return () -lint_app :: Outputable msg_thing => (msg_thing -> SDoc) -> msg_thing -> LintedKind -> [LintedType] -> LintM () --- (lint_app d fun_kind arg_tys) --- We have an application (f arg_ty1 .. arg_tyn), --- where f :: fun_kind +----------------- +lint_ty_app :: InType -> OutKind -> [InType] -> LintM () +lint_ty_app ty = lint_tyco_app (text "type" <+> quotes (ppr ty)) + +lint_co_app :: HasDebugCallStack => Coercion -> OutKind -> [InType] -> LintM () +lint_co_app co = lint_tyco_app (text "coercion" <+> quotes (ppr co)) --- If you edit this function, you may need to update the GHC formalism --- See Note [GHC Formalism] +lint_tyco_app :: SDoc -> OutKind -> [InType] -> LintM () +lint_tyco_app msg fun_kind arg_tys + -- See Note [Avoiding compiler perf traps when constructing error messages.] + = do { _ <- lintApp msg (\ty -> do { lintType ty; substTyM ty }) + (\ty _ _ -> do { lintType ty; ki <- substTyM (typeKind ty); return (ki,()) }) + fun_kind arg_tys () + ; return () } + +---------------- +lintApp :: forall in_a acc. Outputable in_a => + SDoc + -> (in_a -> LintM OutType) -- Lint the thing and return its value + -> (in_a -> Mult -> acc -> LintM (OutKind, acc)) -- Lint the thing and return its type + -> OutType + -> [in_a] -- The arguments, always "In" things + -> acc -- Used (only) for UsageEnv in /term/ applications + -> LintM (OutType,acc) +-- lintApp is a performance-critical function, which deals with multiple +-- applications such as (/\a./\b./\c. expr) @ta @tb @tc +-- When returning the type of this expression we want to avoid substituting a:=ta, +-- and /then/ substituting b:=tb, etc. That's quadratic, and can be a huge +-- perf hole. So we gather all the arguments [in_a], and then gather the +-- substitution incrementally in the `go` loop. -- --- Being strict in the kind here avoids quite a few pointless thunks --- reducing allocations by ~5% -lint_app mk_msg msg_type !kfn arg_tys +-- lintApp is used: +-- * for term applications (lintCoreArgs) +-- * for type applications (lint_ty_app) +-- * for coercion application (lint_co_app) +-- To deal with these cases `lintApp` has two higher order arguments; +-- but we specialise it for each call site (by inlining) +{-# INLINE lintApp #-} -- INLINE: very few call sites; + -- not recursive; specialised at its call sites + +lintApp msg lint_forall_arg lint_arrow_arg !orig_fun_ty all_args acc = do { !in_scope <- getInScope -- We need the in_scope set to satisfy the invariant in -- Note [The substitution invariant] in GHC.Core.TyCo.Subst -- Forcing the in scope set eagerly here reduces allocations by up to 4%. - ; go_app in_scope kfn arg_tys - } - where - -- We use explicit recursion instead of a fold here to avoid go_app becoming - -- an allocated function closure. This reduced allocations by up to 7% for some - -- modules. - go_app :: InScopeSet -> LintedKind -> [Type] -> LintM () - go_app !in_scope !kfn ta - | Just kfn' <- coreView kfn - = go_app in_scope kfn' ta - - go_app _in_scope _kind [] = return () - - go_app in_scope fun_kind@(FunTy _ _ kfa kfb) (ta:tas) - = do { let ka = typeKind ta - ; unless (ka `eqType` kfa) $ - addErrL (lint_app_fail_msg kfn arg_tys mk_msg msg_type (text "Fun:" <+> (ppr fun_kind $$ ppr ta <+> dcolon <+> ppr ka))) - ; go_app in_scope kfb tas } - - go_app in_scope (ForAllTy (Bndr kv _vis) kfn) (ta:tas) - = do { let kv_kind = varType kv - ka = typeKind ta - ; unless (ka `eqType` kv_kind) $ - addErrL (lint_app_fail_msg kfn arg_tys mk_msg msg_type (text "Forall:" <+> (ppr kv $$ ppr kv_kind $$ - ppr ta <+> dcolon <+> ppr ka))) - ; let kind' = substTy (extendTCvSubst (mkEmptySubst in_scope) kv ta) kfn - ; go_app in_scope kind' tas } - - go_app _ kfn ta - = failWithL (lint_app_fail_msg kfn arg_tys mk_msg msg_type (text "Not a fun:" <+> (ppr kfn $$ ppr ta))) + ; let init_subst = mkEmptySubst in_scope + + go :: Subst -> OutType -> acc -> [in_a] -> LintM (OutType, acc) + -- The Subst applies (only) to the fun_ty + -- c.f. GHC.Core.Type.piResultTys, which has a similar loop + + go subst fun_ty acc [] + = return (substTy subst fun_ty, acc) + + go subst (ForAllTy (Bndr tv _vis) body_ty) acc (arg:args) + = do { arg' <- lint_forall_arg arg + ; let tv_kind = substTy subst (varType tv) + karg' = typeKind arg' + subst' = extendTCvSubst subst tv arg' + ; ensureEqTys karg' tv_kind $ + lint_app_fail_msg msg orig_fun_ty all_args + (hang (text "Forall:" <+> (ppr tv $$ ppr tv_kind)) + 2 (ppr arg' <+> dcolon <+> ppr karg')) + ; go subst' body_ty acc args } + + go subst fun_ty@(FunTy _ mult exp_arg_ty res_ty) acc (arg:args) + = do { (arg_ty, acc') <- lint_arrow_arg arg (substTy subst mult) acc + ; ensureEqTys (substTy subst exp_arg_ty) arg_ty $ + lint_app_fail_msg msg orig_fun_ty all_args + (hang (text "Fun:" <+> ppr fun_ty) + 2 (vcat [ text "exp_arg_ty:" <+> ppr exp_arg_ty + , text "arg:" <+> ppr arg <+> dcolon <+> ppr arg_ty ])) + ; go subst res_ty acc' args } + + go subst fun_ty acc args + | Just fun_ty' <- coreView fun_ty + = go subst fun_ty' acc args + + | not (isEmptyTCvSubst subst) -- See Note [Care with kind instantiation] + = go init_subst (substTy subst fun_ty) acc args + + | otherwise + = failWithL (lint_app_fail_msg msg orig_fun_ty all_args + (text "Not a fun:" <+> (ppr fun_ty $$ ppr args))) + + ; go init_subst orig_fun_ty acc all_args } -- This is a top level definition to ensure we pass all variables of the error message -- explicitly and don't capture them as free variables. Otherwise this binder might -- become a thunk that get's allocated in the hot code path. -- See Note [Avoiding compiler perf traps when constructing error messages.] -lint_app_fail_msg :: (Outputable a1, Outputable a2) => a1 -> a2 -> (t -> SDoc) -> t -> SDoc -> SDoc -lint_app_fail_msg kfn arg_tys mk_msg msg_type extra = vcat [ hang (text "Kind application error in") 2 (mk_msg msg_type) - , nest 2 (text "Function kind =" <+> ppr kfn) - , nest 2 (text "Arg types =" <+> ppr arg_tys) - , extra ] +lint_app_fail_msg :: (Outputable a2) => SDoc -> OutType -> a2 -> SDoc -> SDoc +lint_app_fail_msg msg kfn arg_tys extra + = vcat [ hang (text "Application error in") 2 msg + , nest 2 (text "Function type =" <+> ppr kfn) + , nest 2 (text "Args =" <+> ppr arg_tys) + , extra ] + {- ********************************************************************* * * Linting rules * * ********************************************************************* -} -lintCoreRule :: OutVar -> LintedType -> CoreRule -> LintM () +lintCoreRule :: OutVar -> OutType -> CoreRule -> LintM () lintCoreRule _ _ (BuiltinRule {}) = return () -- Don't bother @@ -2310,18 +2324,28 @@ which is what used to happen. But that proved tricky and error prone -} --- lints a coercion, confirming that its lh kind and its rh kind are both * --- also ensures that the role is Nominal -lintStarCoercion :: InCoercion -> LintM LintedCoercion +-- lintStarCoercion lints a coercion, confirming that its lh kind and +-- its rh kind are both *; also ensures that the role is Nominal +-- Returns the lh kind +lintStarCoercion :: InCoercion -> LintM OutType lintStarCoercion g - = do { g' <- lintCoercion g - ; let Pair t1 t2 = coercionKind g' - ; checkValueType t1 (text "the kind of the left type in" <+> ppr g) - ; checkValueType t2 (text "the kind of the right type in" <+> ppr g) + = do { lintCoercion g + ; Pair t1 t2 <- substCoKindM g + ; checkValueType (typeKind t1) (text "the kind of the left type in" <+> ppr g) + ; checkValueType (typeKind t2) (text "the kind of the right type in" <+> ppr g) ; lintRole g Nominal (coercionRole g) - ; return g' } + ; return t1 } + +substCoKindM :: InCoercion -> LintM (Pair OutType) +substCoKindM co + = do { let !(Pair lk rk) = coercionKind co + ; lk' <- substTyM lk + ; rk' <- substTyM rk + ; return (Pair lk' rk') } -lintCoercion :: InCoercion -> LintM LintedCoercion +lintCoercion :: HasDebugCallStack => InCoercion -> LintM () +-- See Note [Linting types and coercions] +-- -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] @@ -2330,33 +2354,21 @@ lintCoercion (CoVarCo cv) = failWithL (hang (text "Bad CoVarCo:" <+> ppr cv) 2 (text "With offending type:" <+> ppr (varType cv))) - | otherwise - = do { subst <- getSubst - ; case lookupCoVar subst cv of - Just linted_co -> return linted_co ; - Nothing -> do { checkTyCoVarInScope subst cv - ; return (CoVarCo cv) } - } - - -lintCoercion (Refl ty) - = do { ty' <- lintType ty - ; return (Refl ty') } - -lintCoercion (GRefl r ty MRefl) - = do { ty' <- lintType ty - ; return (GRefl r ty' MRefl) } - -lintCoercion (GRefl r ty (MCo co)) - = do { ty' <- lintType ty - ; co' <- lintCoercion co - ; let tk = typeKind ty' - tl = coercionLKind co' + | otherwise -- C.f. lintType (TyVarTy tv), which has better docs + = do { _ <- lintVarOcc cv; return () } + +lintCoercion (Refl ty) = lintType ty +lintCoercion (GRefl _r ty MRefl) = lintType ty + +lintCoercion (GRefl _r ty (MCo co)) + = do { lintType ty + ; lintCoercion co + ; tk <- substTyM (typeKind ty) + ; tl <- substTyM (coercionLKind co) ; ensureEqTys tk tl $ hang (text "GRefl coercion kind mis-match:" <+> ppr co) - 2 (vcat [ppr ty', ppr tk, ppr tl]) - ; lintRole co' Nominal (coercionRole co') - ; return (GRefl r ty' (MCo co')) } + 2 (vcat [ppr ty, ppr tk, ppr tl]) + ; lintRole co Nominal (coercionRole co) } lintCoercion co@(TyConAppCo r tc cos) | Just {} <- tyConAppFunCo_maybe r tc cos @@ -2369,12 +2381,12 @@ lintCoercion co@(TyConAppCo r tc cos) | otherwise = do { checkTyCon tc - ; cos' <- mapM lintCoercion cos - ; let (co_kinds, co_roles) = unzip (map coercionKindRole cos') - ; lint_co_app co (tyConKind tc) (map pFst co_kinds) - ; lint_co_app co (tyConKind tc) (map pSnd co_kinds) - ; zipWithM_ (lintRole co) (tyConRoleListX r tc) co_roles - ; return (TyConAppCo r tc cos') } + ; mapM_ lintCoercion cos + ; let tc_kind = tyConKind tc + ; lint_co_app co tc_kind (map coercionLKind cos) + ; lint_co_app co tc_kind (map coercionRKind cos) + ; zipWithM_ (lintRole co) (tyConRoleListX r tc) (map coercionRole cos) } + lintCoercion co@(AppCo co1 co2) | TyConAppCo {} <- co1 @@ -2382,83 +2394,89 @@ lintCoercion co@(AppCo co1 co2) | Just (TyConApp {}, _) <- isReflCo_maybe co1 = failWithL (text "Refl (TyConApp ...) to the left of AppCo:" <+> ppr co) | otherwise - = do { co1' <- lintCoercion co1 - ; co2' <- lintCoercion co2 - ; let (Pair lk1 rk1, r1) = coercionKindRole co1' - (Pair lk2 rk2, r2) = coercionKindRole co2' - ; lint_co_app co (typeKind lk1) [lk2] - ; lint_co_app co (typeKind rk1) [rk2] - - ; if r1 == Phantom + = do { lintCoercion co1 + ; lintCoercion co2 + ; let !(Pair lt1 rt1) = coercionKind co1 + ; lk1 <- substTyM (typeKind lt1) + ; rk1 <- substTyM (typeKind rt1) + ; lint_co_app co lk1 [coercionLKind co2] + ; lint_co_app co rk1 [coercionRKind co2] + + ; let r2 = coercionRole co2 + ; if coercionRole co1 == Phantom then lintL (r2 == Phantom || r2 == Nominal) (text "Second argument in AppCo cannot be R:" $$ ppr co) - else lintRole co Nominal r2 - - ; return (AppCo co1' co2') } + else lintRole co Nominal r2 } ---------- -lintCoercion co@(ForAllCo { fco_tcv = tcv, fco_visL = visL, fco_visR = visR - , fco_kind = kind_co, fco_body = body_co }) --- See Note [ForAllCo] in GHC.Core.TyCo.Rep, --- including the typing rule for ForAllCo - - | not (isTyCoVar tcv) - = failWithL (text "Non tyco binder in ForAllCo:" <+> ppr co) +lintCoercion co@(ForAllCo {}) +-- See Note [ForAllCo] in GHC.Core.TyCo.Rep for the typing rule for ForAllCo + = do { _ <- go [] co; return () } + where + go :: [OutTyCoVar] -- Binders in reverse order + -> InCoercion -> LintM Role + go tcvs co@(ForAllCo { fco_tcv = tcv, fco_visL = visL, fco_visR = visR + , fco_kind = kind_co, fco_body = body_co }) + | not (isTyCoVar tcv) + = failWithL (text "Non tyco binder in ForAllCo:" <+> ppr co) - | otherwise - = do { kind_co' <- lintStarCoercion kind_co - ; lintTyCoBndr tcv $ \tcv' -> - do { body_co' <- lintCoercion body_co - ; ensureEqTys (varType tcv') (coercionLKind kind_co') $ - text "Kind mis-match in ForallCo" <+> ppr co - - -- Assuming kind_co :: k1 ~ k2 - -- Need to check that - -- (forall (tcv:k1). lty) and - -- (forall (tcv:k2). rty[(tcv:k2) |> sym kind_co/tcv]) - -- are both well formed. Easiest way is to call lintForAllBody - -- for each; there is actually no need to do the funky substitution - ; let (Pair lty rty, body_role) = coercionKindRole body_co' - ; lintForAllBody tcv' lty - ; lintForAllBody tcv' rty - - ; when (isCoVar tcv) $ - do { lintL (visL == coreTyLamForAllTyFlag && visR == coreTyLamForAllTyFlag) $ - text "Invalid visibility flags in CoVar ForAllCo" <+> ppr co - -- See (FC7) in Note [ForAllCo] in GHC.Core.TyCo.Rep - ; lintL (almostDevoidCoVarOfCo tcv body_co) $ - text "Covar can only appear in Refl and GRefl: " <+> ppr co - -- See (FC6) in Note [ForAllCo] in GHC.Core.TyCo.Rep - } - - ; when (body_role == Nominal) $ - lintL (visL `eqForAllVis` visR) $ - text "Nominal ForAllCo has mismatched visibilities: " <+> ppr co - - ; return (co { fco_tcv = tcv', fco_kind = kind_co', fco_body = body_co' }) } } - -lintCoercion co@(FunCo { fco_role = r, fco_afl = afl, fco_afr = afr - , fco_mult = cow, fco_arg = co1, fco_res = co2 }) - = do { co1' <- lintCoercion co1 - ; co2' <- lintCoercion co2 - ; cow' <- lintCoercion cow + | otherwise + = do { lk <- lintStarCoercion kind_co + ; lintTyCoBndr tcv $ \tcv' -> + do { ensureEqTys (varType tcv') lk $ + text "Kind mis-match in ForallCo" <+> ppr co + + -- I'm not very sure about this part, because it traverses body_co + -- but at least it's on a cold path (a ForallCo for a CoVar) + -- Also it works on InTyCoVar and InCoercion, which is suspect + ; when (isCoVar tcv) $ + do { lintL (visL == coreTyLamForAllTyFlag && visR == coreTyLamForAllTyFlag) $ + text "Invalid visibility flags in CoVar ForAllCo" <+> ppr co + -- See (FC7) in Note [ForAllCo] in GHC.Core.TyCo.Rep + ; lintL (almostDevoidCoVarOfCo tcv body_co) $ + text "Covar can only appear in Refl and GRefl: " <+> ppr co } + -- See (FC6) in Note [ForAllCo] in GHC.Core.TyCo.Rep + + ; role <- go (tcv':tcvs) body_co + + ; when (role == Nominal) $ + lintL (visL `eqForAllVis` visR) $ + text "Nominal ForAllCo has mismatched visibilities: " <+> ppr co + + ; return role } } + + go tcvs body_co + = do { lintCoercion body_co + + -- Need to check that + -- (forall (tcv:k1). lty) and + -- (forall (tcv:k2). rty[(tcv:k2) |> sym kind_co/tcv]) + -- are both well formed, including the skolem escape check. + -- Easiest way is to call lintForAllBody for each + ; let Pair lty rty = coercionKind body_co + ; lintForAllBody tcvs lty + ; lintForAllBody tcvs rty + + ; return (coercionRole body_co) } + + +lintCoercion (FunCo { fco_role = r, fco_afl = afl, fco_afr = afr + , fco_mult = cow, fco_arg = co1, fco_res = co2 }) + = do { lintCoercion co1 + ; lintCoercion co2 + ; lintCoercion cow ; let Pair lt1 rt1 = coercionKind co1 Pair lt2 rt2 = coercionKind co2 Pair ltw rtw = coercionKind cow - ; lintL (afl == chooseFunTyFlag lt1 lt2) (bad_co_msg "afl") - ; lintL (afr == chooseFunTyFlag rt1 rt2) (bad_co_msg "afr") - ; lintArrow (bad_co_msg "arrowl") lt1 lt2 ltw - ; lintArrow (bad_co_msg "arrowr") rt1 rt2 rtw + ; lintArrow (bad_co_msg "arrowl") afl lt1 lt2 ltw + ; lintArrow (bad_co_msg "arrowr") afr rt1 rt2 rtw ; lintRole co1 r (coercionRole co1) ; lintRole co2 r (coercionRole co2) - ; ensureEqTys (typeKind ltw) multiplicityTy (bad_co_msg "mult-l") - ; ensureEqTys (typeKind rtw) multiplicityTy (bad_co_msg "mult-r") ; let expected_mult_role = case r of Phantom -> Phantom _ -> Nominal - ; lintRole cow expected_mult_role (coercionRole cow) - ; return (co { fco_mult = cow', fco_arg = co1', fco_res = co2' }) } + ; lintRole cow expected_mult_role (coercionRole cow) } where bad_co_msg s = hang (text "Bad coercion" <+> parens (text s)) 2 (vcat [ text "afl:" <+> ppr afl @@ -2475,19 +2493,16 @@ lintCoercion co@(UnivCo { uco_role = r, uco_prov = prov _ -> return () -- Check the to and from types - ; ty1' <- lintType ty1 - ; ty2' <- lintType ty2 + ; lintType ty1 + ; lintType ty2 + ; tk1 <- substTyM (typeKind ty1) + ; tk2 <- substTyM (typeKind ty2) - ; let k1 = typeKind ty1' - k2 = typeKind ty2' - ; when (r /= Phantom && isTYPEorCONSTRAINT k1 - && isTYPEorCONSTRAINT k2) + ; when (r /= Phantom && isTYPEorCONSTRAINT tk1 && isTYPEorCONSTRAINT tk2) (checkTypes ty1 ty2) -- Check the coercions on which this UnivCo depends - ; deps' <- mapM lintCoercion deps - - ; return (co { uco_lty = ty1', uco_rty = ty2', uco_deps = deps' }) } + ; mapM_ lintCoercion deps } where report s = hang (text $ "Unsafe coercion: " ++ s) 2 (vcat [ text "From:" <+> ppr ty1 @@ -2530,24 +2545,21 @@ lintCoercion co@(UnivCo { uco_role = r, uco_prov = prov _ -> return () } -lintCoercion (SymCo co) - = do { co' <- lintCoercion co - ; return (SymCo co') } +lintCoercion (SymCo co) = lintCoercion co lintCoercion co@(TransCo co1 co2) - = do { co1' <- lintCoercion co1 - ; co2' <- lintCoercion co2 - ; let ty1b = coercionRKind co1' - ty2a = coercionLKind co2' - ; ensureEqTys ty1b ty2a + = do { lintCoercion co1 + ; lintCoercion co2 + ; rk1 <- substTyM (coercionRKind co1) + ; lk2 <- substTyM (coercionLKind co2) + ; ensureEqTys rk1 lk2 (hang (text "Trans coercion mis-match:" <+> ppr co) - 2 (vcat [ppr (coercionKind co1'), ppr (coercionKind co2')])) - ; lintRole co (coercionRole co1) (coercionRole co2) - ; return (TransCo co1' co2') } + 2 (vcat [ppr (coercionKind co1), ppr (coercionKind co2)])) + ; lintRole co (coercionRole co1) (coercionRole co2) } lintCoercion the_co@(SelCo cs co) - = do { co' <- lintCoercion co - ; let (Pair s t, co_role) = coercionKindRole co' + = do { lintCoercion co + ; Pair s t <- substCoKindM co ; if -- forall (both TyVar and CoVar) | Just _ <- splitForAllTyCoVar_maybe s @@ -2555,78 +2567,96 @@ lintCoercion the_co@(SelCo cs co) , SelForAll <- cs , (isForAllTy_ty s && isForAllTy_ty t) || (isForAllTy_co s && isForAllTy_co t) - -> return (SelCo cs co') + -> return () -- function | isFunTy s , isFunTy t , SelFun {} <- cs - -> return (SelCo cs co') + -> return () -- TyCon | Just (tc_s, tys_s) <- splitTyConApp_maybe s , Just (tc_t, tys_t) <- splitTyConApp_maybe t , tc_s == tc_t , SelTyCon n r0 <- cs + , let co_role = coercionRole co , isInjectiveTyCon tc_s co_role -- see Note [SelCo and newtypes] in GHC.Core.TyCo.Rep , tys_s `equalLength` tys_t , tys_s `lengthExceeds` n -> do { lintRole the_co (tyConRole co_role tc_s n) r0 - ; return (SelCo cs co') } + ; return () } | otherwise -> failWithL (hang (text "Bad SelCo:") 2 (ppr the_co $$ ppr s $$ ppr t)) } -lintCoercion the_co@(LRCo lr co) - = do { co' <- lintCoercion co - ; let Pair s t = coercionKind co' - r = coercionRole co' - ; lintRole co Nominal r +lintCoercion the_co@(LRCo _lr co) + = do { lintCoercion co + ; Pair s t <- substCoKindM co + ; lintRole co Nominal (coercionRole co) ; case (splitAppTy_maybe s, splitAppTy_maybe t) of - (Just _, Just _) -> return (LRCo lr co') + (Just {}, Just {}) -> return () _ -> failWithL (hang (text "Bad LRCo:") 2 (ppr the_co $$ ppr s $$ ppr t)) } -lintCoercion (InstCo co arg) - = do { co' <- lintCoercion co - ; arg' <- lintCoercion arg - ; let Pair t1 t2 = coercionKind co' - Pair s1 s2 = coercionKind arg' - - ; lintRole arg Nominal (coercionRole arg') - - ; case (splitForAllTyVar_maybe t1, splitForAllTyVar_maybe t2) of - -- forall over tvar - { (Just (tv1,_), Just (tv2,_)) - | typeKind s1 `eqType` tyVarKind tv1 - , typeKind s2 `eqType` tyVarKind tv2 - -> return (InstCo co' arg') - | otherwise - -> failWithL (text "Kind mis-match in inst coercion1" <+> ppr co) - - ; _ -> case (splitForAllCoVar_maybe t1, splitForAllCoVar_maybe t2) of - -- forall over covar - { (Just (cv1, _), Just (cv2, _)) - | typeKind s1 `eqType` varType cv1 - , typeKind s2 `eqType` varType cv2 - , CoercionTy _ <- s1 - , CoercionTy _ <- s2 - -> return (InstCo co' arg') - | otherwise - -> failWithL (text "Kind mis-match in inst coercion2" <+> ppr co) - ; _ -> failWithL (text "Bad argument of inst") }}} +lintCoercion orig_co@(InstCo co arg) + = go co [arg] + where + go (InstCo co arg) args = do { lintCoercion arg; go co (arg:args) } + go co args = do { lintCoercion co + ; let Pair lty rty = coercionKind co + ; lty' <- substTyM lty + ; rty' <- substTyM rty + ; in_scope <- getInScope + ; let subst = mkEmptySubst in_scope + ; go_args (subst, lty') (subst,rty') args } + + ------------- + go_args :: (Subst, OutType) -> (Subst,OutType) -> [InCoercion] + -> LintM () + go_args _ _ [] + = return () + go_args lty rty (arg:args) + = do { (lty1, rty1) <- go_arg lty rty arg + ; go_args lty1 rty1 args } + + ------------- + go_arg :: (Subst, OutType) -> (Subst,OutType) -> InCoercion + -> LintM ((Subst,OutType), (Subst,OutType)) + go_arg (lsubst,lty) (rsubst,rty) arg + = do { lintRole arg Nominal (coercionRole arg) + ; Pair arg_lty arg_rty <- substCoKindM arg + + ; case (splitForAllTyCoVar_maybe lty, splitForAllTyCoVar_maybe rty) of + -- forall over tvar + (Just (ltv,lty1), Just (rtv,rty1)) + | typeKind arg_lty `eqType` substTy lsubst (tyVarKind ltv) + , typeKind arg_rty `eqType` substTy rsubst (tyVarKind rtv) + -> return ( (extendTCvSubst lsubst ltv arg_lty, lty1) + , (extendTCvSubst rsubst rtv arg_rty, rty1) ) + | otherwise + -> failWithL (hang (text "Kind mis-match in inst coercion") + 2 (vcat [ text "arg" <+> ppr arg + , text "lty" <+> ppr lty <+> dcolon <+> ppr (typeKind lty) + , text "rty" <+> ppr rty <+> dcolon <+> ppr (typeKind rty) + , text "arg_lty" <+> ppr arg_lty <+> dcolon <+> ppr (typeKind arg_lty) + , text "arg_rty" <+> ppr arg_rty <+> dcolon <+> ppr (typeKind arg_rty) + , text "ltv" <+> ppr ltv <+> dcolon <+> ppr (tyVarKind ltv) + , text "rtv" <+> ppr rtv <+> dcolon <+> ppr (tyVarKind rtv) ])) + + _ -> failWithL (text "Bad argument of inst" <+> ppr orig_co) } lintCoercion this_co@(AxiomCo ax cos) - = do { cos' <- mapM lintCoercion cos - ; let arg_kinds :: [Pair Type] = map coercionKind cos' - ; lint_roles 0 (coAxiomRuleArgRoles ax) cos' - ; lint_ax ax arg_kinds - ; return (AxiomCo ax cos') } + = do { mapM_ lintCoercion cos + ; lint_roles 0 (coAxiomRuleArgRoles ax) cos + ; prs <- mapM substCoKindM cos + ; lint_ax ax prs } + where - lint_ax :: CoAxiomRule -> [Pair Type] -> LintM () + lint_ax :: CoAxiomRule -> [Pair OutType] -> LintM () lint_ax (BuiltInFamRew bif) prs = checkL (isJust (bifrw_proves bif prs)) bad_bif lint_ax (BuiltInFamInj bif) prs @@ -2647,7 +2677,7 @@ lintCoercion this_co@(AxiomCo ax cos) err m xs = failWithL $ hang (text m) 2 $ vcat (text "Rule:" <+> ppr ax : xs) - lint_roles n (e : es) (co : cos) + lint_roles n (e : es) (co:cos) | e == coercionRole co = lint_roles (n+1) es cos | otherwise = err "Argument roles mismatch" @@ -2663,20 +2693,14 @@ lintCoercion this_co@(AxiomCo ax cos) [ text "Expected:" <+> int (n + length es) , text "Provided:" <+> int n ] +lintCoercion (KindCo co) = lintCoercion co -lintCoercion (KindCo co) - = do { co' <- lintCoercion co - ; return (KindCo co') } - -lintCoercion (SubCo co') - = do { co' <- lintCoercion co' - ; lintRole co' Nominal (coercionRole co') - ; return (SubCo co') } +lintCoercion (SubCo co) + = do { lintCoercion co + ; lintRole co Nominal (coercionRole co) } lintCoercion (HoleCo h) - = do { addErrL $ text "Unfilled coercion hole:" <+> ppr h - ; lintCoercion (CoVarCo (coHoleCoVar h)) } - + = failWithL (text "Unfilled coercion hole:" <+> ppr h) {- Note [Conflict checking for axiom applications] @@ -2851,10 +2875,10 @@ lint_branch ax_tc (CoAxBranch { cab_tvs = tvs, cab_cvs = cvs , cab_lhs = lhs_args, cab_rhs = rhs }) = lintBinders LambdaBind (tvs ++ cvs) $ \_ -> do { let lhs = mkTyConApp ax_tc lhs_args - ; lhs' <- lintType lhs - ; rhs' <- lintType rhs - ; let lhs_kind = typeKind lhs' - rhs_kind = typeKind rhs' + ; lintType lhs + ; lintType rhs + ; lhs_kind <- substTyM (typeKind lhs) + ; rhs_kind <- substTyM (typeKind rhs) ; lintL (not (lhs_kind `typesAreApart` rhs_kind)) $ hang (text "Inhomogeneous axiom") 2 (text "lhs:" <+> ppr lhs <+> dcolon <+> ppr lhs_kind $$ @@ -2937,28 +2961,30 @@ data LintEnv = LE { le_flags :: LintFlags -- Linting the result of this pass , le_loc :: [LintLocInfo] -- Locations - , le_subst :: Subst -- Current TyCo substitution - -- See Note [Linting type lets] - -- /Only/ substitutes for type variables; - -- but might clone CoVars - -- We also use le_subst to keep track of - -- in-scope TyVars and CoVars (but not Ids) - -- Range of the Subst is LintedType/LintedCo - - , le_ids :: VarEnv (Id, LintedType) -- In-scope Ids - -- Used to check that occurrences have an enclosing binder. - -- The Id is /pre-substitution/, used to check that - -- the occurrence has an identical type to the binder - -- The LintedType is used to return the type of the occurrence, - -- without having to lint it again. + , le_subst :: Subst + -- Current substitution, for TyCoVars only. + -- Non-CoVar Ids don't appear in here, not even in the InScopeSet + -- Used for (a) cloning to avoid shadowing of TyCoVars, + -- so that eqType works ok + -- (b) substituting for let-bound tyvars, when we have + -- (let @a = Int -> Int in ...) + + , le_in_vars :: VarEnv (InVar, OutType) + -- Maps an InVar (i.e. its unique) to its binding InVar + -- and to its OutType + -- /All/ in-scope variables are here (term variables, + -- type variables, and coercion variables) + -- Used at an occurrence of the InVar , le_joins :: IdSet -- Join points in scope that are valid -- A subset of the InScopeSet in le_subst -- See Note [Join points] - , le_ue_aliases :: NameEnv UsageEnv -- Assigns usage environments to the - -- alias-like binders, as found in - -- non-recursive lets. + , le_ue_aliases :: NameEnv UsageEnv + -- See Note [Linting linearity] + -- Assigns usage environments to the alias-like binders, + -- as found in non-recursive lets. + -- Domain is OutIds , le_platform :: Platform -- ^ Target platform , le_diagOpts :: DiagOpts -- ^ Target platform @@ -3005,6 +3031,12 @@ type WarnsAndErrs = (Bag SDoc, Bag SDoc) -- Using a unboxed tuple here reduced allocations for a lint heavy -- file by ~6%. Using MaybeUB reduced them further by another ~12%. +-- +-- Warning: if you don't inline the matcher for JustUB etc, Lint becomes +-- /tremendously/ inefficient, and compiling GHC.Tc.Errors.Types (which +-- contains gigantic types) is very very slow indeed. Conclusion: make +-- sure unfoldings are expose in GHC.Data.Unboxed, and that you compile +-- Lint.hs with optimistation on. type LResult a = (# MaybeUB a, WarnsAndErrs #) pattern LResult :: MaybeUB a -> WarnsAndErrs -> LResult a @@ -3089,17 +3121,23 @@ Note [Linting linearity] ~~~~~~~~~~~~~~~~~~~~~~~~ Lint ignores linearity unless `-dlinear-core-lint` is set. For why, see below. -But first, "ignore linearity" specifically means two things. When ignoring linearity: -* In `ensureEqTypes`, use `eqTypeIgnoringMultiplicity` -* In `ensureSubMult`, do nothing +* When do we /check linearity/ in Lint? That is, when is `-dlinear-core-lint` + lint set? Answer: we check linearity in the output of the desugarer, shortly + after type checking. + +* When so we /not/ check linearity in Lint? On all passes after desugaring. Why? + Because optimisation passes are not (yet) guaranteed to maintain linearity. + They should do so semantically (GHC is careful not to duplicate computation) + but it is much harder to ensure that the statically-checkable constraints of + Linear Core are maintained. See examples below. -But why make `-dcore-lint` ignore linearity? Because optimisation passes are -not (yet) guaranteed to maintain linearity. They should do so semantically (GHC -is careful not to duplicate computation) but it is much harder to ensure that -the statically-checkable constraints of Linear Core are maintained. The current -Linear Core is described in the wiki at: +The current Linear Core is described in the wiki at: https://gitlab.haskell.org/ghc/ghc/-/wikis/linear-types/implementation. +Concretely, "ignore linearity in Lint" specifically means two things: +* In `ensureEqTypes`, use `eqTypeIgnoringMultiplicity` +* In `ensureSubMult`, do nothing + Here are some examples of how the optimiser can break linearity checking. Other examples are documented in the linear-type implementation wiki page [https://gitlab.haskell.org/ghc/ghc/-/wikis/linear-types/implementation#core-to-core-passes] @@ -3302,12 +3340,12 @@ initL cfg m | otherwise -> pprPanic ("Bug in Lint: a failure occurred " ++ "without reporting an error message") empty where - (tcvs, ids) = partition isTyCoVar $ l_vars cfg - env = LE { le_flags = l_flags cfg - , le_subst = mkEmptySubst (mkInScopeSetList tcvs) - , le_ids = mkVarEnv [(id, (id,idType id)) | id <- ids] - , le_joins = emptyVarSet - , le_loc = [] + vars = l_vars cfg + env = LE { le_flags = l_flags cfg + , le_subst = mkEmptySubst (mkInScopeSetList vars) + , le_in_vars = mkVarEnv [ (v,(v, varType v)) | v <- vars ] + , le_joins = emptyVarSet + , le_loc = [] , le_ue_aliases = emptyNameEnv , le_platform = l_platform cfg , le_diagOpts = l_diagOpts cfg @@ -3352,10 +3390,10 @@ addErrL msg = LintM $ \ env (warns,errs) -> addWarnL :: SDoc -> LintM () addWarnL msg = LintM $ \ env (warns,errs) -> - fromBoxedLResult (Just (), (addMsg False env warns msg, errs)) + fromBoxedLResult (Just (), (addMsg True env warns msg, errs)) addMsg :: Bool -> LintEnv -> Bag SDoc -> SDoc -> Bag SDoc -addMsg is_error env msgs msg +addMsg show_context env msgs msg = assertPpr (notNull loc_msgs) msg $ msgs `snocBag` mk_msg msg where @@ -3364,8 +3402,9 @@ addMsg is_error env msgs msg cxt_doc = vcat [ vcat $ reverse $ map snd loc_msgs , text "Substitution:" <+> ppr (le_subst env) ] - context | is_error = cxt_doc - | otherwise = whenPprDebug cxt_doc + + context | show_context = cxt_doc + | otherwise = whenPprDebug cxt_doc -- Print voluminous info for Lint errors -- but not for warnings @@ -3389,33 +3428,69 @@ inCasePat = LintM $ \ env errs -> fromBoxedLResult (Just (is_case_pat env), errs is_case_pat (LE { le_loc = CasePat {} : _ }) = True is_case_pat _other = False -addInScopeId :: Id -> LintedType -> LintM a -> LintM a -addInScopeId id linted_ty m - = LintM $ \ env@(LE { le_ids = id_set, le_joins = join_set, le_ue_aliases = aliases }) errs -> - unLintM m (env { le_ids = extendVarEnv id_set id (id, linted_ty) - , le_joins = add_joins join_set - , le_ue_aliases = delFromNameEnv aliases (idName id) }) errs - -- When shadowing an alias, we need to make sure the Id is no longer - -- classified as such. E.g. in - -- let x = in case x of x { _DEFAULT -> } - -- Occurrences of 'x' in e2 shouldn't count as occurrences of e1. - where - add_joins join_set - | isJoinId id = extendVarSet join_set id -- Overwrite with new arity - | otherwise = delVarSet join_set id -- Remove any existing binding +addInScopeId :: InId -> OutType -> (OutId -> LintM a) -> LintM a +-- Unlike addInScopeTyCoVar, this function does no cloning; Ids never get cloned +addInScopeId in_id out_ty thing_inside + = LintM $ \ env errs -> + let !(out_id, env') = add env + in unLintM (thing_inside out_id) env' errs -getInScopeIds :: LintM (VarEnv (Id,LintedType)) -getInScopeIds = LintM (\env errs -> fromBoxedLResult (Just (le_ids env), errs)) + where + add env@(LE { le_in_vars = id_vars, le_joins = join_set + , le_ue_aliases = aliases, le_subst = subst }) + = (out_id, env1) + where + env1 = env { le_in_vars = in_vars', le_joins = join_set', le_ue_aliases = aliases' } + + in_vars' = extendVarEnv id_vars in_id (in_id, out_ty) + aliases' = delFromNameEnv aliases (idName in_id) + -- aliases': when shadowing an alias, we need to make sure the + -- Id is no longer classified as such. E.g. + -- let x = in case x of x { _DEFAULT -> } + -- Occurrences of 'x' in e2 shouldn't count as occurrences of e1. + + -- A very tiny optimisation, not sure if it's really worth it + -- Short-cut when the substitution is a no-op + out_id | isEmptyTCvSubst subst = in_id + | otherwise = setIdType in_id out_ty + + join_set' + | isJoinId out_id = extendVarSet join_set in_id -- Overwrite with new arity + | otherwise = delVarSet join_set in_id -- Remove any existing binding + +addInScopeTyCoVar :: InTyCoVar -> OutType -> (OutTyCoVar -> LintM a) -> LintM a +-- This function clones to avoid shadowing of TyCoVars +addInScopeTyCoVar tcv tcv_type thing_inside + = LintM $ \ env@(LE { le_in_vars = in_vars, le_subst = subst }) errs -> + let (tcv', subst') = subst_bndr subst + env' = env { le_in_vars = extendVarEnv in_vars tcv (tcv, tcv_type) + , le_subst = subst' } + in unLintM (thing_inside tcv') env' errs + where + subst_bndr subst + | isEmptyTCvSubst subst -- No change in kind + , not (tcv `elemInScopeSet` in_scope) -- Not already in scope + = -- Do not extend the substitution, just the in-scope set + (if (varType tcv `eqType` tcv_type) then (\x->x) else + pprTrace "addInScopeTyCoVar" ( + vcat [ text "tcv" <+> ppr tcv <+> dcolon <+> ppr (varType tcv) + , text "tcv_type" <+> ppr tcv_type ])) $ + (tcv, subst `extendSubstInScope` tcv) + + -- Clone, and extend the substitution + | let tcv' = uniqAway in_scope (setVarType tcv tcv_type) + = (tcv', extendTCvSubstWithClone subst tcv tcv') + where + in_scope = substInScopeSet subst + +getInVarEnv :: LintM (VarEnv (InId, OutType)) +getInVarEnv = LintM (\env errs -> fromBoxedLResult (Just (le_in_vars env), errs)) extendTvSubstL :: TyVar -> Type -> LintM a -> LintM a extendTvSubstL tv ty m = LintM $ \ env errs -> unLintM m (env { le_subst = Type.extendTvSubst (le_subst env) tv ty }) errs -updateSubst :: Subst -> LintM a -> LintM a -updateSubst subst' m - = LintM $ \ env errs -> unLintM m (env { le_subst = subst' }) errs - markAllJoinsBad :: LintM a -> LintM a markAllJoinsBad m = LintM $ \ env errs -> unLintM m (env { le_joins = emptyVarSet }) errs @@ -3430,34 +3505,43 @@ getValidJoins = LintM (\ env errs -> fromBoxedLResult (Just (le_joins env), errs getSubst :: LintM Subst getSubst = LintM (\ env errs -> fromBoxedLResult (Just (le_subst env), errs)) +substTyM :: InType -> LintM OutType +-- Apply the substitution to the type +-- The substitution is often empty, in which case it is a no-op +substTyM ty + = do { subst <- getSubst + ; return (substTy subst ty) } + getUEAliases :: LintM (NameEnv UsageEnv) getUEAliases = LintM (\ env errs -> fromBoxedLResult (Just (le_ue_aliases env), errs)) getInScope :: LintM InScopeSet -getInScope = LintM (\ env errs -> fromBoxedLResult (Just (getSubstInScope $ le_subst env), errs)) - -lookupIdInScope :: Id -> LintM (Id, LintedType) -lookupIdInScope id_occ - = do { in_scope_ids <- getInScopeIds - ; case lookupVarEnv in_scope_ids id_occ of - Just (id_bndr, linted_ty) - -> do { checkL (not (bad_global id_bndr)) $ global_in_scope id_bndr - ; return (id_bndr, linted_ty) } - Nothing -> do { checkL (not is_local) local_out_of_scope - ; return (id_occ, idType id_occ) } } - -- We don't bother to lint the type - -- of global (i.e. imported) Ids +getInScope = LintM (\ env errs -> fromBoxedLResult (Just (substInScopeSet $ le_subst env), errs)) + +lintVarOcc :: InVar -> LintM OutType +-- Used at an occurrence of a variable: term variables, type variables, and coercion variables +-- Checks two things: +-- a) that it is in scope +-- b) that the InType at the ocurrences matches the InType at the binding site +lintVarOcc v_occ + = do { in_var_env <- getInVarEnv + ; case lookupVarEnv in_var_env v_occ of + Nothing | isGlobalId v_occ -> return (idType v_occ) + | otherwise -> failWithL (text pp_what <+> quotes (ppr v_occ) + <+> text "is out of scope") + Just (v_bndr, out_ty) -> do { check_bad_global v_bndr + ; ensureEqTys occ_ty bndr_ty $ -- Compares InTypes + mkBndrOccTypeMismatchMsg v_occ bndr_ty occ_ty + ; return out_ty } + where + occ_ty = varType v_occ + bndr_ty = varType v_bndr } where - is_local = mustHaveLocalBinding id_occ - local_out_of_scope = text "Out of scope:" <+> pprBndr LetBind id_occ - global_in_scope id_bndr = hang (text "Occurrence is GlobalId, but binding is LocalId") - 2 $ vcat [hang (text "occurrence:") 2 $ pprBndr LetBind id_occ - ,hang (text "binder :") 2 $ pprBndr LetBind id_bndr - ] - bad_global id_bnd = isGlobalId id_occ - && isLocalId id_bnd - && not (isWiredIn id_occ) - -- 'bad_global' checks for the case where an /occurrence/ is + pp_what | isTyVar v_occ = "The type variable" + | isCoVar v_occ = "The coercion variable" + | otherwise = "The value variable" + + -- 'check_bad_global' checks for the case where an /occurrence/ is -- a GlobalId, but there is an enclosing binding fora a LocalId. -- NB: the in-scope variables are mostly LocalIds, checked by lintIdBndr, -- but GHCi adds GlobalIds from the interactive context. These @@ -3466,6 +3550,15 @@ lookupIdInScope id_occ -- are defined locally, but appear in expressions as (global) -- wired-in Ids after worker/wrapper -- So we simply disable the test in this case + check_bad_global v_bndr + | isGlobalId v_occ + , isLocalId v_bndr + , not (isWiredIn v_occ) + = failWithL $ hang (text "Occurrence is GlobalId, but binding is LocalId") + 2 (vcat [ hang (text "occurrence:") 2 $ pprBndr LetBind v_occ + , hang (text "binder :") 2 $ pprBndr LetBind v_bndr ]) + | otherwise + = return () lookupJoinId :: Id -> LintM JoinPointHood -- Look up an Id which should be a join point, valid here @@ -3476,21 +3569,21 @@ lookupJoinId id Just id' -> return (idJoinPointHood id') Nothing -> return NotJoinPoint } -addAliasUE :: Id -> UsageEnv -> LintM a -> LintM a +addAliasUE :: OutId -> UsageEnv -> LintM a -> LintM a addAliasUE id ue thing_inside = LintM $ \ env errs -> let new_ue_aliases = extendNameEnv (le_ue_aliases env) (getName id) ue in unLintM thing_inside (env { le_ue_aliases = new_ue_aliases }) errs -varCallSiteUsage :: Id -> LintM UsageEnv +varCallSiteUsage :: OutId -> LintM UsageEnv varCallSiteUsage id = do m <- getUEAliases return $ case lookupNameEnv m (getName id) of Nothing -> singleUsageUE id Just id_ue -> id_ue -ensureEqTys :: LintedType -> LintedType -> SDoc -> LintM () +ensureEqTys :: OutType -> OutType -> SDoc -> LintM () -- check ty2 is subtype of ty1 (ie, has same structure but usage -- annotations need only be consistent, not equal) -- Assumes ty1,ty2 are have already had the substitution applied @@ -3639,12 +3732,11 @@ mkCaseAltMsg e ty1 ty2 text "Annotation on case:" <+> ppr ty2, text "Alt Rhs:" <+> ppr e ]) -mkScrutMsg :: Id -> Type -> Type -> Subst -> SDoc -mkScrutMsg var var_ty scrut_ty subst +mkScrutMsg :: Id -> Type -> Type -> SDoc +mkScrutMsg var var_ty scrut_ty = vcat [text "Result binder in case doesn't match scrutinee:" <+> ppr var, text "Result binder type:" <+> ppr var_ty,--(idType var), - text "Scrutinee type:" <+> ppr scrut_ty, - hsep [text "Current TCv subst", ppr subst]] + text "Scrutinee type:" <+> ppr scrut_ty] mkNonDefltMsg, mkNonIncreasingAltsMsg :: CoreExpr -> SDoc mkNonDefltMsg e @@ -3714,7 +3806,7 @@ mkLetErr bndr rhs hang (text "Rhs:") 4 (ppr rhs)] -mkTyAppMsg :: Type -> Type -> SDoc +mkTyAppMsg :: OutType -> Type -> SDoc mkTyAppMsg ty arg_ty = vcat [text "Illegal type application:", hang (text "Function type:") @@ -3722,14 +3814,6 @@ mkTyAppMsg ty arg_ty hang (text "Type argument:") 4 (ppr arg_ty <+> dcolon <+> ppr (typeKind arg_ty))] -mkCoAppMsg :: Type -> Coercion -> SDoc -mkCoAppMsg fun_ty co - = vcat [ text "Illegal coercion application:" - , hang (text "Function type:") - 4 (ppr fun_ty) - , hang (text "Coercion argument:") - 4 (ppr co <+> dcolon <+> ppr (coercionType co))] - emptyRec :: CoreExpr -> SDoc emptyRec e = hang (text "Empty Rec binding:") 2 (ppr e) @@ -3843,12 +3927,11 @@ mkJoinBndrOccMismatchMsg bndr join_arity_bndr join_arity_occ , text "Arity at binding site:" <+> ppr join_arity_bndr , text "Arity at occurrence: " <+> ppr join_arity_occ ] -mkBndrOccTypeMismatchMsg :: Var -> Var -> LintedType -> LintedType -> SDoc -mkBndrOccTypeMismatchMsg bndr var bndr_ty var_ty +mkBndrOccTypeMismatchMsg :: InVar -> InType -> InType -> SDoc +mkBndrOccTypeMismatchMsg var bndr_ty occ_ty = vcat [ text "Mismatch in type between binder and occurrence" - , text "Binder:" <+> ppr bndr <+> dcolon <+> ppr bndr_ty - , text "Occurrence:" <+> ppr var <+> dcolon <+> ppr var_ty - , text " Before subst:" <+> ppr (idType var) ] + , text "Binder: " <+> ppr var <+> dcolon <+> ppr bndr_ty + , text "Occurrence:" <+> ppr var <+> dcolon <+> ppr occ_ty ] mkBadJoinPointRuleMsg :: JoinId -> JoinArity -> CoreRule -> SDoc mkBadJoinPointRuleMsg bndr join_arity rule ===================================== compiler/GHC/Core/Opt/Arity.hs ===================================== @@ -2304,7 +2304,7 @@ mkEtaWW orig_oss ppr_orig_expr in_scope orig_ty go _ [] subst _ ----------- Done! No more expansion needed - = (getSubstInScope subst, EI [] MRefl) + = (substInScopeSet subst, EI [] MRefl) go n oss@(one_shot:oss1) subst ty ----------- Forall types (forall a. ty) @@ -2351,7 +2351,7 @@ mkEtaWW orig_oss ppr_orig_expr in_scope orig_ty -- but its type isn't a function, or a binder -- does not have a fixed runtime representation = warnPprTrace True "mkEtaWW" ((ppr orig_oss <+> ppr orig_ty) $$ ppr_orig_expr) - (getSubstInScope subst, EI [] MRefl) + (substInScopeSet subst, EI [] MRefl) -- This *can* legitimately happen: -- e.g. coerce Int (\x. x) Essentially the programmer is -- playing fast and loose with types (Happy does this a lot). @@ -3246,7 +3246,7 @@ freshEtaId n subst ty = (subst', eta_id') where Scaled mult' ty' = Type.substScaledTyUnchecked subst ty - eta_id' = uniqAway (getSubstInScope subst) $ + eta_id' = uniqAway (substInScopeSet subst) $ mkSysLocalOrCoVar (fsLit "eta") (mkBuiltinUnique n) mult' ty' -- "OrCoVar" since this can be used to eta-expand -- coercion abstractions ===================================== compiler/GHC/Core/Opt/SpecConstr.hs ===================================== @@ -2453,7 +2453,7 @@ callsToNewPats env fn spec_info@(SI { si_specs = done_specs }) bndr_occs calls good_pats :: [CallPat] good_pats = catMaybes mb_pats - in_scope = getSubstInScope (sc_subst env) + in_scope = substInScopeSet (sc_subst env) -- Remove patterns we have already done new_pats = filterOut is_done good_pats @@ -2571,7 +2571,7 @@ callToPat :: ScEnv -> [ArgOcc] -> Call -> UniqSM (Maybe CallPat) -- over the following term variables -- The [CoreExpr] are the argument patterns for the rule callToPat env bndr_occs call@(Call fn args con_env) - = do { let in_scope = getSubstInScope (sc_subst env) + = do { let in_scope = substInScopeSet (sc_subst env) ; arg_triples <- zipWith3M (argToPat env in_scope con_env) args bndr_occs (map (const NotMarkedStrict) args) -- This zip trims the args to be no longer than ===================================== compiler/GHC/Core/Opt/Specialise.hs ===================================== @@ -1824,7 +1824,7 @@ specLookupRule env fn args phase rules = lookupRule ropts in_scope_env is_active fn args rules where dflags = se_dflags env - in_scope = getSubstInScope (se_subst env) + in_scope = substInScopeSet (se_subst env) in_scope_env = ISE in_scope (whenActiveUnfoldingFun is_active) ropts = initRuleOpts dflags is_active = isActive phase @@ -2573,7 +2573,7 @@ specHeader env (bndr : bndrs) (SpecType ty : args) = do { -- Find qvars, the type variables to add to the binders for the rule -- Namely those free in `ty` that aren't in scope -- See (MP2) in Note [Specialising polymorphic dictionaries] - let in_scope = Core.getSubstInScope (se_subst env) + let in_scope = Core.substInScopeSet (se_subst env) qvars = scopedSort $ filterOut (`elemInScopeSet` in_scope) $ tyCoVarsOfTypeList ty @@ -2635,7 +2635,7 @@ specHeader env (bndr : bndrs) (SpecDict d : args) ) } where - in_scope = Core.getSubstInScope (se_subst env) + in_scope = Core.substInScopeSet (se_subst env) -- Finally, we don't want to specialise on this argument 'i': -- - It's an UnSpecArg, or ===================================== compiler/GHC/Core/SimpleOpt.hs ===================================== @@ -219,7 +219,7 @@ soeZapSubst env@(SOE { soe_subst = subst }) = env { soe_inl = emptyVarEnv, soe_subst = zapSubst subst } soeInScope :: SimpleOptEnv -> InScopeSet -soeInScope (SOE { soe_subst = subst }) = getSubstInScope subst +soeInScope (SOE { soe_subst = subst }) = substInScopeSet subst soeSetInScope :: InScopeSet -> SimpleOptEnv -> SimpleOptEnv soeSetInScope in_scope env2@(SOE { soe_subst = subst2 }) @@ -246,7 +246,7 @@ simple_opt_expr env expr where rec_ids = soe_rec_ids env subst = soe_subst env - in_scope = getSubstInScope subst + in_scope = substInScopeSet subst in_scope_env = ISE in_scope alwaysActiveUnfoldingFun --------------- @@ -481,7 +481,7 @@ simple_bind_pair env@(SOE { soe_inl = inl_env, soe_subst = subst }) stable_unf = isStableUnfolding (idUnfolding in_bndr) active = isAlwaysActive (idInlineActivation in_bndr) occ = idOccInfo in_bndr - in_scope = getSubstInScope subst + in_scope = substInScopeSet subst out_rhs | JoinPoint join_arity <- idJoinPointHood in_bndr = simple_join_rhs join_arity @@ -1321,7 +1321,7 @@ exprIsConApp_maybe ise@(ISE in_scope id_unf) expr scrut' = subst_expr subst scrut go (Right sub) floats (Var v) cont - = go (Left (getSubstInScope sub)) + = go (Left (substInScopeSet sub)) floats (lookupIdSubst sub v) cont @@ -1394,7 +1394,7 @@ exprIsConApp_maybe ise@(ISE in_scope id_unf) expr -- The Left case is wildly dominant subst_in_scope (Left in_scope) = in_scope - subst_in_scope (Right s) = getSubstInScope s + subst_in_scope (Right s) = substInScopeSet s subst_extend_in_scope (Left in_scope) v = Left (in_scope `extendInScopeSet` v) subst_extend_in_scope (Right s) v = Right (s `extendSubstInScope` v) ===================================== compiler/GHC/Core/Subst.hs ===================================== @@ -24,7 +24,7 @@ module GHC.Core.Subst ( extendIdSubstWithClone, extendSubst, extendSubstList, extendSubstWithVar, extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, - isInScope, setInScope, getSubstInScope, + isInScope, setInScope, substInScopeSet, extendTvSubst, extendCvSubst, delBndr, delBndrs, zapSubst, ===================================== compiler/GHC/Core/TyCo/Rep.hs ===================================== @@ -1218,14 +1218,15 @@ because the kinds of the bound tyvars can be different. The typing rule is: - kind_co : k1 ~N k2 - tv1:k1 |- co : t1 ~r t2 + G |- kind_co : k1 ~N k2 + tv1 \not\in fv(typeKind(t1),typeKind(t2)) -- Skolem escape + G, tv1:k1 |- co : t1 ~r t2 if r=N, then vis1=vis2 ------------------------------------ - ForAllCo (tv1:k1) vis1 vis2 kind_co co - : forall (tv1:k1) . t1 + G |- ForAllCo (tv1:k1) vis1 vis2 kind_co co + : forall (tv1:k1) . t1 ~r - forall (tv1:k2) . (t2[tv1 |-> (tv1:k2) |> sym kind_co]) + forall (tv1:k2) . (t2[tv1 |-> (tv1:k2) |> sym kind_co]) Several things to note here ===================================== compiler/GHC/Core/TyCo/Subst.hs ===================================== @@ -15,7 +15,7 @@ module GHC.Core.TyCo.Subst emptySubst, mkEmptySubst, isEmptyTCvSubst, isEmptySubst, mkTCvSubst, mkTvSubst, mkCvSubst, mkIdSubst, getTvSubstEnv, getIdSubstEnv, - getCvSubstEnv, getSubstInScope, setInScope, getSubstRangeTyCoFVs, + getCvSubstEnv, substInScopeSet, setInScope, getSubstRangeTyCoFVs, isInScope, elemSubst, notElemSubst, zapSubst, extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, extendTCvSubst, extendTCvSubstWithClone, @@ -104,9 +104,9 @@ import Data.List (mapAccumL) data Subst = Subst InScopeSet -- Variables in scope (both Ids and TyVars) /after/ -- applying the substitution - IdSubstEnv -- Substitution from NcIds to CoreExprs - TvSubstEnv -- Substitution from TyVars to Types - CvSubstEnv -- Substitution from CoVars to Coercions + IdSubstEnv -- Substitution from InId to OutExpr + TvSubstEnv -- Substitution from InTyVar to OutType + CvSubstEnv -- Substitution from InCoVar to OutCoercion -- INVARIANT 1: See Note [The substitution invariant] -- This is what lets us deal with name capture properly @@ -115,7 +115,7 @@ data Subst -- see Note [Substitutions apply only once] -- -- INVARIANT 3: See Note [Extending the IdSubstEnv] in "GHC.Core.Subst" - -- and Note [Extending the TvSubstEnv and CvSubstEnv] + -- and Note [Extending the TvSubstEnv and CvSubstEnv] -- -- INVARIANT 4: See Note [Substituting types, coercions, and expressions] @@ -183,8 +183,10 @@ A TCvSubst is not idempotent, but, unlike the non-idempotent substitution we use during unifications, it must not be repeatedly applied. Note [Extending the TvSubstEnv and CvSubstEnv] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -See #tcvsubst_invariant# for the invariants that must hold. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The TvSubstEnv and CvSubstEnv have a binding for each TyCoVar + - whose unique has changed, OR + - whose kind has changed This invariant allows a short-cut when the subst envs are empty: if the TvSubstEnv and CvSubstEnv are empty --- i.e. (isEmptyTCvSubst subst) @@ -207,7 +209,7 @@ This invariant has several crucial consequences: * In substTy, substTheta, we can short-circuit when the TvSubstEnv is empty Note [Substituting types, coercions, and expressions] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Types and coercions are mutually recursive, and either may have variables "belonging" to the other. Thus, every time we wish to substitute in a type, we may also need to substitute in a coercion, and vice versa. @@ -295,8 +297,8 @@ getCvSubstEnv :: Subst -> CvSubstEnv getCvSubstEnv (Subst _ _ _ cenv) = cenv -- | Find the in-scope set: see Note [The substitution invariant] -getSubstInScope :: Subst -> InScopeSet -getSubstInScope (Subst in_scope _ _ _) = in_scope +substInScopeSet :: Subst -> InScopeSet +substInScopeSet (Subst in_scope _ _ _) = in_scope setInScope :: Subst -> InScopeSet -> Subst setInScope (Subst _ ids tvs cvs) in_scope = Subst in_scope ids tvs cvs ===================================== compiler/GHC/Core/Type.hs ===================================== @@ -121,7 +121,7 @@ module GHC.Core.Type ( mkTYPEapp, mkTYPEapp_maybe, mkCONSTRAINTapp, mkCONSTRAINTapp_maybe, mkBoxedRepApp_maybe, mkTupleRepApp_maybe, - typeOrConstraintKind, + typeOrConstraintKind, liftedTypeOrConstraintKind, -- *** Levity and boxity sORTKind_maybe, typeTypeOrConstraint, @@ -201,7 +201,7 @@ module GHC.Core.Type ( zipTCvSubst, notElemSubst, getTvSubstEnv, - zapSubst, getSubstInScope, setInScope, getSubstRangeTyCoFVs, + zapSubst, substInScopeSet, setInScope, getSubstRangeTyCoFVs, extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, extendTCvSubst, extendCvSubst, extendTvSubst, extendTvSubstList, extendTvSubstAndInScope, @@ -2685,9 +2685,7 @@ typeKind :: HasDebugCallStack => Type -> Kind -- No need to expand synonyms typeKind (TyConApp tc tys) = piResultTys (tyConKind tc) tys typeKind (LitTy l) = typeLiteralKind l -typeKind (FunTy { ft_af = af }) = case funTyFlagResultTypeOrConstraint af of - TypeLike -> liftedTypeKind - ConstraintLike -> constraintKind +typeKind (FunTy { ft_af = af }) = liftedTypeOrConstraintKind (funTyFlagResultTypeOrConstraint af) typeKind (TyVarTy tyvar) = tyVarKind tyvar typeKind (CastTy _ty co) = coercionRKind co typeKind (CoercionTy co) = coercionType co @@ -2719,9 +2717,9 @@ typeKind ty@(ForAllTy {}) lifted_kind_from_body -- Implements (FORALL2) = case sORTKind_maybe body_kind of - Just (ConstraintLike, _) -> constraintKind - Just (TypeLike, _) -> liftedTypeKind - Nothing -> pprPanic "typeKind" (ppr body_kind) + Just (torc, _) -> liftedTypeOrConstraintKind torc + Nothing -> pprPanic "typeKind" (ppr body_kind) + --------------------------------------------- @@ -3450,3 +3448,7 @@ mkTupleRepApp_maybe _ = Nothing typeOrConstraintKind :: TypeOrConstraint -> RuntimeRepType -> Kind typeOrConstraintKind TypeLike rep = mkTYPEapp rep typeOrConstraintKind ConstraintLike rep = mkCONSTRAINTapp rep + +liftedTypeOrConstraintKind :: TypeOrConstraint -> Kind +liftedTypeOrConstraintKind TypeLike = liftedTypeKind +liftedTypeOrConstraintKind ConstraintLike = constraintKind ===================================== compiler/GHC/Data/Unboxed.hs ===================================== @@ -4,6 +4,13 @@ {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE UnliftedNewtypes #-} +{-# OPTIONS_GHC -fno-omit-interface-pragmas #-} + -- If you use -fomit-interface-pragmas for your build, we won't + -- inline the matcher for JustUB, and that turns out to have a + -- catastropic effect on Lint, which uses unboxed Maybes. + -- Simple fix: switch off -fomit-interface-pragmas for this tiny + -- and very stable module. + module GHC.Data.Unboxed ( MaybeUB(JustUB, NothingUB), fmapMaybeUB, fromMaybeUB, apMaybeUB, maybeUB ===================================== compiler/GHC/Hs/Dump.hs ===================================== @@ -6,6 +6,10 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE DataKinds #-} +{-# OPTIONS_GHC -fno-specialise #-} + -- Don't do type-class specialisation; it goes mad in this module + -- See #25463 + -- | Contains a debug function to dump parts of the GHC.Hs AST. It uses a syb -- traversal which falls back to displaying based on the constructor name, so -- can be used to dump anything having a @Data.Data@ instance. ===================================== compiler/GHC/Llvm/Ppr.hs ===================================== @@ -669,9 +669,7 @@ ppTypeLit = ppTypeLit' [] {-# SPECIALIZE ppTypeLit :: LlvmCgConfig -> LlvmLit -> HLine #-} -- see Note [SPECIALIZE to HDoc] in GHC.Utils.Outputable ppTypeLit' :: IsLine doc => [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> doc -ppTypeLit' attrs opts l = case l of - LMVectorLit {} -> ppLit opts l - _ -> ppLlvmType (getLitType l) <+> ppSpaceJoin ppLlvmParamAttr attrs <+> ppLit opts l +ppTypeLit' attrs opts l = ppLlvmType (getLitType l) <+> ppSpaceJoin ppLlvmParamAttr attrs <+> ppLit opts l {-# SPECIALIZE ppTypeLit' :: [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> SDoc #-} {-# SPECIALIZE ppTypeLit' :: [LlvmParamAttr] -> LlvmCgConfig -> LlvmLit -> HLine #-} -- see Note [SPECIALIZE to HDoc] in GHC.Utils.Outputable ===================================== compiler/GHC/Rename/Bind.hs ===================================== @@ -956,7 +956,8 @@ rnMethodBinds is_cls_decl cls ktv_names binds sigs ; let (spec_prags, other_sigs) = partition (isSpecLSig <||> isSpecInstLSig) sigs bound_nms = mkNameSet (collectHsBindsBinders CollNoDictBinders binds') sig_ctxt | is_cls_decl = ClsDeclCtxt cls - | otherwise = InstDeclCtxt bound_nms + | otherwise = InstDeclCtxt (mkOccEnv [ (nameOccName n, n) + | n <- nonDetEltsUniqSet bound_nms ]) ; (spec_prags', spg_fvs) <- renameSigs sig_ctxt spec_prags ; (other_sigs', sig_fvs) <- bindLocalNamesFV ktv_names $ renameSigs sig_ctxt other_sigs @@ -1071,18 +1072,9 @@ renameSigs ctxt sigs ; return (good_sigs, sig_fvs) } ---------------------- --- We use lookupSigOccRn in the signatures, which is a little bit unsatisfactory --- because this won't work for: --- instance Foo T where --- {-# INLINE op #-} --- Baz.op = ... --- We'll just rename the INLINE prag to refer to whatever other 'op' --- is in scope. (I'm assuming that Baz.op isn't in scope unqualified.) --- Doesn't seem worth much trouble to sort this. - renameSig :: HsSigCtxt -> Sig GhcPs -> RnM (Sig GhcRn, FreeVars) renameSig ctxt sig@(TypeSig _ vs ty) - = do { new_vs <- mapM (lookupSigOccRnN ctxt sig) vs + = do { new_vs <- mapM (lookupSigOccRn ctxt sig) vs ; let doc = TypeSigCtx (ppr_sig_bndrs vs) ; (new_ty, fvs) <- rnHsSigWcType doc ty ; return (TypeSig noAnn new_vs new_ty, fvs) } @@ -1091,7 +1083,7 @@ renameSig ctxt sig@(ClassOpSig _ is_deflt vs ty) = do { defaultSigs_on <- xoptM LangExt.DefaultSignatures ; when (is_deflt && not defaultSigs_on) $ addErr (TcRnUnexpectedDefaultSig sig) - ; new_v <- mapM (lookupSigOccRnN ctxt sig) vs + ; new_v <- mapM (lookupSigOccRn ctxt sig) vs ; (new_ty, fvs) <- rnHsSigType ty_ctxt TypeLevel ty ; return (ClassOpSig noAnn is_deflt new_v new_ty, fvs) } where @@ -1119,7 +1111,7 @@ renameSig _ (SpecInstSig (_, src) ty) renameSig ctxt sig@(SpecSig _ v tys inl) = do { new_v <- case ctxt of TopSigCtxt {} -> lookupLocatedOccRn v - _ -> lookupSigOccRnN ctxt sig v + _ -> lookupSigOccRn ctxt sig v ; (new_ty, fvs) <- foldM do_one ([],emptyFVs) tys ; return (SpecSig noAnn new_v new_ty inl, fvs) } where @@ -1130,7 +1122,7 @@ renameSig ctxt sig@(SpecSig _ v tys inl) ; return ( new_ty:tys, fvs_ty `plusFV` fvs) } renameSig ctxt sig@(InlineSig _ v s) - = do { new_v <- lookupSigOccRnN ctxt sig v + = do { new_v <- lookupSigOccRn ctxt sig v ; return (InlineSig noAnn new_v s, emptyFVs) } renameSig ctxt (FixSig _ fsig) @@ -1138,11 +1130,11 @@ renameSig ctxt (FixSig _ fsig) ; return (FixSig noAnn new_fsig, emptyFVs) } renameSig ctxt sig@(MinimalSig (_, s) (L l bf)) - = do new_bf <- bfTraverse (lookupSigOccRnN ctxt sig) bf + = do new_bf <- bfTraverse (lookupSigOccRn ctxt sig) bf return (MinimalSig (noAnn, s) (L l new_bf), emptyFVs) renameSig ctxt sig@(PatSynSig _ vs ty) - = do { new_vs <- mapM (lookupSigOccRnN ctxt sig) vs + = do { new_vs <- mapM (lookupSigOccRn ctxt sig) vs ; (ty', fvs) <- rnHsSigType ty_ctxt TypeLevel ty ; return (PatSynSig noAnn new_vs ty', fvs) } where @@ -1150,7 +1142,7 @@ renameSig ctxt sig@(PatSynSig _ vs ty) <+> ppr_sig_bndrs vs) renameSig ctxt sig@(SCCFunSig (_, st) v s) - = do { new_v <- lookupSigOccRnN ctxt sig v + = do { new_v <- lookupSigOccRn ctxt sig v ; return (SCCFunSig (noAnn, st) new_v s, emptyFVs) } -- COMPLETE Sigs can refer to imported IDs which is why we use ===================================== compiler/GHC/Rename/Env.hs ===================================== @@ -34,7 +34,7 @@ module GHC.Rename.Env ( ChildLookupResult(..), lookupSubBndrOcc_helper, - HsSigCtxt(..), lookupLocalTcNames, lookupSigOccRn, lookupSigOccRnN, + HsSigCtxt(..), lookupLocalTcNames, lookupSigOccRn, lookupSigCtxtOccRn, lookupInstDeclBndr, lookupFamInstName, @@ -2072,6 +2072,28 @@ data HsSigCtxt = ... | TopSigCtxt NameSet | .... f :: C a => a -> a -- No, not ok class C a where f :: a -> a + +Note [Signatures in instance decls] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Consider + class C a where + op :: a -> a + nop :: a -> a + + instance C ty where + bop :: [a] -> [a] + bop x = x + + nop :: [a] -> [a] + +When renameing the `bop` binding we'll give it an UnboundName (still with +OccName "bop") because `bop` is not a method of C. Then + +* when doing lookupSigOcc on `bop :: blah` we want to find `bop`, even though it + is an UnboundName (failing to do this causes #16610, and #25437) + +* When doing lookupSigOcc on `nop :: blah` we want to complain that there + is no accompanying binding, even though `nop` is a class method -} data HsSigCtxt @@ -2079,8 +2101,8 @@ data HsSigCtxt -- See Note [Signatures for top level things] | LocalBindCtxt NameSet -- In a local binding, binding these names | ClsDeclCtxt Name -- Class decl for this class - | InstDeclCtxt NameSet -- Instance decl whose user-written method - -- bindings are for these methods + | InstDeclCtxt (OccEnv Name) -- Instance decl whose user-written method + -- bindings are described by this OccEnv | HsBootCtxt NameSet -- Top level of a hs-boot file, binding these names | RoleAnnotCtxt NameSet -- A role annotation, with the names of all types -- in the group @@ -2095,14 +2117,10 @@ instance Outputable HsSigCtxt where lookupSigOccRn :: HsSigCtxt -> Sig GhcPs - -> LocatedA RdrName -> RnM (LocatedA Name) + -> GenLocated (EpAnn ann) RdrName + -> RnM (GenLocated (EpAnn ann) Name) lookupSigOccRn ctxt sig = lookupSigCtxtOccRn ctxt (hsSigDoc sig) -lookupSigOccRnN :: HsSigCtxt - -> Sig GhcPs - -> LocatedN RdrName -> RnM (LocatedN Name) -lookupSigOccRnN ctxt sig = lookupSigCtxtOccRn ctxt (hsSigDoc sig) - -- | Lookup a name in relation to the names in a 'HsSigCtxt' lookupSigCtxtOccRn :: HsSigCtxt -> SDoc -- ^ description of thing we're looking up, @@ -2155,34 +2173,37 @@ lookupBindGroupOcc ctxt what rdr_name also_try_tycon_ns ns_spec RoleAnnotCtxt ns -> lookup_top (elem_name_set_with_namespace ns) LocalBindCtxt ns -> lookup_group ns ClsDeclCtxt cls -> lookup_cls_op cls - InstDeclCtxt ns -> if uniqSetAny isUnboundName ns -- #16610 - then return $ NE.singleton $ Right $ mkUnboundNameRdr rdr_name - else lookup_top (elem_name_set_with_namespace ns) + InstDeclCtxt occ_env-> lookup_inst occ_env where elem_name_set_with_namespace ns n = check_namespace n && (n `elemNameSet` ns) check_namespace = coveredByNamespaceSpecifier ns_spec . nameNameSpace namespace = occNameSpace occ - occ = rdrNameOcc rdr_name - relevant_gres = - RelevantGREs - { includeFieldSelectors = WantBoth - , lookupVariablesForFields = True - , lookupTyConsAsWell = also_try_tycon_ns } - ok_gre = greIsRelevant relevant_gres namespace + occ = rdrNameOcc rdr_name + ok_gre = greIsRelevant relevant_gres namespace + relevant_gres = RelevantGREs { includeFieldSelectors = WantBoth + , lookupVariablesForFields = True + , lookupTyConsAsWell = also_try_tycon_ns } finish err gre | ok_gre gre - = NE.singleton (Right $ greName gre) + = NE.singleton (Right (greName gre)) | otherwise = NE.singleton (Left err) + succeed_with n = return $ NE.singleton $ Right n + lookup_cls_op cls = NE.singleton <$> lookupSubBndrOcc AllDeprecationWarnings cls doc rdr_name where doc = text "method of class" <+> quotes (ppr cls) + lookup_inst occ_env -- See Note [Signatures in instance decls] + = case lookupOccEnv occ_env occ of + Nothing -> bale_out_with [] + Just n -> succeed_with n + lookup_top keep_me = do { env <- getGlobalRdrEnv ; let occ = rdrNameOcc rdr_name @@ -2205,7 +2226,7 @@ lookupBindGroupOcc ctxt what rdr_name also_try_tycon_ns ns_spec ; let candidates_msg = candidates $ localRdrEnvElts env ; case mname of Just n - | n `elemNameSet` bound_names -> return $ NE.singleton $ Right n + | n `elemNameSet` bound_names -> succeed_with n | otherwise -> bale_out_with local_msg Nothing -> bale_out_with candidates_msg } ===================================== compiler/GHC/Tc/Gen/Expr.hs ===================================== @@ -296,13 +296,6 @@ tcExpr e@(ExprWithTySig {}) res_ty = tcApp e res_ty tcExpr (XExpr e) res_ty = tcXExpr e res_ty -tcExpr e@(HsOverLit _ lit) res_ty - = do { mb_res <- tcShortCutLit lit res_ty - -- See Note [Short cut for overloaded literals] in GHC.Tc.Zonk.Type - ; case mb_res of - Just lit' -> return (HsOverLit noExtField lit') - Nothing -> tcApp e res_ty } - -- Typecheck an occurrence of an unbound Id -- -- Some of these started life as a true expression hole "_". @@ -353,6 +346,51 @@ tcExpr e@(HsLam x lam_variant matches) res_ty = do { (wrap, matches') <- tcLambdaMatches e lam_variant matches [] res_ty ; return (mkHsWrap wrap $ HsLam x lam_variant matches') } +{- +************************************************************************ +* * + Overloaded literals +* * +************************************************************************ +-} + +tcExpr e@(HsOverLit _ lit) res_ty + = -- See Note [Typechecking overloaded literals] + do { mb_res <- tcShortCutLit lit res_ty + -- See Note [Short cut for overloaded literals] in GHC.Tc.Utils.TcMType + ; case mb_res of + Just lit' -> return (HsOverLit noExtField lit') + Nothing -> tcApp e res_ty } + -- Why go via tcApp? See Note [Typechecking overloaded literals] + +{- Note [Typechecking overloaded literals] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Generally speaking, an overloaded literal like "3" typechecks as if you +had written (fromInteger (3 :: Integer)). But in practice it's a little +tricky: + +* Rebindable syntax (see #19154 and !4981). With rebindable syntax we might have + fromInteger :: Integer -> forall a. Num a => a + and then we might hope to use a Visible Type Application (VTA) to write + 3 @Int + expecting it to expand to + fromInteger (3::Integer) @Int dNumInt + To achieve that, we need to + * treat the application using `tcApp` to deal with the VTA + * treat the overloaded literal as the "head" of an application; + see `GHC.Tc.Gen.Head.tcInferAppHead`. + +* Short-cutting. If we have + xs :: [Int] + xs = [3,4,5,6... ] + then it's a huge short-cut (in compile time) to just cough up the `Int` literal + for `3`, rather than (fromInteger @Int d), with a wanted constraint `[W] Num Int`. + See Note [Short cut for overloaded literals] in GHC.Tc.Utils.TcMType. + + We can only take this short-cut if rebindable syntax is off; see `tcShortCutLit`. +-} + + {- ************************************************************************ * * ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -765,6 +765,8 @@ tcInferOverLit lit@(OverLit { ol_val = val -- where fromInteger is gotten by looking up from_name, and -- the (3 :: Integer) is returned by mkOverLit -- Ditto the string literal "foo" to (fromString ("foo" :: String)) + -- + -- See Note [Typechecking overloaded literals] in GHC.Tc.Gen.Expr do { hs_lit <- mkOverLit val ; from_id <- tcLookupId from_name ; (wrap1, from_ty) <- topInstantiate (LiteralOrigin lit) (idType from_id) @@ -781,9 +783,10 @@ tcInferOverLit lit@(OverLit { ol_val = val from_expr = mkHsWrap (wrap2 <.> wrap1) $ HsVar noExtField (L loc from_id) witness = HsApp noExtField (L (l2l loc) from_expr) lit_expr - lit' = lit { ol_ext = OverLitTc { ol_rebindable = rebindable - , ol_witness = witness - , ol_type = res_ty } } + lit' = OverLit { ol_val = val + , ol_ext = OverLitTc { ol_rebindable = rebindable + , ol_witness = witness + , ol_type = res_ty } } ; return (HsOverLit noExtField lit', res_ty) } {- ********************************************************************* ===================================== compiler/GHC/Tc/Solver/Equality.hs ===================================== @@ -516,7 +516,7 @@ can_eq_nc_forall ev eq_rel s1 s2 go _ _ _ _ _ = panic "can_eq_nc_forall" -- case (s:ss) [] - init_subst2 = mkEmptySubst (getSubstInScope subst1) + init_subst2 = mkEmptySubst (substInScopeSet subst1) -- Generate the constraints that live in the body of the implication -- See (SF5) in Note [Solving forall equalities] ===================================== compiler/GHC/Tc/TyCl.hs ===================================== @@ -4232,7 +4232,7 @@ mkGADTVars tmpl_tvs dc_tvs subst = choose [] [] empty_subst empty_subst tmpl_tvs where in_scope = mkInScopeSet (mkVarSet tmpl_tvs `unionVarSet` mkVarSet dc_tvs) - `unionInScope` getSubstInScope subst + `unionInScope` substInScopeSet subst empty_subst = mkEmptySubst in_scope choose :: [TyVar] -- accumulator of univ tvs, reversed ===================================== compiler/GHC/Tc/Utils/TcType.hs ===================================== @@ -166,7 +166,7 @@ module GHC.Tc.Utils.TcType ( TvSubstEnv, emptySubst, mkEmptySubst, zipTvSubst, mkTvSubstPrs, notElemSubst, unionSubst, - getTvSubstEnv, getSubstInScope, extendSubstInScope, + getTvSubstEnv, substInScopeSet, extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, extendTvSubstAndInScope, Type.lookupTyVar, Type.extendTCvSubst, Type.substTyVarBndr, Type.extendTvSubst, ===================================== compiler/GHC/Tc/Utils/Unify.hs ===================================== @@ -305,7 +305,7 @@ Both ultimately handled by matchExpectedFunTys. * For the Lambda case there are two sub-cases: * An expression with a type signature: (\ @a x y -> blah) :: hs_ty This is handled by `GHC.Tc.Gen.Head.tcExprWithSig`, which kind-checks - the signature and hands off to `tcExprPolyCheck` vai `tcPolyLExprSig` + the signature and hands off to `tcExprPolyCheck` via `tcPolyLExprSig`. Note that the foralls at the top of hs_ty scope over the expression. * A higher order call: h e, where h :: poly_ty -> blah ===================================== compiler/GHC/Types/Var.hs ===================================== @@ -40,8 +40,8 @@ module GHC.Types.Var ( TyVar, TcTyVar, TypeVar, KindVar, TKVar, TyCoVar, -- * In and Out variants - InVar, InCoVar, InId, InTyVar, - OutVar, OutCoVar, OutId, OutTyVar, + InVar, InCoVar, InId, InTyVar, InTyCoVar, + OutVar, OutCoVar, OutId, OutTyVar, OutTyCoVar, -- ** Taking 'Var's apart varName, varUnique, varType, @@ -205,10 +205,12 @@ type TyCoVar = Id -- Type, *or* coercion variable type InVar = Var type InTyVar = TyVar type InCoVar = CoVar +type InTyCoVar = TyCoVar type InId = Id type OutVar = Var type OutTyVar = TyVar type OutCoVar = CoVar +type OutTyCoVar = TyCoVar type OutId = Id ===================================== testsuite/tests/rename/should_fail/T25437.hs ===================================== @@ -0,0 +1,16 @@ +{-# LANGUAGE ScopedTypeVariables #-} + +module T25437 where + +class C a where + foo :: Int -> Maybe a + +instance C (Maybe x) where + foo :: Int -> Maybe [a] + +instance C [x] where + foo :: forall b. Int -> Maybe [b] + foo _ = Just @[b] [] + + something :: x -> x + something = () ===================================== testsuite/tests/rename/should_fail/T25437.stderr ===================================== @@ -0,0 +1,5 @@ +T25437.hs:9:3: error: [GHC-44432] + The class method signature for ‘foo’ lacks an accompanying binding + +T25437.hs:16:3: error: [GHC-54721] + ‘something’ is not a (visible) method of class ‘C’ ===================================== testsuite/tests/rename/should_fail/T5001b.stderr ===================================== @@ -1,5 +1,4 @@ T5001b.hs:10:17: error: [GHC-44432] The INLINE pragma for ‘genum’ lacks an accompanying binding - Suggested fix: - Move the INLINE pragma to the declaration site of ‘genum’. + ===================================== testsuite/tests/rename/should_fail/all.T ===================================== @@ -231,3 +231,4 @@ test('T14032c', normal, compile_fail, ['']) test('T14032f', normal, compile_fail, ['']) test('T23501_fail', normal, compile_fail, ['']) test('T23501_fail_ext', normal, compile_fail, ['']) +test('T25437', normal, compile_fail, ['']) ===================================== testsuite/tests/simd/should_run/T25561.hs ===================================== @@ -0,0 +1,11 @@ +{-# LANGUAGE MagicHash, UnboxedTuples #-} +import Data.Array.Base +import Data.Array.IO.Internals +import GHC.Exts +import GHC.IO + +main :: IO () +main = do + ma@(IOUArray (STUArray l _ _ mba)) <- newListArray (0, 10) ([0..10] :: [Float]) + IO $ \s -> (# writeFloatArrayAsFloatX4# mba 1# (broadcastFloatX4# 3.0#) s, () #) + print =<< getElems ma ===================================== testsuite/tests/simd/should_run/T25561.stdout ===================================== @@ -0,0 +1 @@ +[0.0,3.0,3.0,3.0,3.0,5.0,6.0,7.0,8.0,9.0,10.0] ===================================== testsuite/tests/simd/should_run/all.T ===================================== @@ -66,6 +66,7 @@ test('simd_insert_array', [], compile_and_run, ['']) test('T22187', [],compile,['']) test('T22187_run', [],compile_and_run,['']) test('T25062_V16', [], compile_and_run, ['']) +test('T25561', [], compile_and_run, ['']) # Even if the CPU we run on doesn't support *executing* those tests we should try to # compile them. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ce338a17abeed39a90e73384908828a2c6396297...cc3e15255f0d227784e19849748f1e53bffa24ae -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ce338a17abeed39a90e73384908828a2c6396297...cc3e15255f0d227784e19849748f1e53bffa24ae You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 03:57:38 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Mon, 16 Dec 2024 22:57:38 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] Add Note [Typechecking overloaded literals] Message-ID: <6760f6b2e0c0f_21699213b8e947266e@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 03a8158b by Simon Peyton Jones at 2024-12-16T22:57:27-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - 3 changed files: - compiler/GHC/Tc/Gen/Expr.hs - compiler/GHC/Tc/Gen/Head.hs - compiler/GHC/Tc/Utils/Unify.hs Changes: ===================================== compiler/GHC/Tc/Gen/Expr.hs ===================================== @@ -296,13 +296,6 @@ tcExpr e@(ExprWithTySig {}) res_ty = tcApp e res_ty tcExpr (XExpr e) res_ty = tcXExpr e res_ty -tcExpr e@(HsOverLit _ lit) res_ty - = do { mb_res <- tcShortCutLit lit res_ty - -- See Note [Short cut for overloaded literals] in GHC.Tc.Zonk.Type - ; case mb_res of - Just lit' -> return (HsOverLit noExtField lit') - Nothing -> tcApp e res_ty } - -- Typecheck an occurrence of an unbound Id -- -- Some of these started life as a true expression hole "_". @@ -353,6 +346,51 @@ tcExpr e@(HsLam x lam_variant matches) res_ty = do { (wrap, matches') <- tcLambdaMatches e lam_variant matches [] res_ty ; return (mkHsWrap wrap $ HsLam x lam_variant matches') } +{- +************************************************************************ +* * + Overloaded literals +* * +************************************************************************ +-} + +tcExpr e@(HsOverLit _ lit) res_ty + = -- See Note [Typechecking overloaded literals] + do { mb_res <- tcShortCutLit lit res_ty + -- See Note [Short cut for overloaded literals] in GHC.Tc.Utils.TcMType + ; case mb_res of + Just lit' -> return (HsOverLit noExtField lit') + Nothing -> tcApp e res_ty } + -- Why go via tcApp? See Note [Typechecking overloaded literals] + +{- Note [Typechecking overloaded literals] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Generally speaking, an overloaded literal like "3" typechecks as if you +had written (fromInteger (3 :: Integer)). But in practice it's a little +tricky: + +* Rebindable syntax (see #19154 and !4981). With rebindable syntax we might have + fromInteger :: Integer -> forall a. Num a => a + and then we might hope to use a Visible Type Application (VTA) to write + 3 @Int + expecting it to expand to + fromInteger (3::Integer) @Int dNumInt + To achieve that, we need to + * treat the application using `tcApp` to deal with the VTA + * treat the overloaded literal as the "head" of an application; + see `GHC.Tc.Gen.Head.tcInferAppHead`. + +* Short-cutting. If we have + xs :: [Int] + xs = [3,4,5,6... ] + then it's a huge short-cut (in compile time) to just cough up the `Int` literal + for `3`, rather than (fromInteger @Int d), with a wanted constraint `[W] Num Int`. + See Note [Short cut for overloaded literals] in GHC.Tc.Utils.TcMType. + + We can only take this short-cut if rebindable syntax is off; see `tcShortCutLit`. +-} + + {- ************************************************************************ * * ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -765,6 +765,8 @@ tcInferOverLit lit@(OverLit { ol_val = val -- where fromInteger is gotten by looking up from_name, and -- the (3 :: Integer) is returned by mkOverLit -- Ditto the string literal "foo" to (fromString ("foo" :: String)) + -- + -- See Note [Typechecking overloaded literals] in GHC.Tc.Gen.Expr do { hs_lit <- mkOverLit val ; from_id <- tcLookupId from_name ; (wrap1, from_ty) <- topInstantiate (LiteralOrigin lit) (idType from_id) @@ -781,9 +783,10 @@ tcInferOverLit lit@(OverLit { ol_val = val from_expr = mkHsWrap (wrap2 <.> wrap1) $ HsVar noExtField (L loc from_id) witness = HsApp noExtField (L (l2l loc) from_expr) lit_expr - lit' = lit { ol_ext = OverLitTc { ol_rebindable = rebindable - , ol_witness = witness - , ol_type = res_ty } } + lit' = OverLit { ol_val = val + , ol_ext = OverLitTc { ol_rebindable = rebindable + , ol_witness = witness + , ol_type = res_ty } } ; return (HsOverLit noExtField lit', res_ty) } {- ********************************************************************* ===================================== compiler/GHC/Tc/Utils/Unify.hs ===================================== @@ -305,7 +305,7 @@ Both ultimately handled by matchExpectedFunTys. * For the Lambda case there are two sub-cases: * An expression with a type signature: (\ @a x y -> blah) :: hs_ty This is handled by `GHC.Tc.Gen.Head.tcExprWithSig`, which kind-checks - the signature and hands off to `tcExprPolyCheck` vai `tcPolyLExprSig` + the signature and hands off to `tcExprPolyCheck` via `tcPolyLExprSig`. Note that the foralls at the top of hs_ty scope over the expression. * A higher order call: h e, where h :: poly_ty -> blah View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/03a8158bc65b0f19ad9b950c3b911c2e93ecea28 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/03a8158bc65b0f19ad9b950c3b911c2e93ecea28 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 07:48:26 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 17 Dec 2024 02:48:26 -0500 Subject: [Git][ghc/ghc][master] 2 commits: Improve GHC build times Message-ID: <67612cca31c0d_3f8dd384fd3c9419c@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 80f0e02d by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - 175a1355 by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - 17 changed files: - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/Opt/Specialise.hs - compiler/GHC/Core/SimpleOpt.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/Type.hs - compiler/GHC/Data/Unboxed.hs - compiler/GHC/Hs/Dump.hs - compiler/GHC/Tc/Solver/Equality.hs - compiler/GHC/Tc/TyCl.hs - compiler/GHC/Tc/Utils/TcType.hs - compiler/GHC/Types/Var.hs Changes: ===================================== compiler/GHC/Core.hs ===================================== @@ -14,9 +14,10 @@ module GHC.Core ( -- * In/Out type synonyms InId, InBind, InExpr, InAlt, InArg, InType, InKind, - InBndr, InVar, InCoercion, InTyVar, InCoVar, + InBndr, InVar, InCoercion, InTyVar, InCoVar, InTyCoVar, OutId, OutBind, OutExpr, OutAlt, OutArg, OutType, OutKind, - OutBndr, OutVar, OutCoercion, OutTyVar, OutCoVar, MOutCoercion, + OutBndr, OutVar, OutCoercion, OutTyVar, OutCoVar, + OutTyCoVar, MOutCoercion, -- ** 'Expr' construction mkLet, mkLets, mkLetNonRec, mkLetRec, mkLams, ===================================== compiler/GHC/Core/Coercion.hs ===================================== @@ -2283,7 +2283,7 @@ liftCoSubstTyVarBndrUsing view_co fun lc@(LC subst cenv) old_var stuff = fun lc old_kind eta = view_co stuff k1 = coercionLKind eta - new_var = uniqAway (getSubstInScope subst) (setVarType old_var k1) + new_var = uniqAway (substInScopeSet subst) (setVarType old_var k1) lifted = mkGReflRightCo Nominal (TyVarTy new_var) eta -- :: new_var ~ new_var |> eta @@ -2303,7 +2303,7 @@ liftCoSubstCoVarBndrUsing view_co fun lc@(LC subst cenv) old_var stuff = fun lc old_kind eta = view_co stuff k1 = coercionLKind eta - new_var = uniqAway (getSubstInScope subst) (setVarType old_var k1) + new_var = uniqAway (substInScopeSet subst) (setVarType old_var k1) -- old_var :: s1 ~r s2 -- eta :: (s1' ~r s2') ~N (t1 ~r t2) @@ -2387,7 +2387,7 @@ lcLookupCoVar (LC subst _) cv = lookupCoVar subst cv -- | Get the 'InScopeSet' from a 'LiftingContext' lcInScopeSet :: LiftingContext -> InScopeSet -lcInScopeSet (LC subst _) = getSubstInScope subst +lcInScopeSet (LC subst _) = substInScopeSet subst {- %************************************************************************ ===================================== compiler/GHC/Core/Lint.hs ===================================== @@ -82,7 +82,6 @@ import GHC.Types.Demand ( splitDmdSig, isDeadEndDiv ) import GHC.Builtin.Names import GHC.Builtin.Types.Prim -import GHC.Builtin.Types ( multiplicityTy ) import GHC.Data.Bag import GHC.Data.List.SetOps @@ -96,16 +95,16 @@ import GHC.Utils.Error import qualified GHC.Utils.Error as Err import GHC.Utils.Logger +import GHC.Data.Pair +import GHC.Base (oneShot) +import GHC.Data.Unboxed + import Control.Monad import Data.Foldable ( for_, toList ) import Data.List.NonEmpty ( NonEmpty(..), groupWith ) -import Data.List ( partition ) import Data.Maybe import Data.IntMap.Strict ( IntMap ) import qualified Data.IntMap.Strict as IntMap ( lookup, keys, empty, fromList ) -import GHC.Data.Pair -import GHC.Base (oneShot) -import GHC.Data.Unboxed {- Note [Core Lint guarantee] @@ -552,7 +551,7 @@ Check a core binding, returning the list of variables bound. -- Let lintRecBindings :: TopLevelFlag -> [(Id, CoreExpr)] - -> ([LintedId] -> LintM a) -> LintM (a, [UsageEnv]) + -> ([OutId] -> LintM a) -> LintM (a, [UsageEnv]) lintRecBindings top_lvl pairs thing_inside = lintIdBndrs top_lvl bndrs $ \ bndrs' -> do { ues <- zipWithM lint_pair bndrs' rhss @@ -566,14 +565,14 @@ lintRecBindings top_lvl pairs thing_inside ; lintLetBind top_lvl Recursive bndr' rhs rhs_ty ; return ue } -lintLetBody :: LintLocInfo -> [LintedId] -> CoreExpr -> LintM (LintedType, UsageEnv) +lintLetBody :: LintLocInfo -> [OutId] -> CoreExpr -> LintM (OutType, UsageEnv) lintLetBody loc bndrs body = do { (body_ty, body_ue) <- addLoc loc (lintCoreExpr body) ; mapM_ (lintJoinBndrType body_ty) bndrs ; return (body_ty, body_ue) } -lintLetBind :: TopLevelFlag -> RecFlag -> LintedId - -> CoreExpr -> LintedType -> LintM () +lintLetBind :: TopLevelFlag -> RecFlag -> OutId + -> CoreExpr -> OutType -> LintM () -- Binder's type, and the RHS, have already been linted -- This function checks other invariants lintLetBind top_lvl rec_flag binder rhs rhs_ty @@ -664,7 +663,7 @@ lintLetBind top_lvl rec_flag binder rhs rhs_ty -- join point. -- -- See Note [Checking StaticPtrs]. -lintRhs :: Id -> CoreExpr -> LintM (LintedType, UsageEnv) +lintRhs :: Id -> CoreExpr -> LintM (OutType, UsageEnv) -- NB: the Id can be Linted or not -- it's only used for -- its OccInfo and join-pointer-hood lintRhs bndr rhs @@ -696,7 +695,7 @@ lintRhs _bndr rhs = fmap lf_check_static_ptrs getLintFlags >>= go -- | Lint the RHS of a join point with expected join arity of @n@ (see Note -- [Join points] in "GHC.Core"). -lintJoinLams :: JoinArity -> Maybe Id -> CoreExpr -> LintM (LintedType, UsageEnv) +lintJoinLams :: JoinArity -> Maybe Id -> CoreExpr -> LintM (OutType, UsageEnv) lintJoinLams join_arity enforce rhs = go join_arity rhs where @@ -857,26 +856,7 @@ that: it really is a value, albeit a zero-bit value. ************************************************************************ -} --- Linted things: substitution applied, and type is linted -type LintedType = Type -type LintedKind = Kind -type LintedCoercion = Coercion -type LintedTyCoVar = TyCoVar -type LintedId = Id - --- | Lint an expression cast through the given coercion, returning the type --- resulting from the cast. -lintCastExpr :: CoreExpr -> LintedType -> Coercion -> LintM LintedType -lintCastExpr expr expr_ty co - = do { co' <- lintCoercion co - ; let (Pair from_ty to_ty, role) = coercionKindRole co' - ; checkValueType to_ty $ - text "target of cast" <+> quotes (ppr co') - ; lintRole co' Representational role - ; ensureEqTys from_ty expr_ty (mkCastErr expr co' from_ty expr_ty) - ; return to_ty } - -lintCoreExpr :: CoreExpr -> LintM (LintedType, UsageEnv) +lintCoreExpr :: InExpr -> LintM (OutType, UsageEnv) -- The returned type has the substitution from the monad -- already applied to it: -- lintCoreExpr e subst = exprType (subst e) @@ -887,29 +867,32 @@ lintCoreExpr :: CoreExpr -> LintM (LintedType, UsageEnv) -- See Note [GHC Formalism] lintCoreExpr (Var var) - = do - var_pair@(var_ty, _) <- lintIdOcc var 0 - -- See Note [Linting representation-polymorphic builtins] - checkRepPolyBuiltin (Var var) [] var_ty - --checkDataToTagPrimOpTyCon (Var var) [] - return var_pair + = do { var_pair@(var_ty, _) <- lintIdOcc var 0 + -- See Note [Linting representation-polymorphic builtins] + ; checkRepPolyBuiltin (Var var) [] var_ty + --checkDataToTagPrimOpTyCon (Var var) [] + ; return var_pair } lintCoreExpr (Lit lit) = return (literalType lit, zeroUE) lintCoreExpr (Cast expr co) - = do (expr_ty, ue) <- markAllJoinsBad (lintCoreExpr expr) + = do { (expr_ty, ue) <- markAllJoinsBad (lintCoreExpr expr) -- markAllJoinsBad: see Note [Join points and casts] - to_ty <- lintCastExpr expr expr_ty co - return (to_ty, ue) + + ; lintCoercion co + ; lintRole co Representational (coercionRole co) + ; Pair from_ty to_ty <- substCoKindM co + ; checkValueType (typeKind to_ty) $ + text "target of cast" <+> quotes (ppr co) + ; ensureEqTys from_ty expr_ty (mkCastErr expr co from_ty expr_ty) + ; return (to_ty, ue) } lintCoreExpr (Tick tickish expr) - = do case tickish of - Breakpoint _ _ ids _ -> forM_ ids $ \id -> do - checkDeadIdOcc id - lookupIdInScope id - _ -> return () - markAllJoinsBadIf block_joins $ lintCoreExpr expr + = do { case tickish of + Breakpoint _ _ ids _ -> forM_ ids $ \id -> lintIdOcc id 0 + _ -> return () + ; markAllJoinsBadIf block_joins $ lintCoreExpr expr } where block_joins = not (tickish `tickishScopesLike` SoftScope) -- TODO Consider whether this is the correct rule. It is consistent with @@ -921,12 +904,12 @@ lintCoreExpr (Tick tickish expr) lintCoreExpr (Let (NonRec tv (Type ty)) body) | isTyVar tv = -- See Note [Linting type lets] - do { ty' <- lintType ty - ; lintTyBndr tv $ \ tv' -> + do { ty' <- lintTypeAndSubst ty + ; lintTyCoBndr tv $ \ tv' -> do { addLoc (RhsOf tv) $ lintTyKind tv' ty' -- Now extend the substitution so we -- take advantage of it in the body - ; extendTvSubstL tv ty' $ + ; extendTvSubstL tv ty' $ addLoc (BodyOfLet tv) $ lintCoreExpr body } } @@ -939,7 +922,8 @@ lintCoreExpr (Let (NonRec bndr rhs) body) -- Now lint the binder ; lintBinder LetBind bndr $ \bndr' -> do { lintLetBind NotTopLevel NonRecursive bndr' rhs rhs_ty - ; addAliasUE bndr let_ue (lintLetBody (BodyOfLet bndr') [bndr'] body) } } + ; addAliasUE bndr' let_ue $ + lintLetBody (BodyOfLet bndr') [bndr'] body } } | otherwise = failWithL (mkLetErr bndr rhs) -- Not quite accurate @@ -967,20 +951,24 @@ lintCoreExpr e@(Let (Rec pairs) body) lintCoreExpr e@(App _ _) | Var fun <- fun , fun `hasKey` runRWKey + -- See Note [Linting of runRW#] -- N.B. we may have an over-saturated application of the form: -- runRW (\s -> \x -> ...) y - , ty_arg1 : ty_arg2 : arg3 : rest <- args - = do { fun_pair1 <- lintCoreArg (idType fun, zeroUE) ty_arg1 - ; (fun_ty2, ue2) <- lintCoreArg fun_pair1 ty_arg2 - -- See Note [Linting of runRW#] - ; let lintRunRWCont :: CoreArg -> LintM (LintedType, UsageEnv) - lintRunRWCont expr@(Lam _ _) = - lintJoinLams 1 (Just fun) expr - lintRunRWCont other = markAllJoinsBad $ lintCoreExpr other + , ty_arg1 : ty_arg2 : cont_arg : rest <- args + = do { let lint_rw_cont :: CoreArg -> Mult -> UsageEnv -> LintM (OutType, UsageEnv) + lint_rw_cont expr@(Lam _ _) mult fun_ue + = do { (arg_ty, arg_ue) <- lintJoinLams 1 (Just fun) expr + ; let app_ue = addUE fun_ue (scaleUE mult arg_ue) + ; return (arg_ty, app_ue) } + + lint_rw_cont expr mult ue + = lintValArg expr mult ue -- TODO: Look through ticks? - ; (arg3_ty, ue3) <- lintRunRWCont arg3 - ; app_ty <- lintValApp arg3 fun_ty2 arg3_ty ue2 ue3 - ; lintCoreArgs app_ty rest } + + ; runrw_pr <- lintApp (text "runRW# expression") + lintTyArg lint_rw_cont + (idType fun) [ty_arg1,ty_arg2,cont_arg] zeroUE + ; lintCoreArgs runrw_pr rest } | otherwise = do { fun_pair <- lintCoreFun fun (length args) @@ -1016,24 +1004,23 @@ lintCoreExpr (Lam var expr) lintCoreExpr (Case scrut var alt_ty alts) = lintCaseExpr scrut var alt_ty alts --- This case can't happen; linting types in expressions gets routed through --- lintCoreArgs +-- This case can't happen; linting types in expressions gets routed through lintTyArg lintCoreExpr (Type ty) = failWithL (text "Type found as expression" <+> ppr ty) lintCoreExpr (Coercion co) -- See Note [Coercions in terms] - = do { co' <- addLoc (InCo co) $ - lintCoercion co - ; return (coercionType co', zeroUE) } + = do { addLoc (InCo co) $ lintCoercion co + ; ty <- substTyM (coercionType co) + ; return (ty, zeroUE) } ---------------------- -lintIdOcc :: Var -> Int -- Number of arguments (type or value) being passed - -> LintM (LintedType, UsageEnv) -- returns type of the *variable* -lintIdOcc var nargs - = addLoc (OccOf var) $ - do { checkL (isNonCoVarId var) - (text "Non term variable" <+> ppr var) +lintIdOcc :: InId -> Int -- Number of arguments (type or value) being passed + -> LintM (OutType, UsageEnv) -- returns type of the *variable* +lintIdOcc in_id nargs + = addLoc (OccOf in_id) $ + do { checkL (isNonCoVarId in_id) + (text "Non term variable" <+> ppr in_id) -- See GHC.Core Note [Variable occurrences in Core] -- Check that the type of the occurrence is the same @@ -1047,32 +1034,31 @@ lintIdOcc var nargs -- (Maybe a) from the binding site with bogus (Maybe a1) from -- the occurrence site. Comparing un-substituted types finesses -- this altogether - ; (bndr, linted_bndr_ty) <- lookupIdInScope var - ; let occ_ty = idType var - bndr_ty = idType bndr - ; ensureEqTys occ_ty bndr_ty $ - mkBndrOccTypeMismatchMsg bndr var bndr_ty occ_ty + ; out_ty <- lintVarOcc in_id -- Check for a nested occurrence of the StaticPtr constructor. -- See Note [Checking StaticPtrs]. ; lf <- getLintFlags ; when (nargs /= 0 && lf_check_static_ptrs lf /= AllowAnywhere) $ - checkL (idName var /= makeStaticName) $ + checkL (idName in_id /= makeStaticName) $ text "Found makeStatic nested in an expression" - ; checkDeadIdOcc var - ; checkJoinOcc var nargs - ; case isDataConId_maybe var of + ; checkDeadIdOcc in_id + + ; case isDataConId_maybe in_id of Nothing -> return () Just dc -> checkTypeDataConOcc "expression" dc - ; usage <- varCallSiteUsage var + ; checkJoinOcc in_id nargs + ; usage <- varCallSiteUsage in_id + + ; return (out_ty, usage) } + - ; return (linted_bndr_ty, usage) } lintCoreFun :: CoreExpr -> Int -- Number of arguments (type or val) being passed - -> LintM (LintedType, UsageEnv) -- Returns type of the *function* + -> LintM (OutType, UsageEnv) -- Returns type of the *function* lintCoreFun (Var var) nargs = lintIdOcc var nargs @@ -1107,8 +1093,8 @@ checkDeadIdOcc id = return () ------------------ -lintJoinBndrType :: LintedType -- Type of the body - -> LintedId -- Possibly a join Id +lintJoinBndrType :: OutType -- Type of the body + -> OutId -- Possibly a join Id -> LintM () -- Checks that the return type of a join Id matches the body -- E.g. join j x = rhs in body @@ -1195,7 +1181,7 @@ checkDataToTagPrimOpTyCon _ _ = pure () -- See Note [Linting representation-polymorphic builtins]. checkRepPolyBuiltin :: CoreExpr -- ^ the function (head of the application) we are checking -> [CoreArg] -- ^ the arguments to the application - -> LintedType -- ^ the instantiated type of the overall application + -> OutType -- ^ the instantiated type of the overall application -> LintM () checkRepPolyBuiltin (Var fun_id) args app_ty = do { do_rep_poly_checks <- lf_check_fixed_rep <$> getLintFlags @@ -1214,7 +1200,7 @@ checkRepPolyBuiltin (Var fun_id) args app_ty } checkRepPolyBuiltin _ _ _ = return () -checkRepPolyNewtypeApp :: DataCon -> [CoreArg] -> LintedType -> LintM () +checkRepPolyNewtypeApp :: DataCon -> [CoreArg] -> OutType -> LintM () checkRepPolyNewtypeApp nt args app_ty -- If the newtype is saturated, we're OK. | any isValArg args @@ -1333,13 +1319,14 @@ concreteTyVarPositions fun_id conc_tvs -- Check that the usage of var is consistent with var itself, and pop the var -- from the usage environment (this is important because of shadowing). -checkLinearity :: UsageEnv -> Var -> LintM UsageEnv +checkLinearity :: UsageEnv -> OutVar -> LintM UsageEnv checkLinearity body_ue lam_var = case varMultMaybe lam_var of Just mult -> do let (lhs, body_ue') = popUE body_ue lam_var - err_msg = text "Linearity failure in lambda:" <+> ppr lam_var - $$ ppr lhs <+> text "⊈" <+> ppr mult + err_msg = vcat [ text "Linearity failure in lambda:" <+> ppr lam_var + , ppr lhs <+> text "⊈" <+> ppr mult + , ppr body_ue ] ensureSubUsage lhs mult err_msg return body_ue' Nothing -> return body_ue -- A type variable @@ -1461,33 +1448,28 @@ subtype of the required type, as one would expect. -- Takes the functions type and arguments as argument. -- Returns the *result* of applying the function to arguments. -- e.g. f :: Int -> Bool -> Int would return `Int` as result type. -lintCoreArgs :: (LintedType, UsageEnv) -> [CoreArg] -> LintM (LintedType, UsageEnv) -lintCoreArgs (fun_ty, fun_ue) args = foldM lintCoreArg (fun_ty, fun_ue) args +lintCoreArgs :: (OutType, UsageEnv) -> [InExpr] -> LintM (OutType, UsageEnv) +lintCoreArgs (fun_ty, fun_ue) args + = lintApp (text "expression") + lintTyArg lintValArg fun_ty args fun_ue -lintCoreArg :: (LintedType, UsageEnv) -> CoreArg -> LintM (LintedType, UsageEnv) +lintTyArg :: InExpr -> LintM OutType -- Type argument -lintCoreArg (fun_ty, ue) (Type arg_ty) +lintTyArg (Type arg_ty) = do { checkL (not (isCoercionTy arg_ty)) (text "Unnecessary coercion-to-type injection:" <+> ppr arg_ty) - ; arg_ty' <- lintType arg_ty - ; res <- lintTyApp fun_ty arg_ty' - ; return (res, ue) } - --- Coercion argument -lintCoreArg (fun_ty, ue) (Coercion co) - = do { co' <- addLoc (InCo co) $ - lintCoercion co - ; res <- lintCoApp fun_ty co' - ; return (res, ue) } - --- Other value argument -lintCoreArg (fun_ty, fun_ue) arg + ; lintTypeAndSubst arg_ty } +lintTyArg arg + = failWithL (hang (text "Expected type argument but found") 2 (ppr arg)) + +lintValArg :: InExpr -> Mult -> UsageEnv -> LintM (OutType, UsageEnv) +lintValArg arg mult fun_ue = do { (arg_ty, arg_ue) <- markAllJoinsBad $ lintCoreExpr arg -- See Note [Representation polymorphism invariants] in GHC.Core - ; flags <- getLintFlags + ; flags <- getLintFlags ; when (lf_check_fixed_rep flags) $ -- Only check that 'arg_ty' has a fixed RuntimeRep -- if 'lf_check_fixed_rep' is on. @@ -1496,13 +1478,14 @@ lintCoreArg (fun_ty, fun_ue) arg <+> ppr arg <+> dcolon <+> parens (ppr arg_ty <+> dcolon <+> ppr (typeKind arg_ty))) } - ; lintValApp arg fun_ty arg_ty fun_ue arg_ue } + ; let app_ue = addUE fun_ue (scaleUE mult arg_ue) + ; return (arg_ty, app_ue) } ----------------- lintAltBinders :: UsageEnv -> Var -- Case binder - -> LintedType -- Scrutinee type - -> LintedType -- Constructor type + -> OutType -- Scrutinee type + -> OutType -- Constructor type -> [(Mult, OutVar)] -- Binders -> LintM UsageEnv -- If you edit this function, you may need to update the GHC formalism @@ -1545,7 +1528,7 @@ checkCaseLinearity ue case_bndr var_w bndr = do ----------------- -lintTyApp :: LintedType -> LintedType -> LintM LintedType +lintTyApp :: OutType -> OutType -> LintM OutType lintTyApp fun_ty arg_ty | Just (tv,body_ty) <- splitForAllTyVar_maybe fun_ty = do { lintTyKind tv arg_ty @@ -1558,35 +1541,13 @@ lintTyApp fun_ty arg_ty | otherwise = failWithL (mkTyAppMsg fun_ty arg_ty) ------------------ -lintCoApp :: LintedType -> LintedCoercion -> LintM LintedType -lintCoApp fun_ty co - | Just (cv,body_ty) <- splitForAllCoVar_maybe fun_ty - , let co_ty = coercionType co - cv_ty = idType cv - , cv_ty `eqType` co_ty - = do { in_scope <- getInScope - ; let init_subst = mkEmptySubst in_scope - subst = extendCvSubst init_subst cv co - ; return (substTy subst body_ty) } - - | Just (_, _, arg_ty', res_ty') <- splitFunTy_maybe fun_ty - , co_ty `eqType` arg_ty' - = return (res_ty') - - | otherwise - = failWithL (mkCoAppMsg fun_ty co) - - where - co_ty = coercionType co - ----------------- -- | @lintValApp arg fun_ty arg_ty@ lints an application of @fun arg@ -- where @fun :: fun_ty@ and @arg :: arg_ty@, returning the type of the -- application. -lintValApp :: CoreExpr -> LintedType -> LintedType -> UsageEnv -> UsageEnv - -> LintM (LintedType, UsageEnv) +lintValApp :: CoreExpr -> OutType -> OutType -> UsageEnv -> UsageEnv + -> LintM (OutType, UsageEnv) lintValApp arg fun_ty arg_ty fun_ue arg_ue | Just (_, w, arg_ty', res_ty') <- splitFunTy_maybe fun_ty = do { ensureEqTys arg_ty' arg_ty (mkAppMsg arg_ty' arg_ty arg) @@ -1597,7 +1558,7 @@ lintValApp arg fun_ty arg_ty fun_ue arg_ue where err2 = mkNonFunAppMsg fun_ty arg_ty arg -lintTyKind :: OutTyVar -> LintedType -> LintM () +lintTyKind :: OutTyVar -> OutType -> LintM () -- Both args have had substitution applied -- If you edit this function, you may need to update the GHC formalism @@ -1607,7 +1568,7 @@ lintTyKind tyvar arg_ty addErrL (mkKindErrMsg tyvar arg_ty $$ (text "Linted Arg kind:" <+> ppr arg_kind)) where tyvar_kind = tyVarKind tyvar - arg_kind = typeKind arg_ty + arg_kind = typeKind arg_ty {- ************************************************************************ @@ -1617,86 +1578,92 @@ lintTyKind tyvar arg_ty ************************************************************************ -} -lintCaseExpr :: CoreExpr -> Id -> Type -> [CoreAlt] -> LintM (LintedType, UsageEnv) -lintCaseExpr scrut var alt_ty alts = - do { let e = Case scrut var alt_ty alts -- Just for error messages - - -- Check the scrutinee - ; (scrut_ty, scrut_ue) <- markAllJoinsBad $ lintCoreExpr scrut - -- See Note [Join points are less general than the paper] - -- in GHC.Core - ; let scrut_mult = idMult var - - ; alt_ty <- addLoc (CaseTy scrut) $ - lintValueType alt_ty - ; var_ty <- addLoc (IdTy var) $ - lintValueType (idType var) - - -- We used to try to check whether a case expression with no - -- alternatives was legitimate, but this didn't work. - -- See Note [No alternatives lint check] for details. - - -- Check that the scrutinee is not a floating-point type - -- if there are any literal alternatives - -- See GHC.Core Note [Case expression invariants] item (5) - -- See Note [Rules for floating-point comparisons] in GHC.Core.Opt.ConstantFold - ; let isLitPat (Alt (LitAlt _) _ _) = True - isLitPat _ = False - ; checkL (not $ isFloatingPrimTy scrut_ty && any isLitPat alts) - (text "Lint warning: Scrutinising floating-point expression with literal pattern in case analysis (see #9238)." - $$ text "scrut" <+> ppr scrut) - - ; case tyConAppTyCon_maybe (idType var) of - Just tycon - | debugIsOn - , isAlgTyCon tycon - , not (isAbstractTyCon tycon) - , null (tyConDataCons tycon) - , not (exprIsDeadEnd scrut) - -> pprTrace "Lint warning: case binder's type has no constructors" (ppr var <+> ppr (idType var)) - -- This can legitimately happen for type families - $ return () - _otherwise -> return () - - -- Don't use lintIdBndr on var, because unboxed tuple is legitimate - - ; subst <- getSubst - ; ensureEqTys var_ty scrut_ty (mkScrutMsg var var_ty scrut_ty subst) - -- See GHC.Core Note [Case expression invariants] item (7) - - ; lintBinder CaseBind var $ \_ -> - do { -- Check the alternatives - ; alt_ues <- mapM (lintCoreAlt var scrut_ty scrut_mult alt_ty) alts - ; let case_ue = (scaleUE scrut_mult scrut_ue) `addUE` supUEs alt_ues - ; checkCaseAlts e scrut_ty alts - ; return (alt_ty, case_ue) } } - -checkCaseAlts :: CoreExpr -> LintedType -> [CoreAlt] -> LintM () +lintCaseExpr :: CoreExpr -> InId -> InType -> [CoreAlt] -> LintM (OutType, UsageEnv) +lintCaseExpr scrut case_bndr alt_ty alts + = do { let e = Case scrut case_bndr alt_ty alts -- Just for error messages + + -- Check the scrutinee + ; (scrut_ty', scrut_ue) <- markAllJoinsBad $ lintCoreExpr scrut + -- See Note [Join points are less general than the paper] + -- in GHC.Core + + ; alt_ty' <- addLoc (CaseTy scrut) $ lintValueType alt_ty + + ; checkCaseAlts e scrut scrut_ty' alts + + -- Lint the case-binder. Must do this after linting the scrutinee + -- because the case-binder isn't in scope in the scrutineex + ; lintBinder CaseBind case_bndr $ \case_bndr' -> + -- Don't use lintIdBndr on case_bndr, because unboxed tuple is legitimate + + do { let case_bndr_ty' = idType case_bndr' + scrut_mult = idMult case_bndr' + + ; ensureEqTys case_bndr_ty' scrut_ty' (mkScrutMsg case_bndr case_bndr_ty' scrut_ty') + -- See GHC.Core Note [Case expression invariants] item (7) + + ; -- Check the alternatives + ; alt_ues <- mapM (lintCoreAlt case_bndr' scrut_ty' scrut_mult alt_ty') alts + ; let case_ue = (scaleUE scrut_mult scrut_ue) `addUE` supUEs alt_ues + ; return (alt_ty', case_ue) } } + +checkCaseAlts :: InExpr -> InExpr -> OutType -> [CoreAlt] -> LintM () -- a) Check that the alts are non-empty -- b1) Check that the DEFAULT comes first, if it exists -- b2) Check that the others are in increasing order -- c) Check that there's a default for infinite types +-- d) Check that the scrutinee is not a floating-point type +-- if there are any literal alternatives +-- e) Check if the scrutinee type has no constructors +-- +-- We used to try to check whether a case expression with no +-- alternatives was legitimate, but this didn't work. +-- See Note [No alternatives lint check] for details. +-- -- NB: Algebraic cases are not necessarily exhaustive, because -- the simplifier correctly eliminates case that can't -- possibly match. - -checkCaseAlts e ty alts = - do { checkL (all non_deflt con_alts) (mkNonDefltMsg e) - -- See GHC.Core Note [Case expression invariants] item (2) - - ; checkL (increasing_tag con_alts) (mkNonIncreasingAltsMsg e) - -- See GHC.Core Note [Case expression invariants] item (3) - - -- For types Int#, Word# with an infinite (well, large!) number of - -- possible values, there should usually be a DEFAULT case - -- But (see Note [Empty case alternatives] in GHC.Core) it's ok to - -- have *no* case alternatives. - -- In effect, this is a kind of partial test. I suppose it's possible - -- that we might *know* that 'x' was 1 or 2, in which case - -- case x of { 1 -> e1; 2 -> e2 } - -- would be fine. - ; checkL (isJust maybe_deflt || not is_infinite_ty || null alts) - (nonExhaustiveAltsMsg e) } +checkCaseAlts e scrut scrut_ty alts + = do { checkL (all non_deflt con_alts) (mkNonDefltMsg e) + -- See GHC.Core Note [Case expression invariants] item (2) + + ; checkL (increasing_tag con_alts) (mkNonIncreasingAltsMsg e) + -- See GHC.Core Note [Case expression invariants] item (3) + + -- For types Int#, Word# with an infinite (well, large!) number of + -- possible values, there should usually be a DEFAULT case + -- But (see Note [Empty case alternatives] in GHC.Core) it's ok to + -- have *no* case alternatives. + -- In effect, this is a kind of partial test. I suppose it's possible + -- that we might *know* that 'x' was 1 or 2, in which case + -- case x of { 1 -> e1; 2 -> e2 } + -- would be fine. + ; checkL (isJust maybe_deflt || not is_infinite_ty || null alts) + (nonExhaustiveAltsMsg e) + + -- Check that the scrutinee is not a floating-point type + -- if there are any literal alternatives + -- See GHC.Core Note [Case expression invariants] item (5) + -- See Note [Rules for floating-point comparisons] in GHC.Core.Opt.ConstantFold + ; checkL (not $ isFloatingPrimTy scrut_ty && any is_lit_alt alts) + (text "Lint warning: Scrutinising floating-point expression with literal pattern in case analysis (see #9238)." + $$ text "scrut" <+> ppr scrut) + + -- Check if scrutinee type has no constructors + -- Just a trace message for now + ; case tyConAppTyCon_maybe scrut_ty of + Just tycon + | debugIsOn + , isAlgTyCon tycon + , not (isAbstractTyCon tycon) + , null (tyConDataCons tycon) + , not (exprIsDeadEnd scrut) + -> pprTrace "Lint warning: case scrutinee type has no constructors" + (ppr scrut_ty) + -- This can legitimately happen for type families + $ return () + _otherwise -> return () + } where (con_alts, maybe_deflt) = findDefault alts @@ -1707,21 +1674,24 @@ checkCaseAlts e ty alts = non_deflt (Alt DEFAULT _ _) = False non_deflt _ = True - is_infinite_ty = case tyConAppTyCon_maybe ty of + is_lit_alt (Alt (LitAlt _) _ _) = True + is_lit_alt _ = False + + is_infinite_ty = case tyConAppTyCon_maybe scrut_ty of Nothing -> False Just tycon -> isPrimTyCon tycon -lintAltExpr :: CoreExpr -> LintedType -> LintM UsageEnv +lintAltExpr :: CoreExpr -> OutType -> LintM UsageEnv lintAltExpr expr ann_ty = do { (actual_ty, ue) <- lintCoreExpr expr ; ensureEqTys actual_ty ann_ty (mkCaseAltMsg expr actual_ty ann_ty) ; return ue } -- See GHC.Core Note [Case expression invariants] item (6) -lintCoreAlt :: Var -- Case binder - -> LintedType -- Type of scrutinee - -> Mult -- Multiplicity of scrutinee - -> LintedType -- Type of the alternative +lintCoreAlt :: OutId -- Case binder + -> OutType -- Type of scrutinee + -> Mult -- Multiplicity of scrutinee + -> OutType -- Type of the alternative -> CoreAlt -> LintM UsageEnv -- If you edit this function, you may need to update the GHC formalism @@ -1730,8 +1700,8 @@ lintCoreAlt case_bndr _ scrut_mult alt_ty (Alt DEFAULT args rhs) = do { lintL (null args) (mkDefaultArgsMsg args) ; rhs_ue <- lintAltExpr rhs alt_ty ; let (case_bndr_usage, rhs_ue') = popUE rhs_ue case_bndr - err_msg = text "Linearity failure in the DEFAULT clause:" <+> ppr case_bndr - $$ ppr case_bndr_usage <+> text "⊈" <+> ppr scrut_mult + err_msg = vcat [ text "Linearity failure in the DEFAULT clause:" <+> ppr case_bndr + , ppr case_bndr_usage <+> text "⊈" <+> ppr scrut_mult ] ; ensureSubUsage case_bndr_usage scrut_mult err_msg ; return rhs_ue' } @@ -1765,9 +1735,10 @@ lintCoreAlt case_bndr scrut_ty _scrut_mult alt_ty alt@(Alt (DataAlt con) args rh -- And now bring the new binders into scope ; lintBinders CasePatBind args $ \ args' -> do - { - rhs_ue <- lintAltExpr rhs alt_ty - ; rhs_ue' <- addLoc (CasePat alt) (lintAltBinders rhs_ue case_bndr scrut_ty con_payload_ty (zipEqual "lintCoreAlt" multiplicities args')) + { rhs_ue <- lintAltExpr rhs alt_ty + ; rhs_ue' <- addLoc (CasePat alt) $ + lintAltBinders rhs_ue case_bndr scrut_ty con_payload_ty + (zipEqual "lintCoreAlt" multiplicities args') ; return $ deleteUE rhs_ue' case_bndr } } @@ -1812,7 +1783,7 @@ lintLinearBinder doc actual_usage described_usage -- 1. Lint var types or kinds (possibly substituting) -- 2. Add the binder to the in scope set, and if its a coercion var, -- we may extend the substitution to reflect its (possibly) new kind -lintBinders :: BindingSite -> [Var] -> ([Var] -> LintM a) -> LintM a +lintBinders :: HasDebugCallStack => BindingSite -> [InVar] -> ([OutVar] -> LintM a) -> LintM a lintBinders _ [] linterF = linterF [] lintBinders site (var:vars) linterF = lintBinder site var $ \var' -> lintBinders site vars $ \ vars' -> @@ -1820,36 +1791,30 @@ lintBinders site (var:vars) linterF = lintBinder site var $ \var' -> -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] -lintBinder :: BindingSite -> Var -> (Var -> LintM a) -> LintM a +lintBinder :: HasDebugCallStack => BindingSite -> InVar -> (OutVar -> LintM a) -> LintM a lintBinder site var linterF | isTyCoVar var = lintTyCoBndr var linterF | otherwise = lintIdBndr NotTopLevel site var linterF -lintTyBndr :: TyVar -> (LintedTyCoVar -> LintM a) -> LintM a -lintTyBndr = lintTyCoBndr -- We could specialise it, I guess - -lintTyCoBndr :: TyCoVar -> (LintedTyCoVar -> LintM a) -> LintM a +lintTyCoBndr :: HasDebugCallStack => TyCoVar -> (OutTyCoVar -> LintM a) -> LintM a lintTyCoBndr tcv thing_inside - = do { subst <- getSubst - ; tcv_type' <- lintType (varType tcv) - ; let tcv' = uniqAway (getSubstInScope subst) $ - setVarType tcv tcv_type' - subst' = extendTCvSubstWithClone subst tcv tcv' + = do { tcv_type' <- lintTypeAndSubst (varType tcv) + ; let tcv_kind' = typeKind tcv_type' - -- See (FORALL1) and (FORALL2) in GHC.Core.Type + -- See (FORALL1) and (FORALL2) in GHC.Core.Type ; if (isTyVar tcv) then -- Check that in (forall (a:ki). blah) we have ki:Type - lintL (isLiftedTypeKind (typeKind tcv_type')) $ + lintL (isLiftedTypeKind tcv_kind') $ hang (text "TyVar whose kind does not have kind Type:") - 2 (ppr tcv' <+> dcolon <+> ppr tcv_type' <+> dcolon <+> ppr (typeKind tcv_type')) + 2 (ppr tcv <+> dcolon <+> ppr tcv_type' <+> dcolon <+> ppr tcv_kind') else -- Check that in (forall (cv::ty). blah), -- then ty looks like (t1 ~# t2) lintL (isCoVarType tcv_type') $ text "CoVar with non-coercion type:" <+> pprTyVar tcv - ; updateSubst subst' (thing_inside tcv') } + ; addInScopeTyCoVar tcv tcv_type' thing_inside } -lintIdBndrs :: forall a. TopLevelFlag -> [Id] -> ([LintedId] -> LintM a) -> LintM a +lintIdBndrs :: forall a. TopLevelFlag -> [InId] -> ([OutId] -> LintM a) -> LintM a lintIdBndrs top_lvl ids thing_inside = go ids thing_inside where @@ -1900,10 +1865,9 @@ lintIdBndr top_lvl bind_site id thing_inside ; lintL (not (bind_site == LambdaBind && isEvaldUnfolding (idUnfolding id))) (text "Lambda binder with value or OtherCon unfolding.") - ; linted_ty <- addLoc (IdTy id) (lintValueType id_ty) + ; out_ty <- addLoc (IdTy id) (lintValueType id_ty) - ; addInScopeId id linted_ty $ - thing_inside (setIdType id linted_ty) } + ; addInScopeId id out_ty thing_inside } where id_ty = idType id @@ -1920,13 +1884,47 @@ lintIdBndr top_lvl bind_site id thing_inside %************************************************************************ -} -lintValueType :: Type -> LintM LintedType +{- Note [Linting types and coercions] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Notice that + lintType :: InType -> LintM () + lintCoercion :: InCoercion -> LintM () +Neither returns anything. + +If you need the kind of the type, then do `typeKind` and then apply +the ambient substitution using `substTyM`. Note that the substitution +empty unless there is shadowing or type-lets; and if the substitution is +empty, the `substTyM` is a no-op. + +It is better to take the kind and then substitute, rather than substitute +and then take the kind, becaues the kind is usually smaller. + +Note: you might wonder if we should apply the same logic to expressions. +Why do we have + lintExpr :: InExpr -> LintM OutType +Partly inertia; but also taking the type of an expresison involve looking +down a deep chain of let's, whereas that is not true of taking the kind +of a type. It'd be worth an experiment though. + +Historical note: in the olden days we had + lintType :: InType -> LintM OutType +but that burned a huge amount of allocation building an OutType that was +often discarded, or used only to get its kind. + +I also experimented with + lintType :: InType -> LintM OutKind +but that too was slower. It is also much simpler to return ()! If we +return the kind we have to duplicate the logic in `typeKind`; and it is +much worse for coercions. +-} + +lintValueType :: Type -> LintM OutType -- Types only, not kinds -- Check the type, and apply the substitution to it -- See Note [Linting type lets] lintValueType ty = addLoc (InType ty) $ - do { ty' <- lintType ty + do { ty' <- lintTypeAndSubst ty ; let sk = typeKind ty' ; lintL (isTYPEorCONSTRAINT sk) $ hang (text "Ill-kinded type:" <+> ppr ty) @@ -1938,15 +1936,15 @@ checkTyCon tc = checkL (not (isTcTyCon tc)) (text "Found TcTyCon:" <+> ppr tc) ------------------- -checkTyCoVarInScope :: Subst -> TyCoVar -> LintM () -checkTyCoVarInScope subst tcv - = checkL (tcv `isInScope` subst) $ - hang (text "The type or coercion variable" <+> pprBndr LetBind tcv) - 2 (text "is out of scope") - -------------------- -lintType :: Type -> LintM LintedType +lintTypeAndSubst :: InType -> LintM OutType +lintTypeAndSubst ty = do { lintType ty; substTyM ty } + -- In GHCi we may lint an expression with a free + -- type variable. Then it won't be in the + -- substitution, but it should be in scope +lintType :: InType -> LintM () +-- See Note [Linting types and coercions] +-- -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] lintType (TyVarTy tv) @@ -1954,25 +1952,20 @@ lintType (TyVarTy tv) = failWithL (mkBadTyVarMsg tv) | otherwise - = do { subst <- getSubst - ; case lookupTyVar subst tv of - Just linted_ty -> return linted_ty - - -- In GHCi we may lint an expression with a free - -- type variable. Then it won't be in the - -- substitution, but it should be in scope - Nothing -> do { checkTyCoVarInScope subst tv - ; return (TyVarTy tv) } - } + = do { _ <- lintVarOcc tv + ; return () } lintType ty@(AppTy t1 t2) | TyConApp {} <- t1 = failWithL $ text "TyConApp to the left of AppTy:" <+> ppr ty | otherwise - = do { t1' <- lintType t1 - ; t2' <- lintType t2 - ; lint_ty_app ty (typeKind t1') [t2'] - ; return (AppTy t1' t2') } + = do { let (fun_ty, arg_tys) = collect t1 [t2] + ; lintType fun_ty + ; fun_kind <- substTyM (typeKind fun_ty) + ; lint_ty_app ty fun_kind arg_tys } + where + collect (AppTy f a) as = collect f (a:as) + collect fun as = (fun, as) lintType ty@(TyConApp tc tys) | isTypeSynonymTyCon tc || isTypeFamilyTyCon tc @@ -1987,78 +1980,68 @@ lintType ty@(TyConApp tc tys) | otherwise -- Data types, data families, primitive types = do { checkTyCon tc - ; tys' <- mapM lintType tys - ; lint_ty_app ty (tyConKind tc) tys' - ; return (TyConApp tc tys') } + ; lint_ty_app ty (tyConKind tc) tys } -- arrows can related *unlifted* kinds, so this has to be separate from -- a dependent forall. lintType ty@(FunTy af tw t1 t2) - = do { t1' <- lintType t1 - ; t2' <- lintType t2 - ; tw' <- lintType tw - ; lintArrow (text "type or kind" <+> quotes (ppr ty)) t1' t2' tw' - ; let real_af = chooseFunTyFlag t1 t2 - ; unless (real_af == af) $ addErrL $ - hang (text "Bad FunTyFlag in FunTy") - 2 (vcat [ ppr ty - , text "FunTyFlag =" <+> ppr af - , text "Computed FunTyFlag =" <+> ppr real_af ]) - ; return (FunTy af tw' t1' t2') } - -lintType ty@(ForAllTy (Bndr tcv vis) body_ty) - | not (isTyCoVar tcv) - = failWithL (text "Non-Tyvar or Non-Covar bound in type:" <+> ppr ty) - | otherwise - = lintTyCoBndr tcv $ \tcv' -> - do { body_ty' <- lintType body_ty - ; lintForAllBody tcv' body_ty' + = do { lintType t1 + ; lintType t2 + ; lintType tw + ; lintArrow (text "type or kind" <+> quotes (ppr ty)) af t1 t2 tw } + +lintType ty@(ForAllTy {}) + = go [] ty + where + go :: [OutTyCoVar] -> InType -> LintM () + -- Loop, collecting the forall-binders + go tcvs ty@(ForAllTy (Bndr tcv _) body_ty) + | not (isTyCoVar tcv) + = failWithL (text "Non-TyVar or Non-CoVar bound in type:" <+> ppr ty) - ; when (isCoVar tcv) $ - lintL (tcv `elemVarSet` tyCoVarsOfType body_ty) $ - text "Covar does not occur in the body:" <+> (ppr tcv $$ ppr body_ty) - -- See GHC.Core.TyCo.Rep Note [Unused coercion variable in ForAllTy] + | otherwise + = lintTyCoBndr tcv $ \tcv' -> + do { -- See GHC.Core.TyCo.Rep Note [Unused coercion variable in ForAllTy] + -- Suspicious because it works on InTyCoVar; c.f. ForAllCo + when (isCoVar tcv) $ + lintL (anyFreeVarsOfType (== tcv) body_ty) $ + text "Covar does not occur in the body:" <+> (ppr tcv $$ ppr body_ty) - ; return (ForAllTy (Bndr tcv' vis) body_ty') } + ; go (tcv' : tcvs) body_ty } -lintType ty@(LitTy l) - = do { lintTyLit l; return ty } + go tcvs body_ty + = do { lintType body_ty + ; lintForAllBody tcvs body_ty } lintType (CastTy ty co) - = do { ty' <- lintType ty - ; co' <- lintStarCoercion co - ; let tyk = typeKind ty' - cok = coercionLKind co' - ; ensureEqTys tyk cok (mkCastTyErr ty co tyk cok) - ; return (CastTy ty' co') } + = do { lintType ty + ; ty_kind <- substTyM (typeKind ty) + ; co_lk <- lintStarCoercion co + ; ensureEqTys ty_kind co_lk (mkCastTyErr ty co ty_kind co_lk) } -lintType (CoercionTy co) - = do { co' <- lintCoercion co - ; return (CoercionTy co') } +lintType (LitTy l) = lintTyLit l +lintType (CoercionTy co) = lintCoercion co ----------------- -lintForAllBody :: LintedTyCoVar -> LintedType -> LintM () +lintForAllBody :: [OutTyCoVar] -> InType -> LintM () -- Do the checks for the body of a forall-type -lintForAllBody tcv body_ty - = do { checkValueType body_ty (text "the body of forall:" <+> ppr body_ty) - - -- For type variables, check for skolem escape +lintForAllBody tcvs body_ty + = do { -- For type variables, check for skolem escape -- See Note [Phantom type variables in kinds] in GHC.Core.Type -- The kind of (forall cv. th) is liftedTypeKind, so no -- need to check for skolem-escape in the CoVar case - ; let body_kind = typeKind body_ty - ; when (isTyVar tcv) $ - case occCheckExpand [tcv] body_kind of + body_kind <- substTyM (typeKind body_ty) + ; case occCheckExpand tcvs body_kind of Just {} -> return () Nothing -> failWithL $ hang (text "Variable escape in forall:") - 2 (vcat [ text "tyvar:" <+> ppr tcv + 2 (vcat [ text "tycovars (reversed):" <+> ppr tcvs , text "type:" <+> ppr body_ty , text "kind:" <+> ppr body_kind ]) - } + ; checkValueType body_kind (text "the body of forall:" <+> ppr body_ty) } ----------------- -lintTySynFamApp :: Bool -> InType -> TyCon -> [InType] -> LintM LintedType +lintTySynFamApp :: Bool -> InType -> TyCon -> [InType] -> LintM () -- The TyCon is a type synonym or a type family (not a data family) -- See Note [Linting type synonym applications] -- c.f. GHC.Tc.Validity.check_syn_tc_app @@ -2070,63 +2053,51 @@ lintTySynFamApp report_unsat ty tc tys -- Deal with type synonyms | ExpandsSyn tenv rhs tys' <- expandSynTyCon_maybe tc tys , let expanded_ty = mkAppTys (substTy (mkTvSubstPrs tenv) rhs) tys' - = do { -- Kind-check the argument types, but without reporting - -- un-saturated type families/synonyms - tys' <- setReportUnsat False (mapM lintType tys) - - ; when report_unsat $ - do { _ <- lintType expanded_ty - ; return () } + = do { when report_unsat $ do { _ <- lintType expanded_ty + ; return () } - ; lint_ty_app ty (tyConKind tc) tys' - ; return (TyConApp tc tys') } + ; -- Kind-check the argument types, but without reporting + -- un-saturated type families/synonyms + ; setReportUnsat False $ + lint_ty_app ty (tyConKind tc) tys } -- Otherwise this must be a type family | otherwise - = do { tys' <- mapM lintType tys - ; lint_ty_app ty (tyConKind tc) tys' - ; return (TyConApp tc tys') } + = lint_ty_app ty (tyConKind tc) tys ----------------- --- Confirms that a type is really TYPE r or Constraint -checkValueType :: LintedType -> SDoc -> LintM () -checkValueType ty doc +-- Confirms that a kind is really TYPE r or Constraint +checkValueType :: OutKind -> SDoc -> LintM () +checkValueType kind doc = lintL (isTYPEorCONSTRAINT kind) (text "Non-Type-like kind when Type-like expected:" <+> ppr kind $$ text "when checking" <+> doc) - where - kind = typeKind ty ----------------- -lintArrow :: SDoc -> LintedType -> LintedType -> LintedType -> LintM () +lintArrow :: SDoc -> FunTyFlag -> InType -> InType -> InType -> LintM () -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] -lintArrow what t1 t2 tw -- Eg lintArrow "type or kind `blah'" k1 k2 kw - -- or lintArrow "coercion `blah'" k1 k2 kw - = do { unless (isTYPEorCONSTRAINT k1) (report (text "argument") k1) - ; unless (isTYPEorCONSTRAINT k2) (report (text "result") k2) - ; unless (isMultiplicityTy kw) (report (text "multiplicity") kw) } +lintArrow what af t1 t2 tw -- Eg lintArrow "type or kind `blah'" k1 k2 kw + -- or lintArrow "coercion `blah'" k1 k2 kw + = do { k1 <- substTyM (typeKind t1) + ; k2 <- substTyM (typeKind t2) + ; kw <- substTyM (typeKind tw) + ; unless (isTYPEorCONSTRAINT k1) (report (text "argument") t1 k1) + ; unless (isTYPEorCONSTRAINT k2) (report (text "result") t2 k2) + ; unless (isMultiplicityTy kw) (report (text "multiplicity") tw kw) + + ; let real_af = chooseFunTyFlag t1 t2 + ; unless (real_af == af) $ addErrL $ + hang (text "Bad FunTyFlag") + 2 (vcat [ text "FunTyFlag =" <+> ppr af + , text "Computed FunTyFlag =" <+> ppr real_af + , text "in" <+> what ]) } where - k1 = typeKind t1 - k2 = typeKind t2 - kw = typeKind tw - report ar k = addErrL (vcat [ hang (text "Ill-kinded" <+> ar) - 2 (text "in" <+> what) - , what <+> text "kind:" <+> ppr k ]) + report ar t k = addErrL (hang (text "Ill-kinded" <+> ar) + 2 (vcat [ ppr t <+> dcolon <+> ppr k + , text "in" <+> what ])) ----------------- -lint_ty_app :: Type -> LintedKind -> [LintedType] -> LintM () -lint_ty_app msg_ty k tys - -- See Note [Avoiding compiler perf traps when constructing error messages.] - = lint_app (\msg_ty -> text "type" <+> quotes (ppr msg_ty)) msg_ty k tys - ----------------- -lint_co_app :: Coercion -> LintedKind -> [LintedType] -> LintM () -lint_co_app msg_ty k tys - -- See Note [Avoiding compiler perf traps when constructing error messages.] - = lint_app (\msg_ty -> text "coercion" <+> quotes (ppr msg_ty)) msg_ty k tys - ----------------- lintTyLit :: TyLit -> LintM () lintTyLit (NumTyLit n) | n >= 0 = return () @@ -2135,69 +2106,112 @@ lintTyLit (NumTyLit n) lintTyLit (StrTyLit _) = return () lintTyLit (CharTyLit _) = return () -lint_app :: Outputable msg_thing => (msg_thing -> SDoc) -> msg_thing -> LintedKind -> [LintedType] -> LintM () --- (lint_app d fun_kind arg_tys) --- We have an application (f arg_ty1 .. arg_tyn), --- where f :: fun_kind +----------------- +lint_ty_app :: InType -> OutKind -> [InType] -> LintM () +lint_ty_app ty = lint_tyco_app (text "type" <+> quotes (ppr ty)) + +lint_co_app :: HasDebugCallStack => Coercion -> OutKind -> [InType] -> LintM () +lint_co_app co = lint_tyco_app (text "coercion" <+> quotes (ppr co)) --- If you edit this function, you may need to update the GHC formalism --- See Note [GHC Formalism] +lint_tyco_app :: SDoc -> OutKind -> [InType] -> LintM () +lint_tyco_app msg fun_kind arg_tys + -- See Note [Avoiding compiler perf traps when constructing error messages.] + = do { _ <- lintApp msg (\ty -> do { lintType ty; substTyM ty }) + (\ty _ _ -> do { lintType ty; ki <- substTyM (typeKind ty); return (ki,()) }) + fun_kind arg_tys () + ; return () } + +---------------- +lintApp :: forall in_a acc. Outputable in_a => + SDoc + -> (in_a -> LintM OutType) -- Lint the thing and return its value + -> (in_a -> Mult -> acc -> LintM (OutKind, acc)) -- Lint the thing and return its type + -> OutType + -> [in_a] -- The arguments, always "In" things + -> acc -- Used (only) for UsageEnv in /term/ applications + -> LintM (OutType,acc) +-- lintApp is a performance-critical function, which deals with multiple +-- applications such as (/\a./\b./\c. expr) @ta @tb @tc +-- When returning the type of this expression we want to avoid substituting a:=ta, +-- and /then/ substituting b:=tb, etc. That's quadratic, and can be a huge +-- perf hole. So we gather all the arguments [in_a], and then gather the +-- substitution incrementally in the `go` loop. -- --- Being strict in the kind here avoids quite a few pointless thunks --- reducing allocations by ~5% -lint_app mk_msg msg_type !kfn arg_tys +-- lintApp is used: +-- * for term applications (lintCoreArgs) +-- * for type applications (lint_ty_app) +-- * for coercion application (lint_co_app) +-- To deal with these cases `lintApp` has two higher order arguments; +-- but we specialise it for each call site (by inlining) +{-# INLINE lintApp #-} -- INLINE: very few call sites; + -- not recursive; specialised at its call sites + +lintApp msg lint_forall_arg lint_arrow_arg !orig_fun_ty all_args acc = do { !in_scope <- getInScope -- We need the in_scope set to satisfy the invariant in -- Note [The substitution invariant] in GHC.Core.TyCo.Subst -- Forcing the in scope set eagerly here reduces allocations by up to 4%. - ; go_app in_scope kfn arg_tys - } - where - -- We use explicit recursion instead of a fold here to avoid go_app becoming - -- an allocated function closure. This reduced allocations by up to 7% for some - -- modules. - go_app :: InScopeSet -> LintedKind -> [Type] -> LintM () - go_app !in_scope !kfn ta - | Just kfn' <- coreView kfn - = go_app in_scope kfn' ta - - go_app _in_scope _kind [] = return () - - go_app in_scope fun_kind@(FunTy _ _ kfa kfb) (ta:tas) - = do { let ka = typeKind ta - ; unless (ka `eqType` kfa) $ - addErrL (lint_app_fail_msg kfn arg_tys mk_msg msg_type (text "Fun:" <+> (ppr fun_kind $$ ppr ta <+> dcolon <+> ppr ka))) - ; go_app in_scope kfb tas } - - go_app in_scope (ForAllTy (Bndr kv _vis) kfn) (ta:tas) - = do { let kv_kind = varType kv - ka = typeKind ta - ; unless (ka `eqType` kv_kind) $ - addErrL (lint_app_fail_msg kfn arg_tys mk_msg msg_type (text "Forall:" <+> (ppr kv $$ ppr kv_kind $$ - ppr ta <+> dcolon <+> ppr ka))) - ; let kind' = substTy (extendTCvSubst (mkEmptySubst in_scope) kv ta) kfn - ; go_app in_scope kind' tas } - - go_app _ kfn ta - = failWithL (lint_app_fail_msg kfn arg_tys mk_msg msg_type (text "Not a fun:" <+> (ppr kfn $$ ppr ta))) + ; let init_subst = mkEmptySubst in_scope + + go :: Subst -> OutType -> acc -> [in_a] -> LintM (OutType, acc) + -- The Subst applies (only) to the fun_ty + -- c.f. GHC.Core.Type.piResultTys, which has a similar loop + + go subst fun_ty acc [] + = return (substTy subst fun_ty, acc) + + go subst (ForAllTy (Bndr tv _vis) body_ty) acc (arg:args) + = do { arg' <- lint_forall_arg arg + ; let tv_kind = substTy subst (varType tv) + karg' = typeKind arg' + subst' = extendTCvSubst subst tv arg' + ; ensureEqTys karg' tv_kind $ + lint_app_fail_msg msg orig_fun_ty all_args + (hang (text "Forall:" <+> (ppr tv $$ ppr tv_kind)) + 2 (ppr arg' <+> dcolon <+> ppr karg')) + ; go subst' body_ty acc args } + + go subst fun_ty@(FunTy _ mult exp_arg_ty res_ty) acc (arg:args) + = do { (arg_ty, acc') <- lint_arrow_arg arg (substTy subst mult) acc + ; ensureEqTys (substTy subst exp_arg_ty) arg_ty $ + lint_app_fail_msg msg orig_fun_ty all_args + (hang (text "Fun:" <+> ppr fun_ty) + 2 (vcat [ text "exp_arg_ty:" <+> ppr exp_arg_ty + , text "arg:" <+> ppr arg <+> dcolon <+> ppr arg_ty ])) + ; go subst res_ty acc' args } + + go subst fun_ty acc args + | Just fun_ty' <- coreView fun_ty + = go subst fun_ty' acc args + + | not (isEmptyTCvSubst subst) -- See Note [Care with kind instantiation] + = go init_subst (substTy subst fun_ty) acc args + + | otherwise + = failWithL (lint_app_fail_msg msg orig_fun_ty all_args + (text "Not a fun:" <+> (ppr fun_ty $$ ppr args))) + + ; go init_subst orig_fun_ty acc all_args } -- This is a top level definition to ensure we pass all variables of the error message -- explicitly and don't capture them as free variables. Otherwise this binder might -- become a thunk that get's allocated in the hot code path. -- See Note [Avoiding compiler perf traps when constructing error messages.] -lint_app_fail_msg :: (Outputable a1, Outputable a2) => a1 -> a2 -> (t -> SDoc) -> t -> SDoc -> SDoc -lint_app_fail_msg kfn arg_tys mk_msg msg_type extra = vcat [ hang (text "Kind application error in") 2 (mk_msg msg_type) - , nest 2 (text "Function kind =" <+> ppr kfn) - , nest 2 (text "Arg types =" <+> ppr arg_tys) - , extra ] +lint_app_fail_msg :: (Outputable a2) => SDoc -> OutType -> a2 -> SDoc -> SDoc +lint_app_fail_msg msg kfn arg_tys extra + = vcat [ hang (text "Application error in") 2 msg + , nest 2 (text "Function type =" <+> ppr kfn) + , nest 2 (text "Args =" <+> ppr arg_tys) + , extra ] + {- ********************************************************************* * * Linting rules * * ********************************************************************* -} -lintCoreRule :: OutVar -> LintedType -> CoreRule -> LintM () +lintCoreRule :: OutVar -> OutType -> CoreRule -> LintM () lintCoreRule _ _ (BuiltinRule {}) = return () -- Don't bother @@ -2310,18 +2324,28 @@ which is what used to happen. But that proved tricky and error prone -} --- lints a coercion, confirming that its lh kind and its rh kind are both * --- also ensures that the role is Nominal -lintStarCoercion :: InCoercion -> LintM LintedCoercion +-- lintStarCoercion lints a coercion, confirming that its lh kind and +-- its rh kind are both *; also ensures that the role is Nominal +-- Returns the lh kind +lintStarCoercion :: InCoercion -> LintM OutType lintStarCoercion g - = do { g' <- lintCoercion g - ; let Pair t1 t2 = coercionKind g' - ; checkValueType t1 (text "the kind of the left type in" <+> ppr g) - ; checkValueType t2 (text "the kind of the right type in" <+> ppr g) + = do { lintCoercion g + ; Pair t1 t2 <- substCoKindM g + ; checkValueType (typeKind t1) (text "the kind of the left type in" <+> ppr g) + ; checkValueType (typeKind t2) (text "the kind of the right type in" <+> ppr g) ; lintRole g Nominal (coercionRole g) - ; return g' } + ; return t1 } + +substCoKindM :: InCoercion -> LintM (Pair OutType) +substCoKindM co + = do { let !(Pair lk rk) = coercionKind co + ; lk' <- substTyM lk + ; rk' <- substTyM rk + ; return (Pair lk' rk') } -lintCoercion :: InCoercion -> LintM LintedCoercion +lintCoercion :: HasDebugCallStack => InCoercion -> LintM () +-- See Note [Linting types and coercions] +-- -- If you edit this function, you may need to update the GHC formalism -- See Note [GHC Formalism] @@ -2330,33 +2354,21 @@ lintCoercion (CoVarCo cv) = failWithL (hang (text "Bad CoVarCo:" <+> ppr cv) 2 (text "With offending type:" <+> ppr (varType cv))) - | otherwise - = do { subst <- getSubst - ; case lookupCoVar subst cv of - Just linted_co -> return linted_co ; - Nothing -> do { checkTyCoVarInScope subst cv - ; return (CoVarCo cv) } - } - - -lintCoercion (Refl ty) - = do { ty' <- lintType ty - ; return (Refl ty') } - -lintCoercion (GRefl r ty MRefl) - = do { ty' <- lintType ty - ; return (GRefl r ty' MRefl) } - -lintCoercion (GRefl r ty (MCo co)) - = do { ty' <- lintType ty - ; co' <- lintCoercion co - ; let tk = typeKind ty' - tl = coercionLKind co' + | otherwise -- C.f. lintType (TyVarTy tv), which has better docs + = do { _ <- lintVarOcc cv; return () } + +lintCoercion (Refl ty) = lintType ty +lintCoercion (GRefl _r ty MRefl) = lintType ty + +lintCoercion (GRefl _r ty (MCo co)) + = do { lintType ty + ; lintCoercion co + ; tk <- substTyM (typeKind ty) + ; tl <- substTyM (coercionLKind co) ; ensureEqTys tk tl $ hang (text "GRefl coercion kind mis-match:" <+> ppr co) - 2 (vcat [ppr ty', ppr tk, ppr tl]) - ; lintRole co' Nominal (coercionRole co') - ; return (GRefl r ty' (MCo co')) } + 2 (vcat [ppr ty, ppr tk, ppr tl]) + ; lintRole co Nominal (coercionRole co) } lintCoercion co@(TyConAppCo r tc cos) | Just {} <- tyConAppFunCo_maybe r tc cos @@ -2369,12 +2381,12 @@ lintCoercion co@(TyConAppCo r tc cos) | otherwise = do { checkTyCon tc - ; cos' <- mapM lintCoercion cos - ; let (co_kinds, co_roles) = unzip (map coercionKindRole cos') - ; lint_co_app co (tyConKind tc) (map pFst co_kinds) - ; lint_co_app co (tyConKind tc) (map pSnd co_kinds) - ; zipWithM_ (lintRole co) (tyConRoleListX r tc) co_roles - ; return (TyConAppCo r tc cos') } + ; mapM_ lintCoercion cos + ; let tc_kind = tyConKind tc + ; lint_co_app co tc_kind (map coercionLKind cos) + ; lint_co_app co tc_kind (map coercionRKind cos) + ; zipWithM_ (lintRole co) (tyConRoleListX r tc) (map coercionRole cos) } + lintCoercion co@(AppCo co1 co2) | TyConAppCo {} <- co1 @@ -2382,83 +2394,89 @@ lintCoercion co@(AppCo co1 co2) | Just (TyConApp {}, _) <- isReflCo_maybe co1 = failWithL (text "Refl (TyConApp ...) to the left of AppCo:" <+> ppr co) | otherwise - = do { co1' <- lintCoercion co1 - ; co2' <- lintCoercion co2 - ; let (Pair lk1 rk1, r1) = coercionKindRole co1' - (Pair lk2 rk2, r2) = coercionKindRole co2' - ; lint_co_app co (typeKind lk1) [lk2] - ; lint_co_app co (typeKind rk1) [rk2] - - ; if r1 == Phantom + = do { lintCoercion co1 + ; lintCoercion co2 + ; let !(Pair lt1 rt1) = coercionKind co1 + ; lk1 <- substTyM (typeKind lt1) + ; rk1 <- substTyM (typeKind rt1) + ; lint_co_app co lk1 [coercionLKind co2] + ; lint_co_app co rk1 [coercionRKind co2] + + ; let r2 = coercionRole co2 + ; if coercionRole co1 == Phantom then lintL (r2 == Phantom || r2 == Nominal) (text "Second argument in AppCo cannot be R:" $$ ppr co) - else lintRole co Nominal r2 - - ; return (AppCo co1' co2') } + else lintRole co Nominal r2 } ---------- -lintCoercion co@(ForAllCo { fco_tcv = tcv, fco_visL = visL, fco_visR = visR - , fco_kind = kind_co, fco_body = body_co }) --- See Note [ForAllCo] in GHC.Core.TyCo.Rep, --- including the typing rule for ForAllCo - - | not (isTyCoVar tcv) - = failWithL (text "Non tyco binder in ForAllCo:" <+> ppr co) +lintCoercion co@(ForAllCo {}) +-- See Note [ForAllCo] in GHC.Core.TyCo.Rep for the typing rule for ForAllCo + = do { _ <- go [] co; return () } + where + go :: [OutTyCoVar] -- Binders in reverse order + -> InCoercion -> LintM Role + go tcvs co@(ForAllCo { fco_tcv = tcv, fco_visL = visL, fco_visR = visR + , fco_kind = kind_co, fco_body = body_co }) + | not (isTyCoVar tcv) + = failWithL (text "Non tyco binder in ForAllCo:" <+> ppr co) - | otherwise - = do { kind_co' <- lintStarCoercion kind_co - ; lintTyCoBndr tcv $ \tcv' -> - do { body_co' <- lintCoercion body_co - ; ensureEqTys (varType tcv') (coercionLKind kind_co') $ - text "Kind mis-match in ForallCo" <+> ppr co - - -- Assuming kind_co :: k1 ~ k2 - -- Need to check that - -- (forall (tcv:k1). lty) and - -- (forall (tcv:k2). rty[(tcv:k2) |> sym kind_co/tcv]) - -- are both well formed. Easiest way is to call lintForAllBody - -- for each; there is actually no need to do the funky substitution - ; let (Pair lty rty, body_role) = coercionKindRole body_co' - ; lintForAllBody tcv' lty - ; lintForAllBody tcv' rty - - ; when (isCoVar tcv) $ - do { lintL (visL == coreTyLamForAllTyFlag && visR == coreTyLamForAllTyFlag) $ - text "Invalid visibility flags in CoVar ForAllCo" <+> ppr co - -- See (FC7) in Note [ForAllCo] in GHC.Core.TyCo.Rep - ; lintL (almostDevoidCoVarOfCo tcv body_co) $ - text "Covar can only appear in Refl and GRefl: " <+> ppr co - -- See (FC6) in Note [ForAllCo] in GHC.Core.TyCo.Rep - } - - ; when (body_role == Nominal) $ - lintL (visL `eqForAllVis` visR) $ - text "Nominal ForAllCo has mismatched visibilities: " <+> ppr co - - ; return (co { fco_tcv = tcv', fco_kind = kind_co', fco_body = body_co' }) } } - -lintCoercion co@(FunCo { fco_role = r, fco_afl = afl, fco_afr = afr - , fco_mult = cow, fco_arg = co1, fco_res = co2 }) - = do { co1' <- lintCoercion co1 - ; co2' <- lintCoercion co2 - ; cow' <- lintCoercion cow + | otherwise + = do { lk <- lintStarCoercion kind_co + ; lintTyCoBndr tcv $ \tcv' -> + do { ensureEqTys (varType tcv') lk $ + text "Kind mis-match in ForallCo" <+> ppr co + + -- I'm not very sure about this part, because it traverses body_co + -- but at least it's on a cold path (a ForallCo for a CoVar) + -- Also it works on InTyCoVar and InCoercion, which is suspect + ; when (isCoVar tcv) $ + do { lintL (visL == coreTyLamForAllTyFlag && visR == coreTyLamForAllTyFlag) $ + text "Invalid visibility flags in CoVar ForAllCo" <+> ppr co + -- See (FC7) in Note [ForAllCo] in GHC.Core.TyCo.Rep + ; lintL (almostDevoidCoVarOfCo tcv body_co) $ + text "Covar can only appear in Refl and GRefl: " <+> ppr co } + -- See (FC6) in Note [ForAllCo] in GHC.Core.TyCo.Rep + + ; role <- go (tcv':tcvs) body_co + + ; when (role == Nominal) $ + lintL (visL `eqForAllVis` visR) $ + text "Nominal ForAllCo has mismatched visibilities: " <+> ppr co + + ; return role } } + + go tcvs body_co + = do { lintCoercion body_co + + -- Need to check that + -- (forall (tcv:k1). lty) and + -- (forall (tcv:k2). rty[(tcv:k2) |> sym kind_co/tcv]) + -- are both well formed, including the skolem escape check. + -- Easiest way is to call lintForAllBody for each + ; let Pair lty rty = coercionKind body_co + ; lintForAllBody tcvs lty + ; lintForAllBody tcvs rty + + ; return (coercionRole body_co) } + + +lintCoercion (FunCo { fco_role = r, fco_afl = afl, fco_afr = afr + , fco_mult = cow, fco_arg = co1, fco_res = co2 }) + = do { lintCoercion co1 + ; lintCoercion co2 + ; lintCoercion cow ; let Pair lt1 rt1 = coercionKind co1 Pair lt2 rt2 = coercionKind co2 Pair ltw rtw = coercionKind cow - ; lintL (afl == chooseFunTyFlag lt1 lt2) (bad_co_msg "afl") - ; lintL (afr == chooseFunTyFlag rt1 rt2) (bad_co_msg "afr") - ; lintArrow (bad_co_msg "arrowl") lt1 lt2 ltw - ; lintArrow (bad_co_msg "arrowr") rt1 rt2 rtw + ; lintArrow (bad_co_msg "arrowl") afl lt1 lt2 ltw + ; lintArrow (bad_co_msg "arrowr") afr rt1 rt2 rtw ; lintRole co1 r (coercionRole co1) ; lintRole co2 r (coercionRole co2) - ; ensureEqTys (typeKind ltw) multiplicityTy (bad_co_msg "mult-l") - ; ensureEqTys (typeKind rtw) multiplicityTy (bad_co_msg "mult-r") ; let expected_mult_role = case r of Phantom -> Phantom _ -> Nominal - ; lintRole cow expected_mult_role (coercionRole cow) - ; return (co { fco_mult = cow', fco_arg = co1', fco_res = co2' }) } + ; lintRole cow expected_mult_role (coercionRole cow) } where bad_co_msg s = hang (text "Bad coercion" <+> parens (text s)) 2 (vcat [ text "afl:" <+> ppr afl @@ -2475,19 +2493,16 @@ lintCoercion co@(UnivCo { uco_role = r, uco_prov = prov _ -> return () -- Check the to and from types - ; ty1' <- lintType ty1 - ; ty2' <- lintType ty2 + ; lintType ty1 + ; lintType ty2 + ; tk1 <- substTyM (typeKind ty1) + ; tk2 <- substTyM (typeKind ty2) - ; let k1 = typeKind ty1' - k2 = typeKind ty2' - ; when (r /= Phantom && isTYPEorCONSTRAINT k1 - && isTYPEorCONSTRAINT k2) + ; when (r /= Phantom && isTYPEorCONSTRAINT tk1 && isTYPEorCONSTRAINT tk2) (checkTypes ty1 ty2) -- Check the coercions on which this UnivCo depends - ; deps' <- mapM lintCoercion deps - - ; return (co { uco_lty = ty1', uco_rty = ty2', uco_deps = deps' }) } + ; mapM_ lintCoercion deps } where report s = hang (text $ "Unsafe coercion: " ++ s) 2 (vcat [ text "From:" <+> ppr ty1 @@ -2530,24 +2545,21 @@ lintCoercion co@(UnivCo { uco_role = r, uco_prov = prov _ -> return () } -lintCoercion (SymCo co) - = do { co' <- lintCoercion co - ; return (SymCo co') } +lintCoercion (SymCo co) = lintCoercion co lintCoercion co@(TransCo co1 co2) - = do { co1' <- lintCoercion co1 - ; co2' <- lintCoercion co2 - ; let ty1b = coercionRKind co1' - ty2a = coercionLKind co2' - ; ensureEqTys ty1b ty2a + = do { lintCoercion co1 + ; lintCoercion co2 + ; rk1 <- substTyM (coercionRKind co1) + ; lk2 <- substTyM (coercionLKind co2) + ; ensureEqTys rk1 lk2 (hang (text "Trans coercion mis-match:" <+> ppr co) - 2 (vcat [ppr (coercionKind co1'), ppr (coercionKind co2')])) - ; lintRole co (coercionRole co1) (coercionRole co2) - ; return (TransCo co1' co2') } + 2 (vcat [ppr (coercionKind co1), ppr (coercionKind co2)])) + ; lintRole co (coercionRole co1) (coercionRole co2) } lintCoercion the_co@(SelCo cs co) - = do { co' <- lintCoercion co - ; let (Pair s t, co_role) = coercionKindRole co' + = do { lintCoercion co + ; Pair s t <- substCoKindM co ; if -- forall (both TyVar and CoVar) | Just _ <- splitForAllTyCoVar_maybe s @@ -2555,78 +2567,96 @@ lintCoercion the_co@(SelCo cs co) , SelForAll <- cs , (isForAllTy_ty s && isForAllTy_ty t) || (isForAllTy_co s && isForAllTy_co t) - -> return (SelCo cs co') + -> return () -- function | isFunTy s , isFunTy t , SelFun {} <- cs - -> return (SelCo cs co') + -> return () -- TyCon | Just (tc_s, tys_s) <- splitTyConApp_maybe s , Just (tc_t, tys_t) <- splitTyConApp_maybe t , tc_s == tc_t , SelTyCon n r0 <- cs + , let co_role = coercionRole co , isInjectiveTyCon tc_s co_role -- see Note [SelCo and newtypes] in GHC.Core.TyCo.Rep , tys_s `equalLength` tys_t , tys_s `lengthExceeds` n -> do { lintRole the_co (tyConRole co_role tc_s n) r0 - ; return (SelCo cs co') } + ; return () } | otherwise -> failWithL (hang (text "Bad SelCo:") 2 (ppr the_co $$ ppr s $$ ppr t)) } -lintCoercion the_co@(LRCo lr co) - = do { co' <- lintCoercion co - ; let Pair s t = coercionKind co' - r = coercionRole co' - ; lintRole co Nominal r +lintCoercion the_co@(LRCo _lr co) + = do { lintCoercion co + ; Pair s t <- substCoKindM co + ; lintRole co Nominal (coercionRole co) ; case (splitAppTy_maybe s, splitAppTy_maybe t) of - (Just _, Just _) -> return (LRCo lr co') + (Just {}, Just {}) -> return () _ -> failWithL (hang (text "Bad LRCo:") 2 (ppr the_co $$ ppr s $$ ppr t)) } -lintCoercion (InstCo co arg) - = do { co' <- lintCoercion co - ; arg' <- lintCoercion arg - ; let Pair t1 t2 = coercionKind co' - Pair s1 s2 = coercionKind arg' - - ; lintRole arg Nominal (coercionRole arg') - - ; case (splitForAllTyVar_maybe t1, splitForAllTyVar_maybe t2) of - -- forall over tvar - { (Just (tv1,_), Just (tv2,_)) - | typeKind s1 `eqType` tyVarKind tv1 - , typeKind s2 `eqType` tyVarKind tv2 - -> return (InstCo co' arg') - | otherwise - -> failWithL (text "Kind mis-match in inst coercion1" <+> ppr co) - - ; _ -> case (splitForAllCoVar_maybe t1, splitForAllCoVar_maybe t2) of - -- forall over covar - { (Just (cv1, _), Just (cv2, _)) - | typeKind s1 `eqType` varType cv1 - , typeKind s2 `eqType` varType cv2 - , CoercionTy _ <- s1 - , CoercionTy _ <- s2 - -> return (InstCo co' arg') - | otherwise - -> failWithL (text "Kind mis-match in inst coercion2" <+> ppr co) - ; _ -> failWithL (text "Bad argument of inst") }}} +lintCoercion orig_co@(InstCo co arg) + = go co [arg] + where + go (InstCo co arg) args = do { lintCoercion arg; go co (arg:args) } + go co args = do { lintCoercion co + ; let Pair lty rty = coercionKind co + ; lty' <- substTyM lty + ; rty' <- substTyM rty + ; in_scope <- getInScope + ; let subst = mkEmptySubst in_scope + ; go_args (subst, lty') (subst,rty') args } + + ------------- + go_args :: (Subst, OutType) -> (Subst,OutType) -> [InCoercion] + -> LintM () + go_args _ _ [] + = return () + go_args lty rty (arg:args) + = do { (lty1, rty1) <- go_arg lty rty arg + ; go_args lty1 rty1 args } + + ------------- + go_arg :: (Subst, OutType) -> (Subst,OutType) -> InCoercion + -> LintM ((Subst,OutType), (Subst,OutType)) + go_arg (lsubst,lty) (rsubst,rty) arg + = do { lintRole arg Nominal (coercionRole arg) + ; Pair arg_lty arg_rty <- substCoKindM arg + + ; case (splitForAllTyCoVar_maybe lty, splitForAllTyCoVar_maybe rty) of + -- forall over tvar + (Just (ltv,lty1), Just (rtv,rty1)) + | typeKind arg_lty `eqType` substTy lsubst (tyVarKind ltv) + , typeKind arg_rty `eqType` substTy rsubst (tyVarKind rtv) + -> return ( (extendTCvSubst lsubst ltv arg_lty, lty1) + , (extendTCvSubst rsubst rtv arg_rty, rty1) ) + | otherwise + -> failWithL (hang (text "Kind mis-match in inst coercion") + 2 (vcat [ text "arg" <+> ppr arg + , text "lty" <+> ppr lty <+> dcolon <+> ppr (typeKind lty) + , text "rty" <+> ppr rty <+> dcolon <+> ppr (typeKind rty) + , text "arg_lty" <+> ppr arg_lty <+> dcolon <+> ppr (typeKind arg_lty) + , text "arg_rty" <+> ppr arg_rty <+> dcolon <+> ppr (typeKind arg_rty) + , text "ltv" <+> ppr ltv <+> dcolon <+> ppr (tyVarKind ltv) + , text "rtv" <+> ppr rtv <+> dcolon <+> ppr (tyVarKind rtv) ])) + + _ -> failWithL (text "Bad argument of inst" <+> ppr orig_co) } lintCoercion this_co@(AxiomCo ax cos) - = do { cos' <- mapM lintCoercion cos - ; let arg_kinds :: [Pair Type] = map coercionKind cos' - ; lint_roles 0 (coAxiomRuleArgRoles ax) cos' - ; lint_ax ax arg_kinds - ; return (AxiomCo ax cos') } + = do { mapM_ lintCoercion cos + ; lint_roles 0 (coAxiomRuleArgRoles ax) cos + ; prs <- mapM substCoKindM cos + ; lint_ax ax prs } + where - lint_ax :: CoAxiomRule -> [Pair Type] -> LintM () + lint_ax :: CoAxiomRule -> [Pair OutType] -> LintM () lint_ax (BuiltInFamRew bif) prs = checkL (isJust (bifrw_proves bif prs)) bad_bif lint_ax (BuiltInFamInj bif) prs @@ -2647,7 +2677,7 @@ lintCoercion this_co@(AxiomCo ax cos) err m xs = failWithL $ hang (text m) 2 $ vcat (text "Rule:" <+> ppr ax : xs) - lint_roles n (e : es) (co : cos) + lint_roles n (e : es) (co:cos) | e == coercionRole co = lint_roles (n+1) es cos | otherwise = err "Argument roles mismatch" @@ -2663,20 +2693,14 @@ lintCoercion this_co@(AxiomCo ax cos) [ text "Expected:" <+> int (n + length es) , text "Provided:" <+> int n ] +lintCoercion (KindCo co) = lintCoercion co -lintCoercion (KindCo co) - = do { co' <- lintCoercion co - ; return (KindCo co') } - -lintCoercion (SubCo co') - = do { co' <- lintCoercion co' - ; lintRole co' Nominal (coercionRole co') - ; return (SubCo co') } +lintCoercion (SubCo co) + = do { lintCoercion co + ; lintRole co Nominal (coercionRole co) } lintCoercion (HoleCo h) - = do { addErrL $ text "Unfilled coercion hole:" <+> ppr h - ; lintCoercion (CoVarCo (coHoleCoVar h)) } - + = failWithL (text "Unfilled coercion hole:" <+> ppr h) {- Note [Conflict checking for axiom applications] @@ -2851,10 +2875,10 @@ lint_branch ax_tc (CoAxBranch { cab_tvs = tvs, cab_cvs = cvs , cab_lhs = lhs_args, cab_rhs = rhs }) = lintBinders LambdaBind (tvs ++ cvs) $ \_ -> do { let lhs = mkTyConApp ax_tc lhs_args - ; lhs' <- lintType lhs - ; rhs' <- lintType rhs - ; let lhs_kind = typeKind lhs' - rhs_kind = typeKind rhs' + ; lintType lhs + ; lintType rhs + ; lhs_kind <- substTyM (typeKind lhs) + ; rhs_kind <- substTyM (typeKind rhs) ; lintL (not (lhs_kind `typesAreApart` rhs_kind)) $ hang (text "Inhomogeneous axiom") 2 (text "lhs:" <+> ppr lhs <+> dcolon <+> ppr lhs_kind $$ @@ -2937,28 +2961,30 @@ data LintEnv = LE { le_flags :: LintFlags -- Linting the result of this pass , le_loc :: [LintLocInfo] -- Locations - , le_subst :: Subst -- Current TyCo substitution - -- See Note [Linting type lets] - -- /Only/ substitutes for type variables; - -- but might clone CoVars - -- We also use le_subst to keep track of - -- in-scope TyVars and CoVars (but not Ids) - -- Range of the Subst is LintedType/LintedCo - - , le_ids :: VarEnv (Id, LintedType) -- In-scope Ids - -- Used to check that occurrences have an enclosing binder. - -- The Id is /pre-substitution/, used to check that - -- the occurrence has an identical type to the binder - -- The LintedType is used to return the type of the occurrence, - -- without having to lint it again. + , le_subst :: Subst + -- Current substitution, for TyCoVars only. + -- Non-CoVar Ids don't appear in here, not even in the InScopeSet + -- Used for (a) cloning to avoid shadowing of TyCoVars, + -- so that eqType works ok + -- (b) substituting for let-bound tyvars, when we have + -- (let @a = Int -> Int in ...) + + , le_in_vars :: VarEnv (InVar, OutType) + -- Maps an InVar (i.e. its unique) to its binding InVar + -- and to its OutType + -- /All/ in-scope variables are here (term variables, + -- type variables, and coercion variables) + -- Used at an occurrence of the InVar , le_joins :: IdSet -- Join points in scope that are valid -- A subset of the InScopeSet in le_subst -- See Note [Join points] - , le_ue_aliases :: NameEnv UsageEnv -- Assigns usage environments to the - -- alias-like binders, as found in - -- non-recursive lets. + , le_ue_aliases :: NameEnv UsageEnv + -- See Note [Linting linearity] + -- Assigns usage environments to the alias-like binders, + -- as found in non-recursive lets. + -- Domain is OutIds , le_platform :: Platform -- ^ Target platform , le_diagOpts :: DiagOpts -- ^ Target platform @@ -3005,6 +3031,12 @@ type WarnsAndErrs = (Bag SDoc, Bag SDoc) -- Using a unboxed tuple here reduced allocations for a lint heavy -- file by ~6%. Using MaybeUB reduced them further by another ~12%. +-- +-- Warning: if you don't inline the matcher for JustUB etc, Lint becomes +-- /tremendously/ inefficient, and compiling GHC.Tc.Errors.Types (which +-- contains gigantic types) is very very slow indeed. Conclusion: make +-- sure unfoldings are expose in GHC.Data.Unboxed, and that you compile +-- Lint.hs with optimistation on. type LResult a = (# MaybeUB a, WarnsAndErrs #) pattern LResult :: MaybeUB a -> WarnsAndErrs -> LResult a @@ -3089,17 +3121,23 @@ Note [Linting linearity] ~~~~~~~~~~~~~~~~~~~~~~~~ Lint ignores linearity unless `-dlinear-core-lint` is set. For why, see below. -But first, "ignore linearity" specifically means two things. When ignoring linearity: -* In `ensureEqTypes`, use `eqTypeIgnoringMultiplicity` -* In `ensureSubMult`, do nothing +* When do we /check linearity/ in Lint? That is, when is `-dlinear-core-lint` + lint set? Answer: we check linearity in the output of the desugarer, shortly + after type checking. + +* When so we /not/ check linearity in Lint? On all passes after desugaring. Why? + Because optimisation passes are not (yet) guaranteed to maintain linearity. + They should do so semantically (GHC is careful not to duplicate computation) + but it is much harder to ensure that the statically-checkable constraints of + Linear Core are maintained. See examples below. -But why make `-dcore-lint` ignore linearity? Because optimisation passes are -not (yet) guaranteed to maintain linearity. They should do so semantically (GHC -is careful not to duplicate computation) but it is much harder to ensure that -the statically-checkable constraints of Linear Core are maintained. The current -Linear Core is described in the wiki at: +The current Linear Core is described in the wiki at: https://gitlab.haskell.org/ghc/ghc/-/wikis/linear-types/implementation. +Concretely, "ignore linearity in Lint" specifically means two things: +* In `ensureEqTypes`, use `eqTypeIgnoringMultiplicity` +* In `ensureSubMult`, do nothing + Here are some examples of how the optimiser can break linearity checking. Other examples are documented in the linear-type implementation wiki page [https://gitlab.haskell.org/ghc/ghc/-/wikis/linear-types/implementation#core-to-core-passes] @@ -3302,12 +3340,12 @@ initL cfg m | otherwise -> pprPanic ("Bug in Lint: a failure occurred " ++ "without reporting an error message") empty where - (tcvs, ids) = partition isTyCoVar $ l_vars cfg - env = LE { le_flags = l_flags cfg - , le_subst = mkEmptySubst (mkInScopeSetList tcvs) - , le_ids = mkVarEnv [(id, (id,idType id)) | id <- ids] - , le_joins = emptyVarSet - , le_loc = [] + vars = l_vars cfg + env = LE { le_flags = l_flags cfg + , le_subst = mkEmptySubst (mkInScopeSetList vars) + , le_in_vars = mkVarEnv [ (v,(v, varType v)) | v <- vars ] + , le_joins = emptyVarSet + , le_loc = [] , le_ue_aliases = emptyNameEnv , le_platform = l_platform cfg , le_diagOpts = l_diagOpts cfg @@ -3352,10 +3390,10 @@ addErrL msg = LintM $ \ env (warns,errs) -> addWarnL :: SDoc -> LintM () addWarnL msg = LintM $ \ env (warns,errs) -> - fromBoxedLResult (Just (), (addMsg False env warns msg, errs)) + fromBoxedLResult (Just (), (addMsg True env warns msg, errs)) addMsg :: Bool -> LintEnv -> Bag SDoc -> SDoc -> Bag SDoc -addMsg is_error env msgs msg +addMsg show_context env msgs msg = assertPpr (notNull loc_msgs) msg $ msgs `snocBag` mk_msg msg where @@ -3364,8 +3402,9 @@ addMsg is_error env msgs msg cxt_doc = vcat [ vcat $ reverse $ map snd loc_msgs , text "Substitution:" <+> ppr (le_subst env) ] - context | is_error = cxt_doc - | otherwise = whenPprDebug cxt_doc + + context | show_context = cxt_doc + | otherwise = whenPprDebug cxt_doc -- Print voluminous info for Lint errors -- but not for warnings @@ -3389,33 +3428,69 @@ inCasePat = LintM $ \ env errs -> fromBoxedLResult (Just (is_case_pat env), errs is_case_pat (LE { le_loc = CasePat {} : _ }) = True is_case_pat _other = False -addInScopeId :: Id -> LintedType -> LintM a -> LintM a -addInScopeId id linted_ty m - = LintM $ \ env@(LE { le_ids = id_set, le_joins = join_set, le_ue_aliases = aliases }) errs -> - unLintM m (env { le_ids = extendVarEnv id_set id (id, linted_ty) - , le_joins = add_joins join_set - , le_ue_aliases = delFromNameEnv aliases (idName id) }) errs - -- When shadowing an alias, we need to make sure the Id is no longer - -- classified as such. E.g. in - -- let x = in case x of x { _DEFAULT -> } - -- Occurrences of 'x' in e2 shouldn't count as occurrences of e1. - where - add_joins join_set - | isJoinId id = extendVarSet join_set id -- Overwrite with new arity - | otherwise = delVarSet join_set id -- Remove any existing binding +addInScopeId :: InId -> OutType -> (OutId -> LintM a) -> LintM a +-- Unlike addInScopeTyCoVar, this function does no cloning; Ids never get cloned +addInScopeId in_id out_ty thing_inside + = LintM $ \ env errs -> + let !(out_id, env') = add env + in unLintM (thing_inside out_id) env' errs -getInScopeIds :: LintM (VarEnv (Id,LintedType)) -getInScopeIds = LintM (\env errs -> fromBoxedLResult (Just (le_ids env), errs)) + where + add env@(LE { le_in_vars = id_vars, le_joins = join_set + , le_ue_aliases = aliases, le_subst = subst }) + = (out_id, env1) + where + env1 = env { le_in_vars = in_vars', le_joins = join_set', le_ue_aliases = aliases' } + + in_vars' = extendVarEnv id_vars in_id (in_id, out_ty) + aliases' = delFromNameEnv aliases (idName in_id) + -- aliases': when shadowing an alias, we need to make sure the + -- Id is no longer classified as such. E.g. + -- let x = in case x of x { _DEFAULT -> } + -- Occurrences of 'x' in e2 shouldn't count as occurrences of e1. + + -- A very tiny optimisation, not sure if it's really worth it + -- Short-cut when the substitution is a no-op + out_id | isEmptyTCvSubst subst = in_id + | otherwise = setIdType in_id out_ty + + join_set' + | isJoinId out_id = extendVarSet join_set in_id -- Overwrite with new arity + | otherwise = delVarSet join_set in_id -- Remove any existing binding + +addInScopeTyCoVar :: InTyCoVar -> OutType -> (OutTyCoVar -> LintM a) -> LintM a +-- This function clones to avoid shadowing of TyCoVars +addInScopeTyCoVar tcv tcv_type thing_inside + = LintM $ \ env@(LE { le_in_vars = in_vars, le_subst = subst }) errs -> + let (tcv', subst') = subst_bndr subst + env' = env { le_in_vars = extendVarEnv in_vars tcv (tcv, tcv_type) + , le_subst = subst' } + in unLintM (thing_inside tcv') env' errs + where + subst_bndr subst + | isEmptyTCvSubst subst -- No change in kind + , not (tcv `elemInScopeSet` in_scope) -- Not already in scope + = -- Do not extend the substitution, just the in-scope set + (if (varType tcv `eqType` tcv_type) then (\x->x) else + pprTrace "addInScopeTyCoVar" ( + vcat [ text "tcv" <+> ppr tcv <+> dcolon <+> ppr (varType tcv) + , text "tcv_type" <+> ppr tcv_type ])) $ + (tcv, subst `extendSubstInScope` tcv) + + -- Clone, and extend the substitution + | let tcv' = uniqAway in_scope (setVarType tcv tcv_type) + = (tcv', extendTCvSubstWithClone subst tcv tcv') + where + in_scope = substInScopeSet subst + +getInVarEnv :: LintM (VarEnv (InId, OutType)) +getInVarEnv = LintM (\env errs -> fromBoxedLResult (Just (le_in_vars env), errs)) extendTvSubstL :: TyVar -> Type -> LintM a -> LintM a extendTvSubstL tv ty m = LintM $ \ env errs -> unLintM m (env { le_subst = Type.extendTvSubst (le_subst env) tv ty }) errs -updateSubst :: Subst -> LintM a -> LintM a -updateSubst subst' m - = LintM $ \ env errs -> unLintM m (env { le_subst = subst' }) errs - markAllJoinsBad :: LintM a -> LintM a markAllJoinsBad m = LintM $ \ env errs -> unLintM m (env { le_joins = emptyVarSet }) errs @@ -3430,34 +3505,43 @@ getValidJoins = LintM (\ env errs -> fromBoxedLResult (Just (le_joins env), errs getSubst :: LintM Subst getSubst = LintM (\ env errs -> fromBoxedLResult (Just (le_subst env), errs)) +substTyM :: InType -> LintM OutType +-- Apply the substitution to the type +-- The substitution is often empty, in which case it is a no-op +substTyM ty + = do { subst <- getSubst + ; return (substTy subst ty) } + getUEAliases :: LintM (NameEnv UsageEnv) getUEAliases = LintM (\ env errs -> fromBoxedLResult (Just (le_ue_aliases env), errs)) getInScope :: LintM InScopeSet -getInScope = LintM (\ env errs -> fromBoxedLResult (Just (getSubstInScope $ le_subst env), errs)) - -lookupIdInScope :: Id -> LintM (Id, LintedType) -lookupIdInScope id_occ - = do { in_scope_ids <- getInScopeIds - ; case lookupVarEnv in_scope_ids id_occ of - Just (id_bndr, linted_ty) - -> do { checkL (not (bad_global id_bndr)) $ global_in_scope id_bndr - ; return (id_bndr, linted_ty) } - Nothing -> do { checkL (not is_local) local_out_of_scope - ; return (id_occ, idType id_occ) } } - -- We don't bother to lint the type - -- of global (i.e. imported) Ids +getInScope = LintM (\ env errs -> fromBoxedLResult (Just (substInScopeSet $ le_subst env), errs)) + +lintVarOcc :: InVar -> LintM OutType +-- Used at an occurrence of a variable: term variables, type variables, and coercion variables +-- Checks two things: +-- a) that it is in scope +-- b) that the InType at the ocurrences matches the InType at the binding site +lintVarOcc v_occ + = do { in_var_env <- getInVarEnv + ; case lookupVarEnv in_var_env v_occ of + Nothing | isGlobalId v_occ -> return (idType v_occ) + | otherwise -> failWithL (text pp_what <+> quotes (ppr v_occ) + <+> text "is out of scope") + Just (v_bndr, out_ty) -> do { check_bad_global v_bndr + ; ensureEqTys occ_ty bndr_ty $ -- Compares InTypes + mkBndrOccTypeMismatchMsg v_occ bndr_ty occ_ty + ; return out_ty } + where + occ_ty = varType v_occ + bndr_ty = varType v_bndr } where - is_local = mustHaveLocalBinding id_occ - local_out_of_scope = text "Out of scope:" <+> pprBndr LetBind id_occ - global_in_scope id_bndr = hang (text "Occurrence is GlobalId, but binding is LocalId") - 2 $ vcat [hang (text "occurrence:") 2 $ pprBndr LetBind id_occ - ,hang (text "binder :") 2 $ pprBndr LetBind id_bndr - ] - bad_global id_bnd = isGlobalId id_occ - && isLocalId id_bnd - && not (isWiredIn id_occ) - -- 'bad_global' checks for the case where an /occurrence/ is + pp_what | isTyVar v_occ = "The type variable" + | isCoVar v_occ = "The coercion variable" + | otherwise = "The value variable" + + -- 'check_bad_global' checks for the case where an /occurrence/ is -- a GlobalId, but there is an enclosing binding fora a LocalId. -- NB: the in-scope variables are mostly LocalIds, checked by lintIdBndr, -- but GHCi adds GlobalIds from the interactive context. These @@ -3466,6 +3550,15 @@ lookupIdInScope id_occ -- are defined locally, but appear in expressions as (global) -- wired-in Ids after worker/wrapper -- So we simply disable the test in this case + check_bad_global v_bndr + | isGlobalId v_occ + , isLocalId v_bndr + , not (isWiredIn v_occ) + = failWithL $ hang (text "Occurrence is GlobalId, but binding is LocalId") + 2 (vcat [ hang (text "occurrence:") 2 $ pprBndr LetBind v_occ + , hang (text "binder :") 2 $ pprBndr LetBind v_bndr ]) + | otherwise + = return () lookupJoinId :: Id -> LintM JoinPointHood -- Look up an Id which should be a join point, valid here @@ -3476,21 +3569,21 @@ lookupJoinId id Just id' -> return (idJoinPointHood id') Nothing -> return NotJoinPoint } -addAliasUE :: Id -> UsageEnv -> LintM a -> LintM a +addAliasUE :: OutId -> UsageEnv -> LintM a -> LintM a addAliasUE id ue thing_inside = LintM $ \ env errs -> let new_ue_aliases = extendNameEnv (le_ue_aliases env) (getName id) ue in unLintM thing_inside (env { le_ue_aliases = new_ue_aliases }) errs -varCallSiteUsage :: Id -> LintM UsageEnv +varCallSiteUsage :: OutId -> LintM UsageEnv varCallSiteUsage id = do m <- getUEAliases return $ case lookupNameEnv m (getName id) of Nothing -> singleUsageUE id Just id_ue -> id_ue -ensureEqTys :: LintedType -> LintedType -> SDoc -> LintM () +ensureEqTys :: OutType -> OutType -> SDoc -> LintM () -- check ty2 is subtype of ty1 (ie, has same structure but usage -- annotations need only be consistent, not equal) -- Assumes ty1,ty2 are have already had the substitution applied @@ -3639,12 +3732,11 @@ mkCaseAltMsg e ty1 ty2 text "Annotation on case:" <+> ppr ty2, text "Alt Rhs:" <+> ppr e ]) -mkScrutMsg :: Id -> Type -> Type -> Subst -> SDoc -mkScrutMsg var var_ty scrut_ty subst +mkScrutMsg :: Id -> Type -> Type -> SDoc +mkScrutMsg var var_ty scrut_ty = vcat [text "Result binder in case doesn't match scrutinee:" <+> ppr var, text "Result binder type:" <+> ppr var_ty,--(idType var), - text "Scrutinee type:" <+> ppr scrut_ty, - hsep [text "Current TCv subst", ppr subst]] + text "Scrutinee type:" <+> ppr scrut_ty] mkNonDefltMsg, mkNonIncreasingAltsMsg :: CoreExpr -> SDoc mkNonDefltMsg e @@ -3714,7 +3806,7 @@ mkLetErr bndr rhs hang (text "Rhs:") 4 (ppr rhs)] -mkTyAppMsg :: Type -> Type -> SDoc +mkTyAppMsg :: OutType -> Type -> SDoc mkTyAppMsg ty arg_ty = vcat [text "Illegal type application:", hang (text "Function type:") @@ -3722,14 +3814,6 @@ mkTyAppMsg ty arg_ty hang (text "Type argument:") 4 (ppr arg_ty <+> dcolon <+> ppr (typeKind arg_ty))] -mkCoAppMsg :: Type -> Coercion -> SDoc -mkCoAppMsg fun_ty co - = vcat [ text "Illegal coercion application:" - , hang (text "Function type:") - 4 (ppr fun_ty) - , hang (text "Coercion argument:") - 4 (ppr co <+> dcolon <+> ppr (coercionType co))] - emptyRec :: CoreExpr -> SDoc emptyRec e = hang (text "Empty Rec binding:") 2 (ppr e) @@ -3843,12 +3927,11 @@ mkJoinBndrOccMismatchMsg bndr join_arity_bndr join_arity_occ , text "Arity at binding site:" <+> ppr join_arity_bndr , text "Arity at occurrence: " <+> ppr join_arity_occ ] -mkBndrOccTypeMismatchMsg :: Var -> Var -> LintedType -> LintedType -> SDoc -mkBndrOccTypeMismatchMsg bndr var bndr_ty var_ty +mkBndrOccTypeMismatchMsg :: InVar -> InType -> InType -> SDoc +mkBndrOccTypeMismatchMsg var bndr_ty occ_ty = vcat [ text "Mismatch in type between binder and occurrence" - , text "Binder:" <+> ppr bndr <+> dcolon <+> ppr bndr_ty - , text "Occurrence:" <+> ppr var <+> dcolon <+> ppr var_ty - , text " Before subst:" <+> ppr (idType var) ] + , text "Binder: " <+> ppr var <+> dcolon <+> ppr bndr_ty + , text "Occurrence:" <+> ppr var <+> dcolon <+> ppr occ_ty ] mkBadJoinPointRuleMsg :: JoinId -> JoinArity -> CoreRule -> SDoc mkBadJoinPointRuleMsg bndr join_arity rule ===================================== compiler/GHC/Core/Opt/Arity.hs ===================================== @@ -2304,7 +2304,7 @@ mkEtaWW orig_oss ppr_orig_expr in_scope orig_ty go _ [] subst _ ----------- Done! No more expansion needed - = (getSubstInScope subst, EI [] MRefl) + = (substInScopeSet subst, EI [] MRefl) go n oss@(one_shot:oss1) subst ty ----------- Forall types (forall a. ty) @@ -2351,7 +2351,7 @@ mkEtaWW orig_oss ppr_orig_expr in_scope orig_ty -- but its type isn't a function, or a binder -- does not have a fixed runtime representation = warnPprTrace True "mkEtaWW" ((ppr orig_oss <+> ppr orig_ty) $$ ppr_orig_expr) - (getSubstInScope subst, EI [] MRefl) + (substInScopeSet subst, EI [] MRefl) -- This *can* legitimately happen: -- e.g. coerce Int (\x. x) Essentially the programmer is -- playing fast and loose with types (Happy does this a lot). @@ -3246,7 +3246,7 @@ freshEtaId n subst ty = (subst', eta_id') where Scaled mult' ty' = Type.substScaledTyUnchecked subst ty - eta_id' = uniqAway (getSubstInScope subst) $ + eta_id' = uniqAway (substInScopeSet subst) $ mkSysLocalOrCoVar (fsLit "eta") (mkBuiltinUnique n) mult' ty' -- "OrCoVar" since this can be used to eta-expand -- coercion abstractions ===================================== compiler/GHC/Core/Opt/SpecConstr.hs ===================================== @@ -2453,7 +2453,7 @@ callsToNewPats env fn spec_info@(SI { si_specs = done_specs }) bndr_occs calls good_pats :: [CallPat] good_pats = catMaybes mb_pats - in_scope = getSubstInScope (sc_subst env) + in_scope = substInScopeSet (sc_subst env) -- Remove patterns we have already done new_pats = filterOut is_done good_pats @@ -2571,7 +2571,7 @@ callToPat :: ScEnv -> [ArgOcc] -> Call -> UniqSM (Maybe CallPat) -- over the following term variables -- The [CoreExpr] are the argument patterns for the rule callToPat env bndr_occs call@(Call fn args con_env) - = do { let in_scope = getSubstInScope (sc_subst env) + = do { let in_scope = substInScopeSet (sc_subst env) ; arg_triples <- zipWith3M (argToPat env in_scope con_env) args bndr_occs (map (const NotMarkedStrict) args) -- This zip trims the args to be no longer than ===================================== compiler/GHC/Core/Opt/Specialise.hs ===================================== @@ -1824,7 +1824,7 @@ specLookupRule env fn args phase rules = lookupRule ropts in_scope_env is_active fn args rules where dflags = se_dflags env - in_scope = getSubstInScope (se_subst env) + in_scope = substInScopeSet (se_subst env) in_scope_env = ISE in_scope (whenActiveUnfoldingFun is_active) ropts = initRuleOpts dflags is_active = isActive phase @@ -2573,7 +2573,7 @@ specHeader env (bndr : bndrs) (SpecType ty : args) = do { -- Find qvars, the type variables to add to the binders for the rule -- Namely those free in `ty` that aren't in scope -- See (MP2) in Note [Specialising polymorphic dictionaries] - let in_scope = Core.getSubstInScope (se_subst env) + let in_scope = Core.substInScopeSet (se_subst env) qvars = scopedSort $ filterOut (`elemInScopeSet` in_scope) $ tyCoVarsOfTypeList ty @@ -2635,7 +2635,7 @@ specHeader env (bndr : bndrs) (SpecDict d : args) ) } where - in_scope = Core.getSubstInScope (se_subst env) + in_scope = Core.substInScopeSet (se_subst env) -- Finally, we don't want to specialise on this argument 'i': -- - It's an UnSpecArg, or ===================================== compiler/GHC/Core/SimpleOpt.hs ===================================== @@ -219,7 +219,7 @@ soeZapSubst env@(SOE { soe_subst = subst }) = env { soe_inl = emptyVarEnv, soe_subst = zapSubst subst } soeInScope :: SimpleOptEnv -> InScopeSet -soeInScope (SOE { soe_subst = subst }) = getSubstInScope subst +soeInScope (SOE { soe_subst = subst }) = substInScopeSet subst soeSetInScope :: InScopeSet -> SimpleOptEnv -> SimpleOptEnv soeSetInScope in_scope env2@(SOE { soe_subst = subst2 }) @@ -246,7 +246,7 @@ simple_opt_expr env expr where rec_ids = soe_rec_ids env subst = soe_subst env - in_scope = getSubstInScope subst + in_scope = substInScopeSet subst in_scope_env = ISE in_scope alwaysActiveUnfoldingFun --------------- @@ -481,7 +481,7 @@ simple_bind_pair env@(SOE { soe_inl = inl_env, soe_subst = subst }) stable_unf = isStableUnfolding (idUnfolding in_bndr) active = isAlwaysActive (idInlineActivation in_bndr) occ = idOccInfo in_bndr - in_scope = getSubstInScope subst + in_scope = substInScopeSet subst out_rhs | JoinPoint join_arity <- idJoinPointHood in_bndr = simple_join_rhs join_arity @@ -1321,7 +1321,7 @@ exprIsConApp_maybe ise@(ISE in_scope id_unf) expr scrut' = subst_expr subst scrut go (Right sub) floats (Var v) cont - = go (Left (getSubstInScope sub)) + = go (Left (substInScopeSet sub)) floats (lookupIdSubst sub v) cont @@ -1394,7 +1394,7 @@ exprIsConApp_maybe ise@(ISE in_scope id_unf) expr -- The Left case is wildly dominant subst_in_scope (Left in_scope) = in_scope - subst_in_scope (Right s) = getSubstInScope s + subst_in_scope (Right s) = substInScopeSet s subst_extend_in_scope (Left in_scope) v = Left (in_scope `extendInScopeSet` v) subst_extend_in_scope (Right s) v = Right (s `extendSubstInScope` v) ===================================== compiler/GHC/Core/Subst.hs ===================================== @@ -24,7 +24,7 @@ module GHC.Core.Subst ( extendIdSubstWithClone, extendSubst, extendSubstList, extendSubstWithVar, extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, - isInScope, setInScope, getSubstInScope, + isInScope, setInScope, substInScopeSet, extendTvSubst, extendCvSubst, delBndr, delBndrs, zapSubst, ===================================== compiler/GHC/Core/TyCo/Rep.hs ===================================== @@ -1218,14 +1218,15 @@ because the kinds of the bound tyvars can be different. The typing rule is: - kind_co : k1 ~N k2 - tv1:k1 |- co : t1 ~r t2 + G |- kind_co : k1 ~N k2 + tv1 \not\in fv(typeKind(t1),typeKind(t2)) -- Skolem escape + G, tv1:k1 |- co : t1 ~r t2 if r=N, then vis1=vis2 ------------------------------------ - ForAllCo (tv1:k1) vis1 vis2 kind_co co - : forall (tv1:k1) . t1 + G |- ForAllCo (tv1:k1) vis1 vis2 kind_co co + : forall (tv1:k1) . t1 ~r - forall (tv1:k2) . (t2[tv1 |-> (tv1:k2) |> sym kind_co]) + forall (tv1:k2) . (t2[tv1 |-> (tv1:k2) |> sym kind_co]) Several things to note here ===================================== compiler/GHC/Core/TyCo/Subst.hs ===================================== @@ -15,7 +15,7 @@ module GHC.Core.TyCo.Subst emptySubst, mkEmptySubst, isEmptyTCvSubst, isEmptySubst, mkTCvSubst, mkTvSubst, mkCvSubst, mkIdSubst, getTvSubstEnv, getIdSubstEnv, - getCvSubstEnv, getSubstInScope, setInScope, getSubstRangeTyCoFVs, + getCvSubstEnv, substInScopeSet, setInScope, getSubstRangeTyCoFVs, isInScope, elemSubst, notElemSubst, zapSubst, extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, extendTCvSubst, extendTCvSubstWithClone, @@ -104,9 +104,9 @@ import Data.List (mapAccumL) data Subst = Subst InScopeSet -- Variables in scope (both Ids and TyVars) /after/ -- applying the substitution - IdSubstEnv -- Substitution from NcIds to CoreExprs - TvSubstEnv -- Substitution from TyVars to Types - CvSubstEnv -- Substitution from CoVars to Coercions + IdSubstEnv -- Substitution from InId to OutExpr + TvSubstEnv -- Substitution from InTyVar to OutType + CvSubstEnv -- Substitution from InCoVar to OutCoercion -- INVARIANT 1: See Note [The substitution invariant] -- This is what lets us deal with name capture properly @@ -115,7 +115,7 @@ data Subst -- see Note [Substitutions apply only once] -- -- INVARIANT 3: See Note [Extending the IdSubstEnv] in "GHC.Core.Subst" - -- and Note [Extending the TvSubstEnv and CvSubstEnv] + -- and Note [Extending the TvSubstEnv and CvSubstEnv] -- -- INVARIANT 4: See Note [Substituting types, coercions, and expressions] @@ -183,8 +183,10 @@ A TCvSubst is not idempotent, but, unlike the non-idempotent substitution we use during unifications, it must not be repeatedly applied. Note [Extending the TvSubstEnv and CvSubstEnv] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -See #tcvsubst_invariant# for the invariants that must hold. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The TvSubstEnv and CvSubstEnv have a binding for each TyCoVar + - whose unique has changed, OR + - whose kind has changed This invariant allows a short-cut when the subst envs are empty: if the TvSubstEnv and CvSubstEnv are empty --- i.e. (isEmptyTCvSubst subst) @@ -207,7 +209,7 @@ This invariant has several crucial consequences: * In substTy, substTheta, we can short-circuit when the TvSubstEnv is empty Note [Substituting types, coercions, and expressions] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Types and coercions are mutually recursive, and either may have variables "belonging" to the other. Thus, every time we wish to substitute in a type, we may also need to substitute in a coercion, and vice versa. @@ -295,8 +297,8 @@ getCvSubstEnv :: Subst -> CvSubstEnv getCvSubstEnv (Subst _ _ _ cenv) = cenv -- | Find the in-scope set: see Note [The substitution invariant] -getSubstInScope :: Subst -> InScopeSet -getSubstInScope (Subst in_scope _ _ _) = in_scope +substInScopeSet :: Subst -> InScopeSet +substInScopeSet (Subst in_scope _ _ _) = in_scope setInScope :: Subst -> InScopeSet -> Subst setInScope (Subst _ ids tvs cvs) in_scope = Subst in_scope ids tvs cvs ===================================== compiler/GHC/Core/Type.hs ===================================== @@ -121,7 +121,7 @@ module GHC.Core.Type ( mkTYPEapp, mkTYPEapp_maybe, mkCONSTRAINTapp, mkCONSTRAINTapp_maybe, mkBoxedRepApp_maybe, mkTupleRepApp_maybe, - typeOrConstraintKind, + typeOrConstraintKind, liftedTypeOrConstraintKind, -- *** Levity and boxity sORTKind_maybe, typeTypeOrConstraint, @@ -201,7 +201,7 @@ module GHC.Core.Type ( zipTCvSubst, notElemSubst, getTvSubstEnv, - zapSubst, getSubstInScope, setInScope, getSubstRangeTyCoFVs, + zapSubst, substInScopeSet, setInScope, getSubstRangeTyCoFVs, extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, extendTCvSubst, extendCvSubst, extendTvSubst, extendTvSubstList, extendTvSubstAndInScope, @@ -2685,9 +2685,7 @@ typeKind :: HasDebugCallStack => Type -> Kind -- No need to expand synonyms typeKind (TyConApp tc tys) = piResultTys (tyConKind tc) tys typeKind (LitTy l) = typeLiteralKind l -typeKind (FunTy { ft_af = af }) = case funTyFlagResultTypeOrConstraint af of - TypeLike -> liftedTypeKind - ConstraintLike -> constraintKind +typeKind (FunTy { ft_af = af }) = liftedTypeOrConstraintKind (funTyFlagResultTypeOrConstraint af) typeKind (TyVarTy tyvar) = tyVarKind tyvar typeKind (CastTy _ty co) = coercionRKind co typeKind (CoercionTy co) = coercionType co @@ -2719,9 +2717,9 @@ typeKind ty@(ForAllTy {}) lifted_kind_from_body -- Implements (FORALL2) = case sORTKind_maybe body_kind of - Just (ConstraintLike, _) -> constraintKind - Just (TypeLike, _) -> liftedTypeKind - Nothing -> pprPanic "typeKind" (ppr body_kind) + Just (torc, _) -> liftedTypeOrConstraintKind torc + Nothing -> pprPanic "typeKind" (ppr body_kind) + --------------------------------------------- @@ -3450,3 +3448,7 @@ mkTupleRepApp_maybe _ = Nothing typeOrConstraintKind :: TypeOrConstraint -> RuntimeRepType -> Kind typeOrConstraintKind TypeLike rep = mkTYPEapp rep typeOrConstraintKind ConstraintLike rep = mkCONSTRAINTapp rep + +liftedTypeOrConstraintKind :: TypeOrConstraint -> Kind +liftedTypeOrConstraintKind TypeLike = liftedTypeKind +liftedTypeOrConstraintKind ConstraintLike = constraintKind ===================================== compiler/GHC/Data/Unboxed.hs ===================================== @@ -4,6 +4,13 @@ {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE UnliftedNewtypes #-} +{-# OPTIONS_GHC -fno-omit-interface-pragmas #-} + -- If you use -fomit-interface-pragmas for your build, we won't + -- inline the matcher for JustUB, and that turns out to have a + -- catastropic effect on Lint, which uses unboxed Maybes. + -- Simple fix: switch off -fomit-interface-pragmas for this tiny + -- and very stable module. + module GHC.Data.Unboxed ( MaybeUB(JustUB, NothingUB), fmapMaybeUB, fromMaybeUB, apMaybeUB, maybeUB ===================================== compiler/GHC/Hs/Dump.hs ===================================== @@ -6,6 +6,10 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE DataKinds #-} +{-# OPTIONS_GHC -fno-specialise #-} + -- Don't do type-class specialisation; it goes mad in this module + -- See #25463 + -- | Contains a debug function to dump parts of the GHC.Hs AST. It uses a syb -- traversal which falls back to displaying based on the constructor name, so -- can be used to dump anything having a @Data.Data@ instance. ===================================== compiler/GHC/Tc/Solver/Equality.hs ===================================== @@ -516,7 +516,7 @@ can_eq_nc_forall ev eq_rel s1 s2 go _ _ _ _ _ = panic "can_eq_nc_forall" -- case (s:ss) [] - init_subst2 = mkEmptySubst (getSubstInScope subst1) + init_subst2 = mkEmptySubst (substInScopeSet subst1) -- Generate the constraints that live in the body of the implication -- See (SF5) in Note [Solving forall equalities] ===================================== compiler/GHC/Tc/TyCl.hs ===================================== @@ -4232,7 +4232,7 @@ mkGADTVars tmpl_tvs dc_tvs subst = choose [] [] empty_subst empty_subst tmpl_tvs where in_scope = mkInScopeSet (mkVarSet tmpl_tvs `unionVarSet` mkVarSet dc_tvs) - `unionInScope` getSubstInScope subst + `unionInScope` substInScopeSet subst empty_subst = mkEmptySubst in_scope choose :: [TyVar] -- accumulator of univ tvs, reversed ===================================== compiler/GHC/Tc/Utils/TcType.hs ===================================== @@ -166,7 +166,7 @@ module GHC.Tc.Utils.TcType ( TvSubstEnv, emptySubst, mkEmptySubst, zipTvSubst, mkTvSubstPrs, notElemSubst, unionSubst, - getTvSubstEnv, getSubstInScope, extendSubstInScope, + getTvSubstEnv, substInScopeSet, extendSubstInScope, extendSubstInScopeList, extendSubstInScopeSet, extendTvSubstAndInScope, Type.lookupTyVar, Type.extendTCvSubst, Type.substTyVarBndr, Type.extendTvSubst, ===================================== compiler/GHC/Types/Var.hs ===================================== @@ -40,8 +40,8 @@ module GHC.Types.Var ( TyVar, TcTyVar, TypeVar, KindVar, TKVar, TyCoVar, -- * In and Out variants - InVar, InCoVar, InId, InTyVar, - OutVar, OutCoVar, OutId, OutTyVar, + InVar, InCoVar, InId, InTyVar, InTyCoVar, + OutVar, OutCoVar, OutId, OutTyVar, OutTyCoVar, -- ** Taking 'Var's apart varName, varUnique, varType, @@ -205,10 +205,12 @@ type TyCoVar = Id -- Type, *or* coercion variable type InVar = Var type InTyVar = TyVar type InCoVar = CoVar +type InTyCoVar = TyCoVar type InId = Id type OutVar = Var type OutTyVar = TyVar type OutCoVar = CoVar +type OutTyCoVar = TyCoVar type OutId = Id View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bfacc086604c18e30758772a05a8c81e3a4e01bc...175a1355341e5594ae16515b485c3ebedb88c057 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bfacc086604c18e30758772a05a8c81e3a4e01bc...175a1355341e5594ae16515b485c3ebedb88c057 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 07:49:14 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 17 Dec 2024 02:49:14 -0500 Subject: [Git][ghc/ghc][master] Add Note [Typechecking overloaded literals] Message-ID: <67612cfaa05bc_3f8dd38b19d8968d8@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 8ef2dad6 by Simon Peyton Jones at 2024-12-17T02:48:09-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - 3 changed files: - compiler/GHC/Tc/Gen/Expr.hs - compiler/GHC/Tc/Gen/Head.hs - compiler/GHC/Tc/Utils/Unify.hs Changes: ===================================== compiler/GHC/Tc/Gen/Expr.hs ===================================== @@ -296,13 +296,6 @@ tcExpr e@(ExprWithTySig {}) res_ty = tcApp e res_ty tcExpr (XExpr e) res_ty = tcXExpr e res_ty -tcExpr e@(HsOverLit _ lit) res_ty - = do { mb_res <- tcShortCutLit lit res_ty - -- See Note [Short cut for overloaded literals] in GHC.Tc.Zonk.Type - ; case mb_res of - Just lit' -> return (HsOverLit noExtField lit') - Nothing -> tcApp e res_ty } - -- Typecheck an occurrence of an unbound Id -- -- Some of these started life as a true expression hole "_". @@ -353,6 +346,51 @@ tcExpr e@(HsLam x lam_variant matches) res_ty = do { (wrap, matches') <- tcLambdaMatches e lam_variant matches [] res_ty ; return (mkHsWrap wrap $ HsLam x lam_variant matches') } +{- +************************************************************************ +* * + Overloaded literals +* * +************************************************************************ +-} + +tcExpr e@(HsOverLit _ lit) res_ty + = -- See Note [Typechecking overloaded literals] + do { mb_res <- tcShortCutLit lit res_ty + -- See Note [Short cut for overloaded literals] in GHC.Tc.Utils.TcMType + ; case mb_res of + Just lit' -> return (HsOverLit noExtField lit') + Nothing -> tcApp e res_ty } + -- Why go via tcApp? See Note [Typechecking overloaded literals] + +{- Note [Typechecking overloaded literals] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Generally speaking, an overloaded literal like "3" typechecks as if you +had written (fromInteger (3 :: Integer)). But in practice it's a little +tricky: + +* Rebindable syntax (see #19154 and !4981). With rebindable syntax we might have + fromInteger :: Integer -> forall a. Num a => a + and then we might hope to use a Visible Type Application (VTA) to write + 3 @Int + expecting it to expand to + fromInteger (3::Integer) @Int dNumInt + To achieve that, we need to + * treat the application using `tcApp` to deal with the VTA + * treat the overloaded literal as the "head" of an application; + see `GHC.Tc.Gen.Head.tcInferAppHead`. + +* Short-cutting. If we have + xs :: [Int] + xs = [3,4,5,6... ] + then it's a huge short-cut (in compile time) to just cough up the `Int` literal + for `3`, rather than (fromInteger @Int d), with a wanted constraint `[W] Num Int`. + See Note [Short cut for overloaded literals] in GHC.Tc.Utils.TcMType. + + We can only take this short-cut if rebindable syntax is off; see `tcShortCutLit`. +-} + + {- ************************************************************************ * * ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -765,6 +765,8 @@ tcInferOverLit lit@(OverLit { ol_val = val -- where fromInteger is gotten by looking up from_name, and -- the (3 :: Integer) is returned by mkOverLit -- Ditto the string literal "foo" to (fromString ("foo" :: String)) + -- + -- See Note [Typechecking overloaded literals] in GHC.Tc.Gen.Expr do { hs_lit <- mkOverLit val ; from_id <- tcLookupId from_name ; (wrap1, from_ty) <- topInstantiate (LiteralOrigin lit) (idType from_id) @@ -781,9 +783,10 @@ tcInferOverLit lit@(OverLit { ol_val = val from_expr = mkHsWrap (wrap2 <.> wrap1) $ HsVar noExtField (L loc from_id) witness = HsApp noExtField (L (l2l loc) from_expr) lit_expr - lit' = lit { ol_ext = OverLitTc { ol_rebindable = rebindable - , ol_witness = witness - , ol_type = res_ty } } + lit' = OverLit { ol_val = val + , ol_ext = OverLitTc { ol_rebindable = rebindable + , ol_witness = witness + , ol_type = res_ty } } ; return (HsOverLit noExtField lit', res_ty) } {- ********************************************************************* ===================================== compiler/GHC/Tc/Utils/Unify.hs ===================================== @@ -305,7 +305,7 @@ Both ultimately handled by matchExpectedFunTys. * For the Lambda case there are two sub-cases: * An expression with a type signature: (\ @a x y -> blah) :: hs_ty This is handled by `GHC.Tc.Gen.Head.tcExprWithSig`, which kind-checks - the signature and hands off to `tcExprPolyCheck` vai `tcPolyLExprSig` + the signature and hands off to `tcExprPolyCheck` via `tcPolyLExprSig`. Note that the foralls at the top of hs_ty scope over the expression. * A higher order call: h e, where h :: poly_ty -> blah View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8ef2dad6917aabb5358b270f1f18d8af13bf59cb -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8ef2dad6917aabb5358b270f1f18d8af13bf59cb You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 11:39:27 2024 From: gitlab at gitlab.haskell.org (Sjoerd Visscher (@trac-sjoerd_visscher)) Date: Tue, 17 Dec 2024 06:39:27 -0500 Subject: [Git][ghc/ghc][wip/T18462] Multiplicity annotation on records Message-ID: <676162ef6ad94_221e2ebcdb835430@gitlab.mail> Sjoerd Visscher pushed to branch wip/T18462 at Glasgow Haskell Compiler / GHC Commits: 2a2f4645 by Sjoerd Visscher at 2024-12-17T12:39:20+01:00 Multiplicity annotation on records - - - - - 30 changed files: - compiler/GHC/Hs/Decls.hs - compiler/GHC/Hs/Instances.hs - compiler/GHC/Hs/Type.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Iface/Ext/Ast.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/PostProcess.hs - compiler/GHC/Parser/PostProcess/Haddock.hs - compiler/GHC/Rename/Expr.hs - compiler/GHC/Rename/HsType.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Tc/Gen/App.hs - compiler/GHC/Tc/Gen/HsType.hs - compiler/GHC/Tc/Gen/Sig.hs - compiler/GHC/Tc/TyCl.hs - compiler/GHC/ThToHs.hs - compiler/Language/Haskell/Syntax/Decls.hs - compiler/Language/Haskell/Syntax/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/linear_types.rst - testsuite/tests/ghc-api/exactprint/Test20239.stderr - 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/linear/should_compile/NonLinearRecord.hs - testsuite/tests/linear/should_compile/all.T - + testsuite/tests/linear/should_fail/LinearRecFieldMany.hs - + testsuite/tests/linear/should_fail/LinearRecFieldMany.stderr - testsuite/tests/linear/should_fail/all.T - testsuite/tests/parser/should_compile/DumpParsedAst.stderr The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2a2f46458722d3e3895e94b4553e13d803b4e013 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2a2f46458722d3e3895e94b4553e13d803b4e013 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 12:03:33 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Tue, 17 Dec 2024 07:03:33 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/romes/9557-easy Message-ID: <676168954bc85_221e2e89298438231@gitlab.mail> Rodrigo Mesquita pushed new branch wip/romes/9557-easy at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/romes/9557-easy You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 12:13:34 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Tue, 17 Dec 2024 07:13:34 -0500 Subject: [Git][ghc/ghc][wip/T20264] 42 commits: Tidy up the handling of `assert` Message-ID: <67616aee2ef4e_221e2e8f66644282b@gitlab.mail> Simon Peyton Jones pushed to branch wip/T20264 at Glasgow Haskell Compiler / GHC Commits: 64756530 by Simon Peyton Jones at 2024-12-14T22:28:04-05:00 Tidy up the handling of `assert` Fixes #25493 - - - - - 8658fbc1 by Rodrigo Mesquita at 2024-12-14T22:28:41-05:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 80f0e02d by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - 175a1355 by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - 8ef2dad6 by Simon Peyton Jones at 2024-12-17T02:48:09-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - 459b0271 by Joseph Fourment at 2024-12-17T10:15:43+00:00 compiler: introduce type variable unfoldings The plan for #20264 is to introduce let-bound types to have observable sharing in types. To avoid the need to carry an environment when dealing with occurrences of these type variables, we embed the types they're bound to (if any) in a `tv_unfolding :: Maybe Type` attribute. This way, one can look through let-bound type variables using `coreView` and friends. In particular, definitional equality looks through unfoldings. - - - - - d9cadd1a by Joseph Fourment at 2024-12-17T10:15:43+00:00 simple-opt: don't inline type-lets - - - - - ccc7b2e2 by Joseph Fourment at 2024-12-17T10:15:43+00:00 specialise: fix type-lets in DFun unfoldings During specialisation, a dictionary being specialised gets a new unfolding by turning `DFun \ bndrs -> MkD @<T1> ... @<Tm> <op1> ... <opn>` into `DFun \ spec_bndrs -> MkD @((\ bndrs -> TYPE: <T1>) spec_args) ... ((\ bndrs -> <opn>) spec_args)` which in turns gets beta-reduced into `DFun \ spec_bndrs -> MkD (let { bndrs = spec_args } in TYPE: <T1>) ... (let { bndrs = spec_args } in <opn>)`. Previously, such let binders would immediately be substituted into the type so it didn't cause any issue, but now we want to avoid inlining. Arguments of the form `let { bndrs = spec_args } in TYPE: <T1>` are not considered as type arguments since they're not of the canonical form `TYPE: something`. This commit restores the previous behavior of substituting the specialised type arguments. Alternatively, we could attach some floated type bindings to `DFun`s. - - - - - 3967b14e by Joseph Fourment at 2024-12-17T10:15:43+00:00 occur-anal: implement occurence analysis for type variables In order to find out let-bound type variables that are used only once, in the hope of inlining them, we need to track type variables as well in the occurrence analiser. Just like Id's, we attach an `OccInfo` to each (immutable) type variable, and we walk into types and coercions to accurately gather occurrences. - - - - - 6cbf2a78 by Joseph Fourment at 2024-12-17T10:15:43+00:00 simplifier: don't inline type-lets Keep propagating type-lets further down the pipeline, in the simplifier. We also update CallArity, CprAnal, DmdAnal, WorkWrap, and Specialise to ignore type-lets. - - - - - e8933d98 by Joseph Fourment at 2024-12-17T10:15:43+00:00 prep: make type-lets pass through CorePrep As a first attempt, ignore type-lets in CorePrep to avoid crashes. However, this is not enough: CorePrep also does some let-floating. If we don't float type-lets along with value-level let-bindings, the latter can float out of the scope of a type variable in use. - - - - - 258da9ca by Joseph Fourment at 2024-12-17T10:15:44+00:00 simple-opt: fix simple_type_bind Also: - Inline small types using a new typeIsSmallEnoughToInline predicate - Inline single-occurrence variables - - - - - 104a8988 by Joseph Fourment at 2024-12-17T10:15:44+00:00 simple-opt: make beta-reduction use simple_bind_type - - - - - becbd35e by Joseph Fourment at 2024-12-17T10:15:44+00:00 iface: add IfaceTypeLetBndr to represent non-top-level type-let binders IfaceLetBndr isn't fit to represent type-let binders, as it includes a bunch of vacuous flags for Ids only. Instead of putting squares in circles, I added a new constructor for type binders. The downside is that it breaks existing iface files, so since we can't bootstrap yet so we have to bootstrap a cherry-picked branch and then checkout again to build with --freeze1. To avoid similar issues in the future, IfaceTyVarInfoItem serialises with a tag despite there being only one constructor for now. - - - - - 49493a15 by Joseph Fourment at 2024-12-17T10:15:44+00:00 dmd-anal: prefix unused variable with _ to avoid warning - - - - - 4b29943b by Joseph Fourment at 2024-12-17T10:15:44+00:00 type: inline unfoldView in sORTKind_maybe - - - - - effe2574 by Joseph Fourment at 2024-12-17T10:15:44+00:00 tidy: deal with type-lets - - - - - d05f4cb0 by Joseph Fourment at 2024-12-17T10:15:44+00:00 notes: add Note [Type and coercion lets] - - - - - ed64d817 by Joseph Fourment at 2024-12-17T10:15:44+00:00 notes: update Note [Comparing nullary type synonyms] to account for type variables While updating backlinks, I noticed the optimisation for type variables could be performed in more places. - - - - - e8de3a0b by Joseph Fourment at 2024-12-17T10:15:44+00:00 simplifier: inline single-occurring type-lets - - - - - 66797366 by Joseph Fourment at 2024-12-17T10:15:44+00:00 cleanup: remove NOINLINE on tyVarOccInfo - - - - - 40a42566 by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Wibbles - - - - - f8864d41 by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Wibbles - - - - - 15435281 by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Progress - - - - - b51aece5 by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Progress - - - - - 0eb2f585 by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 More progress - - - - - 3ebd0189 by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Progress ...doesn't compile though - - - - - 7ee91976 by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Mostly working now - - - - - 320c114d by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Aggressively create type-lets - - - - - b1935c2c by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 more progress - - - - - 095a162a by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 More progress - - - - - 3e691b7a by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Temp debug printing - - - - - 2d5ca13c by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Remove bogus assert - - - - - 5e077c38 by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Fix anoher couple of bugs in SimpleOpt and exprIsTrivial - - - - - 1c3341d7 by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Improve zonking of foreign decls to avoid TcTyVars escaping - - - - - bb1de634 by Simon Peyton Jones at 2024-12-17T10:15:44+00:00 Wibbles - - - - - 34e2b65f by Simon Peyton Jones at 2024-12-17T10:15:45+00:00 Some small wibbles - - - - - b8b48fce by Simon Peyton Jones at 2024-12-17T10:15:45+00:00 Improvements - - - - - 2c57c570 by Simon Peyton Jones at 2024-12-17T10:15:45+00:00 Rmmove trace - - - - - fb17f57d by Simon Peyton Jones at 2024-12-17T12:13:11+00:00 Wibbles - - - - - 14 changed files: - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Coercion/Axiom.hs - compiler/GHC/Core/FVs.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Make.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/CSE.hs - compiler/GHC/Core/Opt/CallArity.hs - compiler/GHC/Core/Opt/CprAnal.hs - compiler/GHC/Core/Opt/DmdAnal.hs - compiler/GHC/Core/Opt/FloatIn.hs - compiler/GHC/Core/Opt/OccurAnal.hs - compiler/GHC/Core/Opt/SetLevels.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/63954e4cbca1ee47fa2290cf8406588e6bfee045...fb17f57d4a93b837f29734c33dc0d7ac77c71e6c -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/63954e4cbca1ee47fa2290cf8406588e6bfee045...fb17f57d4a93b837f29734c33dc0d7ac77c71e6c You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 12:52:49 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Tue, 17 Dec 2024 07:52:49 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/metadata-fixes-9.12 Message-ID: <67617421d5a63_1ecac7dc12c86873@gitlab.mail> Zubin pushed new branch wip/metadata-fixes-9.12 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/metadata-fixes-9.12 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 13:42:48 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Tue, 17 Dec 2024 08:42:48 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports] 2 commits: hadrian: fix hadrian building with ghc-9.10.1 Message-ID: <67617fd813bda_795d0299f14545a8@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports at Glasgow Haskell Compiler / GHC Commits: 94aa411d by Cheng Shao at 2024-12-17T14:14:33+01:00 hadrian: fix hadrian building with ghc-9.10.1 (cherry picked from commit be514bb48629747258416e602c8b00810b3863b0) - - - - - 11f32847 by Cheng Shao at 2024-12-17T14:14:47+01:00 linters: fix lint-whitespace compilation with ghc-9.10.1 (cherry picked from commit ad38e954bf088b43fa1cecfeaf474b6b9c11e2ed) - - - - - 4 changed files: - .gitlab/ci.sh - hadrian/cabal.project - hadrian/hadrian.cabal - linters/lint-whitespace/lint-whitespace.cabal Changes: ===================================== .gitlab/ci.sh ===================================== @@ -7,7 +7,7 @@ set -Eeuo pipefail # Configuration: -HACKAGE_INDEX_STATE="2023-10-05T11:38:51Z" +HACKAGE_INDEX_STATE="2024-05-13T15:04:38Z" MIN_HAPPY_VERSION="1.20" MIN_ALEX_VERSION="3.2.6" ===================================== hadrian/cabal.project ===================================== @@ -4,7 +4,11 @@ packages: ./ -- This essentially freezes the build plan for hadrian -- It would be wise to keep this up to date with the state set in ci.sh -index-state: 2023-10-05T11:38:51Z +index-state: 2024-05-13T15:04:38Z + +-- unordered-containers-0.2.20-r1 requires template-haskell < 2.22 +-- ghc-9.10 has template-haskell-2.22.0.0 +allow-newer: unordered-containers:template-haskell -- N.B. Compile with -O0 since this is not a performance-critical executable -- and the Cabal takes nearly twice as long to build with -O1. See #16817. ===================================== hadrian/hadrian.cabal ===================================== @@ -155,7 +155,7 @@ executable hadrian build-depends: Cabal >= 3.10 && < 3.11 , base >= 4.11 && < 5 , bytestring >= 0.10 && < 0.13 - , containers >= 0.5 && < 0.7 + , containers >= 0.5 && < 0.8 , directory >= 1.3.1.0 && < 1.4 , extra >= 1.4.7 , filepath ===================================== linters/lint-whitespace/lint-whitespace.cabal ===================================== @@ -24,7 +24,7 @@ executable lint-whitespace process ^>= 1.6, containers - ^>= 0.6, + >= 0.6 && <0.8, base >= 4.14 && < 5, text View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2689edf9b54149ffa64d87487e18f4f9b6818f90...11f32847c513a9afd54f4df06c1f08d17ae2e0ca -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2689edf9b54149ffa64d87487e18f4f9b6818f90...11f32847c513a9afd54f4df06c1f08d17ae2e0ca You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 14:20:50 2024 From: gitlab at gitlab.haskell.org (Teo Camarasu (@teo)) Date: Tue, 17 Dec 2024 09:20:50 -0500 Subject: [Git][ghc/ghc][wip/T25262] fixup! Add template-haskell-lift and template-haskell-quasiquoter Message-ID: <676188c2164fa_477122a07414543@gitlab.mail> Teo Camarasu pushed to branch wip/T25262 at Glasgow Haskell Compiler / GHC Commits: 45f6f135 by Teo Camarasu at 2024-12-17T14:20:40+00:00 fixup! Add template-haskell-lift and template-haskell-quasiquoter - - - - - 2 changed files: - hadrian/src/Settings/Default.hs - libraries/template-haskell-quasiquoter/template-haskell-quasiquoter.cabal Changes: ===================================== hadrian/src/Settings/Default.hs ===================================== @@ -107,6 +107,7 @@ stage0Packages = do , semaphoreCompat -- depends on , time -- depends on win32 , thLift -- new library not yet present for boot compilers + , thQuasiquoter -- new library not yet present for boot compilers , unlit , if windowsHost then win32 else unix -- We must use the in-tree `Win32` as the version ===================================== libraries/template-haskell-quasiquoter/template-haskell-quasiquoter.cabal ===================================== @@ -18,6 +18,10 @@ common warnings library import: warnings exposed-modules: TemplateHaskell.Quasiquoter - build-depends: base, ghc-internal + build-depends: base + if impl(ghc>=9.12) + build-depends: ghc-internal + else + build-depends: template-haskell hs-source-dirs: src default-language: GHC2021 View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/45f6f135d29dee7c58d22ece99b04f7165daf3b3 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/45f6f135d29dee7c58d22ece99b04f7165daf3b3 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 14:21:47 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 17 Dec 2024 09:21:47 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 3 commits: Add Note [Typechecking overloaded literals] Message-ID: <676188fb1bcde_477112daf4176c9@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 8ef2dad6 by Simon Peyton Jones at 2024-12-17T02:48:09-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - abd27d2d by Ben Gamari at 2024-12-17T09:21:31-05:00 testsuite: Use math.inf instead of division-by-zero This both more directly captures the intent and also fixes #25580. - - - - - 06d48131 by Ben Gamari at 2024-12-17T09:21:31-05:00 rts: Fix incorrect format specifiers in era profiling Fixes #25581. - - - - - 5 changed files: - compiler/GHC/Tc/Gen/Expr.hs - compiler/GHC/Tc/Gen/Head.hs - compiler/GHC/Tc/Utils/Unify.hs - rts/ProfHeap.c - testsuite/driver/perf_notes.py Changes: ===================================== compiler/GHC/Tc/Gen/Expr.hs ===================================== @@ -296,13 +296,6 @@ tcExpr e@(ExprWithTySig {}) res_ty = tcApp e res_ty tcExpr (XExpr e) res_ty = tcXExpr e res_ty -tcExpr e@(HsOverLit _ lit) res_ty - = do { mb_res <- tcShortCutLit lit res_ty - -- See Note [Short cut for overloaded literals] in GHC.Tc.Zonk.Type - ; case mb_res of - Just lit' -> return (HsOverLit noExtField lit') - Nothing -> tcApp e res_ty } - -- Typecheck an occurrence of an unbound Id -- -- Some of these started life as a true expression hole "_". @@ -353,6 +346,51 @@ tcExpr e@(HsLam x lam_variant matches) res_ty = do { (wrap, matches') <- tcLambdaMatches e lam_variant matches [] res_ty ; return (mkHsWrap wrap $ HsLam x lam_variant matches') } +{- +************************************************************************ +* * + Overloaded literals +* * +************************************************************************ +-} + +tcExpr e@(HsOverLit _ lit) res_ty + = -- See Note [Typechecking overloaded literals] + do { mb_res <- tcShortCutLit lit res_ty + -- See Note [Short cut for overloaded literals] in GHC.Tc.Utils.TcMType + ; case mb_res of + Just lit' -> return (HsOverLit noExtField lit') + Nothing -> tcApp e res_ty } + -- Why go via tcApp? See Note [Typechecking overloaded literals] + +{- Note [Typechecking overloaded literals] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Generally speaking, an overloaded literal like "3" typechecks as if you +had written (fromInteger (3 :: Integer)). But in practice it's a little +tricky: + +* Rebindable syntax (see #19154 and !4981). With rebindable syntax we might have + fromInteger :: Integer -> forall a. Num a => a + and then we might hope to use a Visible Type Application (VTA) to write + 3 @Int + expecting it to expand to + fromInteger (3::Integer) @Int dNumInt + To achieve that, we need to + * treat the application using `tcApp` to deal with the VTA + * treat the overloaded literal as the "head" of an application; + see `GHC.Tc.Gen.Head.tcInferAppHead`. + +* Short-cutting. If we have + xs :: [Int] + xs = [3,4,5,6... ] + then it's a huge short-cut (in compile time) to just cough up the `Int` literal + for `3`, rather than (fromInteger @Int d), with a wanted constraint `[W] Num Int`. + See Note [Short cut for overloaded literals] in GHC.Tc.Utils.TcMType. + + We can only take this short-cut if rebindable syntax is off; see `tcShortCutLit`. +-} + + {- ************************************************************************ * * ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -765,6 +765,8 @@ tcInferOverLit lit@(OverLit { ol_val = val -- where fromInteger is gotten by looking up from_name, and -- the (3 :: Integer) is returned by mkOverLit -- Ditto the string literal "foo" to (fromString ("foo" :: String)) + -- + -- See Note [Typechecking overloaded literals] in GHC.Tc.Gen.Expr do { hs_lit <- mkOverLit val ; from_id <- tcLookupId from_name ; (wrap1, from_ty) <- topInstantiate (LiteralOrigin lit) (idType from_id) @@ -781,9 +783,10 @@ tcInferOverLit lit@(OverLit { ol_val = val from_expr = mkHsWrap (wrap2 <.> wrap1) $ HsVar noExtField (L loc from_id) witness = HsApp noExtField (L (l2l loc) from_expr) lit_expr - lit' = lit { ol_ext = OverLitTc { ol_rebindable = rebindable - , ol_witness = witness - , ol_type = res_ty } } + lit' = OverLit { ol_val = val + , ol_ext = OverLitTc { ol_rebindable = rebindable + , ol_witness = witness + , ol_type = res_ty } } ; return (HsOverLit noExtField lit', res_ty) } {- ********************************************************************* ===================================== compiler/GHC/Tc/Utils/Unify.hs ===================================== @@ -305,7 +305,7 @@ Both ultimately handled by matchExpectedFunTys. * For the Lambda case there are two sub-cases: * An expression with a type signature: (\ @a x y -> blah) :: hs_ty This is handled by `GHC.Tc.Gen.Head.tcExprWithSig`, which kind-checks - the signature and hands off to `tcExprPolyCheck` vai `tcPolyLExprSig` + the signature and hands off to `tcExprPolyCheck` via `tcPolyLExprSig`. Note that the foralls at the top of hs_ty scope over the expression. * A higher order call: h e, where h :: poly_ty -> blah ===================================== rts/ProfHeap.c ===================================== @@ -958,9 +958,9 @@ dumpCensus( Census *census ) count * sizeof(W_)); break; case HEAP_BY_ERA: - fprintf(hp_file, "%lu", (StgWord)ctr->identity); + fprintf(hp_file, "%" FMT_Word, (StgWord)ctr->identity); char str_era[100]; - sprintf(str_era, "%lu", (StgWord)ctr->identity); + sprintf(str_era, "%" FMT_Word, (StgWord)ctr->identity); traceHeapProfSampleString(0, str_era, count * sizeof(W_)); break; case HEAP_BY_MOD: ===================================== testsuite/driver/perf_notes.py ===================================== @@ -21,6 +21,7 @@ import sys from collections import namedtuple, defaultdict from math import ceil, trunc +import math from testutil import passed, failBecause, testing_metrics, print_table from term_color import Color, colored @@ -140,7 +141,7 @@ class MetricAcceptanceWindow: class AlwaysAccept(MetricAcceptanceWindow): def get_bounds(self, baseline: float) -> Tuple[float, float]: - return (-1/0, +1/0) + return (-math.inf, +math.inf) def describe(self) -> str: raise NotImplemented View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/03a8158bc65b0f19ad9b950c3b911c2e93ecea28...06d48131dd77e38675071ad46bc4f5e579a56681 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/03a8158bc65b0f19ad9b950c3b911c2e93ecea28...06d48131dd77e38675071ad46bc4f5e579a56681 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 14:22:12 2024 From: gitlab at gitlab.haskell.org (Teo Camarasu (@teo)) Date: Tue, 17 Dec 2024 09:22:12 -0500 Subject: [Git][ghc/ghc][wip/T25262] fixup! Add template-haskell-lift and template-haskell-quasiquoter Message-ID: <67618914baded_477134196c20447@gitlab.mail> Teo Camarasu pushed to branch wip/T25262 at Glasgow Haskell Compiler / GHC Commits: 5caf1dd6 by Teo Camarasu at 2024-12-17T14:22:01+00:00 fixup! Add template-haskell-lift and template-haskell-quasiquoter - - - - - 2 changed files: - hadrian/src/Settings/Default.hs - libraries/template-haskell-quasiquoter/template-haskell-quasiquoter.cabal Changes: ===================================== hadrian/src/Settings/Default.hs ===================================== @@ -107,6 +107,7 @@ stage0Packages = do , semaphoreCompat -- depends on , time -- depends on win32 , thLift -- new library not yet present for boot compilers + , thQuasiquoter -- new library not yet present for boot compilers , unlit , if windowsHost then win32 else unix -- We must use the in-tree `Win32` as the version @@ -167,7 +168,6 @@ stage1Packages = do , semaphoreCompat , stm , templateHaskell - , thQuasiquoter , text , transformers , unlit ===================================== libraries/template-haskell-quasiquoter/template-haskell-quasiquoter.cabal ===================================== @@ -18,6 +18,10 @@ common warnings library import: warnings exposed-modules: TemplateHaskell.Quasiquoter - build-depends: base, ghc-internal + build-depends: base + if impl(ghc>=9.12) + build-depends: ghc-internal + else + build-depends: template-haskell hs-source-dirs: src default-language: GHC2021 View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5caf1dd6af76fb9b99a15c873cc9df88408060a1 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5caf1dd6af76fb9b99a15c873cc9df88408060a1 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 16:53:13 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Tue, 17 Dec 2024 11:53:13 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/T25576 Message-ID: <6761ac79b7773_1ba509bcda4390ab@gitlab.mail> Ben Gamari pushed new branch wip/T25576 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/T25576 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 17:02:19 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Tue, 17 Dec 2024 12:02:19 -0500 Subject: [Git][ghc/ghc][wip/romes/9557-easy] 2 commits: Improve performance of deriving Show Message-ID: <6761ae9af3dbc_1ba5092d8c3c42095@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/9557-easy at Glasgow Haskell Compiler / GHC Commits: 10f348b5 by Rodrigo Mesquita at 2024-12-17T17:02:06+00:00 Improve performance of deriving Show Significantly improves performance of deriving Show instances by avoiding using the very polymorphic `.` operator in favour of inlining its definition. We were generating tons of applications of it, each which had 3 type arguments! Improves on #9557 ------------------------- Metric Decrease: InstanceMatching T12707 T3294 ------------------------ - - - - - 3438cf21 by Rodrigo Mesquita at 2024-12-17T17:02:06+00:00 Don't eta expand cons when deriving Data This eta expansion was introduced with the initial commit for Linear types. I believe this isn't needed any longer. My guess is it is an artifact from the initial linear types implementation: data constructors are linear, but they shouldn't need to be eta expanded to be used as higher order functions. I suppose in the early days this wasn't true. For instance, this works now: data T x = T x f = \(x :: forall y. y -> T y) -> x True f T -- ok! T is linear, but can be passed where an unrestricted higher order function is expected. I recall there being some magic around to make this work for data constructors... Since this works, there's no need to eta_expand the data constructors in the derived Data instances. - - - - - 6 changed files: - compiler/GHC/Hs/Utils.hs - compiler/GHC/Tc/Deriv/Generate.hs - testsuite/tests/deriving/should_compile/T14682.stderr - testsuite/tests/deriving/should_run/T9576.stderr - testsuite/tests/typecheck/should_fail/T15883d.stderr - testsuite/tests/typecheck/should_fail/T15883e.stderr Changes: ===================================== compiler/GHC/Hs/Utils.hs ===================================== @@ -56,7 +56,7 @@ module GHC.Hs.Utils( nlHsTyApp, nlHsTyApps, nlHsVar, nlHsDataCon, nlHsLit, nlHsApp, nlHsApps, nlHsSyntaxApps, nlHsIntLit, nlHsVarApps, - nlHsDo, nlHsOpApp, nlHsPar, nlHsIf, nlHsCase, nlList, + nlHsDo, nlHsOpApp, nlHsLam, nlHsPar, nlHsIf, nlHsCase, nlList, mkLHsTupleExpr, mkLHsVarTuple, missingTupArg, mkLocatedList, nlAscribe, @@ -598,11 +598,15 @@ nlHsDo ctxt stmts = noLocA (mkHsDo ctxt (noLocA stmts)) nlHsOpApp :: LHsExpr GhcPs -> IdP GhcPs -> LHsExpr GhcPs -> LHsExpr GhcPs nlHsOpApp e1 op e2 = noLocA (mkHsOpApp e1 op e2) +nlHsLam :: LMatch GhcPs (LHsExpr GhcPs) -> LHsExpr GhcPs nlHsPar :: IsPass p => LHsExpr (GhcPass p) -> LHsExpr (GhcPass p) nlHsCase :: LHsExpr GhcPs -> [LMatch GhcPs (LHsExpr GhcPs)] -> LHsExpr GhcPs nlList :: [LHsExpr GhcPs] -> LHsExpr GhcPs +nlHsLam match = noLocA $ HsLam noAnn LamSingle + $ mkMatchGroup (Generated OtherExpansion SkipPmc) (noLocA [match]) + nlHsPar e = noLocA (gHsPar e) -- nlHsIf should generate if-expressions which are NOT subject to ===================================== compiler/GHC/Tc/Deriv/Generate.hs ===================================== @@ -1407,7 +1407,7 @@ gen_Data_binds loc (DerivInstTys{dit_rep_tc = rep_tc}) gfoldl_eqn con = ([nlVarPat k_RDR, z_Pat, nlConVarPat con_name as_needed], - foldl' mk_k_app (z_Expr `nlHsApp` (eta_expand_data_con con)) as_needed) + foldl' mk_k_app (z_Expr `nlHsApp` (nlHsVar (getRdrName con))) as_needed) where con_name :: RdrName con_name = getRdrName con @@ -1427,18 +1427,9 @@ gen_Data_binds loc (DerivInstTys{dit_rep_tc = rep_tc}) gunfold_alt dc = mkHsCaseAlt (mk_unfold_pat dc) (mk_unfold_rhs dc) mk_unfold_rhs dc = foldr nlHsApp - (z_Expr `nlHsApp` (eta_expand_data_con dc)) + (z_Expr `nlHsApp` (nlHsVar (getRdrName dc))) (replicate (dataConSourceArity dc) (nlHsVar k_RDR)) - eta_expand_data_con dc = - mkHsLam (noLocA eta_expand_pats) - (foldl nlHsApp (nlHsVar (getRdrName dc)) eta_expand_hsvars) - where - eta_expand_pats = map nlVarPat eta_expand_vars - eta_expand_hsvars = map nlHsVar eta_expand_vars - eta_expand_vars = take (dataConSourceArity dc) as_RDRs - - mk_unfold_pat dc -- Last one is a wild-pat, to avoid -- redundant test, and annoying warning | tag-fIRST_TAG == n_cons-1 = nlWildPat -- Last constructor @@ -2528,21 +2519,22 @@ showParen_Expr showParen_Expr e1 e2 = nlHsApp (nlHsApp (nlHsVar showParen_RDR) e1) e2 nested_compose_Expr :: [LHsExpr GhcPs] -> LHsExpr GhcPs - -nested_compose_Expr [] = panic "nested_compose_expr" -- Arg is always non-empty -nested_compose_Expr [e] = parenify e -nested_compose_Expr (e:es) - = nlHsApp (nlHsApp (nlHsVar compose_RDR) (parenify e)) (nested_compose_Expr es) +nested_compose_Expr = + nlHsLam . mkSimpleMatch (LamAlt LamSingle) (noLocA [z_Pat]) . go + where + -- Previously we used (`.`), but inlining its definition improves compiler + -- performance significantly since we no longer need to typecheck lots of + -- (.) applications (each which needed three type applications, all @String) + -- (See #25453 for why this is especially slow currently) + go [] = panic "nested_compose_expr" -- Arg is always non-empty + go [e] = nlHsApp e z_Expr + go (e:es) = nlHsApp e (go es) -- impossible_Expr is used in case RHSs that should never happen. -- We generate these to keep the desugarer from complaining that they *might* happen! error_Expr :: FastString -> LHsExpr GhcPs error_Expr string = nlHsApp (nlHsVar error_RDR) (nlHsLit (mkHsStringFS string)) -parenify :: LHsExpr GhcPs -> LHsExpr GhcPs -parenify e@(L _ (HsVar _ _)) = e -parenify e = mkHsPar e - -- genOpApp wraps brackets round the operator application, so that the -- renamer won't subsequently try to re-associate it. genOpApp :: LHsExpr GhcPs -> RdrName -> LHsExpr GhcPs -> LHsExpr GhcPs ===================================== testsuite/tests/deriving/should_compile/T14682.stderr ===================================== @@ -5,12 +5,13 @@ Derived class instances: GHC.Internal.Show.showsPrec a (T14682.Foo b1 b2) = GHC.Internal.Show.showParen (a GHC.Classes.>= 11) - ((GHC.Internal.Base..) - (GHC.Internal.Show.showString "Foo ") - ((GHC.Internal.Base..) - (GHC.Internal.Show.showsPrec 11 b1) - ((GHC.Internal.Base..) - GHC.Internal.Show.showSpace (GHC.Internal.Show.showsPrec 11 b2)))) + (\ z + -> GHC.Internal.Show.showString + "Foo " + (GHC.Internal.Show.showsPrec + 11 b1 + (GHC.Internal.Show.showSpace + (GHC.Internal.Show.showsPrec 11 b2 z)))) instance GHC.Internal.TH.Lift.Lift T14682.Foo where GHC.Internal.TH.Lift.lift (T14682.Foo a1 a2) @@ -25,9 +26,8 @@ Derived class instances: instance GHC.Internal.Data.Data.Data T14682.Foo where GHC.Internal.Data.Data.gfoldl k z (T14682.Foo a1 a2) - = ((z (\ a1 a2 -> T14682.Foo a1 a2) `k` a1) `k` a2) - GHC.Internal.Data.Data.gunfold k z _ - = k (k (z (\ a1 a2 -> T14682.Foo a1 a2))) + = ((z T14682.Foo `k` a1) `k` a2) + GHC.Internal.Data.Data.gunfold k z _ = k (k (z T14682.Foo)) GHC.Internal.Data.Data.toConstr (T14682.Foo _ _) = $cFoo GHC.Internal.Data.Data.dataTypeOf _ = $tFoo ===================================== testsuite/tests/deriving/should_run/T9576.stderr ===================================== @@ -2,11 +2,11 @@ T9576: Uncaught exception ghc-internal:GHC.Internal.Control.Exception.Base.TypeE T9576.hs:6:31: error: [GHC-39999] • No instance for ‘Show Foo’ arising from a use of ‘showsPrec’ - • In the second argument of ‘(.)’, namely ‘(showsPrec 11 b1)’ + • In the second argument of ‘showString’, namely + ‘(showsPrec 11 b1 z)’ + In the expression: showString "MkBar " (showsPrec 11 b1 z) In the second argument of ‘showParen’, namely - ‘((.) (showString "MkBar ") (showsPrec 11 b1))’ - In the expression: - showParen (a >= 11) ((.) (showString "MkBar ") (showsPrec 11 b1)) + ‘(\ z -> showString "MkBar " (showsPrec 11 b1 z))’ When typechecking the code for ‘showsPrec’ in a derived instance for ‘Show Bar’: To see the code I am typechecking, use -ddump-deriv ===================================== testsuite/tests/typecheck/should_fail/T15883d.stderr ===================================== @@ -1,4 +1,3 @@ - T15883d.hs:14:1: error: [GHC-39999] • Ambiguous type variable ‘a0’ arising from a use of ‘showsPrec’ prevents the constraint ‘(Show a0)’ from being solved. @@ -9,11 +8,12 @@ T15883d.hs:14:1: error: [GHC-39999] ...plus 29 others ...plus 10 instances involving out-of-scope types (use -fprint-potential-instances to see them all) - • In the second argument of ‘(.)’, namely ‘(showsPrec 11 b1)’ + • In the second argument of ‘showString’, namely + ‘(showsPrec 11 b1 z)’ + In the expression: showString "MkFoo " (showsPrec 11 b1 z) In the second argument of ‘showParen’, namely - ‘((.) (showString "MkFoo ") (showsPrec 11 b1))’ - In the expression: - showParen (a >= 11) ((.) (showString "MkFoo ") (showsPrec 11 b1)) + ‘(\ z -> showString "MkFoo " (showsPrec 11 b1 z))’ When typechecking the code for ‘showsPrec’ in a derived instance for ‘Show (Foo LiftedRep)’: To see the code I am typechecking, use -ddump-deriv + ===================================== testsuite/tests/typecheck/should_fail/T15883e.stderr ===================================== @@ -1,71 +1,26 @@ - -T15883e.hs:16:1: error: [GHC-39999] - • Ambiguous type variable ‘d0’ arising from a use of ‘k’ - prevents the constraint ‘(Data d0)’ from being solved. - Probable fix: use a type annotation to specify what ‘d0’ should be. - Potentially matching instances: - instance (Data a, Data b) => Data (Either a b) - -- Defined in ‘GHC.Internal.Data.Data’ - instance Data a => Data (Down a) - -- Defined in ‘GHC.Internal.Data.Data’ - ...plus 20 others - ...plus 47 instances involving out-of-scope types - (use -fprint-potential-instances to see them all) - • In the expression: z (\ a1 -> MkFoo a1) `k` a1 - In an equation for ‘GHC.Internal.Data.Data.gfoldl’: - GHC.Internal.Data.Data.gfoldl k z (MkFoo a1) - = (z (\ a1 -> MkFoo a1) `k` a1) - When typechecking the code for ‘GHC.Internal.Data.Data.gfoldl’ - in a derived instance for ‘Data (Foo LiftedRep)’: - To see the code I am typechecking, use -ddump-deriv - In the instance declaration for ‘Data (Foo LiftedRep)’ - -T15883e.hs:16:1: error: [GHC-46956] - • Couldn't match expected type ‘a’ with actual type ‘d0’ - because type variable ‘a’ would escape its scope - This (rigid, skolem) type variable is bound by - a type expected by the context: - forall a. a - at T15883e.hs:16:1-52 - • In the first argument of ‘MkFoo’, namely ‘a1’ - In the expression: MkFoo a1 - In the first argument of ‘z’, namely ‘(\ a1 -> MkFoo a1)’ +T15883e.hs:16:1: error: [GHC-91028] + • Couldn't match type ‘d0’ with ‘forall a. a’ + Expected: d0 -> Foo LiftedRep + Actual: (forall a. a) -> Foo LiftedRep + Cannot instantiate unification variable ‘d0’ + with a type involving polytypes: forall a. a + • In the first argument of ‘z’, namely ‘MkFoo’ + In the first argument of ‘k’, namely ‘z MkFoo’ + In the expression: z MkFoo `k` a1 When typechecking the code for ‘GHC.Internal.Data.Data.gfoldl’ in a derived instance for ‘Data (Foo LiftedRep)’: To see the code I am typechecking, use -ddump-deriv - • Relevant bindings include a1 :: d0 (bound at T15883e.hs:16:1) -T15883e.hs:16:1: error: [GHC-39999] - • Ambiguous type variable ‘b0’ arising from a use of ‘k’ - prevents the constraint ‘(Data b0)’ from being solved. - Probable fix: use a type annotation to specify what ‘b0’ should be. - Potentially matching instances: - instance (Data a, Data b) => Data (Either a b) - -- Defined in ‘GHC.Internal.Data.Data’ - instance Data a => Data (Down a) - -- Defined in ‘GHC.Internal.Data.Data’ - ...plus 20 others - ...plus 47 instances involving out-of-scope types - (use -fprint-potential-instances to see them all) - • In the expression: k (z (\ a1 -> MkFoo a1)) - In an equation for ‘GHC.Internal.Data.Data.gunfold’: - GHC.Internal.Data.Data.gunfold k z _ = k (z (\ a1 -> MkFoo a1)) +T15883e.hs:16:1: error: [GHC-91028] + • Couldn't match type ‘b0’ with ‘forall a. a’ + Expected: b0 -> Foo LiftedRep + Actual: (forall a. a) -> Foo LiftedRep + Cannot instantiate unification variable ‘b0’ + with a type involving polytypes: forall a. a + • In the first argument of ‘z’, namely ‘MkFoo’ + In the first argument of ‘k’, namely ‘(z MkFoo)’ + In the expression: k (z MkFoo) When typechecking the code for ‘GHC.Internal.Data.Data.gunfold’ in a derived instance for ‘Data (Foo LiftedRep)’: To see the code I am typechecking, use -ddump-deriv - In the instance declaration for ‘Data (Foo LiftedRep)’ -T15883e.hs:16:1: error: [GHC-46956] - • Couldn't match expected type ‘a’ with actual type ‘b0’ - because type variable ‘a’ would escape its scope - This (rigid, skolem) type variable is bound by - a type expected by the context: - forall a. a - at T15883e.hs:16:1-52 - • In the first argument of ‘MkFoo’, namely ‘a1’ - In the expression: MkFoo a1 - In the first argument of ‘z’, namely ‘(\ a1 -> MkFoo a1)’ - When typechecking the code for ‘GHC.Internal.Data.Data.gunfold’ - in a derived instance for ‘Data (Foo LiftedRep)’: - To see the code I am typechecking, use -ddump-deriv - • Relevant bindings include a1 :: b0 (bound at T15883e.hs:16:1) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f1f7a9d27adeab926777d39ffc0263a453904f34...3438cf2131189b7dbc3cd7a6b75fe63dab946955 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f1f7a9d27adeab926777d39ffc0263a453904f34...3438cf2131189b7dbc3cd7a6b75fe63dab946955 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 18:52:06 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 17 Dec 2024 13:52:06 -0500 Subject: [Git][ghc/ghc][master] testsuite: Use math.inf instead of division-by-zero Message-ID: <6761c8569314e_18074134aef493079@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: e86b1b20 by Ben Gamari at 2024-12-17T13:51:39-05:00 testsuite: Use math.inf instead of division-by-zero This both more directly captures the intent and also fixes #25580. - - - - - 1 changed file: - testsuite/driver/perf_notes.py Changes: ===================================== testsuite/driver/perf_notes.py ===================================== @@ -21,6 +21,7 @@ import sys from collections import namedtuple, defaultdict from math import ceil, trunc +import math from testutil import passed, failBecause, testing_metrics, print_table from term_color import Color, colored @@ -140,7 +141,7 @@ class MetricAcceptanceWindow: class AlwaysAccept(MetricAcceptanceWindow): def get_bounds(self, baseline: float) -> Tuple[float, float]: - return (-1/0, +1/0) + return (-math.inf, +math.inf) def describe(self) -> str: raise NotImplemented View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e86b1b2013e3fcf51a753d2acfee4e50f8fc69f5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e86b1b2013e3fcf51a753d2acfee4e50f8fc69f5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 18:52:42 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Tue, 17 Dec 2024 13:52:42 -0500 Subject: [Git][ghc/ghc][master] rts: Fix incorrect format specifiers in era profiling Message-ID: <6761c87a8e38a_1807416f1d7897161@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 430d965a by Ben Gamari at 2024-12-17T13:52:15-05:00 rts: Fix incorrect format specifiers in era profiling Fixes #25581. - - - - - 1 changed file: - rts/ProfHeap.c Changes: ===================================== rts/ProfHeap.c ===================================== @@ -958,9 +958,9 @@ dumpCensus( Census *census ) count * sizeof(W_)); break; case HEAP_BY_ERA: - fprintf(hp_file, "%lu", (StgWord)ctr->identity); + fprintf(hp_file, "%" FMT_Word, (StgWord)ctr->identity); char str_era[100]; - sprintf(str_era, "%lu", (StgWord)ctr->identity); + sprintf(str_era, "%" FMT_Word, (StgWord)ctr->identity); traceHeapProfSampleString(0, str_era, count * sizeof(W_)); break; case HEAP_BY_MOD: View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/430d965a176d6c9e629d169fa0606923275c8332 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/430d965a176d6c9e629d169fa0606923275c8332 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Tue Dec 17 22:10:42 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Tue, 17 Dec 2024 17:10:42 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports] 31 commits: Add release notes for some backported 9.10.2 patches. Message-ID: <6761f6e2d2ce6_3d2de740577c102379@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports at Glasgow Haskell Compiler / GHC Commits: 5cd61a7d by Andreas Klebinger at 2024-12-17T22:47:19+01:00 Add release notes for some backported 9.10.2 patches. Contains notes for: !11938: Escape multiple arguments in the settings file !12201: RTS: Emit warning when -M < -H !12495: Update autoconf scripts !12500: GHCi: support cross-module inlining of breakpoints !12550: wasm: use scheduler.postTask() for context switch when available !12569: Split out the C-- preprocessor, and make it pass -g0 - - - - - 1358d141 by Andreas Klebinger at 2024-12-17T22:47:26+01:00 -fprof-late: Only insert cost centres on functions/non-workfree cafs. They are usually useless and doing so for data values comes with a large compile time/code size overhead. Fixes #24103 (cherry picked from commit 9b4129a580e6c1d18197ef2ed3a8b89d52a2b133) - - - - - a5ec32ab by Ben Gamari at 2024-12-17T22:47:26+01:00 IPE: Eliminate dependency on Read Instead of encoding the closure type as decimal string we now simply represent it as an integer, eliminating the need for `Read` in `GHC.Internal.InfoProv.Types.peekInfoProv`. Closes #24504. ------------------------- Metric Decrease: T24602_perf_size size_hello_artifact ------------------------- (cherry picked from commit ab840ce6f83a74f36dac939d087b69f97404399a) - - - - - aa9b67d9 by Cheng Shao at 2024-12-17T22:47:26+01:00 testsuite: fix testwsdeque with recent clang This patch fixes compilation of testwsdeque.c with recent versions of clang, which will fail with the error below: ``` testwsdeque.c:95:33: error: warning: format specifies type 'long' but the argument has type 'void *' [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~~ ^ testwsdeque.c:95:39: error: warning: format specifies type 'int' but the argument has type 'StgWord' (aka 'unsigned long') [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~ ^~~ | %lu testwsdeque.c:133:42: error: error: incompatible function pointer types passing 'void (void *)' to parameter of type 'OSThreadProc *' (aka 'void *(*)(void *)') [-Wincompatible-function-pointer-types] 133 | createOSThread(&ids[n], "thief", thief, (void*)(StgWord)n); | ^~~~~ /workspace/ghc/_build/stage1/lib/../lib/x86_64-linux-ghc-9.11.20240502/rts-1.0.2/include/rts/OSThreads.h:193:51: error: note: passing argument to parameter 'startProc' here 193 | OSThreadProc *startProc, void *param); | ^ 2 warnings and 1 error generated. ``` (cherry picked from commit a9979f55d0f688fabd25ee318e44b9addd904988) - - - - - 55a4de3d by Cheng Shao at 2024-12-17T22:47:26+01:00 ghc-heap: fix typo in ghc-heap cbits (cherry picked from commit 2b1af08b94024c104b54eadd710855e9f8a90fb6) - - - - - 0cfc58c1 by doyougnu at 2024-12-17T22:47:26+01:00 testsuite: expand size testing infrastructure - closes #24191 - adds windows_skip, wasm_skip, wasm_arch, find_so, _find_so - path_from_ghcPkg, collect_size_ghc_pkg, collect_object_size, find_non_inplace functions to testsuite - adds on_windows and req_dynamic_ghc predicate to testsuite The design is to not make the testsuite too smart and simply offload to ghc-pkg for locations of object files and directories. (cherry picked from commit 9bae34d87f6c978e03031c549920071857c9080c) - - - - - ad97368b by Matthew Pickering at 2024-12-17T22:47:26+01:00 tests: Widen acceptance window for dir and so size tests These are testing things which are sometimes out the control of a GHC developer. Therefore we shouldn't fail CI if something about these dependencies change because we can't do anything about it. It is still useful to have these statistics for visualisation in grafana though. Ticket #24759 (cherry picked from commit c49493f242fc78fbf23ef3642df531a19c3b4b24) - - - - - 29da690d by Matthew Pickering at 2024-12-17T22:47:26+01:00 Disable rts_so test It has already manifested large fluctuations and destabilising CI Fixes #24762 (cherry picked from commit 9562808d02db67838844d874c632f18af904949c) - - - - - b3dafbc4 by Torsten Schmits at 2024-12-17T22:47:26+01:00 refactor quadratic search in warnMissingHomeModules (cherry picked from commit bc672166acd8f2815d58b6d214e69373abec4486) - - - - - b40c76e2 by Torsten Schmits at 2024-12-17T22:47:26+01:00 add test that runs MakeDepend on thousands of modules (cherry picked from commit 7875e8cbe5d9b69a1a77354317b2bf9478172686) - - - - - 317a8454 by Matthew Pickering at 2024-12-17T22:47:26+01:00 driver: Fix -Wmissing-home-modules when multiple units have the same module name It was assumed that module names were unique but that isn't true with multiple units. The fix is quite simple, maintain a set of `(ModuleName, UnitId)` and query that to see whether the module has been specified. Fixes #25122 (cherry picked from commit 951ce3d5904a1d34d49787d444f99e251e24d4e7) - - - - - f268975d by Sylvain Henry at 2024-12-17T22:47:26+01:00 Reverse arguments to stgCallocBytes (fix #24828) (cherry picked from commit 6838a7c32ca29b5d44adc9d6280d3a960f31be7c) - - - - - 2da93f8e by Ben Gamari at 2024-12-17T22:47:26+01:00 rts: Fix size of StgOrigThunkInfo frames Previously the entry code of the `stg_orig_thunk` frame failed to account for the size of the profiling header as it hard-coded the frame size. Fix this. Fixes #24809. (cherry picked from commit 6d7e6ad803be11cb7a79dca727c37e4ef21cda4b) - - - - - 6a2187a9 by Fendor at 2024-12-17T22:47:26+01:00 Add regression test T24809 for stg_orig_thunk_info_frame size (cherry picked from commit c645fe406cd4a3f4c152e51dfbcdeeb5e2930fb1) - - - - - df8999d9 by Andreas Klebinger at 2024-12-17T22:47:26+01:00 bindists: Check for existence of share folder before trying to copy it. This folder isn't distributed in windows bindists A lack of doing so resulted us copying loads of files twice. (cherry picked from commit 4181aa40fff5653a121cd2ece33ab0f7454d421d) - - - - - 07f4469a by Matthew Pickering at 2024-12-17T22:47:26+01:00 Remove ad-hoc installation of mingw toolchain in relocatable bindists This reverts 616ac30026e8dd7d2ebb98d92dde071eedf5d951 The choice about whether to install mingw is taken in the installation makefile. This is also broken on non-windows systems. The actual issue was the EnableDistroToolchain variable wasn't declared in mk/config.mk and therefore the check to install mingw was failing. (cherry picked from commit d216510e43deca5a9a221d2b799face293e38299) - - - - - 03aab781 by Cheng Shao at 2024-12-17T22:47:26+01:00 testsuite: fix T17920 for wasm backend T17920 was marked as fragile on wasm before; it can be trivially fixed by avoiding calling variadic printf() in cmm. (cherry picked from commit 7b4c19983bf6bc11b519b437a6204c38672721ea) - - - - - 587f1c03 by Simon Peyton Jones at 2024-12-17T22:47:26+01:00 Better skolemisation As #24810 showed, it is (a little) better to skolemise en-bloc, so that Note [Let-bound skolems] fires more often. See Note [Skolemisation en bloc] in GHC.Tc.Utils.Instantiate. (cherry picked from commit 3d9e4ce68a55f6bc5246d2d77729676010e85bbd) - - - - - 75f53136 by Ryan Scott at 2024-12-17T22:47:26+01:00 Add missing parenthesizePat in cvtp We need to ensure that the output of `cvtp` is parenthesized (at precedence `sigPrec`) so that any pattern signatures with a surrounding pattern signature can parse correctly. Fixes #24837. (cherry picked from commit a3cd3a1d0d186f2aa4d0273c6b3e74a442de2ef0) - - - - - 13404003 by crumbtoo at 2024-12-17T22:47:26+01:00 user_guide: Fix typo in MultiWayIf chapter Close #24829 (cherry picked from commit c5e00c35927d574f71bf77449817b131d1749750) - - - - - e97ed6ee by Cheng Shao at 2024-12-17T22:47:26+01:00 rts: fix missing function prototypes in ClosureMacros.h (cherry picked from commit 3ca72ad974169aa39f391774875a9cc2a77ee967) - - - - - 9f569a33 by Cheng Shao at 2024-12-17T22:47:26+01:00 rts: use __builtin_offsetof to implement STG_FIELD_OFFSET This patch fixes the STG_FIELD_OFFSET macro definition by using __builtin_offsetof, which is what gcc/clang uses to implement offsetof in standard C. The previous definition that uses NULL pointer involves subtle undefined behavior in C and thus reported by UndefinedBehaviorSanitizer as well: ``` rts/Capability.h:243:58: runtime error: member access within null pointer of type 'Capability' (aka 'struct Capability_') SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Capability.h:243:58 ``` (cherry picked from commit 05c4fafbc1693164d5f06ed062fc73bbf3f78deb) - - - - - 4d1ca681 by Cheng Shao at 2024-12-17T22:47:26+01:00 rts: fix an unaligned load in nonmoving gc This patch fixes an unaligned load in nonmoving gc by ensuring the closure address is properly untagged first before attempting to prefetch its header. The unaligned load is reported by UndefinedBehaviorSanitizer: ``` rts/sm/NonMovingMark.c:921:9: runtime error: member access within misaligned address 0x0042005f3a71 for type 'StgClosure' (aka 'struct StgClosure_'), which requires 8 byte alignment 0x0042005f3a71: note: pointer points here 00 00 00 98 43 13 8e 12 7f 00 00 50 3c 5f 00 42 00 00 00 58 17 b7 92 12 7f 00 00 89 cb 5e 00 42 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/NonMovingMark.c:921:9 ``` This issue had previously gone unnoticed since it didn't really harm runtime correctness, the invalid header address directly loaded from a tagged pointer is only used as prefetch address and will not cause segfaults. However, it still should be corrected because the prefetch would be rendered useless by this issue, and untagging only involves a single bitwise operation without memory access so it's cheap enough to add. (cherry picked from commit c77a48af6e1f38337b305fec794e8c999f1c7f3a) - - - - - 53c93467 by Cheng Shao at 2024-12-17T22:47:26+01:00 rts: ensure gc_thread/gen_workspace is allocated with proper alignment gc_thread/gen_workspace are required to be aligned by 64 bytes. However, this property has not been properly enforced before, and numerous alignment violations at runtime has been caught by UndefinedBehaviorSanitizer that look like: ``` rts/sm/GC.c:1167:8: runtime error: member access within misaligned address 0x0000027a3390 for type 'gc_thread' (aka 'struct gc_thread_'), which requires 64 byte alignment 0x0000027a3390: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1167:8 rts/sm/GC.c:1184:13: runtime error: member access within misaligned address 0x0000027a3450 for type 'gen_workspace' (aka 'struct gen_workspace_'), which requires 64 byte alignment 0x0000027a3450: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1184:13 ``` This patch fixes the gc_thread/gen_workspace misalignment issue by explicitly allocating them with alignment constraint. (cherry picked from commit 7a660042395614e4b19534baf5b779f65059861e) - - - - - 112e7d0d by Cheng Shao at 2024-12-17T22:47:26+01:00 hadrian: disable PIC for in-tree GMP on wasm32 This patch disables PIC for in-tree GMP on wasm32 target. Enabling PIC unconditionally adds undesired code size and runtime overhead for wasm32. (cherry picked from commit f9c1ae122ec642c0d9236dffc971bc2d1ca38fba) - - - - - 81e42325 by Cheng Shao at 2024-12-17T22:47:27+01:00 hadrian: disable in-tree gmp fft code path for wasm32 This patch disables in-tree GMP FFT code paths for wasm32 target in order to give up some performance of multiplying very large operands in exchange for reduced code size. (cherry picked from commit 1a32f82807ae01813f14bdf12fed75eb32799e18) - - - - - d622a6d3 by Cheng Shao at 2024-12-17T22:47:27+01:00 hadrian: build in-tree GMP with malloc-notreentrant on wasm32 This patch makes hadrian build in-tree GMP with the --enable-alloca=malloc-notreentrant configure option. We will only need malloc-reentrant when we have threaded RTS and SMP support on wasm32, which will take some time to happen, before which we should use malloc-notreentrant to avoid undesired runtime overhead. (cherry picked from commit 06277d56de91c8d21cbf71e8bc4096925b863acc) - - - - - 3e9b768d by Andreas Klebinger at 2024-12-17T22:47:27+01:00 Add release notes for some backported patches. Add entries for the following backported MRs: !12498: -fprof-late: Don't add cost centres to static data. !12565: IPE: Eliminate dependency on Read !12591: ghc-heap: fix typo in ghc-heap cbits !12607: refactor quadratic search in warnMissingHomeModules !12621: rts: Fix size of StgOrigThunkInfo frames !12649 # bindists: Check for existence of shared folder before trying to copy it. !12653: Better skolemisation !12734: Various rts fixes for issues spotted by UndefinedBehaviorSanitizer !12592: hadrian: adjust in-tree GMP configure options for wasm32 - - - - - 53840a38 by Cheng Shao at 2024-12-17T22:47:27+01:00 hadrian: fix hadrian building with ghc-9.10.1 (cherry picked from commit be514bb48629747258416e602c8b00810b3863b0) - - - - - 8e8dafb3 by Cheng Shao at 2024-12-17T22:47:27+01:00 linters: fix lint-whitespace compilation with ghc-9.10.1 (cherry picked from commit ad38e954bf088b43fa1cecfeaf474b6b9c11e2ed) - - - - - 71e4f953 by Zubin Duggal at 2024-12-17T22:50:39+01:00 testsuite: Handle exceptions in framework_fail when testdir is not initialised When `framework_fail` is called before initialising testdir, it would fail with an exception reporting the testdir not being initialised instead of the actual failure. Ensure we report the actual reason for the failure instead of failing in this way. One way this can manifest is when trying to run a test that doesn't exist using `--only` (cherry picked from commit c56d728e1f8702db02cf7e7e3cdc567b3df47ac3) - - - - - 30 changed files: - .gitlab/ci.sh - compiler/GHC/Core/LateCC.hs - compiler/GHC/Core/LateCC/TopLevelBinds.hs - compiler/GHC/Core/LateCC/Types.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/Type.hs - compiler/GHC/Core/Utils.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/StgToCmm/InfoTableProv.hs - compiler/GHC/Tc/Types/Evidence.hs - compiler/GHC/Tc/Utils/Instantiate.hs - compiler/GHC/Tc/Utils/TcType.hs - compiler/GHC/Tc/Utils/Unify.hs - compiler/GHC/ThToHs.hs - compiler/GHC/Types/RepType.hs - compiler/GHC/Types/Var.hs - docs/users_guide/9.10.2-notes.rst - docs/users_guide/exts/multiway_if.rst - docs/users_guide/profiling.rst - hadrian/bindist/Makefile - hadrian/bindist/config.mk.in - hadrian/cabal.project - hadrian/hadrian.cabal - hadrian/src/Rules/BinaryDist.hs - hadrian/src/Settings/Builders/Configure.hs - libraries/ghc-heap/cbits/Stack.cmm - libraries/ghc-internal/src/GHC/Internal/InfoProv/Types.hsc - linters/lint-whitespace/lint-whitespace.cabal The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/11f32847c513a9afd54f4df06c1f08d17ae2e0ca...71e4f953e47ef6b71d6704989aadbb29e4df5c22 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/11f32847c513a9afd54f4df06c1f08d17ae2e0ca...71e4f953e47ef6b71d6704989aadbb29e4df5c22 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 06:57:32 2024 From: gitlab at gitlab.haskell.org (Andrei Borzenkov (@sand-witch)) Date: Wed, 18 Dec 2024 01:57:32 -0500 Subject: [Git][ghc/ghc][wip/sand-witch/flip-set-field] Flip the order of arguments of setField (#24668) Message-ID: <6762725cbc7fa_8fa092c910b0887ca@gitlab.mail> Andrei Borzenkov pushed to branch wip/sand-witch/flip-set-field at Glasgow Haskell Compiler / GHC Commits: 7b3e6a69 by Andrei Borzenkov at 2024-12-18T10:57:14+04:00 Flip the order of arguments of setField (#24668) GHC Proposal 583 "HasField redesign" specifies the following order of a setField function arguments as this: setField :: forall fld a b. SetField fld a b. b -> a -> a This patch flips the application order to match the spec. - - - - - 6 changed files: - compiler/GHC/Rename/Expr.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/overloaded_record_update.rst - testsuite/tests/parser/should_fail/RecordDotSyntaxFail10.hs - testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.hs - testsuite/tests/parser/should_run/RecordDotSyntax1.hs Changes: ===================================== compiler/GHC/Rename/Expr.hs ===================================== @@ -2844,10 +2844,11 @@ mkGetField :: Name -> LHsExpr GhcRn -> LocatedAn NoEpAnns FieldLabelString -> Hs mkGetField get_field arg field = unLoc (head $ mkGet get_field [arg] field) -- mkSetField a field b calculates a set_field @field expression. --- e.g mkSetSetField a field b = set_field @"field" a b (read as "set field 'field' on a to b"). +-- e.g mkSetSetField a field b = set_field @"field" a b (read as "set field 'field' to a on b"). +-- NB: the order of aruments is specified by GHC Proposal 583: HasField redesign. mkSetField :: Name -> LHsExpr GhcRn -> LocatedAn NoEpAnns FieldLabelString -> LHsExpr GhcRn -> HsExpr GhcRn mkSetField set_field a (L _ (FieldLabelString field)) b = - genHsApp (genHsApp (genHsVar set_field `genAppType` genHsTyLit field) a) b + genHsApp (genHsApp (genHsVar set_field `genAppType` genHsTyLit field) b) a mkGet :: Name -> [LHsExpr GhcRn] -> LocatedAn NoEpAnns FieldLabelString -> [LHsExpr GhcRn] mkGet get_field l@(r : _) (L _ (FieldLabelString field)) = ===================================== docs/users_guide/9.14.1-notes.rst ===================================== @@ -12,7 +12,7 @@ Language ~~~~~~~~ * ``-Wincomplete-record-selectors`` is now part of `-Wall`, as specified - by `GHC Proposal 516: add warning for incomplete record selectors _`. + by `GHC Proposal 516: add warning for incomplete record selectors `_. Hence, if a library is compiled with ``-Werror``, compilation may now fail. Solution: fix the library. Workaround: add ``-Werror=no-incomplete-record-selectors``. @@ -25,6 +25,19 @@ Language :extension:`TypeAbstractions`. The warning flag``deprecated-type-abstractions`` has also been removed from the compiler. +* :extension:`OverloadedRecordUpdate` now passes the arguments to a ``setField`` function + in the flipped order, as specified by `GHC Proposal 583: HasField redesign `_. + + Previously GHC expected ``setField`` to have this type: :: + + setField :: forall (fld :: Symbol) a r. r -> a -> r + + And that's what GHC expects now: :: + + setField :: forall (fld :: Symbol) a r. a -> r -> r + + That will break the combination of :extension:`OverloadedRecordUpdate` with :extension:`RebindableSyntax`. + Compiler ~~~~~~~~ ===================================== docs/users_guide/exts/overloaded_record_update.rst ===================================== @@ -30,8 +30,8 @@ Example: getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. - setField :: forall x r a . HasField x r a => r -> a -> r - setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. + setField :: forall x r a . HasField x r a => a -> r -> r + setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. data Person = Person { name :: String } deriving Show instance HasField "name" Person String where ===================================== testsuite/tests/parser/should_fail/RecordDotSyntaxFail10.hs ===================================== @@ -11,8 +11,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Bar' data Foo = Foo { foo :: Bar } deriving (Show, Eq) ===================================== testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.hs ===================================== @@ -13,8 +13,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Int' data Foo = Foo { foo :: Int } deriving (Show, Eq) ===================================== testsuite/tests/parser/should_run/RecordDotSyntax1.hs ===================================== @@ -21,8 +21,8 @@ class HasField x r a | x r -> a where getField :: forall x r a . HasField x r a => r -> a getField = snd . hasField @x -- Note: a.x = is getField @"x" a. -setField :: forall x r a . HasField x r a => r -> a -> r -setField = fst . hasField @x -- Note : a{x = b} is setField @"x" a b. +setField :: forall x r a . HasField x r a => a -> r -> r +setField b a = fst (hasField @x a) b -- Note : a{x = b} is setField @"x" b a. -- 'Foo' has 'foo' field of type 'Bar' data Foo = Foo { foo :: Bar } deriving (Show, Eq) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7b3e6a6933ecaa8b6f299e684fc29b9ab2e7bc5d -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7b3e6a6933ecaa8b6f299e684fc29b9ab2e7bc5d You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 08:31:34 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Wed, 18 Dec 2024 03:31:34 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/9.12-forward-ports Message-ID: <676288661aa8f_1eca5860ee24377a5@gitlab.mail> Zubin pushed new branch wip/9.12-forward-ports at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/9.12-forward-ports You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 11:08:13 2024 From: gitlab at gitlab.haskell.org (Matthew Pickering (@mpickering)) Date: Wed, 18 Dec 2024 06:08:13 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] fix plugin loading Message-ID: <6762ad1d2a6d2_3ea82f98a0d0215b5@gitlab.mail> Matthew Pickering pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: 01411748 by Matthew Pickering at 2024-11-27T17:38:41+00:00 fix plugin loading - - - - - 2 changed files: - compiler/GHC/Linker/Deps.hs - compiler/GHC/Unit/Module/Graph.hs Changes: ===================================== compiler/GHC/Linker/Deps.hs ===================================== @@ -152,11 +152,17 @@ get_link_deps opts pls maybe_normal_osuf span mods = do mod_graph = ldModuleGraph opts unit_env = ldUnitEnv opts - mkNk m = ModNodeKeyWithUid (GWIB (moduleName m) NotBoot) (moduleUnitId m) - all_deps = mgReachableLoop mod_graph $ map (NodeKey_Module . mkNk) (filterOut isInteractiveModule mods) + mkNk m + = let k = NodeKey_Module (ModNodeKeyWithUid (GWIB (moduleName m) NotBoot) (moduleUnitId m)) + in if mgMember mod_graph k + then k + else NodeKey_ExternalUnit (moduleUnitId m) - all_home_mods = [with_uid | NodeKey_Module with_uid <- map mkNodeKey all_deps] - all_dep_pkgs = [uid | NodeKey_ExternalUnit uid <- map mkNodeKey all_deps] + initial_keys = map mkNk (filterOut isInteractiveModule mods) + all_deps = initial_keys ++ map mkNodeKey (mgReachableLoop mod_graph initial_keys) + + all_home_mods = [with_uid | NodeKey_Module with_uid <- all_deps] + all_dep_pkgs = [uid | NodeKey_ExternalUnit uid <- all_deps] get_mod_info (ModNodeKeyWithUid gwib uid) = case lookupHug (ue_home_unit_graph unit_env) uid (gwib_mod gwib) of ===================================== compiler/GHC/Unit/Module/Graph.hs ===================================== @@ -23,6 +23,7 @@ module GHC.Unit.Module.Graph , mgReachable , mgReachableLoop , mgQuery + , mgMember , moduleGraphNodes , SummaryNode @@ -226,14 +227,15 @@ isTemplateHaskellOrQQNonBoot ms = -- | Add an ExtendedModSummary to ModuleGraph. Assumes that the new ModSummary is -- not an element of the ModuleGraph. extendMG :: ModuleGraph -> ModuleGraphNode -> ModuleGraph -extendMG ModuleGraph{..} node = mkModuleGraph (node : mg_mss) +extendMG ModuleGraph{..} node = + ModuleGraph + { mg_mss = node : mg_mss + , mg_graph = mkTransDeps (node : mg_mss) + , mg_loop_graph = mkTransLoopDeps (node : mg_mss) + } mkModuleGraph :: [ModuleGraphNode] -> ModuleGraph -mkModuleGraph nodes = ModuleGraph - { mg_mss = nodes - , mg_graph = mkTransDeps nodes - , mg_loop_graph = mkTransLoopDeps nodes - } +mkModuleGraph nodes = foldr (flip extendMG) emptyMG nodes -- | This function filters out all the instantiation nodes from each SCC of a -- topological sort. Use this with care, as the resulting "strongly connected components" @@ -424,7 +426,7 @@ mgReachableLoop :: ModuleGraph -> [NodeKey] -> [ModuleGraphNode] mgReachableLoop mg nk = map summaryNodeSummary modules_below where (td_map, lookup_node) = mg_loop_graph mg modules_below = - allReachableManyWithRoots td_map (mapMaybe lookup_node nk) + allReachableMany td_map (mapMaybe lookup_node nk) -- | Reachability Query. @mgQuery(g, a, b)@ asks: Can we reach @b@ from @a@ in @@ -439,3 +441,6 @@ mgQuery mg nka nkb = isReachable td_map na nb where na = expectJust "mgQuery:a" $ lookup_node nka nb = expectJust "mgQuery:b" $ lookup_node nkb +mgMember :: ModuleGraph -> NodeKey -> Bool +mgMember graph k = isJust $ snd (mg_graph graph) k + View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/014117486cf8503a8b48fa37b25ddbf9c906a19e -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/014117486cf8503a8b48fa37b25ddbf9c906a19e You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 12:01:59 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Wed, 18 Dec 2024 07:01:59 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/romes/25574 Message-ID: <6762b9b7ef3a_3ea82fd1e430246e@gitlab.mail> Rodrigo Mesquita pushed new branch wip/romes/25574 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/romes/25574 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 12:02:46 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Wed, 18 Dec 2024 07:02:46 -0500 Subject: [Git][ghc/ghc][wip/romes/25574] 112 commits: Don't store boot locations in finder cache Message-ID: <6762b9e6ca9b8_3ea82fd1e458248ee@gitlab.mail> Rodrigo Mesquita pushed to branch wip/romes/25574 at Glasgow Haskell Compiler / GHC Commits: 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 9c53489d by Andrei Borzenkov at 2024-12-12T15:06:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 13fe48d4 by Matthew Pickering at 2024-12-12T15:07:19-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - 62a2b25f by Sylvain Henry at 2024-12-14T04:31:09-05:00 TNTC: set CmmProc entry_label properly (#25565) Before this patch we were renaming the entry label of a CmmProc late in the CmmToAsm pass. It led to inconsistencies and to some labels being used in info tables but not being emitted (#25565). Now we set the CmmProc entry label earlier in the StgToCmm monad and we don't renamed it afterwards. - - - - - b339e7c3 by Simon Hengel at 2024-12-14T04:31:47-05:00 Make filter functionality for system tools line-based This is more efficient as: - All existing filter functions were line-based anyway. They broke up the input into lines and then joined it back together. - We already break up the output from system tools into lines when processing it. Splitting up the output of system tools once and then filtering and processing it reduces both code and runtime complexity. - - - - - 39669077 by Simon Hengel at 2024-12-14T04:31:47-05:00 Refactoring: Don't use a `Chan` when parsing SysTools output - - - - - 64756530 by Simon Peyton Jones at 2024-12-14T22:28:04-05:00 Tidy up the handling of `assert` Fixes #25493 - - - - - 8658fbc1 by Rodrigo Mesquita at 2024-12-14T22:28:41-05:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 80f0e02d by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - 175a1355 by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - 8ef2dad6 by Simon Peyton Jones at 2024-12-17T02:48:09-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - 7decbb7d by Rodrigo Mesquita at 2024-12-18T12:02:29+00:00 user_guide: Note -pgmP/-optP are for /Haskell/-CPP Fixes #25574 - - - - - 28 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/Opt/Specialise.hs - compiler/GHC/Core/SimpleOpt.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/Core/Type.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6a7f966e017b5b087faff3a0483ca11045c321e9...7decbb7d248f7f51799e8c665b3c758488c05fb9 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6a7f966e017b5b087faff3a0483ca11045c321e9...7decbb7d248f7f51799e8c665b3c758488c05fb9 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 12:25:20 2024 From: gitlab at gitlab.haskell.org (Sjoerd Visscher (@trac-sjoerd_visscher)) Date: Wed, 18 Dec 2024 07:25:20 -0500 Subject: [Git][ghc/ghc][wip/T18462] Multiplicity annotation on records Message-ID: <6762bf30d05f2_3ea82f115b0fc304fd@gitlab.mail> Sjoerd Visscher pushed to branch wip/T18462 at Glasgow Haskell Compiler / GHC Commits: 0ab9099c by Sjoerd Visscher at 2024-12-18T13:25:03+01:00 Multiplicity annotation on records - - - - - 30 changed files: - compiler/GHC/Hs/Decls.hs - compiler/GHC/Hs/Expr.hs - compiler/GHC/Hs/Instances.hs - compiler/GHC/Hs/Type.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Iface/Ext/Ast.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/PostProcess.hs - compiler/GHC/Parser/PostProcess/Haddock.hs - compiler/GHC/Rename/Expr.hs - compiler/GHC/Rename/HsType.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Tc/Gen/App.hs - compiler/GHC/Tc/Gen/HsType.hs - compiler/GHC/Tc/Gen/Sig.hs - compiler/GHC/Tc/TyCl.hs - compiler/GHC/ThToHs.hs - compiler/Language/Haskell/Syntax/Decls.hs - compiler/Language/Haskell/Syntax/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/linear_types.rst - testsuite/tests/ghc-api/exactprint/Test20239.stderr - 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/linear/should_compile/NonLinearRecord.hs - testsuite/tests/linear/should_compile/all.T - + testsuite/tests/linear/should_fail/LinearRecFieldMany.hs - + testsuite/tests/linear/should_fail/LinearRecFieldMany.stderr - testsuite/tests/linear/should_fail/all.T The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0ab9099cd9c64d52be5656c090d97c1a799afcb0 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0ab9099cd9c64d52be5656c090d97c1a799afcb0 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 12:31:34 2024 From: gitlab at gitlab.haskell.org (Sjoerd Visscher (@trac-sjoerd_visscher)) Date: Wed, 18 Dec 2024 07:31:34 -0500 Subject: [Git][ghc/ghc][wip/T18462] Multiplicity annotation on records Message-ID: <6762c0a61eecd_3ea82f11cd2243091f@gitlab.mail> Sjoerd Visscher pushed to branch wip/T18462 at Glasgow Haskell Compiler / GHC Commits: 18490eb4 by Sjoerd Visscher at 2024-12-18T13:31:28+01:00 Multiplicity annotation on records - - - - - 30 changed files: - compiler/GHC/Hs/Decls.hs - compiler/GHC/Hs/Expr.hs - compiler/GHC/Hs/Instances.hs - compiler/GHC/Hs/Type.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Iface/Ext/Ast.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/PostProcess.hs - compiler/GHC/Parser/PostProcess/Haddock.hs - compiler/GHC/Rename/Expr.hs - compiler/GHC/Rename/HsType.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Tc/Gen/App.hs - compiler/GHC/Tc/Gen/HsType.hs - compiler/GHC/Tc/Gen/Sig.hs - compiler/GHC/Tc/TyCl.hs - compiler/GHC/ThToHs.hs - compiler/Language/Haskell/Syntax/Decls.hs - compiler/Language/Haskell/Syntax/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/linear_types.rst - testsuite/tests/ghc-api/exactprint/Test20239.stderr - 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/linear/should_compile/NonLinearRecord.hs - testsuite/tests/linear/should_compile/all.T - + testsuite/tests/linear/should_fail/LinearRecFieldMany.hs - + testsuite/tests/linear/should_fail/LinearRecFieldMany.stderr - testsuite/tests/linear/should_fail/all.T The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/18490eb47c4f31943bc1b7990d4577fdf35dc4f0 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/18490eb47c4f31943bc1b7990d4577fdf35dc4f0 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 14:13:05 2024 From: gitlab at gitlab.haskell.org (Sjoerd Visscher (@trac-sjoerd_visscher)) Date: Wed, 18 Dec 2024 09:13:05 -0500 Subject: [Git][ghc/ghc][wip/T18462] Multiplicity annotation on records Message-ID: <6762d871bda9_36d6695e225c482e1@gitlab.mail> Sjoerd Visscher pushed to branch wip/T18462 at Glasgow Haskell Compiler / GHC Commits: fa2828c8 by Sjoerd Visscher at 2024-12-18T15:12:58+01:00 Multiplicity annotation on records - - - - - 30 changed files: - compiler/GHC/Hs/Decls.hs - compiler/GHC/Hs/Expr.hs - compiler/GHC/Hs/Instances.hs - compiler/GHC/Hs/Type.hs - compiler/GHC/HsToCore/Docs.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Iface/Ext/Ast.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/PostProcess.hs - compiler/GHC/Parser/PostProcess/Haddock.hs - compiler/GHC/Rename/Expr.hs - compiler/GHC/Rename/HsType.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Tc/Gen/App.hs - compiler/GHC/Tc/Gen/HsType.hs - compiler/GHC/Tc/Gen/Sig.hs - compiler/GHC/Tc/TyCl.hs - compiler/GHC/ThToHs.hs - compiler/Language/Haskell/Syntax/Decls.hs - compiler/Language/Haskell/Syntax/Extension.hs - compiler/Language/Haskell/Syntax/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/linear_types.rst - testsuite/tests/ghc-api/exactprint/Test20239.stderr - 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/linear/should_compile/NonLinearRecord.hs - testsuite/tests/linear/should_compile/all.T - + testsuite/tests/linear/should_fail/LinearRecFieldMany.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/fa2828c88540763ed6d9ae16f719a931496e609a -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/fa2828c88540763ed6d9ae16f719a931496e609a You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 14:44:54 2024 From: gitlab at gitlab.haskell.org (Sjoerd Visscher (@trac-sjoerd_visscher)) Date: Wed, 18 Dec 2024 09:44:54 -0500 Subject: [Git][ghc/ghc][wip/T18462] Multiplicity annotation on records Message-ID: <6762dfe67625d_36d669a475e05701d@gitlab.mail> Sjoerd Visscher pushed to branch wip/T18462 at Glasgow Haskell Compiler / GHC Commits: 8fadfe4b by Sjoerd Visscher at 2024-12-18T15:44:48+01:00 Multiplicity annotation on records - - - - - 30 changed files: - compiler/GHC/Hs/Decls.hs - compiler/GHC/Hs/Expr.hs - compiler/GHC/Hs/Instances.hs - compiler/GHC/Hs/Type.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Iface/Ext/Ast.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/PostProcess.hs - compiler/GHC/Parser/PostProcess/Haddock.hs - compiler/GHC/Rename/Expr.hs - compiler/GHC/Rename/HsType.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Tc/Gen/App.hs - compiler/GHC/Tc/Gen/HsType.hs - compiler/GHC/Tc/Gen/Sig.hs - compiler/GHC/Tc/TyCl.hs - compiler/GHC/ThToHs.hs - compiler/Language/Haskell/Syntax/Decls.hs - compiler/Language/Haskell/Syntax/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/linear_types.rst - testsuite/tests/ghc-api/exactprint/Test20239.stderr - 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/linear/should_compile/NonLinearRecord.hs - testsuite/tests/linear/should_compile/all.T - + testsuite/tests/linear/should_fail/LinearRecFieldMany.hs - + testsuite/tests/linear/should_fail/LinearRecFieldMany.stderr - testsuite/tests/linear/should_fail/all.T The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8fadfe4bc2562ce99176fce3e3ea7cbefdef4dcd -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8fadfe4bc2562ce99176fce3e3ea7cbefdef4dcd You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 15:01:48 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Wed, 18 Dec 2024 10:01:48 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] 112 commits: Don't store boot locations in finder cache Message-ID: <6762e3dcbc118_36d669b9ec18577aa@gitlab.mail> Rodrigo Mesquita pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 9c53489d by Andrei Borzenkov at 2024-12-12T15:06:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 13fe48d4 by Matthew Pickering at 2024-12-12T15:07:19-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - 62a2b25f by Sylvain Henry at 2024-12-14T04:31:09-05:00 TNTC: set CmmProc entry_label properly (#25565) Before this patch we were renaming the entry label of a CmmProc late in the CmmToAsm pass. It led to inconsistencies and to some labels being used in info tables but not being emitted (#25565). Now we set the CmmProc entry label earlier in the StgToCmm monad and we don't renamed it afterwards. - - - - - b339e7c3 by Simon Hengel at 2024-12-14T04:31:47-05:00 Make filter functionality for system tools line-based This is more efficient as: - All existing filter functions were line-based anyway. They broke up the input into lines and then joined it back together. - We already break up the output from system tools into lines when processing it. Splitting up the output of system tools once and then filtering and processing it reduces both code and runtime complexity. - - - - - 39669077 by Simon Hengel at 2024-12-14T04:31:47-05:00 Refactoring: Don't use a `Chan` when parsing SysTools output - - - - - 64756530 by Simon Peyton Jones at 2024-12-14T22:28:04-05:00 Tidy up the handling of `assert` Fixes #25493 - - - - - 8658fbc1 by Rodrigo Mesquita at 2024-12-14T22:28:41-05:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 80f0e02d by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - 175a1355 by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - 8ef2dad6 by Simon Peyton Jones at 2024-12-17T02:48:09-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - 7dde226d by Matthew Pickering at 2024-12-18T15:01:31+00:00 WIP external grpah getLinkDeps and ExternalNode missing file fix plugin loading (now rebased) - - - - - 28 changed files: - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/X86/Instr.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/Opt/Specialise.hs - compiler/GHC/Core/SimpleOpt.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/Core/Type.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/014117486cf8503a8b48fa37b25ddbf9c906a19e...7dde226d1e5a411c224f18dfae9d68869e4f9b46 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/014117486cf8503a8b48fa37b25ddbf9c906a19e...7dde226d1e5a411c224f18dfae9d68869e4f9b46 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 15:05:45 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Wed, 18 Dec 2024 10:05:45 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] WIP external grpah Message-ID: <6762e4c9dc430_36d669cbfb74579f8@gitlab.mail> Rodrigo Mesquita pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: 98bde62c by Matthew Pickering at 2024-12-18T15:05:32+00:00 WIP external grpah getLinkDeps and ExternalNode missing file fix plugin loading (now rebased) - - - - - 13 changed files: - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Backpack.hs - compiler/GHC/Driver/Errors/Ppr.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/MakeFile.hs - compiler/GHC/Iface/Load.hs - compiler/GHC/Linker/Deps.hs - compiler/GHC/Unit/External.hs - + compiler/GHC/Unit/Module/External/Graph.hs - compiler/GHC/Unit/Module/Graph.hs - compiler/GHC/Unit/Module/ModIface.hs - compiler/ghc.cabal.in Changes: ===================================== compiler/GHC/Data/Graph/Directed/Reachability.hs ===================================== @@ -7,7 +7,7 @@ module GHC.Data.Graph.Directed.Reachability , graphReachability, cyclicGraphReachability -- * Reachability queries - , allReachable, allReachableMany + , allReachable, allReachableMany, allReachableManyWithRoots , isReachable, isReachableMany ) where @@ -132,6 +132,23 @@ allReachableMany (ReachabilityIndex index from to) roots = map from (IS.toList h hits = {-# SCC "allReachableMany" #-} IS.unions $ map (expectJust "reachablesG" . flip IM.lookup index) roots_i +-- | 'allReachableManyWithRoots' returns all nodes reachable from the many given @roots at . +-- +-- Properties: +-- * The list of nodes includes the @roots@ node! +-- * The list of nodes is deterministically ordered, but according to an +-- internal order determined by the indices attributed to graph nodes. +-- * This function has $O(n)$ complexity where $n$ is the number of @roots at . +-- +-- If you need a topologically sorted list, consider using the functions +-- exposed from 'GHC.Data.Graph.Directed' on 'Graph' instead ('reachableG'). +allReachableManyWithRoots :: ReachabilityIndex node -> [node] {-^ The @roots@ -} -> [node] {-^ All nodes reachable from all @roots@ -} +allReachableManyWithRoots (ReachabilityIndex index from to) roots = map from (IS.toList hits) + where roots_i = [ v | Just v <- map to roots ] + hits = IS.union (IS.fromList roots_i) + (IS.unions $ map (expectJust "reachablesG" . flip IM.lookup index) roots_i) + + -- | Fast reachability query. -- -- On graph @g@ with nodes @a@ and @b@, @isReachable g a b@ ===================================== compiler/GHC/Driver/Backpack.hs ===================================== @@ -589,6 +589,7 @@ mkBackpackMsg = do MustCompile -> empty RecompBecause reason -> text " [" <> pprWithUnitState state (ppr reason) <> text "]" LinkNode _ _ -> showMsg (text "Linking ") empty + PackageNode {} -> showMsg (text "Package ") empty -- | 'PprStyle' for Backpack messages; here we usually want the module to -- be qualified (so we can tell how it was instantiated.) But we try not ===================================== compiler/GHC/Driver/Errors/Ppr.hs ===================================== @@ -261,6 +261,7 @@ instance Diagnostic DriverMessage where ppr_node (ModuleNode _deps m) = text "module" <+> ppr_ms m ppr_node (InstantiationNode _uid u) = text "instantiated unit" <+> ppr u ppr_node (LinkNode uid _) = pprPanic "LinkNode should not be in a cycle" (ppr uid) + ppr_node (PackageNode uid _) = pprPanic "PackageNode should not be in a cycle" (ppr uid) ppr_ms :: ModSummary -> SDoc ppr_ms ms = quotes (ppr (moduleName (ms_mod ms))) <+> ===================================== compiler/GHC/Driver/Main.hs ===================================== @@ -1469,6 +1469,7 @@ batchMsgWith extra hsc_env_start mod_index recomp node = LinkNode {} -> "Linking" InstantiationNode {} -> "Instantiating" ModuleNode {} -> "Compiling" + PackageNode {} -> "Loading" hsc_env = hscSetActiveUnitId (mgNodeUnitId node) hsc_env_start dflags = hsc_dflags hsc_env logger = hsc_logger hsc_env ===================================== compiler/GHC/Driver/Make.hs ===================================== @@ -1110,7 +1110,16 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do where collect_result res_var = runMaybeT (waitResult res_var) - n_mods = sum (map countMods plan) + -- Just used for an assertion + count_mods :: BuildPlan -> Int + count_mods (SingleModule m) = count_m m + count_mods (ResolvedCycle ns) = length ns + count_mods (UnresolvedCycle ns) = length ns + + count_m (PackageNode {}) = 0 + count_m _ = 1 + + n_mods = sum (map count_mods plan) buildLoop :: [BuildPlan] -> BuildM (Maybe [ModuleGraphNode], [MakeAction]) @@ -1141,7 +1150,6 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do -> ModuleGraphNode -- The node we are compiling -> BuildM MakeAction buildSingleModule rehydrate_nodes origin mod = do - mod_idx <- nodeId !build_map <- getBuildMap hug_var <- gets hug_var -- 1. Get the direct dependencies of this module @@ -1150,17 +1158,19 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do -- which would retain all the result variables, preventing us from collecting them -- after they are no longer used. !build_deps = getDependencies direct_deps build_map - let !build_action = + !build_action <- case mod of InstantiationNode uid iu -> do - withCurrentUnit (mgNodeUnitId mod) $ do + mod_idx <- nodeId + return $ withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps executeInstantiationNode mod_idx n_mods hug uid iu return (Nothing, deps) - ModuleNode _build_deps ms -> + ModuleNode _build_deps ms -> do let !old_hmi = M.lookup (msKey ms) old_hpt rehydrate_mods = mapMaybe nodeKeyModName <$> rehydrate_nodes - in withCurrentUnit (mgNodeUnitId mod) $ do + mod_idx <- nodeId + return $ withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps hmi <- executeCompileNode mod_idx n_mods old_hmi hug rehydrate_mods ms -- Write the HMI to an external cache (if one exists) @@ -1171,10 +1181,12 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do liftIO $ modifyMVar_ hug_var (return . addHomeModInfoToHug hmi) return (Just hmi, addToModuleNameSet (mgNodeUnitId mod) (ms_mod_name ms) deps ) LinkNode _nks uid -> do - withCurrentUnit (mgNodeUnitId mod) $ do + mod_idx <- nodeId + return $ withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps executeLinkNode hug (mod_idx, n_mods) uid direct_deps return (Nothing, deps) + PackageNode {} -> return $ return (Nothing, mempty) res_var <- liftIO newEmptyMVar @@ -1288,8 +1300,6 @@ upsweep n_jobs hsc_env hmi_cache diag_wrapper mHscMessage old_hpt build_plan = d toCache :: [HomeModInfo] -> M.Map (ModNodeKeyWithUid) HomeModInfo toCache hmis = M.fromList ([(miKey $ hm_iface hmi, hmi) | hmi <- hmis]) -miKey :: ModIface -> ModNodeKeyWithUid -miKey hmi = ModNodeKeyWithUid (mi_mnwib hmi) ((toUnitId $ moduleUnit (mi_module hmi))) upsweep_inst :: HscEnv -> Maybe Messager @@ -1712,9 +1722,10 @@ downsweep_imports hsc_env old_summaries excl_mods allow_dup_roots (root_errs, ro Nothing excl_mods case mb_s of NotThere -> loopImports ss done summarised - External _ -> do - (other_deps, done', summarised') <- loopImports ss done summarised - return (other_deps, done', summarised') + External uid -> do + let done' = loopUnit done [uid] + (other_deps, done'', summarised') <- loopImports ss done' summarised + return (NodeKey_ExternalUnit uid : other_deps, done'', summarised') FoundInstantiation iud -> do (other_deps, done', summarised') <- loopImports ss done summarised return (NodeKey_Unit iud : other_deps, done', summarised') @@ -1732,6 +1743,16 @@ downsweep_imports hsc_env old_summaries excl_mods allow_dup_roots (root_errs, ro GWIB { gwib_mod = L loc mod, gwib_isBoot = is_boot } = gwib wanted_mod = L loc mod + loopUnit :: Map.Map NodeKey ModuleGraphNode -> [UnitId] -> Map.Map NodeKey ModuleGraphNode + loopUnit cache [] = cache + loopUnit cache (u:uxs) = do + let nk = (NodeKey_ExternalUnit u) + case Map.lookup nk cache of + Just {} -> loopUnit cache uxs + Nothing -> case unitDepends <$> lookupUnitId (hsc_units hsc_env) u of + Just us -> loopUnit (loopUnit (Map.insert nk (PackageNode us u) cache) us) uxs + Nothing -> panic "bad" + getRootSummary :: [ModuleName] -> M.Map (UnitId, FilePath) ModSummary -> ===================================== compiler/GHC/Driver/MakeFile.hs ===================================== @@ -221,6 +221,7 @@ processDeps _ _ _ _ _ (AcyclicSCC (InstantiationNode _uid node)) GhcDriverMessage $ DriverInstantiationNodeInDependencyGeneration node processDeps _dflags _ _ _ _ (AcyclicSCC (LinkNode {})) = return () +processDeps _dflags _ _ _ _ (AcyclicSCC (PackageNode {})) = return () processDeps dflags hsc_env excl_mods root hdl (AcyclicSCC (ModuleNode _ node)) = do { let extra_suffixes = depSuffixes dflags ===================================== compiler/GHC/Iface/Load.hs ===================================== @@ -108,6 +108,7 @@ import GHC.Unit.Home import GHC.Unit.Home.ModInfo import GHC.Unit.Finder import GHC.Unit.Env +import GHC.Unit.Module.External.Graph import GHC.Data.Maybe @@ -119,6 +120,8 @@ import GHC.Driver.Env.KnotVars import {-# source #-} GHC.Driver.Main (loadIfaceByteCode) import GHC.Iface.Errors.Types import Data.Function ((&)) +import qualified Data.Set as Set +import GHC.Unit.Module.Graph {- ************************************************************************ @@ -407,6 +410,21 @@ loadInterfaceWithException doc mod_name where_from let ctx = initSDocContext dflags defaultUserStyle withIfaceErr ctx (loadInterface doc mod_name where_from) +-- | Load all interfaces from the home package, presumes that this operation +-- can be completed by traversing from the already loaded home packages. + +-- This operation is used just before TH splices are run. + +-- The first time this is run +-- A field in the EPS tracks which home modules are fully loaded +_loadHomePackageInterfacesBelow :: ModNodeKeyWithUid -> IfM lcl () +_loadHomePackageInterfacesBelow mn = do + graph <- eps_module_graph <$> getEps + let key = ExternalModuleKey mn + if isFullyLoadedModule key graph + then return () + else return () + ------------------ loadInterface :: SDoc -> Module -> WhereFrom -> IfM lcl (MaybeErr MissingInterfaceError ModIface) @@ -515,6 +533,12 @@ loadInterface doc_str mod from ; new_eps_complete_matches <- tcIfaceCompleteMatches (mi_complete_matches iface) ; purged_hsc_env <- getTopEnv + ; let direct_deps = map (uncurry (flip ModNodeKeyWithUid)) $ (Set.toList (dep_direct_mods $ mi_deps iface)) + ; let !module_graph_key = + if moduleUnitId mod `elem` hsc_all_home_unit_ids hsc_env + then Just $ NodeHomePackage (miKey iface) (map ExternalModuleKey direct_deps) + else Nothing + ; let final_iface = iface & set_mi_decls (panic "No mi_decls in PIT") & set_mi_insts (panic "No mi_insts in PIT") @@ -555,6 +579,9 @@ loadInterface doc_str mod from eps_iface_bytecode = add_bytecode (eps_iface_bytecode eps), eps_rule_base = extendRuleBaseList (eps_rule_base eps) new_eps_rules, + eps_module_graph = case module_graph_key of + Just k -> extendExternalModuleGraph k (eps_module_graph eps) + Nothing -> eps_module_graph eps, eps_complete_matches = eps_complete_matches eps ++ new_eps_complete_matches, eps_inst_env = extendInstEnvList (eps_inst_env eps) ===================================== compiler/GHC/Linker/Deps.hs ===================================== @@ -121,8 +121,8 @@ get_link_deps opts pls maybe_normal_osuf span mods = do then follow_deps (filterOut isInteractiveModule mods) emptyUniqDSet emptyUniqDSet; else do - (pkgs, mmods) <- unzip <$> mapM get_mod_info all_home_mods - return (catMaybes mmods, unionManyUniqDSets (init_pkg_set : pkgs)) + mmods <- mapM get_mod_info all_home_mods + return (catMaybes mmods, mkUniqDSet all_dep_pkgs) let -- 2. Exclude ones already linked @@ -152,44 +152,25 @@ get_link_deps opts pls maybe_normal_osuf span mods = do mod_graph = ldModuleGraph opts unit_env = ldUnitEnv opts - -- This code is used in `--make` mode to calculate the home package and unit dependencies - -- for a set of modules. - -- - -- It is significantly more efficient to use the shared transitive dependency - -- calculation than to compute the transitive dependency set in the same manner as oneShot mode. - - -- It is also a matter of correctness to use the module graph so that dependencies between home units - -- is resolved correctly. - make_deps_loop :: (UniqDSet UnitId, Set.Set NodeKey) -> [ModNodeKeyWithUid] -> (UniqDSet UnitId, Set.Set NodeKey) - make_deps_loop found [] = found - make_deps_loop found@(found_units, found_mods) (nk:nexts) - | NodeKey_Module nk `Set.member` found_mods = make_deps_loop found nexts - | otherwise = - case fmap mkNodeKey <$> mgReachable mod_graph (NodeKey_Module nk) of - Nothing -> - let (ModNodeKeyWithUid _ uid) = nk - in make_deps_loop (addOneToUniqDSet found_units uid, found_mods) nexts - Just trans_deps -> - let deps = Set.insert (NodeKey_Module nk) (Set.fromList trans_deps) - -- See #936 and the ghci.prog007 test for why we have to continue traversing through - -- boot modules. - todo_boot_mods = [ModNodeKeyWithUid (GWIB mn NotBoot) uid | NodeKey_Module (ModNodeKeyWithUid (GWIB mn IsBoot) uid) <- trans_deps] - in make_deps_loop (found_units, deps `Set.union` found_mods) (todo_boot_mods ++ nexts) - - mkNk m = ModNodeKeyWithUid (GWIB (moduleName m) NotBoot) (moduleUnitId m) - (init_pkg_set, all_deps) = make_deps_loop (emptyUniqDSet, Set.empty) $ map mkNk (filterOut isInteractiveModule mods) - - all_home_mods = [with_uid | NodeKey_Module with_uid <- Set.toList all_deps] + mkNk m + = let k = NodeKey_Module (ModNodeKeyWithUid (GWIB (moduleName m) NotBoot) (moduleUnitId m)) + in if mgMember mod_graph k + then k + else NodeKey_ExternalUnit (moduleUnitId m) + + initial_keys = map mkNk (filterOut isInteractiveModule mods) + all_deps = initial_keys ++ map mkNodeKey (mgReachableLoop mod_graph initial_keys) + + all_home_mods = [with_uid | NodeKey_Module with_uid <- all_deps] + all_dep_pkgs = [uid | NodeKey_ExternalUnit uid <- all_deps] get_mod_info (ModNodeKeyWithUid gwib uid) = case lookupHug (ue_home_unit_graph unit_env) uid (gwib_mod gwib) of Just hmi -> let iface = (hm_iface hmi) - mmod = case mi_hsc_src iface of - HsBootFile -> link_boot_mod_error (mi_module iface) - _ -> return $ Just (mi_module iface) - - in (mkUniqDSet $ Set.toList $ dep_direct_pkgs (mi_deps iface),) <$> mmod + in case mi_hsc_src iface of + HsBootFile -> link_boot_mod_error (mi_module iface) + _ -> return $ Just (mi_module iface) Nothing -> throwProgramError opts $ text "getLinkDeps: Home module not loaded" <+> ppr (gwib_mod gwib) <+> ppr uid ===================================== compiler/GHC/Unit/External.hs ===================================== @@ -32,6 +32,7 @@ import GHC.Types.TypeEnv import GHC.Types.Unique.DSet import GHC.Linker.Types (Linkable) +import GHC.Unit.Module.External.Graph import Data.IORef @@ -70,6 +71,7 @@ initExternalPackageState = EPS , eps_PIT = emptyPackageIfaceTable , eps_free_holes = emptyInstalledModuleEnv , eps_PTE = emptyTypeEnv + , eps_module_graph = emptyExternalModuleGraph , eps_iface_bytecode = emptyModuleEnv , eps_inst_env = emptyInstEnv , eps_fam_inst_env = emptyFamInstEnv @@ -137,6 +139,8 @@ data ExternalPackageState -- for every import, so cache it here. When the PIT -- gets filled in we can drop these entries. + eps_module_graph :: ExternalModuleGraph, + eps_PTE :: !PackageTypeEnv, -- ^ Result of typechecking all the external package -- interface files we have sucked in. The domain of ===================================== compiler/GHC/Unit/Module/External/Graph.hs ===================================== @@ -0,0 +1,83 @@ +-- | Like GHC.Unit.Module.Graph but for the ExternalModuleGraph which +-- is stored in the EPS. +module GHC.Unit.Module.External.Graph where + +import GHC.Prelude +import GHC.Unit.Module.Graph +import GHC.Data.Graph.Directed.Reachability +import GHC.Data.Graph.Directed +import qualified Data.Map as M +import qualified Data.Set as S +import Data.Maybe + +data ExternalKey = ExternalModuleKey ModNodeKeyWithUid deriving (Eq, Ord) + +data ExternalGraphNode = NodeHomePackage { + externalNodeKey :: ModNodeKeyWithUid + , externalNodeDeps :: [ExternalKey] } + +externalKey :: ExternalGraphNode -> ExternalKey +externalKey (NodeHomePackage k _) = ExternalModuleKey k + +type ExternalNode = Node Int ExternalGraphNode + +data ExternalModuleGraph = ExternalModuleGraph + { external_nodes :: [ExternalGraphNode] + , external_trans :: (ReachabilityIndex ExternalNode, ExternalKey -> Maybe ExternalNode) + , external_fully_loaded :: !(S.Set ExternalKey) } + +emptyExternalModuleGraph :: ExternalModuleGraph +emptyExternalModuleGraph = ExternalModuleGraph [] (graphReachability emptyGraph, const Nothing) S.empty + +extendExternalModuleGraph :: ExternalGraphNode -> ExternalModuleGraph -> ExternalModuleGraph +extendExternalModuleGraph node graph = mkExternalModuleGraph (node : external_nodes graph) (external_fully_loaded graph) + +setFullyLoadedModule :: ExternalKey -> ExternalModuleGraph -> ExternalModuleGraph +setFullyLoadedModule key graph = graph { external_fully_loaded = S.insert key (external_fully_loaded graph)} + +isFullyLoadedModule :: ExternalKey -> ExternalModuleGraph -> Bool +isFullyLoadedModule key graph = S.member key (external_fully_loaded graph) + +mkExternalModuleGraph :: [ExternalGraphNode] -> S.Set ExternalKey -> ExternalModuleGraph +mkExternalModuleGraph nodes loaded = + ExternalModuleGraph { + external_nodes = nodes + , external_trans = let (g, f) = (externalGraphNodes nodes) + in (graphReachability g, f) + , external_fully_loaded = loaded } + + + +-- | Turn a list of graph nodes into an efficient queriable graph. +-- The first boolean parameter indicates whether nodes corresponding to hs-boot files +-- should be collapsed into their relevant hs nodes. +externalGraphNodes :: + [ExternalGraphNode] + -> (Graph ExternalNode, ExternalKey -> Maybe ExternalNode) +externalGraphNodes summaries = + (graphFromEdgedVerticesUniq nodes, lookup_node) + where + -- Map from module to extra boot summary dependencies which need to be merged in + nodes = map go numbered_summaries + + where + go (s, key) = DigraphNode s key $ out_edge_keys $ + (externalNodeDeps s) + + numbered_summaries = zip summaries [1..] + + lookup_node :: ExternalKey -> Maybe ExternalNode + lookup_node key = M.lookup key node_map + + lookup_key :: ExternalKey -> Maybe Int + lookup_key = fmap node_key . lookup_node + + node_map :: M.Map ExternalKey ExternalNode + node_map = + M.fromList [ (externalKey s, node) + | node <- nodes + , let s = node_payload node + ] + + out_edge_keys :: [ExternalKey] -> [Int] + out_edge_keys = mapMaybe lookup_key ===================================== compiler/GHC/Unit/Module/Graph.hs ===================================== @@ -57,8 +57,10 @@ module GHC.Unit.Module.Graph -- answer reachability queries -- is X reachable from Y; or, what is the -- transitive closure of Z? , mgReachable + , mgReachableLoop , mgQuery , mgQueryMany + , mgMember -- ** Other operations -- @@ -143,13 +145,22 @@ import Control.Monad data ModuleGraph = ModuleGraph { mg_mss :: [ModuleGraphNode] , mg_graph :: (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) - -- A cached transitive dependency calculation so that a lot of work is not - -- repeated whenever the transitive dependencies need to be calculated (for example, hptInstances) + , mg_loop_graph :: (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) + + -- `mg_graph` and `mg_loop_graph` cached transitive dependency calculations + -- so that a lot of work is not repeated whenever the transitive + -- dependencies need to be calculated (for example, hptInstances). + -- + -- * `mg_graph` is a reachability index constructed from a module + -- graph /with/ boot nodes (which make the graph acyclic), and + -- + -- * `mg_loop_graph` is a reachability index for the graph /without/ + -- hs-boot nodes, that may be cyclic. } -- | Why do we ever need to construct empty graphs? Is it because of one shot mode? emptyMG :: ModuleGraph -emptyMG = ModuleGraph [] (graphReachability emptyGraph, const Nothing) +emptyMG = ModuleGraph [] (graphReachability emptyGraph, const Nothing) (graphReachability emptyGraph, const Nothing) -- | Construct a module graph. This function should be the only entry point for -- building a 'ModuleGraph', since it is supposed to be built once and never modified. @@ -160,7 +171,7 @@ emptyMG = ModuleGraph [] (graphReachability emptyGraph, const Nothing) -- modification, perhaps like what is done for building arrays from mutable -- arrays. mkModuleGraph :: [ModuleGraphNode] -> ModuleGraph -mkModuleGraph = foldr (flip extendMG') emptyMG +mkModuleGraph nodes = foldr (flip extendMG) emptyMG nodes -------------------------------------------------------------------------------- -- * Module Graph Nodes @@ -177,6 +188,8 @@ data ModuleGraphNode | ModuleNode [NodeKey] ModSummary -- | Link nodes are whether are are creating a linked product (ie executable/shared object etc) for a unit. | LinkNode [NodeKey] UnitId + -- | Package dependency + | PackageNode [UnitId] UnitId -- | Collect the immediate dependencies of a ModuleGraphNode, -- optionally avoiding hs-boot dependencies. @@ -193,18 +206,17 @@ mgNodeDependencies drop_hs_boot_nodes = \case NodeKey_Module . (\mod -> ModNodeKeyWithUid (GWIB mod NotBoot) uid) <$> uniqDSetToList (instUnitHoles iuid) ModuleNode deps _ms -> map drop_hs_boot deps + PackageNode deps _ -> map NodeKey_ExternalUnit deps where -- Drop hs-boot nodes by using HsSrcFile as the key hs_boot_key | drop_hs_boot_nodes = NotBoot -- is regular mod or signature | otherwise = IsBoot - drop_hs_boot (NodeKey_Module (ModNodeKeyWithUid (GWIB mn IsBoot) uid)) = (NodeKey_Module (ModNodeKeyWithUid (GWIB mn hs_boot_key) uid)) - drop_hs_boot x = x - mgNodeModSum :: ModuleGraphNode -> Maybe ModSummary mgNodeModSum (InstantiationNode {}) = Nothing mgNodeModSum (LinkNode {}) = Nothing mgNodeModSum (ModuleNode _ ms) = Just ms +mgNodeModSum (PackageNode {}) = Nothing mgNodeUnitId :: ModuleGraphNode -> UnitId mgNodeUnitId mgn = @@ -212,12 +224,14 @@ mgNodeUnitId mgn = InstantiationNode uid _iud -> uid ModuleNode _ ms -> toUnitId (moduleUnit (ms_mod ms)) LinkNode _ uid -> uid + PackageNode _ uid -> uid instance Outputable ModuleGraphNode where ppr = \case InstantiationNode _ iuid -> ppr iuid ModuleNode nks ms -> ppr (msKey ms) <+> ppr nks LinkNode uid _ -> text "LN:" <+> ppr uid + PackageNode _ uid -> text "P:" <+> ppr uid instance Eq ModuleGraphNode where (==) = (==) `on` mkNodeKey @@ -245,6 +259,7 @@ mapMG f mg at ModuleGraph{..} = mg InstantiationNode uid iuid -> InstantiationNode uid iuid LinkNode uid nks -> LinkNode uid nks ModuleNode deps ms -> ModuleNode deps (f ms) + PackageNode deps uid -> PackageNode deps uid } -- | Map a function 'f' over all the 'ModSummaries', in 'IO'. @@ -262,9 +277,9 @@ mgMapM f mg at ModuleGraph{..} = do mgModSummaries :: ModuleGraph -> [ModSummary] mgModSummaries mg = [ m | ModuleNode _ m <- mgModSummaries' mg ] --- | Look up a ModSummary in the ModuleGraph --- Looks up the non-boot ModSummary --- Linear in the size of the module graph +-- | Look up a non-boot ModSummary in the ModuleGraph. +-- +-- Careful: Linear in the size of the module graph mgLookupModule :: ModuleGraph -> Module -> Maybe ModSummary mgLookupModule ModuleGraph{..} m = listToMaybe $ mapMaybe go mg_mss where @@ -274,6 +289,9 @@ mgLookupModule ModuleGraph{..} m = listToMaybe $ mapMaybe go mg_mss = Just ms go _ = Nothing +mgMember :: ModuleGraph -> NodeKey -> Bool +mgMember graph k = isJust $ snd (mg_graph graph) k + -------------------------------------------------------------------------------- -- ** Reachability -------------------------------------------------------------------------------- @@ -285,6 +303,13 @@ mgReachable mg nk = map summaryNodeSummary <$> modules_below where modules_below = allReachable td_map <$> lookup_node nk +-- | Things which are reachable if hs-boot files are ignored. Used by 'getLinkDeps' +mgReachableLoop :: ModuleGraph -> [NodeKey] -> [ModuleGraphNode] +mgReachableLoop mg nk = map summaryNodeSummary modules_below where + (td_map, lookup_node) = mg_loop_graph mg + modules_below = + allReachableMany td_map (mapMaybe lookup_node nk) + -- | Reachability Query. -- -- @mgQuery(g, a, b)@ asks: @@ -402,9 +427,8 @@ moduleGraphModulesBelow mg uid mn = filtered_mods [ mn | NodeKey_Module mn <- mo filterToposortToModules :: [SCC ModuleGraphNode] -> [SCC ModSummary] filterToposortToModules = mapMaybe $ mapMaybeSCC $ \case - InstantiationNode _ _ -> Nothing - LinkNode{} -> Nothing ModuleNode _deps node -> Just node + _ -> Nothing where -- This higher order function is somewhat bogus, -- as the definition of "strongly connected component" @@ -424,23 +448,27 @@ filterToposortToModules = mapMaybe $ mapMaybeSCC $ \case data NodeKey = NodeKey_Unit {-# UNPACK #-} !InstantiatedUnit | NodeKey_Module {-# UNPACK #-} !ModNodeKeyWithUid | NodeKey_Link !UnitId + | NodeKey_ExternalUnit !UnitId deriving (Eq, Ord) instance Outputable NodeKey where ppr (NodeKey_Unit iu) = ppr iu ppr (NodeKey_Module mk) = ppr mk ppr (NodeKey_Link uid) = ppr uid + ppr (NodeKey_ExternalUnit uid) = ppr uid mkNodeKey :: ModuleGraphNode -> NodeKey mkNodeKey = \case InstantiationNode _ iu -> NodeKey_Unit iu ModuleNode _ x -> NodeKey_Module $ msKey x LinkNode _ uid -> NodeKey_Link uid + PackageNode _ uid -> NodeKey_ExternalUnit uid nodeKeyUnitId :: NodeKey -> UnitId nodeKeyUnitId (NodeKey_Unit iu) = instUnitInstanceOf iu nodeKeyUnitId (NodeKey_Module mk) = mnkUnitId mk nodeKeyUnitId (NodeKey_Link uid) = uid +nodeKeyUnitId (NodeKey_ExternalUnit uid) = uid nodeKeyModName :: NodeKey -> Maybe ModuleName nodeKeyModName (NodeKey_Module mk) = Just (gwib_mod $ mnkModuleName mk) @@ -482,6 +510,7 @@ showModMsg dflags _ (LinkNode {}) = arch_os = platformArchOS platform exe_file = exeFileName arch_os staticLink (outputFile_ dflags) in text exe_file +showModMsg _ _ (PackageNode _deps uid) = ppr uid showModMsg _ _ (InstantiationNode _uid indef_unit) = ppr $ instUnitInstanceOf indef_unit showModMsg dflags recomp (ModuleNode _ mod_summary) = @@ -520,6 +549,9 @@ newtype NodeMap a = NodeMap { unNodeMap :: Map.Map NodeKey a } mkTransDeps :: [ModuleGraphNode] -> (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) mkTransDeps = first graphReachability {- module graph is acyclic -} . moduleGraphNodes False +mkTransLoopDeps :: [ModuleGraphNode] -> (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) +mkTransLoopDeps = first cyclicGraphReachability . moduleGraphNodes True + extendMG' :: ModuleGraph -> ModuleGraphNode -> ModuleGraph extendMG' mg = \case InstantiationNode uid depUnitId -> extendMGInst mg uid depUnitId @@ -532,6 +564,7 @@ extendMG :: ModuleGraph -> [NodeKey] -> ModSummary -> ModuleGraph extendMG ModuleGraph{..} deps ms = ModuleGraph { mg_mss = ModuleNode deps ms : mg_mss , mg_graph = mkTransDeps (ModuleNode deps ms : mg_mss) + , mg_loop_graph = mkTransLoopDeps (node : mg_mss) } extendMGInst :: ModuleGraph -> UnitId -> InstantiatedUnit -> ModuleGraph ===================================== compiler/GHC/Unit/Module/ModIface.hs ===================================== @@ -82,6 +82,7 @@ module GHC.Unit.Module.ModIface , IfaceImport(..) , mi_boot , mi_fix + , miKey , mi_semantic_module , mi_free_holes , mi_mnwib @@ -125,6 +126,7 @@ import GHC.Utils.Binary import Control.DeepSeq import Control.Exception +import GHC.Unit.Module.Graph (ModNodeKeyWithUid(..)) {- Note [Interface file stages] @@ -362,6 +364,9 @@ data ModIface_ (phase :: ModIfacePhase) -- See Note [Sharing of ModIface]. } +miKey :: ModIface -> ModNodeKeyWithUid +miKey hmi = ModNodeKeyWithUid (mi_mnwib hmi) ((toUnitId $ moduleUnit (mi_module hmi))) + -- Enough information to reconstruct the top level environment for a module data IfaceTopEnv = IfaceTopEnv ===================================== compiler/ghc.cabal.in ===================================== @@ -941,6 +941,7 @@ Library GHC.Unit.Module.Deps GHC.Unit.Module.Env GHC.Unit.Module.Graph + GHC.Unit.Module.External.Graph GHC.Unit.Module.Imported GHC.Unit.Module.Location GHC.Unit.Module.ModDetails View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/98bde62ccf935744a2d3263b74d33b7744a51b10 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/98bde62ccf935744a2d3263b74d33b7744a51b10 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 15:14:22 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Wed, 18 Dec 2024 10:14:22 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports] Add the cmm_cpp_is_gcc predicate to the testsuite Message-ID: <6762e6ceb1cee_3e2179bee9c2295@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports at Glasgow Haskell Compiler / GHC Commits: 5080053a by Arsen Arsenović at 2024-12-18T15:48:32+01:00 Add the cmm_cpp_is_gcc predicate to the testsuite A future C-- test called T24474-cmm-override-g0 relies on the GCC-specific behaviour of -g3 implying -dD, which, in turn, leads to it emitting #defines past the preprocessing stage. Clang, at least, does not do this, so the test would fail if ran on Clang. As the behaviour here being tested is ``-optCmmP-g3'' undoing effects of the workaround we apply as a fix for bug #24474, and the workaround was for GCC-specific behaviour, the test needs to be marked as fragile on other compilers. (cherry picked from commit 4d59abf295cd371448f22c1724b955dce4974302) - - - - - 3 changed files: - testsuite/config/ghc - testsuite/driver/testglobals.py - testsuite/driver/testlib.py Changes: ===================================== testsuite/config/ghc ===================================== @@ -224,7 +224,7 @@ def get_compiler_info(): # See Note [Replacing backward slashes in config.libdir]. config.libdir = config.libdir.replace('\\', '/') - def test_compile(flags): + def test_compile(flags, test_filename='test.hs', test_src=None): """ Check whether GHC can compile in the given way. This is used as a proxy to determine, e.g., whether profiled libraries were built, or @@ -235,12 +235,15 @@ def get_compiler_info(): res = False - with tempfile.TemporaryDirectory() as d: - src = Path(d) / 'test.hs' - src.write_text(textwrap.dedent(''' + if test_src is None: + test_src = ''' module Main where main = putStrLn "Hello World!" - ''')) + ''' + + with tempfile.TemporaryDirectory() as d: + src = Path(d) / test_filename + src.write_text(textwrap.dedent(test_src)) try: p = subprocess.run( '{} -v0 {} -o test '.format(config.compiler, src) + ' '.join(flags), @@ -296,6 +299,16 @@ def get_compiler_info(): config.plugin_way_flags = "-static" config.ghc_th_way = "normal" + config.cmm_cpp_is_gcc = test_compile( + ['-c'], + test_filename='test.cmm', + test_src=''' + #if defined(__clang__) || !defined(__GNUC__) + # error "not gcc" + #endif + ''' + ) + # Note [Replacing backward slashes in config.libdir] # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ===================================== testsuite/driver/testglobals.py ===================================== @@ -234,6 +234,9 @@ class TestConfig: # The path specifies the file in which to write the dependencies self.only_report_hadrian_deps = None # type: Optional[Path] + # Are we using GCC to preprocess C--? + self.cmm_cpp_is_gcc = False + def validate(self) -> None: """ Check the TestConfig for self-consistency """ def assert_implies(a: bool, b: bool): ===================================== testsuite/driver/testlib.py ===================================== @@ -991,6 +991,10 @@ def llvm_build ( ) -> bool: def have_thread_sanitizer( ) -> bool: return config.have_thread_sanitizer + +def gcc_as_cmmp() -> bool: + return config.cmm_cpp_is_gcc + # --- # Note [Measuring residency] View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5080053a75b0a25eed2ff2cdd7a45b74d04cff3f -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5080053a75b0a25eed2ff2cdd7a45b74d04cff3f You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 15:37:39 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Wed, 18 Dec 2024 10:37:39 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] WIP external grpah Message-ID: <6762ec436743c_3e217935f7642369a@gitlab.mail> Rodrigo Mesquita pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: a4db8f72 by Matthew Pickering at 2024-12-18T15:37:24+00:00 WIP external grpah getLinkDeps and ExternalNode missing file fix plugin loading (now rebased) - - - - - 13 changed files: - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Driver/Backpack.hs - compiler/GHC/Driver/Errors/Ppr.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/MakeFile.hs - compiler/GHC/Iface/Load.hs - compiler/GHC/Linker/Deps.hs - compiler/GHC/Unit/External.hs - + compiler/GHC/Unit/Module/External/Graph.hs - compiler/GHC/Unit/Module/Graph.hs - compiler/GHC/Unit/Module/ModIface.hs - compiler/ghc.cabal.in Changes: ===================================== compiler/GHC/Data/Graph/Directed/Reachability.hs ===================================== @@ -7,7 +7,7 @@ module GHC.Data.Graph.Directed.Reachability , graphReachability, cyclicGraphReachability -- * Reachability queries - , allReachable, allReachableMany + , allReachable, allReachableMany, allReachableManyWithRoots , isReachable, isReachableMany ) where @@ -132,6 +132,23 @@ allReachableMany (ReachabilityIndex index from to) roots = map from (IS.toList h hits = {-# SCC "allReachableMany" #-} IS.unions $ map (expectJust "reachablesG" . flip IM.lookup index) roots_i +-- | 'allReachableManyWithRoots' returns all nodes reachable from the many given @roots at . +-- +-- Properties: +-- * The list of nodes includes the @roots@ node! +-- * The list of nodes is deterministically ordered, but according to an +-- internal order determined by the indices attributed to graph nodes. +-- * This function has $O(n)$ complexity where $n$ is the number of @roots at . +-- +-- If you need a topologically sorted list, consider using the functions +-- exposed from 'GHC.Data.Graph.Directed' on 'Graph' instead ('reachableG'). +allReachableManyWithRoots :: ReachabilityIndex node -> [node] {-^ The @roots@ -} -> [node] {-^ All nodes reachable from all @roots@ -} +allReachableManyWithRoots (ReachabilityIndex index from to) roots = map from (IS.toList hits) + where roots_i = [ v | Just v <- map to roots ] + hits = IS.union (IS.fromList roots_i) + (IS.unions $ map (expectJust "reachablesG" . flip IM.lookup index) roots_i) + + -- | Fast reachability query. -- -- On graph @g@ with nodes @a@ and @b@, @isReachable g a b@ ===================================== compiler/GHC/Driver/Backpack.hs ===================================== @@ -589,6 +589,7 @@ mkBackpackMsg = do MustCompile -> empty RecompBecause reason -> text " [" <> pprWithUnitState state (ppr reason) <> text "]" LinkNode _ _ -> showMsg (text "Linking ") empty + PackageNode {} -> showMsg (text "Package ") empty -- | 'PprStyle' for Backpack messages; here we usually want the module to -- be qualified (so we can tell how it was instantiated.) But we try not ===================================== compiler/GHC/Driver/Errors/Ppr.hs ===================================== @@ -261,6 +261,7 @@ instance Diagnostic DriverMessage where ppr_node (ModuleNode _deps m) = text "module" <+> ppr_ms m ppr_node (InstantiationNode _uid u) = text "instantiated unit" <+> ppr u ppr_node (LinkNode uid _) = pprPanic "LinkNode should not be in a cycle" (ppr uid) + ppr_node (PackageNode uid _) = pprPanic "PackageNode should not be in a cycle" (ppr uid) ppr_ms :: ModSummary -> SDoc ppr_ms ms = quotes (ppr (moduleName (ms_mod ms))) <+> ===================================== compiler/GHC/Driver/Main.hs ===================================== @@ -1469,6 +1469,7 @@ batchMsgWith extra hsc_env_start mod_index recomp node = LinkNode {} -> "Linking" InstantiationNode {} -> "Instantiating" ModuleNode {} -> "Compiling" + PackageNode {} -> "Loading" hsc_env = hscSetActiveUnitId (mgNodeUnitId node) hsc_env_start dflags = hsc_dflags hsc_env logger = hsc_logger hsc_env ===================================== compiler/GHC/Driver/Make.hs ===================================== @@ -1110,7 +1110,16 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do where collect_result res_var = runMaybeT (waitResult res_var) - n_mods = sum (map countMods plan) + -- Just used for an assertion + count_mods :: BuildPlan -> Int + count_mods (SingleModule m) = count_m m + count_mods (ResolvedCycle ns) = length ns + count_mods (UnresolvedCycle ns) = length ns + + count_m (PackageNode {}) = 0 + count_m _ = 1 + + n_mods = sum (map count_mods plan) buildLoop :: [BuildPlan] -> BuildM (Maybe [ModuleGraphNode], [MakeAction]) @@ -1141,7 +1150,6 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do -> ModuleGraphNode -- The node we are compiling -> BuildM MakeAction buildSingleModule rehydrate_nodes origin mod = do - mod_idx <- nodeId !build_map <- getBuildMap hug_var <- gets hug_var -- 1. Get the direct dependencies of this module @@ -1150,17 +1158,19 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do -- which would retain all the result variables, preventing us from collecting them -- after they are no longer used. !build_deps = getDependencies direct_deps build_map - let !build_action = + !build_action <- case mod of InstantiationNode uid iu -> do - withCurrentUnit (mgNodeUnitId mod) $ do + mod_idx <- nodeId + return $ withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps executeInstantiationNode mod_idx n_mods hug uid iu return (Nothing, deps) - ModuleNode _build_deps ms -> + ModuleNode _build_deps ms -> do let !old_hmi = M.lookup (msKey ms) old_hpt rehydrate_mods = mapMaybe nodeKeyModName <$> rehydrate_nodes - in withCurrentUnit (mgNodeUnitId mod) $ do + mod_idx <- nodeId + return $ withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps hmi <- executeCompileNode mod_idx n_mods old_hmi hug rehydrate_mods ms -- Write the HMI to an external cache (if one exists) @@ -1171,10 +1181,12 @@ interpretBuildPlan hug mhmi_cache old_hpt plan = do liftIO $ modifyMVar_ hug_var (return . addHomeModInfoToHug hmi) return (Just hmi, addToModuleNameSet (mgNodeUnitId mod) (ms_mod_name ms) deps ) LinkNode _nks uid -> do - withCurrentUnit (mgNodeUnitId mod) $ do + mod_idx <- nodeId + return $ withCurrentUnit (mgNodeUnitId mod) $ do (hug, deps) <- wait_deps_hug hug_var build_deps executeLinkNode hug (mod_idx, n_mods) uid direct_deps return (Nothing, deps) + PackageNode {} -> return $ return (Nothing, mempty) res_var <- liftIO newEmptyMVar @@ -1288,8 +1300,6 @@ upsweep n_jobs hsc_env hmi_cache diag_wrapper mHscMessage old_hpt build_plan = d toCache :: [HomeModInfo] -> M.Map (ModNodeKeyWithUid) HomeModInfo toCache hmis = M.fromList ([(miKey $ hm_iface hmi, hmi) | hmi <- hmis]) -miKey :: ModIface -> ModNodeKeyWithUid -miKey hmi = ModNodeKeyWithUid (mi_mnwib hmi) ((toUnitId $ moduleUnit (mi_module hmi))) upsweep_inst :: HscEnv -> Maybe Messager @@ -1712,9 +1722,10 @@ downsweep_imports hsc_env old_summaries excl_mods allow_dup_roots (root_errs, ro Nothing excl_mods case mb_s of NotThere -> loopImports ss done summarised - External _ -> do - (other_deps, done', summarised') <- loopImports ss done summarised - return (other_deps, done', summarised') + External uid -> do + let done' = loopUnit done [uid] + (other_deps, done'', summarised') <- loopImports ss done' summarised + return (NodeKey_ExternalUnit uid : other_deps, done'', summarised') FoundInstantiation iud -> do (other_deps, done', summarised') <- loopImports ss done summarised return (NodeKey_Unit iud : other_deps, done', summarised') @@ -1732,6 +1743,16 @@ downsweep_imports hsc_env old_summaries excl_mods allow_dup_roots (root_errs, ro GWIB { gwib_mod = L loc mod, gwib_isBoot = is_boot } = gwib wanted_mod = L loc mod + loopUnit :: Map.Map NodeKey ModuleGraphNode -> [UnitId] -> Map.Map NodeKey ModuleGraphNode + loopUnit cache [] = cache + loopUnit cache (u:uxs) = do + let nk = (NodeKey_ExternalUnit u) + case Map.lookup nk cache of + Just {} -> loopUnit cache uxs + Nothing -> case unitDepends <$> lookupUnitId (hsc_units hsc_env) u of + Just us -> loopUnit (loopUnit (Map.insert nk (PackageNode us u) cache) us) uxs + Nothing -> panic "bad" + getRootSummary :: [ModuleName] -> M.Map (UnitId, FilePath) ModSummary -> ===================================== compiler/GHC/Driver/MakeFile.hs ===================================== @@ -221,6 +221,7 @@ processDeps _ _ _ _ _ (AcyclicSCC (InstantiationNode _uid node)) GhcDriverMessage $ DriverInstantiationNodeInDependencyGeneration node processDeps _dflags _ _ _ _ (AcyclicSCC (LinkNode {})) = return () +processDeps _dflags _ _ _ _ (AcyclicSCC (PackageNode {})) = return () processDeps dflags hsc_env excl_mods root hdl (AcyclicSCC (ModuleNode _ node)) = do { let extra_suffixes = depSuffixes dflags ===================================== compiler/GHC/Iface/Load.hs ===================================== @@ -108,6 +108,7 @@ import GHC.Unit.Home import GHC.Unit.Home.ModInfo import GHC.Unit.Finder import GHC.Unit.Env +import GHC.Unit.Module.External.Graph import GHC.Data.Maybe @@ -119,6 +120,8 @@ import GHC.Driver.Env.KnotVars import {-# source #-} GHC.Driver.Main (loadIfaceByteCode) import GHC.Iface.Errors.Types import Data.Function ((&)) +import qualified Data.Set as Set +import GHC.Unit.Module.Graph {- ************************************************************************ @@ -407,6 +410,21 @@ loadInterfaceWithException doc mod_name where_from let ctx = initSDocContext dflags defaultUserStyle withIfaceErr ctx (loadInterface doc mod_name where_from) +-- | Load all interfaces from the home package, presumes that this operation +-- can be completed by traversing from the already loaded home packages. + +-- This operation is used just before TH splices are run. + +-- The first time this is run +-- A field in the EPS tracks which home modules are fully loaded +_loadHomePackageInterfacesBelow :: ModNodeKeyWithUid -> IfM lcl () +_loadHomePackageInterfacesBelow mn = do + graph <- eps_module_graph <$> getEps + let key = ExternalModuleKey mn + if isFullyLoadedModule key graph + then return () + else return () + ------------------ loadInterface :: SDoc -> Module -> WhereFrom -> IfM lcl (MaybeErr MissingInterfaceError ModIface) @@ -515,6 +533,12 @@ loadInterface doc_str mod from ; new_eps_complete_matches <- tcIfaceCompleteMatches (mi_complete_matches iface) ; purged_hsc_env <- getTopEnv + ; let direct_deps = map (uncurry (flip ModNodeKeyWithUid)) $ (Set.toList (dep_direct_mods $ mi_deps iface)) + ; let !module_graph_key = + if moduleUnitId mod `elem` hsc_all_home_unit_ids hsc_env + then Just $ NodeHomePackage (miKey iface) (map ExternalModuleKey direct_deps) + else Nothing + ; let final_iface = iface & set_mi_decls (panic "No mi_decls in PIT") & set_mi_insts (panic "No mi_insts in PIT") @@ -555,6 +579,9 @@ loadInterface doc_str mod from eps_iface_bytecode = add_bytecode (eps_iface_bytecode eps), eps_rule_base = extendRuleBaseList (eps_rule_base eps) new_eps_rules, + eps_module_graph = case module_graph_key of + Just k -> extendExternalModuleGraph k (eps_module_graph eps) + Nothing -> eps_module_graph eps, eps_complete_matches = eps_complete_matches eps ++ new_eps_complete_matches, eps_inst_env = extendInstEnvList (eps_inst_env eps) ===================================== compiler/GHC/Linker/Deps.hs ===================================== @@ -121,8 +121,8 @@ get_link_deps opts pls maybe_normal_osuf span mods = do then follow_deps (filterOut isInteractiveModule mods) emptyUniqDSet emptyUniqDSet; else do - (pkgs, mmods) <- unzip <$> mapM get_mod_info all_home_mods - return (catMaybes mmods, unionManyUniqDSets (init_pkg_set : pkgs)) + mmods <- mapM get_mod_info all_home_mods + return (catMaybes mmods, mkUniqDSet all_dep_pkgs) let -- 2. Exclude ones already linked @@ -152,44 +152,25 @@ get_link_deps opts pls maybe_normal_osuf span mods = do mod_graph = ldModuleGraph opts unit_env = ldUnitEnv opts - -- This code is used in `--make` mode to calculate the home package and unit dependencies - -- for a set of modules. - -- - -- It is significantly more efficient to use the shared transitive dependency - -- calculation than to compute the transitive dependency set in the same manner as oneShot mode. - - -- It is also a matter of correctness to use the module graph so that dependencies between home units - -- is resolved correctly. - make_deps_loop :: (UniqDSet UnitId, Set.Set NodeKey) -> [ModNodeKeyWithUid] -> (UniqDSet UnitId, Set.Set NodeKey) - make_deps_loop found [] = found - make_deps_loop found@(found_units, found_mods) (nk:nexts) - | NodeKey_Module nk `Set.member` found_mods = make_deps_loop found nexts - | otherwise = - case fmap mkNodeKey <$> mgReachable mod_graph (NodeKey_Module nk) of - Nothing -> - let (ModNodeKeyWithUid _ uid) = nk - in make_deps_loop (addOneToUniqDSet found_units uid, found_mods) nexts - Just trans_deps -> - let deps = Set.insert (NodeKey_Module nk) (Set.fromList trans_deps) - -- See #936 and the ghci.prog007 test for why we have to continue traversing through - -- boot modules. - todo_boot_mods = [ModNodeKeyWithUid (GWIB mn NotBoot) uid | NodeKey_Module (ModNodeKeyWithUid (GWIB mn IsBoot) uid) <- trans_deps] - in make_deps_loop (found_units, deps `Set.union` found_mods) (todo_boot_mods ++ nexts) - - mkNk m = ModNodeKeyWithUid (GWIB (moduleName m) NotBoot) (moduleUnitId m) - (init_pkg_set, all_deps) = make_deps_loop (emptyUniqDSet, Set.empty) $ map mkNk (filterOut isInteractiveModule mods) - - all_home_mods = [with_uid | NodeKey_Module with_uid <- Set.toList all_deps] + mkNk m + = let k = NodeKey_Module (ModNodeKeyWithUid (GWIB (moduleName m) NotBoot) (moduleUnitId m)) + in if mgMember mod_graph k + then k + else NodeKey_ExternalUnit (moduleUnitId m) + + initial_keys = map mkNk (filterOut isInteractiveModule mods) + all_deps = initial_keys ++ map mkNodeKey (mgReachableLoop mod_graph initial_keys) + + all_home_mods = [with_uid | NodeKey_Module with_uid <- all_deps] + all_dep_pkgs = [uid | NodeKey_ExternalUnit uid <- all_deps] get_mod_info (ModNodeKeyWithUid gwib uid) = case lookupHug (ue_home_unit_graph unit_env) uid (gwib_mod gwib) of Just hmi -> let iface = (hm_iface hmi) - mmod = case mi_hsc_src iface of - HsBootFile -> link_boot_mod_error (mi_module iface) - _ -> return $ Just (mi_module iface) - - in (mkUniqDSet $ Set.toList $ dep_direct_pkgs (mi_deps iface),) <$> mmod + in case mi_hsc_src iface of + HsBootFile -> link_boot_mod_error (mi_module iface) + _ -> return $ Just (mi_module iface) Nothing -> throwProgramError opts $ text "getLinkDeps: Home module not loaded" <+> ppr (gwib_mod gwib) <+> ppr uid ===================================== compiler/GHC/Unit/External.hs ===================================== @@ -32,6 +32,7 @@ import GHC.Types.TypeEnv import GHC.Types.Unique.DSet import GHC.Linker.Types (Linkable) +import GHC.Unit.Module.External.Graph import Data.IORef @@ -70,6 +71,7 @@ initExternalPackageState = EPS , eps_PIT = emptyPackageIfaceTable , eps_free_holes = emptyInstalledModuleEnv , eps_PTE = emptyTypeEnv + , eps_module_graph = emptyExternalModuleGraph , eps_iface_bytecode = emptyModuleEnv , eps_inst_env = emptyInstEnv , eps_fam_inst_env = emptyFamInstEnv @@ -137,6 +139,8 @@ data ExternalPackageState -- for every import, so cache it here. When the PIT -- gets filled in we can drop these entries. + eps_module_graph :: ExternalModuleGraph, + eps_PTE :: !PackageTypeEnv, -- ^ Result of typechecking all the external package -- interface files we have sucked in. The domain of ===================================== compiler/GHC/Unit/Module/External/Graph.hs ===================================== @@ -0,0 +1,81 @@ +-- | Like GHC.Unit.Module.Graph but for the ExternalModuleGraph which +-- is stored in the EPS. +module GHC.Unit.Module.External.Graph where + +import GHC.Prelude +import GHC.Unit.Module.Graph +import GHC.Data.Graph.Directed.Reachability +import GHC.Data.Graph.Directed +import qualified Data.Map as M +import qualified Data.Set as S +import Data.Maybe + +data ExternalKey = ExternalModuleKey ModNodeKeyWithUid deriving (Eq, Ord) + +data ExternalGraphNode = NodeHomePackage { + externalNodeKey :: ModNodeKeyWithUid + , externalNodeDeps :: [ExternalKey] } + +externalKey :: ExternalGraphNode -> ExternalKey +externalKey (NodeHomePackage k _) = ExternalModuleKey k + +type ExternalNode = Node Int ExternalGraphNode + +data ExternalModuleGraph = ExternalModuleGraph + { external_nodes :: [ExternalGraphNode] + , external_trans :: (ReachabilityIndex ExternalNode, ExternalKey -> Maybe ExternalNode) + , external_fully_loaded :: !(S.Set ExternalKey) } + +emptyExternalModuleGraph :: ExternalModuleGraph +emptyExternalModuleGraph = ExternalModuleGraph [] (graphReachability emptyGraph, const Nothing) S.empty + +extendExternalModuleGraph :: ExternalGraphNode -> ExternalModuleGraph -> ExternalModuleGraph +extendExternalModuleGraph node graph = mkExternalModuleGraph (node : external_nodes graph) (external_fully_loaded graph) + +setFullyLoadedModule :: ExternalKey -> ExternalModuleGraph -> ExternalModuleGraph +setFullyLoadedModule key graph = graph { external_fully_loaded = S.insert key (external_fully_loaded graph)} + +isFullyLoadedModule :: ExternalKey -> ExternalModuleGraph -> Bool +isFullyLoadedModule key graph = S.member key (external_fully_loaded graph) + +mkExternalModuleGraph :: [ExternalGraphNode] -> S.Set ExternalKey -> ExternalModuleGraph +mkExternalModuleGraph nodes loaded = + ExternalModuleGraph { + external_nodes = nodes + , external_trans = let (g, f) = (externalGraphNodes nodes) + in (graphReachability g, f) + , external_fully_loaded = loaded } + +-- | Turn a list of graph nodes into an efficient queriable graph. +-- The first boolean parameter indicates whether nodes corresponding to hs-boot files +-- should be collapsed into their relevant hs nodes. +externalGraphNodes :: + [ExternalGraphNode] + -> (Graph ExternalNode, ExternalKey -> Maybe ExternalNode) +externalGraphNodes summaries = + (graphFromEdgedVerticesUniq nodes, lookup_node) + where + -- Map from module to extra boot summary dependencies which need to be merged in + nodes = map go numbered_summaries + + where + go (s, key) = DigraphNode s key $ out_edge_keys $ + (externalNodeDeps s) + + numbered_summaries = zip summaries [1..] + + lookup_node :: ExternalKey -> Maybe ExternalNode + lookup_node key = M.lookup key node_map + + lookup_key :: ExternalKey -> Maybe Int + lookup_key = fmap node_key . lookup_node + + node_map :: M.Map ExternalKey ExternalNode + node_map = + M.fromList [ (externalKey s, node) + | node <- nodes + , let s = node_payload node + ] + + out_edge_keys :: [ExternalKey] -> [Int] + out_edge_keys = mapMaybe lookup_key ===================================== compiler/GHC/Unit/Module/Graph.hs ===================================== @@ -57,8 +57,10 @@ module GHC.Unit.Module.Graph -- answer reachability queries -- is X reachable from Y; or, what is the -- transitive closure of Z? , mgReachable + , mgReachableLoop , mgQuery , mgQueryMany + , mgMember -- ** Other operations -- @@ -143,13 +145,22 @@ import Control.Monad data ModuleGraph = ModuleGraph { mg_mss :: [ModuleGraphNode] , mg_graph :: (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) - -- A cached transitive dependency calculation so that a lot of work is not - -- repeated whenever the transitive dependencies need to be calculated (for example, hptInstances) + , mg_loop_graph :: (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) + + -- `mg_graph` and `mg_loop_graph` cached transitive dependency calculations + -- so that a lot of work is not repeated whenever the transitive + -- dependencies need to be calculated (for example, hptInstances). + -- + -- * `mg_graph` is a reachability index constructed from a module + -- graph /with/ boot nodes (which make the graph acyclic), and + -- + -- * `mg_loop_graph` is a reachability index for the graph /without/ + -- hs-boot nodes, that may be cyclic. } -- | Why do we ever need to construct empty graphs? Is it because of one shot mode? emptyMG :: ModuleGraph -emptyMG = ModuleGraph [] (graphReachability emptyGraph, const Nothing) +emptyMG = ModuleGraph [] (graphReachability emptyGraph, const Nothing) (graphReachability emptyGraph, const Nothing) -- | Construct a module graph. This function should be the only entry point for -- building a 'ModuleGraph', since it is supposed to be built once and never modified. @@ -160,7 +171,7 @@ emptyMG = ModuleGraph [] (graphReachability emptyGraph, const Nothing) -- modification, perhaps like what is done for building arrays from mutable -- arrays. mkModuleGraph :: [ModuleGraphNode] -> ModuleGraph -mkModuleGraph = foldr (flip extendMG') emptyMG +mkModuleGraph = foldr (flip extendMG) emptyMG -------------------------------------------------------------------------------- -- * Module Graph Nodes @@ -177,6 +188,8 @@ data ModuleGraphNode | ModuleNode [NodeKey] ModSummary -- | Link nodes are whether are are creating a linked product (ie executable/shared object etc) for a unit. | LinkNode [NodeKey] UnitId + -- | Package dependency + | PackageNode [UnitId] UnitId -- | Collect the immediate dependencies of a ModuleGraphNode, -- optionally avoiding hs-boot dependencies. @@ -193,6 +206,7 @@ mgNodeDependencies drop_hs_boot_nodes = \case NodeKey_Module . (\mod -> ModNodeKeyWithUid (GWIB mod NotBoot) uid) <$> uniqDSetToList (instUnitHoles iuid) ModuleNode deps _ms -> map drop_hs_boot deps + PackageNode deps _ -> map NodeKey_ExternalUnit deps where -- Drop hs-boot nodes by using HsSrcFile as the key hs_boot_key | drop_hs_boot_nodes = NotBoot -- is regular mod or signature @@ -205,6 +219,7 @@ mgNodeModSum :: ModuleGraphNode -> Maybe ModSummary mgNodeModSum (InstantiationNode {}) = Nothing mgNodeModSum (LinkNode {}) = Nothing mgNodeModSum (ModuleNode _ ms) = Just ms +mgNodeModSum (PackageNode {}) = Nothing mgNodeUnitId :: ModuleGraphNode -> UnitId mgNodeUnitId mgn = @@ -212,12 +227,14 @@ mgNodeUnitId mgn = InstantiationNode uid _iud -> uid ModuleNode _ ms -> toUnitId (moduleUnit (ms_mod ms)) LinkNode _ uid -> uid + PackageNode _ uid -> uid instance Outputable ModuleGraphNode where ppr = \case InstantiationNode _ iuid -> ppr iuid ModuleNode nks ms -> ppr (msKey ms) <+> ppr nks LinkNode uid _ -> text "LN:" <+> ppr uid + PackageNode _ uid -> text "P:" <+> ppr uid instance Eq ModuleGraphNode where (==) = (==) `on` mkNodeKey @@ -245,6 +262,7 @@ mapMG f mg at ModuleGraph{..} = mg InstantiationNode uid iuid -> InstantiationNode uid iuid LinkNode uid nks -> LinkNode uid nks ModuleNode deps ms -> ModuleNode deps (f ms) + PackageNode deps uid -> PackageNode deps uid } -- | Map a function 'f' over all the 'ModSummaries', in 'IO'. @@ -255,6 +273,7 @@ mgMapM f mg at ModuleGraph{..} = do InstantiationNode uid iuid -> pure $ InstantiationNode uid iuid LinkNode uid nks -> pure $ LinkNode uid nks ModuleNode deps ms -> ModuleNode deps <$> (f ms) + PackageNode deps uid -> pure $ PackageNode deps uid return mg { mg_mss = mss' } @@ -262,9 +281,9 @@ mgMapM f mg at ModuleGraph{..} = do mgModSummaries :: ModuleGraph -> [ModSummary] mgModSummaries mg = [ m | ModuleNode _ m <- mgModSummaries' mg ] --- | Look up a ModSummary in the ModuleGraph --- Looks up the non-boot ModSummary --- Linear in the size of the module graph +-- | Look up a non-boot ModSummary in the ModuleGraph. +-- +-- Careful: Linear in the size of the module graph mgLookupModule :: ModuleGraph -> Module -> Maybe ModSummary mgLookupModule ModuleGraph{..} m = listToMaybe $ mapMaybe go mg_mss where @@ -274,6 +293,9 @@ mgLookupModule ModuleGraph{..} m = listToMaybe $ mapMaybe go mg_mss = Just ms go _ = Nothing +mgMember :: ModuleGraph -> NodeKey -> Bool +mgMember graph k = isJust $ snd (mg_graph graph) k + -------------------------------------------------------------------------------- -- ** Reachability -------------------------------------------------------------------------------- @@ -285,6 +307,13 @@ mgReachable mg nk = map summaryNodeSummary <$> modules_below where modules_below = allReachable td_map <$> lookup_node nk +-- | Things which are reachable if hs-boot files are ignored. Used by 'getLinkDeps' +mgReachableLoop :: ModuleGraph -> [NodeKey] -> [ModuleGraphNode] +mgReachableLoop mg nk = map summaryNodeSummary modules_below where + (td_map, lookup_node) = mg_loop_graph mg + modules_below = + allReachableMany td_map (mapMaybe lookup_node nk) + -- | Reachability Query. -- -- @mgQuery(g, a, b)@ asks: @@ -402,9 +431,8 @@ moduleGraphModulesBelow mg uid mn = filtered_mods [ mn | NodeKey_Module mn <- mo filterToposortToModules :: [SCC ModuleGraphNode] -> [SCC ModSummary] filterToposortToModules = mapMaybe $ mapMaybeSCC $ \case - InstantiationNode _ _ -> Nothing - LinkNode{} -> Nothing ModuleNode _deps node -> Just node + _ -> Nothing where -- This higher order function is somewhat bogus, -- as the definition of "strongly connected component" @@ -424,23 +452,27 @@ filterToposortToModules = mapMaybe $ mapMaybeSCC $ \case data NodeKey = NodeKey_Unit {-# UNPACK #-} !InstantiatedUnit | NodeKey_Module {-# UNPACK #-} !ModNodeKeyWithUid | NodeKey_Link !UnitId + | NodeKey_ExternalUnit !UnitId deriving (Eq, Ord) instance Outputable NodeKey where ppr (NodeKey_Unit iu) = ppr iu ppr (NodeKey_Module mk) = ppr mk ppr (NodeKey_Link uid) = ppr uid + ppr (NodeKey_ExternalUnit uid) = ppr uid mkNodeKey :: ModuleGraphNode -> NodeKey mkNodeKey = \case InstantiationNode _ iu -> NodeKey_Unit iu ModuleNode _ x -> NodeKey_Module $ msKey x LinkNode _ uid -> NodeKey_Link uid + PackageNode _ uid -> NodeKey_ExternalUnit uid nodeKeyUnitId :: NodeKey -> UnitId nodeKeyUnitId (NodeKey_Unit iu) = instUnitInstanceOf iu nodeKeyUnitId (NodeKey_Module mk) = mnkUnitId mk nodeKeyUnitId (NodeKey_Link uid) = uid +nodeKeyUnitId (NodeKey_ExternalUnit uid) = uid nodeKeyModName :: NodeKey -> Maybe ModuleName nodeKeyModName (NodeKey_Module mk) = Just (gwib_mod $ mnkModuleName mk) @@ -482,6 +514,7 @@ showModMsg dflags _ (LinkNode {}) = arch_os = platformArchOS platform exe_file = exeFileName arch_os staticLink (outputFile_ dflags) in text exe_file +showModMsg _ _ (PackageNode _deps uid) = ppr uid showModMsg _ _ (InstantiationNode _uid indef_unit) = ppr $ instUnitInstanceOf indef_unit showModMsg dflags recomp (ModuleNode _ mod_summary) = @@ -520,25 +553,16 @@ newtype NodeMap a = NodeMap { unNodeMap :: Map.Map NodeKey a } mkTransDeps :: [ModuleGraphNode] -> (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) mkTransDeps = first graphReachability {- module graph is acyclic -} . moduleGraphNodes False -extendMG' :: ModuleGraph -> ModuleGraphNode -> ModuleGraph -extendMG' mg = \case - InstantiationNode uid depUnitId -> extendMGInst mg uid depUnitId - ModuleNode deps ms -> extendMG mg deps ms - LinkNode deps uid -> extendMGLink mg uid deps +mkTransLoopDeps :: [ModuleGraphNode] -> (ReachabilityIndex SummaryNode, NodeKey -> Maybe SummaryNode) +mkTransLoopDeps = first cyclicGraphReachability . moduleGraphNodes True -- | Add an ExtendedModSummary to ModuleGraph. Assumes that the new ModSummary is -- not an element of the ModuleGraph. -extendMG :: ModuleGraph -> [NodeKey] -> ModSummary -> ModuleGraph -extendMG ModuleGraph{..} deps ms = ModuleGraph - { mg_mss = ModuleNode deps ms : mg_mss - , mg_graph = mkTransDeps (ModuleNode deps ms : mg_mss) - } - -extendMGInst :: ModuleGraph -> UnitId -> InstantiatedUnit -> ModuleGraph -extendMGInst mg uid depUnitId = mg - { mg_mss = InstantiationNode uid depUnitId : mg_mss mg - } - -extendMGLink :: ModuleGraph -> UnitId -> [NodeKey] -> ModuleGraph -extendMGLink mg uid nks = mg { mg_mss = LinkNode nks uid : mg_mss mg } +extendMG :: ModuleGraph -> ModuleGraphNode -> ModuleGraph +extendMG ModuleGraph{..} node = + ModuleGraph + { mg_mss = node : mg_mss + , mg_graph = mkTransDeps (node : mg_mss) + , mg_loop_graph = mkTransLoopDeps (node : mg_mss) + } ===================================== compiler/GHC/Unit/Module/ModIface.hs ===================================== @@ -82,6 +82,7 @@ module GHC.Unit.Module.ModIface , IfaceImport(..) , mi_boot , mi_fix + , miKey , mi_semantic_module , mi_free_holes , mi_mnwib @@ -125,6 +126,7 @@ import GHC.Utils.Binary import Control.DeepSeq import Control.Exception +import GHC.Unit.Module.Graph (ModNodeKeyWithUid(..)) {- Note [Interface file stages] @@ -362,6 +364,9 @@ data ModIface_ (phase :: ModIfacePhase) -- See Note [Sharing of ModIface]. } +miKey :: ModIface -> ModNodeKeyWithUid +miKey hmi = ModNodeKeyWithUid (mi_mnwib hmi) ((toUnitId $ moduleUnit (mi_module hmi))) + -- Enough information to reconstruct the top level environment for a module data IfaceTopEnv = IfaceTopEnv ===================================== compiler/ghc.cabal.in ===================================== @@ -941,6 +941,7 @@ Library GHC.Unit.Module.Deps GHC.Unit.Module.Env GHC.Unit.Module.Graph + GHC.Unit.Module.External.Graph GHC.Unit.Module.Imported GHC.Unit.Module.Location GHC.Unit.Module.ModDetails View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/a4db8f7223054067d1c3aa25b2eb637cd3605675 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/a4db8f7223054067d1c3aa25b2eb637cd3605675 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 15:58:15 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Wed, 18 Dec 2024 10:58:15 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports] 52 commits: JS: fix typos and namings (fixes #24602) Message-ID: <6762f117caac7_3e21795e7ba8241a@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports at Glasgow Haskell Compiler / GHC Commits: 4d5d4404 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: fix typos and namings (fixes #24602) You may noted that I've also changed term of ``` , global "h$vt_double" ||= toJExpr IntV ``` See "IntV" and ``` WaitReadOp -> \[] [fd] -> pure $ PRPrimCall $ returnS (app "h$waidRead" [fd]) ``` See "h$waidRead" (cherry picked from commit c70b9ddb6dc232e22a49ddc757865bd3bc9c46a7) - - - - - fc56b471 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: trivial checks for variable presence (fixes #24602) (cherry picked from commit 3db54f9bcdcd20a2497447bf76176470db900143) - - - - - 1ed663cc by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: fs module imported twice (by emscripten and by ghc-internal). ghc-internal import wrapped in a closure to prevent conflict with emscripten (fixes #24602) Better solution is to use some JavaScript module system like AMD, CommonJS or even UMD. It will be investigated at other issues. At first glance we should try UMD (See https://github.com/umdjs/umd) (cherry picked from commit 777f108f74f0a81274775d504dffe46c5fdfc33f) - - - - - d3477264 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: thread.js requires h$fds and h$fdReady to be declared for static code analysis, minimal code copied from GHCJS (fixes #24602) I've just copied some old pieces of GHCJS from publicly available sources (See https://github.com/Taneb/shims/blob/a6dd0202dcdb86ad63201495b8b5d9763483eb35/src/io.js#L607). Also I didn't put details to h$fds. I took minimal and left only its object initialization: `var h$fds = {};` (cherry picked from commit a45a57127bb7eaceae92e0edf057c053eb4d5367) - - - - - 549ce324 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: heap and stack overflows reporting defined as js hard failure (fixes #24602) These errors were treated as a hard failure for browser application. The fix is trivial: just throw error. (cherry picked from commit ad90bf1237e0c9d2013399bd8cd1315f2845d9e7) - - - - - 8335f195 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: Stubs for code without actual implementation detected by Google Closure Compiler (fixes #24602) These errors were fixed just by introducing stubbed functions with throw for further implementation. (cherry picked from commit 5962fa526e071d77fd4970b57d957a622e13207c) - - - - - db00df21 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: Add externs to linker (fixes #24602) After enabling jsdoc and built-in google closure compiler types I was needed to deal with the following: 1. Define NodeJS-environment types. I've just copied minimal set of externs from semi-official repo (see https://github.com/externs/nodejs/blob/6c6882c73efcdceecf42e7ba11f1e3e5c9c041f0/v8/nodejs.js#L8). 2. Define Emscripten-environment types: `HEAP8`. Emscripten already provides some externs in our code but it supposed to be run in some module system. And its definitions do not work well in plain bundle. 3. We have some functions which purpose is to add to functions some contextual information via function properties. These functions should be marked as `modifies` to let google closure compiler remove calls if these functions are not used actually by call graph. Such functions are: `h$o`, `h$sti`, `h$init_closure`, `h$setObjInfo`. 4. STG primitives such as registries and stuff from `GHC.StgToJS`. `dXX` properties were already present at externs generator function but they are started from `7`, not from `1`. This message is related: `// fixme does closure compiler bite us here?` (cherry picked from commit a0694298aad5f2f428311d6e787484a250c9de43) - - - - - 3a270b4d by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: added both tests: for size and for correctness (fixes #24602) By some reason MacOS builds add to stderr messages like: Ignoring unexpected archive entry: __.SYMDEF ... However I left stderr to `/dev/null` for compatibility with linux CI builds. (cherry picked from commit e58bb29f8a4808fd4b74b653b1893f78121c7df4) - - - - - 5348bbe9 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: Disable js linker warning for empty symbol table to make js tests running consistent across environments (cherry picked from commit 909f3a9c8dac5d15c2492c008e370be60f50b50c) - - - - - 68da8237 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: Add special preprocessor for js files due of needing to keep jsdoc comments (fixes #24602) Our js files have defined google closure compiler types at jsdoc entries but these jsdoc entries are removed by cpp preprocessor. I considered that reusing them in javascript-backend would be a nice thing. Right now haskell processor uses `-traditional` option to deal with comments and `//` operators. But now there are following compiler options: `-C` and `-CC`. You can read about them at GCC (see https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#index-CC) and CLang (see https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-CC). It seems that `-CC` works better for javascript jsdoc than `-traditional`. At least it leaves `/* ... */` comments w/o changes. (cherry picked from commit 83eb10da239e6bef0d06dbba174809f99c463d8d) - - - - - e234268d by Cheng Shao at 2024-12-18T16:28:16+01:00 Update autoconf scripts Scripts taken from autoconf 948ae97ca5703224bd3eada06b7a69f40dd15a02 (cherry picked from commit 36f2c3422d7f3620078dba701f57275a3708aff5) - - - - - f1de8643 by Sylvain Henry at 2024-12-18T16:28:16+01:00 GHCi: support inlining breakpoints (#24712) When a breakpoint is inlined, its context may change (e.g. tyvars in scope). We must take this into account and not used the breakpoint tick index as its sole identifier. Each instance of a breakpoint (even with the same tick index) now gets a different "info" index. We also need to distinguish modules: - tick module: module with the break array (tick counters, status, etc.) - info module: module having the CgBreakInfo (info at occurrence site) (cherry picked from commit b85b11994e0130ff2401dd4bbdf52330e0bcf776) - - - - - cd9f53ba by Cheng Shao at 2024-12-18T16:28:16+01:00 wasm: use scheduler.postTask() for context switch when available This patch makes use of scheduler.postTask() for JSFFI context switch when it's available. It's a more principled approach than our MessageChannel based setImmediate() implementation, and it's available in latest version of Chromium based browsers. (cherry picked from commit 43d48b449a46e805e3baeafbafa62b6cd6f761c9) - - - - - c01dc7f1 by Matthew Craven at 2024-12-18T16:28:16+01:00 Add test cases for #24664 ...since none are present in the original MR !12463 fixing this issue. (cherry picked from commit a19201d42cfd3aa54faeb1b5a95b715b9a67a01a) - - - - - 5a8790db by Arsen Arsenović at 2024-12-18T16:28:16+01:00 Split out the C-- preprocessor, and make it pass -g0 Previously, C-- was processed with the C preprocessor program. This means that it inherited flags passed via -optc. A flag that is somewhat often passed through -optc is -g. At certain -g levels (>=2), GCC starts emitting defines *after* preprocessing, for the purposes of debug info generation. This is not useful for the C-- compiler, and, in fact, causes lexer errors. We can suppress this effect (safely, if supported) via -g0. As a workaround, in older versions of GCC (<=10), GCC only emitted defines if a certain set of -g*3 flags was passed. Newer versions check the debug level. For the former, we filter out those -g*3 flags and, for the latter, we specify -g0 on top of that. As a compatible and effective solution, this change adds a C-- preprocessor distinct from the C compiler and preprocessor, but that keeps its flags. The command line produced for C-- preprocessing now looks like: $pgmCmmP $optCs_without_g3 $g0_if_supported $optCmmP Closes: https://gitlab.haskell.org/ghc/ghc/-/issues/24474 (cherry picked from commit 25b0b40467d0a12601497117c0ad14e1fcab0b74) - - - - - f2cc943d by Andreas Klebinger at 2024-12-18T16:28:16+01:00 Add release notes for some backported 9.10.2 patches. Contains notes for: !11938: Escape multiple arguments in the settings file !12201: RTS: Emit warning when -M < -H !12495: Update autoconf scripts !12500: GHCi: support cross-module inlining of breakpoints !12550: wasm: use scheduler.postTask() for context switch when available !12569: Split out the C-- preprocessor, and make it pass -g0 - - - - - 1016a4b1 by Andreas Klebinger at 2024-12-18T16:28:17+01:00 -fprof-late: Only insert cost centres on functions/non-workfree cafs. They are usually useless and doing so for data values comes with a large compile time/code size overhead. Fixes #24103 (cherry picked from commit 9b4129a580e6c1d18197ef2ed3a8b89d52a2b133) - - - - - 0c850206 by Ben Gamari at 2024-12-18T16:28:17+01:00 IPE: Eliminate dependency on Read Instead of encoding the closure type as decimal string we now simply represent it as an integer, eliminating the need for `Read` in `GHC.Internal.InfoProv.Types.peekInfoProv`. Closes #24504. ------------------------- Metric Decrease: T24602_perf_size size_hello_artifact ------------------------- (cherry picked from commit ab840ce6f83a74f36dac939d087b69f97404399a) - - - - - c15c6a8d by Cheng Shao at 2024-12-18T16:28:17+01:00 testsuite: fix testwsdeque with recent clang This patch fixes compilation of testwsdeque.c with recent versions of clang, which will fail with the error below: ``` testwsdeque.c:95:33: error: warning: format specifies type 'long' but the argument has type 'void *' [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~~ ^ testwsdeque.c:95:39: error: warning: format specifies type 'int' but the argument has type 'StgWord' (aka 'unsigned long') [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~ ^~~ | %lu testwsdeque.c:133:42: error: error: incompatible function pointer types passing 'void (void *)' to parameter of type 'OSThreadProc *' (aka 'void *(*)(void *)') [-Wincompatible-function-pointer-types] 133 | createOSThread(&ids[n], "thief", thief, (void*)(StgWord)n); | ^~~~~ /workspace/ghc/_build/stage1/lib/../lib/x86_64-linux-ghc-9.11.20240502/rts-1.0.2/include/rts/OSThreads.h:193:51: error: note: passing argument to parameter 'startProc' here 193 | OSThreadProc *startProc, void *param); | ^ 2 warnings and 1 error generated. ``` (cherry picked from commit a9979f55d0f688fabd25ee318e44b9addd904988) - - - - - 3329ca03 by Cheng Shao at 2024-12-18T16:28:17+01:00 ghc-heap: fix typo in ghc-heap cbits (cherry picked from commit 2b1af08b94024c104b54eadd710855e9f8a90fb6) - - - - - a15b3383 by doyougnu at 2024-12-18T16:28:17+01:00 testsuite: expand size testing infrastructure - closes #24191 - adds windows_skip, wasm_skip, wasm_arch, find_so, _find_so - path_from_ghcPkg, collect_size_ghc_pkg, collect_object_size, find_non_inplace functions to testsuite - adds on_windows and req_dynamic_ghc predicate to testsuite The design is to not make the testsuite too smart and simply offload to ghc-pkg for locations of object files and directories. (cherry picked from commit 9bae34d87f6c978e03031c549920071857c9080c) - - - - - 4b5b67a4 by Matthew Pickering at 2024-12-18T16:28:17+01:00 tests: Widen acceptance window for dir and so size tests These are testing things which are sometimes out the control of a GHC developer. Therefore we shouldn't fail CI if something about these dependencies change because we can't do anything about it. It is still useful to have these statistics for visualisation in grafana though. Ticket #24759 (cherry picked from commit c49493f242fc78fbf23ef3642df531a19c3b4b24) - - - - - 216ad9f9 by Matthew Pickering at 2024-12-18T16:28:17+01:00 Disable rts_so test It has already manifested large fluctuations and destabilising CI Fixes #24762 (cherry picked from commit 9562808d02db67838844d874c632f18af904949c) - - - - - 20552645 by Torsten Schmits at 2024-12-18T16:28:17+01:00 refactor quadratic search in warnMissingHomeModules (cherry picked from commit bc672166acd8f2815d58b6d214e69373abec4486) - - - - - 158c9dbf by Torsten Schmits at 2024-12-18T16:28:17+01:00 add test that runs MakeDepend on thousands of modules (cherry picked from commit 7875e8cbe5d9b69a1a77354317b2bf9478172686) - - - - - ee3e6c79 by Matthew Pickering at 2024-12-18T16:28:17+01:00 driver: Fix -Wmissing-home-modules when multiple units have the same module name It was assumed that module names were unique but that isn't true with multiple units. The fix is quite simple, maintain a set of `(ModuleName, UnitId)` and query that to see whether the module has been specified. Fixes #25122 (cherry picked from commit 951ce3d5904a1d34d49787d444f99e251e24d4e7) - - - - - 1faf2c60 by Sylvain Henry at 2024-12-18T16:28:17+01:00 Reverse arguments to stgCallocBytes (fix #24828) (cherry picked from commit 6838a7c32ca29b5d44adc9d6280d3a960f31be7c) - - - - - 6d00956c by Ben Gamari at 2024-12-18T16:28:17+01:00 rts: Fix size of StgOrigThunkInfo frames Previously the entry code of the `stg_orig_thunk` frame failed to account for the size of the profiling header as it hard-coded the frame size. Fix this. Fixes #24809. (cherry picked from commit 6d7e6ad803be11cb7a79dca727c37e4ef21cda4b) - - - - - 0be2daaf by Fendor at 2024-12-18T16:28:17+01:00 Add regression test T24809 for stg_orig_thunk_info_frame size (cherry picked from commit c645fe406cd4a3f4c152e51dfbcdeeb5e2930fb1) - - - - - 80afd1a9 by Andreas Klebinger at 2024-12-18T16:28:17+01:00 bindists: Check for existence of share folder before trying to copy it. This folder isn't distributed in windows bindists A lack of doing so resulted us copying loads of files twice. (cherry picked from commit 4181aa40fff5653a121cd2ece33ab0f7454d421d) - - - - - af123155 by Matthew Pickering at 2024-12-18T16:28:17+01:00 Remove ad-hoc installation of mingw toolchain in relocatable bindists This reverts 616ac30026e8dd7d2ebb98d92dde071eedf5d951 The choice about whether to install mingw is taken in the installation makefile. This is also broken on non-windows systems. The actual issue was the EnableDistroToolchain variable wasn't declared in mk/config.mk and therefore the check to install mingw was failing. (cherry picked from commit d216510e43deca5a9a221d2b799face293e38299) - - - - - 50974a94 by Cheng Shao at 2024-12-18T16:28:17+01:00 testsuite: fix T17920 for wasm backend T17920 was marked as fragile on wasm before; it can be trivially fixed by avoiding calling variadic printf() in cmm. (cherry picked from commit 7b4c19983bf6bc11b519b437a6204c38672721ea) - - - - - c8f98d01 by Simon Peyton Jones at 2024-12-18T16:28:17+01:00 Better skolemisation As #24810 showed, it is (a little) better to skolemise en-bloc, so that Note [Let-bound skolems] fires more often. See Note [Skolemisation en bloc] in GHC.Tc.Utils.Instantiate. (cherry picked from commit 3d9e4ce68a55f6bc5246d2d77729676010e85bbd) - - - - - e57d1433 by Ryan Scott at 2024-12-18T16:28:17+01:00 Add missing parenthesizePat in cvtp We need to ensure that the output of `cvtp` is parenthesized (at precedence `sigPrec`) so that any pattern signatures with a surrounding pattern signature can parse correctly. Fixes #24837. (cherry picked from commit a3cd3a1d0d186f2aa4d0273c6b3e74a442de2ef0) - - - - - 05338430 by crumbtoo at 2024-12-18T16:28:17+01:00 user_guide: Fix typo in MultiWayIf chapter Close #24829 (cherry picked from commit c5e00c35927d574f71bf77449817b131d1749750) - - - - - 53eeffd6 by Cheng Shao at 2024-12-18T16:28:17+01:00 rts: fix missing function prototypes in ClosureMacros.h (cherry picked from commit 3ca72ad974169aa39f391774875a9cc2a77ee967) - - - - - bbe4accd by Cheng Shao at 2024-12-18T16:28:17+01:00 rts: use __builtin_offsetof to implement STG_FIELD_OFFSET This patch fixes the STG_FIELD_OFFSET macro definition by using __builtin_offsetof, which is what gcc/clang uses to implement offsetof in standard C. The previous definition that uses NULL pointer involves subtle undefined behavior in C and thus reported by UndefinedBehaviorSanitizer as well: ``` rts/Capability.h:243:58: runtime error: member access within null pointer of type 'Capability' (aka 'struct Capability_') SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Capability.h:243:58 ``` (cherry picked from commit 05c4fafbc1693164d5f06ed062fc73bbf3f78deb) - - - - - 4879286a by Cheng Shao at 2024-12-18T16:28:17+01:00 rts: fix an unaligned load in nonmoving gc This patch fixes an unaligned load in nonmoving gc by ensuring the closure address is properly untagged first before attempting to prefetch its header. The unaligned load is reported by UndefinedBehaviorSanitizer: ``` rts/sm/NonMovingMark.c:921:9: runtime error: member access within misaligned address 0x0042005f3a71 for type 'StgClosure' (aka 'struct StgClosure_'), which requires 8 byte alignment 0x0042005f3a71: note: pointer points here 00 00 00 98 43 13 8e 12 7f 00 00 50 3c 5f 00 42 00 00 00 58 17 b7 92 12 7f 00 00 89 cb 5e 00 42 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/NonMovingMark.c:921:9 ``` This issue had previously gone unnoticed since it didn't really harm runtime correctness, the invalid header address directly loaded from a tagged pointer is only used as prefetch address and will not cause segfaults. However, it still should be corrected because the prefetch would be rendered useless by this issue, and untagging only involves a single bitwise operation without memory access so it's cheap enough to add. (cherry picked from commit c77a48af6e1f38337b305fec794e8c999f1c7f3a) - - - - - 59b84e0f by Cheng Shao at 2024-12-18T16:28:17+01:00 rts: ensure gc_thread/gen_workspace is allocated with proper alignment gc_thread/gen_workspace are required to be aligned by 64 bytes. However, this property has not been properly enforced before, and numerous alignment violations at runtime has been caught by UndefinedBehaviorSanitizer that look like: ``` rts/sm/GC.c:1167:8: runtime error: member access within misaligned address 0x0000027a3390 for type 'gc_thread' (aka 'struct gc_thread_'), which requires 64 byte alignment 0x0000027a3390: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1167:8 rts/sm/GC.c:1184:13: runtime error: member access within misaligned address 0x0000027a3450 for type 'gen_workspace' (aka 'struct gen_workspace_'), which requires 64 byte alignment 0x0000027a3450: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1184:13 ``` This patch fixes the gc_thread/gen_workspace misalignment issue by explicitly allocating them with alignment constraint. (cherry picked from commit 7a660042395614e4b19534baf5b779f65059861e) - - - - - c4507307 by Cheng Shao at 2024-12-18T16:28:17+01:00 hadrian: disable PIC for in-tree GMP on wasm32 This patch disables PIC for in-tree GMP on wasm32 target. Enabling PIC unconditionally adds undesired code size and runtime overhead for wasm32. (cherry picked from commit f9c1ae122ec642c0d9236dffc971bc2d1ca38fba) - - - - - 794e71e1 by Cheng Shao at 2024-12-18T16:28:17+01:00 hadrian: disable in-tree gmp fft code path for wasm32 This patch disables in-tree GMP FFT code paths for wasm32 target in order to give up some performance of multiplying very large operands in exchange for reduced code size. (cherry picked from commit 1a32f82807ae01813f14bdf12fed75eb32799e18) - - - - - d08b9b83 by Cheng Shao at 2024-12-18T16:28:18+01:00 hadrian: build in-tree GMP with malloc-notreentrant on wasm32 This patch makes hadrian build in-tree GMP with the --enable-alloca=malloc-notreentrant configure option. We will only need malloc-reentrant when we have threaded RTS and SMP support on wasm32, which will take some time to happen, before which we should use malloc-notreentrant to avoid undesired runtime overhead. (cherry picked from commit 06277d56de91c8d21cbf71e8bc4096925b863acc) - - - - - ece0a0db by Andreas Klebinger at 2024-12-18T16:28:18+01:00 Add release notes for some backported patches. Add entries for the following backported MRs: !12498: -fprof-late: Don't add cost centres to static data. !12565: IPE: Eliminate dependency on Read !12591: ghc-heap: fix typo in ghc-heap cbits !12607: refactor quadratic search in warnMissingHomeModules !12621: rts: Fix size of StgOrigThunkInfo frames !12649 # bindists: Check for existence of shared folder before trying to copy it. !12653: Better skolemisation !12734: Various rts fixes for issues spotted by UndefinedBehaviorSanitizer !12592: hadrian: adjust in-tree GMP configure options for wasm32 - - - - - 1b847dec by Cheng Shao at 2024-12-18T16:28:18+01:00 hadrian: fix hadrian building with ghc-9.10.1 (cherry picked from commit be514bb48629747258416e602c8b00810b3863b0) - - - - - 7dd1423d by Cheng Shao at 2024-12-18T16:28:18+01:00 linters: fix lint-whitespace compilation with ghc-9.10.1 (cherry picked from commit ad38e954bf088b43fa1cecfeaf474b6b9c11e2ed) - - - - - 86723eed by Zubin Duggal at 2024-12-18T16:28:18+01:00 testsuite: Handle exceptions in framework_fail when testdir is not initialised When `framework_fail` is called before initialising testdir, it would fail with an exception reporting the testdir not being initialised instead of the actual failure. Ensure we report the actual reason for the failure instead of failing in this way. One way this can manifest is when trying to run a test that doesn't exist using `--only` (cherry picked from commit c56d728e1f8702db02cf7e7e3cdc567b3df47ac3) - - - - - 1d787538 by Arsen Arsenović at 2024-12-18T16:28:18+01:00 Add the cmm_cpp_is_gcc predicate to the testsuite A future C-- test called T24474-cmm-override-g0 relies on the GCC-specific behaviour of -g3 implying -dD, which, in turn, leads to it emitting #defines past the preprocessing stage. Clang, at least, does not do this, so the test would fail if ran on Clang. As the behaviour here being tested is ``-optCmmP-g3'' undoing effects of the workaround we apply as a fix for bug #24474, and the workaround was for GCC-specific behaviour, the test needs to be marked as fragile on other compilers. (cherry picked from commit 4d59abf295cd371448f22c1724b955dce4974302) - - - - - a73ffe72 by Ben Gamari at 2024-12-18T16:35:45+01:00 rts: Fix TSAN_ENABLED CPP guard This should be `#if defined(TSAN_ENABLED)`, not `#if TSAN_ENABLED`, lest we suffer warnings. (cherry picked from commit c8a4c050626f451461a3667589d40004b2547a1c) - - - - - a235a078 by Cheng Shao at 2024-12-18T16:35:56+01:00 rts: fix errors when compiling with TSAN This commit fixes rts compilation errors when compiling with TSAN: - xxx_FENCE macros are redefined and trigger CPP warnings. - Use SIZEOF_W. WORD_SIZE_IN_BITS is provided by MachDeps.h which Cmm.h doesn't include by default. (cherry picked from commit e91dad93ff50b429d5717c81fbd5fe20ff2defd9) - - - - - 6c30c754 by Cheng Shao at 2024-12-18T16:36:11+01:00 rts: fix clang-specific errors when compiling with TSAN This commit fixes clang-specific rts compilation errors when compiling with TSAN: - clang doesn't have -Wtsan flag - Fix prototype of ghc_tsan_* helper functions - __tsan_atomic_* functions aren't clang built-ins and sanitizer/tsan_interface_atomic.h needs to be included - On macOS, TSAN runtime library is libclang_rt.tsan_osx_dynamic.dylib, not libtsan. -fsanitize-thread as a link-time flag will take care of linking the TSAN runtime library anyway so remove tsan as an rts extra library (cherry picked from commit a9ab9455b0159c955ea8c38ac113e4cbe47d410f) - - - - - c05d1181 by Cheng Shao at 2024-12-18T16:36:58+01:00 compiler: fix github link to __tsan_memory_order in a comment (cherry picked from commit 865bd717cc4c63d6926138c5b8c71addcf70a1e7) - - - - - f39baa8c by Cheng Shao at 2024-12-18T16:38:32+01:00 ci: improve TSAN CI jobs - Run TSAN jobs with +thread_sanitizer_cmm which enables Cmm instrumentation as well. - Run TSAN jobs in deb12 which ships gcc-12, a reasonably recent gcc that @bgamari confirms he's using in #GHC:matrix.org. Ideally we should be using latest clang release for latest improvements in sanitizers, though that's left as future work. - Mark TSAN jobs as manual+allow_failure in validate pipelines. The purpose is to demonstrate that we have indeed at least fixed building of TSAN mode in CI without blocking the patch to land, and once merged other people can begin playing with TSAN using their own dev setups and feature branches. (cherry picked from commit 07cb627c8232f573bd6a8ea1b7c110ff3c1b5d22) - - - - - 30 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC.hs - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/Core/LateCC.hs - compiler/GHC/Core/LateCC/TopLevelBinds.hs - compiler/GHC/Core/LateCC/Types.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/Type.hs - compiler/GHC/Core/Utils.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/Pipeline/Execute.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Iface/Recomp/Flags.hs - compiler/GHC/Runtime/Eval.hs - compiler/GHC/Runtime/Eval/Types.hs - compiler/GHC/Runtime/Interpreter.hs - compiler/GHC/Settings.hs - compiler/GHC/Settings/IO.hs - compiler/GHC/StgToByteCode.hs - compiler/GHC/StgToCmm/InfoTableProv.hs - compiler/GHC/StgToJS/Linker/Linker.hs - compiler/GHC/StgToJS/Linker/Utils.hs - compiler/GHC/StgToJS/Prim.hs - compiler/GHC/StgToJS/Rts/Rts.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/5080053a75b0a25eed2ff2cdd7a45b74d04cff3f...f39baa8c1beb2ec85a7d350f7969e06bda7ed6a8 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/5080053a75b0a25eed2ff2cdd7a45b74d04cff3f...f39baa8c1beb2ec85a7d350f7969e06bda7ed6a8 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 16:24:35 2024 From: gitlab at gitlab.haskell.org (Sjoerd Visscher (@trac-sjoerd_visscher)) Date: Wed, 18 Dec 2024 11:24:35 -0500 Subject: [Git][ghc/ghc][wip/T18462] Multiplicity annotation on records Message-ID: <6762f7432d9aa_1f5002bccf073424@gitlab.mail> Sjoerd Visscher pushed to branch wip/T18462 at Glasgow Haskell Compiler / GHC Commits: 358973f3 by Sjoerd Visscher at 2024-12-18T17:23:30+01:00 Multiplicity annotation on records - - - - - 30 changed files: - compiler/GHC/Hs/Decls.hs - compiler/GHC/Hs/Expr.hs - compiler/GHC/Hs/Instances.hs - compiler/GHC/Hs/Type.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Iface/Ext/Ast.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/PostProcess.hs - compiler/GHC/Parser/PostProcess/Haddock.hs - compiler/GHC/Rename/Expr.hs - compiler/GHC/Rename/HsType.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Tc/Gen/App.hs - compiler/GHC/Tc/Gen/HsType.hs - compiler/GHC/Tc/Gen/Sig.hs - compiler/GHC/Tc/TyCl.hs - compiler/GHC/ThToHs.hs - compiler/Language/Haskell/Syntax/Decls.hs - compiler/Language/Haskell/Syntax/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/linear_types.rst - testsuite/tests/ghc-api/exactprint/Test20239.stderr - 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/linear/should_compile/NonLinearRecord.hs - testsuite/tests/linear/should_compile/all.T - + testsuite/tests/linear/should_fail/LinearRecFieldMany.hs - + testsuite/tests/linear/should_fail/LinearRecFieldMany.stderr - testsuite/tests/linear/should_fail/all.T The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/358973f3e70ea8a3c1b9a799cff66048e056a9a5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/358973f3e70ea8a3c1b9a799cff66048e056a9a5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 16:26:27 2024 From: gitlab at gitlab.haskell.org (Simon Peyton Jones (@simonpj)) Date: Wed, 18 Dec 2024 11:26:27 -0500 Subject: [Git][ghc/ghc][wip/T24359] 2 commits: Respond to review Message-ID: <6762f7b32f28d_1f50021decf074153@gitlab.mail> Simon Peyton Jones pushed to branch wip/T24359 at Glasgow Haskell Compiler / GHC Commits: b9d4aab9 by Simon Peyton Jones at 2024-12-18T09:21:43+00:00 Respond to review - - - - - 9e47b2bd by Simon Peyton Jones at 2024-12-18T16:25:06+00:00 Refactor RuleBndrs ...probably needs a bit more documentation - - - - - 11 changed files: - compiler/GHC/Hs/Binds.hs - compiler/GHC/HsToCore.hs - compiler/GHC/HsToCore/Binds.hs - compiler/GHC/HsToCore/Expr.hs - compiler/GHC/Rename/Bind.hs - compiler/GHC/Tc/Gen/Bind.hs - compiler/GHC/Tc/Gen/Sig.hs - compiler/GHC/Tc/TyCl/Instance.hs - compiler/GHC/Tc/Zonk/Type.hs - compiler/Language/Haskell/Syntax/Binds.hs - compiler/Language/Haskell/Syntax/Extension.hs Changes: ===================================== compiler/GHC/Hs/Binds.hs ===================================== @@ -830,10 +830,10 @@ data TcSpecPrags -- be macro-expanded at every call site | SpecPrags [LTcSpecPrag] --- | Located Type checker Specification Pragmas +-- | Located Type checker Specialisation Pragmas type LTcSpecPrag = Located TcSpecPrag --- | Type checker Specification Pragma +-- | Type checker Specialisation Pragma -- This data type is used briefly, to communicate between the typechecker and renamer data TcSpecPrag = SpecPrag Id HsWrapper InlinePragma @@ -1024,10 +1024,15 @@ instance NoAnn HsRuleBndrsAnn where noAnn = HsRuleBndrsAnn Nothing Nothing -type instance XCRuleBndr (GhcPass _) = AnnTyVarBndr -type instance XCRuleBndrs (GhcPass _) = HsRuleBndrsAnn + type instance XXRuleBndrs (GhcPass _) = DataConCantHappen +type instance XCRuleBndrs GhcPs = HsRuleBndrsAnn +type instance XCRuleBndrs GhcRn = NoExtField +type instance XCRuleBndrs GhcTc = [Var] -- Binders of the rule, not + -- necessarily in dependency order + type instance XRuleBndrSig (GhcPass _) = AnnTyVarBndr +type instance XCRuleBndr (GhcPass _) = AnnTyVarBndr type instance XXRuleBndr (GhcPass _) = DataConCantHappen instance (OutputableBndrId p) => Outputable (RuleBndrs (GhcPass p)) where ===================================== compiler/GHC/HsToCore.hs ===================================== @@ -436,11 +436,11 @@ Reason dsRule :: LRuleDecl GhcTc -> DsM (Maybe CoreRule) dsRule (L loc (HsRule { rd_name = name , rd_act = rule_act - , rd_bndrs = RuleBndrs { rb_tmvs = vars } + , rd_bndrs = RuleBndrs { rb_ext = bndrs } , rd_lhs = lhs , rd_rhs = rhs })) = putSrcSpanDs (locA loc) $ - do { let bndrs' = scopedSort [var | L _ (RuleBndr _ (L _ var)) <- vars] + do { let bndrs' = scopedSort bndrs -- The scopedSort is because the binders may not -- be in dependency order; see wrinkle (FTV1) in -- Note [Free tyvars on rule LHS] in GHC.Tc.Zonk.Type ===================================== compiler/GHC/HsToCore/Binds.hs ===================================== @@ -793,24 +793,24 @@ Note [Desugaring SPECIALISE pragmas] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppose we have f :: forall a b. (Ord a, Eq b) => a -> b -> b, and a pragma - {-# SPECIALISE forall x. f @[a] @[Int] x 3 #-} + {-# SPECIALISE forall x. f @[a] @[Int] x [3,4] #-} The SPECIALISE pragma has an expression that desugars to something like forall @a (d:Ord a) (x:[a]). let d2:Ord [a] = $dfOrdList d d3:Eq [Int] = $dfEqList $dfEqInt - in f @[a] @[Int] d2 d3 x 3 + in f @[a] @[Int] d2 d3 x [3,4] We want to get RULE forall a (d2:Ord a) (d3:Eq [Int]) (x:[a]). - f @[a] @[Int] d2 d3 x 3 = $sf d2 x + f @[a] @[Int] d2 d3 x [3,4] = $sf d2 x $sf :: forall a. Ord [a] => a -> Int - $sf = /\a. d2 x. + $sf = /\a. \d2 x. let d3 = $dfEqList $dfEqInt - in @[a] @[Int] d2 d3 x 3 + in @[a] @[Int] d2 d3 x [3,4] Notice that * If the expression had a type signature, such as @@ -835,17 +835,17 @@ Notice that function body. That is crucial -- it makes those specialised methods available in the specialised body. This are the `const_dict_binds`. -* Where the dicionary binding depends on locally-quanitified dictionries, we just discard +* Where the dicionary binding depends on locally-quantified dictionries, we just discard the binding, and pass the dictionary to the specialised function directly. No type-class specialisation arises thereby. Some wrinkles: -(DS1) The `const-dict_binds` /can/ depend on locally-quantifed type vaiables. +(DS1) The `const_dict_binds` /can/ depend on locally-quantifed type vaiables. For example, if we have instance Monad (ST s) where ... - the the dictionary for (Monad (ST s)) is effectlvely a constant dictionary. This - is important to get specialisation for such types. Emxample in test T8331. + the dictionary for (Monad (ST s)) is effectively a constant dictionary. This + is important to get specialisation for such types. Example in test T8331. -} ===================================== compiler/GHC/HsToCore/Expr.hs ===================================== @@ -919,8 +919,8 @@ Note [Desugaring non-canonical evidence] When constructing an application f @ty1 ty2 .. dict1 dict2 .. arg1 arg2 .. if the evidence `dict_i` is canonical, we simply build that application. -But if any of the `dict_i` are /non-canonical/, we wrap the appication in `nospec`, -thus +But if any of the `dict_i` are /non-canonical/, we wrap the application +in `nospec`, thus nospec @fty f @ty1 @ty2 .. dict1 dict2 .. arg1 arg2 .. where nospec :: forall a. a -> a ensures that the typeclass specialiser doesn't attempt to common up this evidence term with other evidence terms @@ -945,7 +945,7 @@ How do we decide if the arguments are non-canonical dictionaries? Wrinkle: -(NC1) We don't do this in the LHS of a RULE. In paritcular, if we have +(NC1) We don't do this in the LHS of a RULE. In particular, if we have f :: (Num a, HasCallStack) => a -> a {-# SPECIALISE f :: Int -> Int #-} then making a rule like @@ -958,7 +958,7 @@ Wrinkle: nospec (f @Int d1) d2 This is done by zapping the unspecables in `dsRule` to Nothing. That `Nothing` - says not to collet unspecables at all. + says not to collect unspecables at all. Note [Desugaring explicit lists] ===================================== compiler/GHC/Rename/Bind.hs ===================================== @@ -1323,7 +1323,7 @@ bindRuleBndrs doc (RuleBndrs { rb_tyvs = tyvs, rb_tmvs = tmvs }) thing_inside ; names <- newLocalBndrsRn rdr_names_w_loc ; bindRuleTyVars doc tyvs $ \ tyvs' -> bindRuleTmVars doc tyvs' tmvs names $ \ tmvs' -> - thing_inside names (RuleBndrs { rb_ext = noAnn + thing_inside names (RuleBndrs { rb_ext = noExtField , rb_tyvs = tyvs', rb_tmvs = tmvs' }) } where get_var :: RuleBndr GhcPs -> LocatedN RdrName ===================================== compiler/GHC/Tc/Gen/Bind.hs ===================================== @@ -918,7 +918,7 @@ mkExport prag_fn residual insoluble qtvs theta ; spec_prags <- tcExtendIdEnv1 poly_name poly_id $ tcSpecPrags poly_id prag_sigs -- tcSpecPrags requires a zonked poly_id. It also needs poly_id to - -- be in the type env (so we can typecheck the SPECIALISE expression + -- be in the type env (so we can typecheck the SPECIALISE expression) -- See Note [Impedance matching] -- NB: we have already done checkValidType, including an ambiguity check, ===================================== compiler/GHC/Tc/Gen/Sig.hs ===================================== @@ -689,10 +689,11 @@ There are two major routes: - Deals with SPECIALISE pragmas have multiple signatures {-# SPECIALISE f :: Int -> Int, Float -> Float #-} - See Note [Handling old-form SPECIALISE pragmas] + - Deprecated, to be removed in GHC 9.18 as per #25540. * New form, described in GHC Proposal #493 - Handled by `SpecSigE` and `SpecPragE` - - Deals with SPECIALISE pramgas which may have value arguments + - Deals with SPECIALISE pragmas which may have value arguments {-# SPECIALISE f @Int 3 #-} - See Note [Handling new-form SPECIALISE pragmas] @@ -708,6 +709,7 @@ for-alls at the top. e.g. {-# SPECIALISE forall x xs. f2 (x:xs) #-} {-# SPECIALISE f3 :: Int -> Int #-} {-# SPECIALISE (f4 :: Int -> Int) 5 #-} + {-# SPECIALISE forall a. forall x xs. f5 @a @a (x:xs) #-} See `GHC.Rename.Bind.checkSpecESigShape` for the shape-check. @@ -729,7 +731,7 @@ We want to generate: Note that -* The `rule_bndrs`, over which the RULE is quantified, are all the varaibles +* The `rule_bndrs`, over which the RULE is quantified, are all the variables free in the call to `f`, /ignoring/ all dictionary simplification. Why? Because we want to make the rule maximimally applicable; provided the types match, the dicionaries should match. @@ -741,20 +743,20 @@ Note that equal at the call site. * The `spec_bnrs`, which are lambda-bound in the specialised function `$sf`, - are a subset of `rul_bndrs`. + are a subset of `rule_bndrs`. spec_bndrs = @p (d2::Eq p) (x::Int) (y::p) * The `spec_const_binds` make up the difference between `rule_bndrs` and `spec_bndrs`. They communicate the specialisation! - If `spec_bndrs` = `rule_bndrs`, no specialisation has happended. + If `spec_bndrs` = `rule_bndrs`, no specialisation has happened. spec_const_binds = let d1 = $fEqInt d3 = d2 How it works: -* `GHC.Tc.Gen.Sig.tcSpecPrag` just typechecks the expresion, putting the results +* `GHC.Tc.Gen.Sig.tcSpecPrag` just typechecks the expression, putting the results into a `SpecPragE` record. Nothing very exciting happens here. * `GHC.Tc.Zonk.Type.zonkLTcSpecPrags` does a little extra work to collect any @@ -763,19 +765,20 @@ How it works: * `GHC.HsToCore.Binds.dsSpec` does the clever stuff: - * Simplifies the expression. This is important becuase a type signature in the + * Simplifies the expression. This is important because a type signature in the expression will have led to type/dictionary abstractions/applications. Now it should look like let in f e1 e1 e3 * `prepareSpecLHS` identifies the `spec_const_binds` (see above), discards - the other ditionary bindigns, and decomposes the call. + the other dictionary bindings, and decomposes the call. * Then it can build the RULE and specialised function. Note [Handling old-form SPECIALISE pragmas] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +NB: this code path is deprecated, and is scheduled to be removed in GHC 9.18, as per #25440. We check that (forall a b. Num a => a -> b -> a) is more polymorphic than @@ -939,18 +942,17 @@ tcSpecPrag poly_id prag@(SpecSig _ fun_name hs_tys inl) ; wrap <- tcSpecWrapper (FunSigCtxt name (lhsSigTypeContextSpan hs_ty)) poly_ty spec_ty ; return (SpecPrag poly_id wrap inl) } -tcSpecPrag poly_id (SpecSigE nm bndrs spec_e inl) +tcSpecPrag poly_id (SpecSigE nm rule_bndrs spec_e inl) = do { -- Typecheck the expression, spec_e, capturing its constraints let skol_info_anon = SpecESkol nm ; traceTc "tcSpecPrag: specSigE1" (ppr nm $$ ppr spec_e) ; skol_info <- mkSkolemInfo skol_info_anon - ; (rhs_tclvl, wanted, (tv_bndrs, id_bndrs, spec_e')) + ; (rhs_tclvl, wanted, (rule_bndrs', spec_e')) <- pushLevelAndCaptureConstraints $ - do { (tv_bndrs, id_bndrs) <- tcRuleBndrs skol_info bndrs - ; tcExtendNameTyVarEnv [(tyVarName tv, tv) | tv <- tv_bndrs] $ - tcExtendIdEnv id_bndrs $ - do { (L loc spec_e', _rho) <- tcInferRho spec_e - ; return (tv_bndrs, id_bndrs, L loc spec_e') } } + tcRuleBndrs skol_info rule_bndrs $ + do { (spec_e', _rho) <- tcInferRho spec_e + ; return spec_e' } + ; let tv_bndrs = filter isTyVar rule_bndrs' -- Simplify the constraints ; ev_binds_var <- newTcEvBinds @@ -958,7 +960,7 @@ tcSpecPrag poly_id (SpecSigE nm bndrs spec_e inl) runTcSWithEvBinds ev_binds_var $ solveWanteds wanted - -- Quantifiy over the the constraints + -- Quantify over the the constraints ; qevs <- mapM newEvVar $ ctsPreds $ approximateWC False wanted @@ -969,8 +971,7 @@ tcSpecPrag poly_id (SpecSigE nm bndrs spec_e inl) ; traceTc "tcSpecPrag:SpecSigE" $ vcat [ text "nm:" <+> ppr nm - , text "tv_bndrs:" <+> ppr tv_bndrs - , text "id_bndrs:" <+> ppr id_bndrs + , text "rule_bndrs':" <+> ppr rule_bndrs' , text "qevs:" <+> ppr qevs , text "spec_e:" <+> ppr spec_e' , text "inl:" <+> ppr inl ] @@ -978,7 +979,8 @@ tcSpecPrag poly_id (SpecSigE nm bndrs spec_e inl) ; let lhs_call = mkLHsWrap (WpLet (TcEvBinds ev_binds_var)) spec_e' ; return [SpecPragE { spe_fn_nm = nm , spe_fn_id = poly_id - , spe_bndrs = tv_bndrs ++ qevs ++ id_bndrs + , spe_bndrs = qevs ++ rule_bndrs' -- Dependency order + -- does not matter , spe_call = lhs_call , spe_inl = inl }] } @@ -1066,7 +1068,7 @@ That seems enough for now. Note [Typechecking rules] ~~~~~~~~~~~~~~~~~~~~~~~~~ -We *infer* the typ of the LHS, and use that type to *check* the type of +We *infer* the type of the LHS, and use that type to *check* the type of the RHS. That means that higher-rank rules work reasonably well. Here's an example (test simplCore/should_compile/rule2.hs) produced by Roman: @@ -1149,8 +1151,7 @@ tcRule (HsRule { rd_ext = ext ; (tc_lvl, stuff) <- pushTcLevelM $ generateRuleConstraints skol_info bndrs lhs rhs - ; let (id_bndrs, lhs', lhs_wanted - , rhs', rhs_wanted, rule_ty) = stuff + ; let ((bndrs', (lhs', rule_ty, rhs', rhs_wanted)), lhs_wanted) = stuff ; traceTc "tcRule 1" (vcat [ pprFullRuleName (snd ext) rname , ppr lhs_wanted @@ -1172,7 +1173,7 @@ tcRule (HsRule { rd_ext = ext -- the LHS, lest they otherwise get defaulted to Any; but we do that -- during zonking (see GHC.Tc.Zonk.Type.zonkRule) - ; let tpl_ids = lhs_evs ++ id_bndrs + ; let tpl_ids = lhs_evs ++ filter isId bndrs' -- See Note [Re-quantify type variables in rules] ; dvs <- candidateQTyVarsOfTypes (rule_ty : map idType tpl_ids) @@ -1206,80 +1207,70 @@ tcRule (HsRule { rd_ext = ext ; return $ Just $ HsRule { rd_ext = ext , rd_name = rname , rd_act = act - , rd_bndrs = mkTcRuleBndrs bndrs (qtkvs ++ tpl_ids) + , rd_bndrs = bndrs { rb_ext = qtkvs ++ tpl_ids } , rd_lhs = mkHsDictLet lhs_binds lhs' , rd_rhs = mkHsDictLet rhs_binds rhs' } } - where - mkTcRuleBndrs (RuleBndrs { rb_tyvs = tyvs }) vars - = RuleBndrs { rb_ext = noAnn - , rb_tyvs = tyvs -- preserved for ppr-ing - , rb_tmvs = map (noLocA . RuleBndr noAnn . noLocA) vars } - mkTcRuleBndrs (XRuleBndrs {}) _ = panic "mkTCRuleBndrs" generateRuleConstraints :: SkolemInfo -> RuleBndrs GhcRn -> LHsExpr GhcRn -> LHsExpr GhcRn - -> TcM ( [TcId] - , LHsExpr GhcTc, WantedConstraints - , LHsExpr GhcTc, WantedConstraints - , TcType ) + -> TcM ( ( [Var] + , ( LHsExpr GhcTc, TcType + , LHsExpr GhcTc, WantedConstraints) ) + , WantedConstraints ) generateRuleConstraints skol_info bndrs lhs rhs - = do { ((tv_bndrs, id_bndrs), bndr_wanted) <- captureConstraints $ - tcRuleBndrs skol_info bndrs - -- bndr_wanted constraints can include wildcard hole - -- constraints, which we should not forget about. - -- It may mention the skolem type variables bound by - -- the RULE. c.f. #10072 - ; tcExtendNameTyVarEnv [(tyVarName tv, tv) | tv <- tv_bndrs] $ - tcExtendIdEnv id_bndrs $ - do { -- See Note [Solve order for RULES] - ((lhs', rule_ty), lhs_wanted) <- captureConstraints (tcInferRho lhs) - ; (rhs', rhs_wanted) <- captureConstraints $ - tcCheckMonoExpr rhs rule_ty - ; let all_lhs_wanted = bndr_wanted `andWC` lhs_wanted - ; return (id_bndrs, lhs', all_lhs_wanted, rhs', rhs_wanted, rule_ty) } } + = captureConstraints $ + tcRuleBndrs skol_info bndrs $ + do { (lhs', rule_ty) <- tcInferRho lhs + ; (rhs', rhs_wanted) <- captureConstraints $ + tcCheckMonoExpr rhs rule_ty + ; return (lhs', rule_ty, rhs', rhs_wanted) } + +tcRuleBndrs :: SkolemInfo -> RuleBndrs GhcRn -> TcM a -> TcM ([Var], a) +tcRuleBndrs skol_info (RuleBndrs { rb_tyvs = mb_tv_bndrs, rb_tmvs = tm_bndrs }) thing_inside + | Just tv_bndrs <- mb_tv_bndrs + = do { (bndrs1, (bndrs2, res)) <- go_tvs tv_bndrs $ + go_tms tm_bndrs $ + thing_inside + ; return (binderVars bndrs1 ++ bndrs2, res) } + | otherwise + = go_tms tm_bndrs thing_inside + + where + -------------- + go_tvs tvs thing_inside = bindExplicitTKBndrs_Skol skol_info tvs thing_inside + + -------------- + go_tms [] thing_inside + = do { res <- thing_inside; return ([], res) } + go_tms (L _ (RuleBndr _ (L _ name)) : rule_bndrs) thing_inside + = do { ty <- newOpenFlexiTyVarTy + ; let bndr_id = mkLocalId name ManyTy ty + ; (bndrs, res) <- tcExtendIdEnv [bndr_id] $ + go_tms rule_bndrs thing_inside + ; return (bndr_id : bndrs, res) } + + go_tms (L _ (RuleBndrSig _ (L _ name) rn_ty) : rule_bndrs) thing_inside + -- e.g x :: a->a + -- The tyvar 'a' is brought into scope first, just as if you'd written + -- a::*, x :: a->a + -- If there's an explicit forall, the renamer would have already reported an + -- error for each out-of-scope type variable used + = do { (_ , tv_prs, id_ty) <- tcRuleBndrSig name skol_info rn_ty + ; let bndr_id = mkLocalId name ManyTy id_ty + -- See Note [Typechecking pattern signature binders] in GHC.Tc.Gen.HsType + + -- The type variables scope over subsequent bindings; yuk + ; (bndrs, res) <- tcExtendNameTyVarEnv tv_prs $ + tcExtendIdEnv [bndr_id] $ + go_tms rule_bndrs thing_inside + ; return (map snd tv_prs ++ bndr_id : bndrs, res) } ruleCtxt :: FastString -> SDoc ruleCtxt name = text "When checking the rewrite rule" <+> doubleQuotes (ftext name) - --- See Note [TcLevel in type checking rules] -tcRuleBndrs :: SkolemInfo -> RuleBndrs GhcRn - -> TcM ([TcTyVar], [Id]) -tcRuleBndrs skol_info (RuleBndrs { rb_tyvs = mb_tv_bndrs, rb_tmvs = tmvs }) - | Just tv_bndrs <- mb_tv_bndrs - = do { (tybndrs1,(tys2,tms)) <- bindExplicitTKBndrs_Skol skol_info tv_bndrs $ - tcRuleTmBndrs skol_info tmvs - ; let tys1 = binderVars tybndrs1 - ; return (tys1 ++ tys2, tms) } - - | otherwise - = tcRuleTmBndrs skol_info tmvs - --- See Note [TcLevel in type checking rules] -tcRuleTmBndrs :: SkolemInfo -> [LRuleBndr GhcRn] -> TcM ([TcTyVar],[Id]) -tcRuleTmBndrs _ [] = return ([],[]) -tcRuleTmBndrs skol_info (L _ (RuleBndr _ (L _ name)) : rule_bndrs) - = do { ty <- newOpenFlexiTyVarTy - ; (tyvars, tmvars) <- tcRuleTmBndrs skol_info rule_bndrs - ; return (tyvars, mkLocalId name ManyTy ty : tmvars) } -tcRuleTmBndrs skol_info (L _ (RuleBndrSig _ (L _ name) rn_ty) : rule_bndrs) --- e.g x :: a->a --- The tyvar 'a' is brought into scope first, just as if you'd written --- a::*, x :: a->a --- If there's an explicit forall, the renamer would have already reported an --- error for each out-of-scope type variable used - = do { (_ , tvs, id_ty) <- tcRuleBndrSig name skol_info rn_ty - ; let id = mkLocalId name ManyTy id_ty - -- See Note [Typechecking pattern signature binders] in GHC.Tc.Gen.HsType - - -- The type variables scope over subsequent bindings; yuk - ; (tyvars, tmvars) <- tcExtendNameTyVarEnv tvs $ - tcRuleTmBndrs skol_info rule_bndrs - ; return (map snd tvs ++ tyvars, id : tmvars) } - {- ********************************************************************************* * * ===================================== compiler/GHC/Tc/TyCl/Instance.hs ===================================== @@ -2009,9 +2009,9 @@ tcMethodBody skol_info clas tyvars dfun_ev_vars inst_tys -- Example: -- instance C [a] where -- op :: forall b. Ord b => b -> a -> a - -- {-# SPECIALISE b @Int #-} - -- The speclalisation is for the `op` for this instance decl, not - -- for the gloabal selector-id, of course. + -- {-# SPECIALISE op @Int #-} + -- The specialisation is for the `op` for this instance decl, not + -- for the global selector-id, of course. tcSpecPrags global_meth_id prags ; let specs = mk_meth_spec_prags global_meth_id spec_inst_prags spec_prags ===================================== compiler/GHC/Tc/Zonk/Type.hs ===================================== @@ -1696,26 +1696,19 @@ zonkRule rule@(HsRule { rd_bndrs = bndrs , rd_rhs = new_rhs } } } where add_tvs :: [TyVar] -> RuleBndrs GhcTc -> RuleBndrs GhcTc - add_tvs tvs rbs@(RuleBndrs { rb_tmvs = bndrs }) - = rbs { rb_tmvs = map (noLocA . RuleBndr noAnn . noLocA) tvs ++ bndrs } + add_tvs tvs rbs@(RuleBndrs { rb_ext = bndrs }) = rbs { rb_ext = tvs ++ bndrs } zonkRuleBndrs :: RuleBndrs GhcTc -> (RuleBndrs GhcTc -> ZonkTcM a) -> ZonkTcM a -zonkRuleBndrs (RuleBndrs { rb_tyvs = tyvs, rb_tmvs = tmvs }) thing_inside - = runZonkBndrT (traverse zonk_tm_bndr tmvs) $ \ new_tmvs -> - thing_inside (RuleBndrs { rb_ext = noAnn, rb_tyvs = tyvs, rb_tmvs = new_tmvs }) +zonkRuleBndrs rb@(RuleBndrs { rb_ext = bndrs }) thing_inside + = runZonkBndrT (traverse zonk_it bndrs) $ \ new_bndrs -> + thing_inside (rb { rb_ext = new_bndrs }) where - zonk_tm_bndr :: LRuleBndr GhcTc -> ZonkBndrTcM (LRuleBndr GhcTc) - zonk_tm_bndr (L l (RuleBndr x (L loc v))) - = do { v' <- zonk_it v - ; return (L l (RuleBndr x (L loc v'))) } - zonk_tm_bndr (L _ (RuleBndrSig {})) = panic "zonk_tm_bndr RuleBndrSig" - - zonk_it v - | isId v = zonkIdBndrX v - | otherwise = assert (isImmutableTyVar v) $ - zonkTyBndrX v - -- We may need to go inside the kind of v and zonk there! + zonk_it v + | isId v = zonkIdBndrX v + | otherwise = assert (isImmutableTyVar v) $ + zonkTyBndrX v + -- We may need to go inside the kind of v and zonk there! {- Note [Free tyvars on rule LHS] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1739,7 +1732,7 @@ over it. Here is how: * Here (ref :: TcRef [TyVar]) collects the type variables thus skolemised; again see `commitFlexi`. -* When zonking af RULE, in `zonkRule` we +* When zonking a RULE, in `zonkRule` we - make a fresh ref-cell to collect the skolemised type variables, - zonk the binders and LHS with ze_flexi = SkolemiseFlexi ref - read the ref-cell to get all the skolemised TyVars @@ -1750,7 +1743,7 @@ All this applies for SPECIALISE pragmas too. Wrinkles: (FTV1) We just add the new tyvars to the front of the binder-list, but - that make make the list not be in dependency order. Example (T12925): + that may make the list not be in dependency order. Example (T12925): the existing list is [k:Type, b:k], and we add (a:k) to the front. Also we just collect the new skolemised type variables in any old order, so they may not be ordered with respect to each other. ===================================== compiler/Language/Haskell/Syntax/Binds.hs ===================================== @@ -474,12 +474,12 @@ isCompleteMatchSig _ = False ********************************************************************* -} data RuleBndrs pass = RuleBndrs - { rb_ext :: (XCRuleBndrs pass) + { rb_ext :: XCRuleBndrs pass + -- After typechecking rb_ext contains all the quantified tyvars , rb_tyvs :: Maybe [LHsTyVarBndr () (NoGhcTc pass)] - -- ^ Forall'd type vars - , rb_tmvs :: [LRuleBndr pass] - -- ^ Forall'd term vars, before typechecking; - -- after typechecking this includes all forall'd vars + -- ^ Forall'd type vars; preserved for pretty-printing + , rb_tmvs :: [LRuleBndr (NoGhcTc pass)] + -- ^ Forall'd term vars; preserved for pretty-printing } | XRuleBndrs !(XXRuleBndrs pass) ===================================== compiler/Language/Haskell/Syntax/Extension.hs ===================================== @@ -365,7 +365,7 @@ type family XHsRule x type family XXRuleDecl x -- ------------------------------------- --- RuleBndsr type families +-- RuleBndrs type families type family XCRuleBndrs x type family XXRuleBndrs x View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3a55a7468d01e336e5f7b69d918bd5232bc8cf7f...9e47b2bdf15b53876f467753720df901c3455864 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3a55a7468d01e336e5f7b69d918bd5232bc8cf7f...9e47b2bdf15b53876f467753720df901c3455864 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 16:33:08 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 18 Dec 2024 11:33:08 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 6 commits: testsuite: Use math.inf instead of division-by-zero Message-ID: <6762f944d21d4_1f5002302a28765d5@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: e86b1b20 by Ben Gamari at 2024-12-17T13:51:39-05:00 testsuite: Use math.inf instead of division-by-zero This both more directly captures the intent and also fixes #25580. - - - - - 430d965a by Ben Gamari at 2024-12-17T13:52:15-05:00 rts: Fix incorrect format specifiers in era profiling Fixes #25581. - - - - - 8b63c3d3 by Andreas Klebinger at 2024-12-18T11:32:58-05:00 Document `-prof` and non `-prof` code being incompatible. Fixes #25518. - - - - - 66e50753 by Zubin Duggal at 2024-12-18T11:32:59-05:00 ghcup metadata: output metadata fragment in CI (cherry picked from commit 52b58a660e735b20961d792d8fa9267f01247a50) - - - - - 92afc9b2 by Zubin Duggal at 2024-12-18T11:32:59-05:00 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore (cherry picked from commit dc86785eb43afd1bd292287c064fb5ad94fe8c7f) - - - - - cb7a5062 by Zubin Duggal at 2024-12-18T11:32:59-05:00 ghcup metadata: still use centos for redhat <9 - - - - - 5 changed files: - .gitlab-ci.yml - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - docs/users_guide/profiling.rst - rts/ProfHeap.c - testsuite/driver/perf_notes.py Changes: ===================================== .gitlab-ci.yml ===================================== @@ -1235,6 +1235,7 @@ ghcup-metadata-release: # No explicit needs for release pipeline as we assume we need everything and everything will pass. extends: .ghcup-metadata script: + - nix shell -f .gitlab/rel_eng -c ghcup-metadata --release-mode --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" --fragment - nix shell -f .gitlab/rel_eng -c ghcup-metadata --release-mode --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" > "metadata_test.yaml" rules: - if: '$RELEASE_JOB == "yes"' ===================================== .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py ===================================== @@ -243,7 +243,9 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map): , "unknown_versioning" : centos7 } , "Linux_Fedora" : { ">= 33": fedora33 , "unknown_versioning": centos7 } - , "Linux_RedHat" : { "unknown_versioning": centos7 } + , "Linux_RedHat" : { "< 9": centos7 + , ">= 9": fedora33 + , "unknown_versioning": fedora33 } , "Linux_UnknownLinux" : { "unknown_versioning": rocky8 } , "Darwin" : { "unknown_versioning" : darwin_x86 } , "Windows" : { "unknown_versioning" : windows } ===================================== docs/users_guide/profiling.rst ===================================== @@ -193,6 +193,13 @@ call are aggregated into the caller [2]_. Inserting cost centres by hand ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. pragma:: SCC + + :where: any expression + + Instructs GHC to track runtime cost associated with the expression + when profiling is enabled. + Cost centres are just program annotations. When you say ``-fprof-auto`` to the compiler, it automatically inserts a cost centre annotation around every binding not marked INLINE in your program, but you are @@ -361,12 +368,17 @@ Compiler options for profiling :category: To make use of the profiling system *all* modules must be compiled - and linked with the :ghc-flag:`-prof` option. Any ``SCC`` annotations you've + and linked with the :ghc-flag:`-prof` option. Any :pragma:`SCC` annotations you've put in your source will spring to life. - Without a :ghc-flag:`-prof` option, your ``SCC``\ s are ignored; so you can + Without a :ghc-flag:`-prof` option, :pragma:`SCC` annotations are ignored; so you can compile ``SCC``-laden code without changing it. + Since :ghc-flag:`-prof` affects not just code generation but also memory layout at runtime + code compiled with and without :ghc-flag:`-prof` is fundamentally incompatible. + To get a functional executable a project has to be built + either fully with or fully without :ghc-flag:`-prof`. + .. ghc-flag:: -fno-prof-count-entries :shortdesc: Do not collect entry counts :type: dynamic ===================================== rts/ProfHeap.c ===================================== @@ -958,9 +958,9 @@ dumpCensus( Census *census ) count * sizeof(W_)); break; case HEAP_BY_ERA: - fprintf(hp_file, "%lu", (StgWord)ctr->identity); + fprintf(hp_file, "%" FMT_Word, (StgWord)ctr->identity); char str_era[100]; - sprintf(str_era, "%lu", (StgWord)ctr->identity); + sprintf(str_era, "%" FMT_Word, (StgWord)ctr->identity); traceHeapProfSampleString(0, str_era, count * sizeof(W_)); break; case HEAP_BY_MOD: ===================================== testsuite/driver/perf_notes.py ===================================== @@ -21,6 +21,7 @@ import sys from collections import namedtuple, defaultdict from math import ceil, trunc +import math from testutil import passed, failBecause, testing_metrics, print_table from term_color import Color, colored @@ -140,7 +141,7 @@ class MetricAcceptanceWindow: class AlwaysAccept(MetricAcceptanceWindow): def get_bounds(self, baseline: float) -> Tuple[float, float]: - return (-1/0, +1/0) + return (-math.inf, +math.inf) def describe(self) -> str: raise NotImplemented View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/06d48131dd77e38675071ad46bc4f5e579a56681...cb7a506237d4480c7403a2c45ee3b9f176b459fc -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/06d48131dd77e38675071ad46bc4f5e579a56681...cb7a506237d4480c7403a2c45ee3b9f176b459fc You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 22:16:58 2024 From: gitlab at gitlab.haskell.org (Cheng Shao (@TerrorJack)) Date: Wed, 18 Dec 2024 17:16:58 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/ghc-9.12 Message-ID: <676349daeb2e6_302a54bce08117e1@gitlab.mail> Cheng Shao pushed new branch wip/ghc-9.12 at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/ghc-9.12 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Wed Dec 18 22:18:22 2024 From: gitlab at gitlab.haskell.org (Cheng Shao (@TerrorJack)) Date: Wed, 18 Dec 2024 17:18:22 -0500 Subject: [Git][ghc/ghc] Deleted branch wip/ghc-9.12 Message-ID: <67634a2eda518_302a54bcd90119f@gitlab.mail> Cheng Shao deleted branch wip/ghc-9.12 at Glasgow Haskell Compiler / GHC -- You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 19 04:43:37 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 18 Dec 2024 23:43:37 -0500 Subject: [Git][ghc/ghc][master] Document `-prof` and non `-prof` code being incompatible. Message-ID: <6763a479a9b96_302a5428ba16c479f8@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 267098ad by Andreas Klebinger at 2024-12-18T23:43:13-05:00 Document `-prof` and non `-prof` code being incompatible. Fixes #25518. - - - - - 1 changed file: - docs/users_guide/profiling.rst Changes: ===================================== docs/users_guide/profiling.rst ===================================== @@ -193,6 +193,13 @@ call are aggregated into the caller [2]_. Inserting cost centres by hand ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. pragma:: SCC + + :where: any expression + + Instructs GHC to track runtime cost associated with the expression + when profiling is enabled. + Cost centres are just program annotations. When you say ``-fprof-auto`` to the compiler, it automatically inserts a cost centre annotation around every binding not marked INLINE in your program, but you are @@ -361,12 +368,17 @@ Compiler options for profiling :category: To make use of the profiling system *all* modules must be compiled - and linked with the :ghc-flag:`-prof` option. Any ``SCC`` annotations you've + and linked with the :ghc-flag:`-prof` option. Any :pragma:`SCC` annotations you've put in your source will spring to life. - Without a :ghc-flag:`-prof` option, your ``SCC``\ s are ignored; so you can + Without a :ghc-flag:`-prof` option, :pragma:`SCC` annotations are ignored; so you can compile ``SCC``-laden code without changing it. + Since :ghc-flag:`-prof` affects not just code generation but also memory layout at runtime + code compiled with and without :ghc-flag:`-prof` is fundamentally incompatible. + To get a functional executable a project has to be built + either fully with or fully without :ghc-flag:`-prof`. + .. ghc-flag:: -fno-prof-count-entries :shortdesc: Do not collect entry counts :type: dynamic View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/267098ad7ff183ae483555571f6f8b1c751456ba -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/267098ad7ff183ae483555571f6f8b1c751456ba You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 19 04:44:14 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Wed, 18 Dec 2024 23:44:14 -0500 Subject: [Git][ghc/ghc][master] 3 commits: ghcup metadata: output metadata fragment in CI Message-ID: <6763a49e87bef_302a542bd7a0c50797@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 04433916 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: output metadata fragment in CI (cherry picked from commit 52b58a660e735b20961d792d8fa9267f01247a50) - - - - - 7c78804e by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore (cherry picked from commit dc86785eb43afd1bd292287c064fb5ad94fe8c7f) - - - - - 1d72cfb2 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: still use centos for redhat <9 - - - - - 2 changed files: - .gitlab-ci.yml - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py Changes: ===================================== .gitlab-ci.yml ===================================== @@ -1235,6 +1235,7 @@ ghcup-metadata-release: # No explicit needs for release pipeline as we assume we need everything and everything will pass. extends: .ghcup-metadata script: + - nix shell -f .gitlab/rel_eng -c ghcup-metadata --release-mode --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" --fragment - nix shell -f .gitlab/rel_eng -c ghcup-metadata --release-mode --metadata ghcup-0.0.7.yaml --date="$(date -d $CI_PIPELINE_CREATED_AT +%Y-%m-%d)" --pipeline-id="$CI_PIPELINE_ID" --version="$ProjectVersion" > "metadata_test.yaml" rules: - if: '$RELEASE_JOB == "yes"' ===================================== .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py ===================================== @@ -243,7 +243,9 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map): , "unknown_versioning" : centos7 } , "Linux_Fedora" : { ">= 33": fedora33 , "unknown_versioning": centos7 } - , "Linux_RedHat" : { "unknown_versioning": centos7 } + , "Linux_RedHat" : { "< 9": centos7 + , ">= 9": fedora33 + , "unknown_versioning": fedora33 } , "Linux_UnknownLinux" : { "unknown_versioning": rocky8 } , "Darwin" : { "unknown_versioning" : darwin_x86 } , "Windows" : { "unknown_versioning" : windows } View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/267098ad7ff183ae483555571f6f8b1c751456ba...1d72cfb2c1054bc8a399855d5c68443c969d2f66 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/267098ad7ff183ae483555571f6f8b1c751456ba...1d72cfb2c1054bc8a399855d5c68443c969d2f66 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 19 13:48:32 2024 From: gitlab at gitlab.haskell.org (Sjoerd Visscher (@trac-sjoerd_visscher)) Date: Thu, 19 Dec 2024 08:48:32 -0500 Subject: [Git][ghc/ghc][wip/T18462] Multiplicity annotation on records Message-ID: <67642430de56_d620a5fcb20651cc@gitlab.mail> Sjoerd Visscher pushed to branch wip/T18462 at Glasgow Haskell Compiler / GHC Commits: cab98bfb by Sjoerd Visscher at 2024-12-19T14:48:25+01:00 Multiplicity annotation on records - - - - - 30 changed files: - compiler/GHC/Hs/Decls.hs - compiler/GHC/Hs/Expr.hs - compiler/GHC/Hs/Instances.hs - compiler/GHC/Hs/Type.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Iface/Ext/Ast.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/PostProcess.hs - compiler/GHC/Parser/PostProcess/Haddock.hs - compiler/GHC/Rename/Expr.hs - compiler/GHC/Rename/HsType.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Tc/Gen/App.hs - compiler/GHC/Tc/Gen/HsType.hs - compiler/GHC/Tc/Gen/Sig.hs - compiler/GHC/Tc/TyCl.hs - compiler/GHC/ThToHs.hs - compiler/Language/Haskell/Syntax/Decls.hs - compiler/Language/Haskell/Syntax/Type.hs - docs/users_guide/9.14.1-notes.rst - docs/users_guide/exts/linear_types.rst - testsuite/tests/ghc-api/exactprint/Test20239.stderr - 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/linear/should_compile/NonLinearRecord.hs - testsuite/tests/linear/should_compile/all.T - + testsuite/tests/linear/should_fail/LinearRecFieldMany.hs - + testsuite/tests/linear/should_fail/LinearRecFieldMany.stderr - testsuite/tests/linear/should_fail/all.T The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cab98bfba7ce8eeb1c0854a7ed118bf3a03ad107 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cab98bfba7ce8eeb1c0854a7ed118bf3a03ad107 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 19 15:11:28 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Thu, 19 Dec 2024 10:11:28 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports] 3 commits: Improve pattern to type pattern transformation (23739) Message-ID: <676437a015d4a_12f3f5bec445934d@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports at Glasgow Haskell Compiler / GHC Commits: 51d3b2d0 by Andrei Borzenkov at 2024-12-19T15:44:28+01:00 Improve pattern to type pattern transformation (23739) `pat_to_type_pat` function now can handle more patterns: - TuplePat - ListPat - LitPat - NPat - ConPat Allowing these new constructors in type patterns significantly increases possible shapes of type patterns without `type` keyword. This patch also changes how lookups in `lookupOccRnConstr` are performed, because we need to fall back into types when we didn't find a constructor on data level to perform `ConPat` to type transformation properly. (cherry picked from commit 2c0f8ddbdf351ed84395afa04a2654a7cbe2ad35) - - - - - 164133ec by Andreas Klebinger at 2024-12-19T15:50:05+01:00 Removed a test whose change was not backported (T23764). - - - - - 4e89c144 by Sylvain Henry at 2024-12-19T15:51:07+01:00 Type-check default declarations before deriving clauses (#24566) See added Note and #24566. Default declarations must be type-checked before deriving clauses. (cherry picked from commit 52072f8e2121fe49a8367027efa3d8db32325f84) - - - - - 19 changed files: - compiler/GHC/Hs/Type.hs - compiler/GHC/Rename/Env.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Tc/Gen/App.hs - compiler/GHC/Tc/Gen/Head.hs - compiler/GHC/Tc/Gen/HsType.hs - compiler/GHC/Tc/Gen/Pat.hs - compiler/GHC/Tc/Module.hs - compiler/GHC/Tc/Utils/Env.hs - libraries/ghc-internal/src/GHC/Internal/Maybe.hs - testsuite/tests/rename/should_fail/T19843c.stderr - testsuite/tests/type-data/should_fail/TDPattern.stderr - testsuite/tests/typecheck/should_compile/Makefile - + testsuite/tests/typecheck/should_compile/T23739a.hs - + testsuite/tests/typecheck/should_compile/T24566.hs - testsuite/tests/typecheck/should_compile/all.T - + testsuite/tests/typecheck/should_fail/T23739b.hs - + testsuite/tests/typecheck/should_fail/T23739b.stderr - testsuite/tests/typecheck/should_fail/all.T Changes: ===================================== compiler/GHC/Hs/Type.hs ===================================== @@ -38,6 +38,7 @@ module GHC.Hs.Type ( HsWildCardBndrs(..), HsPatSigType(..), HsPSRn(..), HsTyPat(..), HsTyPatRn(..), + HsTyPatRnBuilder(..), tpBuilderExplicitTV, tpBuilderPatSig, buildHsTyPatRn, builderFromHsTyPatRn, HsSigType(..), LHsSigType, LHsSigWcType, LHsWcType, HsTupleSort(..), HsContext, LHsContext, fromMaybeContext, @@ -128,6 +129,7 @@ import Data.Maybe import Data.Data (Data) import qualified Data.Semigroup as S +import GHC.Data.Bag {- ************************************************************************ @@ -245,6 +247,51 @@ data HsTyPatRn = HsTPRn } deriving Data +-- | A variant of HsTyPatRn that uses Bags for efficient concatenation. +-- See Note [Implicit and explicit type variable binders] in GHC.Rename.Pat +data HsTyPatRnBuilder = + HsTPRnB { + hstpb_nwcs :: Bag Name, + hstpb_imp_tvs :: Bag Name, + hstpb_exp_tvs :: Bag Name + } + +tpBuilderExplicitTV :: Name -> HsTyPatRnBuilder +tpBuilderExplicitTV name = mempty {hstpb_exp_tvs = unitBag name} + +tpBuilderPatSig :: HsPSRn -> HsTyPatRnBuilder +tpBuilderPatSig HsPSRn {hsps_nwcs, hsps_imp_tvs} = + mempty { + hstpb_nwcs = listToBag hsps_nwcs, + hstpb_imp_tvs = listToBag hsps_imp_tvs + } + +instance Semigroup HsTyPatRnBuilder where + HsTPRnB nwcs1 imp_tvs1 exptvs1 <> HsTPRnB nwcs2 imp_tvs2 exptvs2 = + HsTPRnB + (nwcs1 `unionBags` nwcs2) + (imp_tvs1 `unionBags` imp_tvs2) + (exptvs1 `unionBags` exptvs2) + +instance Monoid HsTyPatRnBuilder where + mempty = HsTPRnB emptyBag emptyBag emptyBag + +buildHsTyPatRn :: HsTyPatRnBuilder -> HsTyPatRn +buildHsTyPatRn HsTPRnB {hstpb_nwcs, hstpb_imp_tvs, hstpb_exp_tvs} = + HsTPRn { + hstp_nwcs = bagToList hstpb_nwcs, + hstp_imp_tvs = bagToList hstpb_imp_tvs, + hstp_exp_tvs = bagToList hstpb_exp_tvs + } + +builderFromHsTyPatRn :: HsTyPatRn -> HsTyPatRnBuilder +builderFromHsTyPatRn HsTPRn{hstp_nwcs, hstp_imp_tvs, hstp_exp_tvs} = + HsTPRnB { + hstpb_nwcs = listToBag hstp_nwcs, + hstpb_imp_tvs = listToBag hstp_imp_tvs, + hstpb_exp_tvs = listToBag hstp_exp_tvs + } + type instance XXHsPatSigType (GhcPass _) = DataConCantHappen type instance XXHsTyPat (GhcPass _) = DataConCantHappen ===================================== compiler/GHC/Rename/Env.hs ===================================== @@ -1031,8 +1031,32 @@ lookupOccRn = lookupOccRn' WL_Anything -- lookupOccRnConstr looks up an occurrence of a RdrName and displays -- constructors and pattern synonyms as suggestions if it is not in scope +-- +-- There is a fallback to the type level, when the first lookup fails. +-- This is required to implement a pat-to-type transformation +-- (See Note [Pattern to type (P2T) conversion] in GHC.Tc.Gen.Pat) +-- Consider this example: +-- +-- data VisProxy a where VP :: forall a -> VisProxy a +-- +-- f :: VisProxy Int -> () +-- f (VP Int) = () +-- +-- Here `Int` is actually a type, but it stays on position where +-- we expect a data constructor. +-- +-- In all other cases we just use this additional lookup for better +-- error messaging (See Note [Promotion]). lookupOccRnConstr :: RdrName -> RnM Name -lookupOccRnConstr = lookupOccRn' WL_Constructor +lookupOccRnConstr rdr_name + = do { mb_gre <- lookupOccRn_maybe rdr_name + ; case mb_gre of + Just gre -> return $ greName gre + Nothing -> do + { mb_ty_gre <- lookup_promoted rdr_name + ; case mb_ty_gre of + Just gre -> return $ greName gre + Nothing -> reportUnboundName' WL_Constructor rdr_name} } -- lookupOccRnRecField looks up an occurrence of a RdrName and displays -- record fields as suggestions if it is not in scope ===================================== compiler/GHC/Rename/Pat.hs ===================================== @@ -71,7 +71,6 @@ import GHC.Types.SourceText import GHC.Utils.Misc import GHC.Data.FastString ( uniqCompareFS ) import GHC.Data.List.SetOps( removeDups ) -import GHC.Data.Bag ( Bag, unitBag, unionBags, emptyBag, listToBag, bagToList ) import GHC.Utils.Outputable import GHC.Utils.Panic.Plain import GHC.Types.SrcLoc @@ -89,7 +88,6 @@ import Data.Functor.Identity ( Identity (..) ) import qualified Data.List.NonEmpty as NE import Data.Maybe import Data.Ratio -import qualified Data.Semigroup as S import Control.Monad.Trans.Writer.CPS import Control.Monad.Trans.Class import Control.Monad.Trans.Reader @@ -1242,43 +1240,6 @@ lookupTypeOccTPRnM rdr_name = liftRnFV $ do name <- lookupTypeOccRn rdr_name pure (name, unitFV name) --- | A variant of HsTyPatRn that uses Bags for efficient concatenation. --- See Note [Implicit and explicit type variable binders] -data HsTyPatRnBuilder = - HsTPRnB { - hstpb_nwcs :: Bag Name, - hstpb_imp_tvs :: Bag Name, - hstpb_exp_tvs :: Bag Name - } - -tpb_exp_tv :: Name -> HsTyPatRnBuilder -tpb_exp_tv name = mempty {hstpb_exp_tvs = unitBag name} - -tpb_hsps :: HsPSRn -> HsTyPatRnBuilder -tpb_hsps HsPSRn {hsps_nwcs, hsps_imp_tvs} = - mempty { - hstpb_nwcs = listToBag hsps_nwcs, - hstpb_imp_tvs = listToBag hsps_imp_tvs - } - -instance Semigroup HsTyPatRnBuilder where - HsTPRnB nwcs1 imp_tvs1 exptvs1 <> HsTPRnB nwcs2 imp_tvs2 exptvs2 = - HsTPRnB - (nwcs1 `unionBags` nwcs2) - (imp_tvs1 `unionBags` imp_tvs2) - (exptvs1 `unionBags` exptvs2) - -instance Monoid HsTyPatRnBuilder where - mempty = HsTPRnB emptyBag emptyBag emptyBag - -buildHsTyPatRn :: HsTyPatRnBuilder -> HsTyPatRn -buildHsTyPatRn HsTPRnB {hstpb_nwcs, hstpb_imp_tvs, hstpb_exp_tvs} = - HsTPRn { - hstp_nwcs = bagToList hstpb_nwcs, - hstp_imp_tvs = bagToList hstpb_imp_tvs, - hstp_exp_tvs = bagToList hstpb_exp_tvs - } - rn_lty_pat :: LHsType GhcPs -> TPRnM (LHsType GhcRn) rn_lty_pat (L l hs_ty) = do hs_ty' <- rn_ty_pat hs_ty @@ -1292,7 +1253,7 @@ rn_ty_pat_var lrdr@(L l rdr) = do then do -- binder name <- liftTPRnCps $ newPatName (LamMk True) lrdr - tellTPB (tpb_exp_tv name) + tellTPB (tpBuilderExplicitTV name) pure (L l name) else do -- usage @@ -1413,7 +1374,7 @@ rn_ty_pat (HsKindSig an ty ki) = do ~(HsPS hsps ki') <- liftRnWithCont $ rnHsPatSigKind AlwaysBind ctxt (HsPS noAnn ki) ty' <- rn_lty_pat ty - tellTPB (tpb_hsps hsps) + tellTPB (tpBuilderPatSig hsps) pure (HsKindSig an ty' ki') rn_ty_pat (HsSpliceTy _ splice) = do ===================================== compiler/GHC/Tc/Gen/App.hs ===================================== @@ -56,7 +56,6 @@ import GHC.Types.Name.Env import GHC.Types.Name.Reader import GHC.Types.SrcLoc import GHC.Types.Var.Env ( emptyTidyEnv, mkInScopeSet ) -import GHC.Types.SourceText import GHC.Data.Maybe import GHC.Utils.Misc import GHC.Utils.Outputable as Outputable @@ -899,18 +898,12 @@ expr_to_type earg = where unwrap_op_tv (L _ (HsTyVar _ _ op_id)) = return op_id unwrap_op_tv _ = failWith $ TcRnIllformedTypeArgument (L l e) - go (L l e@(HsOverLit _ lit)) = - do { tylit <- case ol_val lit of - HsIntegral n -> return $ HsNumTy NoSourceText (il_value n) - HsIsString _ s -> return $ HsStrTy NoSourceText s - HsFractional _ -> failWith $ TcRnIllformedTypeArgument (L l e) - ; return (L l (HsTyLit noExtField tylit)) } - go (L l e@(HsLit _ lit)) = - do { tylit <- case lit of - HsChar _ c -> return $ HsCharTy NoSourceText c - HsString _ s -> return $ HsStrTy NoSourceText s - _ -> failWith $ TcRnIllformedTypeArgument (L l e) - ; return (L l (HsTyLit noExtField tylit)) } + go (L l (HsOverLit _ lit)) + | Just tylit <- tyLitFromOverloadedLit (ol_val lit) + = return (L l (HsTyLit noExtField tylit)) + go (L l (HsLit _ lit)) + | Just tylit <- tyLitFromLit lit + = return (L l (HsTyLit noExtField tylit)) go (L l (ExplicitTuple _ tup_args boxity)) -- Neither unboxed tuples (#e1,e2#) nor tuple sections (e1,,e2,) can be promoted | isBoxed boxity ===================================== compiler/GHC/Tc/Gen/Head.hs ===================================== @@ -37,8 +37,6 @@ import GHC.Hs import GHC.Hs.Syn.Type import GHC.Tc.Gen.HsType -import GHC.Rename.Unbound ( unknownNameSuggestions, WhatLooking(..) ) - import GHC.Tc.Gen.Bind( chooseInferredQuantifiers ) import GHC.Tc.Gen.Sig( tcUserTypeSig, tcInstSig ) import GHC.Tc.TyCl.PatSyn( patSynBuilderOcc ) @@ -78,15 +76,14 @@ import GHC.Builtin.Types( multiplicityTy ) import GHC.Builtin.Names import GHC.Builtin.Names.TH( liftStringName, liftName ) -import GHC.Driver.Env import GHC.Driver.DynFlags import GHC.Utils.Misc import GHC.Utils.Outputable as Outputable import GHC.Utils.Panic -import qualified GHC.LanguageExtensions as LangExt import GHC.Data.Maybe import Control.Monad +import GHC.Rename.Unbound (WhatLooking(WL_Anything)) @@ -1164,46 +1161,11 @@ tc_infer_id id_name AGlobal (AConLike (RealDataCon con)) -> tcInferDataCon con AGlobal (AConLike (PatSynCon ps)) -> tcInferPatSyn id_name ps - (tcTyThingTyCon_maybe -> Just tc) -> fail_tycon tc -- TyCon or TcTyCon - ATyVar name _ -> fail_tyvar name + (tcTyThingTyCon_maybe -> Just tc) -> failIllegalTyCon WL_Anything tc -- TyCon or TcTyCon + ATyVar name _ -> failIllegalTyVal name _ -> failWithTc $ TcRnExpectedValueId thing } where - fail_tycon tc = do - gre <- getGlobalRdrEnv - let nm = tyConName tc - pprov = case lookupGRE_Name gre nm of - Just gre -> nest 2 (pprNameProvenance gre) - Nothing -> empty - err | isClassTyCon tc = ClassTE - | otherwise = TyConTE - fail_with_msg dataName nm pprov err - - fail_tyvar nm = - let pprov = nest 2 (text "bound at" <+> ppr (getSrcLoc nm)) - in fail_with_msg varName nm pprov TyVarTE - - fail_with_msg whatName nm pprov err = do - (import_errs, hints) <- get_suggestions whatName - unit_state <- hsc_units <$> getTopEnv - let - -- TODO: unfortunate to have to convert to SDoc here. - -- This should go away once we refactor ErrInfo. - hint_msg = vcat $ map ppr hints - import_err_msg = vcat $ map ppr import_errs - info = ErrInfo { errInfoContext = pprov, errInfoSupplementary = import_err_msg $$ hint_msg } - failWithTc $ TcRnMessageWithInfo unit_state ( - mkDetailedMessage info (TcRnIllegalTermLevelUse nm err)) - - get_suggestions ns = do - required_type_arguments <- xoptM LangExt.RequiredTypeArguments - if required_type_arguments && isVarNameSpace ns - then return ([], []) -- See Note [Suppress hints with RequiredTypeArguments] - else do - let occ = mkOccNameFS ns (occNameFS (occName id_name)) - lcl_env <- getLocalRdrEnv - unknownNameSuggestions lcl_env WL_Anything (mkRdrUnqual occ) - return_id id = return (HsVar noExtField (noLocA id), idType id) {- Note [Suppress hints with RequiredTypeArguments] ===================================== compiler/GHC/Tc/Gen/HsType.hs ===================================== @@ -73,7 +73,10 @@ module GHC.Tc.Gen.HsType ( HoleMode(..), -- Error messages - funAppCtxt, addTyConFlavCtxt + funAppCtxt, addTyConFlavCtxt, + + -- Utils + tyLitFromLit, tyLitFromOverloadedLit, ) where import GHC.Prelude hiding ( head, init, last, tail ) @@ -140,6 +143,7 @@ import qualified Data.List.NonEmpty as NE import Data.List ( mapAccumL ) import Control.Monad import Data.Tuple( swap ) +import GHC.Types.SourceText {- ---------------------------- @@ -4687,3 +4691,22 @@ addTyConFlavCtxt :: Name -> TyConFlavour tc -> TcM a -> TcM a addTyConFlavCtxt name flav = addErrCtxt $ hsep [ text "In the", ppr flav , text "declaration for", quotes (ppr name) ] + +{- +************************************************************************ +* * + Utils for constructing TyLit +* * +************************************************************************ +-} + + +tyLitFromLit :: HsLit GhcRn -> Maybe (HsTyLit GhcRn) +tyLitFromLit (HsString x str) = Just (HsStrTy x str) +tyLitFromLit (HsChar x char) = Just (HsCharTy x char) +tyLitFromLit _ = Nothing + +tyLitFromOverloadedLit :: OverLitVal -> Maybe (HsTyLit GhcRn) +tyLitFromOverloadedLit (HsIntegral n) = Just $ HsNumTy NoSourceText (il_value n) +tyLitFromOverloadedLit (HsIsString _ s) = Just $ HsStrTy NoSourceText s +tyLitFromOverloadedLit HsFractional{} = Nothing ===================================== compiler/GHC/Tc/Gen/Pat.hs ===================================== @@ -78,6 +78,8 @@ import Language.Haskell.Syntax.Basic (FieldLabelString(..)) import Data.List( partition ) import Data.Maybe (isJust) +import Control.Monad.Trans.Writer.CPS +import Control.Monad.Trans.Class {- ************************************************************************ @@ -504,56 +506,109 @@ tc_forall_pat tv _ pat thing_inside ; let pat' = XPat $ ExpansionPat pat (EmbTyPat arg_ty tp) ; return (pat', result) } + -- Convert a Pat into the equivalent HsTyPat. -- See `expr_to_type` (GHC.Tc.Gen.App) for the HsExpr counterpart. -- The `TcM` monad is only used to fail on ill-formed type patterns. pat_to_type_pat :: Pat GhcRn -> TcM (HsTyPat GhcRn) -pat_to_type_pat (EmbTyPat _ tp) = return tp -pat_to_type_pat (VarPat _ lname) = return (HsTP x b) +pat_to_type_pat pat = do + (ty, x) <- runWriterT (pat_to_type pat) + pure (HsTP (buildHsTyPatRn x) ty) + +pat_to_type :: Pat GhcRn -> WriterT HsTyPatRnBuilder TcM (LHsType GhcRn) +pat_to_type (EmbTyPat _ (HsTP x t)) = + do { tell (builderFromHsTyPatRn x) + ; return t } +pat_to_type (VarPat _ lname) = + do { tell (tpBuilderExplicitTV (unLoc lname)) + ; return b } where b = noLocA (HsTyVar noAnn NotPromoted lname) - x = HsTPRn { hstp_nwcs = [] - , hstp_imp_tvs = [] - , hstp_exp_tvs = [unLoc lname] } -pat_to_type_pat (WildPat _) = return (HsTP x b) +pat_to_type (WildPat _) = return b where b = noLocA (HsWildCardTy noExtField) - x = HsTPRn { hstp_nwcs = [] - , hstp_imp_tvs = [] - , hstp_exp_tvs = [] } -pat_to_type_pat (SigPat _ pat sig_ty) - = do { HsTP x_hstp t <- pat_to_type_pat (unLoc pat) +pat_to_type (SigPat _ pat sig_ty) + = do { t <- pat_to_type (unLoc pat) ; let { !(HsPS x_hsps k) = sig_ty - ; x = append_hstp_hsps x_hstp x_hsps ; b = noLocA (HsKindSig noAnn t k) } - ; return (HsTP x b) } - where - -- Quadratic for nested signatures ((p :: t1) :: t2) - -- but those are unlikely to occur in practice. - append_hstp_hsps :: HsTyPatRn -> HsPSRn -> HsTyPatRn - append_hstp_hsps t p - = HsTPRn { hstp_nwcs = hstp_nwcs t ++ hsps_nwcs p - , hstp_imp_tvs = hstp_imp_tvs t ++ hsps_imp_tvs p - , hstp_exp_tvs = hstp_exp_tvs t } -pat_to_type_pat (ParPat _ pat) - = do { HsTP x t <- pat_to_type_pat (unLoc pat) - ; return (HsTP x (noLocA (HsParTy noAnn t))) } -pat_to_type_pat (SplicePat (HsUntypedSpliceTop mod_finalizers pat) splice) = do - { HsTP x t <- pat_to_type_pat pat - ; return (HsTP x (noLocA (HsSpliceTy (HsUntypedSpliceTop mod_finalizers t) splice))) } -pat_to_type_pat pat = - -- There are other cases to handle (ConPat, ListPat, TuplePat, etc), but these - -- would always be rejected by the unification in `tcHsTyPat`, so it's fine to - -- skip them here. This won't continue to be the case when visible forall is - -- permitted in data constructors: - -- - -- data T a where { Typed :: forall a -> a -> T a } - -- g :: T Int -> Int - -- g (Typed Int x) = x -- Note the `Int` type pattern - -- - -- See ticket #18389. When this feature lands, it would be best to extend - -- `pat_to_type_pat` to handle as many pattern forms as possible. + ; tell (tpBuilderPatSig x_hsps) + ; return b } +pat_to_type (ParPat _ pat) + = do { t <- pat_to_type (unLoc pat) + ; return (noLocA (HsParTy noAnn t)) } +pat_to_type (SplicePat (HsUntypedSpliceTop mod_finalizers pat) splice) = do + { t <- pat_to_type pat + ; return (noLocA (HsSpliceTy (HsUntypedSpliceTop mod_finalizers t) splice)) } + +pat_to_type (TuplePat _ pats Boxed) + = do { tys <- traverse (pat_to_type . unLoc) pats + ; let t = noLocA (HsExplicitTupleTy noExtField tys) + ; pure t } +pat_to_type (ListPat _ pats) + = do { tys <- traverse (pat_to_type . unLoc) pats + ; let t = noLocA (HsExplicitListTy NoExtField NotPromoted tys) + ; pure t } + +pat_to_type (LitPat _ lit) + | Just ty_lit <- tyLitFromLit lit + = do { let t = noLocA (HsTyLit noExtField ty_lit) + ; pure t } +pat_to_type (NPat _ (L _ lit) _ _) + | Just ty_lit <- tyLitFromOverloadedLit (ol_val lit) + = do { let t = noLocA (HsTyLit noExtField ty_lit) + ; pure t} + +pat_to_type (ConPat _ lname (InfixCon left right)) + = do { lty <- pat_to_type (unLoc left) + ; rty <- pat_to_type (unLoc right) + ; let { t = noLocA (HsOpTy noAnn NotPromoted lty lname rty)} + ; pure t } +pat_to_type (ConPat _ lname (PrefixCon invis_args vis_args)) + = do { let { appHead = noLocA (HsTyVar noAnn NotPromoted lname)} + ; ty_invis <- foldM apply_invis_arg appHead invis_args + ; tys_vis <- traverse (pat_to_type . unLoc) vis_args + ; let t = foldl' mkHsAppTy ty_invis tys_vis + ; pure t } + where + apply_invis_arg :: LHsType GhcRn -> HsConPatTyArg GhcRn -> WriterT HsTyPatRnBuilder TcM (LHsType GhcRn) + apply_invis_arg !t (HsConPatTyArg _ (HsTP argx arg)) + = do { tell (builderFromHsTyPatRn argx) + ; pure (mkHsAppKindTy noExtField t arg)} + +pat_to_type pat = lift $ failWith $ TcRnIllformedTypePattern pat -- This failure is the only use of the TcM monad in `pat_to_type_pat` +{- +Note [Pattern to type (P2T) conversion] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Consider this: + + data T a b where + MkT :: forall a. forall b -> a -> b -> T a b + -- NB: `a` is invisible, but `b` is required + + f (MkT @[Int] (Maybe Bool) x y) = ... + +The second type argument of `MkT` is Required, so we write it without +an `@` sign in the pattern match. So the (Maybe Bool) will be + * parsed and renamed as a term pattern + * converted to a type when typechecking the pattern-match: the P2T conversion + +This is the only place we have P2T. In type-lambdas, the "pattern" is always a +type variable: + + f :: forall a -> a -> blah + f b (x::b) = ... + +The `b` argument must be a simple variable; we can't pattern-match on types. + +The function `pat_to_type` does the P2T conversion: + pat_to_type :: Pat GhcRn -> WriterT HsTyPatRnBuilder TcM (LHsType GhcRn) + +It is arranged as a writer monad, where the `HsTyPatRnBuilder` accumulates the +binders bound by the type. (We could discover these binders by a subsequent +traversal, that would mean writing another traversal.) +-} + tc_ty_pat :: HsTyPat GhcRn -> TcTyVar -> TcM r -> TcM (TcType, r) tc_ty_pat tp tv thing_inside = do { (sig_wcs, sig_ibs, arg_ty) <- tcHsTyPat tp (varType tv) ===================================== compiler/GHC/Tc/Module.hs ===================================== @@ -709,7 +709,7 @@ tcRnHsBootDecls boot_or_sig decls -- Typecheck type/class/instance decls ; traceTc "Tc2 (boot)" empty ; (tcg_env, inst_infos, _deriv_binds, _th_bndrs) - <- tcTyClsInstDecls tycl_decls deriv_decls val_binds + <- tcTyClsInstDecls tycl_decls deriv_decls def_decls val_binds ; setGblEnv tcg_env $ do { -- Emit Typeable bindings @@ -1612,7 +1612,7 @@ tcTopSrcDecls (HsGroup { hs_tyclds = tycl_decls, traceTc "Tc3" empty ; (tcg_env, inst_infos, th_bndrs, XValBindsLR (NValBinds deriv_binds deriv_sigs)) - <- tcTyClsInstDecls tycl_decls deriv_decls val_binds ; + <- tcTyClsInstDecls tycl_decls deriv_decls default_decls val_binds ; updLclCtxt (\tcl_env -> tcl_env { tcl_th_bndrs = th_bndrs `plusNameEnv` tcl_th_bndrs tcl_env }) $ setGblEnv tcg_env $ do { @@ -1622,11 +1622,6 @@ tcTopSrcDecls (HsGroup { hs_tyclds = tycl_decls, (fi_ids, fi_decls, fi_gres) <- tcForeignImports foreign_decls ; tcExtendGlobalValEnv fi_ids $ do { - -- Default declarations - traceTc "Tc4a" empty ; - default_tys <- tcDefaults default_decls ; - updGblEnv (\gbl -> gbl { tcg_default = default_tys }) $ do { - -- Value declarations next. -- It is important that we check the top-level value bindings -- before the GHC-generated derived bindings, since the latter @@ -1686,13 +1681,14 @@ tcTopSrcDecls (HsGroup { hs_tyclds = tycl_decls, addUsedGREs NoDeprecationWarnings (bagToList fo_gres) ; return (tcg_env', tcl_env) - }}}}}} + }}}}} tcTopSrcDecls _ = panic "tcTopSrcDecls: ValBindsIn" --------------------------- tcTyClsInstDecls :: [TyClGroup GhcRn] -> [LDerivDecl GhcRn] + -> [LDefaultDecl GhcRn] -> [(RecFlag, LHsBinds GhcRn)] -> TcM (TcGblEnv, -- The full inst env [InstInfo GhcRn], -- Source-code instance decls to @@ -1702,16 +1698,24 @@ tcTyClsInstDecls :: [TyClGroup GhcRn] HsValBinds GhcRn) -- Supporting bindings for derived -- instances -tcTyClsInstDecls tycl_decls deriv_decls binds +tcTyClsInstDecls tycl_decls deriv_decls default_decls binds = tcAddDataFamConPlaceholders (tycl_decls >>= group_instds) $ tcAddPatSynPlaceholders (getPatSynBinds binds) $ do { (tcg_env, inst_info, deriv_info, th_bndrs) <- tcTyAndClassDecls tycl_decls ; + ; setGblEnv tcg_env $ do { + -- With the @TyClDecl at s and @InstDecl at s checked we're ready to -- process the deriving clauses, including data family deriving -- clauses discovered in @tcTyAndClassDecls at . -- + -- But only after we've typechecked 'default' declarations. + -- See Note [Typechecking default declarations] + default_tys <- tcDefaults default_decls ; + updGblEnv (\gbl -> gbl { tcg_default = default_tys }) $ do { + + -- Careful to quit now in case there were instance errors, so that -- the deriving errors don't pile up as well. ; failIfErrsM @@ -1720,7 +1724,7 @@ tcTyClsInstDecls tycl_decls deriv_decls binds ; setGblEnv tcg_env' $ do { failIfErrsM ; pure ( tcg_env', inst_info' ++ inst_info, th_bndrs, val_binds ) - }}} + }}}} {- ********************************************************************* * * @@ -3141,3 +3145,43 @@ mark_plugin_unsafe dflags = unless (gopt Opt_PluginTrustworthy dflags) $ pluginUnsafe = singleMessage $ mkPlainMsgEnvelope diag_opts noSrcSpan TcRnUnsafeDueToPlugin + + +-- Note [Typechecking default declarations] +-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- Typechecking default declarations requires careful placement: +-- +-- 1. We must check them after types (tcTyAndClassDecls) because they can refer +-- to them. E.g. +-- +-- data T = MkT ... +-- default(Int, T, Integer) +-- +-- -- or even (tested by T11974b and T2245) +-- default(Int, T, Integer) +-- data T = MkT ... +-- +-- 2. We must check them before typechecking deriving clauses (tcInstDeclsDeriv) +-- otherwise we may lookup default default types (Integer, Double) while checking +-- deriving clauses, ignoring the default declaration. +-- +-- Before this careful placement (#24566), compiling the following example +-- (T24566) with "-ddump-if-trace -ddump-tc-trace" showed a call to +-- `applyDefaultingRules` with default types set to "(Integer,Double)": +-- +-- module M where +-- +-- import GHC.Classes +-- default () +-- +-- data Foo a = Nothing | Just a +-- deriving (Eq, Ord) +-- +-- This was an issue while building modules like M in the ghc-internal package +-- because they would spuriously fail to build if the module defining Integer +-- (ghc-bignum:GHC.Num.Integer) wasn't compiled yet and its interface not to be +-- found. The implicit dependency between M and GHC.Num.Integer isn't known to +-- the build system. +-- In addition, trying to explicitly avoid the implicit dependency with `default +-- ()` didn't work, except if *standalone* deriving was used, which was an +-- inconsistent behavior. ===================================== compiler/GHC/Tc/Utils/Env.hs ===================================== @@ -28,6 +28,7 @@ module GHC.Tc.Utils.Env( tcLookupLocatedClass, tcLookupAxiom, lookupGlobal, lookupGlobal_maybe, addTypecheckedBinds, + failIllegalTyCon, failIllegalTyVal, -- Local environment tcExtendKindEnv, tcExtendKindEnvList, @@ -137,6 +138,7 @@ import Data.List ( intercalate ) import Control.Monad import GHC.Iface.Errors.Types import GHC.Types.Error +import GHC.Rename.Unbound ( unknownNameSuggestions, WhatLooking(..) ) {- ********************************************************************* * * @@ -278,6 +280,7 @@ tcLookupConLike name = do thing <- tcLookupGlobal name case thing of AConLike cl -> return cl + ATyCon tc -> failIllegalTyCon WL_Constructor tc _ -> wrongThingErr WrongThingConLike (AGlobal thing) name tcLookupRecSelParent :: HsRecUpdParent GhcRn -> TcM RecSelParent @@ -349,6 +352,45 @@ tcGetInstEnvs = do { eps <- getEps instance MonadThings (IOEnv (Env TcGblEnv TcLclEnv)) where lookupThing = tcLookupGlobal +-- Illegal term-level use of type things +failIllegalTyCon :: WhatLooking -> TyCon -> TcM a +failIllegalTyVal :: Name -> TcM a +(failIllegalTyCon, failIllegalTyVal) = (fail_tycon, fail_tyvar) + where + fail_tycon what_looking tc = do + gre <- getGlobalRdrEnv + let nm = tyConName tc + pprov = case lookupGRE_Name gre nm of + Just gre -> nest 2 (pprNameProvenance gre) + Nothing -> empty + err | isClassTyCon tc = ClassTE + | otherwise = TyConTE + fail_with_msg what_looking dataName nm pprov err + + fail_tyvar nm = + let pprov = nest 2 (text "bound at" <+> ppr (getSrcLoc nm)) + in fail_with_msg WL_Anything varName nm pprov TyVarTE + + fail_with_msg what_looking whatName nm pprov err = do + (import_errs, hints) <- get_suggestions what_looking whatName nm + unit_state <- hsc_units <$> getTopEnv + let + -- TODO: unfortunate to have to convert to SDoc here. + -- This should go away once we refactor ErrInfo. + hint_msg = vcat $ map ppr hints + import_err_msg = vcat $ map ppr import_errs + info = ErrInfo { errInfoContext = pprov, errInfoSupplementary = import_err_msg $$ hint_msg } + failWithTc $ TcRnMessageWithInfo unit_state ( + mkDetailedMessage info (TcRnIllegalTermLevelUse nm err)) + + get_suggestions what_looking ns nm = do + required_type_arguments <- xoptM LangExt.RequiredTypeArguments + if required_type_arguments && isVarNameSpace ns + then return ([], []) -- See Note [Suppress hints with RequiredTypeArguments] + else do + let occ = mkOccNameFS ns (occNameFS (occName nm)) + lcl_env <- getLocalRdrEnv + unknownNameSuggestions lcl_env what_looking (mkRdrUnqual occ) {- ************************************************************************ * * ===================================== libraries/ghc-internal/src/GHC/Internal/Maybe.hs ===================================== @@ -28,14 +28,5 @@ default () -- data Maybe a = Nothing | Just a deriving ( Eq -- ^ @since base-2.01 - - --, Ord -- ^ @since base-2.01 + , Ord -- ^ @since base-2.01 ) - --- ??? --- A non-standalone instance will slurp the interface file for GHC.Num.Integer. - -- During simplifyInstanceContexts, a call to GHC.Tc.Utils.Env.tcGetDefaultTys - -- apparently sees mb_defaults = Nothing and thus tries to bring in the - -- default "default" types, including Integer. This seems wrong. -deriving instance Ord a => Ord (Maybe a) -- ^ @since base-2.01 - ===================================== testsuite/tests/rename/should_fail/T19843c.stderr ===================================== @@ -1,4 +1,7 @@ +T19843c.hs:6:6: error: [GHC-01928] + • Illegal term-level use of the type constructor ‘Map’ + • imported from ‘Data.Map’ at T19843c.hs:3:1-22 + (and originally defined in ‘Data.Map.Internal’) + • In the pattern: Map k v + In an equation for ‘foo’: foo (Map k v) = undefined -T19843c.hs:6:6: error: [GHC-76037] - Not in scope: data constructor ‘Map.Map’ - NB: the module ‘Data.Map’ does not export ‘Map’. ===================================== testsuite/tests/type-data/should_fail/TDPattern.stderr ===================================== @@ -1,3 +1,6 @@ +TDPattern.hs:7:3: error: [GHC-01928] + • Illegal term-level use of the type constructor ‘Zero’ + • defined at TDPattern.hs:4:17 + • In the pattern: Zero + In an equation for ‘f’: f Zero = 0 -TDPattern.hs:7:3: [GHC-76037] - Not in scope: data constructor ‘Zero’ ===================================== testsuite/tests/typecheck/should_compile/Makefile ===================================== @@ -122,3 +122,7 @@ InlinePatSyn_ExplicitBidiBuilder: InlinePatSyn_ExplicitBidiMatcher: $(RM) -f InlinePatSyn_ExplicitBidiMatcher.o InlinePatSyn_ExplicitBidiMatcher.hi '$(TEST_HC)' $(TEST_HC_OPTS) -c InlinePatSyn_ExplicitBidiMatcher.hs -O -dsuppress-all -ddump-simpl | sed -n '/^test/,/^$$/p' | grep -vq 'Pattern' + +T24566: + '$(TEST_HC)' $(TEST_HC_OPTS) -c T24566.hs -fno-code -dno-typeable-binds -ddump-if-trace 2>&1 | grep Integer || true + # Not expecting any mention of Integer in the interface loading trace ===================================== testsuite/tests/typecheck/should_compile/T23739a.hs ===================================== @@ -0,0 +1,65 @@ +{-# LANGUAGE TypeAbstractions, + ExplicitNamespaces, + RequiredTypeArguments, + DataKinds, + NoListTuplePuns, + OverloadedStrings #-} + +module T23739a where + +import Data.Tuple.Experimental +import GHC.TypeLits + +{- +This code aims to test pattern-to-type transformation +(See Note [Pattern to type (P2T) conversion] in GHC.Tc.Gen.Pat) + +However it relies on a questionable feature, that allows us to have +equality constraint in scope of type pattern checking. The test +doesn't establish such behavior, it just abuses it to examine P2T +transformation. + +In the happy future with `forall->` in GADTs we should +rewrite this test using it. +-} + +f1 :: forall a -> a ~ (Int, Bool) => Unit +f1 (b,c) = () + +f2 :: forall a -> a ~ (Int : Bool : Double : []) => Unit +f2 [a,b,c] = () + +f3 :: forall a -> a ~ [Int, Bool, Double] => Unit +f3 [a,b,c] = () + +f4 :: forall a -> a ~ [Int, Bool, Double] => Unit +f4 (a : b : c : []) = () + +f5 :: forall a -> a ~ "blah" => Unit +f5 "blah" = () + +f6 :: forall a -> a ~ 'c' => Unit +f6 'c' = () + +f7 :: forall a -> a ~ UnconsSymbol "blah" => Unit +f7 (Just ('b', "lah")) = () + +f8 :: forall a -> Unit +f8 _ = () + +f9 :: forall a -> a ~ 42 => Unit +f9 42 = () + +f10 :: forall a -> a ~ () => Unit +f10 () = () + +f11 :: forall a -> a ~ Int => Unit +f11 Int = () + +f12 :: forall a -> a ~ (Left @Bool @(Maybe b) True) => Unit +f12 (Left @Bool @(Maybe a) True) = () + +data Tup a = MkTup a a + +f13 :: forall a -> a ~ (Int, MkTup 'f' 'g', 42, True, [1,2,3,4,5], (), "blah", "wombat", 'd', UnconsSymbol "corner") => Unit +f13 (Int, 'f' `MkTup` 'g', 42, True, 1 : 2 : 3 : [4,5], () ,"blah", x, 'd', Just ('c', "orner")) = () ===================================== testsuite/tests/typecheck/should_compile/T24566.hs ===================================== @@ -0,0 +1,7 @@ +module M where + +import GHC.Classes +default () + +data Foo a = Nothing | Just a + deriving (Eq, Ord) ===================================== testsuite/tests/typecheck/should_compile/all.T ===================================== @@ -914,6 +914,5 @@ test('T17594f', normal, compile, ['']) test('WarnDefaultedExceptionContext', normal, compile, ['-Wdefaulted-exception-context']) test('T24470b', normal, compile, ['']) test('T24566', [], makefile_test, []) -test('T23764', normal, compile, ['']) test('T23739a', normal, compile, ['']) test('T24810', normal, compile, ['']) ===================================== testsuite/tests/typecheck/should_fail/T23739b.hs ===================================== @@ -0,0 +1,14 @@ + +module T23739b where + +import Data.Tuple.Experimental +import GHC.TypeLits + +g1 :: Int -> Unit +g1 Int = () + +g2 :: Int +g2 = Int{} + +g3 :: Int +g3 = Int ===================================== testsuite/tests/typecheck/should_fail/T23739b.stderr ===================================== @@ -0,0 +1,21 @@ +T23739b.hs:8:4: error: [GHC-01928] + • Illegal term-level use of the type constructor ‘Int’ + • imported from ‘Prelude’ at T23739b.hs:2:8-14 + (and originally defined in ‘GHC.Types’) + • In the pattern: Int + In an equation for ‘g1’: g1 Int = () + +T23739b.hs:11:6: error: [GHC-01928] + • Illegal term-level use of the type constructor ‘Int’ + • imported from ‘Prelude’ at T23739b.hs:2:8-14 + (and originally defined in ‘GHC.Types’) + • In the expression: Int {} + In an equation for ‘g2’: g2 = Int {} + +T23739b.hs:14:6: error: [GHC-01928] + • Illegal term-level use of the type constructor ‘Int’ + • imported from ‘Prelude’ at T23739b.hs:2:8-14 + (and originally defined in ‘GHC.Types’) + • In the expression: Int + In an equation for ‘g3’: g3 = Int + ===================================== testsuite/tests/typecheck/should_fail/all.T ===================================== @@ -724,3 +724,5 @@ test('T17594d', normal, compile_fail, ['']) test('T17594g', normal, compile_fail, ['']) test('T24470a', normal, compile_fail, ['']) +test('T24553', normal, compile_fail, ['']) +test('T23739b', normal, compile_fail, ['']) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f39baa8c1beb2ec85a7d350f7969e06bda7ed6a8...4e89c14491a75776267ccfe42475909ab3e706c2 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/f39baa8c1beb2ec85a7d350f7969e06bda7ed6a8...4e89c14491a75776267ccfe42475909ab3e706c2 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 19 16:50:14 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Thu, 19 Dec 2024 11:50:14 -0500 Subject: [Git][ghc/ghc][wip/marge_bot_batch_merge_job] 7 commits: Document `-prof` and non `-prof` code being incompatible. Message-ID: <67644ec67bc15_12f3f10ae52876651@gitlab.mail> Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 267098ad by Andreas Klebinger at 2024-12-18T23:43:13-05:00 Document `-prof` and non `-prof` code being incompatible. Fixes #25518. - - - - - 04433916 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: output metadata fragment in CI (cherry picked from commit 52b58a660e735b20961d792d8fa9267f01247a50) - - - - - 7c78804e by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore (cherry picked from commit dc86785eb43afd1bd292287c064fb5ad94fe8c7f) - - - - - 1d72cfb2 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: still use centos for redhat <9 - - - - - 38ca39da by Sylvain Henry at 2024-12-19T11:49:56-05:00 Merge ghc-bignum into ghc-internal (#24453) First step towards merging ghc-bignum and ghc-prim into ghc-internal. After this patch, ghc-bignum is deprecated and is just a shallow package reexporting modules from ghc-internal and base. Use those directly instead. Move `gmp` submodule into ghc-internal directory. - - - - - aeee6f44 by Rodrigo Mesquita at 2024-12-19T11:49:56-05:00 Improve performance of deriving Show Significantly improves performance of deriving Show instances by avoiding using the very polymorphic `.` operator in favour of inlining its definition. We were generating tons of applications of it, each which had 3 type arguments! Improves on #9557 ------------------------- Metric Decrease: InstanceMatching T12707 T3294 ------------------------ - - - - - e4b1f643 by Rodrigo Mesquita at 2024-12-19T11:49:56-05:00 Don't eta expand cons when deriving Data This eta expansion was introduced with the initial commit for Linear types. I believe this isn't needed any longer. My guess is it is an artifact from the initial linear types implementation: data constructors are linear, but they shouldn't need to be eta expanded to be used as higher order functions. I suppose in the early days this wasn't true. For instance, this works now: data T x = T x f = \(x :: forall y. y -> T y) -> x True f T -- ok! T is linear, but can be passed where an unrestricted higher order function is expected. I recall there being some magic around to make this work for data constructors... Since this works, there's no need to eta_expand the data constructors in the derived Data instances. - - - - - 30 changed files: - .gitlab-ci.yml - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - .gitmodules - compiler/GHC/Builtin/Names.hs - compiler/GHC/Core/Opt/Simplify/Utils.hs - compiler/GHC/CoreToStg/Prep.hs - compiler/GHC/Driver/Config/Core/Rules.hs - compiler/GHC/Hs/Utils.hs - compiler/GHC/Tc/Deriv/Generate.hs - compiler/GHC/Tc/Gen/Default.hs - compiler/GHC/Tc/Utils/Env.hs - compiler/GHC/Unit/Types.hs - docs/users_guide/profiling.rst - hadrian/src/CommandLine.hs - hadrian/src/Rules/Gmp.hs - hadrian/src/Rules/Library.hs - hadrian/src/Rules/Register.hs - hadrian/src/Rules/SourceDist.hs - hadrian/src/Settings/Packages.hs - libraries/base/base.cabal.in - + libraries/base/src/GHC/Num/BigNat.hs - + libraries/base/src/GHC/Num/Integer.hs - + libraries/base/src/GHC/Num/Natural.hs - − libraries/ghc-bignum/.gitignore - + libraries/ghc-bignum/Dummy.hs - − libraries/ghc-bignum/Setup.hs - − libraries/ghc-bignum/aclocal.m4 - libraries/ghc-bignum/changelog.md - − libraries/ghc-bignum/config.mk.in - − libraries/ghc-bignum/configure.ac The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/cb7a506237d4480c7403a2c45ee3b9f176b459fc...e4b1f64351c1f64bbb6769dd2efc51d302597e13 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/cb7a506237d4480c7403a2c45ee3b9f176b459fc...e4b1f64351c1f64bbb6769dd2efc51d302597e13 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 19 17:56:30 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Thu, 19 Dec 2024 12:56:30 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports] Print more info about kinds in error messages Message-ID: <67645e4eeb439_254bc452772c6221@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports at Glasgow Haskell Compiler / GHC Commits: 6601403b by Simon Peyton Jones at 2024-12-19T18:36:54+01:00 Print more info about kinds in error messages This fixes #24553, where GHC unhelpfully said error: [GHC-83865] • Expected kind ‘* -> * -> *’, but ‘Foo’ has kind ‘* -> * -> *’ See Note [Showing invisible bits of types in error messages] (cherry picked from commit b72705e9b2ae5575aef92ede6ff975bbbe43004d) - - - - - 13 changed files: - compiler/GHC/Core/Map/Type.hs - compiler/GHC/Core/TyCo/Compare.hs - compiler/GHC/Core/TyCo/Ppr.hs - compiler/GHC/Core/Unify.hs - compiler/GHC/Iface/Type.hs - compiler/GHC/Tc/Errors.hs - compiler/GHC/Tc/Errors/Ppr.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Tc/Solver/Equality.hs - compiler/GHC/Tc/Utils/TcType.hs - + testsuite/tests/typecheck/should_fail/T24553.hs - + testsuite/tests/typecheck/should_fail/T24553.stderr - testsuite/tests/typecheck/should_fail/all.T Changes: ===================================== compiler/GHC/Core/Map/Type.hs ===================================== @@ -228,7 +228,7 @@ eqDeBruijnType env_t1@(D env1 t1) env_t2@(D env2 t2) = andEq TEQX e = hasCast e andEq TEQ e = e - -- See Note [Comparing nullary type synonyms] in GHC.Core.Type + -- See Note [Comparing nullary type synonyms] in GHC.Core.TyCo.Compare go (D _ (TyConApp tc1 [])) (D _ (TyConApp tc2 [])) | tc1 == tc2 = TEQ ===================================== compiler/GHC/Core/TyCo/Compare.hs ===================================== @@ -12,8 +12,9 @@ module GHC.Core.TyCo.Compare ( nonDetCmpTypesX, nonDetCmpTc, eqVarBndrs, - pickyEqType, tcEqType, tcEqKind, tcEqTypeNoKindCheck, tcEqTypeVis, + pickyEqType, tcEqType, tcEqKind, tcEqTypeNoKindCheck, tcEqTyConApps, + mayLookIdentical, -- * Visiblity comparision eqForAllVis, cmpForAllVis @@ -22,7 +23,8 @@ module GHC.Core.TyCo.Compare ( import GHC.Prelude -import GHC.Core.Type( typeKind, coreView, tcSplitAppTyNoView_maybe, splitAppTyNoView_maybe ) +import GHC.Core.Type( typeKind, coreView, tcSplitAppTyNoView_maybe, splitAppTyNoView_maybe + , isLevityTy, isRuntimeRepTy, isMultiplicityTy ) import GHC.Core.TyCo.Rep import GHC.Core.TyCo.FVs @@ -129,52 +131,119 @@ Cabal. See #19226. -} +mayLookIdentical :: Type -> Type -> Bool +-- | Returns True if the /visible/ part of the types +-- might look equal, even if they are really unequal (in the invisible bits) +-- +-- This function is very similar to tc_eq_type but it is much more +-- heuristic. Notably, it is always safe to return True, even with types +-- that might (in truth) be unequal -- this affects error messages only +-- (Originally there were one function with an extra flag, but the result +-- was hard to understand.) +mayLookIdentical orig_ty1 orig_ty2 + = go orig_env orig_ty1 orig_ty2 + where + orig_env = mkRnEnv2 $ mkInScopeSet $ tyCoVarsOfTypes [orig_ty1, orig_ty2] + + go :: RnEnv2 -> Type -> Type -> Bool + -- See Note [Comparing nullary type synonyms] + go _ (TyConApp tc1 []) (TyConApp tc2 []) | tc1 == tc2 = True + + go env t1 t2 | Just t1' <- coreView t1 = go env t1' t2 + go env t1 t2 | Just t2' <- coreView t2 = go env t1 t2' + + go env (TyVarTy tv1) (TyVarTy tv2) = rnOccL env tv1 == rnOccR env tv2 + go _ (LitTy lit1) (LitTy lit2) = lit1 == lit2 + go env (CastTy t1 _) t2 = go env t1 t2 + go env t1 (CastTy t2 _) = go env t1 t2 + go _ (CoercionTy {}) (CoercionTy {}) = True + + go env (ForAllTy (Bndr tv1 vis1) ty1) + (ForAllTy (Bndr tv2 vis2) ty2) + = vis1 `eqForAllVis` vis2 -- See Note [ForAllTy and type equality] + && go (rnBndr2 env tv1 tv2) ty1 ty2 + -- Visible stuff only: ignore kinds of binders + + -- If we have (forall (r::RunTimeRep). ty1 ~ blah) then respond + -- with True. Reason: the type pretty-printer defaults RuntimeRep + -- foralls (see Ghc.Iface.Type.hideNonStandardTypes). That can make, + -- say (forall r. TYPE r -> Type) into (Type -> Type), so it looks the + -- same as a very different type (#24553). By responding True, we + -- tell GHC (see calls of mayLookIdentical) to display without defaulting. + -- See Note [Showing invisible bits of types in error messages] + -- in GHC.Tc.Errors.Ppr + go _ (ForAllTy b _) _ | isDefaultableBndr b = True + go _ _ (ForAllTy b _) | isDefaultableBndr b = True + + go env (FunTy _ w1 arg1 res1) (FunTy _ w2 arg2 res2) + = go env arg1 arg2 && go env res1 res2 && go env w1 w2 + -- Visible stuff only: ignore agg kinds + + -- See Note [Equality on AppTys] in GHC.Core.Type + go env (AppTy s1 t1) ty2 + | Just (s2, t2) <- tcSplitAppTyNoView_maybe ty2 + = go env s1 s2 && go env t1 t2 + go env ty1 (AppTy s2 t2) + | Just (s1, t1) <- tcSplitAppTyNoView_maybe ty1 + = go env s1 s2 && go env t1 t2 + + go env (TyConApp tc1 ts1) (TyConApp tc2 ts2) + = tc1 == tc2 && gos env (tyConBinders tc1) ts1 ts2 + + go _ _ _ = False + + gos :: RnEnv2 -> [TyConBinder] -> [Type] -> [Type] -> Bool + gos _ _ [] [] = True + gos env bs (t1:ts1) (t2:ts2) + | (invisible, bs') <- case bs of + [] -> (False, []) + (b:bs) -> (isInvisibleTyConBinder b, bs) + = (invisible || go env t1 t2) && gos env bs' ts1 ts2 + + gos _ _ _ _ = False + + -- | Type equality comparing both visible and invisible arguments and expanding -- type synonyms. tcEqTypeNoSyns :: Type -> Type -> Bool -tcEqTypeNoSyns ta tb = tc_eq_type False False ta tb - --- | Like 'tcEqType', but returns True if the /visible/ part of the types --- are equal, even if they are really unequal (in the invisible bits) -tcEqTypeVis :: Type -> Type -> Bool -tcEqTypeVis ty1 ty2 = tc_eq_type False True ty1 ty2 +tcEqTypeNoSyns ta tb = tc_eq_type False ta tb -- | Like 'pickyEqTypeVis', but returns a Bool for convenience pickyEqType :: Type -> Type -> Bool -- Check when two types _look_ the same, _including_ synonyms. -- So (pickyEqType String [Char]) returns False -- This ignores kinds and coercions, because this is used only for printing. -pickyEqType ty1 ty2 = tc_eq_type True False ty1 ty2 +pickyEqType ty1 ty2 = tc_eq_type True ty1 ty2 -- | Real worker for 'tcEqType'. No kind check! tc_eq_type :: Bool -- ^ True <=> do not expand type synonyms - -> Bool -- ^ True <=> compare visible args only -> Type -> Type -> Bool -- Flags False, False is the usual setting for tc_eq_type -- See Note [Computing equality on types] in Type -tc_eq_type keep_syns vis_only orig_ty1 orig_ty2 +{-# INLINE tc_eq_type #-} -- See Note [Specialising tc_eq_type]. +tc_eq_type keep_syns orig_ty1 orig_ty2 = go orig_env orig_ty1 orig_ty2 where + orig_env = mkRnEnv2 $ mkInScopeSet $ tyCoVarsOfTypes [orig_ty1, orig_ty2] + go :: RnEnv2 -> Type -> Type -> Bool - -- See Note [Comparing nullary type synonyms] in GHC.Core.Type. - go _ (TyConApp tc1 []) (TyConApp tc2 []) - | tc1 == tc2 - = True + -- See Note [Comparing nullary type synonyms] + go _ (TyConApp tc1 []) (TyConApp tc2 []) | tc1 == tc2 = True go env t1 t2 | not keep_syns, Just t1' <- coreView t1 = go env t1' t2 go env t1 t2 | not keep_syns, Just t2' <- coreView t2 = go env t1 t2' - go env (TyVarTy tv1) (TyVarTy tv2) - = rnOccL env tv1 == rnOccR env tv2 - - go _ (LitTy lit1) (LitTy lit2) - = lit1 == lit2 + go env (TyVarTy tv1) (TyVarTy tv2) = rnOccL env tv1 == rnOccR env tv2 + go _ (LitTy lit1) (LitTy lit2) = lit1 == lit2 + go env (CastTy t1 _) t2 = go env t1 t2 + go env t1 (CastTy t2 _) = go env t1 t2 + go _ (CoercionTy {}) (CoercionTy {}) = True go env (ForAllTy (Bndr tv1 vis1) ty1) (ForAllTy (Bndr tv2 vis2) ty2) = vis1 `eqForAllVis` vis2 -- See Note [ForAllTy and type equality] - && (vis_only || go env (varType tv1) (varType tv2)) + && go env (varType tv1) (varType tv2) && go (rnBndr2 env tv1 tv2) ty1 ty2 -- Make sure we handle all FunTy cases since falling through to the @@ -183,11 +252,9 @@ tc_eq_type keep_syns vis_only orig_ty1 orig_ty2 -- See Note [Equality on FunTys] in GHC.Core.TyCo.Rep: we must check -- kinds here go env (FunTy _ w1 arg1 res1) (FunTy _ w2 arg2 res2) - = kinds_eq && go env arg1 arg2 && go env res1 res2 && go env w1 w2 - where - kinds_eq | vis_only = True - | otherwise = go env (typeKind arg1) (typeKind arg2) && - go env (typeKind res1) (typeKind res2) + = go env (typeKind arg1) (typeKind arg2) && + go env (typeKind res1) (typeKind res2) && + go env arg1 arg2 && go env res1 res2 && go env w1 w2 -- See Note [Equality on AppTys] in GHC.Core.Type go env (AppTy s1 t1) ty2 @@ -198,32 +265,24 @@ tc_eq_type keep_syns vis_only orig_ty1 orig_ty2 = go env s1 s2 && go env t1 t2 go env (TyConApp tc1 ts1) (TyConApp tc2 ts2) - = tc1 == tc2 && gos env (tc_vis tc1) ts1 ts2 - - go env (CastTy t1 _) t2 = go env t1 t2 - go env t1 (CastTy t2 _) = go env t1 t2 - go _ (CoercionTy {}) (CoercionTy {}) = True + = tc1 == tc2 && gos env ts1 ts2 go _ _ _ = False - gos _ _ [] [] = True - gos env (ig:igs) (t1:ts1) (t2:ts2) = (ig || go env t1 t2) - && gos env igs ts1 ts2 - gos _ _ _ _ = False + gos _ [] [] = True + gos env (t1:ts1) (t2:ts2) = go env t1 t2 && gos env ts1 ts2 + gos _ _ _ = False - tc_vis :: TyCon -> [Bool] -- True for the fields we should ignore - tc_vis tc | vis_only = inviss ++ repeat False -- Ignore invisibles - | otherwise = repeat False -- Ignore nothing - -- The repeat False is necessary because tycons - -- can legitimately be oversaturated - where - bndrs = tyConBinders tc - inviss = map isInvisibleTyConBinder bndrs - - orig_env = mkRnEnv2 $ mkInScopeSet $ tyCoVarsOfTypes [orig_ty1, orig_ty2] - -{-# INLINE tc_eq_type #-} -- See Note [Specialising tc_eq_type]. +isDefaultableBndr :: ForAllTyBinder -> Bool +-- This function should line up with the defaulting done +-- by GHC.Iface.Type.defaultIfaceTyVarsOfKind +-- See Note [Showing invisible bits of types in error messages] +-- in GHC.Tc.Errors.Ppr +isDefaultableBndr (Bndr tv vis) + = isInvisibleForAllTyFlag vis && is_defaultable (tyVarKind tv) + where + is_defaultable ki = isLevityTy ki || isRuntimeRepTy ki || isMultiplicityTy ki -- | Do these denote the same level of visibility? 'Required' -- arguments are visible, others are not. So this function @@ -543,7 +602,7 @@ nonDetCmpTypeX env orig_t1 orig_t2 = -- Returns both the resulting ordering relation between -- the two types and whether either contains a cast. go :: RnEnv2 -> Type -> Type -> TypeOrdering - -- See Note [Comparing nullary type synonyms]. + -- See Note [Comparing nullary type synonyms] go _ (TyConApp tc1 []) (TyConApp tc2 []) | tc1 == tc2 = TEQ ===================================== compiler/GHC/Core/TyCo/Ppr.hs ===================================== @@ -14,7 +14,7 @@ module GHC.Core.TyCo.Ppr pprTyVar, pprTyVars, pprThetaArrowTy, pprClassPred, pprKind, pprParendKind, pprTyLit, - pprDataCons, pprWithExplicitKindsWhen, + pprDataCons, pprWithInvisibleBitsWhen, pprWithTYPE, pprSourceTyCon, @@ -330,13 +330,14 @@ pprTypeApp tc tys -- TODO: toIfaceTcArgs seems rather wasteful here ------------------ --- | Display all kind information (with @-fprint-explicit-kinds@) when the --- provided 'Bool' argument is 'True'. --- See @Note [Kind arguments in error messages]@ in "GHC.Tc.Errors". -pprWithExplicitKindsWhen :: Bool -> SDoc -> SDoc -pprWithExplicitKindsWhen b +-- | Display all foralls, runtime-reps, and kind information +-- when provided 'Bool' argument is 'True'. See GHC.Tc.Errors.Ppr +-- Note [Showing invisible bits of types in error messages] +pprWithInvisibleBitsWhen :: Bool -> SDoc -> SDoc +pprWithInvisibleBitsWhen b = updSDocContext $ \ctx -> - if b then ctx { sdocPrintExplicitKinds = True } + if b then ctx { sdocPrintExplicitKinds = True + , sdocPrintExplicitRuntimeReps = True } else ctx -- | This variant preserves any use of TYPE in a type, effectively ===================================== compiler/GHC/Core/Unify.hs ===================================== @@ -1066,7 +1066,7 @@ unify_ty :: UMEnv -- Respects newtypes, PredTypes -- See Note [Computing equality on types] in GHC.Core.Type unify_ty _env (TyConApp tc1 []) (TyConApp tc2 []) _kco - -- See Note [Comparing nullary type synonyms] in GHC.Core.Type. + -- See Note [Comparing nullary type synonyms] in GHC.Core.TyCo.Compare | tc1 == tc2 = return () ===================================== compiler/GHC/Iface/Type.hs ===================================== @@ -1132,7 +1132,7 @@ defaultIfaceTyVarsOfKind def_rep def_mult ty = go emptyFsEnv True ty -> IfaceType go subs True (IfaceForAllTy (Bndr (IfaceTvBndr (var, var_kind)) argf) ty) | isInvisibleForAllTyFlag argf -- Don't default *visible* quantification - -- or we get the mess in #13963 + -- or we get the mess in #13963 , Just substituted_ty <- check_substitution var_kind = let subs' = extendFsEnv subs var substituted_ty -- Record that we should replace it with LiftedRep/Lifted/Many, ===================================== compiler/GHC/Tc/Errors.hs ===================================== @@ -2094,10 +2094,9 @@ mkMismatchMsg item ty1 ty2 = case orig of TypeEqOrigin { uo_actual, uo_expected, uo_thing = mb_thing } -> (TypeEqMismatch - { teq_mismatch_ppr_explicit_kinds = ppr_explicit_kinds - , teq_mismatch_item = item - , teq_mismatch_ty1 = ty1 - , teq_mismatch_ty2 = ty2 + { teq_mismatch_item = item + , teq_mismatch_ty1 = ty1 + , teq_mismatch_ty2 = ty2 , teq_mismatch_actual = uo_actual , teq_mismatch_expected = uo_expected , teq_mismatch_what = mb_thing @@ -2121,25 +2120,6 @@ mkMismatchMsg item ty1 ty2 = where orig = errorItemOrigin item mb_same_occ = sameOccExtras ty2 ty1 - ppr_explicit_kinds = shouldPprWithExplicitKinds ty1 ty2 orig - --- | Whether to print explicit kinds (with @-fprint-explicit-kinds@) --- in an 'SDoc' when a type mismatch occurs to due invisible kind arguments. --- --- This function first checks to see if the 'CtOrigin' argument is a --- 'TypeEqOrigin'. If so, it first checks whether the equality is a visible --- equality; if it's not, definitely print the kinds. Even if the equality is --- a visible equality, check the expected/actual types to see if the types --- have equal visible components. If the 'CtOrigin' is --- not a 'TypeEqOrigin', fall back on the actual mismatched types themselves. -shouldPprWithExplicitKinds :: Type -> Type -> CtOrigin -> Bool -shouldPprWithExplicitKinds _ty1 _ty2 (TypeEqOrigin { uo_actual = act - , uo_expected = exp - , uo_visible = vis }) - | not vis = True -- See tests T15870, T16204c - | otherwise = tcEqTypeVis act exp -- See tests T9171, T9144. -shouldPprWithExplicitKinds ty1 ty2 _ct - = tcEqTypeVis ty1 ty2 {- Note [Insoluble mis-match] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2403,29 +2383,6 @@ results in in the import of ‘Data.Monoid’ -} -{- -Note [Kind arguments in error messages] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -It can be terribly confusing to get an error message like (#9171) - - Couldn't match expected type ‘GetParam Base (GetParam Base Int)’ - with actual type ‘GetParam Base (GetParam Base Int)’ - -The reason may be that the kinds don't match up. Typically you'll get -more useful information, but not when it's as a result of ambiguity. - -To mitigate this, GHC attempts to enable the -fprint-explicit-kinds flag -whenever any error message arises due to a kind mismatch. This means that -the above error message would instead be displayed as: - - Couldn't match expected type - ‘GetParam @* @k2 @* Base (GetParam @* @* @k2 Base Int)’ - with actual type - ‘GetParam @* @k20 @* Base (GetParam @* @* @k20 Base Int)’ - -Which makes it clearer that the culprit is the mismatch between `k2` and `k20`. --} - ----------------------- -- relevantBindings looks at the value environment and finds values whose -- types mention any of the offending type variables. It has to be ===================================== compiler/GHC/Tc/Errors/Ppr.hs ===================================== @@ -54,8 +54,8 @@ import GHC.Core.ConLike import GHC.Core.FamInstEnv ( FamInst(..), famInstAxiom, pprFamInst ) import GHC.Core.InstEnv import GHC.Core.TyCo.Rep (Type(..)) -import GHC.Core.TyCo.Ppr (pprWithExplicitKindsWhen, - pprSourceTyCon, pprTyVars, pprWithTYPE, pprTyVar, pprTidiedType) +import GHC.Core.TyCo.Ppr (pprWithInvisibleBitsWhen, pprSourceTyCon, + pprTyVars, pprWithTYPE, pprTyVar, pprTidiedType) import GHC.Core.PatSyn ( patSynName, pprPatSynType ) import GHC.Core.Predicate import GHC.Core.Type @@ -536,7 +536,7 @@ instance Diagnostic TcRnMessage where , text "cannot be inferred from the right-hand side." ] in (injectivityErrorHerald $$ body $$ text "In the type family equation:", show_kinds) - in mkSimpleDecorated $ pprWithExplicitKindsWhen show_kinds $ + in mkSimpleDecorated $ pprWithInvisibleBitsWhen show_kinds $ hang herald 2 (vcat (map (pprCoAxBranchUser fam_tc) (eqn1 : rest_eqns))) TcRnBangOnUnliftedType ty @@ -1182,7 +1182,7 @@ instance Diagnostic TcRnMessage where ppr con <+> dcolon <+> ppr (dataConDisplayType True con)) IsGADT -> (text "A newtype must not be a GADT", - ppr con <+> dcolon <+> pprWithExplicitKindsWhen sneaky_eq_spec + ppr con <+> dcolon <+> pprWithInvisibleBitsWhen sneaky_eq_spec (ppr $ dataConDisplayType show_linear_types con)) HasConstructorContext -> (text "A newtype constructor must not have a context in its type", @@ -1432,7 +1432,7 @@ instance Diagnostic TcRnMessage where , text "Perhaps enable PolyKinds or add a kind signature" ]) TcRnUninferrableTyVar tidied_tvs context -> mkSimpleDecorated $ - pprWithExplicitKindsWhen True $ + pprWithInvisibleBitsWhen True $ vcat [ text "Uninferrable type variable" <> plural tidied_tvs <+> pprWithCommas pprTyVar tidied_tvs @@ -1440,7 +1440,7 @@ instance Diagnostic TcRnMessage where , pprUninferrableTyVarCtx context ] TcRnSkolemEscape escapees tv orig_ty -> mkSimpleDecorated $ - pprWithExplicitKindsWhen True $ + pprWithInvisibleBitsWhen True $ vcat [ sep [ text "Cannot generalise type; skolem" <> plural escapees , quotes $ pprTyVars escapees , text "would escape" <+> itsOrTheir escapees <+> text "scope" @@ -1884,7 +1884,7 @@ instance Diagnostic TcRnMessage where TcRnInvalidDefaultedTyVar wanteds proposal bad_tvs -> mkSimpleDecorated $ - pprWithExplicitKindsWhen True $ + pprWithInvisibleBitsWhen True $ vcat [ text "Invalid defaulting proposal." , hang (text "The following type variable" <> plural (NE.toList bad_tvs) <+> text "cannot be defaulted, as" <+> why <> colon) 2 (pprQuotedList (NE.toList bad_tvs)) @@ -4153,17 +4153,18 @@ pprMismatchMsg _ | otherwise = text "kind" <+> quotes (ppr exp) pprMismatchMsg ctxt - (TypeEqMismatch { teq_mismatch_ppr_explicit_kinds = ppr_explicit_kinds - , teq_mismatch_item = item + (TypeEqMismatch { teq_mismatch_item = item , teq_mismatch_ty1 = ty1 -- These types are the actual types , teq_mismatch_ty2 = ty2 -- that don't match; may be swapped , teq_mismatch_expected = exp -- These are the context of , teq_mismatch_actual = act -- the mis-match , teq_mismatch_what = mb_thing , teq_mb_same_occ = mb_same_occ }) - = addArising ct_loc $ pprWithExplicitKindsWhen ppr_explicit_kinds msg - $$ maybe empty pprSameOccInfo mb_same_occ + = addArising ct_loc $ + pprWithInvisibleBitsWhen ppr_invis_bits msg + $$ maybe empty pprSameOccInfo mb_same_occ where + msg | Just (torc, rep) <- sORTKind_maybe exp = msg_for_exp_sort torc rep @@ -4226,6 +4227,7 @@ pprMismatchMsg ctxt ct_loc = errorItemCtLoc item orig = errorItemOrigin item level = ctLocTypeOrKind_maybe ct_loc `orElse` TypeLevel + ppr_invis_bits = shouldPprWithInvisibleBits ty1 ty2 orig num_args_msg = case level of KindLevel @@ -4317,6 +4319,60 @@ pprMismatchMsg ctxt (CouldNotDeduce useful_givens (item :| others) mb_extra) _ -> pprTheta wanteds +-- | Whether to print explicit kinds (with @-fprint-explicit-kinds@) +-- in an 'SDoc' when a type mismatch occurs to due invisible parts of the types. +-- See Note [Showing invisible bits of types in error messages] +-- +-- This function first checks to see if the 'CtOrigin' argument is a +-- 'TypeEqOrigin'. If so, it first checks whether the equality is a visible +-- equality; if it's not, definitely print the kinds. Even if the equality is +-- a visible equality, check the expected/actual types to see if the types +-- have equal visible components. If the 'CtOrigin' is +-- not a 'TypeEqOrigin', fall back on the actual mismatched types themselves. +shouldPprWithInvisibleBits :: Type -> Type -> CtOrigin -> Bool +shouldPprWithInvisibleBits _ty1 _ty2 (TypeEqOrigin { uo_actual = act + , uo_expected = exp + , uo_visible = vis }) + | not vis = True -- See tests T15870, T16204c + | otherwise = mayLookIdentical act exp -- See tests T9171, T9144. +shouldPprWithInvisibleBits ty1 ty2 _ct + = mayLookIdentical ty1 ty2 + +{- Note [Showing invisible bits of types in error messages] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +It can be terribly confusing to get an error message like (#9171) + + Couldn't match expected type ‘GetParam Base (GetParam Base Int)’ + with actual type ‘GetParam Base (GetParam Base Int)’ + +The reason may be that the kinds don't match up. Typically you'll get +more useful information, but not when it's as a result of ambiguity. + +To mitigate this, when we find a type or kind mis-match: + +* See if normally-visible parts of the type would make the two types + look different. This check is made by + `GHC.Core.TyCo.Compare.mayLookIdentical` + +* If not, display the types with their normally-visible parts made visible, + by setting flags in the `SDocContext": + Specifically: + - Display kind arguments: sdocPrintExplicitKinds + - Don't default away runtime-reps: sdocPrintExplicitRuntimeReps, + which controls `GHC.Iface.Type.hideNonStandardTypes` + (NB: foralls are always printed by pprType, it turns out.) + +As a result the above error message would instead be displayed as: + + Couldn't match expected type + ‘GetParam @* @k2 @* Base (GetParam @* @* @k2 Base Int)’ + with actual type + ‘GetParam @* @k20 @* Base (GetParam @* @* @k20 Base Int)’ + +Which makes it clearer that the culprit is the mismatch between `k2` and `k20`. + +Another example of what goes wrong without this: #24553. +-} {- ********************************************************************* * * @@ -6040,7 +6096,7 @@ pprIllegalInstance = \case IllegalFamilyInstance reason -> pprIllegalFamilyInstance reason IllegalFamilyApplicationInInstance inst_ty invis_arg tf_tc tf_args -> - pprWithExplicitKindsWhen invis_arg $ + pprWithInvisibleBitsWhen invis_arg $ hang (text "Illegal type synonym family application" <+> quotes (ppr tf_ty) <+> text "in instance" <> colon) 2 (ppr inst_ty) @@ -6123,7 +6179,7 @@ pprNotCovered clas , not_covered_invis_vis_tvs = undetermined_tvs , not_covered_liberal = which_cc_failed } = - pprWithExplicitKindsWhen (isEmptyVarSet $ pSnd undetermined_tvs) $ + pprWithInvisibleBitsWhen (isEmptyVarSet $ pSnd undetermined_tvs) $ vcat [ sep [ text "The" <+> ppWhen liberal (text "liberal") <+> text "coverage condition fails in class" @@ -6385,7 +6441,7 @@ pprInvalidAssocInstance = \case , text "mentions none of the type or kind variables of the class" <+> quotes (ppr cls <+> hsep (map ppr (classTyVars cls)))] AssocTyVarsDontMatch vis fam_tc exp_tys act_tys -> - pprWithExplicitKindsWhen (isInvisibleForAllTyFlag vis) $ + pprWithInvisibleBitsWhen (isInvisibleForAllTyFlag vis) $ vcat [ text "Type indexes must match class instance head" , text "Expected:" <+> pp exp_tys , text " Actual:" <+> pp act_tys ] @@ -6409,7 +6465,7 @@ pprInvalidAssocDefault = \case let (pat_tv, pat_vis) = NE.head dups in (pat_vis, text "Illegal duplicate variable" <+> quotes (ppr pat_tv) <+> text "in:") - in pprWithExplicitKindsWhen (isInvisibleForAllTyFlag pat_vis) $ + in pprWithInvisibleBitsWhen (isInvisibleForAllTyFlag pat_vis) $ hang main_msg 2 (vcat [ppr_eqn, suggestion]) where ===================================== compiler/GHC/Tc/Errors/Types.hs ===================================== @@ -5525,8 +5525,7 @@ data MismatchMsg -- -- Test cases: T1470, tcfail212. | TypeEqMismatch - { teq_mismatch_ppr_explicit_kinds :: Bool - , teq_mismatch_item :: ErrorItem + { teq_mismatch_item :: ErrorItem , teq_mismatch_ty1 :: Type , teq_mismatch_ty2 :: Type , teq_mismatch_expected :: Type -- ^ The overall expected type ===================================== compiler/GHC/Tc/Solver/Equality.hs ===================================== @@ -311,7 +311,7 @@ can_eq_nc -> Type -> Type -- RHS, after and before type-synonym expansion, resp -> TcS (StopOrContinue (Either IrredCt EqCt)) --- See Note [Comparing nullary type synonyms] in GHC.Core.Type. +-- See Note [Comparing nullary type synonyms] in GHC.Core.TyCo.Compare can_eq_nc _flat _rdr_env _envs ev eq_rel ty1@(TyConApp tc1 []) _ps_ty1 (TyConApp tc2 []) _ps_ty2 | tc1 == tc2 = canEqReflexive ev eq_rel ty1 ===================================== compiler/GHC/Tc/Utils/TcType.hs ===================================== @@ -95,7 +95,7 @@ module GHC.Tc.Utils.TcType ( -- Re-exported from GHC.Core.TyCo.Compare -- mainly just for back-compat reasons eqType, eqTypes, nonDetCmpType, nonDetCmpTypes, eqTypeX, - pickyEqType, tcEqType, tcEqKind, tcEqTypeNoKindCheck, tcEqTypeVis, + pickyEqType, tcEqType, tcEqKind, tcEqTypeNoKindCheck, mayLookIdentical, tcEqTyConApps, eqForAllVis, eqVarBndrs, --------------------------------- @@ -888,7 +888,8 @@ tcTyFamInsts = map (\(_,b,c) -> (b,c)) . tcTyFamInstsAndVis -- to @C@, whereas @F Bool@ is paired with 'False' since it appears an a -- /visible/ argument to @C at . -- --- See also @Note [Kind arguments in error messages]@ in "GHC.Tc.Errors". +-- See also Note [Showing invisible bits of types in error messages] +-- in "GHC.Tc.Errors.Ppr". tcTyFamInstsAndVis :: Type -> [(Bool, TyCon, [Type])] tcTyFamInstsAndVis = tcTyFamInstsAndVisX False ===================================== testsuite/tests/typecheck/should_fail/T24553.hs ===================================== @@ -0,0 +1,8 @@ +module T24553 where + +import GHC.Exts + +type Foo :: * -> forall r. TYPE r -> * +newtype Foo m a = MkFoo () + +type Bar = Foo :: forall r. * -> TYPE r -> * ===================================== testsuite/tests/typecheck/should_fail/T24553.stderr ===================================== @@ -0,0 +1,6 @@ + +T24553.hs:8:12: error: [GHC-83865] + • Expected kind ‘forall (r :: RuntimeRep). * -> TYPE r -> *’, + but ‘Foo’ has kind ‘* -> forall (r :: RuntimeRep). TYPE r -> *’ + • In the type ‘Foo :: forall r. * -> TYPE r -> *’ + In the type declaration for ‘Bar’ ===================================== testsuite/tests/typecheck/should_fail/all.T ===================================== @@ -726,3 +726,4 @@ test('T17594g', normal, compile_fail, ['']) test('T24470a', normal, compile_fail, ['']) test('T24553', normal, compile_fail, ['']) test('T23739b', normal, compile_fail, ['']) + View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/6601403bae2fe9f9bb298ce5869071fc7b6046a7 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/6601403bae2fe9f9bb298ce5869071fc7b6046a7 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 19 19:00:34 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Thu, 19 Dec 2024 14:00:34 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/andreask/arm_cmp_lit Message-ID: <67646d523359f_254bc4abe1a4123e8@gitlab.mail> Andreas Klebinger pushed new branch wip/andreask/arm_cmp_lit at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/andreask/arm_cmp_lit You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 19 19:25:23 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Thu, 19 Dec 2024 14:25:23 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports] testsuite: workaround bug in python-3.12 Message-ID: <67647323e8081_254bc4ebb5f41521f@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports at Glasgow Haskell Compiler / GHC Commits: 1a7a0500 by Matthew Pickering at 2024-12-19T20:05:43+01:00 testsuite: workaround bug in python-3.12 There is some unexplained change to binding behaviour in python-3.12 which requires moving this import from the top-level into the scope of the function. I didn't feel any particular desire to do a deep investigation as to why this changed as the code works when modified like this. No one in the python IRC channel seemed to know what the problem was. (cherry picked from commit 43aa99b8169fc6d8552844cd6fa0ce3cd4308185) - - - - - 1 changed file: - testsuite/tests/plugins/all.T Changes: ===================================== testsuite/tests/plugins/all.T ===================================== @@ -11,11 +11,15 @@ setTestOpts([ when(opsys('mingw32'), multi_cpu_race), ]) -import itertools # Check the simple-plugin tests without # caring about the order of loading of interfaces def normalizeIfaces(unnormalized_str): + # Why is this not at the top-level? Probably a python bug which I didn't fancy + # investigating deeply. + # NameError: name 'itertools' is not defined. Did you forget to import 'itertools' + # if placed at the top-level + import itertools iface_plugin_prefix = "interfacePlugin: " grouped_plugins = itertools.groupby( unnormalized_str.split('\n'), View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1a7a0500b165a5f746691a37df1329c421b08b19 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1a7a0500b165a5f746691a37df1329c421b08b19 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Thu Dec 19 19:55:40 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Thu, 19 Dec 2024 14:55:40 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/set-symlink Message-ID: <67647a3c540c1_254bc412fd310167d2@gitlab.mail> Ben Gamari pushed new branch wip/set-symlink at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/set-symlink You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 01:40:47 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Thu, 19 Dec 2024 20:40:47 -0500 Subject: [Git][ghc/ghc][master] Merge ghc-bignum into ghc-internal (#24453) Message-ID: <6764cb1fd5f32_21abc8163ede48750@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 3f7ebc58 by Sylvain Henry at 2024-12-19T20:40:14-05:00 Merge ghc-bignum into ghc-internal (#24453) First step towards merging ghc-bignum and ghc-prim into ghc-internal. After this patch, ghc-bignum is deprecated and is just a shallow package reexporting modules from ghc-internal and base. Use those directly instead. Move `gmp` submodule into ghc-internal directory. - - - - - 30 changed files: - .gitmodules - compiler/GHC/Builtin/Names.hs - compiler/GHC/Core/Opt/Simplify/Utils.hs - compiler/GHC/CoreToStg/Prep.hs - compiler/GHC/Driver/Config/Core/Rules.hs - compiler/GHC/Tc/Gen/Default.hs - compiler/GHC/Tc/Utils/Env.hs - compiler/GHC/Unit/Types.hs - hadrian/src/CommandLine.hs - hadrian/src/Rules/Gmp.hs - hadrian/src/Rules/Library.hs - hadrian/src/Rules/Register.hs - hadrian/src/Rules/SourceDist.hs - hadrian/src/Settings/Packages.hs - libraries/base/base.cabal.in - + libraries/base/src/GHC/Num/BigNat.hs - + libraries/base/src/GHC/Num/Integer.hs - + libraries/base/src/GHC/Num/Natural.hs - − libraries/ghc-bignum/.gitignore - + libraries/ghc-bignum/Dummy.hs - − libraries/ghc-bignum/Setup.hs - − libraries/ghc-bignum/aclocal.m4 - libraries/ghc-bignum/changelog.md - − libraries/ghc-bignum/config.mk.in - − libraries/ghc-bignum/configure.ac - − libraries/ghc-bignum/ghc-bignum.buildinfo.in - libraries/ghc-bignum/ghc-bignum.cabal - − libraries/ghc-bignum/install-sh - libraries/ghc-internal/.gitignore - libraries/ghc-internal/aclocal.m4 The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3f7ebc5855e97c8374bedd8e8144fc62c0583d64 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3f7ebc5855e97c8374bedd8e8144fc62c0583d64 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 01:41:18 2024 From: gitlab at gitlab.haskell.org (Marge Bot (@marge-bot)) Date: Thu, 19 Dec 2024 20:41:18 -0500 Subject: [Git][ghc/ghc][master] 2 commits: Improve performance of deriving Show Message-ID: <6764cb3e11da0_21abc8166da689054c@gitlab.mail> Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: ee0150c2 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Improve performance of deriving Show Significantly improves performance of deriving Show instances by avoiding using the very polymorphic `.` operator in favour of inlining its definition. We were generating tons of applications of it, each which had 3 type arguments! Improves on #9557 ------------------------- Metric Decrease: InstanceMatching T12707 T3294 ------------------------ - - - - - 8b266671 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Don't eta expand cons when deriving Data This eta expansion was introduced with the initial commit for Linear types. I believe this isn't needed any longer. My guess is it is an artifact from the initial linear types implementation: data constructors are linear, but they shouldn't need to be eta expanded to be used as higher order functions. I suppose in the early days this wasn't true. For instance, this works now: data T x = T x f = \(x :: forall y. y -> T y) -> x True f T -- ok! T is linear, but can be passed where an unrestricted higher order function is expected. I recall there being some magic around to make this work for data constructors... Since this works, there's no need to eta_expand the data constructors in the derived Data instances. - - - - - 6 changed files: - compiler/GHC/Hs/Utils.hs - compiler/GHC/Tc/Deriv/Generate.hs - testsuite/tests/deriving/should_compile/T14682.stderr - testsuite/tests/deriving/should_run/T9576.stderr - testsuite/tests/typecheck/should_fail/T15883d.stderr - testsuite/tests/typecheck/should_fail/T15883e.stderr Changes: ===================================== compiler/GHC/Hs/Utils.hs ===================================== @@ -56,7 +56,7 @@ module GHC.Hs.Utils( nlHsTyApp, nlHsTyApps, nlHsVar, nlHsDataCon, nlHsLit, nlHsApp, nlHsApps, nlHsSyntaxApps, nlHsIntLit, nlHsVarApps, - nlHsDo, nlHsOpApp, nlHsPar, nlHsIf, nlHsCase, nlList, + nlHsDo, nlHsOpApp, nlHsLam, nlHsPar, nlHsIf, nlHsCase, nlList, mkLHsTupleExpr, mkLHsVarTuple, missingTupArg, mkLocatedList, nlAscribe, @@ -598,11 +598,15 @@ nlHsDo ctxt stmts = noLocA (mkHsDo ctxt (noLocA stmts)) nlHsOpApp :: LHsExpr GhcPs -> IdP GhcPs -> LHsExpr GhcPs -> LHsExpr GhcPs nlHsOpApp e1 op e2 = noLocA (mkHsOpApp e1 op e2) +nlHsLam :: LMatch GhcPs (LHsExpr GhcPs) -> LHsExpr GhcPs nlHsPar :: IsPass p => LHsExpr (GhcPass p) -> LHsExpr (GhcPass p) nlHsCase :: LHsExpr GhcPs -> [LMatch GhcPs (LHsExpr GhcPs)] -> LHsExpr GhcPs nlList :: [LHsExpr GhcPs] -> LHsExpr GhcPs +nlHsLam match = noLocA $ HsLam noAnn LamSingle + $ mkMatchGroup (Generated OtherExpansion SkipPmc) (noLocA [match]) + nlHsPar e = noLocA (gHsPar e) -- nlHsIf should generate if-expressions which are NOT subject to ===================================== compiler/GHC/Tc/Deriv/Generate.hs ===================================== @@ -1407,7 +1407,7 @@ gen_Data_binds loc (DerivInstTys{dit_rep_tc = rep_tc}) gfoldl_eqn con = ([nlVarPat k_RDR, z_Pat, nlConVarPat con_name as_needed], - foldl' mk_k_app (z_Expr `nlHsApp` (eta_expand_data_con con)) as_needed) + foldl' mk_k_app (z_Expr `nlHsApp` (nlHsVar (getRdrName con))) as_needed) where con_name :: RdrName con_name = getRdrName con @@ -1427,18 +1427,9 @@ gen_Data_binds loc (DerivInstTys{dit_rep_tc = rep_tc}) gunfold_alt dc = mkHsCaseAlt (mk_unfold_pat dc) (mk_unfold_rhs dc) mk_unfold_rhs dc = foldr nlHsApp - (z_Expr `nlHsApp` (eta_expand_data_con dc)) + (z_Expr `nlHsApp` (nlHsVar (getRdrName dc))) (replicate (dataConSourceArity dc) (nlHsVar k_RDR)) - eta_expand_data_con dc = - mkHsLam (noLocA eta_expand_pats) - (foldl nlHsApp (nlHsVar (getRdrName dc)) eta_expand_hsvars) - where - eta_expand_pats = map nlVarPat eta_expand_vars - eta_expand_hsvars = map nlHsVar eta_expand_vars - eta_expand_vars = take (dataConSourceArity dc) as_RDRs - - mk_unfold_pat dc -- Last one is a wild-pat, to avoid -- redundant test, and annoying warning | tag-fIRST_TAG == n_cons-1 = nlWildPat -- Last constructor @@ -2528,21 +2519,22 @@ showParen_Expr showParen_Expr e1 e2 = nlHsApp (nlHsApp (nlHsVar showParen_RDR) e1) e2 nested_compose_Expr :: [LHsExpr GhcPs] -> LHsExpr GhcPs - -nested_compose_Expr [] = panic "nested_compose_expr" -- Arg is always non-empty -nested_compose_Expr [e] = parenify e -nested_compose_Expr (e:es) - = nlHsApp (nlHsApp (nlHsVar compose_RDR) (parenify e)) (nested_compose_Expr es) +nested_compose_Expr = + nlHsLam . mkSimpleMatch (LamAlt LamSingle) (noLocA [z_Pat]) . go + where + -- Previously we used (`.`), but inlining its definition improves compiler + -- performance significantly since we no longer need to typecheck lots of + -- (.) applications (each which needed three type applications, all @String) + -- (See #25453 for why this is especially slow currently) + go [] = panic "nested_compose_expr" -- Arg is always non-empty + go [e] = nlHsApp e z_Expr + go (e:es) = nlHsApp e (go es) -- impossible_Expr is used in case RHSs that should never happen. -- We generate these to keep the desugarer from complaining that they *might* happen! error_Expr :: FastString -> LHsExpr GhcPs error_Expr string = nlHsApp (nlHsVar error_RDR) (nlHsLit (mkHsStringFS string)) -parenify :: LHsExpr GhcPs -> LHsExpr GhcPs -parenify e@(L _ (HsVar _ _)) = e -parenify e = mkHsPar e - -- genOpApp wraps brackets round the operator application, so that the -- renamer won't subsequently try to re-associate it. genOpApp :: LHsExpr GhcPs -> RdrName -> LHsExpr GhcPs -> LHsExpr GhcPs ===================================== testsuite/tests/deriving/should_compile/T14682.stderr ===================================== @@ -5,12 +5,13 @@ Derived class instances: GHC.Internal.Show.showsPrec a (T14682.Foo b1 b2) = GHC.Internal.Show.showParen (a GHC.Classes.>= 11) - ((GHC.Internal.Base..) - (GHC.Internal.Show.showString "Foo ") - ((GHC.Internal.Base..) - (GHC.Internal.Show.showsPrec 11 b1) - ((GHC.Internal.Base..) - GHC.Internal.Show.showSpace (GHC.Internal.Show.showsPrec 11 b2)))) + (\ z + -> GHC.Internal.Show.showString + "Foo " + (GHC.Internal.Show.showsPrec + 11 b1 + (GHC.Internal.Show.showSpace + (GHC.Internal.Show.showsPrec 11 b2 z)))) instance GHC.Internal.TH.Lift.Lift T14682.Foo where GHC.Internal.TH.Lift.lift (T14682.Foo a1 a2) @@ -25,9 +26,8 @@ Derived class instances: instance GHC.Internal.Data.Data.Data T14682.Foo where GHC.Internal.Data.Data.gfoldl k z (T14682.Foo a1 a2) - = ((z (\ a1 a2 -> T14682.Foo a1 a2) `k` a1) `k` a2) - GHC.Internal.Data.Data.gunfold k z _ - = k (k (z (\ a1 a2 -> T14682.Foo a1 a2))) + = ((z T14682.Foo `k` a1) `k` a2) + GHC.Internal.Data.Data.gunfold k z _ = k (k (z T14682.Foo)) GHC.Internal.Data.Data.toConstr (T14682.Foo _ _) = $cFoo GHC.Internal.Data.Data.dataTypeOf _ = $tFoo ===================================== testsuite/tests/deriving/should_run/T9576.stderr ===================================== @@ -2,11 +2,11 @@ T9576: Uncaught exception ghc-internal:GHC.Internal.Control.Exception.Base.TypeE T9576.hs:6:31: error: [GHC-39999] • No instance for ‘Show Foo’ arising from a use of ‘showsPrec’ - • In the second argument of ‘(.)’, namely ‘(showsPrec 11 b1)’ + • In the second argument of ‘showString’, namely + ‘(showsPrec 11 b1 z)’ + In the expression: showString "MkBar " (showsPrec 11 b1 z) In the second argument of ‘showParen’, namely - ‘((.) (showString "MkBar ") (showsPrec 11 b1))’ - In the expression: - showParen (a >= 11) ((.) (showString "MkBar ") (showsPrec 11 b1)) + ‘(\ z -> showString "MkBar " (showsPrec 11 b1 z))’ When typechecking the code for ‘showsPrec’ in a derived instance for ‘Show Bar’: To see the code I am typechecking, use -ddump-deriv ===================================== testsuite/tests/typecheck/should_fail/T15883d.stderr ===================================== @@ -1,4 +1,3 @@ - T15883d.hs:14:1: error: [GHC-39999] • Ambiguous type variable ‘a0’ arising from a use of ‘showsPrec’ prevents the constraint ‘(Show a0)’ from being solved. @@ -9,11 +8,12 @@ T15883d.hs:14:1: error: [GHC-39999] ...plus 29 others ...plus 10 instances involving out-of-scope types (use -fprint-potential-instances to see them all) - • In the second argument of ‘(.)’, namely ‘(showsPrec 11 b1)’ + • In the second argument of ‘showString’, namely + ‘(showsPrec 11 b1 z)’ + In the expression: showString "MkFoo " (showsPrec 11 b1 z) In the second argument of ‘showParen’, namely - ‘((.) (showString "MkFoo ") (showsPrec 11 b1))’ - In the expression: - showParen (a >= 11) ((.) (showString "MkFoo ") (showsPrec 11 b1)) + ‘(\ z -> showString "MkFoo " (showsPrec 11 b1 z))’ When typechecking the code for ‘showsPrec’ in a derived instance for ‘Show (Foo LiftedRep)’: To see the code I am typechecking, use -ddump-deriv + ===================================== testsuite/tests/typecheck/should_fail/T15883e.stderr ===================================== @@ -1,71 +1,26 @@ - -T15883e.hs:16:1: error: [GHC-39999] - • Ambiguous type variable ‘d0’ arising from a use of ‘k’ - prevents the constraint ‘(Data d0)’ from being solved. - Probable fix: use a type annotation to specify what ‘d0’ should be. - Potentially matching instances: - instance (Data a, Data b) => Data (Either a b) - -- Defined in ‘GHC.Internal.Data.Data’ - instance Data a => Data (Down a) - -- Defined in ‘GHC.Internal.Data.Data’ - ...plus 20 others - ...plus 47 instances involving out-of-scope types - (use -fprint-potential-instances to see them all) - • In the expression: z (\ a1 -> MkFoo a1) `k` a1 - In an equation for ‘GHC.Internal.Data.Data.gfoldl’: - GHC.Internal.Data.Data.gfoldl k z (MkFoo a1) - = (z (\ a1 -> MkFoo a1) `k` a1) - When typechecking the code for ‘GHC.Internal.Data.Data.gfoldl’ - in a derived instance for ‘Data (Foo LiftedRep)’: - To see the code I am typechecking, use -ddump-deriv - In the instance declaration for ‘Data (Foo LiftedRep)’ - -T15883e.hs:16:1: error: [GHC-46956] - • Couldn't match expected type ‘a’ with actual type ‘d0’ - because type variable ‘a’ would escape its scope - This (rigid, skolem) type variable is bound by - a type expected by the context: - forall a. a - at T15883e.hs:16:1-52 - • In the first argument of ‘MkFoo’, namely ‘a1’ - In the expression: MkFoo a1 - In the first argument of ‘z’, namely ‘(\ a1 -> MkFoo a1)’ +T15883e.hs:16:1: error: [GHC-91028] + • Couldn't match type ‘d0’ with ‘forall a. a’ + Expected: d0 -> Foo LiftedRep + Actual: (forall a. a) -> Foo LiftedRep + Cannot instantiate unification variable ‘d0’ + with a type involving polytypes: forall a. a + • In the first argument of ‘z’, namely ‘MkFoo’ + In the first argument of ‘k’, namely ‘z MkFoo’ + In the expression: z MkFoo `k` a1 When typechecking the code for ‘GHC.Internal.Data.Data.gfoldl’ in a derived instance for ‘Data (Foo LiftedRep)’: To see the code I am typechecking, use -ddump-deriv - • Relevant bindings include a1 :: d0 (bound at T15883e.hs:16:1) -T15883e.hs:16:1: error: [GHC-39999] - • Ambiguous type variable ‘b0’ arising from a use of ‘k’ - prevents the constraint ‘(Data b0)’ from being solved. - Probable fix: use a type annotation to specify what ‘b0’ should be. - Potentially matching instances: - instance (Data a, Data b) => Data (Either a b) - -- Defined in ‘GHC.Internal.Data.Data’ - instance Data a => Data (Down a) - -- Defined in ‘GHC.Internal.Data.Data’ - ...plus 20 others - ...plus 47 instances involving out-of-scope types - (use -fprint-potential-instances to see them all) - • In the expression: k (z (\ a1 -> MkFoo a1)) - In an equation for ‘GHC.Internal.Data.Data.gunfold’: - GHC.Internal.Data.Data.gunfold k z _ = k (z (\ a1 -> MkFoo a1)) +T15883e.hs:16:1: error: [GHC-91028] + • Couldn't match type ‘b0’ with ‘forall a. a’ + Expected: b0 -> Foo LiftedRep + Actual: (forall a. a) -> Foo LiftedRep + Cannot instantiate unification variable ‘b0’ + with a type involving polytypes: forall a. a + • In the first argument of ‘z’, namely ‘MkFoo’ + In the first argument of ‘k’, namely ‘(z MkFoo)’ + In the expression: k (z MkFoo) When typechecking the code for ‘GHC.Internal.Data.Data.gunfold’ in a derived instance for ‘Data (Foo LiftedRep)’: To see the code I am typechecking, use -ddump-deriv - In the instance declaration for ‘Data (Foo LiftedRep)’ -T15883e.hs:16:1: error: [GHC-46956] - • Couldn't match expected type ‘a’ with actual type ‘b0’ - because type variable ‘a’ would escape its scope - This (rigid, skolem) type variable is bound by - a type expected by the context: - forall a. a - at T15883e.hs:16:1-52 - • In the first argument of ‘MkFoo’, namely ‘a1’ - In the expression: MkFoo a1 - In the first argument of ‘z’, namely ‘(\ a1 -> MkFoo a1)’ - When typechecking the code for ‘GHC.Internal.Data.Data.gunfold’ - in a derived instance for ‘Data (Foo LiftedRep)’: - To see the code I am typechecking, use -ddump-deriv - • Relevant bindings include a1 :: b0 (bound at T15883e.hs:16:1) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3f7ebc5855e97c8374bedd8e8144fc62c0583d64...8b266671bcfe9ef5a25f0a78ea7dcca68b78dc32 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3f7ebc5855e97c8374bedd8e8144fc62c0583d64...8b266671bcfe9ef5a25f0a78ea7dcca68b78dc32 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 01:59:01 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Thu, 19 Dec 2024 20:59:01 -0500 Subject: [Git][ghc/ghc][ghc-9.10] 60 commits: Escape multiple arguments in the settings file Message-ID: <6764cf6576e6b_21abc81d98cc0940b3@gitlab.mail> Andreas Klebinger pushed to branch ghc-9.10 at Glasgow Haskell Compiler / GHC Commits: 9cd1ae5b by Fendor at 2024-12-13T13:18:27+01:00 Escape multiple arguments in the settings file Uses responseFile syntax. The issue arises when GHC is installed on windows into a location that has a space, for example the user name is 'Fake User'. The $topdir will also contain a space, consequentially. When we resolve the top dir in the string `-I$topdir/mingw/include`, then `words` will turn this single argument into `-I/C/Users/Fake` and `User/.../mingw/include` which trips up the flag argument parser of various tools such as gcc or clang. We avoid this by escaping the $topdir before replacing it in `initSettngs`. Additionally, we allow to escape spaces and quotation marks for arguments in `settings` file. Add regression test case to count the number of options after variable expansion and argument escaping took place. Additionally, we check that escaped spaces and double quotation marks are correctly parsed. (cherry picked from commit 31bf85ee49fe2ca0b17eaee0774e395f017a9373) - - - - - 8d3b0c32 by Andreas Klebinger at 2024-12-13T13:29:03+01:00 Changelog for !11938 - Escape multiple arguments in the settings file. - - - - - 156b8aa3 by Andreas Klebinger at 2024-12-13T19:46:22+01:00 RTS: Emit warning when -M < -H Fixes #24487 (cherry picked from commit 9e91744a19dcd699896341baadf98f99b1250839) - - - - - 4d5d4404 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: fix typos and namings (fixes #24602) You may noted that I've also changed term of ``` , global "h$vt_double" ||= toJExpr IntV ``` See "IntV" and ``` WaitReadOp -> \[] [fd] -> pure $ PRPrimCall $ returnS (app "h$waidRead" [fd]) ``` See "h$waidRead" (cherry picked from commit c70b9ddb6dc232e22a49ddc757865bd3bc9c46a7) - - - - - fc56b471 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: trivial checks for variable presence (fixes #24602) (cherry picked from commit 3db54f9bcdcd20a2497447bf76176470db900143) - - - - - 1ed663cc by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: fs module imported twice (by emscripten and by ghc-internal). ghc-internal import wrapped in a closure to prevent conflict with emscripten (fixes #24602) Better solution is to use some JavaScript module system like AMD, CommonJS or even UMD. It will be investigated at other issues. At first glance we should try UMD (See https://github.com/umdjs/umd) (cherry picked from commit 777f108f74f0a81274775d504dffe46c5fdfc33f) - - - - - d3477264 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: thread.js requires h$fds and h$fdReady to be declared for static code analysis, minimal code copied from GHCJS (fixes #24602) I've just copied some old pieces of GHCJS from publicly available sources (See https://github.com/Taneb/shims/blob/a6dd0202dcdb86ad63201495b8b5d9763483eb35/src/io.js#L607). Also I didn't put details to h$fds. I took minimal and left only its object initialization: `var h$fds = {};` (cherry picked from commit a45a57127bb7eaceae92e0edf057c053eb4d5367) - - - - - 549ce324 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: heap and stack overflows reporting defined as js hard failure (fixes #24602) These errors were treated as a hard failure for browser application. The fix is trivial: just throw error. (cherry picked from commit ad90bf1237e0c9d2013399bd8cd1315f2845d9e7) - - - - - 8335f195 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: Stubs for code without actual implementation detected by Google Closure Compiler (fixes #24602) These errors were fixed just by introducing stubbed functions with throw for further implementation. (cherry picked from commit 5962fa526e071d77fd4970b57d957a622e13207c) - - - - - db00df21 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: Add externs to linker (fixes #24602) After enabling jsdoc and built-in google closure compiler types I was needed to deal with the following: 1. Define NodeJS-environment types. I've just copied minimal set of externs from semi-official repo (see https://github.com/externs/nodejs/blob/6c6882c73efcdceecf42e7ba11f1e3e5c9c041f0/v8/nodejs.js#L8). 2. Define Emscripten-environment types: `HEAP8`. Emscripten already provides some externs in our code but it supposed to be run in some module system. And its definitions do not work well in plain bundle. 3. We have some functions which purpose is to add to functions some contextual information via function properties. These functions should be marked as `modifies` to let google closure compiler remove calls if these functions are not used actually by call graph. Such functions are: `h$o`, `h$sti`, `h$init_closure`, `h$setObjInfo`. 4. STG primitives such as registries and stuff from `GHC.StgToJS`. `dXX` properties were already present at externs generator function but they are started from `7`, not from `1`. This message is related: `// fixme does closure compiler bite us here?` (cherry picked from commit a0694298aad5f2f428311d6e787484a250c9de43) - - - - - 3a270b4d by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: added both tests: for size and for correctness (fixes #24602) By some reason MacOS builds add to stderr messages like: Ignoring unexpected archive entry: __.SYMDEF ... However I left stderr to `/dev/null` for compatibility with linux CI builds. (cherry picked from commit e58bb29f8a4808fd4b74b653b1893f78121c7df4) - - - - - 5348bbe9 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: Disable js linker warning for empty symbol table to make js tests running consistent across environments (cherry picked from commit 909f3a9c8dac5d15c2492c008e370be60f50b50c) - - - - - 68da8237 by Serge S. Gulin at 2024-12-18T16:28:16+01:00 JS: Add special preprocessor for js files due of needing to keep jsdoc comments (fixes #24602) Our js files have defined google closure compiler types at jsdoc entries but these jsdoc entries are removed by cpp preprocessor. I considered that reusing them in javascript-backend would be a nice thing. Right now haskell processor uses `-traditional` option to deal with comments and `//` operators. But now there are following compiler options: `-C` and `-CC`. You can read about them at GCC (see https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#index-CC) and CLang (see https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-CC). It seems that `-CC` works better for javascript jsdoc than `-traditional`. At least it leaves `/* ... */` comments w/o changes. (cherry picked from commit 83eb10da239e6bef0d06dbba174809f99c463d8d) - - - - - e234268d by Cheng Shao at 2024-12-18T16:28:16+01:00 Update autoconf scripts Scripts taken from autoconf 948ae97ca5703224bd3eada06b7a69f40dd15a02 (cherry picked from commit 36f2c3422d7f3620078dba701f57275a3708aff5) - - - - - f1de8643 by Sylvain Henry at 2024-12-18T16:28:16+01:00 GHCi: support inlining breakpoints (#24712) When a breakpoint is inlined, its context may change (e.g. tyvars in scope). We must take this into account and not used the breakpoint tick index as its sole identifier. Each instance of a breakpoint (even with the same tick index) now gets a different "info" index. We also need to distinguish modules: - tick module: module with the break array (tick counters, status, etc.) - info module: module having the CgBreakInfo (info at occurrence site) (cherry picked from commit b85b11994e0130ff2401dd4bbdf52330e0bcf776) - - - - - cd9f53ba by Cheng Shao at 2024-12-18T16:28:16+01:00 wasm: use scheduler.postTask() for context switch when available This patch makes use of scheduler.postTask() for JSFFI context switch when it's available. It's a more principled approach than our MessageChannel based setImmediate() implementation, and it's available in latest version of Chromium based browsers. (cherry picked from commit 43d48b449a46e805e3baeafbafa62b6cd6f761c9) - - - - - c01dc7f1 by Matthew Craven at 2024-12-18T16:28:16+01:00 Add test cases for #24664 ...since none are present in the original MR !12463 fixing this issue. (cherry picked from commit a19201d42cfd3aa54faeb1b5a95b715b9a67a01a) - - - - - 5a8790db by Arsen Arsenović at 2024-12-18T16:28:16+01:00 Split out the C-- preprocessor, and make it pass -g0 Previously, C-- was processed with the C preprocessor program. This means that it inherited flags passed via -optc. A flag that is somewhat often passed through -optc is -g. At certain -g levels (>=2), GCC starts emitting defines *after* preprocessing, for the purposes of debug info generation. This is not useful for the C-- compiler, and, in fact, causes lexer errors. We can suppress this effect (safely, if supported) via -g0. As a workaround, in older versions of GCC (<=10), GCC only emitted defines if a certain set of -g*3 flags was passed. Newer versions check the debug level. For the former, we filter out those -g*3 flags and, for the latter, we specify -g0 on top of that. As a compatible and effective solution, this change adds a C-- preprocessor distinct from the C compiler and preprocessor, but that keeps its flags. The command line produced for C-- preprocessing now looks like: $pgmCmmP $optCs_without_g3 $g0_if_supported $optCmmP Closes: https://gitlab.haskell.org/ghc/ghc/-/issues/24474 (cherry picked from commit 25b0b40467d0a12601497117c0ad14e1fcab0b74) - - - - - f2cc943d by Andreas Klebinger at 2024-12-18T16:28:16+01:00 Add release notes for some backported 9.10.2 patches. Contains notes for: !11938: Escape multiple arguments in the settings file !12201: RTS: Emit warning when -M < -H !12495: Update autoconf scripts !12500: GHCi: support cross-module inlining of breakpoints !12550: wasm: use scheduler.postTask() for context switch when available !12569: Split out the C-- preprocessor, and make it pass -g0 - - - - - 1016a4b1 by Andreas Klebinger at 2024-12-18T16:28:17+01:00 -fprof-late: Only insert cost centres on functions/non-workfree cafs. They are usually useless and doing so for data values comes with a large compile time/code size overhead. Fixes #24103 (cherry picked from commit 9b4129a580e6c1d18197ef2ed3a8b89d52a2b133) - - - - - 0c850206 by Ben Gamari at 2024-12-18T16:28:17+01:00 IPE: Eliminate dependency on Read Instead of encoding the closure type as decimal string we now simply represent it as an integer, eliminating the need for `Read` in `GHC.Internal.InfoProv.Types.peekInfoProv`. Closes #24504. ------------------------- Metric Decrease: T24602_perf_size size_hello_artifact ------------------------- (cherry picked from commit ab840ce6f83a74f36dac939d087b69f97404399a) - - - - - c15c6a8d by Cheng Shao at 2024-12-18T16:28:17+01:00 testsuite: fix testwsdeque with recent clang This patch fixes compilation of testwsdeque.c with recent versions of clang, which will fail with the error below: ``` testwsdeque.c:95:33: error: warning: format specifies type 'long' but the argument has type 'void *' [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~~ ^ testwsdeque.c:95:39: error: warning: format specifies type 'int' but the argument has type 'StgWord' (aka 'unsigned long') [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~ ^~~ | %lu testwsdeque.c:133:42: error: error: incompatible function pointer types passing 'void (void *)' to parameter of type 'OSThreadProc *' (aka 'void *(*)(void *)') [-Wincompatible-function-pointer-types] 133 | createOSThread(&ids[n], "thief", thief, (void*)(StgWord)n); | ^~~~~ /workspace/ghc/_build/stage1/lib/../lib/x86_64-linux-ghc-9.11.20240502/rts-1.0.2/include/rts/OSThreads.h:193:51: error: note: passing argument to parameter 'startProc' here 193 | OSThreadProc *startProc, void *param); | ^ 2 warnings and 1 error generated. ``` (cherry picked from commit a9979f55d0f688fabd25ee318e44b9addd904988) - - - - - 3329ca03 by Cheng Shao at 2024-12-18T16:28:17+01:00 ghc-heap: fix typo in ghc-heap cbits (cherry picked from commit 2b1af08b94024c104b54eadd710855e9f8a90fb6) - - - - - a15b3383 by doyougnu at 2024-12-18T16:28:17+01:00 testsuite: expand size testing infrastructure - closes #24191 - adds windows_skip, wasm_skip, wasm_arch, find_so, _find_so - path_from_ghcPkg, collect_size_ghc_pkg, collect_object_size, find_non_inplace functions to testsuite - adds on_windows and req_dynamic_ghc predicate to testsuite The design is to not make the testsuite too smart and simply offload to ghc-pkg for locations of object files and directories. (cherry picked from commit 9bae34d87f6c978e03031c549920071857c9080c) - - - - - 4b5b67a4 by Matthew Pickering at 2024-12-18T16:28:17+01:00 tests: Widen acceptance window for dir and so size tests These are testing things which are sometimes out the control of a GHC developer. Therefore we shouldn't fail CI if something about these dependencies change because we can't do anything about it. It is still useful to have these statistics for visualisation in grafana though. Ticket #24759 (cherry picked from commit c49493f242fc78fbf23ef3642df531a19c3b4b24) - - - - - 216ad9f9 by Matthew Pickering at 2024-12-18T16:28:17+01:00 Disable rts_so test It has already manifested large fluctuations and destabilising CI Fixes #24762 (cherry picked from commit 9562808d02db67838844d874c632f18af904949c) - - - - - 20552645 by Torsten Schmits at 2024-12-18T16:28:17+01:00 refactor quadratic search in warnMissingHomeModules (cherry picked from commit bc672166acd8f2815d58b6d214e69373abec4486) - - - - - 158c9dbf by Torsten Schmits at 2024-12-18T16:28:17+01:00 add test that runs MakeDepend on thousands of modules (cherry picked from commit 7875e8cbe5d9b69a1a77354317b2bf9478172686) - - - - - ee3e6c79 by Matthew Pickering at 2024-12-18T16:28:17+01:00 driver: Fix -Wmissing-home-modules when multiple units have the same module name It was assumed that module names were unique but that isn't true with multiple units. The fix is quite simple, maintain a set of `(ModuleName, UnitId)` and query that to see whether the module has been specified. Fixes #25122 (cherry picked from commit 951ce3d5904a1d34d49787d444f99e251e24d4e7) - - - - - 1faf2c60 by Sylvain Henry at 2024-12-18T16:28:17+01:00 Reverse arguments to stgCallocBytes (fix #24828) (cherry picked from commit 6838a7c32ca29b5d44adc9d6280d3a960f31be7c) - - - - - 6d00956c by Ben Gamari at 2024-12-18T16:28:17+01:00 rts: Fix size of StgOrigThunkInfo frames Previously the entry code of the `stg_orig_thunk` frame failed to account for the size of the profiling header as it hard-coded the frame size. Fix this. Fixes #24809. (cherry picked from commit 6d7e6ad803be11cb7a79dca727c37e4ef21cda4b) - - - - - 0be2daaf by Fendor at 2024-12-18T16:28:17+01:00 Add regression test T24809 for stg_orig_thunk_info_frame size (cherry picked from commit c645fe406cd4a3f4c152e51dfbcdeeb5e2930fb1) - - - - - 80afd1a9 by Andreas Klebinger at 2024-12-18T16:28:17+01:00 bindists: Check for existence of share folder before trying to copy it. This folder isn't distributed in windows bindists A lack of doing so resulted us copying loads of files twice. (cherry picked from commit 4181aa40fff5653a121cd2ece33ab0f7454d421d) - - - - - af123155 by Matthew Pickering at 2024-12-18T16:28:17+01:00 Remove ad-hoc installation of mingw toolchain in relocatable bindists This reverts 616ac30026e8dd7d2ebb98d92dde071eedf5d951 The choice about whether to install mingw is taken in the installation makefile. This is also broken on non-windows systems. The actual issue was the EnableDistroToolchain variable wasn't declared in mk/config.mk and therefore the check to install mingw was failing. (cherry picked from commit d216510e43deca5a9a221d2b799face293e38299) - - - - - 50974a94 by Cheng Shao at 2024-12-18T16:28:17+01:00 testsuite: fix T17920 for wasm backend T17920 was marked as fragile on wasm before; it can be trivially fixed by avoiding calling variadic printf() in cmm. (cherry picked from commit 7b4c19983bf6bc11b519b437a6204c38672721ea) - - - - - c8f98d01 by Simon Peyton Jones at 2024-12-18T16:28:17+01:00 Better skolemisation As #24810 showed, it is (a little) better to skolemise en-bloc, so that Note [Let-bound skolems] fires more often. See Note [Skolemisation en bloc] in GHC.Tc.Utils.Instantiate. (cherry picked from commit 3d9e4ce68a55f6bc5246d2d77729676010e85bbd) - - - - - e57d1433 by Ryan Scott at 2024-12-18T16:28:17+01:00 Add missing parenthesizePat in cvtp We need to ensure that the output of `cvtp` is parenthesized (at precedence `sigPrec`) so that any pattern signatures with a surrounding pattern signature can parse correctly. Fixes #24837. (cherry picked from commit a3cd3a1d0d186f2aa4d0273c6b3e74a442de2ef0) - - - - - 05338430 by crumbtoo at 2024-12-18T16:28:17+01:00 user_guide: Fix typo in MultiWayIf chapter Close #24829 (cherry picked from commit c5e00c35927d574f71bf77449817b131d1749750) - - - - - 53eeffd6 by Cheng Shao at 2024-12-18T16:28:17+01:00 rts: fix missing function prototypes in ClosureMacros.h (cherry picked from commit 3ca72ad974169aa39f391774875a9cc2a77ee967) - - - - - bbe4accd by Cheng Shao at 2024-12-18T16:28:17+01:00 rts: use __builtin_offsetof to implement STG_FIELD_OFFSET This patch fixes the STG_FIELD_OFFSET macro definition by using __builtin_offsetof, which is what gcc/clang uses to implement offsetof in standard C. The previous definition that uses NULL pointer involves subtle undefined behavior in C and thus reported by UndefinedBehaviorSanitizer as well: ``` rts/Capability.h:243:58: runtime error: member access within null pointer of type 'Capability' (aka 'struct Capability_') SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Capability.h:243:58 ``` (cherry picked from commit 05c4fafbc1693164d5f06ed062fc73bbf3f78deb) - - - - - 4879286a by Cheng Shao at 2024-12-18T16:28:17+01:00 rts: fix an unaligned load in nonmoving gc This patch fixes an unaligned load in nonmoving gc by ensuring the closure address is properly untagged first before attempting to prefetch its header. The unaligned load is reported by UndefinedBehaviorSanitizer: ``` rts/sm/NonMovingMark.c:921:9: runtime error: member access within misaligned address 0x0042005f3a71 for type 'StgClosure' (aka 'struct StgClosure_'), which requires 8 byte alignment 0x0042005f3a71: note: pointer points here 00 00 00 98 43 13 8e 12 7f 00 00 50 3c 5f 00 42 00 00 00 58 17 b7 92 12 7f 00 00 89 cb 5e 00 42 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/NonMovingMark.c:921:9 ``` This issue had previously gone unnoticed since it didn't really harm runtime correctness, the invalid header address directly loaded from a tagged pointer is only used as prefetch address and will not cause segfaults. However, it still should be corrected because the prefetch would be rendered useless by this issue, and untagging only involves a single bitwise operation without memory access so it's cheap enough to add. (cherry picked from commit c77a48af6e1f38337b305fec794e8c999f1c7f3a) - - - - - 59b84e0f by Cheng Shao at 2024-12-18T16:28:17+01:00 rts: ensure gc_thread/gen_workspace is allocated with proper alignment gc_thread/gen_workspace are required to be aligned by 64 bytes. However, this property has not been properly enforced before, and numerous alignment violations at runtime has been caught by UndefinedBehaviorSanitizer that look like: ``` rts/sm/GC.c:1167:8: runtime error: member access within misaligned address 0x0000027a3390 for type 'gc_thread' (aka 'struct gc_thread_'), which requires 64 byte alignment 0x0000027a3390: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1167:8 rts/sm/GC.c:1184:13: runtime error: member access within misaligned address 0x0000027a3450 for type 'gen_workspace' (aka 'struct gen_workspace_'), which requires 64 byte alignment 0x0000027a3450: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1184:13 ``` This patch fixes the gc_thread/gen_workspace misalignment issue by explicitly allocating them with alignment constraint. (cherry picked from commit 7a660042395614e4b19534baf5b779f65059861e) - - - - - c4507307 by Cheng Shao at 2024-12-18T16:28:17+01:00 hadrian: disable PIC for in-tree GMP on wasm32 This patch disables PIC for in-tree GMP on wasm32 target. Enabling PIC unconditionally adds undesired code size and runtime overhead for wasm32. (cherry picked from commit f9c1ae122ec642c0d9236dffc971bc2d1ca38fba) - - - - - 794e71e1 by Cheng Shao at 2024-12-18T16:28:17+01:00 hadrian: disable in-tree gmp fft code path for wasm32 This patch disables in-tree GMP FFT code paths for wasm32 target in order to give up some performance of multiplying very large operands in exchange for reduced code size. (cherry picked from commit 1a32f82807ae01813f14bdf12fed75eb32799e18) - - - - - d08b9b83 by Cheng Shao at 2024-12-18T16:28:18+01:00 hadrian: build in-tree GMP with malloc-notreentrant on wasm32 This patch makes hadrian build in-tree GMP with the --enable-alloca=malloc-notreentrant configure option. We will only need malloc-reentrant when we have threaded RTS and SMP support on wasm32, which will take some time to happen, before which we should use malloc-notreentrant to avoid undesired runtime overhead. (cherry picked from commit 06277d56de91c8d21cbf71e8bc4096925b863acc) - - - - - ece0a0db by Andreas Klebinger at 2024-12-18T16:28:18+01:00 Add release notes for some backported patches. Add entries for the following backported MRs: !12498: -fprof-late: Don't add cost centres to static data. !12565: IPE: Eliminate dependency on Read !12591: ghc-heap: fix typo in ghc-heap cbits !12607: refactor quadratic search in warnMissingHomeModules !12621: rts: Fix size of StgOrigThunkInfo frames !12649 # bindists: Check for existence of shared folder before trying to copy it. !12653: Better skolemisation !12734: Various rts fixes for issues spotted by UndefinedBehaviorSanitizer !12592: hadrian: adjust in-tree GMP configure options for wasm32 - - - - - 1b847dec by Cheng Shao at 2024-12-18T16:28:18+01:00 hadrian: fix hadrian building with ghc-9.10.1 (cherry picked from commit be514bb48629747258416e602c8b00810b3863b0) - - - - - 7dd1423d by Cheng Shao at 2024-12-18T16:28:18+01:00 linters: fix lint-whitespace compilation with ghc-9.10.1 (cherry picked from commit ad38e954bf088b43fa1cecfeaf474b6b9c11e2ed) - - - - - 86723eed by Zubin Duggal at 2024-12-18T16:28:18+01:00 testsuite: Handle exceptions in framework_fail when testdir is not initialised When `framework_fail` is called before initialising testdir, it would fail with an exception reporting the testdir not being initialised instead of the actual failure. Ensure we report the actual reason for the failure instead of failing in this way. One way this can manifest is when trying to run a test that doesn't exist using `--only` (cherry picked from commit c56d728e1f8702db02cf7e7e3cdc567b3df47ac3) - - - - - 1d787538 by Arsen Arsenović at 2024-12-18T16:28:18+01:00 Add the cmm_cpp_is_gcc predicate to the testsuite A future C-- test called T24474-cmm-override-g0 relies on the GCC-specific behaviour of -g3 implying -dD, which, in turn, leads to it emitting #defines past the preprocessing stage. Clang, at least, does not do this, so the test would fail if ran on Clang. As the behaviour here being tested is ``-optCmmP-g3'' undoing effects of the workaround we apply as a fix for bug #24474, and the workaround was for GCC-specific behaviour, the test needs to be marked as fragile on other compilers. (cherry picked from commit 4d59abf295cd371448f22c1724b955dce4974302) - - - - - a73ffe72 by Ben Gamari at 2024-12-18T16:35:45+01:00 rts: Fix TSAN_ENABLED CPP guard This should be `#if defined(TSAN_ENABLED)`, not `#if TSAN_ENABLED`, lest we suffer warnings. (cherry picked from commit c8a4c050626f451461a3667589d40004b2547a1c) - - - - - a235a078 by Cheng Shao at 2024-12-18T16:35:56+01:00 rts: fix errors when compiling with TSAN This commit fixes rts compilation errors when compiling with TSAN: - xxx_FENCE macros are redefined and trigger CPP warnings. - Use SIZEOF_W. WORD_SIZE_IN_BITS is provided by MachDeps.h which Cmm.h doesn't include by default. (cherry picked from commit e91dad93ff50b429d5717c81fbd5fe20ff2defd9) - - - - - 6c30c754 by Cheng Shao at 2024-12-18T16:36:11+01:00 rts: fix clang-specific errors when compiling with TSAN This commit fixes clang-specific rts compilation errors when compiling with TSAN: - clang doesn't have -Wtsan flag - Fix prototype of ghc_tsan_* helper functions - __tsan_atomic_* functions aren't clang built-ins and sanitizer/tsan_interface_atomic.h needs to be included - On macOS, TSAN runtime library is libclang_rt.tsan_osx_dynamic.dylib, not libtsan. -fsanitize-thread as a link-time flag will take care of linking the TSAN runtime library anyway so remove tsan as an rts extra library (cherry picked from commit a9ab9455b0159c955ea8c38ac113e4cbe47d410f) - - - - - c05d1181 by Cheng Shao at 2024-12-18T16:36:58+01:00 compiler: fix github link to __tsan_memory_order in a comment (cherry picked from commit 865bd717cc4c63d6926138c5b8c71addcf70a1e7) - - - - - f39baa8c by Cheng Shao at 2024-12-18T16:38:32+01:00 ci: improve TSAN CI jobs - Run TSAN jobs with +thread_sanitizer_cmm which enables Cmm instrumentation as well. - Run TSAN jobs in deb12 which ships gcc-12, a reasonably recent gcc that @bgamari confirms he's using in #GHC:matrix.org. Ideally we should be using latest clang release for latest improvements in sanitizers, though that's left as future work. - Mark TSAN jobs as manual+allow_failure in validate pipelines. The purpose is to demonstrate that we have indeed at least fixed building of TSAN mode in CI without blocking the patch to land, and once merged other people can begin playing with TSAN using their own dev setups and feature branches. (cherry picked from commit 07cb627c8232f573bd6a8ea1b7c110ff3c1b5d22) - - - - - 51d3b2d0 by Andrei Borzenkov at 2024-12-19T15:44:28+01:00 Improve pattern to type pattern transformation (23739) `pat_to_type_pat` function now can handle more patterns: - TuplePat - ListPat - LitPat - NPat - ConPat Allowing these new constructors in type patterns significantly increases possible shapes of type patterns without `type` keyword. This patch also changes how lookups in `lookupOccRnConstr` are performed, because we need to fall back into types when we didn't find a constructor on data level to perform `ConPat` to type transformation properly. (cherry picked from commit 2c0f8ddbdf351ed84395afa04a2654a7cbe2ad35) - - - - - 164133ec by Andreas Klebinger at 2024-12-19T15:50:05+01:00 Removed a test whose change was not backported (T23764). - - - - - 4e89c144 by Sylvain Henry at 2024-12-19T15:51:07+01:00 Type-check default declarations before deriving clauses (#24566) See added Note and #24566. Default declarations must be type-checked before deriving clauses. (cherry picked from commit 52072f8e2121fe49a8367027efa3d8db32325f84) - - - - - 6601403b by Simon Peyton Jones at 2024-12-19T18:36:54+01:00 Print more info about kinds in error messages This fixes #24553, where GHC unhelpfully said error: [GHC-83865] • Expected kind ‘* -> * -> *’, but ‘Foo’ has kind ‘* -> * -> *’ See Note [Showing invisible bits of types in error messages] (cherry picked from commit b72705e9b2ae5575aef92ede6ff975bbbe43004d) - - - - - 1a7a0500 by Matthew Pickering at 2024-12-19T20:05:43+01:00 testsuite: workaround bug in python-3.12 There is some unexplained change to binding behaviour in python-3.12 which requires moving this import from the top-level into the scope of the function. I didn't feel any particular desire to do a deep investigation as to why this changed as the code works when modified like this. No one in the python IRC channel seemed to know what the problem was. (cherry picked from commit 43aa99b8169fc6d8552844cd6fa0ce3cd4308185) - - - - - 30 changed files: - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - compiler/GHC.hs - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/Core/LateCC.hs - compiler/GHC/Core/LateCC/TopLevelBinds.hs - compiler/GHC/Core/LateCC/Types.hs - compiler/GHC/Core/Map/Type.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/TyCo/Compare.hs - compiler/GHC/Core/TyCo/Ppr.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/Type.hs - compiler/GHC/Core/Unify.hs - compiler/GHC/Core/Utils.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Driver/Make.hs - compiler/GHC/Driver/Pipeline/Execute.hs - compiler/GHC/Driver/Session.hs - compiler/GHC/Hs/Type.hs - compiler/GHC/Iface/Recomp/Flags.hs - compiler/GHC/Iface/Type.hs - compiler/GHC/Rename/Env.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Runtime/Eval.hs - compiler/GHC/Runtime/Eval/Types.hs - compiler/GHC/Runtime/Interpreter.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/220f15b278acb09433b529cf91c10fc756f6e67e...1a7a0500b165a5f746691a37df1329c421b08b19 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/220f15b278acb09433b529cf91c10fc756f6e67e...1a7a0500b165a5f746691a37df1329c421b08b19 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 08:15:51 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 20 Dec 2024 03:15:51 -0500 Subject: [Git][ghc/ghc][wip/9.12-forward-ports] Bump array submodule for base bump Message-ID: <676527b7291c2_17b6885aeda8245f6@gitlab.mail> Zubin pushed to branch wip/9.12-forward-ports at Glasgow Haskell Compiler / GHC Commits: 2ac6a81f by Zubin Duggal at 2024-12-20T13:45:43+05:30 Bump array submodule for base bump - - - - - 1 changed file: - libraries/array Changes: ===================================== libraries/array ===================================== @@ -1 +1 @@ -Subproject commit 18dd1439815e43c3e8142cca7b4735c8ad9850ab +Subproject commit e7ffb82fd40134da21d7642a41568f32c77c1a04 View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2ac6a81f5edc7e7bcd22d51772200a9ec421556c -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2ac6a81f5edc7e7bcd22d51772200a9ec421556c You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 08:19:39 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 20 Dec 2024 03:19:39 -0500 Subject: [Git][ghc/ghc][wip/9.12-forward-ports] Bump stm submodule for base bump Message-ID: <6765289b356e4_17b6885aedbc2531c@gitlab.mail> Zubin pushed to branch wip/9.12-forward-ports at Glasgow Haskell Compiler / GHC Commits: d80620ed by Zubin Duggal at 2024-12-20T13:49:24+05:30 Bump stm submodule for base bump - - - - - 1 changed file: - libraries/stm Changes: ===================================== libraries/stm ===================================== @@ -1 +1 @@ -Subproject commit 07df1050ab5d45244f718eee8a512bb18e7066f6 +Subproject commit def18948f42a2eb8c34efdf65f7e614d1f6d5703 View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/d80620ed026615b611da73fbbcc2f4c7a611bed6 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/d80620ed026615b611da73fbbcc2f4c7a611bed6 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 08:26:28 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 20 Dec 2024 03:26:28 -0500 Subject: [Git][ghc/ghc][wip/9.12-forward-ports] Bump process submodule for base bump Message-ID: <67652a349bf10_17b68870317c2570@gitlab.mail> Zubin pushed to branch wip/9.12-forward-ports at Glasgow Haskell Compiler / GHC Commits: 87664908 by Zubin Duggal at 2024-12-20T13:56:20+05:30 Bump process submodule for base bump - - - - - 1 changed file: - libraries/process Changes: ===================================== libraries/process ===================================== @@ -1 +1 @@ -Subproject commit b8c88fb5bbdebbcbb3e7c734f0c7515dd3cef84e +Subproject commit 9c3bfc214c72bbd0c8a30a1c41465deed0feaf47 View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/87664908800ca09e8a2228347b92e04f22a95a6e -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/87664908800ca09e8a2228347b92e04f22a95a6e You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 09:38:48 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 20 Dec 2024 04:38:48 -0500 Subject: [Git][ghc/ghc][wip/9.12-forward-ports] 9 commits: Bump ghc-prim and template-haskell versions Message-ID: <67653b2832138_3cb08411e0a4542d6@gitlab.mail> Zubin pushed to branch wip/9.12-forward-ports at Glasgow Haskell Compiler / GHC Commits: f8ab0481 by Zubin Duggal at 2024-12-20T15:07:59+05:30 Bump ghc-prim and template-haskell versions Also bump exceptions and text submodule (cherry picked from commit 6fc1fa3bdc8f53acdb19e47145789274060e498f) - - - - - 97f92984 by Zubin Duggal at 2024-12-20T15:08:33+05:30 Bump Cabal submodule to 3.14.1.0 (cherry picked from commit 5c9c3e3f79a79bb6d9a77a17c716dc3a0bcbd2aa) - - - - - 786793bc by Zubin Duggal at 2024-12-20T15:08:33+05:30 Bump directory submodule to 0.12.2.0 (cherry picked from commit 897906265db37af34ae2aaa016cec417f263407b) - - - - - 1b125ead by Zubin Duggal at 2024-12-20T15:08:33+05:30 Fix TH changelog - - - - - d81b28e9 by Zubin Duggal at 2024-12-20T15:08:33+05:30 release: copy index.html from correct directory (cherry picked from commit cbfd0829cd61928976c9eb17ba4af18272466063) - - - - - e473b3f0 by Zubin Duggal at 2024-12-20T15:08:33+05:30 hadrian-multi: warn on unused imports os-string has redundant imports (cherry picked from commit dde3796be689ea57543936e22aa5ea4ef7ed995e) - - - - - 8a634725 by Zubin Duggal at 2024-12-20T15:08:33+05:30 Bump array submodule for base bump - - - - - 2bb9fcb6 by Zubin Duggal at 2024-12-20T15:08:33+05:30 Bump stm submodule for base bump - - - - - 46a31b03 by Zubin Duggal at 2024-12-20T15:08:33+05:30 Bump process submodule for base bump - - - - - 19 changed files: - .gitlab-ci.yml - .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py - ghc/ghc-bin.cabal.in - libraries/Cabal - libraries/array - libraries/bytestring - libraries/exceptions - libraries/ghc-bignum/ghc-bignum.cabal - libraries/ghc-compact/ghc-compact.cabal - libraries/ghc-experimental/ghc-experimental.cabal.in - libraries/ghc-heap/ghc-heap.cabal.in - libraries/ghc-internal/ghc-internal.cabal.in - libraries/ghc-prim/ghc-prim.cabal - libraries/ghci/ghci.cabal.in - libraries/process - libraries/stm - libraries/template-haskell/changelog.md - libraries/template-haskell/template-haskell.cabal.in - libraries/text Changes: ===================================== .gitlab-ci.yml ===================================== @@ -444,7 +444,7 @@ hadrian-multi: # workaround for docker permissions - sudo chown ghc:ghc -R . variables: - GHC_FLAGS: "-Werror=-Wno-error=incomplete-record-selectors -Wwarn=deprecations" + GHC_FLAGS: "-Werror=-Wno-error=incomplete-record-selectors -Wwarn=deprecations -Wwarn=unused-imports" # -Wno-error=incomplete-record-selectors is present because -Wall now # includes -Wincomplete-record-selectors, and hadrian-multi has many, many # warnings about incomplete record selectors. A better fix would be to ===================================== .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py ===================================== @@ -132,7 +132,7 @@ def fetch_artifacts(release: str, pipeline_id: int, for f in doc_files: subprocess.run(['tar', '-xf', f, '-C', dest]) logging.info(f'extracted docs {f} to {dest}') - index_path = destdir / 'index.html' + index_path = destdir / 'docs' / 'index.html' index_path.replace(dest / 'index.html') elif job.name == 'hackage-doc-tarball': dest = dest_dir / 'hackage_docs' ===================================== ghc/ghc-bin.cabal.in ===================================== @@ -57,7 +57,7 @@ Executable ghc -- NB: this is never built by the bootstrapping GHC+libraries Build-depends: deepseq >= 1.4 && < 1.6, - ghc-prim >= 0.5.0 && < 0.12, + ghc-prim >= 0.5.0 && < 0.14, ghci == @ProjectVersionMunged@, haskeline == 0.8.*, exceptions == 0.10.*, ===================================== libraries/Cabal ===================================== @@ -1 +1 @@ -Subproject commit 6eb0369e3f736ef62192a5760a9fce3b1a989543 +Subproject commit 269fd808e5d80223a229b6b19edfe6f5b109007a ===================================== libraries/array ===================================== @@ -1 +1 @@ -Subproject commit 18dd1439815e43c3e8142cca7b4735c8ad9850ab +Subproject commit e7ffb82fd40134da21d7642a41568f32c77c1a04 ===================================== libraries/bytestring ===================================== @@ -1 +1 @@ -Subproject commit 453c1dc110720a366f90ef84dc2d75a5cd8c28e0 +Subproject commit d984ad00644c0157bad04900434b9d36f23633c5 ===================================== libraries/exceptions ===================================== @@ -1 +1 @@ -Subproject commit 0b6abb3ac433c7d1d5c6f6a5a45b37f7c486e33b +Subproject commit 8e55b720f45db91f4895f710863ef9dbc10fe569 ===================================== libraries/ghc-bignum/ghc-bignum.cabal ===================================== @@ -77,7 +77,7 @@ library ForeignFunctionInterface build-depends: - ghc-prim >= 0.5.1.0 && < 0.12 + ghc-prim >= 0.5.1.0 && < 0.14 hs-source-dirs: src/ include-dirs: include/ ===================================== libraries/ghc-compact/ghc-compact.cabal ===================================== @@ -39,7 +39,7 @@ library UnboxedTuples CPP - build-depends: ghc-prim >= 0.5.3 && < 0.12, + build-depends: ghc-prim >= 0.5.3 && < 0.14, base >= 4.9.0 && < 4.22, bytestring >= 0.10.6.0 && <0.13 ghc-options: -Wall ===================================== libraries/ghc-experimental/ghc-experimental.cabal.in ===================================== @@ -43,6 +43,6 @@ library other-extensions: build-depends: base >=4.20 && < 4.22, ghc-internal == @ProjectVersionForLib at .*, - ghc-prim >= 0.11 && < 0.12 + ghc-prim >= 0.11 && < 0.14 hs-source-dirs: src default-language: Haskell2010 ===================================== libraries/ghc-heap/ghc-heap.cabal.in ===================================== @@ -23,7 +23,7 @@ library default-language: Haskell2010 build-depends: base >= 4.9.0 && < 5.0 - , ghc-prim > 0.2 && < 0.12 + , ghc-prim > 0.2 && < 0.14 , rts == 1.0.* , containers >= 0.6.2.1 && < 0.8 ===================================== libraries/ghc-internal/ghc-internal.cabal.in ===================================== @@ -91,7 +91,7 @@ Library build-depends: rts == 1.0.*, - ghc-prim >= 0.11 && < 0.12, + ghc-prim >= 0.11 && < 0.14, ghc-bignum >= 1.0 && < 2.0 exposed-modules: ===================================== libraries/ghc-prim/ghc-prim.cabal ===================================== @@ -1,6 +1,6 @@ cabal-version: 2.2 name: ghc-prim -version: 0.11.0 +version: 0.13.0 -- NOTE: Don't forget to update ./changelog.md license: BSD-3-Clause license-file: LICENSE ===================================== libraries/ghci/ghci.cabal.in ===================================== @@ -90,7 +90,7 @@ library -- ghc-internal instead of ignoring the deprecation warning in GHCi.TH -- and GHCi.CreateBCO when we require ghc-internal of the bootstrap -- compiler - ghc-prim >= 0.5.0 && < 0.12, + ghc-prim >= 0.5.0 && < 0.14, binary == 0.8.*, bytestring >= 0.10 && < 0.13, containers >= 0.5 && < 0.8, ===================================== libraries/process ===================================== @@ -1 +1 @@ -Subproject commit b8c88fb5bbdebbcbb3e7c734f0c7515dd3cef84e +Subproject commit 9c3bfc214c72bbd0c8a30a1c41465deed0feaf47 ===================================== libraries/stm ===================================== @@ -1 +1 @@ -Subproject commit 07df1050ab5d45244f718eee8a512bb18e7066f6 +Subproject commit def18948f42a2eb8c34efdf65f7e614d1f6d5703 ===================================== libraries/template-haskell/changelog.md ===================================== @@ -9,9 +9,6 @@ * Extend `Exp` with `ForallE`, `ForallVisE`, `ConstraintedE`, introduce functions `forallE`, `forallVisE`, `constraintedE` (GHC Proposal #281). * `template-haskell` is no longer wired-in. All wired-in identifiers have been moved to `ghc-internal`. - -## 2.22.1.0 - * `Lift` instances were added for the `template-haskell` AST. ## 2.22.0.0 ===================================== libraries/template-haskell/template-haskell.cabal.in ===================================== @@ -3,7 +3,7 @@ -- template-haskell.cabal. name: template-haskell -version: 2.22.1.0 +version: 2.23.0.0 -- NOTE: Don't forget to update ./changelog.md license: BSD3 license-file: LICENSE ===================================== libraries/text ===================================== @@ -1 +1 @@ -Subproject commit ee0a8f8b9a4bd3fdad23e9ac0db56e7f08ce35cd +Subproject commit b86564cae8d7262c7c4e7afe7a9163c83de3f175 View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/87664908800ca09e8a2228347b92e04f22a95a6e...46a31b0354e81795cdd5c3b78518dedfb4df0f1f -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/87664908800ca09e8a2228347b92e04f22a95a6e...46a31b0354e81795cdd5c3b78518dedfb4df0f1f You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 09:43:27 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 20 Dec 2024 04:43:27 -0500 Subject: [Git][ghc/ghc][wip/9.12-forward-ports] 39 commits: LLVM: When emitting a vector literal with ppTypeLit, include the type information Message-ID: <67653c3f48988_3cb0843133b4546e0@gitlab.mail> Zubin pushed to branch wip/9.12-forward-ports at Glasgow Haskell Compiler / GHC Commits: 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 80f0e02d by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - 175a1355 by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - 8ef2dad6 by Simon Peyton Jones at 2024-12-17T02:48:09-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - e86b1b20 by Ben Gamari at 2024-12-17T13:51:39-05:00 testsuite: Use math.inf instead of division-by-zero This both more directly captures the intent and also fixes #25580. - - - - - 430d965a by Ben Gamari at 2024-12-17T13:52:15-05:00 rts: Fix incorrect format specifiers in era profiling Fixes #25581. - - - - - 267098ad by Andreas Klebinger at 2024-12-18T23:43:13-05:00 Document `-prof` and non `-prof` code being incompatible. Fixes #25518. - - - - - 04433916 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: output metadata fragment in CI (cherry picked from commit 52b58a660e735b20961d792d8fa9267f01247a50) - - - - - 7c78804e by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore (cherry picked from commit dc86785eb43afd1bd292287c064fb5ad94fe8c7f) - - - - - 1d72cfb2 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: still use centos for redhat <9 - - - - - 3f7ebc58 by Sylvain Henry at 2024-12-19T20:40:14-05:00 Merge ghc-bignum into ghc-internal (#24453) First step towards merging ghc-bignum and ghc-prim into ghc-internal. After this patch, ghc-bignum is deprecated and is just a shallow package reexporting modules from ghc-internal and base. Use those directly instead. Move `gmp` submodule into ghc-internal directory. - - - - - ee0150c2 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Improve performance of deriving Show Significantly improves performance of deriving Show instances by avoiding using the very polymorphic `.` operator in favour of inlining its definition. We were generating tons of applications of it, each which had 3 type arguments! Improves on #9557 ------------------------- Metric Decrease: InstanceMatching T12707 T3294 ------------------------ - - - - - 8b266671 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Don't eta expand cons when deriving Data This eta expansion was introduced with the initial commit for Linear types. I believe this isn't needed any longer. My guess is it is an artifact from the initial linear types implementation: data constructors are linear, but they shouldn't need to be eta expanded to be used as higher order functions. I suppose in the early days this wasn't true. For instance, this works now: data T x = T x f = \(x :: forall y. y -> T y) -> x True f T -- ok! T is linear, but can be passed where an unrestricted higher order function is expected. I recall there being some magic around to make this work for data constructors... Since this works, there's no need to eta_expand the data constructors in the derived Data instances. - - - - - ba95afab by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump base bound to 4.21 for GHC 9.12 (cherry picked from commit 473a201c6b55aea5bf9c9db0836a66ea1b657e04) - - - - - 04ed2abc by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump binary submodule to 0.8.9.2 (cherry picked from commit 7199869a52ab45e8856658248bf807954d58cc20) (cherry picked from commit ec2f40b45c1a3d82d17a2fc07e9ddb9218bc3940) - - - - - 43ecc800 by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump exceptions submodule to 0.10.9 (cherry picked from commit f5b5d1dc2d326368e5b173d622630d77f019b629) - - - - - 46621347 by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump file-io submodule to 0.1.4 (cherry picked from commit ba786681de6ac5fa49938e2cd71a5988f0f40d1f) - - - - - b47b1ba4 by Zubin Duggal at 2024-12-20T15:12:17+05:30 bump os-string submodule to 2.0.6 (cherry picked from commit 3a7ffdbb832c045a55fd1ef24f546abdd9d9e30f) - - - - - cedc3e3b by Zubin Duggal at 2024-12-20T15:12:17+05:30 bump transformers submodule to 0.6.1.2 (cherry picked from commit 53b46fd437421b9e5a001edc6d1c427439d7714f) - - - - - 2ff623aa by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump directory submodule to v1.3.9.0 (cherry picked from commit 27dc2664c5404bb462092bb216c2c37b418fd1f8) - - - - - ae5c4dde by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump Win32 submodule to v2.14.1.0 (cherry picked from commit 80df88086180f5e39212b2feacf70a9d2b263c6c) - - - - - aa652b1f by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump filepath submodule to 1.5.3.0 (cherry picked from commit 29bfae2c58a7303a081a6e7956b9f55e5faf3eeb) - - - - - e6c35970 by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump file-io submodule to avoid usage of QuasiQuotes (cherry picked from commit 97b0dff223a6c4cc003adec448104c277f214645) - - - - - 276c50e6 by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump unix submodule to 2.8.6.0 (cherry picked from commit a1f56d6d6a99c100f88ef0a8b4d51298cf24a42d) - - - - - 309cda56 by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump os-string submodule to 2.0.8 (cherry picked from commit 0121b76fd52ea0c0ce5d07085bc195666b63c625) - - - - - 43717362 by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump file-io submodule to avoid usage of QuasiQuotes (cherry picked from commit 962ceb50c8a6fc370e1c0a267f5cd5562a8cf759) - - - - - 82b913a7 by Zubin Duggal at 2024-12-20T15:12:17+05:30 Bump filepath submodule to 1.5.4.0 (cherry picked from commit 7bc6877fd5d41c6d5900678ad5e73ed30f366569) - - - - - b8263436 by Zubin Duggal at 2024-12-20T15:12:18+05:30 Add haskeline to stage0Packages Otherwise we link against boot inplace and boot unix as boot haskeline depends on boot unix. (cherry picked from commit 90b493769ebdf3cd7be404d18462dc20ac1044df) - - - - - fd462ecb by Zubin Duggal at 2024-12-20T15:12:18+05:30 Bump file-io submodule to 0.1.5 (cherry picked from commit 9478b5aefe2877d58baf527edcf936dddbb955b7) - - - - - 5112c081 by Zubin Duggal at 2024-12-20T15:13:12+05:30 Bump ghc-prim and template-haskell versions Also bump exceptions and text submodule (cherry picked from commit 6fc1fa3bdc8f53acdb19e47145789274060e498f) - - - - - f482201b by Zubin Duggal at 2024-12-20T15:13:14+05:30 Bump Cabal submodule to 3.14.1.0 (cherry picked from commit 5c9c3e3f79a79bb6d9a77a17c716dc3a0bcbd2aa) - - - - - e4b1ab81 by Zubin Duggal at 2024-12-20T15:13:14+05:30 Bump directory submodule to 0.12.2.0 (cherry picked from commit 897906265db37af34ae2aaa016cec417f263407b) - - - - - 6d90f514 by Zubin Duggal at 2024-12-20T15:13:14+05:30 Fix TH changelog - - - - - 4d989900 by Zubin Duggal at 2024-12-20T15:13:14+05:30 release: copy index.html from correct directory (cherry picked from commit cbfd0829cd61928976c9eb17ba4af18272466063) - - - - - 66633134 by Zubin Duggal at 2024-12-20T15:13:14+05:30 hadrian-multi: warn on unused imports os-string has redundant imports (cherry picked from commit dde3796be689ea57543936e22aa5ea4ef7ed995e) - - - - - 4b671a3d by Zubin Duggal at 2024-12-20T15:13:14+05:30 Bump array submodule for base bump - - - - - ea3ac859 by Zubin Duggal at 2024-12-20T15:13:14+05:30 Bump stm submodule for base bump - - - - - be70f529 by Zubin Duggal at 2024-12-20T15:13:14+05:30 Bump process submodule for base bump - - - - - 30 changed files: - .gitlab-ci.yml - .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - .gitmodules - compiler/GHC/Builtin/Names.hs - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/Simplify/Utils.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/Opt/Specialise.hs - compiler/GHC/Core/SimpleOpt.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/Type.hs - compiler/GHC/CoreToStg/Prep.hs - compiler/GHC/Data/Unboxed.hs - compiler/GHC/Driver/Config/Core/Rules.hs - compiler/GHC/Hs/Dump.hs - compiler/GHC/Hs/Utils.hs - compiler/GHC/Llvm/Ppr.hs - compiler/GHC/Rename/Bind.hs - compiler/GHC/Rename/Env.hs - compiler/GHC/Tc/Deriv/Generate.hs - compiler/GHC/Tc/Gen/Default.hs - compiler/GHC/Tc/Gen/Expr.hs - compiler/GHC/Tc/Gen/Head.hs - compiler/GHC/Tc/Solver/Equality.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/46a31b0354e81795cdd5c3b78518dedfb4df0f1f...be70f529df86c1f0a5ba509415f5202bb7b8f862 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/46a31b0354e81795cdd5c3b78518dedfb4df0f1f...be70f529df86c1f0a5ba509415f5202bb7b8f862 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 11:27:51 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 20 Dec 2024 06:27:51 -0500 Subject: [Git][ghc/ghc][wip/9.12-forward-ports] Fix ghc-e005 after HasCallstack changes Message-ID: <676554b7e65a2_3cb084f0b2e85773@gitlab.mail> Zubin pushed to branch wip/9.12-forward-ports at Glasgow Haskell Compiler / GHC Commits: dfcfcbbf by Zubin Duggal at 2024-12-20T16:57:38+05:30 Fix ghc-e005 after HasCallstack changes (cherry picked from commit 77f340a24561cea8a6f2ada296b3ea356ab1823c) - - - - - 1 changed file: - testsuite/tests/ghc-e/should_run/ghc-e005.stderr Changes: ===================================== testsuite/tests/ghc-e/should_run/ghc-e005.stderr ===================================== @@ -4,19 +4,3 @@ foo HasCallStack backtrace: error, called at ghc-e005.hs:12:10 in main:Main - - -HasCallStack backtrace: - throwIO, called at libraries/exceptions/src/Control/Monad/Catch.hs:371:12 in exceptions-0.10.7-inplace:Control.Monad.Catch - throwM, called at libraries/exceptions/src/Control/Monad/Catch.hs:490:21 in exceptions-0.10.7-inplace:Control.Monad.Catch - throwM, called at compiler/GHC/Driver/Monad.hs:167:54 in ghc-9.13-inplace:GHC.Driver.Monad - throwM, called at libraries/exceptions/src/Control/Monad/Catch.hs:490:21 in exceptions-0.10.7-inplace:Control.Monad.Catch - throwM, called at ghc/GHCi/UI/Monad.hs:295:15 in ghc-bin-9.13.20241115-inplace:GHCi.UI.Monad - throwM, called at libraries/exceptions/src/Control/Monad/Catch.hs:490:21 in exceptions-0.10.7-inplace:Control.Monad.Catch - throwM, called at libraries/exceptions/src/Control/Monad/Catch.hs:490:21 in exceptions-0.10.7-inplace:Control.Monad.Catch - throwM, called at libraries/exceptions/src/Control/Monad/Catch.hs:490:21 in exceptions-0.10.7-inplace:Control.Monad.Catch - throwM, called at libraries/exceptions/src/Control/Monad/Catch.hs:490:21 in exceptions-0.10.7-inplace:Control.Monad.Catch - throwM, called at libraries/exceptions/src/Control/Monad/Catch.hs:490:21 in exceptions-0.10.7-inplace:Control.Monad.Catch - throwM, called at libraries/haskeline/System/Console/Haskeline/InputT.hs:53:39 in haskeline-0.8.2.1-inplace:System.Console.Haskeline.InputT - throwM, called at ghc/GHCi/UI/Monad.hs:221:3 in ghc-bin-9.13.20241115-inplace:GHCi.UI.Monad - View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/dfcfcbbfa744330c712e48c501e7f9cbc905e854 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/dfcfcbbfa744330c712e48c501e7f9cbc905e854 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 13:00:26 2024 From: gitlab at gitlab.haskell.org (Matthew Pickering (@mpickering)) Date: Fri, 20 Dec 2024 08:00:26 -0500 Subject: [Git][ghc/ghc][wip/ghc-with-debug] 5388 commits: [haddock @ 2002-04-04 16:23:43 by simonmar] Message-ID: <67656a69b1733_45a5d3d95b42668e@gitlab.mail> Matthew Pickering pushed to branch wip/ghc-with-debug at Glasgow Haskell Compiler / GHC Commits: 2b39cd94 by Simon Marlow at 2002-04-04T16:23:43+00:00 [haddock @ 2002-04-04 16:23:43 by simonmar] This is Haddock, my stab at a Haskell documentation tool. It's not quite ready for release yet, but I'm putting it in the repository so others can take a look. It uses a locally modified version of the hssource parser, extended with support for GHC extensions and documentation annotations. - - - - - 99ede94f by Simon Marlow at 2002-04-04T16:24:10+00:00 [haddock @ 2002-04-04 16:24:10 by simonmar] forgot one file - - - - - 8363294c by Simon Marlow at 2002-04-05T13:58:15+00:00 [haddock @ 2002-04-05 13:58:15 by simonmar] Remap names in the exported declarations to be "closer" to the current module. eg. if an exported declaration mentions a type 'T' which is imported from module A then re-exported from the current module, then links from the type or indeed the documentation will point to the current module rather than module A. This is to support better hiding: module A won't be referred to in the generated output. - - - - - 1570cbc1 by Simon Marlow at 2002-04-05T13:58:23+00:00 [haddock @ 2002-04-05 13:58:23 by simonmar] update the TODO list - - - - - 3a62f96b by Simon Marlow at 2002-04-05T14:11:51+00:00 [haddock @ 2002-04-05 14:11:51 by simonmar] Fix the anchor for a class declaration - - - - - c5d9a471 by Simon Marlow at 2002-04-05T14:18:41+00:00 [haddock @ 2002-04-05 14:18:41 by simonmar] remove underlines on visited links - - - - - 97280525 by Simon Marlow at 2002-04-05T16:11:47+00:00 [haddock @ 2002-04-05 16:11:47 by simonmar] - Update to generate more correct HTML. - Use our own non-overloaded table combinators, as the overloaded versions were giving me a headache. The improved type safety caught several errors in the HTML generation. - - - - - 9acd3a4d by Simon Marlow at 2002-04-05T16:32:19+00:00 [haddock @ 2002-04-05 16:32:19 by simonmar] Add width property to the title, and add TD.children for the module contents page. - - - - - ec9a0847 by Simon Marlow at 2002-04-08T16:39:56+00:00 [haddock @ 2002-04-08 16:39:56 by simonmar] Fix a problem with exports of the form T(..). - - - - - e4627dc8 by Simon Marlow at 2002-04-08T16:41:38+00:00 [haddock @ 2002-04-08 16:41:37 by simonmar] - Add our own versions of Html & BlockTable for the time being. - Add support for generating an index to the HTML backend - - - - - 2d73fd75 by Simon Marlow at 2002-04-09T11:23:24+00:00 [haddock @ 2002-04-09 11:23:24 by simonmar] Add '-- /' as a synonym for '-- |', for compatibility with IDoc. - - - - - 3675464e by Simon Marlow at 2002-04-09T11:33:55+00:00 [haddock @ 2002-04-09 11:33:54 by simonmar] - add the <...> syntax for marking up URLs in documentation - Make the output for data & class declarations more compact when there aren't any documentation annotations on the individual methods or constructors respectively. - - - - - 5077f5b1 by Simon Marlow at 2002-04-09T11:36:04+00:00 [haddock @ 2002-04-09 11:36:04 by simonmar] Update the TODO list - - - - - 9e83c54d by Simon Marlow at 2002-04-10T10:50:06+00:00 [haddock @ 2002-04-10 10:50:06 by simonmar] Use explicit 'px' suffix on pixel sizes; IE seems to prefer them - - - - - 052de51c by Simon Marlow at 2002-04-10T13:23:13+00:00 [haddock @ 2002-04-10 13:23:13 by simonmar] Lex URLs as a single token to avoid having to escape special characters inside the URL string. - - - - - 47187edb by Simon Marlow at 2002-04-10T13:23:55+00:00 [haddock @ 2002-04-10 13:23:55 by simonmar] Not sure why I made the constructor name for a record declaration into a TyCls name, but change it back into a Var name anyhow. - - - - - 3dc6aa81 by Simon Marlow at 2002-04-10T13:26:10+00:00 [haddock @ 2002-04-10 13:26:09 by simonmar] Lots of changes, including: - add index support to the HTML backend - clean up the renamer, put it into a monad - propogate unresolved names to the top level and report them in a nicer way - various bugfixes - - - - - c2a70a72 by Simon Marlow at 2002-04-10T13:32:39+00:00 [haddock @ 2002-04-10 13:32:39 by simonmar] Skeleton documentation - - - - - 50c98d17 by Simon Marlow at 2002-04-10T13:37:23+00:00 [haddock @ 2002-04-10 13:37:23 by simonmar] Update the TODO list, separate into pre-1.0 and post-1.0 items - - - - - f3778be6 by Simon Marlow at 2002-04-10T14:30:58+00:00 [haddock @ 2002-04-10 14:30:58 by simonmar] Add an introduction - - - - - cfbaf9f7 by Simon Marlow at 2002-04-10T14:59:51+00:00 [haddock @ 2002-04-10 14:59:51 by simonmar] Sort the module tree - - - - - 76bd7b34 by Simon Marlow at 2002-04-10T15:50:11+00:00 [haddock @ 2002-04-10 15:50:10 by simonmar] Generate a little table of contents at the top of the module doc (only if the module actually contains some section headings, though). - - - - - bb8560a1 by Simon Marlow at 2002-04-10T16:10:26+00:00 [haddock @ 2002-04-10 16:10:26 by simonmar] Now we understand (or at least don't barf on) type signatures in patterns such as you might find when scoped type variables are in use. - - - - - 86c2a026 by Simon Marlow at 2002-04-10T16:10:49+00:00 [haddock @ 2002-04-10 16:10:49 by simonmar] more updates - - - - - 1c052b0e by Simon Marlow at 2002-04-10T16:28:05+00:00 [haddock @ 2002-04-10 16:28:05 by simonmar] Parse errors in doc strings are now reported as warnings rather that causing the whole thing to fall over. It still needs cleaning up (the warning is emitted with trace) but this will do for the time being. - - - - - ace03e8f by Simon Marlow at 2002-04-10T16:38:03+00:00 [haddock @ 2002-04-10 16:38:03 by simonmar] update again - - - - - 69006c3e by Simon Marlow at 2002-04-11T13:38:02+00:00 [haddock @ 2002-04-11 13:38:02 by simonmar] mention Opera - - - - - fe9b10f8 by Simon Marlow at 2002-04-11T13:40:31+00:00 [haddock @ 2002-04-11 13:40:30 by simonmar] - copy haddock.css into the same place as the generated HTML - new option: --css <file> specifies the style sheet to use - new option: -o <dir> specifies the directory in which to generate the output. - because Haddock now needs to know where to find its default stylesheet, we have to have a wrapper script and do the haddock-inplace thing (Makefile code copied largely from fptools/happy). - - - - - 106adbbe by Simon Marlow at 2002-04-24T15:12:41+00:00 [haddock @ 2002-04-24 15:12:41 by simonmar] Stop slurping comment lines when we see a row of dashes longer than length 2: these are useful as separators. - - - - - 995d3f9e by Simon Marlow at 2002-04-24T15:14:12+00:00 [haddock @ 2002-04-24 15:14:11 by simonmar] Grok the kind of module headers we use in fptools/libraries, and pass the "portability", "stability", and "maintainer" strings through into the generated HTML. If the module header doesn't match the pattern, then we don't include the info in the HTML. - - - - - e14da136 by Simon Marlow at 2002-04-24T15:16:57+00:00 [haddock @ 2002-04-24 15:16:57 by simonmar] Done module headers now. - - - - - 2ca8dfd4 by Simon Marlow at 2002-04-24T15:57:48+00:00 [haddock @ 2002-04-24 15:57:47 by simonmar] Handle gcons in export lists (a common extension). - - - - - 044cea81 by Simon Marlow at 2002-04-25T14:20:12+00:00 [haddock @ 2002-04-25 14:20:12 by simonmar] Add the little lambda icon - - - - - 63955027 by Simon Marlow at 2002-04-25T14:40:05+00:00 [haddock @ 2002-04-25 14:40:05 by simonmar] - Add support for named chunks of documentation which can be referenced from the export list. - Copy the icon from $libdir to the destination in HTML mode. - - - - - 36e3f913 by Simon Marlow at 2002-04-25T16:48:36+00:00 [haddock @ 2002-04-25 16:48:36 by simonmar] More keyboard bashing - - - - - 7ae18dd0 by Simon Marlow at 2002-04-26T08:43:33+00:00 [haddock @ 2002-04-26 08:43:33 by simonmar] Package util reqd. to compile with 4.08.2 - - - - - bbd5fbab by Simon Marlow at 2002-04-26T10:13:00+00:00 [haddock @ 2002-04-26 10:13:00 by simonmar] Include $(GHC_HAPPY_OPTS) when compiling HsParser - - - - - 31c53d79 by Simon Marlow at 2002-04-26T11:18:57+00:00 [haddock @ 2002-04-26 11:18:56 by simonmar] - support for fundeps (partially contributed by Brett Letner - thanks Brett). - make it build with GHC 4.08.2 - - - - - c415ce76 by Simon Marlow at 2002-04-26T13:15:02+00:00 [haddock @ 2002-04-26 13:15:02 by simonmar] Move the explicit formatting of the little table for the stability/portability/maintainer info from the HTML into the CSS, and remove the explicit table size (just right-align it). - - - - - 520ee21a by Simon Marlow at 2002-04-26T16:01:44+00:00 [haddock @ 2002-04-26 16:01:44 by simonmar] Yet more keyboard bashing - this is pretty much complete now. - - - - - 2ae37179 by Simon Marlow at 2002-04-26T16:02:14+00:00 [haddock @ 2002-04-26 16:02:14 by simonmar] Add a couple of things I forgot about - - - - - b7211e04 by Simon Marlow at 2002-04-29T15:28:12+00:00 [haddock @ 2002-04-29 15:28:12 by simonmar] bugfix for declBinders on a NewTypeDecl - - - - - 640c154a by Simon Marlow at 2002-04-29T15:28:54+00:00 [haddock @ 2002-04-29 15:28:54 by simonmar] Allow '-- |' style annotations on constructors and record fields. - - - - - 393f258a by Simon Marlow at 2002-04-29T15:37:32+00:00 [haddock @ 2002-04-29 15:37:32 by simonmar] syntax fix - - - - - 8a2c2549 by Simon Marlow at 2002-04-29T15:37:48+00:00 [haddock @ 2002-04-29 15:37:48 by simonmar] Add an example - - - - - db88f8a2 by Simon Marlow at 2002-04-29T15:55:46+00:00 [haddock @ 2002-04-29 15:55:46 by simonmar] remove a trace - - - - - 2b0248e0 by Simon Marlow at 2002-04-29T15:56:19+00:00 [haddock @ 2002-04-29 15:56:19 by simonmar] Fix for 'make install' - - - - - 120453a0 by Simon Marlow at 2002-04-29T15:56:39+00:00 [haddock @ 2002-04-29 15:56:39 by simonmar] Install the auxilliary bits - - - - - 950e6dbb by Simon Marlow at 2002-04-29T15:57:30+00:00 [haddock @ 2002-04-29 15:57:30 by simonmar] Add BinDist bits - - - - - 154b9d71 by Simon Marlow at 2002-05-01T11:02:52+00:00 [haddock @ 2002-05-01 11:02:52 by simonmar] update - - - - - ba6c39fa by Simon Marlow at 2002-05-01T11:03:26+00:00 [haddock @ 2002-05-01 11:03:26 by simonmar] Add another item - - - - - bacb5e33 by Simon Marlow at 2002-05-03T08:50:00+00:00 [haddock @ 2002-05-03 08:50:00 by simonmar] Fix some typos. - - - - - 54c87895 by Sven Panne at 2002-05-05T19:40:51+00:00 [haddock @ 2002-05-05 19:40:51 by panne] As a temporary hack/workaround for a bug in GHC's simplifier, don't pass Happy the -c option for generating the parsers in this subdir. Furthermore, disable -O for HaddocParse, too. - - - - - e6c08703 by Simon Marlow at 2002-05-06T09:51:10+00:00 [haddock @ 2002-05-06 09:51:10 by simonmar] Add RPM spec file (thanks to Tom Moertel <tom-rpms at moertel.com>) - - - - - 7b8fa8e7 by Simon Marlow at 2002-05-06T12:29:26+00:00 [haddock @ 2002-05-06 12:29:26 by simonmar] Add missing type signature (a different workaround for the bug in GHC's simplifier). - - - - - cd0e300d by Simon Marlow at 2002-05-06T12:30:09+00:00 [haddock @ 2002-05-06 12:30:09 by simonmar] Remove workaround for simplifier bug in previous revision. - - - - - 687e68fa by Simon Marlow at 2002-05-06T12:32:32+00:00 [haddock @ 2002-05-06 12:32:32 by simonmar] Allow empty data declarations (another GHC extension). - - - - - 8f29f696 by Simon Marlow at 2002-05-06T12:49:21+00:00 [haddock @ 2002-05-06 12:49:21 by simonmar] Fix silly bug in named documentation block lookup. - - - - - 8e0059af by Simon Marlow at 2002-05-06T13:02:42+00:00 [haddock @ 2002-05-06 13:02:42 by simonmar] Add another named chunk with a different name - - - - - 68f8a896 by Simon Marlow at 2002-05-06T13:32:32+00:00 [haddock @ 2002-05-06 13:32:32 by simonmar] Be more lenient about extra paragraph breaks - - - - - 65fc31db by Simon Marlow at 2002-05-07T15:36:36+00:00 [haddock @ 2002-05-07 15:36:36 by simonmar] DocEmpty is a right and left-unit of DocAppend (remove it in the smart constructor). - - - - - adc81078 by Simon Marlow at 2002-05-07T15:37:15+00:00 [haddock @ 2002-05-07 15:37:15 by simonmar] Allow code blocks to be denoted with bird-tracks in addition to [...]. - - - - - 1283a3c1 by Simon Marlow at 2002-05-08T11:21:56+00:00 [haddock @ 2002-05-08 11:21:56 by simonmar] Add a facility for specifying options that affect Haddock's treatment of the module. Options are given at the top of the module in a comma-separated list, beginning with '-- #'. eg. -- # prune, hide, ignore-exports Options currently available, with their meanings: prune: ignore declarations which have no documentation annotations ignore-exports: act as if the export list were not specified (i.e. export everything local to the module). hide: do not include this module in the generated documentation, but propagate any exported definitions to modules which re-export them. There's a slight change in the semantics for re-exporting a full module by giving 'module M' in the export list: if module M does not have the 'hide' option, then the documentation will now just contain a reference to module M rather than the full inlined contents of that module. These features, and some other changes in the pipeline, are the result of discussions between myself and Manuel Chakravarty <chak at cse.unsw.edu.au> (author of IDoc) yesterday. Also: some cleanups, use a Writer monad to collect error messages in some places instead of just printing them with trace. - - - - - a2239cf5 by Simon Marlow at 2002-05-08T11:22:30+00:00 [haddock @ 2002-05-08 11:22:30 by simonmar] Update to test new features. - - - - - 6add955f by Simon Marlow at 2002-05-08T13:37:25+00:00 [haddock @ 2002-05-08 13:37:25 by simonmar] Change the markup for typewriter-font from [...] to @... at . The reasoning is that the '@' symbol is much less likely to be needed than square brackets, and we don't want to have to escape square brackets in code fragments. This will be mildly painful in the short term, but it's better to get the change out of the way as early as possible. - - - - - cda06447 by Simon Marlow at 2002-05-08T13:39:56+00:00 [haddock @ 2002-05-08 13:39:56 by simonmar] Allow nested-style comments to be used as documentation annotations too. eg. {-| ... -} is equivalent to -- | ... An extra space can also be left after the comment opener: {- | ... -}. The only version that isn't allowed is {-# ... -}, because this syntax overlaps with Haskell pragmas; use {- # ... -} instead. - - - - - db23f65e by Simon Marlow at 2002-05-08T14:48:41+00:00 [haddock @ 2002-05-08 14:48:39 by simonmar] Add support for existential quantifiers on constructors. - - - - - adce3794 by Simon Marlow at 2002-05-08T15:43:25+00:00 [haddock @ 2002-05-08 15:43:25 by simonmar] update - - - - - 62a1f436 by Simon Marlow at 2002-05-08T15:44:10+00:00 [haddock @ 2002-05-08 15:44:10 by simonmar] Update to version 0.2 - - - - - f6a24ba3 by Simon Marlow at 2002-05-09T08:48:29+00:00 [haddock @ 2002-05-09 08:48:29 by simonmar] typo - - - - - 9f9522a4 by Simon Marlow at 2002-05-09T10:33:14+00:00 [haddock @ 2002-05-09 10:33:14 by simonmar] oops, left out '/' from the special characters in the last change. - - - - - 14abcb39 by Simon Marlow at 2002-05-09T10:34:44+00:00 [haddock @ 2002-05-09 10:34:44 by simonmar] Fix buglet - - - - - b8d878be by Simon Marlow at 2002-05-09T10:35:00+00:00 [haddock @ 2002-05-09 10:35:00 by simonmar] Give a more useful instance of Show for Module. - - - - - f7bfd626 by Simon Marlow at 2002-05-09T10:37:07+00:00 [haddock @ 2002-05-09 10:37:07 by simonmar] The last commit to Main.lhs broke the delicate balance of laziness which was being used to avoid computing the dependency graph of modules. So I finally bit the bullet and did a proper topological sort of the module graph, which turned out to be easy (stealing the Digraph module from GHC - this really ought to be in the libraries somewhere). - - - - - b481c1d0 by Simon Marlow at 2002-05-09T10:37:25+00:00 [haddock @ 2002-05-09 10:37:25 by simonmar] another item done - - - - - 032e2b42 by Simon Marlow at 2002-05-09T10:44:15+00:00 [haddock @ 2002-05-09 10:44:15 by simonmar] Don't consider a module re-export as having documentation, for the purposes of deciding whether we need a Synopsis section or not. - - - - - 5fb45e92 by Simon Marlow at 2002-05-09T11:10:55+00:00 [haddock @ 2002-05-09 11:10:55 by simonmar] Add a special case for list types in ppHsAType - - - - - 1937e428 by Simon Marlow at 2002-05-09T12:43:06+00:00 [haddock @ 2002-05-09 12:43:06 by simonmar] Type synonyms can accept a ctype on the RHS, to match GHC. - - - - - 0f16ce56 by Simon Marlow at 2002-05-09T12:45:19+00:00 [haddock @ 2002-05-09 12:45:19 by simonmar] Add 'stdcall' keyword - - - - - 29b0d7d2 by Simon Marlow at 2002-05-09T13:35:45+00:00 [haddock @ 2002-05-09 13:35:45 by simonmar] Add System Requirements section - - - - - bf14dddd by Simon Marlow at 2002-05-09T13:36:11+00:00 [haddock @ 2002-05-09 13:36:11 by simonmar] Test existential types, amongst other things - - - - - 502f8f6f by Simon Marlow at 2002-05-09T13:37:35+00:00 [haddock @ 2002-05-09 13:37:35 by simonmar] Print the module name in a doc-string parse error - - - - - ca1f8d49 by Simon Marlow at 2002-05-09T13:38:04+00:00 [haddock @ 2002-05-09 13:38:04 by simonmar] Add dependency - - - - - 8d3d91ff by Simon Marlow at 2002-05-09T15:37:57+00:00 [haddock @ 2002-05-09 15:37:57 by simonmar] Add the changelog/release notes - - - - - f3960959 by Simon Marlow at 2002-05-09T15:47:47+00:00 [haddock @ 2002-05-09 15:47:47 by simonmar] mention the backquote-style of markup - - - - - 089fb6e6 by Simon Marlow at 2002-05-09T15:59:45+00:00 [haddock @ 2002-05-09 15:59:45 by simonmar] update - - - - - bdd3be0b by Simon Marlow at 2002-05-09T15:59:56+00:00 [haddock @ 2002-05-09 15:59:56 by simonmar] Document changes since 0.1 - - - - - 00fc4af8 by Simon Marlow at 2002-05-10T08:22:48+00:00 [haddock @ 2002-05-10 08:22:48 by simonmar] oops, update to version 0.2 - - - - - a8a79041 by Simon Marlow at 2002-05-10T16:05:08+00:00 [haddock @ 2002-05-10 16:05:08 by simonmar] Only include a mini-contents if there are 2 or more sections - - - - - 06653319 by Simon Marlow at 2002-05-13T09:13:12+00:00 [haddock @ 2002-05-13 09:13:12 by simonmar] fix typos - - - - - 1402b19b by Simon Marlow at 2002-05-13T10:14:22+00:00 [haddock @ 2002-05-13 10:14:22 by simonmar] Allow backquote as the right-hand quote as well as the left-hand quote, as suggested by Dean Herrington. Clean up the grammar a litte. - - - - - dcd5320d by Simon Marlow at 2002-05-13T10:44:10+00:00 [haddock @ 2002-05-13 10:44:10 by simonmar] a couple more things, prioritise a bit - - - - - a90130c4 by Simon Marlow at 2002-05-13T15:19:03+00:00 [haddock @ 2002-05-13 15:19:03 by simonmar] Cope with datatypes which have documentation on the constructor but not the type itself, and records which have documentation on the fields but not the constructor. (Thanks to Ross Paterson for pointing out the bugs). - - - - - a774d432 by Simon Marlow at 2002-05-13T15:20:54+00:00 [haddock @ 2002-05-13 15:20:54 by simonmar] Fix one of the record examples - - - - - 2d1d5218 by Simon Marlow at 2002-05-15T12:44:35+00:00 [haddock @ 2002-05-15 12:44:35 by simonmar] Preserve the newline before a bird-track, but only within a paragraph. - - - - - 1554c09a by Simon Marlow at 2002-05-15T13:03:02+00:00 [haddock @ 2002-05-15 13:03:01 by simonmar] Reworking of the internals to support documenting function arguments (the Most Wanted new feature by the punters). The old method of keeping parsed documentation in a Name -> Doc mapping wasn't going to cut it for anntations on type components, where there's no name to attach the documentation to, so I've moved to storing all the documentation in the abstract syntax. Previously some of the documentation was left in the abstract syntax by the parser, but was later extracted into the mapping. In order to avoid having to parameterise the abstract syntax over the type of documentation stored in it, we have to parse the documentation at the same time as we parse the Haskell source (well, I suppose we could store 'Either String Doc' in the HsSyn, but that's clunky). One upshot is that documentation is now parsed eagerly, and documentation parse errors are fatal (but have better line numbers in the error message). The new story simplifies matters for the code that processes the source modules, because we don't have to maintain the extra Name->Doc mapping, and it should improve efficiency a little too. New features: - Function arguments and return values can now have doc annotations. - If you refer to a qualified name in a doc string, eg. 'IO.putStr', then Haddock will emit a hyperlink even if the identifier is not in scope, so you don't have to make sure everything referred to from the documentation is imported. - several bugs & minor infelicities fixed. - - - - - 57344dc3 by Simon Marlow at 2002-05-15T13:03:19+00:00 [haddock @ 2002-05-15 13:03:19 by simonmar] Bump to version 0.3 - - - - - b2791812 by Simon Marlow at 2002-05-15T13:03:41+00:00 [haddock @ 2002-05-15 13:03:41 by simonmar] update - - - - - fead183e by Simon Marlow at 2002-05-15T13:10:15+00:00 [haddock @ 2002-05-15 13:10:15 by simonmar] Rename Foo.hs to Test.hs, and add a Makefile - - - - - b0b1f89f by Simon Marlow at 2002-05-15T13:16:07+00:00 [haddock @ 2002-05-15 13:16:07 by simonmar] - Remove the note about function argument docs not being implemented - Note that qualified identifiers can be used to point to entities that aren't in scope. - - - - - 5665f31a by Simon Marlow at 2002-05-15T13:28:46+00:00 [haddock @ 2002-05-15 13:28:46 by simonmar] Patch to add support for GHC-style primitive strings ".."#, from Ross Paterson. - - - - - 0564505d by Simon Marlow at 2002-05-17T10:51:57+00:00 [haddock @ 2002-05-17 10:51:57 by simonmar] Fix bugs in qualified name handling (A.B.f was returned as B.f) - - - - - 10e7311c by Simon Marlow at 2002-05-21T10:24:52+00:00 [haddock @ 2002-05-21 10:24:52 by simonmar] - Use an alternate tabular layout for datatypes, which is more compact - Fix some problems with the function argument documentation - - - - - 2f91c2a6 by Simon Marlow at 2002-05-21T10:27:40+00:00 [haddock @ 2002-05-21 10:27:40 by simonmar] add a few more test cases - - - - - 01c2ddd2 by Simon Marlow at 2002-05-21T10:28:33+00:00 [haddock @ 2002-05-21 10:28:33 by simonmar] Rearrange a bit, and add support for tabular datatype rendering - - - - - a4e4c5f8 by Simon Marlow at 2002-05-27T09:03:52+00:00 [haddock @ 2002-05-27 09:03:51 by simonmar] Lots of changes: - instances of a class are listed with the class, and instances involving a datatype are listed with that type. Derived instances aren't included at the moment: the calculation to find the instance head for a derived instance is non-trivial. - some formatting changes; use rows with specified height rather than cellspacing in some places. - various fixes (source file links were wrong, amongst others) - - - - - 48722e68 by Simon Marlow at 2002-05-27T12:30:38+00:00 [haddock @ 2002-05-27 12:30:37 by simonmar] - Put function arguments *before* the doc for the function, as suggested by Sven Panne. This looks nicer when the function documentation is long. - Switch to using bold for binders at the definition site, and use underline for keywords. This makes the binder stand out more. - - - - - 657204d2 by Simon Marlow at 2002-05-27T13:19:49+00:00 [haddock @ 2002-05-27 13:19:49 by simonmar] Fix bug: we weren't renaming HsDocCommentNamed in renameDecl - - - - - 592aae66 by Simon Marlow at 2002-05-27T14:10:27+00:00 [haddock @ 2002-05-27 14:10:27 by simonmar] Fix some bugs in the rendering of qualified type signatures. - - - - - 69c8f763 by Simon Marlow at 2002-05-27T14:36:45+00:00 [haddock @ 2002-05-27 14:36:45 by simonmar] warning message tweak - - - - - 16e64e21 by Simon Marlow at 2002-05-27T14:53:53+00:00 [haddock @ 2002-05-27 14:53:53 by simonmar] hyperlinked identifiers should be in <tt> - - - - - 8d5e4783 by Simon Marlow at 2002-05-27T15:56:45+00:00 [haddock @ 2002-05-27 15:56:45 by simonmar] Do something sensible for modules which don't export anything (except instances). - - - - - 9d3ef811 by Simon Marlow at 2002-05-28T10:12:50+00:00 [haddock @ 2002-05-28 10:12:50 by simonmar] Rename the module documentation properly (bug reported by Sven Panne). - - - - - ef03a1cc by Simon Marlow at 2002-05-28T10:13:04+00:00 [haddock @ 2002-05-28 10:13:04 by simonmar] Add some more test cases - - - - - 92baa0e8 by Simon Marlow at 2002-05-28T11:17:55+00:00 [haddock @ 2002-05-28 11:17:55 by simonmar] If an identifier doesn't lex, then just replace it by a DocString. - - - - - a3156213 by Simon Marlow at 2002-05-28T16:16:19+00:00 [haddock @ 2002-05-28 16:16:19 by simonmar] Only link to names in the current module which are actually listed in the documentation. A name may be exported but not present in the documentation if it is exported as part of a 'module M' export specifier. - - - - - 31acf941 by Simon Marlow at 2002-05-28T16:17:11+00:00 [haddock @ 2002-05-28 16:17:11 by simonmar] update - - - - - 7e474ebf by Sigbjorn Finne at 2002-05-28T22:42:08+00:00 [haddock @ 2002-05-28 22:42:08 by sof] Handle lone occurrences of '/', e.g., -- | This/that. [did this in the lexer rather than in the parser, as I couldn't see a way not to introduce an S/R conflict that way.] - - - - - 093f7e53 by Simon Marlow at 2002-05-29T09:09:49+00:00 [haddock @ 2002-05-29 09:09:49 by simonmar] Back out previous change until we can find a better way to do this. - - - - - 9234389c by Simon Marlow at 2002-05-29T13:19:06+00:00 [haddock @ 2002-05-29 13:19:06 by simonmar] Make the markup syntax a little more friendly: - single quotes are now interpreted literally unless they surround a valid Haskell identifier. So for example now there's no need to escape a single quote used as an apostrophe. - text to the right of a bird track is now literal (if you want marked-up text in a code block, use @...@). - - - - - b3333526 by Simon Marlow at 2002-05-29T13:38:51+00:00 [haddock @ 2002-05-29 13:38:51 by simonmar] Document recent changes to markup syntax - - - - - f93641d6 by Simon Marlow at 2002-05-29T15:27:18+00:00 [haddock @ 2002-05-29 15:27:18 by simonmar] Include the instances in abstract data types too - - - - - 613f21e3 by Simon Marlow at 2002-06-03T13:05:58+00:00 [haddock @ 2002-06-03 13:05:57 by simonmar] Allow exporting of individual class methods and record selectors. For these we have to invent the correct type signature, which we do in the simplest possible way (i.e. no context reduction nonsense in the class case). - - - - - 14b36807 by Simon Marlow at 2002-06-03T13:20:00+00:00 [haddock @ 2002-06-03 13:20:00 by simonmar] Fix linking to qualified names again (thanks to Sven Panne for pointing out the bug). - - - - - 95b10eac by Simon Marlow at 2002-06-03T13:46:48+00:00 [haddock @ 2002-06-03 13:46:48 by simonmar] Fix for exporting record selectors from a newtype declaration - - - - - 272f932e by Simon Marlow at 2002-06-03T13:56:38+00:00 [haddock @ 2002-06-03 13:56:38 by simonmar] update to version 0.3 - - - - - 1c0a3bed by Simon Marlow at 2002-06-03T14:05:07+00:00 [haddock @ 2002-06-03 14:05:07 by simonmar] Add changes in version 0.3 - - - - - 145b4626 by Simon Marlow at 2002-06-03T14:12:38+00:00 [haddock @ 2002-06-03 14:12:38 by simonmar] Render class names as proper binders - - - - - 052106b3 by Simon Marlow at 2002-06-03T14:15:10+00:00 [haddock @ 2002-06-03 14:15:10 by simonmar] update, and separate into bugs, features, and cosmetic items. - - - - - 854f4914 by Simon Marlow at 2002-06-03T14:16:13+00:00 [haddock @ 2002-06-03 14:16:13 by simonmar] More test cases - - - - - 466922c8 by Simon Marlow at 2002-06-03T14:16:56+00:00 [haddock @ 2002-06-03 14:16:56 by simonmar] Example from the paper - - - - - 9962a045 by Simon Marlow at 2002-06-03T14:17:49+00:00 [haddock @ 2002-06-03 14:17:49 by simonmar] A debugging version of the style-sheet, which gives some tables coloured backgrounds so we can see what's going on. - - - - - f16b79db by Simon Marlow at 2002-06-03T14:19:46+00:00 [haddock @ 2002-06-03 14:19:46 by simonmar] typo - - - - - 620db27b by Simon Marlow at 2002-06-03T14:48:32+00:00 [haddock @ 2002-06-03 14:48:32 by simonmar] oops, fix markup bugs - - - - - 53fd105c by Simon Marlow at 2002-06-05T09:05:07+00:00 [haddock @ 2002-06-05 09:05:07 by simonmar] Keep foreign imports when there is no export list (bug reported by Sven Panne). - - - - - 6d98989c by Simon Marlow at 2002-06-05T09:12:02+00:00 [haddock @ 2002-06-05 09:12:02 by simonmar] Identifiers in single quotes can be symbol names too (bug reported by Hal Daume). - - - - - 001811e5 by Sven Panne at 2002-06-08T14:03:36+00:00 [haddock @ 2002-06-08 14:03:36 by panne] Tiny workaround for the fact that Haddock currently ignores HsImportSpecs: Let the local_orig_env take precedence. This is no real solution at all, but improves things sometimes, e.g. in my GLUT documentation. :-) - - - - - 504d19c9 by Simon Marlow at 2002-06-11T09:23:25+00:00 [haddock @ 2002-06-11 09:23:25 by simonmar] portability nit - - - - - e13b5af4 by Simon Marlow at 2002-06-20T12:38:07+00:00 [haddock @ 2002-06-20 12:38:07 by simonmar] Empty declaration fixes. - - - - - f467a9b6 by Simon Marlow at 2002-06-20T12:39:02+00:00 [haddock @ 2002-06-20 12:39:01 by simonmar] Add support for a "prologue" - a description for the whole library, placed on the contents page before the module list. - - - - - b8dbfe20 by Simon Marlow at 2002-06-21T12:43:06+00:00 [haddock @ 2002-06-21 12:43:06 by simonmar] When we have a single code block paragraph, don't place it in <pre>..</pre>, just use <tt>..</tt> to avoid generating extra vertical white space in some browsers. - - - - - 4831dbbd by Simon Marlow at 2002-06-21T15:50:42+00:00 [haddock @ 2002-06-21 15:50:42 by simonmar] Add support for reading and writing interface files(!) This turned out to be quite easy, and necessary to get decent hyperlinks between the documentation for separate packages in the libraries. The functionality isn't quite complete yet: for a given package of modules, you'd like to say "the HTML for these modules lives in directory <dir>" (currently they are assumed to be all in the same place). Two new flags: --dump-interface=FILE dump an interface file in FILE --read-interface=FILE read interface from FILE an interface file describes *all* the modules being processed. Only the exported names are kept in the interface: if you re-export a name from a module in another interface the signature won't be copied. This is a compromise to keep the size of the interfaces sensible. Also, I added another useful option: --no-implicit-prelude avoids trying to import the Prelude. Previously this was the default, but now importing the Prelude from elsewhere makes sense if you also read in an interface containing the Prelude module, so Haddock imports the Prelude implicitly according to the Haskell spec. - - - - - d3640a19 by Sven Panne at 2002-06-23T14:54:00+00:00 [haddock @ 2002-06-23 14:54:00 by panne] Make it compile with newer GHCs - - - - - 780c506b by Sven Panne at 2002-06-23T15:44:31+00:00 [haddock @ 2002-06-23 15:44:31 by panne] Cleaned up build root handling and added more docs - - - - - 45290d2e by Simon Marlow at 2002-06-24T14:37:43+00:00 [haddock @ 2002-06-24 14:37:42 by simonmar] When reading an interface, allow a file path offset to be specified which represents the path to the HTML files for the modules specified by that interface. The path may be either relative (to the location of the HTML for this package), or absolute. The syntax is --read-interface=PATH,FILE where PATH is the path to the HTML, and FILE is the filename containing the interface. - - - - - 4e2b9ae6 by Simon Marlow at 2002-07-03T16:01:08+00:00 [haddock @ 2002-07-03 16:01:07 by simonmar] Handle import specs properly, include 'hiding'. Haddock now has a complete implementation of the Haskell module system (more or less; I won't claim it's 100% correct). - - - - - 9a9aa1a8 by Simon Marlow at 2002-07-03T16:18:16+00:00 [haddock @ 2002-07-03 16:18:16 by simonmar] Update - - - - - 560c3026 by Simon Marlow at 2002-07-04T14:56:10+00:00 [haddock @ 2002-07-04 14:56:10 by simonmar] Clean up the code that constructs the exported declarations, and fix a couple of bugs along the way. Now if you import a class hiding one of the methods, then re-export the class, the version in the documentation will correctly have the appropriate method removed. - - - - - 2c26e77d by Simon Marlow at 2002-07-04T15:26:13+00:00 [haddock @ 2002-07-04 15:26:13 by simonmar] More bugfixes to the export handling - - - - - 03e0710d by Simon Marlow at 2002-07-09T10:12:10+00:00 [haddock @ 2002-07-09 10:12:10 by simonmar] Don't require that the list type comes from "Prelude" for it to be treated as special syntax (sometimes it comes from Data.List or maybe even GHC.Base). - - - - - 44f3891a by Simon Marlow at 2002-07-09T10:12:51+00:00 [haddock @ 2002-07-09 10:12:51 by simonmar] commented-out debugging code - - - - - 97280873 by Krasimir Angelov at 2002-07-09T16:33:33+00:00 [haddock @ 2002-07-09 16:33:31 by krasimir] 'Microsoft HTML Help' support - - - - - 3dc04655 by Simon Marlow at 2002-07-10T09:40:56+00:00 [haddock @ 2002-07-10 09:40:56 by simonmar] Fix for rendering of the (->) type constructor, from Ross Paterson. - - - - - c9f149c6 by Simon Marlow at 2002-07-10T10:26:11+00:00 [haddock @ 2002-07-10 10:26:11 by simonmar] Tweaks to the MS Help support: the extra files are now only generated if you ask for them (--ms-help). - - - - - e8acc1e6 by Simon Marlow at 2002-07-10T10:57:10+00:00 [haddock @ 2002-07-10 10:57:10 by simonmar] Document all the new options since 0.3 - - - - - 8bb85544 by Simon Marlow at 2002-07-10T10:58:31+00:00 [haddock @ 2002-07-10 10:58:31 by simonmar] Sort the options a bit - - - - - abc0dd59 by Simon Marlow at 2002-07-15T09:19:38+00:00 [haddock @ 2002-07-15 09:19:38 by simonmar] Fix a bug in mkExportItems when processing a module without an explicit export list. We were placing one copy of a declaration for each binder in the declaration, which for a data type would mean one copy of the whole declaration per constructor or record selector. - - - - - dde65bb9 by Simon Marlow at 2002-07-15T09:54:16+00:00 [haddock @ 2002-07-15 09:54:16 by simonmar] merge rev. 1.35 - - - - - bd7eb8c4 by Simon Marlow at 2002-07-15T10:14:31+00:00 [haddock @ 2002-07-15 10:14:30 by simonmar] Be a bit more liberal in the kind of commenting styles we allow, as suggested by Malcolm Wallace. Mostly this consists of allowing doc comments either side of a separator token. In an export list, a section heading is now allowed before the comma, as well as after it. eg. module M where ( T(..) -- * a section heading , f -- * another section heading , g ) In record fields, doc comments are allowed anywhere (previously a doc-next was allowed only after the comma, and a doc-before was allowed only before the comma). eg. data R = C { -- | describes 'f' f :: Int -- | describes 'g' , g :: Int } - - - - - 8f6dfe34 by Simon Marlow at 2002-07-15T10:21:56+00:00 [haddock @ 2002-07-15 10:21:56 by simonmar] Mention alternative commenting styles. - - - - - fc515bb7 by Simon Marlow at 2002-07-15T16:16:50+00:00 [haddock @ 2002-07-15 16:16:50 by simonmar] Allow multiple sections/subsections before and after a comma in the export list. Also at the same time I made the syntax a little stricter (multiple commas now aren't allowed between export specs). - - - - - 80a97e74 by Simon Marlow at 2002-07-19T09:13:10+00:00 [haddock @ 2002-07-19 09:13:10 by simonmar] Allow special id's ([], (), etc.) to be used in an import declaration. - - - - - a69d7378 by Simon Marlow at 2002-07-19T09:59:02+00:00 [haddock @ 2002-07-19 09:59:02 by simonmar] Allow special id's ([], (), etc.) to be used in an import declarations. - - - - - d205fa60 by Simon Marlow at 2002-07-19T10:00:16+00:00 [haddock @ 2002-07-19 10:00:16 by simonmar] Relax the restrictions which require doc comments to be followed by semi colons - in some cases this isn't necessary. Now you can write module M where { -- | some doc class C where {} } without needing to put a semicolon before the class declaration. - - - - - e9301e14 by Simon Marlow at 2002-07-23T08:24:09+00:00 [haddock @ 2002-07-23 08:24:09 by simonmar] A new TODO list item - - - - - e5d77586 by Simon Marlow at 2002-07-23T08:40:56+00:00 [haddock @ 2002-07-23 08:40:56 by simonmar] - update the acknowledgements - remove the paragraph that described how to use explicit layout with doc comments; it isn't relevant any more. - - - - - 78a94137 by Simon Marlow at 2002-07-23T08:43:02+00:00 [haddock @ 2002-07-23 08:43:02 by simonmar] more tests - - - - - 5c320927 by Simon Marlow at 2002-07-23T08:43:26+00:00 [haddock @ 2002-07-23 08:43:26 by simonmar] Updates for version 0.4 - - - - - 488e99ae by Simon Marlow at 2002-07-23T09:10:46+00:00 [haddock @ 2002-07-23 09:10:46 by simonmar] Fix the %changelog (rpm complained that it wasn't in the right order) - - - - - a77bb373 by Simon Marlow at 2002-07-23T09:12:38+00:00 [haddock @ 2002-07-23 09:12:38 by simonmar] Another item for the TODO list - - - - - f1ec1813 by Simon Marlow at 2002-07-23T10:18:46+00:00 [haddock @ 2002-07-23 10:18:46 by simonmar] Add a version banner when invoked with -v - - - - - 1d44cadf by Simon Marlow at 2002-07-24T09:28:19+00:00 [haddock @ 2002-07-24 09:28:19 by simonmar] Remove ^Ms - - - - - 4d8d5e94 by Simon Marlow at 2002-07-24T09:42:18+00:00 [haddock @ 2002-07-24 09:42:17 by simonmar] Patches to quieten ghc -Wall, from those nice folks at Galois. - - - - - d6edc43e by Simon Marlow at 2002-07-25T14:37:29+00:00 [haddock @ 2002-07-25 14:37:28 by simonmar] Patch to allow simple hyperlinking to an arbitrary location in another module's documentation, from Volker Stolz. Now in a doc comment: #foo# creates <a name="foo"></a> And you can use the form "M\#foo" to hyperlink to the label 'foo' in module 'M'. Note that the backslash is necessary for now. - - - - - b34d18fa by Simon Marlow at 2002-08-02T09:08:22+00:00 [haddock @ 2002-08-02 09:08:22 by simonmar] The <TT> and <PRE> environments seem to use a font that is a little too small in IE. Compensate. (suggestion from Daan Leijen). - - - - - 8106b086 by Simon Marlow at 2002-08-02T09:25:23+00:00 [haddock @ 2002-08-02 09:25:20 by simonmar] Remove <P>..</P> from around list items, to reduce excess whitespace between the items of bulleted and ordered lists. (Suggestion from Daan Leijen). - - - - - c1acff8f by Simon Marlow at 2002-08-05T09:03:49+00:00 [haddock @ 2002-08-05 09:03:49 by simonmar] update - - - - - f968661c by Simon Marlow at 2002-11-11T09:32:57+00:00 [haddock @ 2002-11-11 09:32:57 by simonmar] Fix cut-n-pasto - - - - - 12d02619 by Simon Marlow at 2002-11-13T09:49:46+00:00 [haddock @ 2002-11-13 09:49:46 by simonmar] Small bugfix in the --read-interface option parsing from Brett Letner. - - - - - 30e32d5e by Ross Paterson at 2003-01-16T15:07:57+00:00 [haddock @ 2003-01-16 15:07:57 by ross] Adjust for the new exception libraries (as well as the old ones). - - - - - 871f65df by Sven Panne at 2003-02-20T21:31:40+00:00 [haddock @ 2003-02-20 21:31:40 by panne] * Add varsyms and consyms to index * Exclude empty entries from index - - - - - bc42cc87 by Sven Panne at 2003-02-24T21:26:29+00:00 [haddock @ 2003-02-24 21:26:29 by panne] Don't convert a "newtype" to a single-constructor "data" for non-abstractly exported types, they are quite different regarding strictness/pattern matching. Now a "data" without any constructors is only emitted for an abstractly exported type, regardless if it is actually a "newtype" or a "data". - - - - - 0c2a1d99 by Sven Panne at 2003-03-08T19:02:38+00:00 [haddock @ 2003-03-08 19:02:38 by panne] Fixed some broken/redirected/canonicalized links found by a very picky link checker. - - - - - 25459269 by Sven Panne at 2003-03-09T21:13:43+00:00 [haddock @ 2003-03-09 21:13:43 by panne] Don't append a fragment to non-defining index entries, only documents with a defining occurrence have a name anchor. - - - - - 6be4db86 by Sven Panne at 2003-03-10T21:34:25+00:00 [haddock @ 2003-03-10 21:34:24 by panne] Escape fragments. This fixes e.g. links to operators. - - - - - eb12972c by Ross Paterson at 2003-04-25T10:50:06+00:00 [haddock @ 2003-04-25 10:50:05 by ross] An 80% solution to generating derived instances. A complete solution would duplicate the instance inference logic, but if a type variable occurs as a constructor argument, then we can just propagate the derived class to the variable. But we know nothing of the constraints on any type variables that occur elsewhere. For example, the declarations data Either a b = Left a | Right b deriving (Eq, Ord) data Ptr a = Ptr Addr# deriving (Eq, Ord) newtype IORef a = IORef (STRef RealWorld a) deriving Eq yield the instances (Eq a, Eq b) => Eq (Either a b) (Ord a, Ord b) => Ord (Either a b) Eq (Ptr a) Ord (Ptr a) (??? a) => Eq (IORef a) The last example shows the limits of this local analysis. Note that a type variable may be in both categories: then we know a constraint, but there may be more, or a stronger constraint, e.g. data Tree a = Node a [Tree a] deriving Eq yields (Eq a, ??? a) => Eq (Tree a) - - - - - de886f78 by Simon Marlow at 2003-04-25T11:17:55+00:00 [haddock @ 2003-04-25 11:17:55 by simonmar] Some updates, including moving the derived instance item down to the bottom of the list now that Ross has contributed some code that does the job for common cases. - - - - - 1b52cffd by Simon Marlow at 2003-04-30T14:02:32+00:00 [haddock @ 2003-04-30 14:02:32 by simonmar] When installing on Windows, run cygpath over $(HADDOCKLIB) so that haddock (a mingw program, built by GHC) can understand it. You still need to be in a cygwin environment to run Haddock, because of the shell script wrapper. - - - - - d4f638de by Simon Marlow at 2003-05-06T10:04:47+00:00 [haddock @ 2003-05-06 10:04:47 by simonmar] Catch another case of a paragraph containing just a DocMonospaced that should turn into a DocCodeBlock. - - - - - 4162b2b9 by Simon Marlow at 2003-05-06T10:11:44+00:00 [haddock @ 2003-05-06 10:11:44 by simonmar] Add some more code-block tests. - - - - - 4f5802c8 by Simon Marlow at 2003-05-06T10:14:52+00:00 [haddock @ 2003-05-06 10:14:52 by simonmar] Don't turn a single DocCodeBlock into a DocMonospaced, because that tends to remove the line breaks in the code. - - - - - ef8c45f7 by Simon Marlow at 2003-05-21T15:07:21+00:00 [haddock @ 2003-05-21 15:07:21 by simonmar] Only omit the module contents when there are no section headings at all. - - - - - bcee1e75 by Sigbjorn Finne at 2003-05-30T16:50:45+00:00 [haddock @ 2003-05-30 16:50:45 by sof] cygpath: for now, steer clear of --mixed - - - - - 30567af3 by Sigbjorn Finne at 2003-05-30T17:59:28+00:00 [haddock @ 2003-05-30 17:59:28 by sof] oops, drop test defn from prev commit - - - - - b0856e7d by Simon Marlow at 2003-06-03T09:55:26+00:00 [haddock @ 2003-06-03 09:55:26 by simonmar] Two small fixes to make the output valid HTML 4.01 (transitional). Thanks to Malcolm Wallace for pointing out the problems. - - - - - 70e137ea by Simon Marlow at 2003-07-28T13:30:35+00:00 [haddock @ 2003-07-28 13:30:35 by simonmar] Add tests for a couple of bugs. - - - - - 122bd578 by Simon Marlow at 2003-07-28T13:31:25+00:00 [haddock @ 2003-07-28 13:31:25 by simonmar] Add documentation for anchors. - - - - - 0bd27cb2 by Simon Marlow at 2003-07-28T13:31:46+00:00 [haddock @ 2003-07-28 13:31:46 by simonmar] Update - - - - - 08052d42 by Simon Marlow at 2003-07-28T13:32:12+00:00 [haddock @ 2003-07-28 13:32:12 by simonmar] layout tweak. - - - - - 13942749 by Simon Marlow at 2003-07-28T13:33:03+00:00 [haddock @ 2003-07-28 13:33:03 by simonmar] Differentiate links to types/classes from links to variables/constructors with a prefix ("t:" and "v:" respectively). - - - - - d7f493b9 by Simon Marlow at 2003-07-28T13:35:17+00:00 [haddock @ 2003-07-28 13:35:16 by simonmar] When a module A exports another module's contents via 'module B', then modules which import entities from B re-exported by A should link to B.foo rather than A.foo. See examples/Bug2.hs. - - - - - d94cf705 by Simon Marlow at 2003-07-28T13:36:14+00:00 [haddock @ 2003-07-28 13:36:14 by simonmar] Update to version 0.5 - - - - - dbb776cd by Sven Panne at 2003-07-28T14:02:43+00:00 [haddock @ 2003-07-28 14:02:43 by panne] * Updated to version 0.5 * Automagically generate configure if it is not there - - - - - 6cfeee53 by Simon Marlow at 2003-07-28T14:32:43+00:00 [haddock @ 2003-07-28 14:32:42 by simonmar] Update to avoid using hslibs with GHC >= 5.04 - - - - - a1ce838f by Simon Marlow at 2003-07-28T14:33:37+00:00 [haddock @ 2003-07-28 14:33:37 by simonmar] Update for 0.5 - - - - - c0fe6493 by Simon Marlow at 2003-07-28T14:53:22+00:00 [haddock @ 2003-07-28 14:53:22 by simonmar] Markup fix - - - - - 6ea31596 by Sven Panne at 2003-07-28T16:40:45+00:00 [haddock @ 2003-07-28 16:40:45 by panne] Make it compile with GHC >= 6.01 - - - - - afcd30fc by Simon Marlow at 2003-07-30T15:04:52+00:00 [haddock @ 2003-07-30 15:04:52 by simonmar] Pay attention to import specs when building the the import env, as well as the orig env. This may fix some wrong links in documentation when import specs are being used. - - - - - 17c3137f by Simon Marlow at 2003-07-30T16:05:41+00:00 [haddock @ 2003-07-30 16:05:40 by simonmar] Rename instances based on the import_env for the module in which they are to be displayed. This should give, in many cases, better links for the types and classes mentioned in the instance head. This involves keeping around the import_env in the iface until the end, because instances are not collected up until all the modules have been processed. Fortunately it doesn't seem to affect performance much. Instance heads are now attached to ExportDecls, rather than the HTML backend passing around a separate mapping for instances. This is a cleanup. - - - - - 3d3b5c87 by Sven Panne at 2003-08-04T10:18:24+00:00 [haddock @ 2003-08-04 10:18:24 by panne] Don't print parentheses around one-element contexts - - - - - 9e3f3f2d by Simon Marlow at 2003-08-04T12:59:47+00:00 [haddock @ 2003-08-04 12:59:47 by simonmar] A couple of TODOs. - - - - - e9d8085c by Simon Marlow at 2003-08-05T14:10:31+00:00 [haddock @ 2003-08-05 14:10:31 by simonmar] I'm not sure why, but it seems that the index entries for non-defining occurrences of entities did not have an anchor - the link just pointed to the module. This fixes it. - - - - - ff5c7d6d by Simon Marlow at 2003-08-15T14:42:59+00:00 [haddock @ 2003-08-15 14:42:59 by simonmar] Convert the lexer to Alex, and fix a bug in the process. - - - - - 1aa077bf by Simon Marlow at 2003-08-15T15:00:18+00:00 [haddock @ 2003-08-15 15:00:18 by simonmar] Update - - - - - d3de1e38 by Simon Marlow at 2003-08-15T15:01:03+00:00 [haddock @ 2003-08-15 15:01:03 by simonmar] wibbles - - - - - b40ece3b by Simon Marlow at 2003-08-18T10:04:47+00:00 [haddock @ 2003-08-18 10:04:47 by simonmar] Lex the 'mdo' keyword as 'do'. - - - - - 8f9a1146 by Simon Marlow at 2003-08-18T11:48:24+00:00 [haddock @ 2003-08-18 11:48:24 by simonmar] Two bugs from Sven. - - - - - ea54ebc0 by Simon Marlow at 2003-08-18T11:48:46+00:00 [haddock @ 2003-08-18 11:48:46 by simonmar] Fixes to the new lexer. - - - - - d5f6a4b5 by Simon Marlow at 2003-08-19T09:09:03+00:00 [haddock @ 2003-08-19 09:09:03 by simonmar] Further wibbles to the syntax. - - - - - 6bbdadb7 by Sven Panne at 2003-08-26T18:45:35+00:00 [haddock @ 2003-08-26 18:45:35 by panne] Use autoreconf instead of autoconf - - - - - 32e889cb by Sven Panne at 2003-08-26T19:01:19+00:00 [haddock @ 2003-08-26 19:01:18 by panne] Made option handling a bit more consistent with other tools, in particular: Every program in fptools should output * version info on stdout and terminate successfully when -V or --version * usage info on stdout and terminate successfully when -? or --help * usage info on stderr and terminate unsuccessfully when an unknown option is given. - - - - - 5d156a91 by Sven Panne at 2003-08-26T19:20:55+00:00 [haddock @ 2003-08-26 19:20:55 by panne] Make it *very* clear that we terminate when given a -V/--version flag - - - - - e6577265 by Sven Panne at 2003-08-27T07:50:03+00:00 [haddock @ 2003-08-27 07:50:02 by panne] * Made -D a short option for --dump-interface. * Made -m a short option for --ms-help. * Made -n a short option for --no-implicit-prelude. * Made -c a short option for --css. * Removed DocBook options from executable (they didn't do anything), but mark them as reserved in the docs. Note that the short option for DocBook output is now -S (from SGML) instead of -d. The latter is now a short option for --debug. * The order of the Options in the documentation now matches the order printed by Haddock itself. Note: Although changing the names of options is often a bad idea, I'd really like to make the options for the programs in fptools more consistent and compatible to the ones used in common GNU programs. - - - - - d303ff98 by Simon Marlow at 2003-09-10T08:23:48+00:00 [haddock @ 2003-09-10 08:23:48 by simonmar] Add doc subdir. Patch contributed by: Ian Lynagh <igloo at earth.li>. - - - - - 9a70e46a by Simon Marlow at 2003-09-10T08:24:32+00:00 [haddock @ 2003-09-10 08:24:32 by simonmar] Install these files in $(datadir), not $(libdir), since they're architecture independent. Patch contributed by: Ian Lynagh <igloo at earth.li>. - - - - - bbb87e7a by Simon Marlow at 2003-09-10T08:25:31+00:00 [haddock @ 2003-09-10 08:25:31 by simonmar] Haddock's supplementary HTML bits now live in $(datadir), not $(libdir). Patch contributed by: Ian Lynagh <igloo at earth.li>. - - - - - 3587c24b by Simon Marlow at 2003-09-22T10:34:38+00:00 [haddock @ 2003-09-22 10:34:38 by simonmar] Allow installing of docs. - - - - - d510b517 by Sven Panne at 2003-10-11T08:10:44+00:00 [haddock @ 2003-10-11 08:10:44 by panne] Include architecture-independent files in file list - - - - - 187d7618 by Sigbjorn Finne at 2003-10-20T17:19:24+00:00 [haddock @ 2003-10-20 17:19:22 by sof] support for i-parameters + zip comprehensions - - - - - b6c7a273 by Simon Marlow at 2003-11-03T14:24:24+00:00 [haddock @ 2003-11-03 14:24:24 by simonmar] Update TODO file. - - - - - 58513e33 by Simon Marlow at 2003-11-05T11:22:04+00:00 [haddock @ 2003-11-05 11:22:04 by simonmar] Remove the last of the uses of 'trace' to emit warnings, and tidy up a couple of places where duplicate warnings were being emitted. - - - - - 33a78846 by Simon Marlow at 2003-11-05T11:30:53+00:00 [haddock @ 2003-11-05 11:30:52 by simonmar] - Suppress warnings about unknown imported modules by default. - Add a -v/--verbose flag to re-enable these warnings. The general idea is to suppress the "Warning: unknown module: Prelude" warnings which most Haddock users will see every time, and which aren't terribly useful. - - - - - a969de7f by Simon Marlow at 2003-11-05T12:30:28+00:00 [haddock @ 2003-11-05 12:30:28 by simonmar] - Remove the emboldening of index entries for defining locations. This isn't useful, and breaks abstractions. - If an entity is re-exported by a module but the module doesn't include documentation for that entity (perhaps because it is re-exported by 'module M'), then don't attempt to hyperlink to the documentation from the index. Instead, just list that module in the index, to indicate that the entity is exported from there. - - - - - f14ea82a by Simon Marlow at 2003-11-05T15:15:59+00:00 [haddock @ 2003-11-05 15:15:59 by simonmar] Index overhaul: - no more separate type/class and variable/function indices - the index now makes a distinction between different entities with the same name. One example is a type constructor with the same name as a data constructor, but another example is simply a function with the same name exported by two different modules. For example, the index entry for 'catch' now looks like this: catch 1 (Function) Control.Exception 2 (Function) GHC.Exception, Prelude, System.IO, System.IO.Error making it clear that there are two different 'catch'es, but one of them is exported by several modules. - Each index page now has the index contents (A B C ...) at the top. Please let me know if you really hate any of this. - - - - - 01a25ca6 by Simon Marlow at 2003-11-05T15:16:38+00:00 [haddock @ 2003-11-05 15:16:38 by simonmar] Update - - - - - 1a7ccb86 by Simon Marlow at 2003-11-05T17:16:05+00:00 [haddock @ 2003-11-05 17:16:04 by simonmar] Support for generating a single unified index for several packages. --use-index=URL turns off normal index generation, causes Index links to point to URL. --gen-index generates an combined index from the specified interfaces. Currently doesn't work exactly right, because the interfaces don't contain the iface_reexported info. I'll need to fix that up. - - - - - a2bca16d by Simon Marlow at 2003-11-06T10:44:52+00:00 [haddock @ 2003-11-06 10:44:52 by simonmar] Include iface_reexported in the .haddock file. This unfortunately bloats the file (40% for base). If this gets to be a problem we can always apply the dictionary trick that GHC uses for squashing .hi files. - - - - - 0a09c293 by Simon Marlow at 2003-11-06T12:39:47+00:00 [haddock @ 2003-11-06 12:39:46 by simonmar] - Add definition lists, marked up like this: -- | This is a definition list: -- -- [@foo@] The description of @foo at . -- -- [@bar@] The description of @bar at . Cunningly, the [] characters are not treated specially unless a [ is found at the beginning of a paragraph, in which case the ] becomes special in the following text. - Add --use-contents and --gen-contents, along the lines of --use-index and --gen-index added yesterday. Now we can generate a combined index and contents for the whole of the hierarchical libraries, and in theory the index/contents on the system could be updated as new packages are added. - - - - - fe1b3460 by Simon Marlow at 2003-11-06T14:47:36+00:00 [haddock @ 2003-11-06 14:47:36 by simonmar] Remove the 'Parent' button - it is of dubious use, and often points into thin air. - - - - - db6d762f by Simon Marlow at 2003-11-06T16:48:14+00:00 [haddock @ 2003-11-06 16:48:11 by simonmar] - Include the OptHide setting in the interface, so we don't include hidden modules in the combined index/contents. - Add a -k/--package flag to set the package name for the current set of modules. The package name for each module is now shown in the right-hand column of the contents, in a combined contents page. - - - - - 7d71718b by Simon Marlow at 2003-11-06T16:50:28+00:00 [haddock @ 2003-11-06 16:50:28 by simonmar] Add -k/--package docs - - - - - ef43949d by Simon Marlow at 2003-11-06T16:51:23+00:00 [haddock @ 2003-11-06 16:51:23 by simonmar] Bump to 0.6 - - - - - 1c419e06 by Simon Marlow at 2003-11-06T16:51:50+00:00 [haddock @ 2003-11-06 16:51:50 by simonmar] update - - - - - 69422327 by Simon Marlow at 2003-11-10T14:41:06+00:00 [haddock @ 2003-11-10 14:41:05 by simonmar] Re-exporting names from a different package is problematic, because we don't have access to the full documentation for the entity. Currently Haddock just ignores entities with no documentation, but this results in bogus-looking empty documentation for many of the modules in the haskell98 package. So: - the documentation will now just list the name, as a link pointing to the location of the actual documentation. - now we don't attempt to link to these re-exported entities if they are referred to by the current module. Additionally: - If there is no documentation in the current module, include just the Synopsis section (rather than just the documentation section, as it was before). This just looks nicer and was on the TODO list. - - - - - 3c3fc433 by Simon Marlow at 2003-11-10T14:51:59+00:00 [haddock @ 2003-11-10 14:51:59 by simonmar] Fix for getReExports: take into account names which are not visible because they are re-exported from a different package. - - - - - 31c8437b by Simon Marlow at 2003-11-10T15:10:53+00:00 [haddock @ 2003-11-10 15:10:53 by simonmar] Version 0.6 changes - - - - - a7c2430b by Simon Marlow at 2003-11-10T15:15:58+00:00 [haddock @ 2003-11-10 15:15:58 by simonmar] getReExports: one error case that isn't - - - - - 00cc459c by Simon Marlow at 2003-11-10T16:15:19+00:00 [haddock @ 2003-11-10 16:15:18 by simonmar] copyright update - - - - - ca62408d by Simon Marlow at 2003-11-11T09:57:25+00:00 [haddock @ 2003-11-11 09:57:25 by simonmar] Version 0.6 - - - - - 3acbf818 by Simon Marlow at 2003-11-11T12:10:44+00:00 [haddock @ 2003-11-11 12:10:44 by simonmar] Go back to producing just the documentation section, rather than just the synopsis section, for a module with no documentation annotations. One reason is that the synopsis section tries to link each entity to its documentation on the same page. Also, the doc section anchors each entity, and it lists instances which the synopsis doesn't. - - - - - 6c90abc2 by Simon Marlow at 2003-11-12T10:03:39+00:00 [haddock @ 2003-11-12 10:03:39 by simonmar] 2002 -> 2003 - - - - - 090bbc4c by Simon Marlow at 2003-11-28T12:08:00+00:00 [haddock @ 2003-11-28 12:08:00 by simonmar] update - - - - - 8096a832 by Simon Marlow at 2003-11-28T12:09:58+00:00 [haddock @ 2003-11-28 12:09:58 by simonmar] Fix some of the problems with Haddock generating pages that are too wide. Now we only specify 'nowrap' when it is necessary to avoid a code box getting squashed up by the text to the right of it. - - - - - 35294929 by Sven Panne at 2003-12-29T17:16:31+00:00 [haddock @ 2003-12-29 17:16:31 by panne] Updated my email address - - - - - cdb697bf by Simon Marlow at 2004-01-08T10:14:24+00:00 [haddock @ 2004-01-08 10:14:24 by simonmar] Add instructions for using GHC to pre-process source for feeding to Haddock. - - - - - 8dfc491f by Simon Marlow at 2004-01-09T12:45:46+00:00 [haddock @ 2004-01-09 12:45:46 by simonmar] Add -optP-P to example ghc command line. - - - - - ac41b820 by Simon Marlow at 2004-02-03T11:02:03+00:00 [haddock @ 2004-02-03 11:02:03 by simonmar] Fix bug in index generation - - - - - f4e7edcb by Simon Marlow at 2004-02-10T11:51:16+00:00 [haddock @ 2004-02-10 11:51:16 by simonmar] Don't throw away whitespace at the beginning of a line (experimental fix). - - - - - 68e212d2 by Simon Marlow at 2004-02-10T12:10:08+00:00 [haddock @ 2004-02-10 12:10:08 by simonmar] Fix for previous commit: I now realise why the whitespace was stripped from the beginning of the line. Work around it. - - - - - e7d7f2df by Sven Panne at 2004-02-10T18:38:45+00:00 [haddock @ 2004-02-10 18:38:45 by panne] Make Haddock link with the latest relocated monad transformer package - - - - - 992d4225 by Simon Marlow at 2004-02-16T10:21:35+00:00 [haddock @ 2004-02-16 10:21:35 by simonmar] Add a TODO - - - - - 1ac55326 by Simon Marlow at 2004-03-12T11:33:39+00:00 [haddock @ 2004-03-12 11:33:39 by simonmar] Add an item. - - - - - 0478e903 by Simon Marlow at 2004-03-15T12:24:05+00:00 [haddock @ 2004-03-15 12:24:05 by simonmar] Add an item. - - - - - 6f26d21a by Simon Marlow at 2004-03-18T14:21:29+00:00 [haddock @ 2004-03-18 14:21:29 by simonmar] Fix URL - - - - - 19b6bb99 by Simon Marlow at 2004-03-22T14:09:03+00:00 [haddock @ 2004-03-22 14:09:03 by simonmar] getReExports was bogus: we should really look in the import_env to find the documentation for an entity which we are re-exporting without documentation. Suggested by: Ross Paterson (patch modified by me). - - - - - 5c756031 by Simon Marlow at 2004-03-24T09:42:11+00:00 [haddock @ 2004-03-24 09:42:10 by simonmar] hiding bug from Ross Paterson (fixed in rev 1.59 of Main.hs) - - - - - 1b692e6c by Simon Marlow at 2004-03-24T10:10:50+00:00 [haddock @ 2004-03-24 10:10:50 by simonmar] mkExportItems fix & simplification: we should be looking at the actual exported names (calculated earlier) to figure out which subordinates of a declaration are exported. This means that if you export a record, and name its fields separately in the export list, the fields will still be visible in the documentation for the constructor. - - - - - 90e5e294 by Simon Marlow at 2004-03-24T10:12:08+00:00 [haddock @ 2004-03-24 10:12:08 by simonmar] Make restrictCons take into account record field names too (removing a ToDo). - - - - - 2600efa4 by Simon Marlow at 2004-03-24T10:16:17+00:00 [haddock @ 2004-03-24 10:16:17 by simonmar] Record export tests. - - - - - 6a8575c7 by Simon Marlow at 2004-03-25T09:35:14+00:00 [haddock @ 2004-03-25 09:35:14 by simonmar] restrictTo: fix for restricting a newtype with a record field. - - - - - dcf55a8d by Simon Marlow at 2004-03-25T10:01:42+00:00 [haddock @ 2004-03-25 10:01:42 by simonmar] Fix duplicate instance bug - - - - - f49aa758 by Simon Marlow at 2004-03-25T10:02:41+00:00 [haddock @ 2004-03-25 10:02:41 by simonmar] Duplicate instance bug. - - - - - 7b87344c by Simon Marlow at 2004-03-25T10:29:56+00:00 [haddock @ 2004-03-25 10:29:56 by simonmar] If a name is imported from two places, one hidden and one not, choose the unhidden one to link to. Also, when there's only a hidden module to link to, don't try linking to it. - - - - - 40f44d7b by Simon Marlow at 2004-03-25T15:17:24+00:00 [haddock @ 2004-03-25 15:17:23 by simonmar] Add support for collaspible parts of the page, with a +/- button and a bit of JavaScript. Make the instances collapsible, and collapse them by default. This makes documentation with long lists of instances (eg. the Prelude) much easier to read. Maybe we should give other documentation sections the same treatment. - - - - - 9b64dc0f by Simon Marlow at 2004-03-25T15:20:55+00:00 [haddock @ 2004-03-25 15:20:55 by simonmar] Update - - - - - c2fff7f2 by Simon Marlow at 2004-03-25T15:45:10+00:00 [haddock @ 2004-03-25 15:45:10 by simonmar] Eliminate some unnecessary spaces in the HTML rendering - - - - - b7948ff0 by Simon Marlow at 2004-03-25T16:00:37+00:00 [haddock @ 2004-03-25 16:00:36 by simonmar] Remove all that indentation in the generated HTML to keep the file sizes down. - - - - - da2bb4ca by Sven Panne at 2004-03-27T09:57:58+00:00 [haddock @ 2004-03-27 09:57:57 by panne] Added the new-born haddock.js to the build process and the documentation. - - - - - b99e6f8c by Sven Panne at 2004-03-27T10:32:20+00:00 [haddock @ 2004-03-27 10:32:20 by panne] "type" is a required attribute of the "script" element - - - - - 562b185a by Sven Panne at 2004-03-27T12:52:34+00:00 [haddock @ 2004-03-27 12:52:34 by panne] Add a doctype for the contents page, too. - - - - - f6a99c2d by Simon Marlow at 2004-04-14T10:03:25+00:00 [haddock @ 2004-04-14 10:03:25 by simonmar] fix for single-line comment syntax - - - - - de366303 by Simon Marlow at 2004-04-20T13:08:04+00:00 [haddock @ 2004-04-20 13:08:04 by simonmar] Allow a 'type' declaration to include documentation comments. These will be ignored by Haddock, but at least one user (Johannes Waldmann) finds this feature useful, and it's easy to add. - - - - - fd78f51e by Simon Marlow at 2004-05-07T15:14:56+00:00 [haddock @ 2004-05-07 15:14:56 by simonmar] - update copyright - add version to abstract - - - - - 59f53e32 by Sven Panne at 2004-05-09T14:39:53+00:00 [haddock @ 2004-05-09 14:39:53 by panne] Fix the fix for single-line comment syntax, ------------------------------------------- is now a valid comment line again. - - - - - 8b18f2fe by Simon Marlow at 2004-05-10T10:11:51+00:00 [haddock @ 2004-05-10 10:11:51 by simonmar] Update - - - - - 225a491d by Ross Paterson at 2004-05-19T13:10:23+00:00 [haddock @ 2004-05-19 13:10:23 by ross] Make the handling of "deriving" slightly smarter, by ignoring data constructor arguments that are identical to the lhs. Now handles things like data Tree a = Leaf a | Branch (Tree a) (Tree a) deriving ... - - - - - 37588686 by Mike Thomas at 2004-05-21T06:38:14+00:00 [haddock @ 2004-05-21 06:38:14 by mthomas] Windows exe extensions (bin remains for Unix). - - - - - cf2b9152 by Simon Marlow at 2004-05-25T09:34:54+00:00 [haddock @ 2004-05-25 09:34:54 by simonmar] Add some TODO items - - - - - 4d29cdfc by Simon Marlow at 2004-05-25T10:41:46+00:00 [haddock @ 2004-05-25 10:41:46 by simonmar] Complain if -h is used with --gen-index or --gen-contents, because it'll overwrite the new index/contents. - - - - - 2e0771e0 by Mike Thomas at 2004-05-28T20:17:55+00:00 [haddock @ 2004-05-28 20:17:55 by mthomas] Windows: search for templates in executable directory. Unix: Haddock tries cwd first rather than error if no -l arg. - - - - - 8d10bde1 by Sven Panne at 2004-06-05T16:53:34+00:00 [haddock @ 2004-06-05 16:53:34 by panne] Misc. rpm spec file cleanup, including: * make BuildRoot handling more consistent * added default file attributes * consistent defines and tags - - - - - 59974349 by Sven Panne at 2004-06-05T18:01:00+00:00 [haddock @ 2004-06-05 18:01:00 by panne] More rpm spec file cleanup, including: * added some BuildRequires * changed packager to me, so people can complain at the right place :-] * consistently refer to haskell.org instead of www.haskell.org - - - - - b94d4903 by Simon Marlow at 2004-07-01T11:08:58+00:00 [haddock @ 2004-07-01 11:08:57 by simonmar] Update to the +/- buttons: use a resized image rather than a <button>. Still seeing some strange effects in Konqueror, so might need to use a fixed-size image instead. - - - - - d5278f67 by Sven Panne at 2004-07-04T15:15:55+00:00 [haddock @ 2004-07-04 15:15:55 by panne] Install pictures for +/- pictures, too (JPEG is a strange format for graphics like this, I would have expected GIF or PNG here.) Things look fine with Konqueror and Netscape on Linux now, the only downside is that the cursor doesn't change when positioned above the "button". - - - - - 46dec6c5 by Sven Panne at 2004-07-13T17:59:28+00:00 [haddock @ 2004-07-13 17:59:28 by panne] A quote is a valid part of a Haskell identifier, but it would interfere with an ECMA script string delimiter, so escape it there. - - - - - 1d7bc432 by Simon Marlow at 2004-07-22T08:54:06+00:00 [haddock @ 2004-07-22 08:54:06 by simonmar] Add single quote to $ident, so you can say eg. 'foldl'' to refer to foldl' (the longest match rule is our friend). Bug reported by Adrian Hey <ahey at iee.org> - - - - - f183618b by Krasimir Angelov at 2004-07-27T22:59:35+00:00 [haddock @ 2004-07-27 22:58:23 by krasimir] Add basic support for Microsoft HTML Help 2.0 - - - - - d515d0c2 by Krasimir Angelov at 2004-07-27T23:02:36+00:00 [haddock @ 2004-07-27 23:02:36 by krasimir] escape names in the index - - - - - a5f1be23 by Krasimir Angelov at 2004-07-27T23:05:21+00:00 [haddock @ 2004-07-27 23:05:21 by krasimir] Add jsFile, plusFile and minusFile to the file list - - - - - c4fb4881 by Krasimir Angelov at 2004-07-28T22:12:10+00:00 [haddock @ 2004-07-28 22:12:09 by krasimir] bugfix. Move contentsHtmlFile, indexHtmlFile and subIndexHtmlFile functions to HaddockUtil.hs module to make them accessible from HaddockHH2.hs - - - - - 64d30b1d by Krasimir Angelov at 2004-07-30T22:15:47+00:00 [haddock @ 2004-07-30 22:15:45 by krasimir] more stuffs - support for separated compilation of packages - the contents page now uses DHTML TreeView - fixed copyFile bug - - - - - 133c8c5c by Krasimir Angelov at 2004-07-31T12:04:38+00:00 [haddock @ 2004-07-31 12:04:37 by krasimir] make the DHtmlTree in contents page more portable. The +/- buttons are replaced with new images which looks more beatiful. - - - - - 79040963 by Krasimir Angelov at 2004-07-31T13:10:20+00:00 [haddock @ 2004-07-31 13:10:20 by krasimir] Make DHtmlTree compatible with Mozila browser - - - - - 1a55dc90 by Krasimir Angelov at 2004-07-31T14:52:55+00:00 [haddock @ 2004-07-31 14:52:55 by krasimir] fix - - - - - 85ce0237 by Krasimir Angelov at 2004-07-31T14:53:28+00:00 [haddock @ 2004-07-31 14:53:28 by krasimir] HtmlHelp 1.x - - - - - 3c0c53ba by Krasimir Angelov at 2004-07-31T20:35:21+00:00 [haddock @ 2004-07-31 20:35:21 by krasimir] Added support for DevHelp - - - - - d42b5af1 by Krasimir Angelov at 2004-07-31T21:17:51+00:00 [haddock @ 2004-07-31 21:17:51 by krasimir] Document new features in HtmlHelp - - - - - 790fe21e by Krasimir Angelov at 2004-08-01T15:14:02+00:00 [haddock @ 2004-08-01 15:14:02 by krasimir] add missing imports - - - - - fd7cc6bc by Krasimir Angelov at 2004-08-01T19:52:08+00:00 [haddock @ 2004-08-01 19:52:06 by krasimir] fix some bugs. Now I have got the entire libraries documentation in HtmlHelp 2.0 format. - - - - - 94ad7ac8 by Krasimir Angelov at 2004-08-01T19:53:50+00:00 [haddock @ 2004-08-01 19:53:50 by krasimir] I forgot to add the new +/- images - - - - - f0c65388 by Krasimir Angelov at 2004-08-02T16:25:53+00:00 [haddock @ 2004-08-02 16:25:53 by krasimir] Add root node to the table of contents. All modules in tree are not children of the root - - - - - f50bd85d by Sven Panne at 2004-08-02T18:17:46+00:00 [haddock @ 2004-08-02 18:17:46 by panne] Mainly DocBook fixes - - - - - 09527ce3 by Sven Panne at 2004-08-02T20:02:29+00:00 [haddock @ 2004-08-02 20:02:29 by panne] Fixed -o/--odir handling. Generating the output, especially the directory handling, is getting a bit convoluted nowadays... - - - - - c8fbacfa by Sven Panne at 2004-08-02T20:31:13+00:00 [haddock @ 2004-08-02 20:31:13 by panne] Warning police - - - - - 37830bff by Sven Panne at 2004-08-02T20:32:29+00:00 [haddock @ 2004-08-02 20:32:28 by panne] Nuked dead code - - - - - 13847171 by Sven Panne at 2004-08-02T21:12:27+00:00 [haddock @ 2004-08-02 21:12:25 by panne] Use pathJoin instead of low-level list-based manipulation for FilePaths - - - - - c711d61e by Sven Panne at 2004-08-02T21:16:02+00:00 [haddock @ 2004-08-02 21:16:02 by panne] Removed WinDoze CRs - - - - - b1f7dc88 by Sven Panne at 2004-08-03T19:35:59+00:00 [haddock @ 2004-08-03 19:35:59 by panne] Fixed spelling of "http-equiv" attribute - - - - - dd5f394e by Sven Panne at 2004-08-03T19:44:03+00:00 [haddock @ 2004-08-03 19:44:03 by panne] Pacify W3C validator: * Added document encoding (currently UTF-8, not sure if this is completely correct) * Fixed syntax of `id' attributes * Added necessary `alt' attribute for +/- images Small layout improvement: * Added space after +/- images (still not perfect, but better than before) - - - - - 919c47c6 by Sigbjorn Finne at 2004-08-03T19:45:11+00:00 [haddock @ 2004-08-03 19:45:11 by sof] make it compile with <= ghc-6.1 - - - - - 4d6f01d8 by Sigbjorn Finne at 2004-08-03T19:45:30+00:00 [haddock @ 2004-08-03 19:45:30 by sof] ffi wibble - - - - - 4770643a by Sven Panne at 2004-08-03T20:47:46+00:00 [haddock @ 2004-08-03 20:47:46 by panne] Fixed CSS for button style. Note that only "0" is a valid measure without a unit! - - - - - 14aaf2e5 by Sven Panne at 2004-08-03T21:07:59+00:00 [haddock @ 2004-08-03 21:07:58 by panne] Improved spacing of dynamic module tree - - - - - 97c3579a by Simon Marlow at 2004-08-09T11:03:04+00:00 [haddock @ 2004-08-09 11:03:04 by simonmar] Add FormatVersion Patch submitted by: George Russell <ger at informatik.uni-bremen.de> - - - - - af7f8c03 by Simon Marlow at 2004-08-09T11:55:07+00:00 [haddock @ 2004-08-09 11:55:05 by simonmar] Add support for a short description for each module, which is included in the contents. The short description should be given in a "Description: " field of the header. Included in this patch are changes that make the format of the header a little more flexible. From the comments: -- all fields in the header are optional and have the form -- -- [spaces1][field name][spaces] ":" -- [text]"\n" ([spaces2][space][text]"\n" | [spaces]"\n")* -- where each [spaces2] should have [spaces1] as a prefix. -- -- Thus for the key "Description", -- -- > Description : this is a -- > rather long -- > -- > description -- > -- > The module comment starts here -- -- the value will be "this is a .. description" and the rest will begin -- at "The module comment". The header fields must be in the following order: Module, Description, Copyright, License, Maintainer, Stability, Portability. Patches submitted by: George Russell <ger at informatik.uni-bremen.de>, with a few small changes be me, mostly to merge with other recent changes. ToDo: document the module header. - - - - - 7b865ad3 by Simon Marlow at 2004-08-10T14:09:57+00:00 [haddock @ 2004-08-10 14:09:57 by simonmar] Fixes for DevHelp/HtmlHelp following introduction of short module description. - - - - - 814766cd by Simon Marlow at 2004-08-10T14:33:46+00:00 [haddock @ 2004-08-10 14:33:45 by simonmar] Fixes to installation under Windows. - - - - - 39cf9ede by Simon Marlow at 2004-08-12T12:08:23+00:00 [haddock @ 2004-08-12 12:08:23 by simonmar] Avoid using string-gap tricks. - - - - - b6d78551 by Simon Marlow at 2004-08-13T10:53:21+00:00 [haddock @ 2004-08-13 10:53:21 by simonmar] Update - - - - - eaae7417 by Simon Marlow at 2004-08-13T10:53:50+00:00 [haddock @ 2004-08-13 10:53:50 by simonmar] Test for primes in quoted links - - - - - 68c34f06 by Sven Panne at 2004-08-16T19:59:38+00:00 [haddock @ 2004-08-16 19:59:36 by panne] XMLification - - - - - 7f45a6f9 by Sven Panne at 2004-08-18T16:42:54+00:00 [haddock @ 2004-08-18 16:42:54 by panne] Re-added indices + minor fixes - - - - - 8a5dd97c by Sigbjorn Finne at 2004-08-25T17:15:42+00:00 [haddock @ 2004-08-25 17:15:42 by sof] backquote HADDOCK_VERSION defn for <= ghc-6.0.x; believe this is only needed under mingw - - - - - 4b1b42ea by Sven Panne at 2004-08-26T20:08:50+00:00 [haddock @ 2004-08-26 20:08:49 by panne] SGML is dead, long live DocBook XML! Note: The BuildRequires tags in the spec files are still incomplete and the documentation about the DocBook tools needs to be updated, too. Stay tuned... - - - - - 8d52cedb by Sven Panne at 2004-08-26T21:03:19+00:00 [haddock @ 2004-08-26 21:03:19 by panne] Updated BuildRequires tags. Alas, there seems to be no real standard here, so your mileage may vary... At least the current specs should work on SuSE Linux. - - - - - e6982912 by Sigbjorn Finne at 2004-08-30T15:44:59+00:00 [haddock @ 2004-08-30 15:44:59 by sof] escape HADDOCK_VERSION double quotes on all platforms when compiling with <=6.0.x - - - - - b3fbc867 by Simon Marlow at 2004-08-31T13:09:42+00:00 [haddock @ 2004-08-31 13:09:42 by simonmar] Avoid GHC/shell versionitis and create Version.hs - - - - - c359e16a by Sven Panne at 2004-09-05T19:12:33+00:00 [haddock @ 2004-09-05 19:12:32 by panne] * HTML documentation for "foo.xml" goes into directory "foo" again, not "foo-html". This is nicer and consistent with the behaviour for building the docs from SGML. * Disabled building PostScript documentation in the spec files for now, there are some strange issues with the FO->PS conversion for some files which have to be clarified first. - - - - - c68b1eba by Sven Panne at 2004-09-24T07:04:38+00:00 [haddock @ 2004-09-24 07:04:38 by panne] Switched the default state for instances and the module hierarchy to non-collapsed. This can be reversed when we finally use cookies from JavaScript to have a more persistent state. Previously going back and forth in the documentation was simply too annoying because everything was collapsed again and therefore the documentation was not easily navigatable. - - - - - dfb32615 by Simon Marlow at 2004-09-30T08:21:29+00:00 [haddock @ 2004-09-30 08:21:29 by simonmar] Add a feature request - - - - - 45ff783c by Sven Panne at 2004-10-23T19:54:00+00:00 [haddock @ 2004-10-23 19:54:00 by panne] Improved the Cygwin/MinGW chaos a little bit. There is still confusion about host platform vs. target platform... - - - - - 5f644714 by Krasimir Angelov at 2004-10-28T16:01:51+00:00 [haddock @ 2004-10-28 16:01:51 by krasimir] update for ghc-6.3+ - - - - - 92d9753e by Sven Panne at 2004-11-01T16:39:01+00:00 [haddock @ 2004-11-01 16:39:01 by panne] Revert previous commit: It's Network.URI which should be changed, not Haddock. - - - - - 05f70f6e by Simon Marlow at 2005-01-04T16:15:51+00:00 [haddock @ 2005-01-04 16:15:51 by simonmar] parser fix: allow qualified specialids. - - - - - 47870837 by Simon Marlow at 2005-01-04T16:16:54+00:00 [haddock @ 2005-01-04 16:16:54 by simonmar] Add a test - - - - - ff11fc2c by Ross Paterson at 2005-01-10T19:18:22+00:00 [haddock @ 2005-01-10 19:18:22 by ross] Render non-ASCII characters using numeric character references, to simplify charset issues. There's a META tag saying the charset is UTF-8, but GHC outputs characters as raw bytes. Ideally we need an encoding on the input side too, primarily in comments, because source files containing non-ASCII characters aren't portable between locales. - - - - - eba2fc4e by Simon Marlow at 2005-01-11T10:44:37+00:00 [haddock @ 2005-01-11 10:44:37 by simonmar] Remove string gap - - - - - b899a381 by Ross Paterson at 2005-01-13T11:41:33+00:00 [haddock @ 2005-01-13 11:41:33 by ross] recognize SGML-style numeric character references &#ddd; or &#xhhhh; and translate them into Chars. - - - - - 106e3cf0 by Ross Paterson at 2005-01-13T14:43:41+00:00 [haddock @ 2005-01-13 14:43:41 by ross] also allow uppercase X in hexadecimal character references (like SGML) - - - - - e8f54f25 by Ross Paterson at 2005-01-13T14:44:24+00:00 [haddock @ 2005-01-13 14:44:24 by ross] Describe numeric character references. - - - - - 914ccdce by Sven Panne at 2005-01-15T18:44:48+00:00 [haddock @ 2005-01-15 18:44:45 by panne] Make Haddock compile again after the recent base package changed. The Map/Set legacy hell has been factored out, so that all modules can simply use the new non-deprecated interfaces. Probably a lot of things can be improved by a little bit of Map/Set/List algebra, this can be done later if needed. Small note: Currently the list of instances in HTML code is reversed. This will hopefully be fixed later. - - - - - 6ab20e84 by Sven Panne at 2005-01-16T12:18:26+00:00 [haddock @ 2005-01-16 12:18:26 by panne] Trim imports - - - - - efb81da9 by Sven Panne at 2005-01-16T12:58:08+00:00 [haddock @ 2005-01-16 12:58:03 by panne] Correctly handle the new order of arguments for the combining function given to fromListWith. - - - - - e27b5834 by Sven Panne at 2005-01-16T14:14:41+00:00 [haddock @ 2005-01-16 14:14:39 by panne] Data.Map.unions is left-biased. - - - - - dae3cc3e by Sven Panne at 2005-01-16T14:22:44+00:00 [haddock @ 2005-01-16 14:22:44 by panne] Added the last missing "flip" to get identical HTML output as previous versions. - - - - - 951d8408 by Sven Panne at 2005-01-16T14:37:10+00:00 [haddock @ 2005-01-16 14:37:10 by panne] Refactored Text.PrettyPrint legacy hell into a separate module. - - - - - f1c4b892 by Sven Panne at 2005-01-16T15:41:25+00:00 [haddock @ 2005-01-16 15:41:21 by panne] Cleaned up imports and dropped support for GHC < 5.03, it never worked, anyway. - - - - - 60824c6e by Simon Marlow at 2005-01-18T10:02:48+00:00 [haddock @ 2005-01-18 10:02:48 by simonmar] Add a TODO - - - - - a8c82f23 by Krasimir Angelov at 2005-01-28T23:19:39+00:00 [haddock @ 2005-01-28 23:19:39 by krasimir] import Foreign/Foreign.C are required for Windows - - - - - d8450a23 by Simon Marlow at 2005-02-02T16:23:04+00:00 [haddock @ 2005-02-02 16:23:00 by simonmar] Revamp the linking strategy in Haddock. Now name resolution is done in two phases: - first resolve everything to original names, like a Haskell compiler would. - then, figure out the "home" location for every entity, and point all the links to there. The home location is the lowest non-hidden module in the import hierarchy that documents the entity. If there are multiple candidates, one is chosen at random. Also: - Haddock should not generate any HTML with dangling links any more. Unlinked references are just rendered as plain text. - Error reporting is better: if we can't find a link destination for an entity reference, we now emit a warning. - - - - - 1cce71d0 by Simon Marlow at 2005-02-03T13:42:19+00:00 [haddock @ 2005-02-03 13:42:19 by simonmar] - add --ignore-all-exports flag, which behaves as if every module has the ignore-exports attribute (requested by Chris Ryder). - add --hide option to hide a module on the command line. - add --use-package option to get Haddock info for a package from ghc-pkg (largely untested). - remove reexports from the .haddock file, they aren't used any more. - - - - - 767123ef by Ross Paterson at 2005-02-03T16:17:37+00:00 [haddock @ 2005-02-03 16:17:37 by ross] fix typo for < 6.3 - - - - - 0c680c04 by Simon Marlow at 2005-02-04T12:03:31+00:00 [haddock @ 2005-02-04 12:03:31 by simonmar] Fix bug in renameExportItems that meant links in instances weren't being renamed properly. - - - - - ff7abe5f by Simon Marlow at 2005-02-04T12:15:53+00:00 [haddock @ 2005-02-04 12:15:52 by simonmar] Add attribute #not-home, to indicate that the current module should not be considered to be a home module for the each entity it exports, unless there is no other module that exports the entity. - - - - - fc2cfd27 by Simon Marlow at 2005-02-04T12:40:02+00:00 [haddock @ 2005-02-04 12:40:02 by simonmar] Update the documentation w.r.t. home modules and the not-home attribute. - - - - - 26b8ddf7 by Ross Paterson at 2005-02-04T13:36:06+00:00 [haddock @ 2005-02-04 13:36:05 by ross] sort lists of instances by - arity of the type constructors (so higher-kinded instances come first) - name of the class - argument types - - - - - 26bfb19c by Simon Marlow at 2005-02-23T15:57:12+00:00 [haddock @ 2005-02-23 15:57:12 by simonmar] Fix documentation regarding the module attributes. - - - - - 9c3afd02 by Simon Marlow at 2005-02-28T16:18:17+00:00 [haddock @ 2005-02-28 16:18:17 by simonmar] version 0.7 - - - - - a95fd63f by Simon Marlow at 2005-02-28T16:22:08+00:00 [haddock @ 2005-02-28 16:22:08 by simonmar] Attempt to fix the layout of the package names in the contents. Having tried just about everything, the only thing I can get to work reliably is to make the package names line up on a fixed offset from the left margin. This obviously isn't ideal, so anyone else that would like to have a go at improving it is welcome. One option is to remove the +/- buttons from the contents list and go back to a plain table. The contents page now uses CSS for layout rather than tables. It seems that most browsers have different interpretations of CSS layout, so only the simplest things lead to consistent results. - - - - - 905d42f7 by Simon Marlow at 2005-03-01T17:16:42+00:00 [haddock @ 2005-03-01 17:16:40 by simonmar] Another attempt at lining up the package names on the contents page. Now, they line up with Konqueror, and almost line up with Firefox & IE (different layout in each case). - - - - - a0e1d178 by Wolfgang Thaller at 2005-03-09T08:28:39+00:00 [haddock @ 2005-03-09 08:28:39 by wolfgang] Hack haddock's lexer to accept the output from Apple's broken version of cpp (Apple's cpp leaves #pragma set_debug_pwd directives in it's output). - - - - - 9e1eb784 by Simon Marlow at 2005-04-22T14:27:15+00:00 [haddock @ 2005-04-22 14:27:15 by simonmar] Add a TODO item - - - - - 23281f78 by Ross Paterson at 2005-05-18T12:41:59+00:00 [haddock @ 2005-05-18 12:41:59 by ross] fix 3 bugs in --use-package, and document it. - - - - - 00074a68 by Sven Panne at 2005-05-21T12:35:29+00:00 [haddock @ 2005-05-21 12:35:29 by panne] Warning/versionitis police - - - - - 341fa822 by Simon Marlow at 2005-06-15T15:43:21+00:00 [haddock @ 2005-06-15 15:43:21 by simonmar] Allow "licence" as an alternate spelling of "license" - - - - - 3b953f8b by Simon Marlow at 2005-06-16T08:14:12+00:00 [haddock @ 2005-06-16 08:14:12 by simonmar] wibble - - - - - abfd9826 by Simon Marlow at 2005-06-27T14:46:40+00:00 [haddock @ 2005-06-27 14:46:40 by simonmar] name hierarchical HTML files as A-B-C.html instead of A.B.C.html. The old way confused Apache because the extensions are sometimes interpreted as having special meanings. - - - - - a01eea00 by Simon Marlow at 2005-08-04T13:59:40+00:00 [haddock @ 2005-08-04 13:59:40 by simonmar] 0.7 changes - - - - - 170ef87e by Simon Marlow at 2005-08-04T15:08:03+00:00 [haddock @ 2005-08-04 15:08:03 by simonmar] spec file from Jens Peterson - - - - - 7621fde4 by Simon Marlow at 2005-08-04T15:59:30+00:00 [haddock @ 2005-08-04 15:59:30 by simonmar] replace mingw tests with $(Windows) - - - - - a20739bb by Sven Panne at 2005-08-05T07:01:12+00:00 [haddock @ 2005-08-05 07:01:12 by panne] Reverted to previous version (but with bumped version number), the last commit broke RPM building on SuSE systems due to differently named dependencies. As a clarification: All .spec files in the repository have to work at least on SuSE, because that's the system I'm using. And as "Mr. Building Police", I reserve me the right to keep them that way... >:-) It might very well be the case that we need different .spec files for different platforms, so packagers which are unhappy with the current .spec files should contact me, stating the actual problems. - - - - - 4afb15cf by Simon Marlow at 2005-10-05T10:51:45+00:00 [haddock @ 2005-10-05 10:51:45 by simonmar] Add a bug - - - - - 60f69f82 by Simon Marlow at 2005-10-05T12:52:03+00:00 [haddock @ 2005-10-05 12:52:03 by simonmar] Document new behaviour of -s option - - - - - f7e520ca by Simon Marlow at 2005-10-10T15:02:55+00:00 [haddock @ 2005-10-10 15:02:55 by simonmar] extractRecSel: ignore non-record constructors (fixes a crash when using datatypes with a mixture of record and non-record style constructors). - - - - - b2edbedb by Simon Marlow at 2005-10-14T09:44:21+00:00 Start CHANGES for 0.8 - - - - - 21c7ac8d by Simon Marlow at 2005-10-14T23:11:19+00:00 First cut of Cabal build system - - - - - 766cecdd by Simon Marlow at 2005-10-29T08:14:43+00:00 Add configure script and Makefile for the docs Add a separate configure script and build system for building the documentation. The configure and Makefile code is stolen from fptools. This is left as a separate build system so that the main Cabal setup doesn't require a Unix build environment or DocBook XML tools. - - - - - aa36c783 by Duncan Coutts at 2006-01-17T19:29:55+00:00 Add a --wiki=URL flag to add a per-module link to a correspondng wiki page. So each html page gets an extra link (placed next to the source code and contents links) to a corresponding wiki page. The idea is to let readers contribute their own notes, examples etc to the documentation. Also slightly tidy up the code for the --source option. - - - - - e06e2da2 by Simon Marlow at 2006-01-18T09:28:15+00:00 TODO: documnet --wiki - - - - - 17adfda9 by Duncan Coutts at 2006-01-19T20:17:59+00:00 Add an optional wiki link for each top level exported name. In each module, for each "top level" exported entity we add a hyper link to a corresponding wiki page. The link url gets the name of the exported entity as a '#'-style anchor, so if there is an anchor in the page with that name then the users browser should jump directly to it. By "top level" we mean functions, classes, class members and data types (data, type, newtype), but not data constructors, class instances or data type class membership. The link is added at the right of the page and in a small font. Hopefully this is the right balance of visibility/distraction. We also include a link to the wiki base url in the contents and index pages. - - - - - f52324bb by Duncan Coutts at 2006-01-19T20:28:27+00:00 Rewrite pathJoin to only add a path separator when necessary. When the path ends in a file seperator there is no need to add another. Now using "--wiki=http://blah.com/foo/" should do the right thing. (Code snippet adapted from Isaac's FilePath package.) - - - - - 43bb89fa by Duncan Coutts at 2006-01-21T17:15:27+00:00 Teach haddock about line pragmas and add accurate source code links Teach haddock about C and Haskell style line pragmas. Extend the lexer/parser's source location tracking to include the file name as well as line/column. This way each AST item that is tagged with a SrcLoc gets the original file name too. Use this original file name to add source links to each exported item, in the same visual style as the wiki links. Note that the per-export source links are to the defining module rather than whichever module haddock pretends it is exported from. This is what we want for source code links. The source code link URL can also contain the name of the export so one could implement jumping to the actual location of the function in the file if it were linked to an html version of the source rather than just plain text. The name can be selected with the %N wild card. So for linking to the raw source code one might use: --source=http://darcs/haskell.org/foo/%F Or for linking to html syntax highlighted code: --source=http://darcs/haskell.org/foo/%M.html#%N - - - - - edd9f229 by Duncan Coutts at 2006-01-22T00:02:00+00:00 Extend URL variable expansion syntax and add source links to the contents page Like the wiki link on the contents and index page, add a source code link too. Extend the wiki & source URL variable expansion syntax. The original syntax was: %F for the source file name (the .hs version only, not the .lhs or .hs.pp one) %M for the module name (with '.' replaced by '/') The new syntax is: %F or %{FILE} for the original source file name %M or %{MODULE} for the module name (no replacements) %N or %{NAME} for the function/type export name %K or %{KIND} for a type/value flag "t" or "v" with these extensions: %{MODULE/./c} to replace the '.' module seperator with any other char c %{VAR|some text with the % char in it} which means if the VAR is not in use in this URL context then "" else replace the given text with the '%' char replaced by the string value of the VAR. This extension allows us to construct URLs wit optional parts, since the module/file name is not available for the URL in the contents/index pages and the value/type name is not available for the URL at the top level of each module. - - - - - eb3c6ada by Duncan Coutts at 2006-01-23T13:42:34+00:00 Remove the complex substitutions and add more command line flags instead. Instead of incomprehensable URL substitutions like ${MODULE/./-|?m=%} we now use three seperate command line flags for the top level, per-module and per-entity source and wiki links. They are: --source-base, --source-module, --source-entity --comments-base, --comments-module, --comments-entity We leave -s, --source as an alias for --source-module which is how that option behaved previously. The long forms of the substitutions are still available, ${FILE} ${MODULE} etc and the only non-trivial substitution is ${MODULE/./c} to replace the '.' characters in the module name with any other character c. eg ${MODULE/./-} Seperating the source and wiki url flags has the added bonus that they can be turned on or off individually. So users can have per-module links for example without having to also have per-entity links.` - - - - - a2f0f2af by Duncan Coutts at 2006-01-23T13:54:52+00:00 Make the --help output fit in 80 columns. This is a purely cosmetic patch, feel free to ignore it. The only trickery going on is that we don't display the deprecated -s, --source flags in the help message, but we do still accept them. - - - - - 2d3a4b0c by Duncan Coutts at 2006-01-23T14:12:16+00:00 Add documentation for the new --source-* and --comments-* command line options - - - - - 1a82a297 by Simon Marlow at 2006-01-23T17:03:27+00:00 fix markup - - - - - 100d464a by Duncan Coutts at 2006-01-23T18:31:13+00:00 remove a couple TODO items that have been done The --wiki, or rather the --comment-* options are now documented. There is probably no need to have haddock invoke unlit or cpp itself since it can now pick up the line pragmas to get the source locations right. Tools like Cabal will arrange for preprocessors to be run so there is less of a need for tools like haddock to do it themselves. - - - - - 3162fa91 by Simon Marlow at 2006-01-24T14:21:56+00:00 add a test I had lying around - - - - - 98947063 by Simon Marlow at 2006-01-31T13:52:54+00:00 add scabal-version field - - - - - c41876e6 by Neil Mitchell at 2006-02-26T17:48:21+00:00 Add Hoogle output option - - - - - f86fb9c0 by Simon Marlow at 2006-03-08T09:15:20+00:00 add haskell.vim Contributed by Brad Bowman <bsb at bereft.net>, thanks! - - - - - 35d3c511 by benjamin.franksen at 2006-03-03T22:39:54+00:00 fixed libdir (/html was missing) - - - - - 4d08fd7d by Simon Marlow at 2006-03-10T11:13:31+00:00 add PatternGuards extension - - - - - 3f095e70 by Simon Marlow at 2006-03-13T11:40:42+00:00 bug fixes from Brad Bowman - - - - - 8610849d by Sven Panne at 2006-03-19T17:02:56+00:00 Fixed Cabal/RPM build - - - - - 34a994d6 by sven.panne at 2006-04-20T12:39:23+00:00 Avoid pattern guards Due to the use of pattern guards in Haddock, GHC was called with -fglasgow-exts. This in turn enables bang patterns, too, which broke the Haddock build. Removing some unnecessary pattern guards seemed to be the better way of fixing this instead of using a pragma to disable pattern guards. - - - - - bb523f51 by Ross Paterson at 2006-04-24T09:03:25+00:00 extend 'deriving' heuristic a little If an argument of a data constructor has a type variable head, it is irreducible and the same type class can be copied into the constraint. (Formerly we just did this for type variable arguments.) - - - - - dab9fe7a by Simon Marlow at 2006-04-26T10:02:31+00:00 record an idea - - - - - 748b7078 by Simon Marlow at 2006-05-08T08:28:53+00:00 add section about deriving - - - - - 11252ea1 by Simon Marlow at 2006-05-24T15:43:10+00:00 replace a fatal error in lexChar with a parseError - - - - - 382c9411 by Simon Marlow at 2006-05-24T15:45:47+00:00 add a bug - - - - - b79272f5 by Simon Marlow at 2006-05-24T15:46:29+00:00 add a bug report - - - - - 912edf65 by David Waern at 2006-07-10T19:09:23+00:00 Initial modifications -- doesn't compile - - - - - a3c7ba99 by David Waern at 2006-07-11T00:54:19+00:00 More porting work -- doesn't compile - - - - - 0a173d19 by David Waern at 2006-07-11T11:30:03+00:00 Make the repos temporarily compile and illustrate a problem - - - - - bad316de by David Waern at 2006-07-11T15:43:47+00:00 Progress on the porting process - - - - - bbf12d02 by David Waern at 2006-07-11T23:07:44+00:00 More progress on the porting -- first pass starting to shape up - - - - - de580ba2 by David Waern at 2006-07-20T17:48:30+00:00 More progress -- still on phase1 - - - - - 75a917a2 by David Waern at 2006-07-23T18:22:43+00:00 More work on pass1 -- mostly done - - - - - 6697b3f7 by David Waern at 2006-07-23T22:17:40+00:00 More work, started working on the renaming phase -- this code will need a cleanup soon :) - - - - - 82a5bcbb by David Waern at 2006-07-29T16:16:43+00:00 Add instances, build renaming environment, start on the renamer - - - - - c3f8f4f1 by David Waern at 2006-07-29T21:37:48+00:00 Complete the renamer - - - - - 7e00d464 by David Waern at 2006-07-30T21:01:57+00:00 Start porting the Html renderer - - - - - f04ce121 by David Waern at 2006-08-09T20:04:56+00:00 More Html rendering progress - - - - - 20c21b53 by David Waern at 2006-08-10T17:37:47+00:00 More progress - - - - - d7097e0d by David Waern at 2006-08-11T20:31:51+00:00 Cleanup - - - - - a7351e86 by David Waern at 2006-08-12T11:44:47+00:00 Render H98 Data declarations - - - - - 3fb2208e by David Waern at 2006-08-12T17:15:34+00:00 Perfect rendering of Test.hs - - - - - 454fd062 by David Waern at 2006-08-13T21:57:08+00:00 Misc fixes and interface load/save - - - - - 7ef7e7be by David Waern at 2006-08-14T00:56:07+00:00 Some refactoring - - - - - a7d3efef by David Waern at 2006-08-19T20:07:55+00:00 Adapt to latest GHC - - - - - 5fc3c0d7 by David Waern at 2006-08-20T21:28:11+00:00 Move interface read/write to its own module + some cleanup - - - - - 037e011c by David Waern at 2006-08-20T21:38:24+00:00 Small cleanup - - - - - da3a1023 by David Waern at 2006-09-03T16:05:22+00:00 Change mode to BatchCompile to avoid GHC API bug - - - - - 3cc9be3b by David Waern at 2006-09-03T16:06:59+00:00 Starting work on GADT rendering - - - - - 94506037 by David Waern at 2006-09-03T20:02:48+00:00 Compensate for change of export list order in GHC - - - - - c2cec4eb by David Waern at 2006-09-04T20:53:01+00:00 Rename a function - - - - - 9a9735ba by David Waern at 2006-09-05T15:51:21+00:00 Change version number to 2.0 - - - - - 3758a714 by David Waern at 2006-09-05T15:51:49+00:00 Align comment properly - - - - - 68478d9e by David Waern at 2006-09-15T18:03:00+00:00 Remove interface reading/writing code and use the GHC api for creating package environments instead - - - - - d2eedd95 by David Waern at 2006-09-15T18:05:29+00:00 Change the executable name to haddock-ghc-nolib - - - - - fcfbcf66 by David Waern at 2006-09-15T18:05:45+00:00 Small source code cleanup - - - - - d08eb017 by David Waern at 2006-09-15T18:06:21+00:00 Remove handling of --package flag - - - - - b8a4cf53 by David Waern at 2006-09-15T18:07:16+00:00 Remove commented-out code - - - - - bef0a684 by David Waern at 2006-09-15T18:37:57+00:00 Don't warn about missing links to () - - - - - e7d25fd7 by David Waern at 2006-09-15T19:50:49+00:00 Remove Interface and Binary2 modules - - - - - 9894f2a1 by David Waern at 2006-09-15T19:53:43+00:00 Remove debug printing from HaddockHtml - - - - - a0e7455d by David Waern at 2006-09-16T00:16:29+00:00 Comments only - - - - - d5b26fa7 by David Waern at 2006-09-16T00:16:57+00:00 Refactor PackageData creation code and start on building the doc env propery (unfinished) - - - - - 06aaa779 by David Waern at 2006-09-16T00:19:25+00:00 Better comments in Main.hs - - - - - 1a52d1b4 by David Waern at 2006-09-18T22:17:11+00:00 Comments and spacing change - - - - - e5a97767 by David Waern at 2006-09-21T17:02:45+00:00 Remove unnecessary fmapM import in Main - - - - - 9d0f9d3a by David Waern at 2006-09-22T18:07:07+00:00 Make import list in HaddockHtml prettier - - - - - 3452f662 by David Waern at 2006-09-22T18:08:47+00:00 Refactor context rendering - - - - - 12d0a6d0 by David Waern at 2006-09-22T18:09:52+00:00 Do proper HsType rendering (inser parentheses correctly) - - - - - 2c20c2f9 by David Waern at 2006-09-22T18:10:45+00:00 Fix a bug in Main.toHsType - - - - - c5396443 by David Waern at 2006-09-22T18:11:16+00:00 Skip external package modules sort for now - - - - - 3fb95547 by David Waern at 2006-09-22T20:35:40+00:00 Take away trailin "2" on all previously clashing type names - - - - - 2174755f by David Waern at 2006-09-22T20:51:43+00:00 Remove unused imports in Main - - - - - 1e9f7a39 by David Waern at 2006-09-22T20:52:11+00:00 Fix a comment in Main - - - - - 32d9e028 by David Waern at 2006-10-05T16:40:11+00:00 Merge with changes to ghc HEAD - - - - - 3058c8f5 by David Waern at 2006-10-05T16:41:02+00:00 Comment fixes - - - - - b9c217ec by David Waern at 2006-10-05T16:49:59+00:00 Filter out more builtin type constructors from warning messages - - - - - 67e7d252 by David Waern at 2006-10-05T19:38:22+00:00 Refactoring -- better structured pass1 - - - - - cd21c0c1 by David Waern at 2006-10-05T19:44:42+00:00 Remove read/dump interface flags - - - - - 313f9e69 by David Waern at 2006-10-05T19:49:26+00:00 Remove unused pretty printing - - - - - 480f09d1 by David Waern at 2006-12-28T13:22:24+00:00 Update to build with latest GHC HEAD - - - - - 63dccfcb by David Waern at 2007-01-05T01:38:45+00:00 Fixed a bug so that --ghc-flag works correctly - - - - - 3117dadc by David Waern at 2006-12-29T18:53:39+00:00 Automatically get the GHC lib dir - - - - - 9dc84a5c by David Waern at 2006-12-29T19:58:53+00:00 Comments - - - - - 0b0237cc by David Waern at 2007-01-05T16:48:30+00:00 Collect docs based on SrcLoc, syncing with removal of DeclEntity from GHC - - - - - a962c256 by David Waern at 2007-01-05T17:02:47+00:00 Add tabs in haddock.cabal - - - - - 0ca30c97 by David Waern at 2007-01-05T17:04:11+00:00 Add GHCUtils.hs - - - - - c0ab9abe by David Waern at 2007-01-10T11:43:08+00:00 Change package name to haddock-ghc, version 0.1 - - - - - 38e18b27 by David Waern at 2007-01-12T12:03:52+00:00 No binder name for foreign exports - - - - - d18587ab by David Waern at 2007-01-12T12:08:15+00:00 Temp record - - - - - ba6251a0 by David Waern at 2007-01-12T18:27:55+00:00 Remove read/dump-interface (again) - - - - - f4ba2b39 by David Waern at 2007-01-12T18:31:36+00:00 Remove DocOption, use the GHC type - - - - - 511be8bd by David Waern at 2007-01-12T18:32:41+00:00 Use exceptions instead of Either when loading package info - - - - - 0f2144d8 by David Waern at 2007-01-12T18:33:23+00:00 Small type change - - - - - 77507eb7 by David Waern at 2007-01-12T18:33:59+00:00 Remove interface file read/write - - - - - 0ea1e14f by David Waern at 2007-01-17T21:40:26+00:00 Add trace_ppr to GHCUtils - - - - - 3878b493 by David Waern at 2007-01-17T21:40:53+00:00 Sort external package modules and build a doc env - - - - - 8dc323fc by David Waern at 2007-01-17T21:42:41+00:00 Remove comment - - - - - f4c5b097 by David Waern at 2007-01-18T23:22:18+00:00 Add haddock-ghc.cabal and remove ghc option pragma in source file - - - - - da242b2c by David Waern at 2007-01-18T23:22:46+00:00 Remove some tabs - - - - - 288ed096 by David Waern at 2007-01-18T23:39:28+00:00 Moved the defaultErrorHandler to scope only over sortAndCheckModules for now - - - - - 4dd150fe by David Waern at 2007-02-03T21:23:56+00:00 Let restrictCons handle infix constructors - - - - - 97893442 by David Waern at 2007-02-04T16:26:00+00:00 Render infix data constructors - - - - - da89db72 by David Waern at 2007-02-04T16:26:33+00:00 CHange project name to Haddock-GHC - - - - - e93d48af by David Waern at 2007-02-04T16:59:08+00:00 Render infix type constructors properly - - - - - 357bc99b by David Waern at 2007-02-04T17:37:08+00:00 Insert spaces around infix function names - - - - - ab6cfc49 by David Waern at 2007-02-04T17:59:54+00:00 Do not list entities without documentation - - - - - 04249c7e by David Waern at 2007-02-04T19:16:25+00:00 Add GADT support (quite untested) - - - - - 2c223f8d by David Waern at 2007-02-04T19:25:10+00:00 Add package file write/save again! - - - - - b07ed218 by David Waern at 2007-02-04T19:33:02+00:00 Comment out minf_iface based stuff - - - - - 953d1fa7 by David Waern at 2007-02-05T00:12:23+00:00 Solve conflicts - - - - - 593247fc by David Waern at 2007-02-06T19:48:48+00:00 Remove -package flag, GHC's can be used instead - - - - - f658ded2 by David Waern at 2007-02-06T20:50:44+00:00 Start for support of ATs - - - - - 97f9e913 by David Waern at 2007-02-06T20:52:27+00:00 Wibble - - - - - 2ce8e4cf by David Waern at 2007-02-16T12:09:49+00:00 Add the DocOptions change - - - - - dee4a9b5 by David Waern at 2007-03-06T01:24:48+00:00 Wibble - - - - - 7cb99d18 by David Waern at 2007-03-06T01:24:58+00:00 Change version to 2.0 and executable name to haddock - - - - - c5aa02bc by David Waern at 2007-03-08T15:59:49+00:00 Go back to -B flag - - - - - 3a349201 by David Waern at 2007-03-09T13:31:59+00:00 Better exception handling and parsing of GHC flags - - - - - 05a69b71 by David Waern at 2007-03-09T17:45:44+00:00 Remove commented-out DocEntity printing - - - - - 755032cb by davve at dtek.chalmers.se at 2007-03-23T23:30:20+00:00 Remove a file that shouldn't be here - - - - - a7077e5f by davve at dtek.chalmers.se at 2007-03-24T03:58:48+00:00 Remove an import - - - - - 6f55aa8b by davve at dtek.chalmers.se at 2007-03-25T00:46:48+00:00 Start work on Haddock API - - - - - f0199480 by davve at dtek.chalmers.se at 2007-03-25T00:56:36+00:00 Prettify some comments - - - - - f952f9d1 by davve at dtek.chalmers.se at 2007-03-25T00:56:53+00:00 Remove ppr in HaddockTypes - - - - - bc594904 by davve at dtek.chalmers.se at 2007-03-25T00:57:53+00:00 Remove commented out doc env inference - - - - - 11ebf08d by davve at dtek.chalmers.se at 2007-03-25T01:23:25+00:00 De-flatten the namespace - - - - - f696b4bc by davve at dtek.chalmers.se at 2007-03-25T03:21:48+00:00 Add missing stuff to API - - - - - 9a2a04c3 by davve at dtek.chalmers.se at 2007-03-25T03:22:02+00:00 Wibble - - - - - 7d04a6d5 by davve at dtek.chalmers.se at 2007-03-25T03:22:08+00:00 Avoid a GHC bug with parseStaticFlags [] - - - - - 4d2820ba by davve at dtek.chalmers.se at 2007-03-26T04:57:01+00:00 Add fall-through case to mkExportItem - - - - - 6ebc8950 by Stefan O'Rear at 2007-03-26T04:14:53+00:00 Add shebang line to Setup.lhs - - - - - 80966ec5 by davve at dtek.chalmers.se at 2007-03-26T05:24:26+00:00 Fix stupid compile error - - - - - 1ea1385d by davve at dtek.chalmers.se at 2007-04-05T17:19:56+00:00 Do save/read of interface files properly - - - - - 0e4f6541 by David Waern at 2007-04-10T21:08:36+00:00 Add version to ghc dependency - - - - - b0499b63 by David Waern at 2007-04-10T21:37:08+00:00 Change package name to haddock - - - - - 9d50d27e by David Waern at 2007-04-24T00:22:14+00:00 Use filepath package instead of FilePath - - - - - 87c7fcdf by David Waern at 2007-07-10T21:03:04+00:00 Add new package dependencies - - - - - 4768709c by David Waern at 2007-07-11T20:37:11+00:00 Follow changes to record constructor representation - - - - - b9a02fee by Simon Marlow at 2007-05-30T14:00:48+00:00 update to compile with the latest GHC & Cabal - - - - - c0ebdc01 by David Waern at 2007-07-11T21:35:45+00:00 Fix conflicts - - - - - 97f7afd4 by David Waern at 2007-07-11T21:52:38+00:00 Follow changes to the GHC API - - - - - a5b7b58f by David Waern at 2007-07-12T20:36:48+00:00 Call parseStaticFlags before newSession - - - - - f7f50dbc by David Waern at 2007-08-01T21:52:58+00:00 Better indentation in haddock.cabal - - - - - d84e52ad by David Waern at 2007-08-02T00:08:18+00:00 Wibble - - - - - a23f494a by David Waern at 2007-08-02T00:08:24+00:00 Be better at trying to load all module dependencies (debugging) - - - - - ee917f13 by David Waern at 2007-08-03T18:48:08+00:00 Load all targets explicitly (checkModule doesn't chase dependencies anymore) - - - - - 5182d631 by David Waern at 2007-08-16T16:48:55+00:00 Finalize support for links to other packages - - - - - dfd1e3da by David Waern at 2007-08-16T16:51:11+00:00 Fix haddock comment errors in Haddock.Types - - - - - 50c0d83e by David Waern at 2007-08-16T16:51:37+00:00 Remove a debug import - - - - - d84b7c2b by David Waern at 2007-08-16T17:06:30+00:00 Rename PackageData to HaddockPackage - - - - - 3b52cb9f by David Waern at 2007-08-16T17:09:42+00:00 Simplify some comments - - - - - 66fa68d9 by David Waern at 2007-08-16T17:11:38+00:00 Comment the HaddockPackage definition - - - - - 8674c761 by David Waern at 2007-08-16T17:25:54+00:00 Improve code layout in Main - - - - - 571a3a0b by David Waern at 2007-08-16T17:32:13+00:00 Remove explict module imports in Main - - - - - d31b3cb0 by David Waern at 2007-08-16T17:36:23+00:00 Correct comments - - - - - 7f8a9f2b by David Waern at 2007-08-16T17:39:50+00:00 Fix layout problems in Haddock.Types - - - - - 9f421d7f by David Waern at 2007-08-17T11:16:48+00:00 Move options out of Main into Haddock.Options - - - - - 80042b63 by David Waern at 2007-08-17T11:26:59+00:00 Small comment/layout fixes - - - - - b141b982 by David Waern at 2007-08-17T11:28:28+00:00 Change project name from Haddock-GHC to Haddock - - - - - dbeb4a81 by David Waern at 2007-08-17T11:41:05+00:00 Add top module comment to all files - - - - - ce99cc9e by David Waern at 2007-08-17T14:53:04+00:00 Factor out typechecking phase into Haddock.Typecheck - - - - - 6bf75d9e by David Waern at 2007-08-17T16:55:35+00:00 Factor out package code to Haddock.Packages - - - - - b396db37 by David Waern at 2007-08-29T22:40:23+00:00 Major refactoring - - - - - 3d4f95ee by David Waern at 2007-08-29T23:26:24+00:00 Rename HaddockModule to Interface and a few more refactorings - - - - - c55326db by David Waern at 2007-08-29T23:48:03+00:00 Some comment cleanup - - - - - 9a84fc46 by David Waern at 2007-08-29T23:49:29+00:00 Add some modules that I forgot to add earlier - - - - - 4536dce2 by David Waern at 2007-08-29T23:55:24+00:00 Wibble - - - - - 9b7f0206 by David Waern at 2007-08-30T16:03:29+00:00 Wibble - - - - - c52c050a by David Waern at 2007-08-30T16:30:37+00:00 Rename HaddockModule to Interface - - - - - eae2995f by David Waern at 2007-08-30T16:42:59+00:00 Simplify createInterfaces - - - - - 53f99caa by David Waern at 2007-09-29T00:04:31+00:00 Add build-type: Simple to the cabal file - - - - - 0d3103a8 by David Waern at 2007-09-29T00:04:58+00:00 Add containers and array dependency - - - - - 6acf5f30 by David Waern at 2007-09-29T00:13:36+00:00 Prettify the cabal file - - - - - 87c1e378 by David Waern at 2007-09-29T13:16:39+00:00 FIX: consym data headers with more than two variables - - - - - b67fc16a by David Waern at 2007-09-29T14:01:32+00:00 FIX: prefix types used as operators should be quoted - - - - - a8f925bc by David Waern at 2007-09-29T14:02:26+00:00 Use isSymOcc from OccName instead of isConSym - - - - - fc330701 by David Waern at 2007-09-29T14:15:37+00:00 Use isLexConSym/isLexVarSym from OccName - - - - - e4f3dbad by David Waern at 2007-09-29T15:01:08+00:00 FIX: do not quote varsym type operators - - - - - 402207d2 by David Waern at 2007-09-29T15:01:50+00:00 Wibble - - - - - f9d89ef0 by David Waern at 2007-09-29T15:17:40+00:00 Take care when pp tyvars - add parens on syms - - - - - 849e2a77 by David Waern at 2007-10-01T21:56:39+00:00 Go back to using a ModuleMap instead of LookupMod - fixes a bug - - - - - 549dbac6 by David Waern at 2007-10-02T01:05:19+00:00 Improve parsing of doc options - - - - - a36021b8 by David Waern at 2007-10-02T23:05:00+00:00 FIX: double arrows in constructor contexts - - - - - d03bf347 by David Waern at 2007-10-09T16:14:05+00:00 Add a simple test suite - - - - - c252c140 by David Waern at 2007-10-17T16:02:28+00:00 Add --optghc=.. style flag passing to GHC - - - - - cce6c1b3 by David Waern at 2007-10-18T22:03:20+00:00 Add support for --read-interface again - - - - - 33d059c0 by David Waern at 2007-10-18T22:30:18+00:00 Refactoring -- get rid of Haddock.Packages - - - - - f9ed0a4c by David Waern at 2007-10-18T22:34:36+00:00 Name changes - - - - - 8a1c816f by David Waern at 2007-10-20T14:24:23+00:00 Add --ghc-version option - - - - - 4925aaa1 by David Waern at 2007-10-21T14:34:26+00:00 Add some Outputable utils - - - - - 69e7e47f by David Waern at 2007-10-21T14:35:49+00:00 FIX: Ord for OrdName was not comparing modules - - - - - 5a4ae535 by David Waern at 2007-10-21T21:18:48+00:00 Wibble - - - - - 03d48e20 by David Waern at 2007-10-24T15:52:56+00:00 Remove Main from "other modules" - - - - - c66f6d82 by David Waern at 2007-10-24T16:37:18+00:00 Make it possible to run haddock on itself - - - - - 21d156d8 by David Waern at 2007-10-25T14:02:14+00:00 Don't set boot modules as targets - - - - - f8bcf91c by David Waern at 2007-10-31T22:11:17+00:00 Add optimisation flags - - - - - 7ac758f2 by David Waern at 2007-11-04T09:48:28+00:00 Go back to loading only targets (seems to work now) - - - - - 4862aae1 by David Waern at 2007-11-05T22:24:57+00:00 Do full compilation of modules -- temporary fix for GHC API problem - - - - - 697e1517 by David Waern at 2007-11-05T22:25:50+00:00 Don't warn about not being able to link to wired/system/builtin-names - - - - - 892186da by David Waern at 2007-11-06T00:49:21+00:00 Filter out instances with TyCons that are not exported - - - - - 9548314c by David Waern at 2007-11-06T09:37:14+00:00 Wibble - - - - - 5cafd627 by David Waern at 2007-11-08T01:43:07+00:00 Filter out all non-vanilla type sigs - - - - - 04621830 by David Waern at 2007-11-08T01:45:13+00:00 Synch loading of names from .haddock files with GHC's name cache - - - - - 88d37f77 by David Waern at 2007-11-08T01:46:21+00:00 Remove commented-out code - - - - - 6409c911 by David Waern at 2007-11-08T01:56:00+00:00 Small bugfix and cleanup in getDeclFromTyCls - - - - - af59d9c2 by David Waern at 2007-11-08T02:08:44+00:00 Remove OrdName stuff - - - - - 3a615e2e by David Waern at 2007-11-08T02:13:41+00:00 Update runtests.hs following changes to haddock - - - - - 01f3314e by David Waern at 2007-11-08T02:33:01+00:00 Complain if we can't link to wired-in names - - - - - fcafb5d1 by David Waern at 2007-11-09T02:40:16+00:00 Don't exit when there are no file arguments - - - - - 194bc332 by David Waern at 2007-11-09T02:55:37+00:00 Wibble - - - - - dbe4cb55 by David Waern at 2007-11-09T02:56:14+00:00 Wibble - - - - - 82869fda by David Waern at 2007-11-10T17:01:43+00:00 Introduce InstalledInterface structure and add more stuff to the .haddock files We introduce InstalledInterface capturing the part of Interface that is stored in the interface files. We change the ppHtmlContents and ppHtmllIndex to take this structure instead of a partial Interface. We add stuff like the doc map and exported names to the .haddock file (via InstalledInterface). - - - - - d6bb57bf by David Waern at 2007-11-10T17:19:48+00:00 FIX: contents and index should include external package modules when --gen-contents/--gen-index - - - - - e8814716 by David Waern at 2007-11-11T00:29:27+00:00 Remove lDocLinkName and its use in Html backend - - - - - 6f9bd702 by David Waern at 2007-11-11T00:50:57+00:00 Do some refactoring in the html backend This also merges an old patch by Augustsson: Wed Jul 12 19:54:36 CEST 2006 lennart.augustsson at credit-suisse.com * Print type definitions like signatures if given arrows. - - - - - 09d0ce24 by Malcolm.Wallace at 2006-07-20T13:13:57+00:00 mention HsColour in the docs, next to option flags for linking to source code - - - - - 24da6c34 by Malcolm.Wallace at 2006-07-20T13:14:50+00:00 change doc references to CVS to give darcs repository location instead - - - - - 74d52cd6 by David Waern at 2007-11-11T00:55:33+00:00 Update copyright - - - - - fcaa3b4f by Duncan Coutts at 2006-09-08T13:41:00+00:00 Eliminate dep on network by doing a little cut'n'paste haddock depending on the network causes a circular dependency at least if you want to build the network lib with haddock docs. - - - - - 10cc9bda by David Waern at 2007-11-11T02:09:41+00:00 Fix conflicts - - - - - 4e3acd39 by David Waern at 2007-11-11T02:21:19+00:00 Manual merge of a patch from Duncan Coutts that removes the dependency on mtl - - - - - fa9070da by Neil Mitchell at 2006-09-29T15:52:03+00:00 Do not generate an empty table if there are no exports, this fixes a <table></table> tag being generated, which is not valid HTML 4.01 - - - - - d7431c85 by David Waern at 2007-11-11T02:28:50+00:00 Fix conflicts - - - - - f87e8f98 by Simon Marlow at 2006-10-10T11:37:16+00:00 changes for 0.8 - - - - - db929565 by Simon Marlow at 2006-10-10T12:07:12+00:00 fix the name of the source file - - - - - 8220aa4b by Simon Marlow at 2006-10-11T14:17:37+00:00 Rename haddock.js to haddock-util.js haddock.js will be run automatically by Windows when you type 'haddock' if it is found on the PATH, so rename to avoid confusion. Spotted by Adrian Hey. - - - - - 6bccdaa1 by sven.panne at 2006-10-12T15:28:23+00:00 Cabal's sdist does not generate "-src.tar.gz" files, but ".tar.gz" ones - - - - - d3f3fc19 by Simon Marlow at 2006-12-06T16:05:07+00:00 add todo item for --maintainer - - - - - 2da7e269 by Simon Marlow at 2006-12-15T15:52:00+00:00 TODO: do something better about re-exported symbols from another package - - - - - 42d85549 by David Waern at 2007-11-11T02:30:59+00:00 Fix conflicts - - - - - 5e7ef6e5 by Neil Mitchell at 2007-01-11T15:41:15+00:00 Never do spliting index files into many - - - - - f3d4aebe by Neil Mitchell at 2007-01-11T17:07:09+00:00 Add searching on the index page - - - - - bad3ab66 by Neil Mitchell at 2007-01-11T18:17:46+00:00 Delete dead code, now there is only one index page - - - - - cd09eedb by Neil Mitchell at 2007-01-11T18:21:19+00:00 Delete more stuff that is no longer required - - - - - e2806646 by David Waern at 2007-11-11T02:41:53+00:00 Fix conflicts - - - - - a872a823 by Neil Mitchell at 2007-01-11T18:51:43+00:00 Make the index be in case-insensitive alphabetic order - - - - - 8bddd9d7 by Neil Mitchell at 2007-02-06T17:49:12+00:00 Do not create empty tables for data declarations which don't have any constructors, instances or comments. Gets better HTML 4.01 compliance - - - - - 036b8120 by David Waern at 2007-11-11T02:56:58+00:00 Fix conflicts - - - - - f50c1639 by Conal Elliott at 2007-02-14T21:54:00+00:00 added substitution %{FILE///c} - - - - - 402e166a by David Waern at 2007-11-11T03:35:46+00:00 Manual merge of old patch: Sat Apr 21 04:36:43 CEST 2007 Roberto Zunino <zunrob at users.sf.net> * URL expansion for %%, %L, %{LINE} - - - - - 2f264fbd by David Waern at 2007-11-11T03:40:33+00:00 Manual merge of an old patch: Thu Apr 19 20:23:40 CEST 2007 Wolfgang Jeltsch <g9ks157k at acme.softbase.org> * bug fix When Haddock was invoked with the --ignore-all-exports flag but the ignore-exports module attribute wasn't used, hyperlinks weren't created for non-exported names. This fix might not be as clean as one would wish (since --ignore-all-exports now results in ignore_all_exports = True *and* an additional OptIgnoreExports option for every module) but at least the bug seems to be resolved now. - - - - - 7d7ae106 by sven.panne at 2007-09-02T12:18:02+00:00 Install LICENSE in the correct place - - - - - 66eaa924 by David Waern at 2007-11-11T19:02:46+00:00 Fix a bug that made haddock loop - - - - - 4ed47b58 by David Waern at 2007-11-11T19:03:09+00:00 Rename java-script file (this wasn't merge correctly) - - - - - d569534a by David Waern at 2007-11-11T19:06:44+00:00 Don't require -B <ghc-libdir> when no argument files Change readInterfaceFile to take a Maybe Session, to avoid having to pass -B <ghc-libdir> to Haddock when there're no source files to process. This is nice when computing contents/index for external packages. - - - - - 373368bc by Neil Mitchell at 2007-01-11T18:22:44+00:00 Change from tabs to spaces in the ppHtmlIndex function - - - - - 6b063a77 by Neil Mitchell at 2007-01-12T12:17:46+00:00 Rewrite much of the index searching code, previously was too slow to execute on the base library with IE, the new version guarantees less than O(log n) operations be performed, where n is the number in the list (before was always O(n)) - - - - - bfad00b7 by David Waern at 2007-11-11T23:33:53+00:00 Fix conflicts - - - - - cd2dcc09 by Neil Mitchell at 2007-01-12T12:25:01+00:00 Make the max number of results 75 instead of 50, to allow map searching in the base library to work - - - - - 3ae74764 by Neil Mitchell at 2007-01-12T12:58:17+00:00 Make the search box in a form so that enter does the default search - - - - - 142103e5 by David Waern at 2007-11-12T00:03:18+00:00 Merge patch from the old branch: Fri Aug 31 13:21:45 CEST 2007 Duncan Coutts <duncan at haskell.org> * Add category: Development to .cabal file Otherwise it appears on the hackage website in the "Unclassified" category. - - - - - 22ec2ddb by David Waern at 2007-11-25T01:55:29+00:00 A a list of small improvements to the TODO file - - - - - eb0129f4 by Wolfgang Jeltsch at 2007-12-03T23:47:55+00:00 addition of type equality support (at least for HTML generation) - - - - - 816a7e22 by David Waern at 2007-12-08T15:46:26+00:00 Handle class operators correctly when rendering predicates - - - - - 68baaad2 by David Waern at 2007-12-08T16:15:54+00:00 Code layout changes - - - - - 09b77fb4 by David Waern at 2007-12-08T16:16:03+00:00 Handle infix operators correctly in the Type -> HsType translation - - - - - 31c36da2 by David Waern at 2007-12-08T16:24:27+00:00 Add ppLParendTypes/ppLParendType - - - - - b17cc818 by David Waern at 2007-12-08T16:26:12+00:00 Use ppParendType when printing types args in predicates - - - - - ffd1f2cf by David Waern at 2007-12-08T16:45:06+00:00 Fix rendering of instance heads to handle infix operators This is also a refactoring to share this code for rendering predicates. - - - - - ff886d45 by David Waern at 2007-12-08T17:27:46+00:00 Fix rendering of class operators - - - - - e2fcbb9e by David Waern at 2007-12-08T17:59:28+00:00 Fix a bug (use ppTyName instead of ppName to print names in type apps) - - - - - 79a1056e by David Waern at 2007-12-08T21:25:18+00:00 Update tests - - - - - 867741ac by David Waern at 2007-12-08T21:25:49+00:00 Give a diff on test failure - - - - - 7e5eb274 by David Waern at 2008-01-05T14:33:45+00:00 Add DrIFT commands - - - - - 3656454d by David Waern at 2008-01-05T20:26:00+00:00 Add "cabal-version: >= 1.2" to the cabal file - - - - - 77974efc by Simon Marlow at 2007-12-20T09:52:44+00:00 add an item - - - - - f6ac1708 by Simon Marlow at 2007-12-06T14:00:10+00:00 Source links must point to the original module, not the referring module - - - - - eda1d5c9 by David Waern at 2008-01-06T14:40:52+00:00 Manual merge of a patch to the 0.8 branch Thu Dec 6 15:00:10 CET 2007 Simon Marlow <simonmar at microsoft.com> * Source links must point to the original module, not the referring module - - - - - 378f4085 by David Waern at 2008-01-06T16:03:45+00:00 Change stability from stable to experimental - - - - - 8bdafe44 by David Waern at 2008-01-06T16:14:22+00:00 Add haskell.vim (it had been removed somehow) - - - - - ea34d02e by David Waern at 2008-01-06T16:36:57+00:00 Change version to 2.0.0.0 - - - - - 34631ac0 by David Waern at 2008-01-06T16:44:57+00:00 Add missing modules to the cabal file - - - - - 9e142935 by David Waern at 2008-01-06T17:25:42+00:00 Depend on ghc >= 6.8.2 && < 6.9 - - - - - 59f9eeaa by Simon Marlow at 2007-12-20T10:43:04+00:00 add build scripts - - - - - 1c29ae30 by Simon Marlow at 2007-12-20T10:47:07+00:00 update version number - - - - - fe16a3e4 by Simon Marlow at 2007-12-20T10:48:03+00:00 update version - - - - - f688530f by Simon Marlow at 2007-12-20T10:48:29+00:00 doc updates - - - - - ce71b611 by David Waern at 2008-01-07T13:46:32+00:00 Change version in docs and spec - - - - - 03ab8d6f by David Waern at 2008-01-07T13:47:38+00:00 Manually merge over changes to CHANGES for 0.9 - - - - - 39f1b042 by David Waern at 2008-01-07T15:17:41+00:00 Remove the -use-package flag, we don't support it anyway - - - - - 7274a544 by David Waern at 2008-01-07T15:33:05+00:00 Update CHANGES for 2.0.0.0 - - - - - 96594f5d by David Waern at 2008-01-07T15:46:49+00:00 Wibble - - - - - f4c5a4c4 by David Waern at 2008-01-07T15:55:36+00:00 Change url to repo in documentation - - - - - 8a4c77f0 by David Waern at 2008-01-07T16:00:54+00:00 Update CHANGES - - - - - cb3a9288 by David Waern at 2008-01-07T16:02:55+00:00 Documentation fix - - - - - d8e45539 by David Waern at 2008-01-07T16:12:00+00:00 Update docs to say that Haddock accets .lhs files and module names - - - - - 4b5ce824 by David Waern at 2008-01-07T16:12:25+00:00 Document -B option - - - - - 47274262 by David Waern at 2008-01-07T16:23:07+00:00 Update CHANGES - - - - - 7ff314a9 by David Waern at 2008-01-07T16:23:20+00:00 Remove --use-package, --package & --no-implicit.. flags from docs - - - - - 6c3819c0 by David Waern at 2008-01-07T16:23:52+00:00 Remove --no-implicit-prelide flag - - - - - 1b14ae40 by David Waern at 2008-01-07T16:32:26+00:00 Update the "Using literate or pre-processed source" section - - - - - 0117f620 by David Waern at 2008-01-07T16:41:55+00:00 Document the --optghc flag - - - - - 087ab1cf by David Waern at 2008-01-07T16:42:10+00:00 Remove the documenation section on derived instances The problem mentioned there doesn't exist in Haddock 2.0.0.0 - - - - - 7253951e by David Waern at 2008-01-07T16:48:40+00:00 Document OPTIONS_HADDOCK - - - - - 3b6bdcf6 by David Waern at 2008-01-07T16:56:54+00:00 Wibble - - - - - 3025adf9 by David Waern at 2008-01-07T17:08:14+00:00 Wibble - - - - - 5f30f1a0 by David Waern at 2008-01-07T17:15:44+00:00 Change synopsis field to description - - - - - 1673f54b by David Waern at 2008-01-07T17:18:21+00:00 Change my email address in the cabal file - - - - - 55aa9808 by David Waern at 2008-01-07T18:18:02+00:00 Add documentation for readInterfaceFile - - - - - eaea417f by David Waern at 2008-01-07T18:21:30+00:00 Export necessary stuff from Distribution.Haddock - - - - - 7ea18759 by David Waern at 2008-01-07T18:31:49+00:00 Remove dep on Cabal - - - - - 7b79c74e by David Waern at 2008-01-07T18:33:49+00:00 Remove dep on process - - - - - ce3054e6 by David Waern at 2008-01-16T23:01:21+00:00 Add feature-requsts from Henning Thielemann to TODO - - - - - 0c08f1ec by David Waern at 2008-01-16T23:03:02+00:00 Record a bug in TODO - - - - - b04605f3 by David Waern at 2008-01-23T16:59:06+00:00 Add a bug reported by Ross to TODO - - - - - 5b17c030 by David Waern at 2008-01-23T18:05:53+00:00 A a bug report to TODO - - - - - 1c993b0d by David Waern at 2008-01-25T16:30:25+00:00 Accept test output - - - - - c22fc0d0 by David Waern at 2008-01-25T16:34:49+00:00 Accept test output - - - - - 4b795811 by David Waern at 2008-01-25T16:38:37+00:00 Change Hidden.hs (test) to use OPTIONS_HADDOCK - - - - - c124dbd9 by David Waern at 2008-01-25T16:39:23+00:00 Accept test output - - - - - ec6f6eea by David Waern at 2008-01-25T16:42:08+00:00 Add Hidden.html.ref to tests - - - - - 1dc9610c by David Waern at 2008-02-02T20:50:51+00:00 Add a comment about UNPACK bug in TODO - - - - - 2d3f7081 by David Waern at 2008-02-09T22:33:24+00:00 Change the representation of DocNames Ross Paterson reported a bug where links would point to the defining module instead of the "best" module for an identifier (e.g Int pointing to GHC.Base instead of Data.Int). This patch fixes this problem by refactoring the way renamed names are represented. Instead of representing them by: > data DocName = Link Name | NoLink Name they are now represented as such: > data DocName = Documented Name Module | Undocumented Name and the the link-env looks like this: > type LinkEnv = Map Name Module There are several reasons for this. First of all, the bug was caused by changing the module part of Names during the renaming process, without changing the Unique field. This caused names to be overwritten during the loading of .haddock files (which caches names using the NameCache of the GHC session). So we might create new Uniques during renaming to fix this (but I'm not sure that would be problem-free). Instead, we just keep the Name and add the Module where the name is best documented, since it can be useful to keep the original Name around (for e.g. source-code location info and for users of the Haddock API). Also, the names Link/NoLink don't really make sense, since wether to use links or not is entirely up to the users of DocName. In the process of following this change into H.Backends.Html I removed the assumption that binder names are Undocumented (which was just an unnecessary assumption, the OccName is the only thing needed to render these). This will probably make it possible to get rid of the renamer and replace it with a traversal from SYB or Uniplate. Since DocName has changed, InterfaceFile has changed so this patch also increments the file-format version. No backwards-compatibility is implemented. - - - - - 0f28c921 by David Waern at 2008-02-09T23:00:36+00:00 H.GHC.Utils: remove unused imports/exports - - - - - 0c44cad5 by David Waern at 2008-02-10T00:28:13+00:00 H.GHC.Utils: add some functions that were removed by mistake - - - - - e3452f49 by David Waern at 2008-02-10T00:28:48+00:00 Fix some trivial warnings in H.InterfaceFile - - - - - a6d74644 by David Waern at 2008-02-10T00:48:06+00:00 Update the version message to fit in small terminals - - - - - 76c9cd3e by David Waern at 2008-02-10T14:47:39+00:00 Remove bugs from TODO that don't apply anymore since the port - - - - - 5e10e090 by David Waern at 2008-02-10T15:22:47+00:00 Remove bugs from TODO that weren't actual bugs - - - - - fef70878 by David Waern at 2008-02-10T15:23:44+00:00 Remove yet another item from TODO that was not an actual bug - - - - - e1af47b8 by David Waern at 2008-02-11T10:25:57+00:00 Bump the version number to 2.1.0 Since the exported datatype DocName has changed, we need to bump the major version number. Let's also drop the fourth version component, it's not that useful. - - - - - e3be7825 by David Waern at 2008-04-11T14:29:04+00:00 Add a bug to TODO - - - - - cb6574be by David Waern at 2008-04-11T16:00:45+00:00 Use the in-place haddock when running tests - - - - - c6d7af0d by David Waern at 2008-04-11T16:09:16+00:00 Turn off GHC warnings when running tests - - - - - 7f61b546 by David Waern at 2008-04-11T17:24:00+00:00 Add a flag for turning off all warnings - - - - - 883b8422 by David Waern at 2008-04-12T14:02:18+00:00 Fix printing of data binders - - - - - 2a0db8fc by David Waern at 2008-04-12T18:52:46+00:00 Fix missing parenthesis in constructor args bug - - - - - 1b3ac3f9 by David Waern at 2008-04-12T18:57:23+00:00 Simplify test suite and add tests I move all tests into one single directory to simplify things, and add a test for the last bug that was fixed. - - - - - 8f178376 by David Waern at 2008-04-12T19:00:15+00:00 Add a script for copying test output to "expected" output - - - - - 193e3a03 by David Waern at 2008-04-12T19:16:37+00:00 Remove two fixed bugs from TODO - - - - - ddc9130c by David Waern at 2008-04-12T19:37:06+00:00 Update test README - - - - - 956069c0 by David Waern at 2008-05-01T12:16:14+00:00 Update version number in spec and docs - - - - - 5478621c by David Waern at 2008-05-01T12:28:12+00:00 Remove claim of backwards compatibility from docs for readInterfaceFile - - - - - 4a16dea9 by David Waern at 2008-05-01T12:33:04+00:00 Update CHANGES - - - - - 804216fb by David Waern at 2008-05-01T12:43:16+00:00 Add a synopsis - - - - - fd0c84d5 by David Waern at 2008-05-01T12:44:44+00:00 Add Haddock.DocName to the cabal file - - - - - 9f4a7439 by David Waern at 2008-05-01T12:45:53+00:00 Remove -fglasgow-exts and -fasm - - - - - aee7c145 by David Waern at 2008-05-01T12:54:01+00:00 Add LANGUAGE pragmas to source files - - - - - 9a58428b by David Waern at 2008-05-01T12:54:19+00:00 Add extensions to cabal file - - - - - 494f1bee by David Waern at 2008-05-01T13:12:09+00:00 Export DocName in the API - - - - - c938196b by David Waern at 2008-05-01T13:12:19+00:00 Add hide options to some source files - - - - - 236e86af by Neil Mitchell at 2008-06-07T20:45:10+00:00 Rewrite the --hoogle flag support - - - - - 6d910950 by Neil Mitchell at 2008-06-14T10:56:50+00:00 Simplify the newtype/data outputting in Hoogle, as haddock does it automatically - - - - - f87a95a8 by Neil Mitchell at 2008-06-14T12:10:18+00:00 Add initial structure for outputting documentation as well, but does not yet output anything - - - - - 7c3bce54 by Neil Mitchell at 2008-06-14T12:27:07+00:00 Remove <document comment> from the Hoogle output - - - - - 9504a325 by Neil Mitchell at 2008-06-16T06:33:21+00:00 Default to "main" if there is no package, otherwise will clobber hoogle's hoogle info - - - - - 4a794a79 by Neil Mitchell at 2008-06-16T06:53:29+00:00 Change packageName to packageStr, as it better reflects the information stored in it - - - - - 7abc9baf by Neil Mitchell at 2008-06-16T07:09:49+00:00 Add modulePkgInfo to Haddock.GHC.Utils, which gives back package name and version info - - - - - 8ca11514 by Neil Mitchell at 2008-06-16T07:13:48+00:00 Change Hoogle to take the package name and package version separately - - - - - a6da452d by Neil Mitchell at 2008-06-18T11:29:46+00:00 In Hoogle do not list things that are not local to this module - - - - - 974b76b7 by David Waern at 2008-06-19T18:40:13+00:00 Be more consistent with GHC API naming in H.GHC.Utils - - - - - 2facb4eb by David Waern at 2008-06-19T19:03:03+00:00 Update test output - - - - - c501de72 by David Waern at 2008-06-26T20:26:49+00:00 Use ghc-paths to get the lib dir The path can still be overridden using the -B flag. It's not longer required to pass the lib dir to the program that runs the test suite. - - - - - ac4c6836 by David Waern at 2008-06-26T20:33:08+00:00 Update CHANGES - - - - - 9d21c60a by David Waern at 2008-06-26T20:34:53+00:00 Update README - - - - - 741448f0 by David Waern at 2008-06-26T21:12:57+00:00 Improve wording in the help message - - - - - b1b42b11 by David Waern at 2008-06-30T10:16:17+00:00 Rename ForeignType - - - - - 6d6c2b34 by David Waern at 2008-06-30T10:25:09+00:00 Rename TyFamily - - - - - 8d1125ed by David Waern at 2008-06-30T10:37:21+00:00 Rename type patterns - - - - - 7610a4cb by David Waern at 2008-06-30T10:45:07+00:00 Rename associated types - - - - - 8eeba14c by David Waern at 2008-06-30T10:47:41+00:00 Remove the TODO file now that we have a trac - - - - - 1af5b25b by David Waern at 2008-07-02T18:19:28+00:00 Render type family declarations (untested) - - - - - ceb99797 by David Waern at 2008-07-02T18:24:06+00:00 Remove redundant check for summary when rendering data types - - - - - b36a58e0 by David Waern at 2008-07-02T22:01:38+00:00 More support for type families and associated types Now we just need to render the instances - - - - - 78784879 by David Waern at 2008-07-07T22:13:58+00:00 Remove filtering of instances We were filtering out all instances for types with unknown names. This was probably an attempt to filter out instances for internal types. I am removing the filtering for the moment, and will try to fix this properly later. - - - - - 3e758dad by David Waern at 2008-06-30T18:50:30+00:00 Run haddock in-place during testing - - - - - d9dab0ce by David Waern at 2008-07-08T21:04:32+00:00 Remove index.html and doc-index.html from output, they should not be versioned - - - - - 3e6c4681 by David Waern at 2008-07-08T21:06:42+00:00 Update test output following change to instance filtering - - - - - e34a3f14 by David Waern at 2008-07-12T16:48:28+00:00 Stop using the map from exported names to declarations During creation of the interface, we were using two maps: one from exported names to declarations, and one from all defined names in the module to declarations. The first contained subordinate names while the second one didn't. The first map was never used to look up names not defined in the associated module, so if we add subordinate names to the second map, we could use it everywhere. That's that this patch does. This simplifies code because we don't have to pass around two maps everywhere. We now store the map from locally defined things in the interface structure instead of the one from exported names. - - - - - 2e1d2766 by David Waern at 2008-07-12T16:55:21+00:00 Get the all locally defined names from GHC API We previously had some code to compute all locally defined names in a module including subordinate names. We don't need it since we can get the names from modInfoTyThings in the GHC API. - - - - - bf637994 by David Waern at 2008-07-13T13:09:16+00:00 Refactoring in H.Interface.Create We were creating a doc map, a declaration map and a list of entities separately by going through the HsGroup. These structures were all used to build the interface of a module. Instead of doing this, we can start by creating a list of declarations from the HsGroup, then collect the docs directly from this list (instead of using the list of entities), creating a documentation map. We no longer need the Entity data type, and we can store a single map from names to declarations and docs in the interface, instead of the declaration map and the doc map. This way, there is only one place where we filter out the declarations that we don't want, and we can remove a lot of code. Another advantage of this is that we can create the exports directly out of the list of declarations when we export the full module contents. (Previously we did a look up for each name to find the declarations). This is faster and removes another point where we depend on names to identify exported declarations, which is good because it eliminates problems with instances (which don't have names). - - - - - 547e410e by David Waern at 2008-07-13T13:34:51+00:00 Remove FastString import and FSLIT macro in H.I.Create -- they were unused - - - - - 693759d1 by David Waern at 2008-07-13T13:36:23+00:00 Remove unused import from H.I.Create - - - - - cde6e7fb by David Waern at 2008-07-13T13:51:54+00:00 Small touches - - - - - 96de8f1d by David Waern at 2008-07-20T11:21:46+00:00 Preparation for rendering instances as separate declarations We want to be able to render instances as separate declarations. So we remove the Name argument of ExportDecl, since instances are nameless. This patch also contains the first steps needed to gather type family instances and display them in the backend, but the implementation is far from complete. Because of this, we don't actually show the instances yet. - - - - - b0f824fb by David Waern at 2008-07-20T15:53:08+00:00 Follow changes to ExportDecl in Hoogle - - - - - 1192eff3 by Neil Mitchell at 2008-06-26T00:28:10+00:00 Change how the Hoogle backend outputs classes, adding the context in - - - - - 7a0d1464 by Neil Mitchell at 2008-06-26T00:28:46+00:00 Remove the indent utility function from Hoogle backend - - - - - 3361241b by Neil Mitchell at 2008-06-26T09:45:09+00:00 Add support for Hoogle writing ForeignImport/ForeignExport properly - - - - - 795ad3bf by Neil Mitchell at 2008-06-26T12:15:25+00:00 Flesh out the Hoogle code to render documentation - - - - - 23277995 by Neil Mitchell at 2008-06-26T14:56:41+00:00 Fix a bug in the Hoogle backend, unordered lists were being written out <ul>...</u> - - - - - db739b27 by Neil Mitchell at 2008-06-26T15:09:54+00:00 Remove any white space around a <li> element - - - - - f2e6bb8c by Neil Mitchell at 2008-07-10T15:30:47+00:00 Remove the TODO in the Hoogle HTML generation, was already done - - - - - 693ec9a3 by Neil Mitchell at 2008-07-10T15:53:00+00:00 Put brackets round operators in more places in the Hoogle output - - - - - 842313aa by Neil Mitchell at 2008-07-10T16:01:25+00:00 Print type signatures with brackets around the name - - - - - cf93deb0 by David Waern at 2008-07-20T17:04:22+00:00 Bump version number to 2.2.0 - - - - - 30e6a8d1 by David Waern at 2008-07-20T17:04:41+00:00 Resolve conflicts in H.B.Hoogle - - - - - 1f0071c9 by David Waern at 2008-07-23T23:05:01+00:00 Add "all" command to runtests.hs that runs all tests despite failures - - - - - f2723023 by David Waern at 2008-07-23T23:08:39+00:00 Update tests/README - - - - - c0304a11 by David Waern at 2008-07-23T23:21:15+00:00 Be compatible with GHC 6.8.3 The cabal file is converted to use the "new" syntax with explicit Library and Executable sections. We define the __GHC_PATCHLEVEL__ symbol using a conditinal cpp-options field in the cabal file. (Ideally, Cabal would define the symbol for us, like it does for __GLASGOW_HASKELL__). We use these symbols to #ifdef around a small difference between 6.8.2 and 6.8.3. Previously, we only supported GHC 6.8.2 officially but the dependencies field said "ghc <= 6.9". This was just for convenience when testing against the (then compatible) HEAD version of GHC, and was left in the release by mistake. Now, we support both GHC 6.8.2 and 6.8.3 and the dependencies field correctly reflects this. - - - - - 88a5fe71 by David Waern at 2008-07-23T23:54:16+00:00 Depend on the currently available ghc-paths versions only - - - - - 8738d97b by David Waern at 2008-07-24T10:50:44+00:00 FIX haskell/haddock#44: Propagate parenthesis level when printing documented types - - - - - 05339119 by David Waern at 2008-07-24T16:06:18+00:00 Drop unnecessary parenthesis in types, put in by the user We were putting in parenthesis were the user did. Let's remove this since it just clutters up the types. The types are readable anyway since we print parens around infix operators and do not rely on fixity levels. When doing this I discovered that we were relying on user parenthesis when printin types like (a `O` b) c. This patchs fixes this problem so that parenthesis are always inserted around an infix op application in case it is applied to further arguments, or if it's an arguments to a type constructor. Tests are updated. - - - - - b3a99828 by David Waern at 2008-07-24T10:19:43+00:00 Print parenthesis around non-atomic banged types Fixes half of haskell/haddock#44 - - - - - ab5238e0 by David Waern at 2008-07-24T22:07:49+00:00 Add a reference file for the TypeFamilies test - - - - - 1941cc11 by David Waern at 2008-07-25T17:15:53+00:00 Simplify definition of pretty and trace_ppr - - - - - e3bfa33c by David Waern at 2008-07-25T17:18:27+00:00 Warning messages Output a warning when filtering out data/type instances and associated types in instances. We don't show these in the documentation yet, and we need to let the user know. - - - - - 9b85fc89 by David Waern at 2008-07-25T17:45:40+00:00 Doc: Mention Hoogle in the Introduction - - - - - afb2dd60 by David Waern at 2008-07-25T17:49:00+00:00 Doc: update -B description - - - - - 584c0c91 by David Waern at 2008-07-25T18:11:38+00:00 Doc: describe -w flag - - - - - 77619c24 by David Waern at 2008-07-28T12:29:07+00:00 Remove TODO from cabal file - - - - - 96717d5f by David Waern at 2008-07-28T12:29:27+00:00 Support type equality predicates - - - - - c2fd2330 by David Waern at 2008-07-29T19:45:14+00:00 Move unL from H.B.Hoogle to H.GHC.Utils I like Neil's shorter unL better than unLoc from the GHC API. - - - - - c4c3bf6a by David Waern at 2008-07-29T19:47:36+00:00 Do not export ATs when not in list of subitems - - - - - bf9a7b85 by David Waern at 2008-08-03T11:42:59+00:00 Filter out ForeignExports - - - - - df59fcb0 by David Waern at 2008-08-03T14:02:51+00:00 Filter out more declarations The previous refactorings in H.I.Create introduced a few bugs. Filtering of some types of declarations that we don't handle was removed. This patch fixes this. - - - - - 2f8a958b by David Waern at 2008-08-03T15:24:07+00:00 Move reL to H.GHC.Utils so we can use it everywhere - - - - - 8ec15efd by David Waern at 2008-08-03T15:25:00+00:00 Use isVanillaLSig from GHC API instead of home brewn function - - - - - 300f93a2 by David Waern at 2008-08-03T15:25:27+00:00 Filter out separately exported ATs This is a quick and dirty hack to get rid of separately exported ATs. We haven't decided how to handle them yet. No warning message is given. - - - - - 8776d1ec by David Waern at 2008-08-03T16:21:21+00:00 Filter out more declarations and keep only vanilla type sigs in classes - - - - - ea07eada by David Waern at 2008-08-03T16:48:00+00:00 Fix layout - - - - - dd5e8199 by David Waern at 2008-08-03T16:50:52+00:00 Move some utility functions from H.I.Create to H.GHC.Utils - - - - - 4a1dbd72 by David Waern at 2008-08-03T17:39:55+00:00 Do not filter out doc declarations - - - - - 0bc8dca4 by David Waern at 2008-08-03T17:47:26+00:00 Filter out separately exported ATs (take two) - - - - - af970fe8 by David Waern at 2008-08-03T22:39:17+00:00 Update CHANGES - - - - - 5436ad24 by David Waern at 2008-08-03T22:40:20+00:00 Bump version number to 2.2.1 - - - - - d66de448 by David Waern at 2008-08-05T19:00:32+00:00 Remove version restriction on ghc-paths - - - - - 534b1364 by David Waern at 2008-08-05T19:04:35+00:00 Bump version to 2.2.2 and update CHANGES - - - - - 549188ff by David Waern at 2008-08-05T19:16:49+00:00 Fix CHANGES - - - - - 0d156bb4 by Luke Plant at 2008-08-11T15:20:59+00:00 invoking haddock clarification and help - - - - - 748295cc by David Waern at 2008-08-11T18:56:37+00:00 Doc: say that the --hoogle option is functional - - - - - 43301db4 by David Waern at 2008-08-05T19:26:08+00:00 Change ghc version dependency to >= 6.8.2 - - - - - 3e5a53b6 by David Waern at 2008-08-10T22:42:05+00:00 Make H.GHC.Utils build with GHC HEAD - - - - - 7568ace0 by David Waern at 2008-08-11T19:41:54+00:00 Import Control.OldException instead of C.Exception when using ghc >= 6.9 We should really test for base version instead, but I don't currently know which version to test for. - - - - - b71ae991 by David Waern at 2008-08-12T22:40:39+00:00 Make our .haddock file version number depend on the GHC version We need to do this, since our .haddock format can potentially change whenever GHC's version changes (even when only the patchlevel changes). - - - - - 6307ce3f by David Waern at 2008-08-12T22:49:57+00:00 Remove matching on NoteTy in AttachInstances, it has been removed - - - - - 2dbcfd5f by David Waern at 2008-08-12T23:02:02+00:00 Comment out H.GHC.loadPackages - it is unused and doesn't build with ghc >= 6.9 - - - - - c74db5c2 by David Waern at 2008-08-12T23:03:58+00:00 Hide <.> from GHC import in Hoogle only for ghc <= 6.8.3 - - - - - 69a44ebb by David Waern at 2008-08-12T23:11:12+00:00 Follow changes to parseDynamic/StaticFlags - - - - - 5881f3f0 by David Waern at 2008-08-13T21:43:58+00:00 Add __GHC_PATCHLEVEL__ symbol also when building the library - - - - - 8574dc11 by David Waern at 2008-08-13T21:44:17+00:00 Follow move of package string functions from PackageConfig to Module - - - - - c9baa77f by David Waern at 2008-08-13T21:45:29+00:00 Follow extensible exceptions changes - - - - - 9092de15 by David Waern at 2008-08-13T21:46:20+00:00 Update test following Haddock version change - - - - - ebe569a4 by David Waern at 2008-08-13T21:46:54+00:00 Follow changes to parseDynamic- parseStaticFlags in GHC - - - - - b8a5ffd3 by David Waern at 2008-08-13T21:47:36+00:00 Follow changes to Binary in GHC 6.9 - - - - - edfda1cc by David Waern at 2008-08-13T21:50:17+00:00 Change ghc version dependency to >= 6.8.2 && <= 6.9 - - - - - d59be1cf by Neil Mitchell at 2008-08-12T16:02:53+00:00 Output all items, even if they are not defined in this module - ensures map comes from Prelude, not just GHC.Base - - - - - dda93b9f by Neil Mitchell at 2008-08-12T21:37:32+00:00 Add support for type synonyms to Hoogle, was accidentally missing before (woops!) - - - - - b6ee795c by Neil Mitchell at 2008-08-13T14:03:24+00:00 Generalise Hoogle.doc and add a docWith - - - - - 415e1bb2 by Neil Mitchell at 2008-08-13T14:03:46+00:00 Make Hoogle add documentation to a package - - - - - 790a1202 by Neil Mitchell at 2008-08-18T12:52:43+00:00 Use the same method to put out signatures as class methods in the Hoogle backend - - - - - ded37eba by Neil Mitchell at 2008-08-18T12:53:04+00:00 Remove Explicit top-level forall's when pretty-printing signatures - - - - - 6468c722 by Neil Mitchell at 2008-08-20T07:59:13+00:00 Simplify the code by removing not-to-important use of <.> in the Hoogle back end - - - - - 788c3a8b by Neil Mitchell at 2008-08-21T18:20:24+00:00 In the hoogle back end, markup definition lists using <i>, not <b> - - - - - 77d4b000 by Ian Lynagh at 2008-08-14T10:49:14+00:00 Add a Makefile for GHC's build system. Still won't work yet, but we're closer - - - - - 920440d7 by Ian Lynagh at 2008-08-27T18:06:46+00:00 Add haddock.wrapper - - - - - bcda925f by Ian Lynagh at 2008-08-27T18:07:02+00:00 Add a manual Cabal flag to control the ghc-paths dependency - - - - - 04d194e2 by Ian Lynagh at 2008-08-27T20:41:27+00:00 Update extensions in Cabal file Use ScopedTypeVariables instead of PatternSignatures - - - - - 12480043 by Ian Lynagh at 2008-08-27T20:41:55+00:00 Increase the upper bound on the GHC version number - - - - - b1f809a5 by Ian Lynagh at 2008-08-27T21:32:22+00:00 Fix some warnings - - - - - aea0453d by Ian Lynagh at 2008-08-28T14:22:29+00:00 Fixes for using haddock in a GHC build tree - - - - - ad23bf86 by Ian Lynagh at 2008-08-28T21:14:27+00:00 Don't use Cabal wrappers on Windows - - - - - 35858e4c by Ian Lynagh at 2008-08-29T00:07:42+00:00 Fix in-tree haddock on Windows - - - - - c2642066 by Ian Lynagh at 2008-09-03T22:35:53+00:00 follow library changes - - - - - 2eb55d50 by Ian Lynagh at 2008-09-07T18:52:51+00:00 bindist fixes - - - - - 3daa5b59 by Ian Lynagh at 2008-09-10T16:58:18+00:00 We need to tell haddock that its datasubdir is . or it can't find package.conf - - - - - 388fd8c2 by Ian Lynagh at 2008-09-10T19:47:44+00:00 Fix haddock inplace on Windows - - - - - 70a641c1 by Ian Lynagh at 2008-09-10T22:15:44+00:00 Fix installed haddock on Windows - - - - - 83c1e997 by Neil Mitchell at 2008-09-11T10:48:55+00:00 Import GHC.Paths if not IN_GHC_TREE, seems to match the use of GHC.Paths functions much better - - - - - b452519b by Ian Lynagh at 2008-09-12T12:58:24+00:00 Add a LANGUAGE ForeignFunctionInterface pragma - - - - - afbd592c by Ian Lynagh at 2008-09-12T12:59:13+00:00 Wibble imports - - - - - 547ac4ad by Ian Lynagh at 2008-09-14T15:34:22+00:00 Add a "#!/bin/sh" to haddock.wrapper - - - - - f207a807 by Ian Lynagh at 2008-09-15T10:02:32+00:00 Use "exec" when calling haddock in the wrapper - - - - - 2ee68509 by Thomas Schilling at 2008-09-15T09:09:16+00:00 Port Haddock.Interface to new GHC API. This required one bigger change: 'readInterfaceFile' used to take an optional 'Session' argument. This was used to optionally update the name cache of an existing GHC session. This does not work with the new GHC API, because an active session requires the function to return a 'GhcMonad' action, but this is not possible if no session is provided. The solution is to use an argument of functions for reading and updating the name cache and to make the function work for any monad that embeds IO, so it's result type can adapt to the calling context. While refactoring, I tried to make the code a little more self-documenting, mostly turning comments into function names. - - - - - 3bb96431 by Thomas Schilling at 2008-09-15T09:09:37+00:00 Reflect GHC API changes. - - - - - 2e60f714 by Thomas Schilling at 2008-09-15T09:10:37+00:00 Port Haddock.GHC.Typecheck to new GHC API. - - - - - 9cfd4cff by Thomas Schilling at 2008-09-15T09:11:00+00:00 Port Haddock.GHC to new GHC API. - - - - - caffa003 by Thomas Schilling at 2008-09-15T09:11:25+00:00 Port Main to new GHC API. - - - - - 069a4608 by Ian Lynagh at 2008-09-21T11:19:00+00:00 Fix paths used on Windows frmo a GHC tree: There is no whare directory - - - - - 7ceee1f7 by Ian Lynagh at 2008-09-21T12:20:16+00:00 Fix the in-tree haddock on Windows - - - - - 0d486514 by Ian Lynagh at 2008-09-23T18:06:58+00:00 Increase the GHC upper bound from 6.11 to 6.13 - - - - - f092c414 by Neil Mitchell at 2008-09-11T14:56:07+00:00 Do not wrap __ in brackets - - - - - 036bdd13 by Ian Lynagh at 2008-09-28T01:42:35+00:00 Fix building haddock when GhcProfiled=YES - - - - - 01434a89 by David Waern at 2008-09-24T20:24:21+00:00 Add PatternSignatures LANGUAGE pragma to Main and Utils - - - - - 1671a750 by David Waern at 2008-10-02T22:57:25+00:00 For source links, get original module from declaration name instead of environment. Getting it from the environment must have been a remnant from the times when we were using unqualified names (versions 0.x). - - - - - a25dde99 by David Waern at 2008-10-02T22:59:57+00:00 Remove ifaceEnv from Interface - it's no longer used - - - - - 610993da by David Waern at 2008-10-02T23:04:58+00:00 Write a comment about source links for type instance declarations - - - - - 5a96b5d5 by Thomas Schilling at 2008-10-03T10:45:08+00:00 Follow GHC API change of parseModule. - - - - - 5a943ae5 by Ian Lynagh at 2008-10-03T15:56:58+00:00 TAG 2008-10-03 - - - - - 76cdd6ae by Thomas Schilling at 2008-10-08T12:29:50+00:00 Only load modules once when typechecking with GHC. This still doesn't fix the memory leak since the typechecked source is retained and then processed separately. To fix the leak, modules must be processed directly after typechecking. - - - - - 7074d251 by David Waern at 2008-10-09T23:53:54+00:00 Interleave typechecking with interface creation At the same time, we fix a bug where the list of interfaces were processed in the wrong order, when building the links and renaming the interfaces. - - - - - 4b9b2b2d by David Waern at 2008-10-09T23:54:49+00:00 Add some strictness annotations in Interface We add some strictness annotations to the fields of Interface, so that less GHC data is hold on to during processing. - - - - - 22035628 by David Waern at 2008-10-10T20:02:31+00:00 Remove typecheckFiles and MonadUtils import from H.GHC.Typeccheck - - - - - be637ad3 by David Waern at 2008-10-10T20:33:38+00:00 Make Haddock build with GHC 6.8.2 - - - - - 523b3404 by David Waern at 2008-10-10T21:08:09+00:00 Fix documentation for createInterfaces - - - - - e1556702 by David Waern at 2008-10-10T21:26:19+00:00 Hide H.Utils in library - - - - - a8e751c3 by David Waern at 2008-10-10T21:34:59+00:00 Add back .haddock file versioning based on GHC version It was accidentally removed in the patch for GHC 6.8.2 compatibility - - - - - 06fb3c01 by David Waern at 2008-10-10T21:47:15+00:00 Bump version number to 2.3.0 - - - - - ff087fce by David Waern at 2008-10-10T22:35:49+00:00 Add support for DocPic The support for DocPic was merged into the GHC source long ago, but the support in Haddock was forgotten. Thanks Peter Gavin for submitting this fix! - - - - - 3af85bf6 by David Waern at 2008-10-10T23:34:05+00:00 Update tests - - - - - 0966873c by Simon Marlow at 2008-10-10T14:43:04+00:00 no need for handleErrMsg now, we don't throw any ErrMsgs - - - - - f1870de3 by Clemens Fruhwirth at 2008-10-10T13:29:36+00:00 Compile with wrapper but remove it for dist-install - - - - - 7b440dc2 by David Waern at 2008-10-11T14:02:25+00:00 Remove interface from LinksInfo It was there to know the documentation home module when creating a wiki link, but we already know this since we have the DocName. - - - - - e5729e6a by David Waern at 2008-10-15T20:49:18+00:00 Wibble - - - - - b2a8e01a by David Waern at 2008-10-15T21:03:36+00:00 Use type synonyms for declarations and docs in H.I.Create - - - - - be71a15b by David Waern at 2008-10-15T21:12:17+00:00 Comment out unused type family stuff completely - - - - - 91aaf075 by David Waern at 2008-10-15T21:49:04+00:00 Wibble - - - - - 42ba4eb4 by David Waern at 2008-10-15T21:53:53+00:00 Move convenient type synonym to H.Types - - - - - db11b723 by David Waern at 2008-10-15T22:14:07+00:00 Add DeclInfo to H.Types - - - - - 193552b6 by David Waern at 2008-10-15T22:15:01+00:00 Add subordinates with docs to the declaration map The only place in the code where we want the subordinates for a declaration is right after having looked up the declaration in the map. And since we include subordinates in the map, we might as well take the opportunity to store those subordinates that belong to a particular declaration together with that declaration. We also store the documentation for each subordinate. - - - - - 31e6eebc by David Waern at 2008-10-16T17:18:47+00:00 Wibble - - - - - 0dcbd79f by David Waern at 2008-10-16T20:58:42+00:00 Fix haskell/haddock#61 We were not getting docs for re-exported class methods. This was because we were looking up the docs in a map made from the declarations in the current module being rendered. Obviously, re-exported class methods come from another module. Class methods and ATs were the only thing we were looking up using the doc map, everything else we found in the ExporItems. So now I've put subordinate docs in the ExportItem's directly, to make things a bit more consistent. To do this, I added subordinates to the the declarations in the declaration map. This was easy since we were computing subordinates anyway, to store stand-alone in the map. I added a new type synonym 'DeclInfo', which is what we call what is now stored in the map. This little refactoring removes duplicate code to retrieve subordinates and documentation from the HsGroup. - - - - - de47f20a by David Waern at 2008-10-16T22:06:35+00:00 Document function and improve its layout - - - - - e74e625a by Thomas Schilling at 2008-10-20T11:12:57+00:00 Force interface more aggressively. For running Haddock on GHC this reduces memory usage by about 50 MB on a 32 bit system. A heap profile shows total memory usage peak at about 100 MB, but actual usage is at around 300 MB even with compacting GC (+RTS -c). - - - - - b63ac9a1 by David Waern at 2008-10-20T20:25:50+00:00 Make renamer consistent Instead of explicitly making some binders Undocumented, treat all names the same way (that is, try to find a Documented name). - - - - - f6de0bb0 by Ian Lynagh at 2008-09-19T00:54:43+00:00 TAG GHC 6.10 fork - - - - - 74599cd0 by David Waern at 2008-10-20T21:13:24+00:00 Do not save hidden modules in the .haddock file We were saving interfaces of all processed modules including those hidden using {-# OPTIONS_HADDOCK hide #-} in the .haddock file. This caused broken links when generating the index for the libraries that come with GHC. This patch excludes modules with hidden documentation when writing .haddock files. It should fix the above problem. - - - - - 7b6742e9 by David Waern at 2008-10-21T19:54:52+00:00 Do not save hidden modules in the .haddock file (also for ghc >= 6.9) When writing the first patch, I forgot to do the fix in both branches of an #if macro. - - - - - b99b1951 by David Waern at 2008-10-22T20:04:18+00:00 Remove subordinate map and its usage It is not needed now that we store subordinate names in the DeclInfo map. - - - - - da97cddc by David Waern at 2008-10-22T20:11:46+00:00 Tidy up code in H.I.Create a little Remove commented out half-done type instance support, and remove DeclWithDoc synonym. - - - - - 6afa76f3 by David Waern at 2008-10-22T21:17:29+00:00 Fix warnings in H.GHC.Utils - - - - - 171ea1e8 by David Waern at 2008-10-22T21:35:04+00:00 Fix warnings in H.Utils - - - - - c8cb3b91 by David Waern at 2008-10-22T21:36:49+00:00 Wibble - - - - - 767fa06a by David Waern at 2008-10-27T19:59:04+00:00 Make named doc comments into ExportDoc instead of ExportDecl Fixes a crash when processing modules without export lists containing named docs. - - - - - e638bbc6 by David Waern at 2008-11-02T22:21:10+00:00 Add HCAR entry - - - - - 92b4ffcf by David Waern at 2008-11-02T22:44:19+00:00 Update CHANGES - - - - - 84d4da6e by David Waern at 2008-11-03T11:25:04+00:00 Add failing test for template haskell crash - - - - - 2a9cd2b1 by David Waern at 2008-11-04T21:13:44+00:00 Add tests/TH.hs - - - - - 8a59348e by David Waern at 2008-11-04T21:30:26+00:00 TAG 2.3.0 - - - - - 54f70d31 by Thomas Schilling at 2008-10-24T17:04:08+00:00 Enable framed view of the HTML documentation. This patch introduces: - A page that displays the documentation in a framed view. The left side will show a full module index. Clicking a module name will show it in the right frame. If Javascript is enabled, the left side is split again to show the modules at the top and a very short synopsis for the module currently displayed on the right. - Code to generate the mini-synopsis for each module and the mini module index ("index-frames.html"). - CSS rules for the mini-synopsis. - A very small amount of javascript to update the mini-synopsis (but only if inside a frame.) Some perhaps controversial things: - Sharing code was very difficult, so there is a small amount of code duplication. - The amount of generated pages has been doubled, since every module now also gets a mini-synopsis. The overhead should not be too much, but I haven't checked. Alternatively, the mini-synopsis could also be generated using Javascript if we properly annotate the actual synopsis. - - - - - 5d7ea5a6 by David Waern at 2008-11-04T23:20:17+00:00 Follow change to ExportDecl in frames code - - - - - 60e16308 by David Waern at 2008-11-04T23:35:26+00:00 Update CHANGES - - - - - d63fd26d by David Waern at 2008-11-04T23:37:43+00:00 Bump version number - - - - - c1660c39 by David Waern at 2008-11-04T23:44:46+00:00 Update CHANGES - - - - - 995ab384 by David Waern at 2008-11-04T23:55:21+00:00 Remove .ref files from tests/output/ - - - - - 1abbbe75 by David Waern at 2008-11-04T23:57:41+00:00 Output version info before running tests - - - - - 649b182f by David Waern at 2008-11-05T22:45:37+00:00 Add ANNOUNCE message - - - - - c36ae0bb by David Waern at 2008-11-05T23:15:35+00:00 Update ANNOUNCE - - - - - 9c4f3d40 by David Waern at 2008-11-05T23:18:30+00:00 Wibble - - - - - 5aac87ce by David Waern at 2008-11-06T21:07:48+00:00 Depend on base 4.* when using GHC >= 6.9, otherwise 3.* - - - - - b9796a74 by David Waern at 2008-11-06T21:13:40+00:00 Bump version to 2.4.1 and update CHANGES - - - - - d4b26baa by David Waern at 2008-11-06T21:26:33+00:00 Depend on base 4.0.* instead of 4.* - - - - - 2cb0903c by David Waern at 2008-11-06T21:46:53+00:00 Fix warnings in H.B.HH and H.B.HH2 - - - - - e568e89a by David Waern at 2008-11-06T21:47:12+00:00 Fix warnings in Haddock.ModuleTree - - - - - 9dc14fbd by David Waern at 2008-11-06T21:47:52+00:00 Fix warnings in Haddock.Version - - - - - 02ac197c by David Waern at 2008-11-06T21:51:31+00:00 Fix warnings in H.InterfaceFile and H.Options - - - - - 63e7439a by David Waern at 2008-11-06T21:59:45+00:00 Fix warnings in H.GHC.Typecheck - - - - - 4bca5b68 by David Waern at 2008-11-08T13:43:42+00:00 Set HscTarget to HscNothing instead of HscAsm There used to be a bug in the GHC API that prevented us from setting this value. - - - - - 07357aec by David Waern at 2008-11-09T22:27:00+00:00 Re-export NameCache and friends from Distribution.Haddock - - - - - ea554b5a by David Waern at 2008-11-09T23:14:10+00:00 Add Haddock.GHC.Utils to other-modules in library - - - - - 74aecfd7 by David Waern at 2008-11-10T01:18:57+00:00 Export DocName in the library - - - - - 241a58b3 by David Waern at 2008-11-10T01:19:18+00:00 Document the functions in H.DocName - - - - - edc2ef1b by David Waern at 2008-11-10T01:20:52+00:00 Export H.DocName in the library - - - - - 4f588d55 by David Waern at 2008-11-10T01:29:14+00:00 Make DocName an instance of NamedThing - - - - - b4647244 by David Waern at 2008-11-15T22:58:18+00:00 Reflect version bump in test suite - - - - - 4bee8ce2 by David Waern at 2008-11-15T22:58:45+00:00 Update tests For unknown reasons, test output for Bug1 and Test has changed for the better. - - - - - 1690e2f9 by David Waern at 2008-11-15T22:59:33+00:00 Store hidden modules in .haddock files We store documentation for an entity in the 'InstalledInterface' of the definition site module, and never in the same structure for a module which re-exports the entity. So when a client of the Haddock library wants to look up some documentation, he/she might need to access a hidden module. But we currently don't store hidden modules in the .haddock files. So we add the hidden modules and the Haddock options to the .haddock files. The options will be used to filter the module list to obtain the visible modules only, which is necessary for generating the contents and index for installed packages. - - - - - 8add6435 by David Waern at 2008-11-16T14:35:50+00:00 Bump major version number due to .haddock file format change - - - - - 48bfcf82 by David Waern at 2008-11-23T14:32:52+00:00 Update tests to account for version number bump - - - - - 0bbd1738 by David Waern at 2008-11-23T14:33:31+00:00 HADDOCK_DATA_DIR changed to haddock_datadir - - - - - 5088b78c by David Waern at 2008-11-23T17:13:21+00:00 FIX haskell/haddock#45: generate two anchors for each name We generate two anchor tags for each name, one where we don't escape the name and one where we URI-encode it. This is for compatibility between IE and Opera. Test output is updated. - - - - - 5ee5ca3b by Neil Mitchell at 2008-11-27T14:38:11+00:00 Drop HsDocTy annotations, they mess up pretty printing and also have a bracketing bug (#2584) - - - - - 51c014e9 by Roman Cheplyaka at 2008-11-27T22:27:36+00:00 Allow referring to a specific section within a module in a module link Fixes haskell/haddock#65 - - - - - 4094bdc5 by David Waern at 2008-11-28T21:13:33+00:00 Update tests following anchor change - - - - - f89552dd by Thomas Schilling at 2008-11-29T16:16:20+00:00 Haddock really shouldn't try to overwrite files. - - - - - 98127499 by David Waern at 2008-12-07T14:09:15+00:00 Solve conflict - - - - - 319356c5 by David Waern at 2008-10-22T21:16:55+00:00 Add -Wall -Werror to ghc-options - - - - - 3c4968c9 by David Waern at 2008-11-04T23:38:56+00:00 TAG 2.4.0 - - - - - 4b21e003 by David Waern at 2008-11-06T21:14:04+00:00 TAG 2.4.1 - - - - - 8e0cad5c by David Waern at 2008-12-07T14:12:54+00:00 Remove -Werror - - - - - 299d6deb by David Waern at 2008-12-07T14:25:18+00:00 Remove -Wall, we'll focus on warnings after 6.10.2 is out - - - - - 5f4216b6 by David Waern at 2008-12-07T20:58:05+00:00 Resolve conflict properly - - - - - 67d774e7 by Neil Mitchell at 2008-12-15T11:44:26+00:00 Make forall's in constructors explicit, i.e. data Foo = Foo {foo :: Eq a => a} - - - - - 61851792 by Neil Mitchell at 2008-12-18T15:39:39+00:00 Try and find a better package name than "main" for Hoogle, goes wrong when working on an executable rather than a library - - - - - 2fab8554 by David Waern at 2008-12-08T23:19:48+00:00 Make visible names from ExportItems Instead of a complicated calculation of visible names out of GHC's export items, we can get them straight out of the already calculated ExportItems. The ExportItems should represent exactly those items that are visible in an interface. If store all the exported sub-names in ExportDecl instead of only those with documentation, the calculation becomes very simple. So we do this change as well (should perhaps have been a separate patch). This should fix the problem with names from ghc-prim not appearing in the link environment. - - - - - 7caadd8c by Ian Lynagh at 2008-12-11T17:01:04+00:00 Wrap the GHC usage with defaultCleanupHandler This fixes a bug where haddock leaves /tmp/ghc* directories uncleaned. - - - - - 7c9fc9a5 by David Waern at 2009-01-02T21:38:27+00:00 Show re-exported names from external packages again This fixes GHC ticket 2746. In order to also link to the exported subordinate names of a declaration, we need to re-introduce the sub map in the .haddock files. - - - - - 119e4e05 by David Waern at 2009-01-06T23:34:17+00:00 Do not process boot modules We should of course not try to produce documentation for boot modules! The reason this has worked in the past is that the output of "real" modules overwrites the output of boot modules later in the process. However, this causes a subtle link environment problem. So let's get rid of this stupid behaviour. We avoid processing boot modules, but we continue to typecheck them. - - - - - c285b9d2 by David Waern at 2009-01-08T18:03:36+00:00 Export modules also when coming from external packages This seems to have regressed since a refactoring that was part of the 2.3.0 release. - - - - - 24031c17 by David Waern at 2009-01-10T15:26:26+00:00 Change version to 2.4.2 - no need to go to 2.5.0 - - - - - 864d1c3f by David Waern at 2009-01-10T15:35:20+00:00 Update tests to account for version number change - - - - - 524ba886 by David Waern at 2009-01-10T18:29:17+00:00 Add test for Template Haskell splicing - - - - - 05e6e003 by David Waern at 2009-01-10T19:35:42+00:00 Fix Trac haskell/haddock#68: Turn on compilation via C for Template Haskell packages We can't use HscNothing if we need to run code coming from modules inside the processed package during typechecking, which is the case for some packages using Template Haskell. This could be improved, to e.g. use HscInterpreted and HscNothing where possible, instead of using HscC for all modules in the package. - - - - - 2b2bafa1 by David Waern at 2009-01-10T20:22:25+00:00 Only use needsTemplateHaskell when compiling with GHC 6.10.2 or above - - - - - bedc3a93 by Ian Lynagh at 2009-01-11T14:58:41+00:00 Fix the location of INPLACE_PKG_CONF; fixes the build Spotted by Conal Elliott - - - - - 943107c8 by David Waern at 2009-01-20T19:27:39+00:00 Document H.I.Create.collectDocs better - - - - - c6252e37 by David Waern at 2009-01-20T19:29:51+00:00 Fix Trac haskell/haddock#59: TH-generated declarations disappearing This patch was contributed by Joachim Breitner (nomeata). - - - - - 3568a6af by David Waern at 2009-01-21T21:41:48+00:00 Do not indicate that a constructor argument is unboxed We only show the strictness annotation for an unboxed constructor argument. The fact that it is unboxed is an implementation detail and should not be part of the module interface. - - - - - 562a4523 by David Waern at 2009-01-22T18:53:49+00:00 Fix Trac haskell/haddock#50: do not attach docs to pragmas or other kinds of non-declarations We now filter out everything that is not a proper Haskell declaration before collecting the docs and attaching them to declarations. - - - - - 6fdf21c2 by David Waern at 2009-01-22T19:48:09+00:00 Add test for quasi quotation. No reference output yet. - - - - - dc4100fd by David Waern at 2009-01-22T19:57:47+00:00 Improve quasi-quotation test and add reference output - - - - - 908b74bb by David Waern at 2009-01-23T23:22:03+00:00 Filter out separately exported associated types in a smarter way - - - - - f6b42ecb by David Waern at 2009-01-24T16:54:39+00:00 Correct spelling mistake in error message - - - - - 24e4245d by David Waern at 2009-01-24T17:48:03+00:00 Correct comment - - - - - b5e8462f by David Waern at 2009-02-07T13:22:29+00:00 Do not show a subordinate at the top level if its parent is also exported See note in the source code for more info. - - - - - 4b09de57 by David Waern at 2009-02-07T13:53:53+00:00 Update test following change to top level subordinates - - - - - 76379896 by David Waern at 2009-02-07T13:58:04+00:00 Remove html files in the tests/output/ directory which have been accidentally added - - - - - 1a6d8b10 by Joachim Breitner at 2009-02-20T10:29:43+00:00 Typo in comment - - - - - fec367d0 by David Waern at 2009-02-24T20:21:17+00:00 Fix small bug The rule is to prefer type constructors to other things when an identifier in a doc string can refer to multiple things. This stopped working with newer GHC versions (due to a tiny change in the GHC renamer). We implement this rule in the HTML backend for now, instead of fixing it in GHC, since we will move renaming of doc strings to Haddock in the future anyway. - - - - - 9b4172eb by David Waern at 2009-02-25T20:04:38+00:00 Fix bad error handling with newer GHCs When support for GHC 6.10 was added, an error handler was installed only around the typechecking phase. This had the effect that errors thrown during dependency chasing were caught in the top-level exception handler and not printed with enough detail. With this patch we wrap the error handler around all our usage of the Ghc monad. - - - - - de2df363 by Simon Peyton Jones at 2009-02-02T16:47:42+00:00 Hide funTyConName, now exported by TypeRep - - - - - 4d40a29f by Ian Lynagh at 2009-02-12T18:57:49+00:00 Don't build the library when building in the GHC tree - - - - - 1cd0abe4 by Ian Lynagh at 2009-02-13T13:58:53+00:00 Add a ghc.mk - - - - - 3d814eeb by Ian Lynagh at 2009-02-13T18:50:28+00:00 do .depend generation for haddock with the stage1 compiler This is a bit of a hack. We mkdepend with stage1 as if .depend depends on the stage2 compiler then make goes wrong: haddock's .depend gets included, which means that make won't reload until it's built, but we can't build it without the stage2 compiler. We therefore build the stage2 compiler before its .depend file is available, and so compilation fails. - - - - - b55036a4 by Ian Lynagh at 2009-02-25T01:38:13+00:00 Give haddock a wrapper on unix in the new GHC build system - - - - - 9eabfe68 by Ian Lynagh at 2009-02-25T19:21:32+00:00 Create inplace/lib/html in the new GHC build system - - - - - 93af30c7 by Ian Lynagh at 2008-11-07T19:18:23+00:00 TAG GHC 6.10.1 release - - - - - 06e6e34a by Thomas Schilling at 2009-02-24T18:11:00+00:00 Define __GHC_PATCHLEVEL__ for recent version of GHC (stable). - - - - - 680e6ed8 by Thomas Schilling at 2009-02-24T18:12:26+00:00 'needsTemplateHaskell' is not defined in current stable GHC. - - - - - 6c5619df by David Waern at 2009-02-25T22:15:23+00:00 Hide fynTyConName only for recent GHC versions - - - - - 6b2344f1 by Ian Lynagh at 2009-02-26T00:49:56+00:00 Add the module to one of haddocks warnings - - - - - e5d11c70 by David Waern at 2009-02-27T21:37:20+00:00 Bug fix We tried to filter out subordinates that were already exported through their parent. This didn't work properly since we were in some cases looking at the grand-parent and not the parent. We now properly compute all the parent-child relations of a declaration, and use this information to get the parent of a subordinate. We also didn't consider record fields with multiple parents. This is now handled correctly. We don't currently support separately exported associated types. But when we do, they should be handled correctly by this process too. Also slightly improved the warning message that we give when filtering out subordinates. - - - - - 10a79a60 by David Waern at 2009-02-27T22:08:08+00:00 Fix error message conflict The module name is already written in the beginning of the message, as seems to be the convention in Haddock. Perhaps not so clear, but we should change it everywhere in that case. Leaving it as it is for now. - - - - - c5055c7f by David Waern at 2009-02-27T22:15:17+00:00 Shorten warning message - - - - - a72fed3a by David Waern at 2009-02-28T00:53:55+00:00 Do not show package name in warning message - - - - - a5daccb2 by Ian Lynagh at 2009-03-01T14:59:35+00:00 Install haddock in the new GHC build system - - - - - dfdb025c by Ian Lynagh at 2009-03-07T23:56:29+00:00 Relax base dependency to < 4.2, not < 4.1 - - - - - 5769c8b4 by David Waern at 2009-03-21T14:58:52+00:00 Bump .haddock file version number (due to change of format) - - - - - f1b8f67b by David Waern at 2009-03-21T14:59:26+00:00 Define __GHC_PATCHLEVEL__=1 when using ghc-6.10.1 - - - - - 23f78831 by David Waern at 2009-03-21T16:40:52+00:00 Update CHANGES - - - - - 7d2735e9 by David Waern at 2009-03-21T16:50:33+00:00 Update ANNOUNCE - - - - - 0771e00a by David Waern at 2009-03-21T16:54:40+00:00 Update ANNOUNCE, again - - - - - 81a6942a by David Waern at 2009-03-21T17:50:06+00:00 Don't be too verbose in CHANGES - - - - - 29861dcf by David Waern at 2009-03-21T18:03:31+00:00 TAG 2.4.2 - - - - - a585f285 by David Waern at 2009-03-21T19:20:29+00:00 Require Cabal >= 1.2.3 - - - - - 7c611662 by David Waern at 2009-03-21T19:21:48+00:00 TAG 2.4.2 with cabal-version >= 1.2.3 - - - - - 23b7deff by Simon Marlow at 2009-03-20T15:43:42+00:00 new GHC build system: use shell-wrappers macro - - - - - 25f8afe7 by Ian Lynagh at 2009-03-21T19:13:53+00:00 Fix (with a hack?) haddock in teh new build system - - - - - 6a29a37e by David Waern at 2009-03-24T22:10:15+00:00 Remove unnecessary LANGUAGE pragma - - - - - 954da57d by David Waern at 2009-03-24T22:21:23+00:00 Fix warnings in H.B.DevHelp - - - - - 1619f1df by David Waern at 2009-03-26T23:20:44+00:00 -Wall police in H.B.Html - - - - - b211e13b by Simon Marlow at 2009-03-24T13:00:56+00:00 install Haddock's html stuff - - - - - 78e0b107 by David Waern at 2008-12-07T19:58:53+00:00 Add verbosity flag and utils, remove "verbose" flag - - - - - 913dae06 by David Waern at 2008-12-07T20:01:05+00:00 Add some basic "verbose" mode logging in H.Interface - - - - - 1cbff3bf by David Waern at 2009-03-27T00:07:26+00:00 Fix conflicts - - - - - 22f82032 by David Waern at 2009-03-27T21:15:11+00:00 Remove H.GHC.Typecheck - - - - - 81557804 by David Waern at 2009-03-27T21:19:22+00:00 Remove docNameOrig and use getName everywhere instead - - - - - d8267213 by David Waern at 2009-03-27T21:21:46+00:00 Use docNameOcc instead of nameOccName . getName - - - - - 5d55deab by David Waern at 2009-03-27T21:33:04+00:00 Remove H.DocName and put DocName in H.Types - - - - - 8ba72611 by David Waern at 2009-03-27T22:06:26+00:00 Document DocName - - - - - 605f8ca5 by David Waern at 2009-03-27T22:45:21+00:00 -Wall police - - - - - e4da93ae by David Waern at 2009-03-27T23:12:53+00:00 -Wall police in H.B.Hoogle - - - - - bb255519 by David Waern at 2009-03-27T23:41:28+00:00 Define Foldable and Traversable instances for Located - - - - - f1195cfe by David Waern at 2009-03-27T23:51:34+00:00 Wibble - - - - - 23818d7c by David Waern at 2009-03-28T00:03:55+00:00 -Wall police in H.I.Rename - - - - - 0f050d67 by David Waern at 2009-03-28T00:15:15+00:00 -Wall police in H.I.AttachInstances - - - - - 0f3fe038 by David Waern at 2009-03-28T21:09:41+00:00 Wibble - - - - - 275d4865 by David Waern at 2009-03-28T21:27:06+00:00 Layout fix - - - - - 54ff0ef8 by David Waern at 2009-03-28T21:59:07+00:00 -Wall police in H.I.Create - - - - - 7f58b117 by David Waern at 2009-03-28T22:10:19+00:00 -Wall police in H.Interface - - - - - f0c03b44 by David Waern at 2009-03-28T22:22:59+00:00 -Wall police in Main - - - - - 29da355c by David Waern at 2009-03-28T22:23:39+00:00 Turn on -Wall -Werror - - - - - 446d3060 by David Waern at 2009-04-01T20:40:30+00:00 hlint police - - - - - 3867c9fc by David Waern at 2009-04-01T20:48:42+00:00 hlint police - - - - - bd1f1600 by David Waern at 2009-04-01T20:58:02+00:00 hlint police - - - - - e0e90866 by David Waern at 2009-04-05T12:42:53+00:00 Move H.GHC.Utils to H.GhcUtils - - - - - 9cbd426b by David Waern at 2009-04-05T12:57:21+00:00 Remove Haddock.GHC and move its (small) contents to Main - - - - - b5c2cbfd by David Waern at 2009-04-05T13:07:04+00:00 Fix whitespace and stylistic issues in Main - - - - - 3c04aa56 by porges at 2008-12-07T08:22:19+00:00 add unicode output - - - - - 607918da by David Waern at 2009-04-26T15:09:43+00:00 Resolve conflict - - - - - 4bec6b6b by Simon Marlow at 2009-05-13T10:00:31+00:00 fix markup - - - - - 436ad6f4 by Simon Marlow at 2009-03-23T11:54:45+00:00 clean up - - - - - bdcd1398 by Simon Marlow at 2009-03-24T10:36:45+00:00 new GHC build system: add $(exeext) - - - - - 9c0972f3 by Simon Marlow at 2009-03-24T11:04:31+00:00 update for new GHC build system layout - - - - - d0f3f83a by Ian Lynagh at 2009-03-29T15:31:43+00:00 GHC new build system fixes - - - - - 5a8245c2 by Ian Lynagh at 2009-04-04T20:44:23+00:00 Tweak new build system - - - - - 9c6f2d7b by Simon Marlow at 2009-05-13T10:01:27+00:00 add build instructions for GHC - - - - - 66d07c76 by Ian Lynagh at 2009-05-31T00:37:53+00:00 Quote program paths in ghc.mk - - - - - bb7de2cd by Ian Lynagh at 2009-06-03T22:57:55+00:00 Use a bang pattern on an unlifted binding - - - - - 3ad283fc by Ian Lynagh at 2009-06-13T16:17:50+00:00 Include haddock in GHC bindists - - - - - ac447ff4 by David Waern at 2009-06-24T21:07:50+00:00 Delete Haddock.Exception and move contents to Haddock.Types Only a few lines of code that mainly declares a type - why not just put it in Haddock.Types. - - - - - 4464fb9b by David Waern at 2009-06-24T22:23:23+00:00 Add Haddock module headers Add a proper Haddock module header to each module, with a more finegrained copyright. If you feel mis-accreditted, please correct any copyright notice! The maintainer field is set to haddock at projects.haskell.org. Next step is to add a brief description to each module. - - - - - 5f4c95dd by David Waern at 2009-06-24T22:39:44+00:00 Fix spelling error - - - - - 6d074cdb by David Waern at 2009-06-25T21:53:56+00:00 Document Interface and InstalledInterface better - - - - - d0cbd183 by David Waern at 2009-06-27T12:46:46+00:00 Remove misplaced whitespace in H.I.Rename - - - - - fa381c49 by David Waern at 2009-06-27T13:26:03+00:00 Fix haskell/haddock#104 - create output directory if missing - - - - - 91fb77ae by Ian Lynagh at 2009-06-25T15:59:50+00:00 TAG 2009-06-25 - - - - - 0d853f40 by Simon Peyton Jones at 2009-07-02T15:35:22+00:00 Follow extra field in ConDecl - - - - - b201735d by Ian Lynagh at 2009-07-05T16:50:35+00:00 Update Makefile for the new GHC build system - - - - - df6c0092 by Ian Lynagh at 2009-07-05T17:01:13+00:00 Resolve conflicts - - - - - 1066870a by Ian Lynagh at 2009-07-05T17:01:48+00:00 Remove the -Wwarn hack in the GHC build system - - - - - 7e856076 by Ian Lynagh at 2009-07-05T17:17:59+00:00 Fix warnings - - - - - 5d4cd958 by Ian Lynagh at 2009-07-05T19:35:40+00:00 Bump version number Cabal needs to distinguish between haddocks having a --verbose and --verbosity flag - - - - - 6ee07c99 by David Waern at 2009-07-06T20:14:57+00:00 Wibble - - - - - 2308b66f by David Waern at 2009-07-06T20:24:20+00:00 Clearer printing of versions by runtests.hs - - - - - d4b5d9ab by David Waern at 2009-07-06T21:22:42+00:00 Fix (invisible) bug introduced by unicode patch - - - - - 2caca8d8 by David Waern at 2009-07-06T21:44:10+00:00 Use HscAsm instead of HscC when using TH - - - - - 18f3b755 by David Waern at 2009-07-06T22:10:22+00:00 Update HCAR entry (by Janis) - - - - - a72ac9db by David Waern at 2009-07-06T23:01:35+00:00 Follow HsRecTy change with an #if __GLASGOW_HASKEL__ >= 611 - - - - - 549135d2 by David Waern at 2009-07-06T23:11:41+00:00 Remove unused functions from Haddock.Utils - - - - - b450134a by Isaac Dupree at 2009-07-11T14:59:00+00:00 revert to split-index for large indices - remove the search-box, because browsers have search-for-text abilities anyway. - pick 150 items in index as the arbitrary time at which to split it - notice the bug that identifiers starting with non-ASCII characters won't be listed in split-index, but don't bother to fix it yet (see ticket haskell/haddock#116, http://trac.haskell.org/haddock/ticket/116 ) - - - - - 78a5661e by Isaac Dupree at 2009-07-20T15:37:18+00:00 Implement GADT records in HTML backend - - - - - 4e163555 by Isaac Dupree at 2009-07-21T22:03:25+00:00 add test for GADT records - - - - - 79aa4d6e by David Waern at 2009-07-23T20:40:37+00:00 Update test suite following version bump - - - - - 5932c011 by David Waern at 2009-08-02T10:25:39+00:00 Fix documentation bug - - - - - a6970fca by David Waern at 2009-08-12T23:08:53+00:00 Remove support for ghc 6.8.* from .cabal file - - - - - c1695902 by Ian Lynagh at 2009-07-07T13:35:45+00:00 Fix unused import warnings - - - - - fb6df7f9 by Ian Lynagh at 2009-07-16T00:20:31+00:00 Use cProjectVersion directly rather than going through compilerInfo Fixes the build after changes in GHC - - - - - 548cdd66 by Simon Marlow at 2009-07-28T14:27:04+00:00 follow changes in GHC's ForeignType - - - - - 9395aaa0 by David Waern at 2009-08-13T22:17:33+00:00 Switch from PatternSignatures to ScopedTypeVariables in Main - - - - - eebf39bd by David Waern at 2009-08-14T17:14:28+00:00 Version .haddock files made with GHC 6.10.3/4 correclty - - - - - 58f3e735 by David Waern at 2009-08-14T17:19:37+00:00 Support GHC 6.10.* and 6.11.* only - - - - - 5f63cecc by David Waern at 2009-08-14T22:03:20+00:00 Do not version .haddock file based on GHC patchlevel version We require that the instances of Binary that we use from GHC will not change between patchlevel versions. - - - - - d519de9f by David Waern at 2009-08-14T23:50:00+00:00 Update CHANGES - - - - - 35dccf5c by David Waern at 2009-08-14T23:51:38+00:00 Update version number everywhere - - - - - 6d363fea by David Waern at 2009-08-15T09:46:49+00:00 Update ANNOUNCE - - - - - c7ee6bc2 by David Waern at 2009-08-15T09:47:13+00:00 Remove -Werror Forgot that Hackage doesn't like it. - - - - - a125c12b by David Waern at 2009-08-15T09:49:50+00:00 Require Cabal >= 1.6 - - - - - adb2f560 by Isaac Dupree at 2009-08-12T03:47:14+00:00 Cross-Package Documentation version 4 - - - - - 3d6dc04d by David Waern at 2009-08-15T23:42:57+00:00 Put all the IN_GHC_TREE stuff inside getGhcLibDir - - - - - 56624097 by David Waern at 2009-08-15T23:52:03+00:00 Add --print-ghc-libdir - - - - - f15d3ccb by David Waern at 2009-08-16T00:37:52+00:00 Read base.haddock when running tests We can now test cross-package docs. - - - - - 283f0fb9 by David Waern at 2009-08-16T00:50:59+00:00 Update test output - we now have more links - - - - - 673d1004 by David Waern at 2009-08-16T01:26:08+00:00 Read process.haddock when running tests - - - - - 0d127f82 by David Waern at 2009-08-16T01:43:04+00:00 Add a test for cross-package documentation - - - - - f94db967 by Ian Lynagh at 2009-08-16T18:42:44+00:00 Follow GHC build system changes - - - - - 5151278a by Isaac Dupree at 2009-08-16T19:58:05+00:00 make cross-package list types look nicer - - - - - c41e8228 by Isaac Dupree at 2009-08-18T01:47:47+00:00 Haddock.Convert: export more functions This lets us remove some code in Haddock.Interface.AttachInstances - - - - - 2e5fa398 by Isaac Dupree at 2009-08-18T02:11:05+00:00 switch AttachInstances to use synify code It changed an instance from showing ((,) a b) to (a, b) because my synify code is more sophisticated; I hope the latter is a good thing rather than a bad thing aesthetically, here. But this definitely reduces code duplication! - - - - - b8b07123 by Isaac Dupree at 2009-08-18T02:23:31+00:00 Find instances using GHC, which is more complete. In particular, it works cross-package. An intermediate patch also moved the instance-finding into createInterface, but that move turned out not to be necessary, so if we want to do that, it'd go in a separate patch. (Is that possible? Or will we need GHC to have loaded all the modules first, before we can go searching for the instances (e.g. if the modules are recursive or something)?) - - - - - 6959b451 by Isaac Dupree at 2009-08-17T00:37:18+00:00 fix preprocessor conditional sense - - - - - 942823af by Isaac Dupree at 2009-08-16T22:46:48+00:00 remove ghc 6.8 conditionals from Haddock.Interface - - - - - 4b3ad888 by Isaac Dupree at 2009-08-18T20:24:38+00:00 Fix GHC 6.11 build in Haddock.Convert - - - - - 0a89c5ab by Isaac Dupree at 2009-08-23T00:08:58+00:00 hacks to make it compile without fnArgDocsn - - - - - 7b3bed43 by Isaac Dupree at 2009-08-23T03:01:28+00:00 less big-Map-based proper extraction of constructor subdocs - - - - - b21c279a by Isaac Dupree at 2009-08-23T03:02:06+00:00 Html: remove unnecessary+troublesome GHC. qualifications - - - - - 96c97115 by Isaac Dupree at 2009-08-23T03:08:03+00:00 Move doc parsing/lexing into Haddock for ghc>=6.11 - - - - - e1cec02d by Isaac Dupree at 2009-08-23T05:08:14+00:00 get rid of unused DocMap parameter in Html - - - - - 66960c59 by Isaac Dupree at 2009-08-23T05:54:20+00:00 fix horrible named-docs-disappearing bug :-) - - - - - a9d7eff3 by Isaac Dupree at 2009-08-23T06:26:36+00:00 re-implement function-argument docs ..on top of the lexParseRn work. This patch doesn't change the InstalledInterface format, and thus, it does not work cross-package, but that will be easy to add subsequently. - - - - - 8bf6852c by Isaac Dupree at 2009-08-23T07:26:05+00:00 cross-package fnArgDocs. WARNING: changes .haddock binary format While breaking the format, I took the opportunity to unrename the DocMap that's saved to disk, because there's really no reason that we want to know what *another* package's favorite place to link a Name to was. (Is that true? Or might we want to know, someday?) Also, I added instance Binary Map in InterfaceFile. It makes the code a little simpler without changing anything of substance. Also it lets us add another Map hidden inside another Map (fnArgsDocs in instDocMap) without having really-convoluted serialization code. Instances are neat! I don't understand why this change to InterfaceFile seemed to subtly break binary compatibility all by itself, but no matter, I'll just roll it into the greater format-changing patch. Done! - - - - - 30115a64 by Isaac Dupree at 2009-08-23T18:22:47+00:00 Improve behavior for unfindable .haddock - - - - - aa364bda by Isaac Dupree at 2009-08-23T18:28:16+00:00 add comment for FnArgsDoc type - - - - - 49b23a99 by Isaac Dupree at 2009-08-23T21:52:48+00:00 bugfix: restore fnArgDocs for type-synonyms - - - - - f65f9467 by Isaac Dupree at 2009-08-23T22:06:55+00:00 Backends.Hoogle: eliminate warnings - - - - - a292d216 by Isaac Dupree at 2009-08-23T22:10:24+00:00 Haddock.Convert: eliminate warnings - - - - - 5546cd20 by Isaac Dupree at 2009-08-23T22:12:31+00:00 Haddock.Interface.Rename: eliminate warnings - - - - - 0a9798b6 by Isaac Dupree at 2009-08-23T22:18:47+00:00 Main.hs: remove ghc<6.9 conditionals - - - - - e8f9867f by Isaac Dupree at 2009-08-23T22:27:46+00:00 Main.hs: eliminate warnings (except for OldException) - - - - - 61c64247 by Isaac Dupree at 2009-08-23T22:41:01+00:00 move get*LibDir code in Main.hs, to +consistent code, -duplication - - - - - 948f1e69 by Isaac Dupree at 2009-08-23T23:14:26+00:00 Main.hs: OldException->Exception: which eliminates warnings - - - - - 3d5d5e03 by Isaac Dupree at 2009-08-23T23:20:11+00:00 GhcUtils: ghc >= 6.10 - - - - - 2771d657 by Isaac Dupree at 2009-08-23T23:21:55+00:00 InterfaceFile: ghc >= 6.10 - - - - - d9f2b9d1 by Isaac Dupree at 2009-08-23T23:22:58+00:00 Types: ghc >= 6.10 - - - - - ca39210e by Isaac Dupree at 2009-08-23T23:23:26+00:00 ModuleTree: ghc >= 6.10 - - - - - 883c4e59 by Isaac Dupree at 2009-08-23T23:24:04+00:00 Backends.DevHelp: ghc >= 6.10 - - - - - 04667df5 by Isaac Dupree at 2009-08-23T23:24:37+00:00 Backends.Html: ghc >= 6.10 - - - - - a9f7f25f by Isaac Dupree at 2009-08-23T23:25:24+00:00 Utils: ghc >= 6.10 - - - - - b7105022 by Isaac Dupree at 2009-08-23T23:37:47+00:00 eliminate haskell98 dependency, following GHC's example It turns out I/we already had, and it was only a matter of deleting it from the cabal file. - - - - - 292e0911 by Isaac Dupree at 2009-08-24T01:22:44+00:00 refactor out subordinatesWithNoDocs dep of inferenced-decls fix - - - - - c2ed46a2 by Isaac Dupree at 2009-08-24T01:24:03+00:00 Eradicate wrong runtime warning for type-inferenced exported-functions see the long comment in the patch for why I did it this way :-) - - - - - 4ac0b57c by David Waern at 2009-09-04T22:56:20+00:00 Clean up tyThingToHsSynSig a little Factor out noLoc and use the case construct. Also rename the function to tyThingToLHsDecl, since it doesn't just create type signatures. - - - - - 28ab9201 by David Waern at 2009-09-04T22:58:50+00:00 Wibble - - - - - 0d9fe6d0 by David Waern at 2009-09-06T18:39:30+00:00 Add more copyright owners to H.I.AttachInstances - - - - - 122441b1 by David Waern at 2009-09-06T18:44:12+00:00 Style police - - - - - 1fa79463 by David Waern at 2009-09-06T18:57:45+00:00 Move toHsInstHead to Haddock.Convert and call it synifyInstHead - - - - - 0d42a8aa by David Waern at 2009-09-06T21:11:38+00:00 Use colordiff to display test results if available - - - - - ea9d8e03 by Simon Marlow at 2009-08-24T08:46:14+00:00 Follow changes in GHC's interface file format Word32 instead of Int for FastString and Name offsets - - - - - 537e051e by Simon Marlow at 2009-07-29T14:16:53+00:00 define unpackPackageId (it was removed from GHC) - - - - - 50c63aa7 by David Waern at 2009-09-09T23:18:03+00:00 Remove commented-out code - - - - - 511631fe by David Waern at 2009-09-09T23:19:05+00:00 Correct copyright in H.I.ParseModuleHeader - - - - - 898ec768 by David Waern at 2009-09-11T11:22:29+00:00 Use Map.fromList/toList intead of fromAscList/toAscList when serializing Maps This fixes the missing docs problem. The Eq and Ord instances for Name uses the unique number in Name. This number is created at deserialization time by GHC's magic Binary instance for Name, and it is random. Thus, fromAscList can't be used at deserialization time, even though toAscList was used at serialization time. - - - - - 37bec0d5 by Simon Peyton Jones at 2009-09-11T08:28:04+00:00 Track change in HsType - - - - - eb3a97c3 by Ian Lynagh at 2009-09-11T16:07:09+00:00 Allow building with base 4.2 - - - - - bb4205ed by Ian Lynagh at 2009-09-22T13:50:02+00:00 Loosen the GHC dependency - - - - - 5c75deb2 by Ian Lynagh at 2009-09-22T14:08:39+00:00 Fix building with GHC >= 6.12 - - - - - fb131481 by David Waern at 2009-09-11T11:24:48+00:00 Update runtests.hs to work with GHC 6.11 - - - - - ac3a419d by David Waern at 2009-09-11T11:25:14+00:00 Update CrossPackageDocs test - - - - - ec65c3c6 by David Waern at 2009-09-11T11:25:40+00:00 Add reference output for CrossPackageDocs - - - - - 520c2758 by Ian Lynagh at 2009-10-25T17:26:40+00:00 Fix installation in the GHC build system - - - - - 28b3d7df by Ian Lynagh at 2009-11-05T15:57:27+00:00 GHC build system: Make *nix installation work in paths containing spaces - - - - - 5c9bb541 by David Waern at 2009-11-14T11:56:39+00:00 Track change in HsType for the right compiler version - - - - - 905097ce by David Waern at 2009-11-14T12:10:47+00:00 hlint police - - - - - 04920630 by Ian Lynagh at 2009-11-20T13:46:30+00:00 Use defaultObjectTarget rather than HscAsm This fixes haddock when we don't have a native code generator - - - - - 966eb079 by David Waern at 2009-11-15T12:32:21+00:00 Remove commented-out code - - - - - 37f00fc4 by David Waern at 2009-11-22T13:58:48+00:00 Make runtests.hs strip links before diffing Generates easier to read diffs when tests fail. The content of the links is not important anyway since it is not taken into account by the tests. - - - - - 3a9bb8ef by David Waern at 2009-11-22T14:05:06+00:00 Follow findProgramOnPath signature change in runtests.hs - - - - - b26b9e5a by David Waern at 2009-11-22T14:08:40+00:00 Follow removal of GHC.MVar from base in CrossPackageDocs - - - - - f4d90ae4 by David Waern at 2009-11-22T14:48:47+00:00 Make copy.hs strip link contents before copying No more updating of reference files when URLs in links changes. - - - - - 4c9c420d by David Waern at 2009-11-22T15:26:41+00:00 Update test reference output * More links (Int, Float etc) * Stripped link contents - - - - - a62b80e3 by David Waern at 2009-11-23T23:19:39+00:00 Update CrossPackageDocs reference output - Remove GHC.MVar import (removed from base) - Strip link contents - - - - - 43491394 by David Waern at 2009-11-23T23:20:00+00:00 Update test reference files with comments on instances - - - - - 0d370a0b by David Waern at 2009-11-23T23:25:16+00:00 Bump version number - - - - - 2293113e by David Waern at 2009-11-24T20:55:49+00:00 Comments on instances Implementing this was a little trickier than I thought, since we need to match up instances from the renamed syntax with instances represented by InstEnv.Instance. This is due to the current design of Haddock, which matches comments with declarations from the renamed syntax, while getting the list of instances of a class/family directly using the GHC API. - Works for class instances only (Haddock has no support for type family instances yet) - The comments are rendered to the right of the instance head in the HTML output - No change to the .haddock file format - Works for normal user-written instances only. No comments are added on derived or TH-generated instances - - - - - bf586f29 by David Waern at 2009-11-27T22:05:15+00:00 Whitespace police - - - - - b8f03afa by David Waern at 2009-11-27T22:11:46+00:00 Remove bad whitespace and commented-out pieces - - - - - 90b8ee90 by David Waern at 2009-11-27T22:15:04+00:00 Whitespace police - - - - - b5ede900 by David Waern at 2009-11-27T22:15:50+00:00 Whitespace police - - - - - e3fddbfe by David Waern at 2009-11-28T13:37:59+00:00 Remove Name from DocInstance It's not used. - - - - - 9502786c by David Waern at 2009-11-28T13:56:54+00:00 Require at least GHC 6.12 While regression testing Haddock, I found a bug that happens with GHC 6.10.3, but not with GHC 6.12-rc2 (haven't tried 6.10.4). I don't have time to track it down. I think we should just always require the latest major GHC version. The time spent on making Haddock work with older versions is too high compared to the time spent on bugfixing, refactoring and features. - - - - - 8fa688d8 by David Waern at 2009-11-28T15:05:03+00:00 Remove cruft due to compatibility with older GHCs - - - - - 46fbbe9d by David Waern at 2009-11-28T15:07:50+00:00 Add a documentation header to Haddock.Convert - - - - - c3d2cc4a by David Waern at 2009-11-28T15:10:14+00:00 Remove unused H.Utils.FastMutInt2 - - - - - 490aba80 by David Waern at 2009-11-28T15:36:36+00:00 Rename Distribution.Haddock into Documentation.Haddock - - - - - 33ee2397 by David Waern at 2009-11-28T15:36:47+00:00 Fix error message - - - - - a5a3b950 by David Waern at 2009-11-28T16:58:39+00:00 Add a test flag that brings in QuickCheck - - - - - fa049e13 by David Waern at 2009-11-28T19:32:18+00:00 Say that we want quickcheck 2 - - - - - f32b0d9b by David Waern at 2009-11-28T19:32:40+00:00 Add an Arbitrary instance for HsDoc - - - - - da9a8bd7 by David Waern at 2009-11-28T20:15:30+00:00 Rename HsDoc back into Doc - - - - - edb60101 by David Waern at 2009-11-28T22:16:16+00:00 Move H.Interface.Parse/Lex to H.Parse/Lex These are not just used to build Interfaces. - - - - - 0656a9b8 by David Waern at 2009-11-28T23:12:14+00:00 Update version number in test suite - - - - - 5e8c6f4a by David Waern at 2009-12-21T14:12:41+00:00 Improve doc of DocName - - - - - 7868e551 by Ian Lynagh at 2009-09-22T10:43:03+00:00 TAG GHC 6.12-branch created - - - - - 0452a3ea by Ian Lynagh at 2009-12-15T12:46:07+00:00 TAG GHC 6.12.1 release - - - - - 65e9be62 by David Waern at 2009-12-21T16:58:58+00:00 Update CHANGES - - - - - 145cee32 by David Waern at 2009-12-21T16:59:09+00:00 TAG 2.6.0 - - - - - 3c552008 by David Waern at 2009-12-22T17:11:14+00:00 Update ANNOUNCE - - - - - 931f9db4 by David Waern at 2010-01-22T19:57:17+00:00 Convert haddock.vim to use unix newlines - - - - - 4e56588f by David Waern at 2010-01-22T22:11:17+00:00 Remove unnecessary (and inexplicable) uses of nub - - - - - 744bb4d1 by David Waern at 2010-01-22T22:12:14+00:00 Follow move of parser and lexer - - - - - e34bab14 by David Waern at 2010-01-22T22:49:13+00:00 Use findProgramLocation instead of findProgramOnPath in runtests.hs - - - - - 8d39891b by Isaac Dupree at 2010-01-14T18:53:18+00:00 fix html arg-doc off-by-one and silliness - - - - - 9401f2e9 by David Waern at 2010-01-22T22:57:03+00:00 Create a test for function argument docs - - - - - 507a82d7 by David Waern at 2010-01-22T23:24:47+00:00 Put parenthesis around type signature arguments of function type - - - - - 8a305c28 by David Waern at 2010-01-23T17:26:59+00:00 Add reference file for the FunArgs test - - - - - 1309d5e1 by David Waern at 2010-01-24T16:05:08+00:00 Improve FunArg test and update Test.html.ref - - - - - 2990f055 by Yitzchak Gale at 2010-02-14T16:03:46+00:00 Do not generate illegal character in HTML ID attribute. - - - - - c5bcab7a by David Waern at 2010-02-22T22:10:30+00:00 Fix Haddock markup error in comment - - - - - c6416a73 by David Waern at 2010-02-24T22:55:08+00:00 Large additions to the Haddock API Also improved and added more doc comments. - - - - - 57d289d7 by David Waern at 2010-02-24T22:58:02+00:00 Remove unused ifaceLocals - - - - - 80528d93 by David Waern at 2010-02-25T21:05:09+00:00 Add HaddockModInfo to the API - - - - - 82806848 by David Waern at 2010-02-25T21:05:27+00:00 Wibble - - - - - 744cad4c by David Waern at 2010-02-25T23:30:59+00:00 Make it possible to run a single test - - - - - 6a806e4c by David Waern at 2010-03-14T14:19:39+00:00 Bump version number - - - - - a5a8e4a7 by David Waern at 2010-03-14T14:36:35+00:00 Update ANNOUNCE - - - - - 6f05435e by Simon Hengel at 2010-03-15T20:52:42+00:00 Add missing dependencies for 'library' in haddock.cabal - - - - - faefe2bd by David Waern at 2010-03-15T22:29:37+00:00 Solve conflicts - - - - - 9808ad52 by David Waern at 2010-03-15T22:51:21+00:00 Bump version number - - - - - eb0bf60b by David Waern at 2010-03-15T22:52:32+00:00 Update CHANGES - - - - - f95cd891 by David Waern at 2010-03-15T23:01:06+00:00 Add Paths_haddock to other-modules of library - - - - - 65997b0a by David Waern at 2010-03-15T23:14:59+00:00 Update CHANGES - - - - - 7e251731 by David Waern at 2010-03-15T23:15:30+00:00 Bump version number - - - - - c9cd0ddc by David Waern at 2010-03-16T00:28:34+00:00 Fix warning - - - - - 1cac2d93 by Simon Peyton Jones at 2010-01-04T15:22:16+00:00 Fix imports for new location of splitKindFunTys - - - - - 474f26f6 by Simon Peyton Jones at 2010-02-10T14:36:06+00:00 Update Haddock for quasiquotes - - - - - 0dcc06c0 by Simon Peyton Jones at 2010-02-10T10:59:45+00:00 Track changes in HsTyVarBndr - - - - - 2d84733a by Simon Peyton Jones at 2010-02-10T14:52:44+00:00 Track HsSyn chnages - - - - - 9e3adb8b by Ian Lynagh at 2010-02-20T17:09:42+00:00 Resolve conflicts - - - - - a3e72ff8 by Simon Peyton Jones at 2010-03-04T13:05:16+00:00 Track change in HsUtils; and use a nicer function not an internal one - - - - - 27994854 by David Waern at 2010-03-18T22:22:27+00:00 Fix build with GHC 6.12.1 - - - - - 11f6e488 by David Waern at 2010-03-18T22:24:09+00:00 Bump version in test reference files - - - - - 0ef2f11b by David Waern at 2010-03-20T00:56:30+00:00 Fix library part of cabal file when in ghc tree - - - - - 3f6146ff by Mark Lentczner at 2010-03-20T22:30:11+00:00 First, experimental XHTML rendering switch to using the xhtml package copied Html.hs to Xhtml.hs and split into sub-modules under Haddock/Backends/Xhtml and detabify moved footer into div, got ready for iface change headers converted to semantic markup contents in semantic markup summary as semantic markup description in semantic markup, info block in header fixed factored out rendering so during debug it can be readable (see renderToString) - - - - - b8ab329b by Mark Lentczner at 2010-03-20T22:54:01+00:00 apply changes to Html.hs to Xhtml/*.hs incorporate changes that were made between the time Html.hs was copied and split into Xhtml.hs and Xhtml/*.hs includes patchs after "Wibble" (!) through "Fix build with GHC 6.12.1" - - - - - 73df2433 by Ian Lynagh at 2010-03-20T21:56:37+00:00 Follow LazyUniqFM->UniqFM in GHC - - - - - db4f602b by David Waern at 2010-03-29T22:00:01+00:00 Fix build with GHC 6.12 - - - - - d8dca088 by Simon Hengel at 2010-04-02T16:39:55+00:00 Add missing dependencies to cabal file - - - - - e2adc437 by Simon Hengel at 2010-04-02T14:08:40+00:00 Add markup support for interactive examples - - - - - e882ac05 by Simon Hengel at 2010-04-02T14:11:53+00:00 Add tests for interactive examples - - - - - 5a07a6d3 by David Waern at 2010-04-07T17:05:20+00:00 Propagate source positions from Lex.x to Parse.y - - - - - 6493b46f by David Waern at 2010-04-07T21:48:57+00:00 Let runtests.hs die when haddock has not been built - - - - - 5e34423e by David Waern at 2010-04-07T22:01:13+00:00 Make runtests.hs slightly more readable - - - - - 321d59b3 by David Waern at 2010-04-07T22:13:27+00:00 Fix haskell/haddock#75 Add colons to the $ident character set. - - - - - 37b08b8d by David Waern at 2010-04-08T00:32:52+00:00 Fix haskell/haddock#118 Avoid being too greedy when lexing URL markup (<..>), in order to allow multiple URLs on the same line. Do the same thing with <<..>> and #..#. - - - - - df8feac9 by David Waern at 2010-04-08T00:57:33+00:00 Make it easier to add new package deps to test suite This is a hack - we should use Cabal to get the package details instead. - - - - - 1ca6f84b by David Waern at 2010-04-08T01:03:06+00:00 Add ghc-prim to test suite deps - - - - - 27371e3a by Simon Hengel at 2010-04-08T19:26:34+00:00 Let parsing fails on paragraphs that are immediately followed by an example This is more consistent with the way we treat code blocks. - - - - - 83096e4a by David Waern at 2010-04-08T21:20:00+00:00 Improve function name - - - - - 439983ce by David Waern at 2010-04-10T10:46:14+00:00 Fix haskell/haddock#112 No link was generated for 'Addr#' in a doc comment. The reason was simply that the identifier didn't parse. We were using parseIdentifier from the GHC API, with a parser state built from 'defaultDynFlags'. If we pass the dynflags of the module instead, the right options are turned on on while parsing the identifer (in this case -XMagicHash), and the parse succeeds. - - - - - 5c0d35d7 by David Waern at 2010-04-10T10:54:06+00:00 Rename startGhc into withGhc - - - - - dca081fa by Simon Hengel at 2010-04-12T19:09:16+00:00 Add documentation for interactive examples - - - - - c7f26bfa by David Waern at 2010-04-13T00:51:51+00:00 Slight fix to the documentation of examples - - - - - 06eb7c4c by David Waern at 2010-04-13T00:57:05+00:00 Rename Interactive Examples into Examples (and simplify explanation) - - - - - 264830cb by David Waern at 2010-05-10T20:07:27+00:00 Update CHANGES with info about 2.6.1 - - - - - 8e5d4514 by Simon Hengel at 2010-04-18T18:16:54+00:00 Add unit tests for parser - - - - - 68297f40 by David Waern at 2010-05-10T21:53:37+00:00 Improve testsuite README - - - - - f04eb6e4 by David Waern at 2010-05-11T19:14:31+00:00 Re-organise the testsuite structure - - - - - a360f710 by David Waern at 2010-05-11T19:18:03+00:00 Shorten function name - - - - - 1d5dd359 by David Waern at 2010-05-11T21:40:02+00:00 Update runtests.hs following testsuite re-organisation - - - - - ffebe217 by David Waern at 2010-05-11T21:40:10+00:00 Update runtests.hs to use base-4.2.0.1 - - - - - 635de402 by David Waern at 2010-05-11T21:41:11+00:00 Update runparsetests.hs following testsuite reorganisation - - - - - 72137910 by Ian Lynagh at 2010-05-06T20:43:06+00:00 Fix build - - - - - 1a80b76e by Ian Lynagh at 2010-05-06T22:25:29+00:00 Remove redundant import - - - - - 1031a80c by Simon Peyton Jones at 2010-05-07T13:21:09+00:00 Minor wibbles to HsBang stuff - - - - - dd8e7fe5 by Ian Lynagh at 2010-05-08T15:22:00+00:00 GHC build system: Follow "rm" variable changes - - - - - 7f5e6748 by David Waern at 2010-05-13T11:53:02+00:00 Fix build with GHC 6.12.2 - - - - - 7953d4d8 by David Waern at 2010-05-13T18:45:01+00:00 Fixes to comments only - - - - - 8ae8eb64 by David Waern at 2010-05-13T18:57:26+00:00 ModuleMap -> IfaceMap - - - - - 1c3eadc6 by David Waern at 2010-05-13T19:03:13+00:00 Fix whitespace style issues - - - - - e96783c0 by David Waern at 2010-05-13T19:08:53+00:00 Fix comment - - - - - c998a78b by David Waern at 2010-05-13T19:39:00+00:00 Position the module header the same way everywhere Silly, but nice with some consistency :-) - - - - - b48a714e by David Waern at 2010-05-13T19:41:32+00:00 Position of module header, this time in the HTML backends - - - - - f9bfb12e by David Waern at 2010-05-13T19:43:05+00:00 Two newlines between declarations in Main - - - - - 071d44c7 by David Waern at 2010-05-13T19:44:21+00:00 Newlines in Convert - - - - - 036346db by David Waern at 2010-05-13T19:46:47+00:00 Fix a few stylistic issues in H.InterfaceFile - - - - - f0b8379e by David Waern at 2010-05-13T19:47:53+00:00 Add newlines to H.ModuleTree - - - - - 27409f8e by David Waern at 2010-05-13T19:51:10+00:00 Fix stylistic issues in H.Utils - - - - - 24774a11 by David Waern at 2010-05-13T20:00:43+00:00 Structure H.Types better - - - - - 7b6f5e40 by David Waern at 2010-05-13T20:01:04+00:00 Remove bad Arbitrary instance - - - - - fac9f1f6 by David Waern at 2010-05-13T20:05:50+00:00 Get rid of H.Utils.pathJoin and use System.FilePath.joinPath instead - - - - - fe6d00c4 by David Waern at 2010-05-13T20:51:55+00:00 Export a couple of more types from the API - - - - - b2e33a5f by David Waern at 2010-05-13T21:27:51+00:00 Improve doc comment for Interface - - - - - c585f2ce by David Waern at 2010-05-13T21:30:14+00:00 Improve documentation of Haddock.Interface - - - - - e6791db2 by David Waern at 2010-05-13T22:07:35+00:00 Remove meaningless comments - - - - - 7801b390 by David Waern at 2010-05-14T17:53:33+00:00 Remove unused modules - - - - - f813e937 by David Waern at 2010-05-14T17:55:17+00:00 Re-direct compilation output to a temporary directory Also add a flag --no-tmp-comp-dir that can be used to get the old behaviour of writing compilation files to GHC's output directory (default "."). - - - - - e56737ec by David Waern at 2010-05-14T18:06:11+00:00 Wibble - - - - - e40b0447 by David Waern at 2010-05-14T19:01:52+00:00 Move flag evaluation code from Main to Haddock.Options Determining the value of "singular" flags (by e.g. taking the last occurrence of the flag) and other flag evaluation should done in Haddock.Options which is the module that is supposed to define the command line interface. This makes Main a bit easier on the eyes as well. - - - - - 27091f57 by David Waern at 2010-05-14T19:05:10+00:00 Wibble - - - - - c658cf61 by David Waern at 2010-05-14T19:06:49+00:00 Re-order things in Haddock.Options a bit - - - - - 8cfdd342 by David Waern at 2010-05-14T19:20:29+00:00 De-tabify Haddock.Options and fix other whitespace issues - - - - - 0df16b62 by David Waern at 2010-05-14T19:25:07+00:00 Improve comments - - - - - 80b38e2b by David Waern at 2010-05-14T19:26:42+00:00 Whitespace police - - - - - fe580255 by David Waern at 2010-05-14T19:31:23+00:00 Wibbles to comments - - - - - a2b43fad by David Waern at 2010-05-14T20:24:32+00:00 Move some more flag functions to Haddock.Options - - - - - 3f895547 by David Waern at 2010-05-14T20:37:12+00:00 Make renderStep a top-level function in Main - - - - - 5cdca11d by David Waern at 2010-05-14T20:39:27+00:00 Spelling in comment - - - - - ad98d14c by David Waern at 2010-05-14T20:40:26+00:00 Comment fixes - - - - - 0bb9218f by David Waern at 2010-05-14T20:49:01+00:00 Whitespace police - - - - - 0f0a533f by David Waern at 2010-05-15T16:42:29+00:00 Improve description of --dump-interface - - - - - 5b2833ac by David Waern at 2010-05-15T17:16:53+00:00 Document --no-tmp-comp-dir - - - - - 8160b170 by David Waern at 2010-05-15T17:18:59+00:00 Wibble - - - - - 570dbe33 by David Waern at 2010-05-18T21:15:38+00:00 HLint police - - - - - 204e425f by David Waern at 2010-05-18T21:16:30+00:00 HLint police - - - - - 6db657ac by David Waern at 2010-05-18T21:16:37+00:00 Wibble - - - - - b942ccd7 by Simon Marlow at 2010-06-02T08:27:30+00:00 Interrupted disappeared in GHC 6.13 (GHC ticket haskell/haddock#4100) - - - - - 3b94a819 by Simon Marlow at 2010-06-02T08:45:08+00:00 Allow base-4.3 - - - - - c5a1fb7c by Simon Marlow at 2010-06-02T09:03:04+00:00 Fix compilation with GHC 6.13 - - - - - 6181296c by David Waern at 2010-06-08T21:09:05+00:00 Display name of prologue file when parsing it fails - - - - - 7cbc6f60 by Ian Lynagh at 2010-06-13T16:20:25+00:00 Remove redundant imports - - - - - 980c804b by Simon Marlow at 2010-06-22T08:41:50+00:00 isLocalAndTypeInferenced: fix for local module names overlapping package modules - - - - - d74d4a12 by Simon Marlow at 2010-06-23T12:03:27+00:00 Unresolved identifiers in Doc get replaced with DocMonospaced rather than plain strings - - - - - d8546783 by Simon Marlow at 2010-06-30T12:45:17+00:00 LaTeX backend (new options: --latex, --latex-style=<style>) - - - - - 437afa9e by David Waern at 2010-07-01T12:02:44+00:00 Fix a few stylistic whitespace issues in LaTeX backend - - - - - 85bc1fae by David Waern at 2010-07-01T15:42:45+00:00 Make runtest.hs work with GHC 6.12.3 (we should really stop hard coding this) - - - - - 7d2eb86f by David Waern at 2010-07-01T15:43:33+00:00 Update test following Simon's patch to render unresolved names in monospaced font - - - - - 08fcbcd2 by David Waern at 2010-07-01T16:12:18+00:00 Warning police - - - - - d04a8d7a by David Waern at 2010-07-04T14:53:39+00:00 Fix a bug in attachInstances We didn't look for instance docs in all the interfaces of the package. This had the effect of instance docs not always showing up under a declaration. I took the opportunity to clean up the code in H.I.AttachInstances a bit as well. More cleanup is needed, however. - - - - - d10344eb by Simon Hengel at 2010-07-10T09:19:04+00:00 Add missing dependencies to cabal file - - - - - 24090531 by Mark Lentczner at 2010-03-21T04:51:16+00:00 add exports to Xhtml modules - - - - - 84f9a333 by Mark Lentczner at 2010-04-03T19:14:22+00:00 clean up Doc formatting code - add CSS for lists - renderToString now uses showHtml since prettyHtml messes up <pre> sections - - - - - bebccf52 by Mark Lentczner at 2010-04-04T04:51:08+00:00 tweak list css - - - - - 0c2aeb5e by Mark Lentczner at 2010-04-04T06:24:14+00:00 all decls now generate Html not HtmlTable - ppDecl return Html, and so now do all of the functions it calls - added some internal tables to some decls, which is wrong, and will have to be fixed - decl "Box" functions became "Elem" functions to make clear they aren't in a table anymore (see Layout.hs) - docBox went away, as only used in one place (and its days are numbered) - cleaned up logic in a number of places, removed dead code - added maybeDocToHtml which simplified a number of places in the code - - - - - dbf73e6e by Mark Lentczner at 2010-04-05T05:02:43+00:00 clean up processExport and place a div around each decl - - - - - e25b7e9f by Mark Lentczner at 2010-04-10T21:23:21+00:00 data decls are now a sequence of paragraphs, not a table - - - - - 89ee0294 by Mark Lentczner at 2010-04-10T21:29:16+00:00 removed commented out code that can't be maintained - - - - - d466f536 by Mark Lentczner at 2010-04-12T04:56:27+00:00 removed declWithDoc and cleaned up data decls in summary - - - - - ed755832 by Mark Lentczner at 2010-04-12T05:07:53+00:00 merge in markupExample changes - - - - - c36f51fd by Mark Lentczner at 2010-04-25T04:56:37+00:00 made record fields be an unordList, not a table - - - - - ed3a28d6 by Mark Lentczner at 2010-04-25T05:23:28+00:00 fixed surround of instance and constructor tables - - - - - 0e35bbc4 by Mark Lentczner at 2010-04-25T05:36:59+00:00 fix class member boxes in summary - - - - - 5041749b by Mark Lentczner at 2010-04-25T05:38:35+00:00 remove unused bodyBox - - - - - e91724db by Mark Lentczner at 2010-04-25T06:26:10+00:00 fixed javascript quoting/escpaing issue - - - - - f4abbb73 by Mark Lentczner at 2010-05-03T23:04:31+00:00 adjust css for current markup - - - - - e75fec4c by Mark Lentczner at 2010-05-04T06:14:34+00:00 added assoicated types and methods back into class decls - - - - - 84169323 by Mark Lentczner at 2010-05-24T13:13:42+00:00 merge in changes from the big-whitespace cleanup - - - - - 3c1c872e by Mark Lentczner at 2010-06-11T21:03:58+00:00 adjust synopsis and bottom bar spacing - - - - - 3c1f9ef7 by Mark Lentczner at 2010-06-11T21:14:44+00:00 fix missing space in "module" lines in synoposis - - - - - 9a137e6d by Mark Lentczner at 2010-06-11T21:34:08+00:00 changed tt elements to code elements - - - - - 50f71ef1 by Mark Lentczner at 2010-06-11T23:27:46+00:00 factored out ppInstances - - - - - 3b9a9de5 by Mark Lentczner at 2010-06-17T17:36:01+00:00 push single constructors (newtype) onto line with decl - - - - - e0f8f2ec by Mark Lentczner at 2010-06-17T22:20:56+00:00 remove <++> connector - - - - - 56c075dd by Mark Lentczner at 2010-07-13T05:26:21+00:00 change to new page structure - - - - - 04be6ca7 by Mark Lentczner at 2010-07-14T04:21:55+00:00 constructors and args as dl lists, built in Layout.hs - - - - - 65aeafc2 by Mark Lentczner at 2010-07-14T05:38:32+00:00 better interface to subDecls - - - - - 72032189 by Mark Lentczner at 2010-07-14T07:04:10+00:00 made subDecl tables looks just so - - - - - b782eca2 by Mark Lentczner at 2010-07-14T16:00:54+00:00 convert args to SubDecl format - - - - - cc75e98f by Mark Lentczner at 2010-07-14T16:28:53+00:00 convert instances to SubDecl - - - - - 34e2aa5a by Mark Lentczner at 2010-07-14T21:07:32+00:00 removing old table cruft from Layout.hs - - - - - d5810d95 by Mark Lentczner at 2010-07-14T21:54:58+00:00 methods and associated types in new layout scheme - - - - - 65ef9579 by Mark Lentczner at 2010-07-14T23:43:42+00:00 clean up synopsis lists - - - - - e523318f by Mark Lentczner at 2010-07-15T05:02:26+00:00 clean up of anchors - - - - - 1215dfc5 by Mark Lentczner at 2010-07-15T23:53:01+00:00 added two new themes and rough css switcher - - - - - 7f0fd36f by Mark Lentczner at 2010-07-16T04:57:38+00:00 fixed package catpion, added style menu - - - - - 0dd4999c by Mark Lentczner at 2010-07-16T20:12:39+00:00 new output for mini_ pages - - - - - 64b2810b by Mark Lentczner at 2010-07-16T20:58:41+00:00 reformat index-frames - - - - - 3173f555 by Mark Lentczner at 2010-07-16T22:41:53+00:00 convert index to new markup - - - - - b0a4b7c9 by Mark Lentczner at 2010-07-17T04:07:22+00:00 convert index.html to new markup, adjust module markup - - - - - 8261ae1e by Mark Lentczner at 2010-07-17T05:07:29+00:00 classing styling of ancillary pages - - - - - 2a4fb025 by Mark Lentczner at 2010-07-17T05:11:45+00:00 clean up Layout.hs: no more vanillaTable - - - - - 87eec685 by Mark Lentczner at 2010-07-17T05:35:16+00:00 clean up Util.hs - - - - - d304e9b0 by Mark Lentczner at 2010-07-17T05:38:50+00:00 qualify import of XHtml as XHtml - - - - - 7dc05807 by Mark Lentczner at 2010-07-17T06:17:53+00:00 factored out head element generation - - - - - 9cdaec9e by Mark Lentczner at 2010-07-17T06:44:54+00:00 refactored out main page body generation - - - - - 8a51019e by Mark Lentczner at 2010-07-17T06:48:20+00:00 moved footer into only place that used it - - - - - efa479da by Mark Lentczner at 2010-07-17T18:48:30+00:00 styling auxillary pages for tibbe and snappy themes - - - - - 81de5509 by Mark Lentczner at 2010-07-18T04:41:38+00:00 fixed alphabet on index page, and styling of it and packages in module lists - - - - - 20718c1a by Mark Lentczner at 2010-07-18T05:34:29+00:00 cleaned up div functions in Layout.hs - - - - - 60d50453 by Mark Lentczner at 2010-07-18T05:48:39+00:00 added content div to main pages - - - - - ed16561c by Mark Lentczner at 2010-07-18T06:12:22+00:00 add .doc class to documentation blocks - - - - - f5c781b0 by Mark Lentczner at 2010-07-19T05:20:53+00:00 refactoring of anchor ID and fragment handling - - - - - a69a93bf by Mark Lentczner at 2010-07-19T05:35:55+00:00 remove an explicit bold tag - replace with .def class - - - - - d76c7225 by Mark Lentczner at 2010-07-19T06:56:15+00:00 rename Haddock.Backends.Xhtml.Util to Utils - - - - - 5a58c0da by David Waern at 2010-07-21T13:30:54+00:00 Remove trailing whitespace in Haddock.Backends.Xhtml - - - - - 0652aa17 by David Waern at 2010-07-21T13:33:21+00:00 Align a few comments - - - - - 785776c3 by David Waern at 2010-07-21T13:39:04+00:00 Remove trailing whitespace in H.B.X.Decl - - - - - 71a30710 by David Waern at 2010-07-21T13:44:27+00:00 Remove more trailing whitespace - - - - - 38750394 by David Waern at 2010-07-21T13:50:43+00:00 Style police - - - - - 3023d940 by David Waern at 2010-07-21T14:01:22+00:00 Style police in H.B.X.Decl - - - - - df16e9e6 by David Waern at 2010-07-21T14:14:45+00:00 Style police in H.B.X.DocMarkup - - - - - 6020e321 by David Waern at 2010-07-21T14:17:32+00:00 More style police - - - - - 86ad8bf5 by David Waern at 2010-07-21T14:21:02+00:00 Style police in H.B.Xhtml - - - - - aea27d03 by David Waern at 2010-07-21T14:42:03+00:00 Fix warnings in LaTeX backend - - - - - 2aff34a9 by David Waern at 2010-07-21T14:50:46+00:00 Style police in LaTeX backend (mainly more newlines) - - - - - e517162d by David Waern at 2010-07-21T15:05:47+00:00 Doc sections in Main - - - - - b971aa0c by David Waern at 2010-07-21T15:06:17+00:00 Trailing whitespace in Documentation.Haddock - - - - - f11628fb by David Waern at 2010-07-21T15:07:06+00:00 Trailing whitespace in Haddock.Convert - - - - - cbaf284c by David Waern at 2010-07-21T15:08:11+00:00 Style police in Haddock.GhcUtils - - - - - 71feb77b by David Waern at 2010-07-21T15:09:06+00:00 Style police in Haddock.InterfaceFile - - - - - 0a9c80e6 by David Waern at 2010-07-21T15:11:33+00:00 Whitespace police - - - - - 6168376c by David Waern at 2010-07-21T15:16:35+00:00 Style police in Haddock.Utils - - - - - 9fe4dd90 by David Waern at 2010-07-21T15:19:31+00:00 Add -fwarn-tabs - - - - - a000d752 by Mark Lentczner at 2010-07-20T17:25:52+00:00 move CSS Theme functions into Themes.hs - - - - - b52b440f by Mark Lentczner at 2010-07-20T17:29:35+00:00 add Thomas Schilling's theme - - - - - e43fa7e8 by Mark Lentczner at 2010-07-21T04:49:34+00:00 correct icon used with Snappy theme - - - - - ba5092d3 by Mark Lentczner at 2010-07-21T04:56:47+00:00 apply Tibbe's updates to his theme - - - - - 7804eef6 by Mark Lentczner at 2010-07-21T05:15:49+00:00 space between "Style" and the downward triangle - - - - - 7131d4c6 by Mark Lentczner at 2010-07-21T17:43:35+00:00 merge with David's source cleanups - - - - - ee65f1cb by David Waern at 2010-07-22T16:50:46+00:00 Fix a bug where we allowed --hoogle, --latex, etc without input files - - - - - e413ff7a by David Waern at 2010-07-22T17:21:58+00:00 Improve function name - - - - - a0fd14f3 by Simon Marlow at 2010-06-30T15:34:32+00:00 fix warnings - - - - - 31f73d2a by David Waern at 2010-07-22T19:29:41+00:00 Solve conflicts - - - - - d563b4a5 by Simon Marlow at 2010-06-30T15:34:37+00:00 fix warning - - - - - 412b6469 by David Waern at 2010-07-22T19:31:28+00:00 Solve conflict - - - - - 35174b94 by Ian Lynagh at 2010-07-06T17:27:16+00:00 Follow mkPState argument order change - - - - - b5c3585c by Simon Marlow at 2010-07-14T08:49:21+00:00 common up code for instance rendering - - - - - d8009560 by Simon Marlow at 2010-07-14T12:37:11+00:00 fix warnings - - - - - a6d88695 by David Waern at 2010-07-24T15:33:33+00:00 Fix build with ghc < 6.13 - - - - - 94cf9de1 by David Waern at 2010-07-24T15:34:37+00:00 Remove conflict left-over - - - - - 313b15c0 by Mark Lentczner at 2010-07-21T22:09:04+00:00 reorganization of nhaddock.css with tibbe - - - - - 9defed80 by Mark Lentczner at 2010-07-21T22:42:14+00:00 further cleanup of nhaddock.css, float TOC, support aux. pages - - - - - 6d944c1b by Mark Lentczner at 2010-07-22T06:22:23+00:00 remove old HTML backend - - - - - b3e8cba5 by Mark Lentczner at 2010-07-22T06:43:32+00:00 remove --html-help support - it was old, out-of-date, and mostly missing - - - - - d2654a08 by Mark Lentczner at 2010-07-22T21:45:34+00:00 tweaks to nhaddock.css - - - - - f73b285c by Mark Lentczner at 2010-07-23T06:19:35+00:00 command like processing for theme selection The bulk of the change is threadnig the selected theme set through functions in Xhtml.hs so that the selected themes can be used when generating the page output. There isn't much going on in most of these changes, just passing it along. The real work is all done in Themes.hs. - - - - - 8bddc90d by Mark Lentczner at 2010-07-23T06:58:31+00:00 drop --themes support, add named theme support decided that --themes was silly - no one would do that, just use multiple --theme arguments made --theme a synonym for --css and -c made those arguments, if no file is found, look up the argument as the name of a built in theme all of this let's haddock be invoked with "--theme=classic" for example. - - - - - 20cafd4f by Mark Lentczner at 2010-07-23T17:44:29+00:00 rename --default-themes to --built-in-themes - - - - - 0fe41307 by Mark Lentczner at 2010-07-23T18:33:02+00:00 tweaks to theme for info table, headings, and tables - - - - - cba4fee0 by Mark Lentczner at 2010-07-23T19:13:59+00:00 tweaks for dl layout, though still not used - - - - - 463fa294 by Mark Lentczner at 2010-07-23T21:07:19+00:00 tweak look of mini pages, keywords, and preblocks - - - - - 5472fc02 by Mark Lentczner at 2010-07-24T05:36:15+00:00 slide out Synopsis drawer - - - - - 9d5d5de5 by Mark Lentczner at 2010-07-24T06:02:42+00:00 extend package header and footer to edges of page - - - - - a47c91a2 by Mark Lentczner at 2010-07-24T06:28:44+00:00 fields are def lists, tweak css for style menu, mini pages, arguments - - - - - ca20f23b by Mark Lentczner at 2010-07-24T16:55:22+00:00 excisting last vestiges of the --xhtml flag - - - - - 71fb012e by Mark Lentczner at 2010-07-25T18:47:49+00:00 change how collapsing sections are done make whole .caption be the target improve javascript for class toggling have plus/minus images come from .css, not img tags - - - - - c168c8d3 by Mark Lentczner at 2010-07-26T00:32:05+00:00 reorganize files in the html lib data dir - - - - - 93324301 by Mark Lentczner at 2010-07-26T01:27:42+00:00 cleaned up Themes.hs - - - - - ad3b5dd4 by Mark Lentczner at 2010-07-26T02:39:15+00:00 make module list use new collapsers - - - - - 1df9bfc6 by Mark Lentczner at 2010-07-27T19:09:25+00:00 remove Tibbe theme - - - - - 8b9b01b3 by Mark Lentczner at 2010-07-27T20:04:03+00:00 move themes into html dir with .theme and .std-theme extensions - - - - - a7beb965 by Mark Lentczner at 2010-07-27T21:06:34+00:00 give a class to empty dd elements so they can be hidden - - - - - a258c117 by Mark Lentczner at 2010-07-27T21:23:58+00:00 remove custom version of copyFile in Xhtml.hs - - - - - b70dba6e by Mark Lentczner at 2010-07-27T22:12:45+00:00 apply margin changes to pre and headings as per group decision, and small cleanups - - - - - e6f722a2 by Mark Lentczner at 2010-07-28T00:03:12+00:00 make info block and package bar links be floatable by placing them first in the dom tree - - - - - c8278867 by Mark Lentczner at 2010-07-28T19:01:18+00:00 styling source links on declarations - - - - - 88fdc399 by Mark Lentczner at 2010-07-29T01:12:46+00:00 styling tweaks don't generate an empty li for absent style menu in links area update css for Classic and Snappy to handle: dl lists links in package header and in declarations floating of links and info block in package and module headers - - - - - 8a75b213 by Ian Lynagh at 2010-07-30T20:21:46+00:00 Fix build in GHC tree - - - - - ce8e18b3 by Simon Hengel at 2010-08-03T18:37:26+00:00 Adapt paths to data files in cabal file - - - - - 9701a455 by Simon Hengel at 2010-08-07T13:20:27+00:00 Add missing dependency to cabal file - - - - - 01b838d1 by Mark Lentczner at 2010-07-30T20:19:40+00:00 improved synopsis drawer: on click, not hover - - - - - 7b6f3e59 by Mark Lentczner at 2010-07-30T23:38:55+00:00 put the synopsis back in the other themes - - - - - 7b2904c9 by Mark Lentczner at 2010-08-11T11:11:26+00:00 close arrows on expanded synopsis drawer - - - - - ea19e177 by Mark Lentczner at 2010-08-12T21:16:45+00:00 width and font changes removed the max width restrictions on the page as a whole and the synopsis made the main font size smaller (nominally 14pt) and then tweaked most font sizes (relative) to be more consistent - - - - - 5ced00c0 by Mark Lentczner at 2010-08-13T15:09:55+00:00 implemented YUI's CSS font approach - - - - - 2799c548 by Mark Lentczner at 2010-08-13T15:11:59+00:00 adjusted margin to 2em, 1 wasn't enough - - - - - 58f06893 by Mark Lentczner at 2010-08-13T15:48:44+00:00 removed underlining on hover for named anchors headings in interface lost thier a element, no need, just put id on heading css for a elements now only applies to those with href attribute - - - - - 7aced4c4 by Mark Lentczner at 2010-08-13T15:50:22+00:00 more space between elements - - - - - 5a3c1cce by Mark Lentczner at 2010-08-13T16:43:43+00:00 adjusted font sizes of auxilary pages per new scheme - - - - - 487539ef by Mark Lentczner at 2010-08-13T21:43:41+00:00 add Frames button and clean up frames.html - - - - - c1a140b6 by Mark Lentczner at 2010-08-13T22:17:48+00:00 move frames button to js - - - - - b0bdb68e by Mark Lentczner at 2010-08-14T03:44:46+00:00 build style menu in javascript moved to javascript, so as to not polute the content with the style menu removed menu building code in Themes.hs removed onclick in Utils.hs changed text of button in header from "Source code" to "Source" more consistent with links in rest of page - - - - - 43ab7120 by Mark Lentczner at 2010-08-16T15:15:37+00:00 font size and margin tweaks - - - - - c0b68652 by Mark Lentczner at 2010-08-17T18:19:52+00:00 clean up collapser logics javascript code for collapasble sections cleaned up rewrote class utilities in javascript to be more robust refactored utilities for generating collapsable sections made toc be same color as synopsis module list has needed clear attribute in CSS - - - - - 5d573427 by Mark Lentczner at 2010-08-17T23:06:02+00:00 don't collapse entries in module list when clicking on links - - - - - 8c307c4a by Mark Lentczner at 2010-08-17T23:21:43+00:00 add missing data file to .cabal - - - - - 414bcfcf by Mark Lentczner at 2010-08-17T23:28:47+00:00 remove synopsis when in frames - - - - - ba0fa98a by Mark Lentczner at 2010-08-18T16:16:11+00:00 layout tweeks - mini page font size, toc color, etc. - - - - - 63c1bed1 by Mark Lentczner at 2010-08-18T19:50:02+00:00 margin fiddling - - - - - c311c094 by Mark Lentczner at 2010-08-20T01:37:55+00:00 better synopsis handling logic - no flashing - - - - - f1fe5fa8 by Mark Lentczner at 2010-08-20T01:41:06+00:00 fix small layout issues mini frames should have same size top heading give info block dts some padding so they don't collide in some browsers - - - - - 0de84d77 by Mark Lentczner at 2010-08-20T02:13:09+00:00 made style changing and cookies storage robust - - - - - 1ef064f9 by Thomas Schilling at 2010-08-04T13:12:22+00:00 Make synopsis frame behave properly in Firefox. In Firefox, pressing the back button first reverted the synopsis frame, and only clicking the back button a second time would update the main frame. - - - - - dd1c9a94 by Mark Lentczner at 2010-08-21T01:46:19+00:00 remove Snappy theme - - - - - 2353a90d by Mark Lentczner at 2010-08-25T05:16:19+00:00 fix occasional v.scroll bars on pre blocks (I think) - - - - - 459b8bf1 by Simon Hengel at 2010-08-08T10:12:45+00:00 Add createInterfaces' (a more high-level alternative to createInterfaces) to Haddock API - - - - - b1b68675 by David Waern at 2010-08-26T20:31:58+00:00 Follow recent API additions with some refactorings Simon Hegel's patch prompted me to do some refactorings in Main, Haddock.Documentation and Haddock.Interface. - - - - - 264d4d67 by David Waern at 2010-08-26T21:40:59+00:00 Get rid of GhcModule and related cruft We can get everything we need directly from TypecheckedModule. - - - - - 0feacec2 by Mark Lentczner at 2010-08-26T23:44:13+00:00 fixed CSS for ordered lists and def lists in doc blocks - - - - - 2997e0c2 by Mark Lentczner at 2010-08-26T23:45:03+00:00 support both kinds of enumerated lists in doc markup The documentation for Haddock says enumerated lists can use either of (1) first item 2. second item The second form wasn't actually supported - - - - - 5d4ddeec by Mark Lentczner at 2010-08-27T21:29:48+00:00 fix broken header link margins - - - - - 614456ba by Mark Lentczner at 2010-08-27T22:16:19+00:00 fix table of contents CSS - - - - - 03f329a2 by David Waern at 2010-08-28T16:36:09+00:00 Update tests following switch to the Xhtml backend - - - - - ca689fa2 by Mark Lentczner at 2010-08-28T18:25:16+00:00 fix def lists - - - - - 18e1d3d2 by Mark Lentczner at 2010-08-28T18:26:18+00:00 push footer to bottom of window - - - - - b0ab8d82 by David Waern at 2010-08-28T22:04:32+00:00 Whitespace police - - - - - 2d217977 by David Waern at 2010-08-29T12:44:45+00:00 Remove Snappy data files - - - - - 01e27d5f by David Waern at 2010-08-29T13:03:28+00:00 Add source entity path to --read-interface You can now use this flag like this: --read-interface=<html path>,<source entity path>,<.haddock file> By "source entity path" I mean the same thing that is specified with the --source-entity flag. The purpose of this is to be able to specify the source entity path per package, to allow source links to work in the presence of cross-package documentation. When given two arguments or less the --read-interface flag behaves as before. - - - - - 20bf4aaa by David Waern at 2010-08-29T13:11:03+00:00 Naming wibbles - - - - - ad22463f by Mark Lentczner at 2010-08-29T15:14:54+00:00 make portability block be a table - solves layout issues - - - - - 97bd1ae6 by Mark Lentczner at 2010-08-29T15:17:42+00:00 update golden test for Test due to portability box change - - - - - d37e139e by Mark Lentczner at 2010-08-29T17:07:17+00:00 move TOC and Info blocks down 0.5em to improve layout issue w/Test.hs - - - - - acf52501 by David Waern at 2010-08-29T17:32:36+00:00 Allow building with ghc < 6.16 - - - - - 1cb34ed8 by Ian Lynagh at 2010-07-24T23:18:49+00:00 Flatten the dynflags before parsing - - - - - b36845b4 by Ian Lynagh at 2010-07-24T23:26:49+00:00 Follow flattenLanguageFlags -> flattenExtensionFlags rename - - - - - 7f7fcc7e by David Waern at 2010-08-29T17:46:23+00:00 Use flattenExtensionFlags with ghc >= 6.13 only - - - - - 13cf9411 by Ian Lynagh at 2010-08-01T18:09:54+00:00 Make the main haddock script versioned, and make plain "haddock" a symlink - - - - - 495cbff2 by Ian Lynagh at 2010-08-18T18:57:24+00:00 Fix installation in the GHC build system Data-files are now in subdirectories, so we need to handle that - - - - - 88ebab0a by Ian Lynagh at 2010-08-18T19:43:53+00:00 GHC build system: Add all the data files to BINDIST_EXTRAS - - - - - 65837172 by David Waern at 2010-08-29T20:12:34+00:00 Update Test - - - - - 094bbaa2 by David Waern at 2010-08-29T20:55:14+00:00 Revert update to Test - - - - - a881cfb3 by David Waern at 2010-08-31T18:24:15+00:00 Bump version number - - - - - 1fc8a3eb by David Waern at 2010-08-31T22:32:27+00:00 Update ANNOUNCE - - - - - ee1df9d0 by David Waern at 2010-08-31T22:33:11+00:00 Update CHANGES - - - - - 394cc854 by David Waern at 2010-08-31T22:33:23+00:00 Update interface file versioning to work with ghc 6.14/15 - - - - - 7d03b79b by David Waern at 2010-08-31T22:36:00+00:00 Update test output following version change - - - - - a48d82d1 by Mark Lentczner at 2010-09-01T04:29:35+00:00 sort options in doc to match --help output removed --html-help option, as it is no longer supported - - - - - 06561aeb by Mark Lentczner at 2010-09-01T05:29:32+00:00 update options documentation rewrote doc for --html added doc for --theme and --built-in-themes added --use-contents and --gen-contents - - - - - 57dea832 by Mark Lentczner at 2010-09-01T05:31:27+00:00 slight wording change about Frames mode - - - - - fa1f6da3 by David Waern at 2010-09-01T10:57:44+00:00 Update doc configure script to find docbook stylesheets on arch linux - - - - - addff770 by David Waern at 2010-09-01T11:02:29+00:00 Wibble - - - - - 8399006d by David Waern at 2010-09-01T11:19:21+00:00 Replace ghci> with >>> in example syntax - - - - - 35074cf8 by David Waern at 2010-09-01T19:03:27+00:00 Improve docs for --no-tmp-comp-dir - - - - - 0f8f8cfd by David Waern at 2010-09-02T11:22:27+00:00 Add a list of contributors to the user guide Break out everyone thanked in the `Acknowledgements` chapter into a separate contributor list and add everyone from `darcs show authors`. We consider everyone who is thanked to be a contributor as a conservative estimation :-) I have added some more contributors that I know about, who were not in the darcs history, but others may be missing. So please add anyone that you think is missing from the list. - - - - - 42ccf099 by David Waern at 2010-09-02T11:29:22+00:00 Update copyright years in license - - - - - 0d560479 by David Waern at 2010-09-02T11:38:52+00:00 Update release instructions - - - - - 72ab7796 by David Waern at 2010-09-02T19:27:08+00:00 Add a note to ANNOUNCE - - - - - bf9d9c5d by David Waern at 2010-09-02T19:27:48+00:00 H.Utils needs FFI on Win+MinGW - - - - - 048ae44a by Mark Lentczner at 2010-09-04T23:19:47+00:00 make TOC group header identifiers validate - - - - - 8c6faf36 by Simon Michael at 2010-09-22T07:12:34+00:00 add hints for cleaner darcs show authors output - - - - - 9909bd17 by Simon Michael at 2010-09-22T17:58:06+00:00 print haddock coverage info on stdout when generating docs A module's haddockable items are its exports and the module itself. The output is lightly formatted so you can align the :'s and sort for readability. - - - - - 6da72171 by David Waern at 2010-10-03T21:31:24+00:00 Style wibble - - - - - 2f8d8e4d by Tobias Brandt at 2010-08-27T07:01:21+00:00 adding the option to fully qualify identifiers - - - - - 833be6c6 by Tobias Brandt at 2010-08-27T15:50:28+00:00 adding support for local and relative name qualification - - - - - df15c4e9 by Tobias Brandt at 2010-08-27T15:56:37+00:00 corrected qualification help message - - - - - 449e9ce1 by David Waern at 2010-10-16T17:34:30+00:00 Solve conflicts - - - - - 3469bda5 by David Waern at 2010-10-16T18:42:40+00:00 Use "qual" as an abbreviation for qualification instead of "quali" for consistency - - - - - 97c2d728 by David Waern at 2010-10-16T18:47:07+00:00 Style police - - - - - ce14fbea by David Waern at 2010-10-16T21:15:25+00:00 Style police - - - - - fdf29e9d by David Waern at 2010-10-17T00:30:44+00:00 Add a pointer to the style guide - - - - - 8e6b44e8 by rrnewton at 2010-10-24T03:19:28+00:00 Change to index pages: include an 'All' option even when subdividing A-Z. - - - - - 755b131c by David Waern at 2010-11-14T19:39:36+00:00 Bump version - - - - - d0345a04 by David Waern at 2010-11-14T19:41:59+00:00 TAG 2.8.1 - - - - - f6221508 by Simon Peyton Jones at 2010-09-13T09:53:00+00:00 Adapt to minor changes in internal GHC functions - - - - - 1290713d by Ian Lynagh at 2010-09-15T10:37:18+00:00 Remove duplicate Outputable instance for Data.Map.Map - - - - - 87f69eef by Ian Lynagh at 2010-09-21T15:01:10+00:00 Bump GHC dep upper bound - - - - - af36e087 by Ian Lynagh at 2010-09-21T15:12:02+00:00 Fix up __GLASGOW_HASKELL__ tests - - - - - ad67716c by Ian Lynagh at 2010-09-21T20:31:35+00:00 Don't build haddock is HADDOCK_DOCS is NO - - - - - 63b3f1f5 by Ian Lynagh at 2010-09-21T21:39:51+00:00 Fixes for when HADDOCK_DOCS=NO - - - - - e92bfa42 by Ian Lynagh at 2010-09-29T21:15:38+00:00 Fix URL creation on Windows: Use / not \ in URLs. Fixes haskell/haddock#4353 - - - - - 66c55e05 by Ian Lynagh at 2010-09-30T17:03:34+00:00 Tidy up haddock symlink installation In particular, it now doesn't get created if we aren't installing haddock. - - - - - 549b5556 by Ian Lynagh at 2010-10-23T21:17:14+00:00 Follow extension-flattening change in GHC - - - - - d7c2f72b by David Waern at 2010-11-14T20:17:55+00:00 Bump version to 2.8.2 - - - - - 6989a3a9 by David Waern at 2010-11-14T20:26:01+00:00 Solve conflict - - - - - 055c6910 by Ian Lynagh at 2010-09-22T15:36:20+00:00 Bump GHC dep - - - - - c96c0763 by Simon Marlow at 2010-10-27T11:09:44+00:00 follow changes in the GHC API - - - - - 45907129 by David Waern at 2010-11-07T14:00:58+00:00 Update the HCAR entry - - - - - 61940b95 by David Waern at 2010-11-07T14:07:34+00:00 Make the HCAR entry smaller - - - - - aa590b7d by David Waern at 2010-11-14T21:30:59+00:00 Update HCAR entry with November 2010 version - - - - - 587f9847 by David Waern at 2010-11-14T23:48:17+00:00 Require ghc >= 7.0 - - - - - ff5c647c by David Waern at 2010-11-14T23:49:09+00:00 TAG 2.8.2 - - - - - 937fcb4f by David Waern at 2010-11-14T23:49:45+00:00 Solve conflict - - - - - 8e5d0c1a by David Waern at 2010-11-15T21:09:50+00:00 Remove code for ghc < 7 - - - - - 3d47b70a by David Waern at 2010-11-15T21:11:06+00:00 Fix bad merge - - - - - 7f4a0d8a by David Waern at 2010-11-15T21:13:57+00:00 Remove more ghc < 7 code - - - - - 9ee34b50 by David Waern at 2010-11-15T21:31:25+00:00 Match all AsyncExceptions in exception handler - - - - - 42849c70 by David Waern at 2010-11-15T21:35:31+00:00 Just say "internal error" instead of "internal Haddock or GHC error" - - - - - c88c809b by David Waern at 2010-11-15T21:44:19+00:00 Remove docNameOcc under the motto "don't name compositions" - - - - - b798fc7c by David Waern at 2010-11-15T23:27:13+00:00 Wibble - - - - - 2228197e by David Waern at 2010-11-15T23:28:24+00:00 Rename the HCAR entry file - - - - - 8a3f9090 by David Waern at 2010-11-16T00:05:29+00:00 Remove Haskell 2010 extensions from .cabal file - - - - - c7a0c597 by David Waern at 2010-11-16T00:10:28+00:00 Style wibbles - - - - - cde707a5 by David Waern at 2010-11-16T00:12:00+00:00 Remove LANGUAGE ForeignFunctionInterface pragmas - - - - - 1dbda8ed by David Waern at 2010-11-16T00:17:21+00:00 Make a little more use of DoAndIfThenElse - - - - - 4c45ff6e by David Waern at 2010-11-16T00:59:41+00:00 hlint police - - - - - d2feaf09 by David Waern at 2010-11-16T01:14:15+00:00 hlint police - - - - - 99876e97 by David Waern at 2010-11-20T19:06:00+00:00 Haddock documentation updates - - - - - 65ce6987 by David Waern at 2010-11-20T19:42:51+00:00 Follow the style guide closer in Haddock.Types and improve docs - - - - - 28ca304a by tob.brandt at 2010-11-20T17:04:40+00:00 add full qualification for undocumented names - - - - - d61341e3 by David Waern at 2010-11-20T20:04:15+00:00 Re-structure qualification code a little - - - - - 0057e4d6 by David Waern at 2010-11-20T20:07:55+00:00 Re-order functions - - - - - d7279afd by David Waern at 2010-11-21T03:39:54+00:00 Add BangPatterns to alex and happy source files - - - - - 629fe60e by tob.brandt at 2010-11-23T23:35:11+00:00 documentation for qualification - - - - - 37031cee by David Waern at 2010-11-23T21:06:44+00:00 Update CHANGES - don't mention 2.8.2, we won't release it - - - - - f2489e19 by David Waern at 2010-12-01T21:57:11+00:00 Update deps of runtests.hs to work with ghc 7.0.1 - - - - - d3657e9a by David Waern at 2010-12-01T22:04:57+00:00 Make tests compile with ghc 7.0.1 - - - - - a2f09d9b by David Waern at 2010-12-01T22:06:59+00:00 Update tests following version bump - - - - - 50883ebb by David Waern at 2010-12-06T14:09:18+00:00 Update tests following recent changes - - - - - fc2fadeb by David Waern at 2010-12-06T14:17:29+00:00 Add a flag --pretty-html for rendering indented html with newlines - - - - - 30832ef2 by David Waern at 2010-12-06T14:17:35+00:00 Use --pretty-html when running the test suite. Makes it easier to compare output - - - - - a0b81b31 by David Waern at 2010-12-06T14:18:27+00:00 Wibble - - - - - 3aaa23fe by David Waern at 2010-12-06T14:19:29+00:00 Haddockify ppHtml comments - - - - - 24bb24f0 by David Waern at 2010-12-06T14:23:15+00:00 Remove --debug. It was't used, and --verbosity should take its place - - - - - 6bc076e5 by David Waern at 2010-12-06T14:25:37+00:00 Rename golden-tests into html-tests. "golden tests" sounds strange - - - - - 53301e55 by David Waern at 2010-12-06T14:26:26+00:00 QUALI -> QUAL in the description --qual for consistency - - - - - 98b6affb by David Waern at 2010-12-06T21:54:02+00:00 Bump version - - - - - 371bf1b3 by David Waern at 2010-12-06T22:08:55+00:00 Update tests following version bump - - - - - 25be762d by David Waern at 2010-12-06T22:21:03+00:00 Update CHANGES - - - - - 7c7dac71 by David Waern at 2010-12-06T22:33:43+00:00 Update ANNOUNCE - - - - - 30d7a5f2 by Simon Peyton Jones at 2010-11-15T08:38:38+00:00 Alex generates BangPatterns, so make Lex.x accept them (It'd be better for Alex to generate this pragma.) - - - - - 605e8018 by Simon Marlow at 2010-11-17T11:37:24+00:00 Add {-# LANGUAGE BangPatterns #-} to mollify GHC - - - - - a46607ba by David Waern at 2010-12-07T14:08:10+00:00 Solve conflicts - - - - - b28cda66 by David Waern at 2010-12-09T20:41:35+00:00 Docs: Mention that \ is a special character in markup - - - - - a435bfdd by Ian Lynagh at 2010-11-17T14:01:19+00:00 TAG GHC 7.0.1 release - - - - - 5a15a05a by David Waern at 2010-12-11T17:51:19+00:00 Fix indentation problem - - - - - 4232289a by Lennart Kolmodin at 2010-12-17T18:32:03+00:00 Revise haddock.cabal given that we now require ghc-7 default-language should be Haskell2010, slight new semantics for extensions. Rewrite into clearer dependencies of base and Cabal. - - - - - a36302dc by David Waern at 2010-12-19T17:12:37+00:00 Update CHANGES - - - - - 7c8b85b3 by David Waern at 2010-12-19T17:14:24+00:00 Bump version - - - - - cff22813 by Ian Lynagh at 2011-01-05T18:24:27+00:00 Write hoogle output in utf8; fixes GHC build on Windows - - - - - c7e762ea by David Waern at 2011-01-22T00:00:35+00:00 Put title outside doc div when HTML:fying title+prologue Avoids indenting the title, and makes more sense since the title is not a doc string anyway. - - - - - 5f639054 by David Waern at 2011-01-22T16:09:44+00:00 Fix spelling error - contributed by Marco Silva - - - - - c11dce78 by Ian Lynagh at 2011-01-07T02:33:11+00:00 Follow GHC build system changes - - - - - 101cfaf5 by David Waern at 2011-01-08T14:06:44+00:00 Bump version - - - - - af62348b by David Waern at 2011-01-08T14:07:07+00:00 TAG 2.9.2 - - - - - 4d1f6461 by Ian Lynagh at 2011-01-07T23:06:57+00:00 Name the haddock script haddock-ghc-7.0.2 instead of haddock-7.0.2; haskell/haddock#4882 "7.0.2" looked like a haddock version number before - - - - - 8ee4d5d3 by Simon Peyton Jones at 2011-01-10T17:31:12+00:00 Update Haddock to reflect change in hs_tyclds field of HsGroup - - - - - 06f3e3db by Ian Lynagh at 2011-03-03T15:02:37+00:00 TAG GHC 7.0.2 release - - - - - 7de0667d by David Waern at 2011-03-10T22:47:13+00:00 Update CHANGES - - - - - 33a9f1c8 by David Waern at 2011-03-10T22:47:31+00:00 Fix build with ghc 7.0.1 - - - - - 4616f861 by David Waern at 2011-03-10T22:47:50+00:00 TAG 2.9.2-actual - - - - - 0dab5e3c by Simon Hengel at 2011-04-08T15:53:01+00:00 Set shell script for unit tests back to work - - - - - 85c54dee by Simon Hengel at 2011-04-08T16:01:24+00:00 Set unit tests back to work Here "ghci>" was still used instead of ">>>". - - - - - 1cea9b78 by Simon Hengel at 2011-04-08T16:25:36+00:00 Update runtests.hs for GHC 7.0.2 - - - - - 8e5b3bbb by Simon Hengel at 2011-04-08T16:28:49+00:00 Update Haddock version in *.html.ref - - - - - 2545e955 by Simon Hengel at 2011-04-08T17:09:28+00:00 Add support for blank lines in the result of examples Result lines that only contain the string "<BLANKLINE>" are treated as a blank line. - - - - - adf64d2e by Simon Hengel at 2011-04-08T17:36:50+00:00 Add documentation for "support for blank lines in the result of examples" - - - - - c51352ca by David Waern at 2011-05-21T23:57:56+00:00 Improve a haddock comment - - - - - 7419cf2c by David Waern at 2011-05-22T15:41:52+00:00 Use cabal's test suite support to run the test suite This gives up proper dependency tracking of the test script. - - - - - 7770070c by David Waern at 2011-05-22T01:45:44+00:00 We don't need to send DocOptions nor a flag to mkExportItems - - - - - 9d95b7b6 by David Waern at 2011-05-22T21:39:03+00:00 Fix a bug - - - - - 1f93699b by David Waern at 2011-05-22T21:40:21+00:00 Break out fullContentsOf, give it a better name and some documentation The documentation describes how we want this function to eventually behave, once we have fixed a few problems with the current implementation. - - - - - 9a86432f by David Waern at 2011-05-22T21:53:52+00:00 Fix some stylistic issues in mkExportItems - - - - - c271ff0c by David Waern at 2011-05-22T22:09:11+00:00 Indentation - - - - - 93e602b1 by David Waern at 2011-06-10T01:35:31+00:00 Add git commits since switchover: darcs format (followed by a conflict resolution): commit 6f92cdd12d1354dfbd80f8323ca333bea700896a Merge: f420cc4 28df3a1 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Thu May 19 17:54:34 2011 +0100 Merge remote branch 'origin/master' into ghc-generics commit 28df3a119f770fdfe85c687dd73d5f6712b8e7d0 Author: Max Bolingbroke <batterseapower at hotmail.com> Date: Sat May 14 22:37:02 2011 +0100 Unicode fix for getExecDir on Windows commit 89813e729be8bce26765b95419a171a7826f6d70 Merge: 6df3a04 797ab27 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Mon May 9 11:55:17 2011 +0100 Merge branch 'ghc-new-co' commit 6df3a040da3dbddee67c6e30a892f87e6b164383 Author: Ian Lynagh <igloo at earth.li> Date: Sun May 8 17:05:50 2011 +0100 Follow changes in SDoc commit f420cc48b9259f0b1afd2438b12f9a2bde57053d Author: Jose Pedro Magalhaes <jpm at cs.uu.nl> Date: Wed May 4 17:31:52 2011 +0200 Adapt haddock to the removal of HsNumTy and TypePat. commit 797ab27bdccf39c73ccad374fea265f124cb52ea Merge: 1d81436 5a91450 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Mon May 2 12:05:03 2011 +0100 Merge remote branch 'origin/master' into ghc-new-co commit 1d8143659a81cf9611668348e33fd0775c7ab1d2 Author: Simon Peyton Jones <simonpj at microsoft.com> Date: Mon May 2 12:03:46 2011 +0100 Wibbles for ghc-new-co branch commit 5a91450e2ea5a93c70bd3904b022445c9cc82488 Author: Ian Lynagh <igloo at earth.li> Date: Fri Apr 22 00:51:56 2011 +0100 Follow defaultDynFlags change in GHC - - - - - 498da5ae by David Waern at 2011-06-11T00:33:33+00:00 * Merge in git patch from Michal Terepeta >From 6fc71d067738ef4b7de159327bb6dc3d0596be29 Mon Sep 17 00:00:00 2001 From: Michal Terepeta <michal.terepeta at gmail.com> Date: Sat, 14 May 2011 19:18:22 +0200 Subject: [PATCH] Follow the change of TypeSig in GHC. This follows the change in GHC to make TypeSig take a list of names (instead of just one); GHC ticket haskell/haddock#1595. This should also improve the Haddock output in case the user writes a type signature that refers to many names: -- | Some comment.. foo, bar :: ... will now generate the expected output with one signature for both names. - - - - - 094607fe by Ian Lynagh at 2011-06-17T19:10:29+01:00 Fix build - - - - - 8fa35740 by Ian Lynagh at 2011-06-26T21:06:40+01:00 Bump GHC dep to allow 7.2 - - - - - e4d2ca3c by Ian Lynagh at 2011-07-07T23:06:28+01:00 Relax base dep - - - - - b948fde9 by Ian Lynagh at 2011-07-28T16:39:45+01:00 GHC build system: Don't install the datafiles twice - - - - - f82f6d70 by Simon Marlow at 2011-08-11T12:08:15+01:00 Hack this to make it work with both Alex 2.x and Alex 3.x. Unicode in documentation strings is (still) mangled. I don't think it's possible to make it so that we get the current behaviour with Alex 2.x but magic Unicode support if you use Alex 3.x. At some point we have to decide that Alex 3.x is a requirement, then we can do Unicode. - - - - - b341cc12 by Max Bolingbroke at 2011-08-22T20:25:27+01:00 Fix compilation with no-pred-ty GHC - - - - - 30494581 by Max Bolingbroke at 2011-08-23T10:20:54+01:00 Remaining fixes for PredTy removal - - - - - 0b197138 by Max Bolingbroke at 2011-08-26T08:27:45+01:00 Rename factKind to constraintKind - - - - - a379bec5 by Max Bolingbroke at 2011-09-04T12:54:47+01:00 Deal with change to IParam handling in GHC - - - - - f94e421b by Max Bolingbroke at 2011-09-06T17:34:31+01:00 Adapt Haddock for the ConstraintKind extension changes - - - - - 8821e5cc by Max Bolingbroke at 2011-09-09T08:24:59+01:00 Ignore associated type defaults (just as we ignore default methods) - - - - - 31a0afd4 by Max Bolingbroke at 2011-09-09T09:06:00+01:00 Merge branch 'no-pred-ty' of ssh://darcs.haskell.org/srv/darcs/haddock into no-pred-ty - - - - - dd3b530a by Max Bolingbroke at 2011-09-09T14:10:25+01:00 Merge branch 'no-pred-ty' Conflicts: src/Haddock/Convert.hs - - - - - 5f25ec96 by Max Bolingbroke at 2011-09-09T14:10:40+01:00 Replace FactTuple with ConstraintTuple - - - - - cd30b9cc by David Waern at 2011-09-26T02:17:55+02:00 Bump to version 2.9.3 - - - - - 4fbfd397 by Max Bolingbroke at 2011-09-27T14:55:21+01:00 Follow changes to BinIface Name serialization - - - - - 92257d90 by David Waern at 2011-09-30T23:45:07+02:00 Fix problem with test files not added to distribution tarball - - - - - 00255bda by David Waern at 2011-09-30T23:48:24+02:00 Merge branch 'development' - - - - - 5421264f by David Waern at 2011-10-01T01:25:39+02:00 Merge in darcs patch from Simon Meier: Wed Jun 1 19:41:16 CEST 2011 iridcode at gmail.com * prettier haddock coverage info The new coverage info rendering uses less horizontal space. This reduces the number of unnecessary line-wrappings. Moreover, the most important information, how much has been documented already, is now put up front. Hopefully, this makes it more likely that a library author is bothered by the low coverage of his modules and fixes that issue ;-) - - - - - 07d318ef by David Waern at 2011-10-01T01:34:10+02:00 Use printException instead of deprecated printExceptionAndWarnings - - - - - 40d52ee4 by David Waern at 2011-10-01T01:41:13+02:00 Merge in darcs pach: Mon Apr 11 18:09:54 JST 2011 Liyang HU <haddock at liyang.hu> * Remember collapsed sections in index.html / haddock-util.js - - - - - 279d6dd4 by David Waern at 2011-10-01T01:55:45+02:00 Merge in darcs patch: Joachim Breitner <mail at joachim-breitner.de>**20110619201645 Ignore-this: f6c51228205b0902ad5bfad5040b989a As reported on http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=578301, generating the global index takes much too long if type-level (with lots of auto-generated types) is installed. The patch avoids a quadratic runtime in the subfunction getIfaceIndex of ppHtmlIndex by using a temporary set. Runtime improvement observed here from 25.36s to 2.86s. - - - - - d1612383 by David Waern at 2011-10-01T01:56:48+02:00 Merge branch 'development' - - - - - 347520c1 by David Waern at 2011-10-01T01:56:54+02:00 Merge branch 'master' of http://darcs.haskell.org/haddock - - - - - 9a0c95e8 by David Waern at 2011-10-01T02:19:10+02:00 Improve .cabal file - - - - - 6967dc64 by Ian Lynagh at 2011-10-01T01:34:06+01:00 Follow changes to ForeignImport/ForeignExport in GHC - - - - - 565cb26b by Simon Marlow at 2011-10-04T00:15:04+02:00 Hack this to make it work with both Alex 2.x and Alex 3.x. Unicode in documentation strings is (still) mangled. I don't think it's possible to make it so that we get the current behaviour with Alex 2.x but magic Unicode support if you use Alex 3.x. At some point we have to decide that Alex 3.x is a requirement, then we can do Unicode. - - - - - 8b74f512 by David Waern at 2011-10-04T00:18:17+02:00 Requre ghc >= 7.2 - - - - - 271d360c by David Waern at 2011-10-04T00:22:50+02:00 Bump version to 2.9.4 - - - - - 37f3edb0 by David Waern at 2011-10-06T02:30:21+02:00 Add alex and happy to build-tools. - - - - - 7ac2bb6e by David Terei at 2011-10-12T14:02:55-07:00 Add safe haskell indication to haddock output - - - - - 42c91a47 by David Terei at 2011-10-12T14:06:03-07:00 Fix CSS issue with info table not being contained in module header - - - - - 0eddab6c by David Terei at 2011-10-12T14:06:58-07:00 Add safe haskell indication to haddock output - - - - - 3df058eb by David Terei at 2011-10-12T14:07:07-07:00 Fix CSS issue with info table not being contained in module header - - - - - a40a6c3f by David Waern at 2011-10-22T11:29:06+02:00 Bump .haddock file version since the format has changed recently - - - - - 8a6254be by David Waern at 2011-10-22T11:30:42+02:00 Merge branch 'development' - - - - - 642e3e02 by David Waern at 2011-10-23T21:23:39+02:00 Sort import list - - - - - 36371cf8 by David Waern at 2011-10-23T22:48:18+02:00 Remove NEW_GHC_LAYOUT conditional. - - - - - 5604b499 by David Waern at 2011-10-27T00:15:03+02:00 Add --print-ghc-path. - - - - - 463499fa by David Waern at 2011-10-27T00:16:22+02:00 Make testsuite able to find its dependencies automatically. - - - - - a3506172 by Ryan Newton at 2011-11-05T05:59:58-04:00 Improved declNames internal error. Added a case to handle DocD. - - - - - 001b8baf by David Waern at 2011-11-05T20:37:29+01:00 Rename copy.hs -> accept.hs. - - - - - 55d808d3 by David Waern at 2011-11-05T23:30:02+01:00 Fix build. - - - - - deb5c3be by David Waern at 2011-11-06T00:01:47+01:00 Merge branch 'master' of http://darcs.haskell.org/haddock - - - - - 9b663554 by David Waern at 2011-11-06T00:03:45+01:00 Merge https://github.com/rrnewton/haddock - - - - - 1abb0ff6 by David Waern at 2011-11-06T01:20:37+01:00 Use getDeclMainBinder instead of declNames. - - - - - 4b005c01 by David Waern at 2011-11-06T19:09:53+01:00 Fix build. - - - - - c2c51bc7 by Ian Lynagh at 2011-11-06T23:01:33+00:00 Remove -DNEW_GHC_LAYOUT in ghc.mk - - - - - f847d703 by Jose Pedro Magalhaes at 2011-11-11T09:07:39+00:00 New kind-polymorphic core This big patch implements a kind-polymorphic core for GHC. The current implementation focuses on making sure that all kind-monomorphic programs still work in the new core; it is not yet guaranteed that kind-polymorphic programs (using the new -XPolyKinds flag) will work. For more information, see http://haskell.org/haskellwiki/GHC/Kinds - - - - - 7d7c3b09 by Jose Pedro Magalhaes at 2011-11-16T21:42:22+01:00 Follow changes to tuple sorts in master - - - - - 8430e03e by Simon Peyton Jones at 2011-11-17T10:20:27+00:00 Remove redundant imports - - - - - d1b06832 by Ian Lynagh at 2011-11-19T01:33:21+00:00 Follow GHC build system change to the way we call rm - - - - - 9e2230ed by David Waern at 2011-11-24T15:00:24+01:00 Fix a bug in test runner and get rid of regex-compat dependency. - - - - - 52039b21 by David Waern at 2011-11-24T23:55:36+01:00 Avoid haskell98 dependency in test - - - - - 92e1220d by David Waern at 2011-11-25T00:03:33+01:00 Avoid depency on regex-compat also in accept.hs. - - - - - ddac6b6f by David Waern at 2011-11-25T02:13:38+01:00 Accept test output. - - - - - 5a720455 by David Waern at 2011-11-25T02:16:20+01:00 Some more changes to test scripts. - - - - - 170a9004 by David Waern at 2011-11-25T02:30:41+01:00 Add flag --interface-version. - - - - - d225576c by David Waern at 2011-11-25T02:39:26+01:00 Remove #ifs for older compiler versions. - - - - - f0d0a4f5 by David Waern at 2011-11-26T04:20:12+01:00 Give preference to type over data constructors for doc comment links at renaming time. Previously this was done in the backends. Also, warn when a doc comment refers to something that is in scope but which we don't have the .haddock file for. These changes mean we can make DocIdentifier [a] into DocIdentifier a. - - - - - eef0e776 by David Waern at 2011-11-26T17:01:06+01:00 Allow doc comments to link to out-of-scope things (#78). (A bug that should have been fixed long ago.) - - - - - 565ad529 by David Waern at 2011-11-26T19:56:21+01:00 Update tests. - - - - - fb3ce7b9 by David Waern at 2011-11-26T21:44:28+01:00 Cleanup. - - - - - d0328126 by David Waern at 2011-11-26T22:10:28+01:00 Fix module reference bug. - - - - - c03765f8 by David Waern at 2011-12-03T05:20:20+01:00 Slightly better behaviour on top-levels without type signatures. - Docs don't get attached to the next top-level with signature by mistake. - If there's an export list and the top-level is part of it, its doc comment shows up in the documentation. - - - - - 48461d31 by David Waern at 2011-12-03T05:38:10+01:00 Add a test for Unicode doc comments. - - - - - 549c4b4e by David Waern at 2011-12-03T19:07:55+01:00 Cleanup. - - - - - 7bfecf91 by David Waern at 2011-12-03T20:13:08+01:00 More cleanup. - - - - - 14fab722 by Ian Lynagh at 2011-12-12T21:21:35+00:00 Update dependencies and binaryInterfaceVersion - - - - - 469e6568 by Ian Lynagh at 2011-12-18T12:56:16+00:00 Fix (untested) building from source tarball without alex/happy haddock's .cabal file was declaring that it needed alex and happy to build, but in the GHC source tarballs it doesn't. - - - - - 895c9a8c by David Waern at 2011-12-27T12:57:43+01:00 Go back to having a doc, sub and decl map instead of one big decl map. This setup makes more sense since when we add value bindings to the processed declarations (for type inference), we will have multiple declarations which should share documentation. Also, we already have a separate doc map for instances which we can now merge into the main doc map. Another benefit is that we don't need the DeclInfo type any longer. - - - - - 736767d9 by David Waern at 2011-12-27T13:33:41+01:00 Merge ../../../haddock Conflicts: src/Haddock/InterfaceFile.hs - - - - - 20016f79 by David Waern at 2011-12-27T13:57:23+01:00 Bump version. - - - - - 31f276fb by David Waern at 2011-12-27T13:57:32+01:00 Merge ../ghc/utils/haddock - - - - - 95b367cd by David Waern at 2011-12-27T14:57:29+01:00 Update tests following version bump. - - - - - fa3c94cd by David Waern at 2011-12-27T14:57:51+01:00 Get rid of quite unnecessary use of different lists. - - - - - 9c4d3c54 by David Waern at 2011-12-27T15:26:42+01:00 Cleanup. - - - - - 2caf9f90 by David Waern at 2011-12-27T16:18:05+01:00 Wibbles. - - - - - 3757d09b by David Waern at 2011-12-27T20:50:26+01:00 Complete support for inferring types for top-level bindings. - - - - - 53418734 by David Waern at 2011-12-28T15:02:13+01:00 Minor fixes and cleanup. - - - - - 0c9d0385 by Ian Lynagh at 2012-01-03T18:31:29+00:00 Follow rename of Instance to ClsInst in GHC - - - - - c9bc969a by Simon Hengel at 2012-01-12T21:28:14+01:00 Make sure that generated xhtml is valid (close haskell/haddock#186) Thanks to Phyx. - - - - - 836a0b9a by David Waern at 2012-02-01T02:30:05+01:00 Fix bug introduced in my recent refactoring. - - - - - c7d733eb by David Waern at 2012-02-01T02:30:26+01:00 Cleanup mkMaps and avoid quadratic behaviour. - - - - - da3cda8f by David Waern at 2012-02-01T02:56:56+01:00 Require ghc >= 7.4. - - - - - 83a3287e by David Waern at 2012-02-01T02:57:36+01:00 Update CHANGES. - - - - - 93408f0b by Simon Hengel at 2012-02-04T00:48:04+01:00 Add reference renderings - - - - - 49d00d2c by Simon Hengel at 2012-02-04T00:48:25+01:00 Set unit tests for parser back to work - - - - - eb450980 by Simon Hengel at 2012-02-04T00:49:07+01:00 Add .gitignore - - - - - a841602c by Simon Hengel at 2012-02-04T00:49:16+01:00 Add .ghci file - - - - - 8861199d by Simon Hengel at 2012-02-04T00:49:29+01:00 tests/html-tests/copy.hs: Use mapM_ instead of mapM So we do net get a list of () on stdout when running with runhaskell. - - - - - b477d9b5 by Simon Hengel at 2012-02-04T00:49:46+01:00 Remove index files from golden tests - - - - - 9dbda34e by Simon Hengel at 2012-02-04T00:49:57+01:00 Add /tests/html-tests/tests/*index*.ref to .gitignore - - - - - a9434817 by Simon Hengel at 2012-02-04T00:50:04+01:00 Add DocWarning to Doc The Xhtml backend has special markup for that, Hoogle and LaTeX reuse what we have for DocEmphasis. - - - - - de2fb6fa by Simon Hengel at 2012-02-04T00:50:13+01:00 Add support for module warnings - - - - - 0640920e by Simon Hengel at 2012-02-04T00:50:21+01:00 Add tests for module warnings - - - - - 30ce0d77 by Simon Hengel at 2012-02-04T00:50:29+01:00 Add support for warnings - - - - - bb367960 by Simon Hengel at 2012-02-04T00:50:37+01:00 Add tests for warnings - - - - - 6af1dc2d by Simon Hengel at 2012-02-04T00:50:50+01:00 Expand type signatures in export list (fixes haskell/haddock#192) - - - - - a06cbf25 by Simon Hengel at 2012-02-04T00:51:04+01:00 Expand type signatures for modules without explicit export list - - - - - 57dda796 by Simon Hengel at 2012-02-04T00:51:15+01:00 Remove obsolete TODO - - - - - 270c3253 by David Waern at 2012-02-04T00:51:24+01:00 Fix issues in support for warnings. * Match against local names only. * Simplify (it's OK to map over the warnings). - - - - - 683634bd by David Waern at 2012-02-04T00:55:11+01:00 Some cleanup and make sure we filter warnings through exports. - - - - - 210cb4ca by David Waern at 2012-02-04T03:01:30+01:00 Merge branch 'fix-for-186' of https://github.com/sol/haddock into ghc-7.4 - - - - - e8db9031 by David Waern at 2012-02-04T03:07:51+01:00 Style police. - - - - - 261f9462 by David Waern at 2012-02-04T03:20:16+01:00 Update tests. - - - - - 823cfc7c by David Waern at 2012-02-04T03:21:12+01:00 Use mapM_ in accept.hs as well. - - - - - 873dd619 by David Waern at 2012-02-04T03:21:33+01:00 Remove copy.hs - use accept.hs instead. - - - - - 0e31a14a by David Waern at 2012-02-04T03:47:33+01:00 Use <> instead of mappend. - - - - - 2ff7544f by David Waern at 2012-02-04T03:48:55+01:00 Remove code for older ghc versions. - - - - - dacf2786 by David Waern at 2012-02-04T15:52:51+01:00 Clean up some code from last SoC project. - - - - - 00cbb117 by David Waern at 2012-02-04T21:43:49+01:00 Mostly hlint-inspired cleanup. - - - - - 7dc86cc2 by Simon Peyton Jones at 2012-02-06T09:14:41+00:00 Track changes in HsDecls - - - - - f91f82fe by Ian Lynagh at 2012-02-16T13:40:11+00:00 Follow changes in GHC caused by the CAPI CTYPE pragma - - - - - a0ea6b0b by Ian Lynagh at 2012-02-22T02:26:12+00:00 Follow changes in GHC - - - - - b23b07d1 by Simon Peyton Jones at 2012-03-02T16:36:41+00:00 Follow changes in data representation from the big PolyKinds commit - - - - - 43406022 by Simon Hengel at 2012-03-05T11:18:34+01:00 Save/restore global state for static flags when running GHC actions This is necessary if we want to run createInterfaces (from Documentation.Haddock) multiple times in the same process. - - - - - 9fba16fe by Paolo Capriotti at 2012-03-06T10:57:33+00:00 Update .gitignore. - - - - - a9325044 by Simon Peyton Jones at 2012-03-14T17:35:42+00:00 Follow changes to tcdKindSig (Trac haskell/haddock#5937) - - - - - fd48065a by Iavor Diatchki at 2012-03-15T22:43:35-07:00 Add support for type-level literals. - - - - - 2e8206dd by Simon Peyton Jones at 2012-03-16T14:18:22+00:00 Follow changes to tcdKindSig (Trac haskell/haddock#5937) - - - - - 93e13319 by Simon Peyton Jones at 2012-03-17T01:04:05+00:00 Merge branch 'master' of http://darcs.haskell.org//haddock Conflicts: src/Haddock/Convert.hs - - - - - d253fa71 by Iavor Diatchki at 2012-03-19T20:12:18-07:00 Merge remote-tracking branch 'origin/master' into type-nats - - - - - fc40acc8 by Iavor Diatchki at 2012-03-19T20:31:27-07:00 Add a missing case for type literals. - - - - - fd2ad699 by Iavor Diatchki at 2012-03-24T13:28:29-07:00 Rename variable to avoid shadowing warning. - - - - - 9369dd3c by Simon Peyton Jones at 2012-03-26T09:14:23+01:00 Follow refactoring of TyClDecl/HsTyDefn - - - - - 38825ca5 by Simon Peyton Jones at 2012-03-26T09:14:37+01:00 Merge branch 'master' of http://darcs.haskell.org//haddock - - - - - 4324ac0f by David Waern at 2012-04-01T01:51:19+02:00 Disable unicode test. - - - - - 3165b750 by David Waern at 2012-04-01T01:51:34+02:00 Take reader environment directly from TypecheckedSource. - - - - - 213b644c by David Waern at 2012-04-01T01:55:20+02:00 Cleanup. - - - - - 3118b4ba by David Waern at 2012-04-01T02:16:15+02:00 Don't filter out unexported names from the four maps - fixes a regression. - - - - - d6524e17 by David Waern at 2012-04-01T02:40:34+02:00 Fix crash when using --qual. Naughty GHC API! - - - - - ea3c43d8 by Henning Thielemann at 2012-04-01T13:03:07+02:00 add QualOption type for distinction between qualification argument given by the user and the actual qualification for a concrete module - - - - - 5422ff05 by Henning Thielemann at 2012-04-01T16:25:02+02:00 emit an error message when the --qual option is used incorrectly - - - - - 026e3404 by David Waern at 2012-04-01T18:10:30+02:00 Don't crash on unicode strings in doc comments. - - - - - ce006632 by David Waern at 2012-04-01T20:13:35+02:00 Add test for --ignore-all-exports flag/ignore-exports pragma. - - - - - 6e4dd33c by David Waern at 2012-04-01T20:21:03+02:00 Merge branch 'dev' of https://github.com/sol/haddock into ghc-7.4 - - - - - 734ae124 by Henning Thielemann at 2012-04-01T20:22:10+02:00 Merge branch 'ghc-7.4' of http://darcs.haskell.org/haddock into ghc-7.4 - - - - - 622f9ba5 by David Waern at 2012-04-01T21:26:13+02:00 Merge http://code.haskell.org/~thielema/haddock/ into ghc-7.4 - - - - - 55ce17cb by Henning Thielemann at 2012-04-01T22:03:25+02:00 'abbreviate' qualification style - basic support Currently we ignore the package a module is imported from. This means that a module import would shadow another one with the same module name from a different package. - - - - - c85314ef by David Waern at 2012-04-01T22:05:12+02:00 Check qualification option before processing modules. - - - - - ae4b626c by Henning Thielemann at 2012-04-02T00:19:36+02:00 abbreviated qualification: use Packages.lookupModuleInAllPackages for finding the package that a module belongs to - - - - - 60bdbcf5 by Henning Thielemann at 2012-04-02T00:25:31+02:00 Merge branch 'ghc-7.4' of http://darcs.haskell.org/haddock into ghc-7.4 - - - - - df44301d by Henning Thielemann at 2012-04-02T00:29:05+02:00 qualification style 'abbreviated' -> 'aliased' - - - - - f4192a64 by David Waern at 2012-04-02T01:05:47+02:00 Merge http://code.haskell.org/~thielema/haddock/ into ghc-7.4 - - - - - 7ba09067 by David Terei at 2012-04-04T15:08:21-07:00 Fix reporting of modules safe haskell mode (#5989) - - - - - d0cc33d0 by David Terei at 2012-04-06T15:50:41+01:00 Fix reporting of modules safe haskell mode (#5989) - - - - - 6e3434c5 by Simon Peyton Jones at 2012-04-20T18:37:46+01:00 Track changes in HsSyn - - - - - 22014ed0 by Simon Peyton Jones at 2012-05-11T22:45:15+01:00 Follow changes to LHsTyVarBndrs - - - - - d9a07b24 by David Waern at 2012-05-15T01:46:35+02:00 Merge branch 'ghc-7.4' of http://darcs.haskell.org/haddock into ghc-7.4 - - - - - a6c4ebc6 by David Waern at 2012-05-16T02:18:32+02:00 Update CHANGES. - - - - - 8e181d29 by David Waern at 2012-05-16T02:27:56+02:00 Merge http://code.haskell.org/~thielema/haddock/ into ghc-7.4 - - - - - e358210d by David Waern at 2012-05-16T02:35:33+02:00 Mention the new aliased --qual mode in CHANGES. - - - - - efd36a28 by David Waern at 2012-05-16T21:33:13+02:00 Bump version number. - - - - - d6b3af14 by Simon Hengel at 2012-05-17T19:08:20+02:00 Add test for deprecated record field - - - - - 927f800e by Simon Hengel at 2012-05-17T19:08:20+02:00 Use >>= instead of fmap and join - - - - - 048b41d5 by Simon Hengel at 2012-05-17T19:08:20+02:00 newtype-wrap Doc nodes for things that may have warnings attached - - - - - e3a89fc3 by Simon Hengel at 2012-05-17T19:08:20+02:00 Attach warnings to `Documentation` type - - - - - 5d4cc43d by Simon Hengel at 2012-05-17T19:08:20+02:00 Simplify lookupWarning - - - - - cf8ae69d by Simon Hengel at 2012-05-17T19:08:20+02:00 Add test for haskell/haddock#205 - - - - - cb409b19 by Simon Peyton Jones at 2012-05-25T08:30:11+01:00 Follow changes in LHsTyVarBndrs - - - - - 2d5f4179 by Simon Hengel at 2012-05-26T19:21:29+02:00 Add Applicative instance for (GenRnM a) - - - - - e4373060 by Simon Hengel at 2012-05-26T19:21:33+02:00 Use a map for warnings, as suggested by @waern - - - - - 597a68c7 by Simon Hengel at 2012-05-27T08:48:24+02:00 Add an optional label to URLs - - - - - ef1ac7fe by Simon Hengel at 2012-05-27T08:48:24+02:00 Add support for hyperlink labels to parser - - - - - 41f2adce by Simon Hengel at 2012-05-27T08:48:24+02:00 Add golden test for hyperlinks - - - - - 83d5e764 by Simon Hengel at 2012-05-27T08:50:02+02:00 Use LANGUAGE pragmas instead of default-extensions in cabal file - - - - - ddb755e5 by Simon Hengel at 2012-05-27T08:50:02+02:00 Fix typo in comment - - - - - 110676b4 by Simon Hengel at 2012-05-27T08:50:02+02:00 Add a type signature for a where-binding - - - - - 7d9ba2a0 by Ian Lynagh at 2012-06-12T14:38:01+01:00 Follow changes in GHC - - - - - 47c704f2 by Ian Lynagh at 2012-06-12T18:52:16+01:00 Follow changes in GHC - - - - - e1efe1ab by Simon Peyton Jones at 2012-06-13T17:25:29+01:00 Follow changes for the implementation of implicit parameters - - - - - 69abc81c by Ian Lynagh at 2012-06-19T22:52:58+01:00 Follow changes in base - - - - - 9d074a21 by Paolo Capriotti at 2012-06-22T18:26:47+01:00 Use right docMap to get decl documentation. - - - - - e3292ef6 by Ian Lynagh at 2012-07-15T01:31:19+01:00 Follow changes in GHC - - - - - ceae56b0 by Ian Lynagh at 2012-07-16T21:22:48+01:00 Fix haddock following some GHC changes Passing _|_ as the Settings for defaultDynFlags no longer works well enough - - - - - 9df72735 by Paolo Capriotti at 2012-07-19T16:49:32+01:00 Forward port changes from stable. - - - - - 572f5fcf by Ian Lynagh at 2012-07-19T20:38:26+01:00 Merge branch 'master' of darcs.haskell.org:/srv/darcs//haddock - - - - - 9195aca4 by Paolo Capriotti at 2012-07-20T10:27:28+01:00 Update dependencies. - - - - - 33db3923 by Ian Lynagh at 2012-07-20T17:54:43+01:00 Build with GHC 7.7 - - - - - 925a2cea by David Waern at 2012-07-23T16:50:40+02:00 Merge branch 'dev' of https://github.com/sol/haddock into ghc-7.6 Conflicts: src/Haddock/InterfaceFile.hs - - - - - d710ef97 by David Waern at 2012-07-23T16:52:07+02:00 Bump version number. - - - - - eb0c2f83 by David Waern at 2012-07-23T16:57:58+02:00 Update CHANGES. - - - - - b3f56943 by Roman Cheplyaka at 2012-07-27T13:00:13+03:00 Hide "internal" instances This fixes haskell/haddock#37 (http://trac.haskell.org/haddock/ticket/37) Precisely, we show an instance iff its class and all the types are exported by non-hidden modules. - - - - - a70aa412 by Roman Cheplyaka at 2012-07-27T13:00:13+03:00 Tests for hiding instances (#37) - - - - - c0f4aa58 by Simon Hengel at 2012-07-27T13:00:13+03:00 Add an other test for hiding instances (#37) - - - - - a7ed6268 by Ian Lynagh at 2012-08-07T14:48:13+01:00 Follow changes in GHC - - - - - 0ab30d38 by Ian Lynagh at 2012-08-13T22:12:27+01:00 Improve haddock memory usage - - - - - 0eaa4e30 by Ian Lynagh at 2012-08-13T23:58:46+01:00 Improve haddock memory usage - - - - - 659d26cf by Ian Lynagh at 2012-08-14T13:16:48+01:00 Remove some temporary pragmas I accidentally recorded - - - - - d97fceb6 by Simon Hengel at 2012-08-25T13:19:34+02:00 Add missing dependency to library - - - - - 4c910697 by Simon Hengel at 2012-08-28T07:39:14+02:00 Move .ghci to project root - - - - - fc3c601a by Simon Hengel at 2012-08-28T07:39:14+02:00 accept.hs: Ignore some files - - - - - 1af9b984 by Simon Hengel at 2012-08-28T07:40:04+02:00 Update reference renderings (bump version) - - - - - 980dc253 by Simon Hengel at 2012-08-28T07:40:32+02:00 Update reference renderings (remove links for ()) - - - - - 33651dbf by Simon Hengel at 2012-08-28T07:41:50+02:00 Update documentation of `runInteractiveProcess` in reference rendering - - - - - 7ab25078 by David Waern at 2012-09-07T10:38:50+02:00 Merge branch 'hiddenInstances2' of http://github.com/feuerbach/haddock into ghc-7.6 - - - - - c3de3a4b by David Waern at 2012-09-07T14:29:27+02:00 Follow changes in GHC. - - - - - 298c43ac by David Waern at 2012-09-07T14:59:24+02:00 Update CHANGES. - - - - - e797993a by David Waern at 2012-09-07T15:21:30+02:00 Update ANNOUNCE. - - - - - d0b44790 by David Waern at 2012-09-07T15:22:43+02:00 Merge branch 'hidden-instances' into ghc-7.6 - - - - - 41a4adc8 by Simon Hengel at 2012-09-08T12:08:37+02:00 Update doc/README - - - - - 71ad1040 by Simon Hengel at 2012-09-08T12:17:17+02:00 Add documentation for URL labels - - - - - 9bb41afd by Simon Peyton Jones at 2012-09-20T18:14:26+01:00 Follow data type changes in the tc-untouchables branch Relating entirely to SynTyConRhs - - - - - b8139bfa by Simon Hengel at 2012-09-21T14:24:16+02:00 Disable Unicode test for now - - - - - a5fafdd7 by Simon Hengel at 2012-09-21T14:35:45+02:00 Update TypeOperators test for GHC 7.6.1 Type operators can't be used as type variables anymore! - - - - - 6ccf0025 by Simon Hengel at 2012-09-21T16:02:24+02:00 Remove (Monad (Either e)) instance from ref. rendering of CrossPackageDocs I do not really understand why the behavior changed, so I'll open a ticket, so that we can further investigate. - - - - - b5c6c138 by Ian Lynagh at 2012-09-27T02:00:57+01:00 Follow changes in GHC build system - - - - - b98eded0 by David Waern at 2012-09-27T15:37:02+02:00 Merge branch 'ghc-7.6' of http://darcs.haskell.org/haddock into ghc-7.6 - - - - - 76cc2051 by David Waern at 2012-09-27T15:48:19+02:00 Update hidden instances tests. - - - - - aeaa1c59 by David Waern at 2012-09-28T10:21:32+02:00 Make API buildable with GHC 7.6. - - - - - d76be1b0 by Simon Peyton Jones at 2012-09-28T15:57:05+01:00 Merge remote-tracking branch 'origin/master' into tc-untouchables - - - - - a1922af8 by David Waern at 2012-09-28T19:50:20+02:00 Fix spurious superclass constraints bug. - - - - - bc41bdbb by Simon Hengel at 2012-10-01T11:30:51+02:00 Remove old examples - - - - - bed7d3dd by Simon Hengel at 2012-10-01T11:30:51+02:00 Adapt parsetests for GHC 7.6.1 - - - - - dcdb22bb by Simon Hengel at 2012-10-01T11:30:51+02:00 Add test-suite section for parsetests to cabal file + get rid of HUnit dependency - - - - - 1e5263c9 by Simon Hengel at 2012-10-01T11:30:51+02:00 Remove test flag from cabal file This was not really used. - - - - - 4beee98b by David Waern at 2012-09-28T23:42:28+02:00 Merge branch 'ghc-7.6' of http://darcs.haskell.org/haddock into ghc-7.6 - - - - - 11dd2256 by Ian Lynagh at 2012-10-03T16:17:35+01:00 Follow change in GHC build system - - - - - fbd77962 by Simon Hengel at 2012-10-03T18:49:40+02:00 Remove redundant dependency from cabal file - - - - - 09218989 by Simon Hengel at 2012-10-04T16:03:05+02:00 Fix typo - - - - - 93a2d5f9 by Simon Hengel at 2012-10-04T16:11:41+02:00 Remove trailing whitespace from cabal file - - - - - c8b46cd3 by Simon Hengel at 2012-10-04T16:12:17+02:00 Export Haddock's main entry point from library - - - - - b411e77b by Simon Hengel at 2012-10-04T16:29:46+02:00 Depend on library for executable The main motivation for this is to increase build speed. In GHC's source tree the library is not build, but all modules are now required for the executable, so that GHC's validate will now detect build failures for the library. - - - - - f8f0979f by Simon Hengel at 2012-10-05T00:32:57+02:00 Set executable flag for Setup.lhs - - - - - dd045998 by Simon Hengel at 2012-10-07T16:44:06+02:00 Extend rather than set environment when running HTML tests On some platforms (e.g. ppc64) GHC requires gcc in the path. - - - - - 7b39c3ae by Simon Hengel at 2012-10-07T17:05:45+02:00 cross-package test: re-export IsString instead of Monad There is a monad instance for Q, which is not available on platforms that do not have GHCi support. This caused CrossPackageDocs to fail on those platforms. Re-exporting IsString should test the same thing, but it works on all platforms. - - - - - 0700c605 by Simon Hengel at 2012-10-07T19:06:34+02:00 runtests.hs: Fix some warnings - - - - - f78eca79 by Simon Hengel at 2012-10-07T19:06:34+02:00 runtests.hs: Make -Wall proof - - - - - 6beec041 by Simon Hengel at 2012-10-07T19:06:34+02:00 runtests.hs: Use listToMaybe/fromMaybe instead of safeHead/maybe - - - - - 44b8ce86 by Ian Lynagh at 2012-10-08T21:59:46+01:00 Follow changes in GHC - - - - - 6da5f702 by Simon Hengel at 2012-10-09T11:16:19+02:00 Update .ghci - - - - - 9ac1a1b9 by Kazu Yamamoto at 2012-10-09T12:45:31+02:00 Add markup support for properties - - - - - 1944cb42 by Simon Hengel at 2012-10-09T12:45:31+02:00 Simplify lexing/parsing of properties In contrast to what we do for examples, we do not really need to capture the "prompt" here. - - - - - bffd8e62 by Simon Hengel at 2012-10-09T13:40:14+02:00 Add HTML test for properties - - - - - 2fe9c5cb by Simon Hengel at 2012-10-09T13:40:21+02:00 Add unit tests for properties - - - - - 874e361b by Simon Hengel at 2012-10-09T13:40:33+02:00 Bump interface version - - - - - 2506cc37 by Simon Hengel at 2012-10-09T15:15:04+02:00 Fix parser bug - - - - - 743d2b7d by Simon Hengel at 2012-10-09T15:31:06+02:00 Allow to load interface files with compatible versions - - - - - 981a1660 by Simon Hengel at 2012-10-10T10:32:05+02:00 Export more types from Documentation.Haddock (fixes haskell/haddock#216) - - - - - dff7dc76 by Simon Hengel at 2012-10-10T11:15:19+02:00 Update ANNOUNCE and CHANGES - - - - - edd2bb01 by Simon Hengel at 2012-10-10T11:22:50+02:00 Bump version - - - - - 5039163b by Simon Hengel at 2012-10-10T13:56:04+02:00 Fix typo in documentation - - - - - e4ce34da by Simon Hengel at 2012-10-10T14:28:35+02:00 Add documentation for properties - - - - - 9555ebca by Simon Hengel at 2012-10-11T10:49:04+02:00 Remove redundant if-defs, more source documentation - - - - - 87aa67e1 by Simon Hengel at 2012-10-11T12:32:51+02:00 Adapt cabal file - - - - - c44c1dee by Simon Hengel at 2012-10-11T12:41:58+02:00 Require ghc 7.6 - - - - - 8383bc34 by Simon Hengel at 2012-10-11T12:50:24+02:00 Bump version - - - - - 1030eb38 by Simon Hengel at 2012-10-11T12:55:44+02:00 Update ANNOUNCE and CHANGES - - - - - 74955088 by Simon Hengel at 2012-10-12T09:49:31+02:00 Improve note about `binaryInterfaceVersion` (thanks David) - - - - - ee30f6b7 by Simon Hengel at 2012-10-13T13:40:59+02:00 Update version in html tests, rpm spec file, and user manual - - - - - f2861f18 by Simon Hengel at 2012-10-13T14:40:33+02:00 Remove unused MonadFix constraint - - - - - dfdf1a74 by Simon Hengel at 2012-10-13T15:15:38+02:00 Minor code simplification - - - - - 4ecd1e70 by Simon Hengel at 2012-10-13T15:33:43+02:00 Increase code locality - - - - - f7df5cc9 by Simon Hengel at 2012-10-13T16:03:12+02:00 Minor code simplification - - - - - e737eb6e by Simon Hengel at 2012-10-13T19:03:04+02:00 Handle HsExplicitListTy in renameer (fixes haskell/haddock#213) - - - - - c2dc8f17 by Simon Hengel at 2012-10-13T20:46:31+02:00 Better error messages - - - - - 14d48b4c by Simon Hengel at 2012-10-14T00:21:07+02:00 Simplify RnM type - - - - - 6c2cc547 by Simon Hengel at 2012-10-14T00:23:35+02:00 Simplify lookupRn - - - - - bc77ce85 by Simon Hengel at 2012-10-14T01:51:32+02:00 Organize unite tests hierarchically - - - - - 2306d117 by Simon Hengel at 2012-10-14T10:34:58+02:00 Handle more cases in renameType - - - - - 8a864203 by Simon Hengel at 2012-10-14T11:47:59+02:00 Add mini_HiddenInstances.html.ref and mini_HiddenInstancesB.html.ref - - - - - 3a978eca by Simon Hengel at 2012-10-14T11:49:28+02:00 Add /tests/html-tests/output/ to .gitignore - - - - - db18888a by Simon Hengel at 2012-10-14T13:38:21+02:00 Allow haddock markup in deprecation messages - - - - - e7cfee9f by Simon Hengel at 2012-10-14T14:00:23+02:00 If parsing of deprecation message fails, include it verbatim - - - - - 242a85be by Simon Hengel at 2012-10-14T14:13:24+02:00 Add description for PruneWithWarning test - - - - - 43d33df1 by Simon Hengel at 2012-10-14T15:40:53+02:00 Minor formatting change - - - - - 22768c44 by Simon Hengel at 2012-10-14T16:03:43+02:00 Properly handle deprecation messages for re-exported things (fixes haskell/haddock#220) - - - - - cb4b9111 by Simon Hengel at 2012-10-14T17:30:28+02:00 Add build artifacts for documentation to .gitignore - - - - - 854cd8de by Simon Hengel at 2012-10-14T23:34:51+02:00 unit-tests: Improve readability Add IsString instance for (Doc RdrName) + use <> instead of DocAppend. - - - - - c4446d54 by Simon Hengel at 2012-10-14T23:37:21+02:00 unit-tests: Minor refactoring Rename parse to parseParas. - - - - - 04f2703c by Simon Hengel at 2012-10-15T00:36:42+02:00 Fix typo - - - - - 3d109e44 by Simon Hengel at 2012-10-15T10:30:07+02:00 Add description for DeprecatedReExport test - - - - - 84f0985c by Simon Hengel at 2012-10-15T14:54:19+02:00 Move resources to /resources directory - - - - - a5de7ca6 by Simon Hengel at 2012-10-15T15:46:18+02:00 Move HTML tests to directory /html-test/ - - - - - e21f727d by Simon Hengel at 2012-10-15T19:32:42+02:00 Move HTML reference renderings to /html-test/ref/ - - - - - 3a3c6c75 by Simon Hengel at 2012-10-15T19:32:42+02:00 Copy css, images, etc. on accept - - - - - 40ead6dc by Simon Hengel at 2012-10-15T19:32:42+02:00 Move unit tests to /test directory - - - - - 99a28231 by Simon Hengel at 2012-10-15T19:32:42+02:00 Fix Setup.lhs /usr/bin/runhaskell is not installed on all systems. - - - - - 95faf45e by Simon Hengel at 2012-10-15T19:32:42+02:00 Make test management scripts more robust * They are now independent from the current directory, and hence can be called from everywhere * On UNIX/Linux they can now be run as scripts - - - - - 027aaa2d by Simon Hengel at 2012-10-15T19:53:40+02:00 Add 'dev' flag to cabal file, that builds without -O2 That way --disable-optimization can be used, which decreases build time considerably. - - - - - e0266ede by Simon Hengel at 2012-10-15T20:03:43+02:00 Add test case for "spurious superclass constraints bug" - - - - - 52a2aa92 by Simon Hengel at 2012-10-15T20:28:55+02:00 Adapt accept.lhs, so that it ignores more index files - - - - - 53530781 by Simon Hengel at 2012-10-15T20:49:39+02:00 Rename html-test/runtests.lhs to html-test/run.lhs - - - - - 84518797 by Simon Hengel at 2012-10-15T20:49:39+02:00 Move source files for HTML tests to html-test/src - - - - - a911dc6c by Simon Hengel at 2012-10-15T20:49:39+02:00 Adapt output directory for HTML tests - - - - - d3c15857 by Ian Lynagh at 2012-10-16T16:54:43+01:00 Follow dopt->gopt rename - - - - - 956665a5 by Simon Hengel at 2012-10-18T08:42:48+02:00 Update html-test/README - - - - - 903b1029 by Simon Hengel at 2012-10-18T08:50:26+02:00 Use markdown for html-test/README - - - - - 150b4d63 by Ian Lynagh at 2012-10-18T16:36:00+01:00 Follow changes in GHC: 'flags' has been renamed 'generalFlags' - - - - - 41e04ff9 by Simon Hengel at 2012-11-28T09:54:35+01:00 Export missing types from Documentation.Haddock - - - - - 9be59237 by Ian Lynagh at 2012-11-30T23:20:47+00:00 Update dependencies - - - - - e06842f5 by Simon Hengel at 2012-12-07T20:58:05+01:00 Bump version - - - - - e3dbede0 by Simon Hengel at 2012-12-07T20:58:05+01:00 Add missing test files to cabal file (fixes haskell/haddock#230) - - - - - ee0dcca7 by Simon Hengel at 2012-12-07T20:58:05+01:00 Update CHANGES - - - - - 51601bdb by Simon Peyton Jones at 2012-12-19T17:28:35+00:00 Track changes in UNPACK pragma stuff - - - - - f2573bc1 by Richard Eisenberg at 2012-12-21T20:56:25-05:00 Implement overlapping type family instances. An ordered, overlapping type family instance is introduced by 'type instance where', followed by equations. See the new section in the user manual (7.7.2.2) for details. The canonical example is Boolean equality at the type level: type family Equals (a :: k) (b :: k) :: Bool type instance where Equals a a = True Equals a b = False A branched family instance, such as this one, checks its equations in order and applies only the first the matches. As explained in the note [Instance checking within groups] in FamInstEnv.lhs, we must be careful not to simplify, say, (Equals Int b) to False, because b might later unify with Int. This commit includes all of the commits on the overlapping-tyfams branch. SPJ requested that I combine all my commits over the past several months into one monolithic commit. The following GHC repos are affected: ghc, testsuite, utils/haddock, libraries/template-haskell, and libraries/dph. Here are some details for the interested: - The definition of CoAxiom has been moved from TyCon.lhs to a new file CoAxiom.lhs. I made this decision because of the number of definitions necessary to support BranchList. - BranchList is a GADT whose type tracks whether it is a singleton list or not-necessarily-a-singleton-list. The reason I introduced this type is to increase static checking of places where GHC code assumes that a FamInst or CoAxiom is indeed a singleton. This assumption takes place roughly 10 times throughout the code. I was worried that a future change to GHC would invalidate the assumption, and GHC might subtly fail to do the right thing. By explicitly labeling CoAxioms and FamInsts as being Unbranched (singleton) or Branched (not-necessarily-singleton), we make this assumption explicit and checkable. Furthermore, to enforce the accuracy of this label, the list of branches of a CoAxiom or FamInst is stored using a BranchList, whose constructors constrain its type index appropriately. I think that the decision to use BranchList is probably the most controversial decision I made from a code design point of view. Although I provide conversions to/from ordinary lists, it is more efficient to use the brList... functions provided in CoAxiom than always to convert. The use of these functions does not wander far from the core CoAxiom/FamInst logic. BranchLists are motivated and explained in the note [Branched axioms] in CoAxiom.lhs. - The CoAxiom type has changed significantly. You can see the new type in CoAxiom.lhs. It uses a CoAxBranch type to track branches of the CoAxiom. Correspondingly various functions producing and consuming CoAxioms had to change, including the binary layout of interface files. - To get branched axioms to work correctly, it is important to have a notion of type "apartness": two types are apart if they cannot unify, and no substitution of variables can ever get them to unify, even after type family simplification. (This is different than the normal failure to unify because of the type family bit.) This notion in encoded in tcApartTys, in Unify.lhs. Because apartness is finer-grained than unification, the tcUnifyTys now calls tcApartTys. - CoreLinting axioms has been updated, both to reflect the new form of CoAxiom and to enforce the apartness rules of branch application. The formalization of the new rules is in docs/core-spec/core-spec.pdf. - The FamInst type (in types/FamInstEnv.lhs) has changed significantly, paralleling the changes to CoAxiom. Of course, this forced minor changes in many files. - There are several new Notes in FamInstEnv.lhs, including one discussing confluent overlap and why we're not doing it. - lookupFamInstEnv, lookupFamInstEnvConflicts, and lookup_fam_inst_env' (the function that actually does the work) have all been more-or-less completely rewritten. There is a Note [lookup_fam_inst_env' implementation] describing the implementation. One of the changes that affects other files is to change the type of matches from a pair of (FamInst, [Type]) to a new datatype (which now includes the index of the matching branch). This seemed a better design. - The TySynInstD constructor in Template Haskell was updated to use the new datatype TySynEqn. I also bumped the TH version number, requiring changes to DPH cabal files. (That's why the DPH repo has an overlapping-tyfams branch.) - As SPJ requested, I refactored some of the code in HsDecls: * splitting up TyDecl into SynDecl and DataDecl, correspondingly changing HsTyDefn to HsDataDefn (with only one constructor) * splitting FamInstD into TyFamInstD and DataFamInstD and splitting FamInstDecl into DataFamInstDecl and TyFamInstDecl * making the ClsInstD take a ClsInstDecl, for parallelism with InstDecl's other constructors * changing constructor TyFamily into FamDecl * creating a FamilyDecl type that stores the details for a family declaration; this is useful because FamilyDecls can appear in classes but other decls cannot * restricting the associated types and associated type defaults for a * class to be the new, more restrictive types * splitting cid_fam_insts into cid_tyfam_insts and cid_datafam_insts, according to the new types * perhaps one or two more that I'm overlooking None of these changes has far-reaching implications. - The user manual, section 7.7.2.2, is updated to describe the new type family instances. - - - - - f788d0fb by Simon Peyton Jones at 2012-12-23T15:49:58+00:00 Track changes in HsBang - - - - - ca460a0c by Simon Peyton Jones at 2012-12-23T15:50:28+00:00 Merge branch 'master' of http://darcs.haskell.org//haddock - - - - - f078fea6 by Simon Peyton Jones at 2013-01-02T08:33:13+00:00 Use InstEnv.instanceSig rather than instanceHead (name change) - - - - - 88e41305 by Simon Peyton Jones at 2013-01-14T17:10:27+00:00 Track change to HsBang type - - - - - e1ad4e19 by Kazu Yamamoto at 2013-02-01T11:59:24+09:00 Merge branch 'ghc-7.6' into ghc-7.6-merge-2 Conflicts: haddock.cabal src/Haddock/Interface/AttachInstances.hs src/Haddock/Interface/Create.hs src/Haddock/Interface/LexParseRn.hs src/Haddock/InterfaceFile.hs src/Haddock/Types.hs Only GHC HEAD can compile this. GHC 7.6.x cannot compile this. Some test fail. - - - - - 62bec012 by Kazu Yamamoto at 2013-02-06T11:12:28+09:00 Using tcSplitSigmaTy in instanceHead' (FIXME is resolved.) - - - - - 013fd2e4 by Kazu Yamamoto at 2013-02-06T17:56:21+09:00 Refactoring instanceHead'. - - - - - 3148ce0e by Kazu Yamamoto at 2013-02-07T17:45:10+09:00 Using new syntax in html-test/src/GADTRecords.hs. - - - - - 626dabe7 by Gabor Greif at 2013-02-15T22:42:01+01:00 Typo - - - - - 1eb667ae by Ian Lynagh at 2013-02-16T17:02:07+00:00 Follow changes in base - - - - - 3ef8253a by Ian Lynagh at 2013-03-01T23:23:57+00:00 Follow changes in GHC's build system - - - - - 1a265a3c by Ian Lynagh at 2013-03-03T23:12:07+00:00 Follow changes in GHC build system - - - - - 69941c79 by Max Bolingbroke at 2013-03-10T09:38:28-07:00 Use Alex 3's Unicode support to properly lex source files as UTF-8 Signed-off-by: David Waern <david.waern at gmail.com> - - - - - ea687dad by Simon Peyton Jones at 2013-03-15T14:16:10+00:00 Adapt to tcRnGetInfo returning family instances too This API change was part of the fix to Trac haskell/haddock#4175. But it offers new information to Haddock: the type-family instances, as well as the class instances, of this type. This patch just drops the new information on the floor, but there's an open opportunity to use it in the information that Haddock displays. - - - - - 971a30b0 by Andreas Voellmy at 2013-05-19T20:47:39+01:00 Fix for haskell/haddock#7879. Changed copy of utils/haddock/html/resources/html to use "cp -RL" rather than "cp -R". This allows users to run validate in a build tree, where the build tree was setup using lndir with a relative path to the source directory. - - - - - 31fb7694 by Ian Lynagh at 2013-05-19T20:47:49+01:00 Use "cp -L" when making $(INPLACE_LIB)/latex too - - - - - e9952233 by Simon Hengel at 2013-06-01T18:06:50+02:00 Add -itest to .ghci - - - - - b06873b3 by Mateusz Kowalczyk at 2013-06-01T18:06:50+02:00 Workaround for a failing build with --enable-tests. - - - - - e7858d16 by Simon Hengel at 2013-06-01T19:29:28+02:00 Fix broken test - - - - - 0690acb1 by Richard Eisenberg at 2013-06-21T14:08:25+01:00 Updates to reflect changes in HsDecls to support closed type families. - - - - - 7fd347ec by Simon Hengel at 2013-07-08T10:28:48+02:00 Fix failing test - - - - - 53ed81b6 by Simon Hengel at 2013-07-08T10:28:48+02:00 Fix failing test - - - - - 931c4f4f by Richard Eisenberg at 2013-07-24T13:15:59+01:00 Remove (error "synifyKind") to use WithinType, to allow haddock to process base. - - - - - 55a9c804 by Richard Eisenberg at 2013-08-02T15:54:55+01:00 Changes to reflect changes in GHC's type HsTyVarBndr - - - - - b6e9226c by Mathieu Boespflug at 2013-08-04T10:39:43-07:00 Output Copright and License keys in Xhtml backend. This information is as relevant in the documentation as it is in the source files themselves. Signed-off-by: David Waern <david.waern at gmail.com> - - - - - 4c66028a by David Waern at 2013-08-04T15:27:36-07:00 Bump interface file version. - - - - - 67340163 by David Waern at 2013-08-09T16:12:51-07:00 Update tests. - - - - - 2087569b by Mateusz Kowalczyk at 2013-08-25T09:24:13+02:00 Add spec tests. This adds tests for all elements we can create during regular parsing. This also adds tests for text with unicode in it. - - - - - 97f36a11 by Mateusz Kowalczyk at 2013-08-27T06:59:12+01:00 Fix ticket haskell/haddock#247. I do the same thing that the XHTML backend does: give these no special treatment and just act as if they are regular functions. - - - - - 60681b4f by Mateusz Kowalczyk at 2013-08-27T21:22:48+02:00 LaTeX tests setup - - - - - fa4c27b2 by Mateusz Kowalczyk at 2013-09-02T23:21:43+01:00 Fixes haskell/haddock#253 - - - - - 1a202490 by Mateusz Kowalczyk at 2013-09-03T01:12:50+01:00 Use Hspec instead of nanospec This is motivated by the fact that Haddock tests are not ran by the GHC's ‘validate’ script so we're pretty liberal on dependencies in that area. Full Hspec gives us some nice features such as Quickcheck integration. - - - - - 8cde3b20 by David Luposchainsky at 2013-09-08T07:27:28-05:00 Fix AMP warnings Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - d10661f2 by Herbert Valerio Riedel at 2013-09-11T15:15:01+02:00 Update Git repo URL in `.cabal` file - - - - - 16a44eb5 by Richard Eisenberg at 2013-09-17T09:34:26-04:00 Revision to reflect new role annotation syntax in GHC. - - - - - 4b9833b9 by Herbert Valerio Riedel at 2013-09-18T10:15:28+02:00 Add missing `traverse` method for `GenLocated` As `Traversable` needs at least one of `traverse` or `sequenceA` to be overridden. Signed-off-by: Herbert Valerio Riedel <hvr at gnu.org> - - - - - b71fed5d by Simon Hengel at 2013-09-18T22:43:34+02:00 Add test helper - - - - - 4fc1ea86 by Mateusz Kowalczyk at 2013-09-18T22:43:34+02:00 Fixes haskell/haddock#231 - - - - - 435872f6 by Mateusz Kowalczyk at 2013-09-18T22:43:34+02:00 Fixes haskell/haddock#256 We inject -dynamic-too into flags before we run all our actions in the GHC monad. - - - - - b8b24abb by Mateusz Kowalczyk at 2013-09-18T22:43:35+02:00 Add new field to DynFlags - - - - - 49558795 by Simon Hengel at 2013-09-18T22:43:35+02:00 Fallback to ./resources when Cabal data is not found (so that themes are found during development) - - - - - bf79d05c by Mateusz Kowalczyk at 2013-09-18T22:43:35+02:00 Fixes haskell/haddock#5 - - - - - e1baebc2 by Mateusz Kowalczyk at 2013-09-18T22:43:35+02:00 Print missing documentation. Fixes haskell/haddock#258. - - - - - 02ea74de by Austin Seipp at 2013-10-09T10:52:22-05:00 Don't consider StaticFlags when parsing arguments. Instead, discard any static flags before parsing the command line using GHC's DynFlags parser. See http://ghc.haskell.org/trac/ghc/ticket/8276 Based off a patch from Simon Hengel. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - 704fd5bb by Simon Hengel at 2013-11-09T00:15:13+01:00 Update HTML tests - - - - - f9fed49e by Simon Hengel at 2013-11-10T18:43:58+01:00 Bump version - - - - - 97ae1999 by Simon Peyton Jones at 2013-11-25T17:25:14+00:00 Track changes in HsSpliceTy data constructor - - - - - 59ad8268 by Simon Peyton Jones at 2014-01-10T18:17:43+00:00 Adapt to small change in Pretty's exports - - - - - 8b12e6aa by Simon Hengel at 2014-01-12T14:48:35-06:00 Some code simplification by using traverse - - - - - fc5ea9a2 by Simon Hengel at 2014-01-12T14:48:35-06:00 Fix warnings in test helper - - - - - 6dbb3ba5 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Add ByteString version of Attoparsec - - - - - 968d7774 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 One pass parser and tests. We remove the HTML test as it is no longer necessary. We cover the test case in spec tests and other HTML tests but keeping this around fails: this is because the new parser has different semantics there. In fact, I suspect the original behaviour was a bug that wasn't caught/fixed but simply included as-is during the testing. - - - - - 37a07c9c by Simon Hengel at 2014-01-12T14:48:35-06:00 Rename Haddock.ParseSpec to Haddock.ParserSpec - - - - - f0f68fe9 by Simon Hengel at 2014-01-12T14:48:35-06:00 Don't append newline to parseString input We also check that we have parsed everything with endOfInput. - - - - - 95d60093 by Simon Hengel at 2014-01-12T14:48:35-06:00 Fix totality, unicode, examples, paragraph parsing Also simplify specs and parsers while we're at it. Some parsers were made more generic. This commit is a part of GHC pre-merge squash, email fuuzetsu at fuuzetsu.co.uk if you need the full commit history. - - - - - 7d99108c by Simon Hengel at 2014-01-12T14:48:35-06:00 Update acceptance tests - - - - - d1b59640 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Support for bold. Conflicts: src/Haddock/Backends/Hoogle.hs src/Haddock/Interface/Rename.hs src/Haddock/Parser.hs - - - - - 4b412b39 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Allow for headings inside function documentation. LaTeX will treat the h3-h6 headings the same as we'd have to hack the style file heavily otherwise and it would make the headings tiny anyway. Hoogle upstream said they will put in the functionality on their end. Conflicts: src/Haddock/Interface/Rename.hs src/Haddock/Types.hs test/Haddock/ParserSpec.hs - - - - - fdcca428 by Mateusz Kowalczyk at 2014-01-12T14:48:35-06:00 Per-module extension flags and language listing. Any extensions that are not enabled by a used language (Haskell2010 &c) will be shown. Furthermore, any implicitly enabled are also going to be shown. While we could eliminate this either by using the GHC API or a dirty hack, I opted not to: if a user doesn't want the implied flags to show, they are recommended to use enable extensions more carefully or individually. Perhaps this will encourage users to not enable the most powerful flags needlessly. Enabled with show-extensions. Conflicts: src/Haddock/InterfaceFile.hs - - - - - 368942a2 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Bump interface version There were some breaking changes over the last few patches so we bump the interface version. This causes a big problem with testing: 1. To generate cross package docs, we first need to generate docs for the package used. 2. To generate package docs with new interface version, we need to use Haddock which has the version bumped. 3. To get Haddock with the version bump, we first need to test cross package docs 4. GOTO 1 So the problem is the chicken and the egg problem. It seems that the only solution would be to generate some interface files on the fly but it is non-trivial. To run this test, you'll have to: * build Haddock without the test (make sure everything else passes) * rebuild the packages used in the test with your shiny new binary making sure they are visible to Haddock * remove the ‘_hidden’ suffix and re-run the tests Note: because the packages currently used for this test are those provided by GHC, it's probably non-trivial to just re-build them. Preferably something less tedious to rebuild should be used and something that is not subject to change. - - - - - 124ae7a9 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Allow for nesting of paragraphs under lists. The nesting rules are similar to Markdown's with the exception that we can not simply indent the first line of a hard wrapped indented paragraph and have it treated as if it was fully indented. The reason is differences in markup as some of our constructs care about whitespace while others just swallow everything up so it's just a lot easier to not bother with it rather than making arbitrary rules. Note that we now drop trailing for string entities inside of lists. They weren't needed and it makes the output look uniform whether we use a single or double newline between list elements. Conflicts: src/Haddock/Parser.hs test/Haddock/ParserSpec.hs - - - - - c7913535 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Allow escaping in URLs and pictures. Some tests were moved under parseString as they weren't about paragraph level markup. Conflicts: src/Haddock/Parser.hs test/Haddock/ParserSpec.hs - - - - - 32326680 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Update documentation. - - - - - fbef6406 by Mateusz Kowalczyk at 2014-01-12T14:48:36-06:00 Update maintainer - - - - - b40e82f4 by Mateusz Kowalczyk at 2014-01-13T02:39:25-06:00 Fixes haskell/haddock#271 Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - f4eafbf8 by Gergő Érdi at 2014-01-19T15:35:16-06:00 Support for -XPatternSynonyms Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - a8939591 by Austin Seipp at 2014-01-29T08:09:04-06:00 Update CPP check for __GLASGOW_HASKELL__ Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - 30d7e9d5 by Gergő Érdi at 2014-01-31T00:15:01+08:00 <+>: Don't insert a space when concatenating empty nodes - - - - - a25ccd4d by Mateusz Kowalczyk at 2014-01-30T17:22:34+01:00 Fix @ code blocks In cases where we had some horizontal space before the closing ‘@’, the parser would not accept the block as a code block and we'd get ugly output. - - - - - 0f67305a by Mateusz Kowalczyk at 2014-01-30T17:22:34+01:00 Update tests This updates tests due to Haddock Trac haskell/haddock#271 fix and due to removal of TypeHoles as an extension from GHC. - - - - - 157322a7 by Gergő Érdi at 2014-01-31T01:03:17+08:00 Handle infix vs prefix names correctly everywhere, by explicitly specifying the context The basic idea is that "a" and "+" are either pretty-printed as "a" and "(+)" or "`a`" and "+" - - - - - aa6d9685 by Mateusz Kowalczyk at 2014-01-30T17:21:50+00:00 Correct whitespace in ‘hidden’ test for <+> change - - - - - 121872f0 by Mateusz Kowalczyk at 2014-02-09T17:59:12+00:00 Document module header. Fixes Haddock Trac haskell/haddock#270. - - - - - e3253746 by Mateusz Kowalczyk at 2014-02-10T21:37:48+00:00 Insert a space between module link and description Fixes Haddock Trac haskell/haddock#277. - - - - - 771d2384 by Mateusz Kowalczyk at 2014-02-10T23:27:21+00:00 Ensure a space between type signature and ‘Source’ This is briefly related to Haddock Trac haskell/haddock#249 and employs effectively the suggested fix _but_ it doesn't actually fix the reported issue. This commit simply makes copying the full line a bit less of a pain. - - - - - 8cda9eff by nand at 2014-02-11T15:48:30+00:00 Add support for type/data families This adds support for type/data families with their respective instances, as well as closed type families and associated type/data families. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - 3f22c510 by nand at 2014-02-11T15:53:50+00:00 Improve display of poly-kinded type operators This now displays them as (==) k a b c ... to mirror GHC's behavior, instead of the old (k == a) b c ... which was just wrong. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - effb2d6b by nand at 2014-02-11T15:56:50+00:00 Add test case for PatternSynonyms This just tests various stuff including poly-kinded patterns and operator patterns to make sure the rendering isn't broken. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - b38faf0d by Niklas Haas at 2014-02-13T21:53:32+00:00 Get rid of re-implementation of sortBy I have no idea what this was doing lying around here, and due to the usage of tuples it's actually slower, too. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - ac1e0413 by Mateusz Kowalczyk at 2014-02-13T23:57:16+00:00 Only warn about missing docs when docs are missing This fixes the ‘Missing documentation for…’ message for modules with 100% coverage. - - - - - cae2e36a by Niklas Haas at 2014-02-15T21:56:18+00:00 Add test case for inter-module type/data family instances These should show up in every place where the class is visible, and indeed they do right now. Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - 8bea5c3a by Mateusz Kowalczyk at 2014-02-19T05:11:34+00:00 Use a bespoke data type to indicate fixity This deals with what I imagine was an ancient TODO and makes it much clearer what the argument actually does rather than having the user chase down the comment. - - - - - 5b52d57c by Niklas Haas at 2014-02-22T21:31:03+01:00 Strip a single leading space from bird tracks (#201) This makes bird tracks in the form > foo > bar > bat parse as if they had been written as >foo >bar >bat ie. without the leading whitespace in front of every line. Ideally we also want to look into how leading whitespace affects code blocks written using the @ @ syntax, which are currently unaffected by this patch. - - - - - 5a1315a5 by Simon Hengel at 2014-02-22T21:55:35+01:00 Turn a source code comment into specs - - - - - 784cfe58 by Mateusz Kowalczyk at 2014-02-23T05:02:22+00:00 Update test case for lifted GADT type rendering The parsing of these seems to have been fixed by GHC folk and it now renders differently. IMHO it now renders in a better way so I'm updating the test to reflect this. - - - - - c3c88c2f by Mateusz Kowalczyk at 2014-02-23T06:37:14+00:00 Don't shadow ‘strip’. -Wall complains - - - - - 293031d8 by Niklas Haas at 2014-02-23T15:21:52+01:00 Make ImplicitParams render correctly (#260) This introduces a new precedence level for single contexts (because implicit param contexts always need parens around them, but other types of contexts don't necessarily, even when alone) - - - - - 4200842d by Niklas Haas at 2014-02-23T15:37:13+01:00 Lower precedence of equality constraints This drops them to the new precedence pREC_CTX, which makes single eqaulity constraints show up as (a ~ b) => ty, in line with GHC's rendering. Additional tests added to make sure other type operators render as intended. Current behavior matches GHC - - - - - b59e3227 by Niklas Haas at 2014-02-23T16:11:22+01:00 Add RankNTypes test case to ImplicitParams.hs This test actually tests what haskell/haddock#260 originally reported - I omitted the RankNTypes scenario from the original fix because I realized it's not relevant to the underlying issue and indeed, this renders as intended now. Still good to have more tests. - - - - - c373dbf7 by Mateusz Kowalczyk at 2014-02-24T06:09:54+00:00 Fix rendering of Contents when links are present Fixes Haddock Trac haskell/haddock#267. - - - - - 9ecb0e56 by Mateusz Kowalczyk at 2014-02-24T06:26:50+00:00 Fix wording in the docs - - - - - 4f4dcd8e by Mateusz Kowalczyk at 2014-02-27T03:00:33+00:00 Change rendering of duplicate record field docs See Haddock Trac haskell/haddock#195. We now change this behaviour to only rendering the documentation attached to the first instance of a duplicate field. Perhaps we could improve this by rendering the first instance that has documentation attached to it but for now, we'll stick with this. - - - - - ad8aa609 by Niklas Haas at 2014-03-08T09:43:26+01:00 Render fixity information Affects functions, type synonyms, type families, class names, data type names, constructors, data families, associated TFs/DFs, type synonyms, pattern synonyms and everything else I could think of. - - - - - 6a39c917 by Niklas Haas at 2014-03-09T07:43:39+01:00 Reorder topDeclElem to move the source/wiki links to the top They appear in the same position due to the float: right attribute but now they're always at the top of the box instead of at the bottom. - - - - - 2d34b3b4 by Niklas Haas at 2014-03-09T07:53:46+01:00 Use optLast instead of listToMaybe for sourceUrls/wikiUrls This lets you override them using eg. cabal haddock --haddock-options, which can come in handy if you want to use a different layout or URL for your source code links than cabal-install generates. - - - - - 0eff4624 by Niklas Haas at 2014-03-09T07:53:46+01:00 Differentiate between TH splices (line-links) and regular names This adds a new type of source code link, to a specific line rather than a specific declaration/name - this is used to link to the location of a TH splice that defines a certain name. Rather hefty changes throughout and still one unresolved issue (the line URLs aren't parsed from the third form of --read-interface which means they're currently restricted to same-interface links). Not sure if this issue is really worth all the hassle, especially since we could just use line links in general. This commit also contains some cleanup/clarification of the types in Haddock.Backends.Xhtml.Decl and shortens some overlong lines in the process. Notably, the Bool parameter was replaced by a Unicode type synonym to help clarify its presence in type signatures. - - - - - 66d6f77b by Niklas Haas at 2014-03-09T20:02:43+01:00 Group similar fixities together Identical fixities declared for the same line should now render using syntax like: infix 4 <, >=, >, <= - - - - - 6587f9f5 by Mateusz Kowalczyk at 2014-03-10T04:24:18+00:00 Update changelog - - - - - 7387ddad by Niklas Haas at 2014-03-11T10:26:04+01:00 Include fixity information in the Interface file This resolves fixity information not appearing across package borders. The binary file version has been increased accordingly. - - - - - ab46ef44 by Niklas Haas at 2014-03-11T10:26:04+01:00 Update changelog - - - - - 565cab6f by Niklas Haas at 2014-03-11T10:26:04+01:00 Update appearance of fixity annotations This moves them in-line with their corresponding lines, similar to a presentation envision by @hvr and described in #ghc. Redundant operator names are also omitted when no ambiguity is present. - - - - - 5d7afd67 by Niklas Haas at 2014-03-11T10:26:05+01:00 Filter family instances of hidden types Currently, this check does not extend to hidden right hand sides, although it probably should hide them in that case. - - - - - ec291b0c by Niklas Haas at 2014-03-11T10:26:05+01:00 Add documentation for --source-entity-line - - - - - 0922e581 by Niklas Haas at 2014-03-11T10:37:32+01:00 Revert "Reorder topDeclElem to move the source/wiki links to the top" This reverts commit 843c42c4179526a2ad3526e4c7d38cbf4d50001d. This change is no longer needed with the new rendering style, and it messes with copy/pasting lines. - - - - - 30618e8b by Mateusz Kowalczyk at 2014-03-11T09:41:07+00:00 Bump version to 2.15.0 - - - - - adf3f1bb by Mateusz Kowalczyk at 2014-03-11T09:41:09+00:00 Fix up some whitespace - - - - - 8905f57d by Niklas Haas at 2014-03-13T19:18:06+00:00 Hide RHS of TFs with non-exported right hand sides Not sure what to do about data families yet, since technically it would not make a lot of sense to display constructors that cannot be used by the user. - - - - - 5c44d5c2 by Niklas Haas at 2014-03-13T19:18:08+00:00 Add UnicodeSyntax alternatives for * and -> I could not find a cleaner way to do this other than checking for string equality with the given built-in types. But seeing as it's actually equivalent to string rewriting in GHC's implementation of UnicodeSyntax, it's probably fitting. - - - - - b04a63e6 by Niklas Haas at 2014-03-13T19:18:10+00:00 Display minimal complete definitions for type classes This corresponds to the new {-# MINIMAL #-} pragma present in GHC 7.8+. I also cleaned up some of the places in which ExportDecl is used to make adding fields easier in the future. Lots of test cases have been updated since they now render with minimality information. - - - - - a4a20b16 by Niklas Haas at 2014-03-13T19:18:12+00:00 Strip links from recently added html tests These were accidentally left there when the tests were originally added - - - - - d624f315 by Mateusz Kowalczyk at 2014-03-13T19:19:31+00:00 Update changelog - - - - - d27a21ac by Mateusz Kowalczyk at 2014-03-13T21:19:07+00:00 Always read in prologue files as UTF8 (#286). - - - - - 54b2fd78 by Mateusz Kowalczyk at 2014-03-13T21:28:09+00:00 Style only - - - - - fa4fe650 by Simon Hengel at 2014-03-15T09:04:18+01:00 Add Fuuzetsu maintainers field in cabal file - - - - - f83484b7 by Niklas Haas at 2014-03-15T18:20:24+00:00 Hide minimal definition for only-method classes Previously this was not covered by the All xs check since here it is not actually an All, rather a single Var n. This also adds the previously missing html-test/src/Minimal.hs. - - - - - 0099d276 by Niklas Haas at 2014-03-15T18:20:26+00:00 Fix issue haskell/haddock#281 This is a regression from the data family instances change. Data instances are now distinguished from regular lists by usage of the new class "inst", and the style has been updated to only apply to those. I've also updated the appropriate test case to test this a bit better, including GADT instances with GADT-style records. - - - - - 1f9687bd by Mateusz Kowalczyk at 2014-03-21T17:48:37+00:00 Please cabal sdist - - - - - 75542693 by Mateusz Kowalczyk at 2014-03-22T16:36:16+00:00 Drop needless --split-objs which slows us down. Involves tiny cleanup of all the dynflag bindings. Fixes haskell/haddock#292. - - - - - 31214dc3 by Herbert Valerio Riedel at 2014-03-23T18:01:01+01:00 Fix a few typos Signed-off-by: Herbert Valerio Riedel <hvr at gnu.org> - - - - - 0b73e638 by Mateusz Kowalczyk at 2014-03-31T05:34:36+01:00 Print kind signatures on GADTs - - - - - 2bab42f3 by Mateusz Kowalczyk at 2014-03-31T16:53:25+01:00 Add default for new PlatformConstraints field - - - - - 42647c5f by Mateusz Kowalczyk at 2014-03-31T18:29:04+01:00 Drop leading whitespace in @-style blocks. Fixes haskell/haddock#201. - - - - - 98208294 by Niklas Haas at 2014-03-31T20:09:58+02:00 Crash when exporting record selectors of data family instances This fixes bug haskell/haddock#294. This also fixes a related but never-before-mentioned bug about the display of GADT record selectors with non-polymorphic type signatures. Note: Associated data type constructors fail to show up if nothing is exported that they could be attached to. Exporting any of the data types in the instance head, or the class + data family itself, causes them to show up, but in the absence of either of these, exporting just the associated data type with the constructor itself will result in it being hidden. The only scenario I can come up that would involve this kind of situation involved OverlappingInstances, and even then it can be mitigated by just exporting the class itself, so I'm not going to solve it since the logic would most likely be very complicated. - - - - - 3832d171 by Mateusz Kowalczyk at 2014-04-01T19:07:33+01:00 Make CHANGES consistent with what's now in 2.14.2 - - - - - c386ae89 by Mateusz Kowalczyk at 2014-04-01T19:18:36+01:00 Actually bundle extra spec tests in sdist - - - - - bd57a6d3 by Mateusz Kowalczyk at 2014-04-03T21:13:48+01:00 Update test cases for GHC bug haskell/haddock#8945, Haddock haskell/haddock#188 The order of signature groups has been corrected upstream. Here we add a test case and update some existing test-cases to reflect this change. We remove grouped signature in test cases that we can (Minimal, BugDeprecated &c) so that the test is as self-contained as possible. - - - - - 708b88b1 by Mateusz Kowalczyk at 2014-04-03T21:16:07+01:00 Enforce strict GHC version in cabal file This stops people with 7.6.3 trying to install 2.15.x which clearly won't work. Unfortunately we shipped 2.14.x without realising this. - - - - - 60334f7c by Mateusz Kowalczyk at 2014-04-03T21:19:24+01:00 Initialise some new PlatformConstants fields - - - - - ea77f668 by Mateusz Kowalczyk at 2014-04-11T16:52:23+01:00 We don't actually want unicode here - - - - - 0b651cae by Mateusz Kowalczyk at 2014-04-11T18:13:30+01:00 Parse identifiers with ^ and ⋆ in them. Fixes haskell/haddock#298. - - - - - e8ad0f5f by Mateusz Kowalczyk at 2014-04-11T18:47:41+01:00 Ignore version string during HTML tests. - - - - - de489089 by Mateusz Kowalczyk at 2014-04-11T18:59:30+01:00 Update CHANGES to follow 2.14.3 - - - - - beb464a9 by Gergő Érdi at 2014-04-13T16:31:10+08:00 remove Origin flag from LHsBindsLR - - - - - cb16f07c by Herbert Valerio Riedel at 2014-04-21T17:16:50+02:00 Replace local `die` by new `System.Exit.die` Starting with GHC 7.10, System.Exit exports the new `die` which is essentially the same as Haddock.Util.die, so this commit changes Haddock.Util.die to be a simple re-export of System.Exit.die. See also https://ghc.haskell.org/trac/ghc/ticket/9016 for more details. Signed-off-by: Herbert Valerio Riedel <hvr at gnu.org> - - - - - 9b9b23c7 by Mateusz Kowalczyk at 2014-05-03T15:40:11+02:00 Disambiguate ‘die’ in test runners. - - - - - 5d28a2b8 by Mateusz Kowalczyk at 2014-05-05T09:19:49+02:00 Prepare modules for parser split. We have to generalise the Doc (now DocH) slightly to remove the dependency on GHC-supplied type. - - - - - d3967ff3 by Mateusz Kowalczyk at 2014-05-05T11:00:41+02:00 Move parser + parser tests out to own package. We move some types out that are necessary as well and then re-export and specialise them in the core Haddock. Reason for moving out spec tests is that if we're working on the parser, we can simply work on that and we can ignore the rest of Haddock. The downside is that it's a little inconvenient if at the end of the day we want to see that everything passes. - - - - - 522a448d by Mateusz Kowalczyk at 2014-05-05T11:14:47+02:00 Move out Show and Eq instances to Types They are much more useful to the users here. - - - - - 11a6f0f2 by Mateusz Kowalczyk at 2014-05-06T13:50:31+02:00 Remove no longer necessary parser error handling. We can now drop some Maybe tests and even lets us strip an error handling monad away in a few places. - - - - - 6992c924 by Mateusz Kowalczyk at 2014-05-14T02:23:55+02:00 Please the GHC build-system. As I can not figure out how to do this properly, if we're in GHC tree, we treat the library as being the same package. If we're not in the tree, we require that the library be installed separately. - - - - - 7a8ad763 by Mateusz Kowalczyk at 2014-05-14T14:50:25+02:00 Update issue tracker URL - - - - - f616c521 by Mateusz Kowalczyk at 2014-05-14T14:53:32+02:00 Update issue tracker URL for haddock-library - - - - - 66580ded by Gergő Érdi at 2014-05-25T14:24:16+08:00 Accomodate change in PatSyn representation - - - - - 0e43b988 by Mateusz Kowalczyk at 2014-05-29T03:15:29+02:00 Revert "Accomodate change in PatSyn representation" This reverts commit 57aa591362d7c8ba21285fccd6a958629a422091. I am reverting this because I pushed it to master when it was meant to stay on a wip-branch. Sorry Gergo and everyone who had trouble due to this. - - - - - e10d7ec8 by Mateusz Kowalczyk at 2014-05-29T03:24:11+02:00 Revert "Revert "Accomodate change in PatSyn representation"" This reverts commit e110e6e70e40eed06c06676fd2e62578da01d295. Apparently as per GHC commit ac2796e6ddbd54c5762c53e2fcf29f20ea162fd5 this was actually intended. Embarrasing for me. - - - - - 5861aca9 by Mateusz Kowalczyk at 2014-06-05T19:49:27+02:00 Clear up highlighting of identifiers with ‘'’s. - - - - - d7cc420f by Simon Peyton Jones at 2014-06-06T12:41:09+01:00 Follow change in patSynSig - - - - - 938b4fd8 by Mateusz Kowalczyk at 2014-06-12T07:24:29+02:00 Slightly update the readme. Style-sheets are no longer a recent thing, dead links, old maintainers, different formats. - - - - - c7799dea by Mateusz Kowalczyk at 2014-06-18T00:05:56+02:00 Update cabal files Update repository urls, use subdir property for haddock-library and use a separate versioning scheme for haddock-library in preparation for release. - - - - - a2750b6a by Simon Hengel at 2014-06-18T11:01:18+08:00 Compatibility with older versions of base and bytestring - - - - - 009b4b03 by Simon Hengel at 2014-06-18T11:14:01+08:00 Enable travis-ci for haddock-library - - - - - 9b5862eb by Simon Hengel at 2014-06-18T11:14:01+08:00 haddock-library: Do not depend on haddock-library in test suite I think you either add src to hs-source-dirs or the library to build-depends. But doing both does not make sense (AFAICT). - - - - - fb1f3279 by Simon Hengel at 2014-06-18T11:49:05+08:00 haddock-library: Use -Wall for specs - - - - - 649340e1 by Mateusz Kowalczyk at 2014-06-18T06:58:54+02:00 Use Travis with multiple GHC versions When using HEAD, we build haddock-library directly from repository as a dependency (and thanks to --enable-tests, the tests get ran anyway). In all other cases, we manually run the tests on haddock-library only and don't test the main project. - - - - - d7eeeec2 by Mateusz Kowalczyk at 2014-06-18T07:49:04+02:00 Comment improvements + few words in cabal file - - - - - 0f8db914 by Simon Hengel at 2014-06-18T13:52:23+08:00 Use doctest to check examples in documentation - - - - - 2888a8dc by Simon Hengel at 2014-06-18T14:16:48+08:00 Remove doctest dependency (so that we can use haddock-library with doctest) - - - - - 626d5e85 by Mateusz Kowalczyk at 2014-06-18T08:41:25+02:00 Travis tweaks - - - - - 41d4f9cc by Mateusz Kowalczyk at 2014-06-18T08:58:43+02:00 Don't actually forget to install specified GHC. - - - - - c6aa512a by John MacFarlane at 2014-06-18T10:43:57-07:00 Removed reliance on LambdaCase (which breaks build with ghc 7.4). - - - - - b9b93b6f by John MacFarlane at 2014-06-18T10:54:56-07:00 Fixed haddock warnings. - - - - - a41b0ab5 by Mateusz Kowalczyk at 2014-06-19T01:20:10+02:00 Update Travis, bump version - - - - - 864bf62a by Mateusz Kowalczyk at 2014-06-25T10:36:54+02:00 Fix anchors. Closes haskell/haddock#308. - - - - - 53df91bb by Mateusz Kowalczyk at 2014-06-25T15:04:49+02:00 Drop DocParagraph from front of headers I can not remember why they were wrapped in paragraphs to begin with and it seems unnecessary now that I test it. Closes haskell/haddock#307. - - - - - 29b5f2fa by Mateusz Kowalczyk at 2014-06-25T15:17:20+02:00 Don't mangle append order for nested lists. The benefit of this is that the ‘top-level’ element of such lists is properly wrapped in <p> tags so any CSS working with these will be applied properly. It also just makes more sense. Pointed out at jgm/pandoc#1346. - - - - - 05cb6e9c by Mateusz Kowalczyk at 2014-06-25T15:19:45+02:00 Bump haddock-library to 1.1.0 for release - - - - - 70feab15 by Iavor Diatchki at 2014-07-01T03:37:07-07:00 Propagate overloading-mode for instance declarations in haddock (#9242) - - - - - d4ca34a7 by Simon Peyton Jones at 2014-07-14T16:23:15+01:00 Adapt to new definition of HsDecls.TyFamEqn This is a knock-on from the refactoring from Trac haskell/haddock#9063. I'll push the corresponding changes to GHC shortly. - - - - - f91e2276 by Edward Z. Yang at 2014-07-21T08:14:19-07:00 Track GHC PackageId to PackageKey renaming. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> Conflicts: src/Haddock/Interface/Create.hs - - - - - b010f9ef by Edward Z. Yang at 2014-07-25T16:28:46-07:00 Track changes for module reexports. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> Conflicts: src/Haddock/Interface/Create.hs - - - - - 8b85f9f9 by Mateusz Kowalczyk at 2014-07-28T13:25:43+02:00 Catch mid-line URLs. Fixes haskell/haddock#314. - - - - - 4c613a78 by Edward Z. Yang at 2014-08-05T03:11:00-07:00 Track type signature change of lookupModuleInAllPackages Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - e80b051c by Edward Z. Yang at 2014-08-05T17:34:26+01:00 If GhcProfiled, also build Haddock profiled. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - f9cccd29 by Edward Z. Yang at 2014-08-07T14:23:35+01:00 Ignore TAGS files. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 00b3af52 by Mateusz Kowalczyk at 2014-08-08T04:58:19+02:00 Update to attoparsec-0.12.1.1 There seems to be memory and speed improvement. - - - - - 5457dc71 by Mateusz Kowalczyk at 2014-08-08T18:24:02+02:00 Fix forgotten src - - - - - 3520cb04 by Mateusz Kowalczyk at 2014-08-14T20:19:07+01:00 Bump down the version for master to 2.14.4 - - - - - dc98c21b by Mateusz Kowalczyk at 2014-08-14T20:23:27+01:00 Revert "Track type signature change of lookupModuleInAllPackages" This reverts commit d59fec2c9551b5662a3507c0011e32a09a9c118f. - - - - - 3f2038c0 by Mateusz Kowalczyk at 2014-08-14T20:23:31+01:00 Revert "Track changes for module reexports." This reverts commit b99b57c0df072d12b67816b45eca2a03cb1da96d. - - - - - 56d4e49e by Mateusz Kowalczyk at 2014-08-14T20:23:42+01:00 Revert "Track GHC PackageId to PackageKey renaming." This reverts commit 8ac42d3327473939c013551750425cac191ff0fd. - - - - - 726ea3cb by Mateusz Kowalczyk at 2014-08-14T20:23:47+01:00 Revert "Adapt to new definition of HsDecls.TyFamEqn" This reverts commit cb96b4f1ed0462b4a394b9fda6612c3bea9886bd. - - - - - 61a88ff0 by Mateusz Kowalczyk at 2014-08-14T20:23:52+01:00 Revert "Propagate overloading-mode for instance declarations in haddock (#9242)" This reverts commit 8d20ca8d5a9bee73252ff2035ec45f9c03d0820c. - - - - - a32ba674 by Mateusz Kowalczyk at 2014-08-14T20:26:03+01:00 Revert "Disambiguate ‘die’ in test runners." This reverts commit dba02d6df32534aac5d257f2d28596238d248942. - - - - - f335820f by Mateusz Kowalczyk at 2014-08-14T20:26:09+01:00 Revert "Replace local `die` by new `System.Exit.die`" This reverts commit 08aa509ebac58bfb202ea79c7c41291ec280a1c5. - - - - - 107078e4 by Mateusz Kowalczyk at 2014-08-14T20:27:34+01:00 Merge branch 'reverts' This reverts any changes that were made to have Haddock compile with 7.9. When 7.10 release comes, we can simply re-apply all the patches and any patches that occur on ghc-head branch from now on. This allows us to build master with 7.8.3 - - - - - b44b3871 by Mateusz Kowalczyk at 2014-08-15T02:47:40+01:00 Fix haskell/haddock#313 by doing some list munging. I get rid of the Monoid instance because we weren't satisfying the laws. Convenience of having <> didn't outweigh the shock-factor of having it behave badly. - - - - - e1a62cde by Mateusz Kowalczyk at 2014-08-15T02:52:56+01:00 Stop testing haskell/haddock#188. Because the change is in GHC 7.9 and we now work against 7.8.3, this test no longer makes sense. We revert it until 7.10 becomes the standard version. If anything, there should be a test for this in GHC itself. - - - - - 54e8286d by Mateusz Kowalczyk at 2014-08-15T05:31:57+01:00 Add haskell/haddock#313 to CHANGES - - - - - 9df7ad5d by Simon Hengel at 2014-08-20T11:25:32+08:00 Fix warning - - - - - ee2574d6 by Simon Hengel at 2014-08-20T12:07:01+08:00 Fix travis builds - - - - - 384cf2e6 by Simon Hengel at 2014-08-20T12:14:31+08:00 Require GHC 7.8.3 - - - - - d4779863 by Simon Hengel at 2014-08-22T12:14:16+08:00 Move Haddock API to a separate package - - - - - 80f3e0e1 by Simon Hengel at 2014-08-22T14:57:38+08:00 Bump version to 2.15.0 and add version constraints - - - - - 309a94ce by Simon Hengel at 2014-08-22T15:18:06+08:00 Add deprecated compatibility module - - - - - 4d1e4e3f by Luite Stegeman at 2014-08-22T20:46:45+02:00 export things to allow customizing how the Ghc session is run - - - - - 47884591 by Luite Stegeman at 2014-08-22T20:46:51+02:00 ghc 7.8.2 compatibility - - - - - 5ea94e2c by Luite Stegeman at 2014-08-22T22:08:58+02:00 install dependencies for haddock-api on travis - - - - - 9fb845b2 by Mateusz Kowalczyk at 2014-08-23T10:09:34+01:00 Move sources under haddock-api/src - - - - - 85817dc4 by Mateusz Kowalczyk at 2014-08-23T10:10:48+01:00 Remove compat stuff - - - - - 151c6169 by Niklas Haas at 2014-08-24T08:14:10+02:00 Fix extra whitespace on signatures and update all test cases This was long overdue, now running ./accept.lhs on a clean test from master will not generate a bunch of changes. - - - - - d320e0d2 by Niklas Haas at 2014-08-24T08:14:35+02:00 Omit unnecessary foralls and fix haskell/haddock#315 This also fixes haskell/haddock#86. - - - - - bdafe108 by Mateusz Kowalczyk at 2014-08-24T15:06:46+01:00 Update CHANGES - - - - - fafa6d6e by Mateusz Kowalczyk at 2014-08-24T15:14:23+01:00 Delete few unused/irrelevant/badly-place files. - - - - - 3634923d by Duncan Coutts at 2014-08-27T13:49:31+01:00 Changes due to ghc api changes in package representation Also fix a bug with finding the package name and version given a module. This had become wrong due to the package key changes (it was very hacky in the first place). We now look up the package key in the package db to get the package info properly. - - - - - 539a7e70 by Herbert Valerio Riedel at 2014-08-31T11:36:32+02:00 Import Data.Word w/o import-list This is needed to keep the compilation warning free (and thus pass GHC's ./validate) regardless of whether Word is re-exported from Prelude or not See https://ghc.haskell.org/trac/ghc/ticket/9531 for more details - - - - - 9e3a0e5b by Mateusz Kowalczyk at 2014-08-31T12:54:43+01:00 Bump version in doc - - - - - 4a177525 by Mateusz Kowalczyk at 2014-08-31T13:01:23+01:00 Bump haddock-library version - - - - - f99c1384 by Mateusz Kowalczyk at 2014-08-31T13:05:25+01:00 Remove references to deleted files - - - - - 5e51a247 by Mateusz Kowalczyk at 2014-08-31T14:18:44+01:00 Make the doc parser not complain - - - - - 2cedb49a by Mateusz Kowalczyk at 2014-09-03T03:33:15+01:00 CONTRIBUTING file for issues - - - - - 88027143 by Mateusz Kowalczyk at 2014-09-04T00:46:59+01:00 Mention --print-missing-docs - - - - - 42f6754f by Alan Zimmerman at 2014-09-05T18:13:24-05:00 Follow changes to TypeAnnot in GHC HEAD Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - e712719e by Austin Seipp at 2014-09-09T01:03:27-05:00 Fix import of 'empty' due to AMP. Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 71c29755 by Herbert Valerio Riedel at 2014-09-09T17:35:20+02:00 Bump `base` constraint for AMP - - - - - 0bf9f3ed by Mateusz Kowalczyk at 2014-09-12T19:18:32+01:00 Delete stale ANNOUNCE - - - - - cac89ee6 by Krzysztof Gogolewski at 2014-09-14T17:17:09+02:00 Followup changes to addition of -fwarn-context-quantification (GHC Trac haskell/haddock#4426) - - - - - 4d683426 by Edward Z. Yang at 2014-09-18T13:38:11-07:00 Properly render package ID (not package key) in index, fixes haskell/haddock#329. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 80697fd5 by Herbert Valerio Riedel at 2014-09-19T00:07:52+02:00 Disambiguate string-literals GHC fails type-inference with `OverloadedStrings` + `Data.Foldable.elem` otherwise. - - - - - c015eb70 by Herbert Valerio Riedel at 2014-09-19T00:10:36+02:00 Revert "Followup changes to addition of -fwarn-context-quantification" This reverts commit 4023817d7c0e46db012ba2eea28022626841ca9b temporarily as the respective feature hasn't landed in GHC HEAD yet, but this commit blocks later commits from being referenced in GHC HEAD. - - - - - 38ded784 by Edward Z. Yang at 2014-09-18T15:32:15-07:00 Revert "Revert "Followup changes to addition of -fwarn-context-quantification"" This reverts commit db14fd8ab4fab43694139bc203808b814eafb2dc. It's in HEAD now. - - - - - f55d59c9 by Herbert Valerio Riedel at 2014-09-26T19:18:28+02:00 Revert "Fix import of 'empty' due to AMP." This reverts commit 0cc5bc85e9fca92ab712b68a2ba2c0dd9d3d79f4 since it turns out we don't need to re-export `empty` from Control.Monad after all. - - - - - 467050f1 by David Feuer at 2014-10-09T20:07:36-04:00 Fix improper lazy IO use Make `getPrologue` force `parseParas dflags str` before returning. Without this, it will attempt to read from the file after it is closed, with unspecified and generally bad results. - - - - - cc47b699 by Edward Z. Yang at 2014-10-09T21:38:19-07:00 Fix use-after-close lazy IO bug Make `getPrologue` force `parseParas dflags str` before returning. Without this, it will attempt to read from the file after it is closed, with unspecified and generally bad results. Signed-off-by: David Feuer <David.Feuer at gmail.com> Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 87babcbe by Austin Seipp at 2014-10-20T20:05:27-05:00 Add an .arcconfig file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - ab259516 by Austin Seipp at 2014-10-20T20:07:01-05:00 Add .arclint file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - b918093c by Mateusz Kowalczyk at 2014-10-29T03:59:39+00:00 Experimental support for collapsable headers Closes haskell/haddock#335 - - - - - 849db129 by Mateusz Kowalczyk at 2014-10-29T10:07:26+01:00 Experimental support for collapsable headers (cherry picked from commit e2ed3b9d8dfab09f1b1861dbc8e74f08e137ebcc) - - - - - a4cc4789 by Herbert Valerio Riedel at 2014-10-31T11:08:26+01:00 Collapse user-defined section by default (re haskell/haddock#335) - - - - - 9da1b33e by Yuras Shumovich at 2014-10-31T16:11:04-05:00 reflect ForeignType constructore removal Reviewers: austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D358 - - - - - c625aefc by Austin Seipp at 2014-10-31T19:34:10-05:00 Remove overlapping pattern match Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - c7738e5e by Simon Hengel at 2014-11-02T07:25:30+08:00 Remove -fobject-code from .ghci (this slows down reloads on modifications) - - - - - d4a86e95 by Simon Hengel at 2014-11-03T09:26:11+08:00 Get rid of StandaloneDeriving - - - - - a974e311 by Simon Hengel at 2014-11-03T09:26:11+08:00 Derive more instances - - - - - 8aa0c4d7 by Simon Hengel at 2014-11-03T09:27:08+08:00 Remove unused language extensions - - - - - 3052d46a by Simon Hengel at 2014-11-03T09:30:46+08:00 Minor refactoring - - - - - 4281d3cb by Simon Hengel at 2014-11-03T09:30:46+08:00 parser: Try to parse definition lists right before text paragraphs - - - - - 8ba12bf9 by Simon Hengel at 2014-11-03T09:34:19+08:00 Add support for markdown links (closes haskell/haddock#336) - - - - - a2f8d747 by Simon Hengel at 2014-11-03T09:34:19+08:00 Allow markdown links at the beginning of a paragraph - - - - - 53b11207 by Simon Hengel at 2014-11-03T09:34:20+08:00 Update documentation - - - - - 652267c6 by Simon Hengel at 2014-11-03T09:34:20+08:00 Add support for markdown images - - - - - 9d667502 by Simon Hengel at 2014-11-03T09:34:20+08:00 Allow an optional colon after the closing bracket of definition lists This is to disambiguate them from markdown links and will be require with a future release. - - - - - 8167fc32 by Mateusz Kowalczyk at 2014-11-04T01:16:51+00:00 whitespace only - - - - - 3da62981 by Mateusz Kowalczyk at 2014-11-04T01:17:31+00:00 Fix re-exports of built-in type families Fixes haskell/haddock#310 - - - - - edc76b34 by Mateusz Kowalczyk at 2014-11-04T02:54:28+00:00 Turn some uses of error into recoverable warnings This should at the very least not abort when something weird happens. It does feel like we should have a type that carries these errors until the end however as the user might not see them unless they are printed at the end. - - - - - 0a137400 by Mateusz Kowalczyk at 2014-11-04T04:09:44+00:00 Fix warnings - - - - - d068fc21 by Mateusz Kowalczyk at 2014-11-04T21:04:07+00:00 Fix parsing of identifiers written in infix way - - - - - 1a9f2f3d by Simon Hengel at 2014-11-08T11:32:42+08:00 Minor code simplification - - - - - 6475e9b1 by Simon Hengel at 2014-11-08T17:28:33+08:00 newtype-wrap parser monad - - - - - dc1ea105 by Herbert Valerio Riedel at 2014-11-15T11:55:43+01:00 Make compatible with `deepseq-1.4.0.0` ...by not relying on the default method implementation of `rnf` - - - - - fbb1aca4 by Simon Hengel at 2014-11-16T08:51:38+08:00 State intention rather than implementation details in Haddock comment - - - - - 97851ab2 by Simon Hengel at 2014-11-16T10:20:19+08:00 (wip) Add support for @since (closes haskell/haddock#26) - - - - - 34bcd18e by Gergő Érdi at 2014-11-20T22:35:38+08:00 Update Haddock to new pattern synonym type signature syntax - - - - - 304b7dc3 by Jan Stolarek at 2014-11-20T17:48:43+01:00 Follow changes from haskell/haddock#9812 - - - - - 920f9b03 by Richard Eisenberg at 2014-11-20T16:52:50-05:00 Changes to reflect refactoring in GHC as part of haskell/haddock#7484 - - - - - 0bfe4e78 by Alan Zimmerman at 2014-11-21T11:23:09-06:00 Follow API changes in D426 Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 356ed45a by Thomas Winant at 2014-11-28T16:11:22-06:00 Support for PartialTypeSignatures - - - - - 5dc8f3b1 by Gergő Érdi at 2014-11-29T15:39:09+08:00 For pattern synonyms, render "pattern" as a keyword - - - - - fe704480 by Mateusz Kowalczyk at 2014-12-09T03:38:32+00:00 List new module in cabal file - - - - - b9ad5a29 by Mateusz Kowalczyk at 2014-12-10T00:58:24+00:00 Allow the parser to spit out meta-info Currently we only use it only for ‘since’ annotations but with these patches it should be fairly simple to add new attributes if we wish to. Closes haskell/haddock#26. It seems to work fine but due to 7.10 rush I don't have the chance to do more exhaustive testing right now. The way the meta is output (emphasis at the end of the whole comment) is fairly arbitrary and subject to bikeshedding. Note that this makes test for Bug310 fail due to interface version bump: it can't find the docs for base with this interface version so it fails. There is not much we can do to help this because it tests for ’built-in’ identifier, not something we can provide ourselves. - - - - - 765af0e3 by Mateusz Kowalczyk at 2014-12-10T01:17:19+00:00 Update doctest parts of comments - - - - - 8670272b by jpmoresmau at 2014-12-10T01:35:31+00:00 header could contain several lines Closes haskell/haddock#348 - - - - - 4f9ae4f3 by Mateusz Kowalczyk at 2014-12-12T06:22:31+00:00 Revert "Merge branch 'reverts'" This reverts commit 5c93cc347773c7634321edd5f808d5b55b46301f, reversing changes made to 5b81a9e53894d2ae591ca0c6c96199632d39eb06. Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - e974ac94 by Duncan Coutts at 2014-12-12T06:26:11+00:00 Changes due to ghc api changes in package representation Also fix a bug with finding the package name and version given a module. This had become wrong due to the package key changes (it was very hacky in the first place). We now look up the package key in the package db to get the package info properly. Conflicts: haddock-api/src/Haddock.hs - - - - - 2f3a2365 by Herbert Valerio Riedel at 2014-12-12T06:26:51+00:00 Import Data.Word w/o import-list This is needed to keep the compilation warning free (and thus pass GHC's ./validate) regardless of whether Word is re-exported from Prelude or not See https://ghc.haskell.org/trac/ghc/ticket/9531 for more details - - - - - 1dbd6390 by Alan Zimmerman at 2014-12-12T06:32:07+00:00 Follow changes to TypeAnnot in GHC HEAD Signed-off-by: Austin Seipp <aseipp at pobox.com> Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - bb6ff1f4 by Mateusz Kowalczyk at 2014-12-12T06:35:07+00:00 Bump ‘base’ constraint Follows the similar commit made on ghc-head branch - - - - - 466fe4ab by Krzysztof Gogolewski at 2014-12-12T06:37:42+00:00 Followup changes to addition of -fwarn-context-quantification (GHC Trac haskell/haddock#4426) - - - - - 97e080c9 by Edward Z. Yang at 2014-12-12T06:39:35+00:00 Properly render package ID (not package key) in index, fixes haskell/haddock#329. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> Conflicts: haddock-api/src/Haddock/ModuleTree.hs - - - - - 20b2af56 by Herbert Valerio Riedel at 2014-12-12T06:42:50+00:00 Disambiguate string-literals GHC fails type-inference with `OverloadedStrings` + `Data.Foldable.elem` otherwise. Conflicts: haddock-library/src/Documentation/Haddock/Parser.hs - - - - - b3ad269d by Austin Seipp at 2014-12-12T06:44:14+00:00 Add an .arcconfig file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - 072df0dd by Austin Seipp at 2014-12-12T06:45:01+00:00 Add .arclint file. Signed-off-by: Austin Seipp <austin at well-typed.com> - - - - - dbb9294a by Herbert Valerio Riedel at 2014-12-12T06:46:17+00:00 Collapse user-defined section by default (re haskell/haddock#335) Conflicts: haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs - - - - - f23ab545 by Yuras Shumovich at 2014-12-12T06:46:41+00:00 reflect ForeignType constructore removal Reviewers: austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D358 - - - - - 753a4b67 by Austin Seipp at 2014-12-12T06:46:51+00:00 Remove overlapping pattern match Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 8954e8f5 by Herbert Valerio Riedel at 2014-12-12T06:50:53+00:00 Make compatible with `deepseq-1.4.0.0` ...by not relying on the default method implementation of `rnf` - - - - - d2b06d61 by Gergő Érdi at 2014-12-12T07:07:30+00:00 Update Haddock to new pattern synonym type signature syntax Conflicts: haddock-api/src/Haddock/Backends/Xhtml/Decl.hs haddock-api/src/Haddock/Convert.hs - - - - - 1ff02426 by Jan Stolarek at 2014-12-12T07:13:24+00:00 Follow changes from haskell/haddock#9812 Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - 06ad7600 by Richard Eisenberg at 2014-12-12T07:13:43+00:00 Changes to reflect refactoring in GHC as part of haskell/haddock#7484 - - - - - 8fd2aa8b by Alan Zimmerman at 2014-12-12T07:22:25+00:00 Follow API changes in D426 Signed-off-by: Austin Seipp <aseipp at pobox.com> Conflicts: haddock-api/src/Haddock/Backends/LaTeX.hs haddock-api/src/Haddock/Backends/Xhtml/Decl.hs haddock-api/src/Haddock/Convert.hs - - - - - 95c3db98 by Thomas Winant at 2014-12-12T07:35:49+00:00 Support for PartialTypeSignatures Conflicts: haddock-api/src/Haddock/Backends/Xhtml/Decl.hs haddock-api/src/Haddock/Convert.hs haddock-api/src/Haddock/Interface/Create.hs - - - - - 45494428 by Gergő Érdi at 2014-12-12T07:36:18+00:00 For pattern synonyms, render "pattern" as a keyword - - - - - a237e3eb by Mateusz Kowalczyk at 2014-12-12T12:27:13+00:00 Various fixups and bumps for next release - - - - - 22918bcd by Herbert Valerio Riedel at 2014-12-14T10:11:47+01:00 Remove redundant wild-card pattern match (this would otherwise cause a build-failure with `-Werror`) - - - - - 1d6ce947 by Herbert Valerio Riedel at 2014-12-14T10:17:06+01:00 Treat GHC 7.10 the same as GHC 7.9 ...since the current GHC 7.9 is going to become GHC 7.10 real-soon-now anyway - - - - - f434ea89 by Herbert Valerio Riedel at 2014-12-14T18:26:50+01:00 Fixup ghc.mk (follow-up to 1739375eb23342) This makes the GHC build-system aware of the data-files to be copied into the bindist (as haddock.cabal doesn't list those anymore) - - - - - 6fb839eb by Mateusz Kowalczyk at 2014-12-17T09:28:59+00:00 Only keep one Version instead of blindly appending - - - - - 40645489 by Mateusz Kowalczyk at 2014-12-18T07:09:44+00:00 Fix dependency version - - - - - 8b3b927b by Mateusz Kowalczyk at 2014-12-18T07:14:23+00:00 Print missing docs by default Adds --no-print-missing-docs - - - - - 59666694 by Mateusz Kowalczyk at 2014-12-18T07:21:37+00:00 update changelog - - - - - aa6d168e by Mateusz Kowalczyk at 2014-12-18T07:30:58+00:00 Update docs for @since - - - - - 2d7043ee by Luite Stegeman at 2014-12-19T18:29:35-06:00 hide projectVersion from DynFlags since it clashes with Haddock.Version.projectVersion - - - - - aaa70fc0 by Luite Stegeman at 2014-12-22T15:58:43+01:00 Add missing import for standalone haddock-api package - - - - - 9ce01269 by Herbert Valerio Riedel at 2014-12-22T17:48:45+01:00 Reset ghc-head with master's tree (this is an overwriting git merge of master into ghc-head) - - - - - fcd6fec1 by Herbert Valerio Riedel at 2014-12-22T17:51:52+01:00 Bump versions for ghc-7.11 - - - - - 525ec900 by Mateusz Kowalczyk at 2014-12-23T13:36:24+00:00 travis-ci: test with HEAD - - - - - cbf494b5 by Simon Peyton Jones at 2014-12-23T15:22:56+00:00 Eliminate instanceHead' in favour of GHC's instanceSig This is made possible by the elimination of "silent superclass parameters" in GHC - - - - - 50e01c99 by Mateusz Kowalczyk at 2014-12-29T15:28:47+00:00 Make travis use 7.10.x - - - - - 475e60b0 by Njagi Mwaniki at 2014-12-29T15:30:44+00:00 Turn the README into GitHub Markdown format. Closes haskell/haddock#354 - - - - - 8cacf48e by Luite Stegeman at 2015-01-05T16:25:37+01:00 bump haddock-api ghc dependency to allow release candidate and first release - - - - - 6ed6cf1f by Simon Peyton Jones at 2015-01-06T16:37:47+00:00 Remove redundant constraints from haddock, discovered by -fwarn-redundant-constraints - - - - - 8b484f33 by Simon Peyton Jones at 2015-01-08T15:50:22+00:00 Track naming change in DataCon - - - - - 23c5c0b5 by Alan Zimmerman at 2015-01-16T10:15:11-06:00 Follow API changes in D538 Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - e7a5532c by JP Moresmau at 2015-01-22T17:19:03+00:00 Ignore warnings, install Cabal 1.22 - - - - - 86942c84 by jpmoresmau at 2015-01-22T17:19:04+00:00 solve dataDir ambiguity - - - - - 5ceb743e by jpmoresmau at 2015-01-22T19:17:32+00:00 support GHC 7.10: no Safe-Inferred, Foldable instance - - - - - 6a3b3fb5 by Mateusz Kowalczyk at 2015-01-22T19:32:10+00:00 Update test files Test: a correct behaviour for fields comma-separating values. I'm surprised we had no bug open for this. Maybe it affects how haskell/haddock#301 renders now but I doubt. Operators: Seems GHC is giving us a new order for operators, something must have changed on their side again. cc @haasn , this makes the fixity to the side not match the order on the LHS which is a bit unpleasant. Maybe the fixity can be made to match the GHC order? Bug335: We expand examples by default now. Bug310: Now inferred safe. - - - - - 708f8b2f by jpmoresmau at 2015-01-22T19:36:59+00:00 Links to source location of class instance definitions - - - - - 5cf8a6da by Vincent Berthoux at 2015-01-22T19:59:58+00:00 Filter '\r' from comments due to Windows problems. On Windows this was causing newline to be rendered twice in code blocks. Closes haskell/haddock#359, fixes haskell/haddock#356. - - - - - 1749e6f0 by Mateusz Kowalczyk at 2015-01-22T20:31:27+00:00 Changelog only - - - - - c8145f90 by Mateusz Kowalczyk at 2015-01-22T23:34:05+00:00 --package-name and --package-version flags Used for --hoogle amongst other things. Now we need to teach cabal to use it. The situation is still a bit sub-par because if the flags aren't passed in, the crash will occur. Closes haskell/haddock#353. - - - - - 14248254 by Mateusz Kowalczyk at 2015-01-22T23:43:18+00:00 Sort out some module import warnings - - - - - d8a38989 by Simon Peyton Jones at 2015-01-23T07:10:16-06:00 Track naming change in DataCon (cherry picked from commit 04cf63d0195837ed52075ed7d2676e71831e8a0b) - - - - - d3ac6ae4 by Alan Zimmerman at 2015-01-23T07:17:19-06:00 Follow API changes in D538 Signed-off-by: Austin Seipp <aseipp at pobox.com> (cherry picked from commit d61bbc75890e4eb0ad508b9c2a27b91f691213e6) - - - - - 4c1ffeb0 by Simon Peyton Jones at 2015-02-10T12:10:33+00:00 Track changes in HsSyn for quasi-quotes - - - - - 775d20f7 by Mateusz Kowalczyk at 2015-03-15T08:11:48+01:00 --package-name and --package-version flags Used for --hoogle amongst other things. Now we need to teach cabal to use it. The situation is still a bit sub-par because if the flags aren't passed in, the crash will occur. Closes haskell/haddock#353. (cherry picked from commit 8e06728afb0784128ab2df0be7a5d7a191d30ff4) - - - - - f9245e72 by Phil Ruffwind at 2015-03-16T04:32:01-04:00 Prevent Synopsis from using up too much horizontal space When long type signatures occur in the Synopsis, the element is stretched beyond the width of the window. Scrollbars don't appear, so it's impossible to read anything when this happens. - - - - - cd8fa415 by Mateusz Kowalczyk at 2015-03-17T21:59:39+00:00 Update changelog Closes haskell/haddock#151 due to 71170fc77962f10d7d001e3b8bc8b92bfeda99bc - - - - - b5248b47 by Ben Gamari at 2015-03-25T17:12:17+00:00 Make the error encountered when a package can't be found more user-friendly Closes haskell/haddock#369 - - - - - b756b772 by Mateusz Kowalczyk at 2015-03-26T16:31:40+00:00 Remove now redundant imports - - - - - 5ea5e8dd by Mateusz Kowalczyk at 2015-03-26T16:45:52+00:00 Update test to account for \r filtering - - - - - 6539bfb3 by Mateusz Kowalczyk at 2015-03-27T00:20:09+00:00 Test for anchor defaulting I delete the old tests because it turns out that: * test runner would never put them in scope of each other even with imports so just one would suffice * test runner actually needed some hacking to keep links so in the end we would end up with no anchors making them useless - - - - - 1a01d950 by Mateusz Kowalczyk at 2015-03-27T00:20:09+00:00 Clearly default to variables in out of scope case - - - - - 7943abe8 by Mateusz Kowalczyk at 2015-03-27T01:14:11+00:00 Fix Hoogle display of constructors Fixes haskell/haddock#361 - - - - - 6d6e587e by Mateusz Kowalczyk at 2015-03-27T01:45:18+00:00 Fully qualify names in Hoogle instances output Closes haskell/haddock#263 - - - - - 52dac365 by Mateusz Kowalczyk at 2015-03-27T01:55:01+00:00 Update changelog - - - - - ca5af9a8 by Mateusz Kowalczyk at 2015-03-27T02:43:55+00:00 Output method documentation in Hoogle backend One thing of note is that we no longer preserve grouping of methods and print each method on its own line. We could preserve it if no documentation is present for any methods in the group if someone asks for it though. Fixes haskell/haddock#259 - - - - - a33f0c10 by Mateusz Kowalczyk at 2015-03-27T03:04:21+00:00 Don't print instance safety information in Hoogle Fixes haskell/haddock#168 - - - - - df6c935a by Mateusz Kowalczyk at 2015-03-28T00:11:47+00:00 Post-release version bumps and changelog - - - - - dde8f7c0 by Mateusz Kowalczyk at 2015-03-28T20:39:10+00:00 Loosen bounds on haddock-* - - - - - de93bf89 by Mateusz Kowalczyk at 2015-03-28T20:39:10+00:00 Expand response files in arguments Closes haskell/haddock#285 - - - - - 1f0b0856 by Zejun Wu at 2015-04-26T16:35:35-07:00 Do not insert anchor for section headings in contents box - - - - - 860439d7 by Simon Peyton Jones at 2015-05-01T09:36:47+01:00 Track change in API of TyCon - - - - - a32f3e5f by Adam Gundry at 2015-05-04T15:32:59+01:00 Track API changes to support empty closed type familes - - - - - 77e98bee by Ben Gamari at 2015-05-06T20:17:08+01:00 Ignore doc/haddock.{ps,pdf} - - - - - 663d0204 by Murray Campbell at 2015-05-11T04:47:37-05:00 Change ModuleTree Node to carry PackageKey and SourcePackageId to resolve haskell/haddock#385 Signed-off-by: Austin Seipp <aseipp at pobox.com> - - - - - 8bb0dcf5 by Murray Campbell at 2015-05-11T06:35:06-05:00 Change ModuleTree Node to carry PackageKey and SourcePackageId to resolve haskell/haddock#385 Signed-off-by: Austin Seipp <aseipp at pobox.com> (cherry picked from commit 2380f07c430c525b205ce2eae6dab23c8388d899) - - - - - bad900ea by Adam Bergmark at 2015-05-11T15:29:39+01:00 haddock-library: require GHC >= 7.4 `Data.Monoid.<>` was added in base-4.5/GHC-7.4 Closes haskell/haddock#394 Signed-off-by: Mateusz Kowalczyk <fuuzetsu at fuuzetsu.co.uk> - - - - - daceff85 by Simon Peyton Jones at 2015-05-13T12:04:21+01:00 Track the new location of setRdrNameSpace - - - - - 1937d1c4 by Alan Zimmerman at 2015-05-25T21:27:15+02:00 ApiAnnotations : strings in warnings do not return SourceText The strings used in a WARNING pragma are captured via strings :: { Located ([AddAnn],[Located FastString]) } : STRING { sL1 $1 ([],[L (gl $1) (getSTRING $1)]) } .. The STRING token has a method getSTRINGs that returns the original source text for a string. A warning of the form {-# WARNING Logic , mkSolver , mkSimpleSolver , mkSolverForLogic , solverSetParams , solverPush , solverPop , solverReset , solverGetNumScopes , solverAssertCnstr , solverAssertAndTrack , solverCheck , solverCheckAndGetModel , solverGetReasonUnknown "New Z3 API support is still incomplete and fragile: \ \you may experience segmentation faults!" #-} returns the concatenated warning string rather than the original source. - - - - - ee0fb6c2 by Łukasz Hanuszczak at 2015-05-27T11:51:31+02:00 Create simple method for indentation parsing. - - - - - 7d6fcad5 by Łukasz Hanuszczak at 2015-05-27T21:36:13+02:00 Make nested lists count indentation according to first item. - - - - - d6819398 by Łukasz Hanuszczak at 2015-05-27T22:46:13+02:00 Add simple test case for arbitrary-depth list nesting. - - - - - 2929c54d by Łukasz Hanuszczak at 2015-06-03T02:11:31+02:00 Add arbitrary-indent spec test for parser. - - - - - 9a0a9bb0 by Mateusz Kowalczyk at 2015-06-03T05:25:29+01:00 Update docs with info on new list nesting rule Fixes haskell/haddock#278 through commits from PR haskell/haddock#401 - - - - - 12efc92c by Mateusz Kowalczyk at 2015-06-03T05:29:26+01:00 Update some meta data at the top of the docs - - - - - 765ee49f by Bartosz Nitka at 2015-06-07T08:40:59-07:00 Add some Hacking docs for getting started - - - - - 19aaf851 by Bartosz Nitka at 2015-06-07T08:44:30-07:00 Fix markdown - - - - - 2a90cb70 by Mateusz Kowalczyk at 2015-06-08T15:08:36+01:00 Refine hacking instructions slightly - - - - - 0894da6e by Thomas Winant at 2015-06-08T23:47:28-05:00 Update after wild card renaming refactoring in D613 Summary: * Move `Post*` type instances to `Haddock.Types` as other modules than `Haddock.Interface.Rename` will rely on these type instances. * Update after wild card renaming refactoring in D613. Reviewers: simonpj, austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D954 GHC Trac Issues: haskell/haddock#10098 - - - - - 10a9bb76 by Emanuel Borsboom at 2015-06-12T02:46:23+01:00 Build executable with '-threaded' (fixes haskell/haddock#399) - - - - - 7696b94f by Mateusz Kowalczyk at 2015-06-12T02:59:19+01:00 Update changelog for -threaded Closes haskell/haddock#400 - - - - - d3c118ec by Bartosz Nitka at 2015-06-12T03:00:58+01:00 Fix haddock: internal error: spliceURL UnhelpfulSpan (#207) Inferred type signatures don't have SrcSpans, so let's use the one from the declaration. I've tested this manually on the test-case from haskell/haddock#207, but I got stuck at trying to run the test-suite. - - - - - b67e843b by Mateusz Kowalczyk at 2015-06-12T03:01:50+01:00 Changelog for haskell/haddock#207 Fixes haskell/haddock#207, closes haskell/haddock#402 - - - - - 841d785e by jpmoresmau at 2015-06-12T16:03:16+01:00 Attach to instance location the name that has the same location file Fixes haskell/haddock#383 - - - - - 98791cae by Mateusz Kowalczyk at 2015-06-12T16:08:27+01:00 Update changelog Closes haskell/haddock#398 - - - - - 7c0b5a87 by Phil Ruffwind at 2015-06-12T13:07:25-04:00 Fix alignment of Source links in instance table in Firefox Due to a Firefox bug [1], a combination of 'whitespace: nowrap' on the parent element with 'float: right' on the inner element can cause the floated element to be displaced downwards for no apparent reason. To work around this, the left side is wrapped in its own <span> and set to 'float: left'. As a precautionary measure to prevent the parent element from collapsing entirely, we also add the classic "clearfix" hack. The latter is not strictly needed but it helps prevent bugs if the layout is altered again in the future. Fixes haskell/haddock#384. Remark: line 159 of src/Haddock/Backends/Xhtml/Layout.hs was indented to prevent confusion over the operator precedence of (<+>) vs (<<). [1]: https://bugzilla.mozilla.org/show_bug.cgi?id=488725 - - - - - cfe86e73 by Mateusz Kowalczyk at 2015-06-14T10:49:01+01:00 Update tests for the CSS changes - - - - - 2d4983c1 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create scaffolding for Haskell source parser module. - - - - - 29548785 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement function for tagging parsed chunks with source spans. - - - - - 6a5e4074 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement simple string chunking based on HsColour library. - - - - - 6e52291f by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create basic token classification method. - - - - - da971a27 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Adapt source span tagging to work with current whitespace handling. - - - - - 4feb5a22 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add record accessors to exports of hyperlinker parser module. - - - - - a8cc4e39 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Make parser module export all types and associated accessors. - - - - - fb8d468f by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create simple HTML renderer for parsed source file. - - - - - 80747822 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for specifying the CSS file path in HTML source renderer. - - - - - 994dc1f5 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix identifier recognition in Haskell source parser. - - - - - b1bd0430 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix comment recognition in Haskell source parser. - - - - - 11db85ae by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for recognizing compiler pragmas in source parser. - - - - - 736c7bd3 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create scaffolding of module for associating tokens with AST names. - - - - - 7e149bc2 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement utility method for extracting variable identifiers from AST. - - - - - 32eb640a by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Create simple mechanism for associating tokens with AST names. - - - - - d4eba5bc by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add dummy support for hyperlinking named tokens. - - - - - 2b76141f by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix span matcher bug causing wrong items being hyperlinked. - - - - - 2d48002e by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Constrain elements exported by hyperlinker modules. - - - - - 9715eec6 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for type token recognition. - - - - - 8fa401cb by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Add support for binding token recognition. - - - - - d062400b by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement go-to-definition mechanism for local bindings. - - - - - f4dc229b by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Implement module export- and import-list item hyperlinking. - - - - - c9a46d58 by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix span matching to allow parenthesized operators hyperlinking. - - - - - 03aad95a by Łukasz Hanuszczak at 2015-06-30T22:37:48+02:00 Fix weird hyperlinking of parenthesized operators. - - - - - b4694a7d by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for type declaration anchors. - - - - - 7358d2d2 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for top-level function declaration anchors. - - - - - dfc24b24 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix external anchors to contain HTML file extension. - - - - - a045926c by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Refactor the way AST names are handled within detailed tokens. - - - - - c76049b4 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Implement hyperlinking of imported module names. - - - - - 2d2a1572 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix parsing of single line comments with broken up newlines. - - - - - 11afdcf2 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix bug with improper newline handling. - - - - - 8137f104 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix issues with escaped newlines in comments. - - - - - 34759b19 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for parsing C preprocessor macros. - - - - - 09f0f847 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add some documentation for parser module of source hyperlinker. - - - - - 709a8389 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add some documentation for AST module of source hyperlinker. - - - - - 4df5c227 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add command line option for generating hyperlinked source. - - - - - 7a755ea2 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Extend module interface with rich source token stream field. - - - - - 494f4ab1 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Implement source tokenization during interface creation process. - - - - - 5f21c953 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Create hyperlinker module and plug it into the Haddock pipeline. - - - - - 0cc8a216 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for providing custom CSS files for hyperlinked source. - - - - - a32bbdc1 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add support for fancy highlighting upon hovering over identifier. - - - - - d16d642a by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make source hyperlinker generate output in apropriate directory. - - - - - ae12953d by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Create module with hyperlinker utility functions. - - - - - 6d4952c5 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make external hyperlinks point to locations specified by source URLs. - - - - - 8417555d by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Rewrite source generation to fixed links and directory structure. - - - - - ce9cec01 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Add basic support for cross-package hyperlink generation. - - - - - 7eaf025c by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Disable generating hyperlinks for module references. - - - - - a50bf92e by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make Haddock generate source for all interfaces (also hidden ones). - - - - - f5ae2838 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Prevent source parser from throwing exception when lexing fails. - - - - - db9ffbe0 by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Implement workaround for Chrome highlighting issues. - - - - - 0b6b453b by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make hyperlinker generate correct anchors for data constructors. - - - - - c86d38bc by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Make hyperlinker generate anchors for record field declarations. - - - - - 063abf7f by Łukasz Hanuszczak at 2015-06-30T22:37:49+02:00 Fix issue with hyperlink highlight styling in Chrome browser. - - - - - 880fc611 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add support for hyperlinking constructor names in patters. - - - - - c9e89b95 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add support for hyperlinking field names in record patterns. - - - - - 17a11996 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add support for hyperlinking field names in record expressions. - - - - - 0eef932d by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Make hyperlinker respect pretty-printer flag and add documentation. - - - - - f87c1776 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Unexpose hyperlinker modules in Cabal configuration. - - - - - 4c9e2b06 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Setup HSpec framework for Haddock API package. - - - - - 4b20cb30 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add basic tests related to comment parsing. - - - - - 6842e919 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add tests related to parsing basic language constructs. - - - - - 87bffb35 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add simple tests for do-notation parsing. - - - - - e7af1841 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add very simple QuickCheck properties for source parser spec. - - - - - c84efcf1 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Create simple test runner for hyperlinker tests. - - - - - 76b90447 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for basic identifier hyperlinking. - - - - - 0fbf4df6 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for operator hyperlinking. - - - - - 731aa039 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for constructor hyperlinking. - - - - - 995a78a2 by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for record expressions and patterns hyperlinking. - - - - - 3566875a by Łukasz Hanuszczak at 2015-06-30T22:37:50+02:00 Add test case for literal syntax highlighting. - - - - - 68469a35 by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Add hyperlinker test runner to .cabal and .gitignore files. - - - - - aa946c93 by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Adapt hyperlinker test runner to have the same interface as HTML one. - - - - - ce34da16 by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Fix hyperlinker test runner file paths and add pretty-printing option. - - - - - 0d7dd65e by Łukasz Hanuszczak at 2015-06-30T22:38:33+02:00 Add reference files for hyperlinker test cases. - - - - - efa4a1e0 by Łukasz Hanuszczak at 2015-07-01T00:47:32+02:00 Make hyperlinker test runner strip local links from generated source. - - - - - 3e96e584 by Łukasz Hanuszczak at 2015-07-01T01:14:59+02:00 Create simple script for accepting hyperlinker test case references. - - - - - 526fe610 by Łukasz Hanuszczak at 2015-07-01T01:16:41+02:00 Re-accept hyperlinker test cases with local references stripped out. - - - - - 892e2cb3 by Łukasz Hanuszczak at 2015-07-01T01:22:09+02:00 Fix bug with diffing wrong files in hyperlinker test runner. - - - - - 9ff46039 by Łukasz Hanuszczak at 2015-07-01T18:04:46+02:00 Remove unused dependencies in Haddock API spec configuration. - - - - - 47969c07 by Łukasz Hanuszczak at 2015-07-01T18:32:19+02:00 Add support for hyperlinking synonyms in patterns. - - - - - a73449e0 by Łukasz Hanuszczak at 2015-07-01T18:33:44+02:00 Create test case for hyperlinking @-patterns. - - - - - c2077ed8 by Łukasz Hanuszczak at 2015-07-01T19:06:04+02:00 Add support for hyperlinking universally quantified type variables. - - - - - 68017342 by Łukasz Hanuszczak at 2015-07-01T19:28:32+02:00 Create hyperlinker test case with quantified type variables. - - - - - 51c01a78 by Łukasz Hanuszczak at 2015-07-01T19:34:22+02:00 Add scoped type variables test for polymorphism test case. - - - - - 13181ae2 by Łukasz Hanuszczak at 2015-07-01T19:56:27+02:00 Add record wildcards test for records hyperlinking test case. - - - - - 991b81dd by Łukasz Hanuszczak at 2015-07-01T21:01:42+02:00 Document some functions in XHTML utlity module. - - - - - 98c8dfe5 by Łukasz Hanuszczak at 2015-07-01T22:25:21+02:00 Make hyperlinker render qualified names as one entity. - - - - - 75e13b9b by Łukasz Hanuszczak at 2015-07-01T22:27:38+02:00 Add qualified name test for identifiers hyperlinking test case. - - - - - de1e143f by Łukasz Hanuszczak at 2015-07-02T12:32:59+02:00 Fix crash happening when hyperlinking type family declarations. - - - - - 7a8fb175 by Łukasz Hanuszczak at 2015-07-02T12:47:03+02:00 Add support for anchoring data family constructor declarations. - - - - - 3b404e49 by Łukasz Hanuszczak at 2015-07-02T13:31:05+02:00 Improve support for hyperlinking type families. - - - - - 59eb7143 by Łukasz Hanuszczak at 2015-07-02T13:33:34+02:00 Add hyperlinker test case for checking type and type family declarations. - - - - - d1cda0c0 by Łukasz Hanuszczak at 2015-07-02T13:41:38+02:00 Fix issue with operators being recognized as preprocessor directives. - - - - - da206c9d by Łukasz Hanuszczak at 2015-07-02T17:18:12+02:00 Fix broken tests for parsing and hyperlinking hash operators. - - - - - 53750d1b by Łukasz Hanuszczak at 2015-07-02T18:53:28+02:00 Add support for anchoring signatures in type class declarations. - - - - - 1fa5bb10 by Łukasz Hanuszczak at 2015-07-02T19:04:47+02:00 Make hyperlinker generate anchors only to top-level value bindings. - - - - - a542305c by Łukasz Hanuszczak at 2015-07-02T19:05:58+02:00 Create hyperlinker test case for type classes. - - - - - b0dd4581 by Łukasz Hanuszczak at 2015-07-04T16:28:26+02:00 Update docs with information about source hyperlinking. - - - - - 9795302a by Łukasz Hanuszczak at 2015-07-04T16:52:15+02:00 Update docs on using `--read-interface` option. - - - - - 9acdc002 by Łukasz Hanuszczak at 2015-07-04T17:15:26+02:00 Remove potentially dangerous record access in hyperlinker AST module. - - - - - fb3ab7be by Łukasz Hanuszczak at 2015-07-04T17:40:10+02:00 Make Haddock generate warnings about potential misuse of hyperlinker. - - - - - a324c504 by Łukasz Hanuszczak at 2015-07-04T17:43:22+02:00 Fix incorrect specification of source style option in doc file. - - - - - 3f01a8e4 by Łukasz Hanuszczak at 2015-07-05T17:06:36+02:00 Refactor source path mapping to use modules as indices. - - - - - ac70f5b1 by Łukasz Hanuszczak at 2015-07-05T17:47:34+02:00 Fix bug where not all module interfaces were added to source mapping. - - - - - f5e57da9 by Łukasz Hanuszczak at 2015-07-06T16:39:57+02:00 Extract main hyperlinker types to separate module. - - - - - 43974905 by Łukasz Hanuszczak at 2015-07-06T16:52:13+02:00 Move source paths types to hyperlinker types module. - - - - - 3e236055 by Łukasz Hanuszczak at 2015-07-06T17:06:19+02:00 Add support for hyperlinking modules in import lists. - - - - - 58233d9f by Łukasz Hanuszczak at 2015-07-06T17:26:49+02:00 Add short documentation for hyperlinker source map type. - - - - - 14da016d by Łukasz Hanuszczak at 2015-07-06T18:07:20+02:00 Fix bug with module name being hyperlinked to `Prelude`. - - - - - 8f79db52 by Łukasz Hanuszczak at 2015-07-06T18:23:47+02:00 Fix problem with spec build in Haddock API configuration. - - - - - e7cc056c by Adam Sandberg Eriksson at 2015-07-07T23:22:21+01:00 StrictData: print correct strictness marks - - - - - e8253ca8 by Mateusz Kowalczyk at 2015-07-07T23:58:28+01:00 Update changelog - - - - - 0aba676b by Mateusz Kowalczyk at 2015-07-07T23:58:33+01:00 Relax upper bound on GHC a bit - - - - - 7a595381 by Mateusz Kowalczyk at 2015-07-07T23:58:52+01:00 Delete trailing whitespace - - - - - 50976d5e by Adam Sandberg Eriksson at 2015-07-08T15:03:04+02:00 StrictData: changes in HsBang type - - - - - 83b045fa by Mateusz Kowalczyk at 2015-07-11T14:35:18+01:00 Fix expansion icon for user-collapsible sections Closes haskell/haddock#412 - - - - - b2a3b0d1 by Mateusz Kowalczyk at 2015-07-22T22:03:21+01:00 Make some version changes after 2.16.1 release - - - - - a8294423 by Ben Gamari at 2015-07-27T13:16:07+02:00 Merge pull request haskell/haddock#422 from adamse/adamse-D1033 Merge for GHC D1033 - - - - - c0173f17 by randen at 2015-07-30T14:49:08-07:00 Break the response file by line termination rather than spaces, since spaces may be within the parameters. This simple approach avoids having the need for any quoting and/or escaping (although a newline char will not be possible in a parameter and has no escape mechanism to allow it). - - - - - 47c0ca14 by Alan Zimmerman at 2015-07-31T10:41:52+02:00 Replace (SourceText,FastString) with WithSourceText data type Phab:D907 introduced SourceText for a number of data types, by replacing FastString with (SourceText,FastString). Since this has an Outputable instance, no warnings are generated when ppr is called on it, but unexpected output is generated. See Phab:D1096 for an example of this. Replace the (SourceText,FastString) tuples with a new data type data WithSourceText = WithSourceText SourceText FastString Trac ticket: haskell/haddock#10692 - - - - - 45a9d770 by Mateusz Kowalczyk at 2015-07-31T09:47:43+01:00 Update changelog - - - - - 347a20a3 by Phil Ruffwind at 2015-08-02T23:15:26+01:00 Avoid JavaScript error during page load in non-frame mode In non-frame mode, parent.window.synopsis refers to the synopsis div rather than the nonexistent frame. Unfortunately, the script wrongly assumes that if it exists it must be a frame, leading to an error where it tries to access the nonexistent attribute 'replace' of an undefined value (synopsis.location). Closes haskell/haddock#406 - - - - - 54ebd519 by Phil Ruffwind at 2015-08-02T23:27:10+01:00 Link to the definitions to themselves Currently, the definitions already have an anchor tag that allows URLs with fragment identifiers to locate them, but it is rather inconvenient to obtain such a URL (so-called "permalink") as it would require finding the a link to the corresponding item in the Synopsis or elsewhere. This commit adds hyperlinks to the definitions themselves, allowing users to obtain links to them easily. To preserve the original aesthetics of the definitions, we alter the color of the link so as to be identical to what it was, except it now has a hover effect indicating that it is clickable. Additionally, the anchor now uses the 'id' attribute instead of the (obsolete) 'name' attribute. Closes haskell/haddock#407 - - - - - 02cc8bb7 by Phil Ruffwind at 2015-08-02T23:28:02+01:00 Fix typo in Haddock.Backends.Xhtml.Layout: divSynposis -> divSynopsis Closes haskell/haddock#408 - - - - - 2eb0a458 by Phil Ruffwind at 2015-08-02T23:30:07+01:00 Fix record field alignment when name is too long Change <dl> to <ul> and use display:table rather than floats to layout the record fields. This avoids bug haskell/haddock#301 that occurs whenever the field name gets too long. Slight aesthetic change: the entire cell of the field's source code is now shaded gray rather than just the area where text exists. Fixes haskell/haddock#301. Closes haskell/haddock#421 - - - - - 7abb3402 by Łukasz Hanuszczak at 2015-08-02T23:32:14+01:00 Add some utility definitions for generating line anchors. - - - - - e0b1d79b by Łukasz Hanuszczak at 2015-08-02T23:32:15+01:00 Make hyperlinked source renderer generate line anchors. - - - - - 24dd4c9f by Łukasz Hanuszczak at 2015-08-02T23:32:15+01:00 Re-accept test cases after adding line anchors for each of them. - - - - - 0372cfcb by Łukasz Hanuszczak at 2015-08-02T23:32:15+01:00 Override source line flags when source hyperlinker is enabled. - - - - - a81bcd07 by Mateusz Kowalczyk at 2015-08-02T23:58:25+01:00 Update tests to follow HTML changes - - - - - d2d7426f by Łukasz Hanuszczak at 2015-08-06T20:54:59+02:00 Fix quote syntax for promoted types. - - - - - 668cf029 by Łukasz Hanuszczak at 2015-08-06T21:12:00+02:00 Apply promoted type quoting to type-level consing. - - - - - 89f8e7c6 by Łukasz Hanuszczak at 2015-08-06T21:17:10+02:00 Extend advanced types test case with other examples. - - - - - 86494bca by Łukasz Hanuszczak at 2015-08-06T21:22:06+02:00 Rename advanced types test case and accept new output. - - - - - dbb7c7c0 by Adam Sandberg Eriksson at 2015-08-09T23:01:05+02:00 HsBang is split into HsSrcBang and HsImplBang With recent changes in GHC handling of strictness annotations in Haddock is simplified. - - - - - 2a7704fa by Ben Gamari at 2015-08-10T13:18:05+02:00 Merge pull request haskell/haddock#433 from adamse/split-hsbang HsBang is split into HsSrcBang and HsImplBang - - - - - 891954bc by Thomas Miedema at 2015-08-15T14:51:18+02:00 Follow changes in GHC build system - - - - - b55d32ab by Mateusz Kowalczyk at 2015-08-21T18:06:09+01:00 Make Travis use 7.10.2 - - - - - 97348b51 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Move SYB utilities to standalone module. - - - - - 748ec081 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Implement `everywhere` transformation in SYB module. - - - - - 011cc543 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Implement generic transformation constructor. - - - - - b9510db2 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Create simple utility module for type specialization. - - - - - 43229fa6 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Make type of type specialization function more general. - - - - - fd844e90 by Łukasz Hanuszczak at 2015-08-21T18:22:29+01:00 Add basic HTML test case for checking instance specialization. - - - - - 6ea0ad04 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Make HTML class instance printer take optional signature argument. - - - - - 65aa41b6 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Refactor instance head type to record instead of a meaningless tuple. - - - - - 3fc3bede by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Add expandable method section for each class instance declaration. - - - - - 99ceb107 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Move dummy post-family instances for `DocName` to `Types` module. - - - - - e98f4708 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create convenience functions for type specialization module. - - - - - b947552f by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Hook type specialization logic with HTML pretty-printer. - - - - - dcaa8030 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create stub functions for sugaring specialized types. - - - - - fa84bc65 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Implement list syntax sugaring logic for specialized types. - - - - - e8b05b07 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Implement tuple syntax sugaring logic for specialized types. - - - - - 68a2e5bc by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Get rid of code duplication in type specialization module. - - - - - 4721c336 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create scaffolding of a framework for renaming specialized types. - - - - - 271b488d by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fill in missing cases in specialized type renaming function. - - - - - bfa5f2a4 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Remove code duplication in specialized type renamer. - - - - - ea6bd0e8 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Change state of the type renaming monad. - - - - - 77c5496e by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Implement simple mechanism for generating new type names. - - - - - 91bfb48b by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fill in stub behaviour with actual environment renaming. - - - - - d244517b by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fix logic behind binder type renaming. - - - - - f3c5e360 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Add SYB-like utility function for performing stateful queries. - - - - - eb3f9154 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Create function for retrieving free variables from given type. - - - - - a94561d3 by Łukasz Hanuszczak at 2015-08-21T18:22:30+01:00 Fix compilation error caused by incorrect type signature. - - - - - 8bb707cf by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Move `SetName` class definition to types module. - - - - - 5800b13b by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Hook type renamer with instance method HTML pretty-printer. - - - - - 6a480164 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Add some test cases for type renamer. - - - - - 839842f7 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Make specialized signatures refer to original signature declaration. - - - - - 4880f7c9 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Make specialized methods be nicely formatted again. - - - - - ab5a6a2e by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Attach source locations to the specialized class methods. - - - - - 43f8a559 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Extend instances test case to also test multi-name type signatures. - - - - - 59bc751c by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix tab-based indentation in instances test case. - - - - - c2126815 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Improve placement of instance methods expander button. - - - - - 0a32e287 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Add new data type declaration to instance specialization test case. - - - - - 5281af1f by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Make type renamer first try single-letter names as alternatives. - - - - - 7d509475 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix type renamer bug with incorrect names being generated. - - - - - 0f35bf7c by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Add some documentation and refactor type specialization module. - - - - - da1d0803 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix another bug where type renamer was generating incorrect names. - - - - - cd39b5cb by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Refactor type renamer to rebinding and pure renaming phases. - - - - - 850251f4 by Łukasz Hanuszczak at 2015-08-21T18:22:31+01:00 Fix unwitting compilation bug. - - - - - e5e9fc01 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Integrate instance specification type into class instance definition. - - - - - 825b0ea0 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Get rid of no longer neccessary instance specification type. - - - - - cdba44eb by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix declaration converter to use more appropriate mode for methods. - - - - - bc45c309 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix bug with types not being specialized at all. - - - - - 5d8e5d89 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix bug where instance expander was opening wrong section. - - - - - 6001ee41 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix another type renamer bug where not all names were rebound. - - - - - 5f58ce2a by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Fix yet another renamer bug where some names were not unique. - - - - - 8265e521 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Split instance subsection layout method to top-level declarations. - - - - - e5e66298 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Rearrange layout of instance methods in generated documentation. - - - - - a50b4eea by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Get rid of no longer used layout method. - - - - - 2ff36ec2 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Attach section title to the instance methods block. - - - - - 7ac15300 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Add basic tests for associated types in instances test case. - - - - - db0ea2f9 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Attach associated types information to instance header. - - - - - 71cad4d5 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Make instance details section contain associated types information. - - - - - deee2809 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Improve look of rendered associated families in instance details. - - - - - 839d13a5 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Introduce alternative type for family declarations. - - - - - d397f03f by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Make instance details record use new type for family declarations. - - - - - 2b23fe97 by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Split printer of type family header to separate functions. - - - - - c3498cdc by Łukasz Hanuszczak at 2015-08-21T18:22:32+01:00 Implement HTML renderer for pseudo-family declarations. - - - - - c12bbb04 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Apply type specializer to associated type family declarations. - - - - - 2fd69ff2 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Create helper method for specializing type signatures. - - - - - 475826e7 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Refactor specializer module to be independent from XHTML backend. - - - - - f00b431c by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Add some documentation for instance head specializer. - - - - - a9fef2dc by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Fix bug with missing space in documentation for associated types. - - - - - 50e29056 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Fix issue with incorrect instance details sections being expanded. - - - - - e6dfdd03 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Accept tests affected by adding instance details section. - - - - - 75565b2a by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Make section identifier of instance details more GHC-independent. - - - - - add0c23e by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Re-accept tests after applying deterministic section identifiers. - - - - - 878f2534 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Make identifier generation also architecture-independent. - - - - - 48be69f8 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Fix issue with instance expander hijacking type hyperlink click. - - - - - 47830c1f by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Get rid of dreadful hashing function for generating identifiers. - - - - - 956cd5af by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Move `InstOrigin` type declaration to more appropriate module. - - - - - bf672ed3 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Accept tests affected by changes related to instance expander. - - - - - 8f2a949a by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Add examples with type operators to the instances test case. - - - - - 64600a84 by Łukasz Hanuszczak at 2015-08-21T18:22:33+01:00 Add basic support for sugaring infix type operators. - - - - - 747d71b8 by Łukasz Hanuszczak at 2015-08-21T18:22:34+01:00 Add support for sugaring built-in function syntax. - - - - - d4696ffb by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Remove default methods from Hoogle class output. - - - - - bf0e09d7 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Add fixity declarations in Hoogle backend output. - - - - - 90e91a51 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Fix bug with incorrect fixities being generated in Hoogle backend. - - - - - 48f11d35 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Improve class type family declarations output in Hoogle backend. - - - - - 661e8e8f by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Add missing default family equations in Hoogle output. - - - - - e2d64103 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Improve formatting of class details output in Hoogle backend. - - - - - 490fc377 by Łukasz Hanuszczak at 2015-08-21T18:31:31+01:00 Fix weird-looking Hoogle output for familyless classes. - - - - - ea115b64 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Create script file for new HTML test runner. - - - - - 609913d3 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Set default behaviour if no arguments given. - - - - - dc115f67 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Add support for providing optional arguments for test runner. - - - - - d93ec867 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Improve output of test runner error messages. - - - - - 0be9fe12 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Add support for executing Haddock process in test runner. - - - - - 4e4d00d9 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Add GHC path to test runner configuration. - - - - - d67a2086 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make GHC path a test runner command-line argument. - - - - - c810079a by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Extend test runner configuration with Haddock arguments. - - - - - fee18845 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Refactor test runner and create stub functions. - - - - - ff7c161f by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make test runner actually run Haddock executable. - - - - - 391f73e6 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Fix bug with test runner not producing any output files. - - - - - 81a74e2d by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Setup skeleton of framework for running tests. - - - - - f8a79ec4 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Fix bug with modules not being found in global search mode. - - - - - 7e700b4d by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make Haddock standard output redirection be more configurable. - - - - - 53b4c17a by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Incorporate old, ugly functions for comparing output files. - - - - - 8277c8aa by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Refactor architecture of test runner output checking functions. - - - - - 587bb414 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Implement actual diffing mechanism. - - - - - 9ed2b5e4 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Improve code style to match popular guidelines. - - - - - 14bffaf8 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Make it possible to choose alternative diff tool. - - - - - 5cdfb005 by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Create stub methods for processing test output as XML documents. - - - - - 7ef8e12e by Łukasz Hanuszczak at 2015-08-22T23:40:26+02:00 Implement link-stripping logic as simple SYB transformation. - - - - - 8a1fcd4f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Incorporate link stripping to output diffing mechanism. - - - - - 37dba2bc by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Implement footer-stripping logic. - - - - - 9cd52120 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Add missing dependencies in Cabal configuration file. - - - - - e0f83c6e by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix issue with output being printed in incorrect order. - - - - - 0a94fbb0 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make it possible to run tests without generating diff. - - - - - 76a58c6f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Refactor HTML test suite boilerplate to external package. - - - - - af41e6b0 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create utilities for storing directory configuration. - - - - - d8f0698f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Move IO-dependent config of HTML test suite to test package. - - - - - 17369fa0 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Enable all compiler warnings in Haddock test package configuration. - - - - - 9d03b47a by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Move Haddock runner of HTML test suite to Haddock test package. - - - - - 4b3483c5 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make Haddock test package more generic. - - - - - 03754194 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create convenience wrappers to simplify in test entry points. - - - - - 27476ab7 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Adjust module visibility and items they export. - - - - - c40002ba by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Remove no longer useful test option. - - - - - 55ab2541 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Change extension of test files used for diffing. - - - - - 136bf4e4 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Refactor and simplify XHTML helper module of test package. - - - - - 69f7e3df by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix typo in link stripper of HTML test suite runner. - - - - - 0c3c1c6b by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create convenience script for running specific HTML tests. - - - - - 489e1b05 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Implement utility functions for conditional link stripping. - - - - - 0f985dc3 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Adapt `hypsrc-test` module to work with new testing framework. - - - - - 927406f9 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Implement output accepting mechanism in test package. - - - - - 8545715e by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Create utility function for recursive obtaining directory contents. - - - - - cb70381f by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make Haddock test package more generic. - - - - - 019599b5 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix path handling in test runner. - - - - - 399b985b by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Make it possible to specify ignored files for test output. - - - - - 41b3d93d by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Adapt HTML test runner to use new ignoring functionality. - - - - - e2091c8b by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Fix bug with not all test output files being checked. - - - - - b22134f9 by Łukasz Hanuszczak at 2015-08-22T23:40:27+02:00 Specify ignored files for hyperlinker source test runner. - - - - - 3301dfa1 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Copy test runner script for hyperlinked source case. - - - - - d39a6dfa by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix bug with test runner invoking Haddock in incorrect mode. - - - - - f32c8ff3 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix path handling in test module loader. - - - - - 10f94ee9 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Make test runner ignore test packages with no modules. - - - - - 5dc4239c by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Create test runner entry points for LaTeX test suite. - - - - - 58d1f7cf by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix bug with unnecessary checking old test output. - - - - - c7ce76e1 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Re-implement test acceptance functionality. - - - - - 13bbabe8 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix warning about no longer needed definition. - - - - - 958a99b8 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Adapt Cabal configuration to execute LaTeX suite with new runner. - - - - - 550ff663 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Setup test suite for Hoogle backend. - - - - - 3aa969c4 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Make Hoogle backend create output directory if needed. - - - - - eb085b02 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Add appropriate .gitignore entry and configure Hoogle test suite. - - - - - a50bf915 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Fix bug with test runner failing when run on multiple test packages. - - - - - bf5368b8 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Create simple test cases for Hoogle backend. - - - - - 6121ba4b by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Create helper function for conversion between XML and XHTML. - - - - - cb516061 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Refactor existing code to use XHTML printer instead of XML one. - - - - - e2de8c82 by Łukasz Hanuszczak at 2015-08-22T23:40:28+02:00 Improve portability of test runner scripts. - - - - - 9563e774 by Łukasz Hanuszczak at 2015-08-22T23:43:16+02:00 Remove redundant import statement. - - - - - 55353df1 by Łukasz Hanuszczak at 2015-08-24T23:09:20+02:00 Fix bug with accepting to non-existing directory. - - - - - 00a334ca by Łukasz Hanuszczak at 2015-08-24T23:09:47+02:00 Accept output for Hoogle and LaTeX backends. - - - - - 29191d8b by Łukasz Hanuszczak at 2015-08-24T23:14:18+02:00 Get rid of obsolete testing utilities. - - - - - bbb25db3 by Łukasz Hanuszczak at 2015-08-24T23:18:50+02:00 Update sandbox setup guide to work with Haddock test package. - - - - - cfd45248 by Łukasz Hanuszczak at 2015-08-24T23:51:30+02:00 Make Travis aware of Haddock test package. - - - - - 74185b7a by Łukasz Hanuszczak at 2015-08-25T17:41:59+02:00 Fix test suite failure when used with Stack. - - - - - 18769697 by Łukasz Hanuszczak at 2015-08-25T18:02:09+02:00 Add sample Stack setup to the hacking guide. - - - - - 22715eeb by Łukasz Hanuszczak at 2015-08-25T18:04:47+02:00 Fix Markdown formatting of README file. - - - - - b49ec386 by Łukasz Hanuszczak at 2015-08-25T18:13:36+02:00 Setup Haddock executable path in Travis configuration. - - - - - 5d29eb03 by Eric Seidel at 2015-08-30T09:55:58-07:00 account for changes to ipClass - - - - - f111740a by Ben Gamari at 2015-09-02T13:20:37+02:00 Merge pull request haskell/haddock#443 from bgamari/ghc-head account for changes to ipClass - - - - - a2654bf6 by Jan Stolarek at 2015-09-03T01:32:57+02:00 Follow changes from haskell/haddock#6018 - - - - - 2678bafe by Richard Eisenberg at 2015-09-21T12:00:47-04:00 React to refactoring CoAxiom branch lists. - - - - - ebc56e24 by Edward Z. Yang at 2015-09-21T11:53:46-07:00 Track msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 4a8c4198 by Tamar Christina at 2015-09-27T13:59:08+02:00 Create Process: removed PhaseFailed - - - - - 7e99b790 by Oleg Grenrus at 2015-09-27T20:52:10+03:00 Generate docs for orphan instances - - - - - 32e932e2 by Oleg Grenrus at 2015-09-28T07:21:11+03:00 Have source links for orphan instances - - - - - c2eb9f4f by Oleg Grenrus at 2015-09-28T07:24:58+03:00 Print orphan instances header only if required - - - - - ff96f978 by Oleg Grenrus at 2015-09-28T07:40:54+03:00 Add orphan instances link to contents box - - - - - d72490a6 by Oleg Grenrus at 2015-09-28T16:37:44+03:00 Fix orphan instance collapsing - - - - - 25d3dfe5 by Ben Gamari at 2015-10-03T12:38:09+02:00 Merge pull request haskell/haddock#448 from Mistuke/fix-silent-death-of-runInteractive Remove PhaseFailed - - - - - 1e45e43b by Edward Z. Yang at 2015-10-11T13:10:10-07:00 s/PackageKey/UnitId/g and s/packageKey/unitId/g Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - b1370ac1 by Adam Gundry at 2015-10-16T16:26:42+01:00 Roughly fix up haddock for DuplicateRecordFields changes This compiles, but will probably need more work to produce good documentation when the DuplicateRecordFields extension is used. - - - - - 60bef421 by Simon Peyton Jones at 2015-10-26T12:52:36+00:00 Track wip/spj-wildcard-refactor on main repo - - - - - 4c1898ca by Simon Peyton Jones at 2015-10-27T14:24:56+00:00 Track change to PatSyn.patSynSig - - - - - 25108e85 by Simon Peyton Jones at 2015-10-27T17:34:18+00:00 Follow changes to HsTYpe Not yet complete (but on a wip/ branch) - - - - - 693643ac by Ben Gamari at 2015-10-28T14:33:06+01:00 Account for Typeable changes The treatment of type families changed. - - - - - cd7c2221 by Simon Peyton Jones at 2015-10-30T13:03:51+00:00 Work on updating Haddock to wip/spj-wildard-recactor Still incomplete - - - - - 712032cb by Herbert Valerio Riedel at 2015-10-31T11:01:45+01:00 Relax upper bound on `base` to allow base-4.9 - - - - - 0bfa0475 by Simon Peyton Jones at 2015-10-31T19:08:13+00:00 More adaption to wildcard-refactor - - - - - 0a3c0cb7 by Simon Peyton Jones at 2015-10-31T22:14:43+00:00 Merge remote-tracking branch 'origin/ghc-head' into wip/spj-wildcard-refactor Conflicts: haddock-api/src/Haddock/Convert.hs - - - - - c4fd4ec9 by Alan Zimmerman at 2015-11-01T11:16:34+01:00 Matching change GHC haskell/haddock#11017 BooleanFormula located - - - - - 42cdd882 by Matthew Pickering at 2015-11-06T20:02:16+00:00 Change for IEThingWith - - - - - f368b7be by Ben Gamari at 2015-11-11T11:35:51+01:00 Eliminate support for deprecated GADT syntax Follows from GHC D1460. - - - - - e32965b8 by Simon Peyton Jones at 2015-11-13T12:18:17+00:00 Merge with origin/head - - - - - ebcf795a by Edward Z. Yang at 2015-11-13T21:56:27-08:00 Undo msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 4e23989f by Simon Peyton Jones at 2015-11-18T11:32:54+00:00 Wibbles to Haddock - - - - - 2289cd4a by Simon Peyton Jones at 2015-11-20T23:12:49+00:00 Merge remote-tracking branch 'origin/ghc-head' into wip/spj-wildcard-refactor - - - - - 695975a6 by Alan Zimmerman at 2015-11-21T21:16:12+02:00 Update to match GHC wip/T11019 - - - - - bbba21e7 by Simon Peyton Jones at 2015-11-23T13:54:31+00:00 merge with origin/ghc-head - - - - - 3d664258 by Simon Peyton Jones at 2015-11-23T17:17:18+00:00 Wibble - - - - - e64cf586 by Herbert Valerio Riedel at 2015-12-05T00:29:55+01:00 Canonicalise Monad instances - - - - - a2de15a7 by Alan Zimmerman at 2015-12-05T17:33:52+02:00 Matching changes for haskell/haddock#11028 - - - - - cc29a3e4 by Alan Zimmerman at 2015-12-05T19:45:33+02:00 Placeholder for record style GADT declaration A GADT Declaration is now presented as CmmCondBranch :: {..} -> CmmNode O C cml_pred :: CmmExpr cml_true, cml_false :: !Label cml_likely :: Maybe Bool for CmmCondBranch :: { -- conditional branch cml_pred :: CmmExpr, cml_true, cml_false :: ULabel, cml_likely :: Maybe Bool -- likely result of the conditional, -- if known } -> CmmNode O C - - - - - 95dd15d1 by Richard Eisenberg at 2015-12-11T17:33:39-06:00 Update for type=kinds - - - - - cb5fd9ed by Herbert Valerio Riedel at 2015-12-14T15:07:30+00:00 Bump versions for ghc-7.11 - - - - - 4f286d96 by Simon Peyton Jones at 2015-12-14T15:10:56+00:00 Eliminate instanceHead' in favour of GHC's instanceSig This is made possible by the elimination of "silent superclass parameters" in GHC - - - - - 13ea2733 by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Remove redundant constraints from haddock, discovered by -fwarn-redundant-constraints - - - - - 098df8b8 by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Track changes in HsSyn for quasi-quotes - - - - - 716a64de by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Track change in API of TyCon - - - - - 77a66bca by Adam Gundry at 2015-12-14T15:10:58+00:00 Track API changes to support empty closed type familes - - - - - f2808305 by Simon Peyton Jones at 2015-12-14T15:10:58+00:00 Track the new location of setRdrNameSpace - - - - - ba8b08a4 by Alan Zimmerman at 2015-12-14T15:10:59+00:00 ApiAnnotations : strings in warnings do not return SourceText The strings used in a WARNING pragma are captured via strings :: { Located ([AddAnn],[Located FastString]) } : STRING { sL1 $1 ([],[L (gl $1) (getSTRING $1)]) } .. The STRING token has a method getSTRINGs that returns the original source text for a string. A warning of the form {-# WARNING Logic , mkSolver , mkSimpleSolver , mkSolverForLogic , solverSetParams , solverPush , solverPop , solverReset , solverGetNumScopes , solverAssertCnstr , solverAssertAndTrack , solverCheck , solverCheckAndGetModel , solverGetReasonUnknown "New Z3 API support is still incomplete and fragile: \ \you may experience segmentation faults!" #-} returns the concatenated warning string rather than the original source. - - - - - a4ded87e by Thomas Winant at 2015-12-14T15:14:05+00:00 Update after wild card renaming refactoring in D613 Summary: * Move `Post*` type instances to `Haddock.Types` as other modules than `Haddock.Interface.Rename` will rely on these type instances. * Update after wild card renaming refactoring in D613. Reviewers: simonpj, austin Reviewed By: austin Differential Revision: https://phabricator.haskell.org/D954 GHC Trac Issues: haskell/haddock#10098 - - - - - 25c78107 by Adam Sandberg Eriksson at 2015-12-14T15:14:06+00:00 StrictData: print correct strictness marks - - - - - 6cbc41c4 by Adam Sandberg Eriksson at 2015-12-14T15:14:06+00:00 StrictData: changes in HsBang type - - - - - ad46821a by Alan Zimmerman at 2015-12-14T15:14:06+00:00 Replace (SourceText,FastString) with WithSourceText data type Phab:D907 introduced SourceText for a number of data types, by replacing FastString with (SourceText,FastString). Since this has an Outputable instance, no warnings are generated when ppr is called on it, but unexpected output is generated. See Phab:D1096 for an example of this. Replace the (SourceText,FastString) tuples with a new data type data WithSourceText = WithSourceText SourceText FastString Trac ticket: haskell/haddock#10692 - - - - - abc0ae5b by Adam Sandberg Eriksson at 2015-12-14T15:14:06+00:00 HsBang is split into HsSrcBang and HsImplBang With recent changes in GHC handling of strictness annotations in Haddock is simplified. - - - - - 3308d06c by Thomas Miedema at 2015-12-14T15:14:07+00:00 Follow changes in GHC build system - - - - - 6c763deb by Eric Seidel at 2015-12-14T15:14:07+00:00 account for changes to ipClass - - - - - ae5b4eac by Jan Stolarek at 2015-12-14T15:17:00+00:00 Follow changes from haskell/haddock#6018 - - - - - ffbc40e0 by Richard Eisenberg at 2015-12-14T15:17:02+00:00 React to refactoring CoAxiom branch lists. - - - - - d1f531e9 by Edward Z. Yang at 2015-12-14T15:17:02+00:00 Track msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 79f73754 by Tamar Christina at 2015-12-14T15:17:02+00:00 Create Process: removed PhaseFailed - - - - - 3d37bebb by Edward Z. Yang at 2015-12-14T15:20:46+00:00 s/PackageKey/UnitId/g and s/packageKey/unitId/g Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 5f8a9e44 by Adam Gundry at 2015-12-14T15:20:48+00:00 Roughly fix up haddock for DuplicateRecordFields changes This compiles, but will probably need more work to produce good documentation when the DuplicateRecordFields extension is used. - - - - - 79dda70f by Simon Peyton Jones at 2015-12-14T15:26:02+00:00 Track wip/spj-wildcard-refactor on main repo - - - - - 959930fb by Simon Peyton Jones at 2015-12-14T15:37:50+00:00 Follow changes to HsTYpe Not yet complete (but on a wip/ branch) - - - - - e18a8df5 by Simon Peyton Jones at 2015-12-14T15:37:52+00:00 Work on updating Haddock to wip/spj-wildard-recactor Still incomplete - - - - - aa35ab52 by Simon Peyton Jones at 2015-12-14T15:40:18+00:00 More adaption to wildcard-refactor - - - - - 8ceef94b by Simon Peyton Jones at 2015-12-14T15:46:04+00:00 Track change to PatSyn.patSynSig - - - - - cd81e83d by Ben Gamari at 2015-12-14T15:46:06+00:00 Account for Typeable changes The treatment of type families changed. - - - - - 63c9117c by Herbert Valerio Riedel at 2015-12-14T15:46:34+00:00 Relax upper bound on `base` to allow base-4.9 - - - - - a484c613 by Alan Zimmerman at 2015-12-14T15:47:46+00:00 Matching change GHC haskell/haddock#11017 BooleanFormula located - - - - - 2c26fa51 by Matthew Pickering at 2015-12-14T15:47:47+00:00 Change for IEThingWith - - - - - 593baa0f by Ben Gamari at 2015-12-14T15:49:21+00:00 Eliminate support for deprecated GADT syntax Follows from GHC D1460. - - - - - b6b5ca78 by Edward Z. Yang at 2015-12-14T15:49:54+00:00 Undo msHsFilePath change. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - b5b0e072 by Alan Zimmerman at 2015-12-14T15:54:20+00:00 Update to match GHC wip/T11019 - - - - - 14ddeb68 by Simon Peyton Jones at 2015-12-14T15:54:22+00:00 Wibble - - - - - 10a90ad8 by Herbert Valerio Riedel at 2015-12-14T15:54:22+00:00 Canonicalise Monad instances - - - - - ed68ac50 by Alan Zimmerman at 2015-12-14T15:55:48+00:00 Matching changes for haskell/haddock#11028 - - - - - 3f7e5a2d by Alan Zimmerman at 2015-12-14T15:55:49+00:00 Placeholder for record style GADT declaration A GADT Declaration is now presented as CmmCondBranch :: {..} -> CmmNode O C cml_pred :: CmmExpr cml_true, cml_false :: !Label cml_likely :: Maybe Bool for CmmCondBranch :: { -- conditional branch cml_pred :: CmmExpr, cml_true, cml_false :: ULabel, cml_likely :: Maybe Bool -- likely result of the conditional, -- if known } -> CmmNode O C - - - - - 6543a73f by Richard Eisenberg at 2015-12-14T15:59:55+00:00 Update for type=kinds - - - - - 193a5c48 by Matthew Pickering at 2015-12-14T18:17:00+00:00 Changes to compile with 8.0 - - - - - add669ec by Matthew Pickering at 2015-12-14T18:47:12+00:00 Warnings - - - - - 223f3fb4 by Ben Gamari at 2015-12-15T23:45:05+01:00 Update for D1200 - - - - - d058388f by Ben Gamari at 2015-12-16T05:40:17-05:00 Types: Add Outputable[Bndr] DocName instances - - - - - 62ecd7fb by Ben Gamari at 2015-12-16T09:23:09-05:00 Fix fallout from wildcards refactoring The wildcard refactoring was introduced a new type of signature, `ClassOpSig`, which is carried by typeclasses. The original patch adapting Haddock for this change missed a few places where this constructor needed to be handled, resulting in no class methods in documentation produced by Haddock. Additionally, this moves and renames the `isVanillaLSig` helper from GHC's HsBinds module into GhcUtils, since it is only used by Haddock. - - - - - ddbc187a by Ben Gamari at 2015-12-16T17:54:55+01:00 Update for D1200 - - - - - cec83b52 by Ben Gamari at 2015-12-16T17:54:55+01:00 Types: Add Outputable[Bndr] DocName instances - - - - - d12ecc98 by Ben Gamari at 2015-12-16T17:54:55+01:00 Fix fallout from wildcards refactoring The wildcard refactoring was introduced a new type of signature, `ClassOpSig`, which is carried by typeclasses. The original patch adapting Haddock for this change missed a few places where this constructor needed to be handled, resulting in no class methods in documentation produced by Haddock. Additionally, this moves and renames the `isVanillaLSig` helper from GHC's HsBinds module into GhcUtils, since it is only used by Haddock. - - - - - ada1616f by Ben Gamari at 2015-12-16T17:54:58+01:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - a4f0383d by Ben Gamari at 2015-12-16T23:32:38+01:00 Fix Hyperlinker GHC.con_names is now GHC.getConNames - - - - - a10e6849 by Ben Gamari at 2015-12-20T00:54:11+01:00 Merge remote-tracking branch 'mrhania/testing-framework-improvements' into ghc-head - - - - - f078b4fd by Ben Gamari at 2015-12-20T00:59:51+01:00 test: Compatibility with Cabal 1.23 - - - - - 88a511a9 by Ben Gamari at 2015-12-20T01:14:35+01:00 Merge remote-tracking branch 'phadej/orphans' into ghc-head - - - - - 4e250f36 by Ben Gamari at 2015-12-20T01:14:52+01:00 Add html-test for orphan instances output - - - - - 87fffbad by Alan Zimmerman at 2015-12-20T09:50:42+02:00 Update for GHC trac#11258 Adding locations to RdrName in FieldOcc and AmbiguousFieldOcc - - - - - 6b7e51c9 by idontgetoutmuch at 2015-12-20T21:01:47+00:00 Merge pull request haskell/haddock#1 from haskell/ghc-head Ghc head - - - - - 229c1fb5 by Dominic Steinitz at 2015-12-21T07:19:16+00:00 Handle inline math with mathjax. - - - - - 57902d66 by Dominic Steinitz at 2015-12-21T08:07:11+00:00 Fix the documentation for haddock itself. Change notation and add support for inline math. Allow newlines in display math. Add a command line option for the mathjax url (you might want to use a locally installed version). Rebase tests because of extra url and version change. Respond to (some of the) comments. Fix warnings in InterfaceFile.hs - - - - - 0e69f236 by Herbert Valerio Riedel at 2015-12-21T18:30:43+01:00 Fix-up left-over assumptions of GHC 7.12 into GHC 8.0 - - - - - c67f8444 by Simon Peyton Jones at 2015-12-22T16:26:56+00:00 Follow removal of NamedWildCard from HsType - - - - - da40327a by Ben Gamari at 2015-12-23T14:15:28+01:00 html-test/Operators: Clear up ambiguous types For reasons that aren't entirely clear a class with ambiguous types was accepted by GHC <8.0. I've added a functional dependency to clear up this ambiguity. - - - - - 541b7fa4 by Ben Gamari at 2015-12-23T14:18:51+01:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-head - - - - - 0febc947 by Ben Gamari at 2015-12-24T00:30:20+01:00 hoogle-test/AssocTypes: Allow AmbiguousTypes GHC 8.0 complains otherwise - - - - - 25810841 by Ben Gamari at 2015-12-24T00:33:18+01:00 OrphanInstances: Accept test output - - - - - 841987f3 by Ben Gamari at 2015-12-25T11:03:11+01:00 Merge remote-tracking branch 'idontgetoutmuch/ghc-head' into ghc-head - - - - - 358391f0 by Ben Gamari at 2015-12-26T10:44:50+01:00 Add missing import - - - - - a8896885 by Ben Gamari at 2015-12-26T10:45:27+01:00 travis: Use Travis containers - - - - - 85e82134 by Herbert Valerio Riedel at 2015-12-30T17:25:39+01:00 tweak version bounds for GHC-8.1 - - - - - 672a5f75 by randen at 2016-01-01T23:45:25-08:00 The Haddock part for fully gcc-like response files " driver/Main.hs * Moved the response file handling into ResponseFile.hs, updating import section as appropriate. * driver/ResponseFile.hs * New file. In anticipation that maybe some day this could be provided by another library, and to make it possible to unit test, this functionality is pulled out of the Main.hs module, and expanded to support the style/format of response files which gcc uses. * The specification for the format of response files which gcc generates and consumes, seems to be best derived from the gcc code itself (libiberty/argv.c), so that is what has been done here. * This is intended to fix haskell/haddock#379 * driver-test/Main.hs * New file for testing code in the driver source tree * driver-test/ResponseFileSpec.hs * Tests, adapted/adopted from the same gcc code where the escaping/unescaping is from, in the hspec style of unit tests * haddock.cabal * Add the driver-test test-suite. Introduces a new library dependency (upon hspec) for the haddock driver target in the haddock.cabal file, but practically, this should not be a problem as the haddock-api tests already depend on hspec. - - - - - 498781df by Ben Gamari at 2016-01-06T13:41:04+01:00 Version bumps and changelog - - - - - 8451e46a by Ben Gamari at 2016-01-06T13:47:17+01:00 Merge remote-tracking branch 'randen/bug468' - - - - - fb2d9181 by Ben Gamari at 2016-01-06T08:14:42-05:00 Add ResponseFile to OtherModules - - - - - 2cb2d2e3 by Ben Gamari at 2016-01-06T14:35:00+01:00 Merge branch 'master' into ghc-head - - - - - 913477d4 by Eric Seidel at 2016-01-11T14:57:57-08:00 deal with un-wiring of IP class - - - - - c557a4b3 by Alan Zimmerman at 2016-01-15T11:14:35+02:00 Update to match wip/T11430 in GHC - - - - - 3e135093 by Alan Zimmerman at 2016-01-16T18:21:59+01:00 Update to match wip/T11430 in GHC - - - - - c48ef2f9 by Ben Gamari at 2016-01-18T09:50:06+01:00 Merge remote-tracking branch 'gridaphobe/ghc-head' into ghc-head - - - - - 9138a1b0 by Eric Seidel at 2016-01-18T12:50:15+01:00 deal with un-wiring of IP class (cherry picked from commit 17388b0f0029d969d79353be7737eb01c7b8dc5f) - - - - - b48c172e by Joachim Breitner at 2016-01-19T00:11:38+01:00 Make sure --mathjax affects all written HTML files This fixes haskell/haddock#475. - - - - - af61fe63 by Ryan Scott at 2016-02-07T23:25:57+01:00 Render */# instead of TYPE 'Lifted/TYPE 'Unlifted (fixes haskell/haddock#473) - - - - - b6458693 by Ben Gamari at 2016-02-07T23:29:27+01:00 Merge pull request haskell/haddock#477 from haskell/issue-475 Make sure --mathjax affects all written HTML files - - - - - adcc0071 by Ben Gamari at 2016-02-07T23:34:52+01:00 Merge branch 'master' into ghc-head - - - - - d0404e61 by Ben Gamari at 2016-02-08T12:46:49+01:00 doc: Switch to Sphinx - - - - - acb153b3 by Ben Gamari at 2016-02-08T12:46:56+01:00 Document --use-unicode flag - - - - - c20bdf1d by Ben Gamari at 2016-02-08T13:41:24+01:00 Fix GHC and haddock-library dependency bounds - - - - - 8d946801 by Ben Gamari at 2016-02-08T14:54:56+01:00 testsuite: Rework handling of output sanitization Previously un-cleaned artifacts were kept as reference output, making it difficult to tell what has changed and causing spurious changes in the version control history. Here we rework this, cleaning the output during acceptance. To accomplish this it was necessary to move to strict I/O to ensure the reference handle was closed before accept attempts to open the reference file. - - - - - c465705d by Ben Gamari at 2016-02-08T15:36:05+01:00 test: Compare on dump For reasons I don't understand the Xml representations differ despite their textual representations being identical. - - - - - 1ec0227a by Ben Gamari at 2016-02-08T15:36:05+01:00 html-test: Accept test output - - - - - eefbd63a by Ben Gamari at 2016-02-08T15:36:08+01:00 hypsrc-test: Accept test output And fix impredicative Polymorphism testcase. - - - - - d1df4372 by Ben Gamari at 2016-02-08T15:40:44+01:00 Merge branch 'fix-up-testsuite' - - - - - 206a3859 by Phil Ruffwind at 2016-02-08T17:51:21+01:00 Move the permalinks to "#" on the right side Since pull request haskell/haddock#407, the identifiers have been permalinked to themselves, but this makes it difficult to copy the identifier by double-clicking. To work around this usability problem, the permalinks are now placed on the far right adjacent to "Source", indicated by "#". Also, 'namedAnchor' now uses 'id' instead of 'name' (which is obsolete). - - - - - 6c89fa03 by Phil Ruffwind at 2016-02-08T17:54:44+01:00 Update tests for previous commit - - - - - effaa832 by Ben Gamari at 2016-02-08T17:56:17+01:00 Merge branch 'anchors-redux' - - - - - 9a2bec90 by Ben Gamari at 2016-02-08T17:58:40+01:00 Use -fprint-unicode-syntax when --use-unicode is enabled This allows GHC to render `*` as its Unicode representation, among other things. - - - - - 28ecac5b by Ben Gamari at 2016-02-11T18:53:03+01:00 Merge pull request haskell/haddock#480 from bgamari/sphinx Move documentation to ReStructuredText - - - - - 222e5920 by Ryan Scott at 2016-02-11T15:42:42-05:00 Collapse type/data family instances by default - - - - - a80ac03b by Ryan Scott at 2016-02-11T20:17:09-05:00 Ensure expanded family instances render correctly - - - - - 7f985231 by Ben Gamari at 2016-02-12T10:04:22+01:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - d4eda086 by Ben Gamari at 2016-02-18T00:05:56+01:00 Xhtml.Decl: Various cleanups - - - - - 79bee48d by Ben Gamari at 2016-02-18T00:05:56+01:00 Xhtml.Decl: Show kind signatures for type family variables Addresses GHC haskell/haddock#11588. - - - - - b2981d98 by Ben Gamari at 2016-02-18T00:05:56+01:00 Xhtml.Decl: Show 'where ...' after closed type family Seems like we should ideally show the actual equations as well but that seems like it would be a fair amount of work - - - - - cfc0e621 by Ben Gamari at 2016-02-18T22:48:12+01:00 Merge pull request haskell/haddock#483 from bgamari/T11588 Fix GHC haskell/haddock#11588 This fixes GHC haskell/haddock#11588: * Show where ... after closed type families * Show kind signatures on type family type variables - - - - - 256e8a0d by Ben Gamari at 2016-02-18T23:15:39+01:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 32402036 by Richard Eisenberg at 2016-02-24T13:21:44-05:00 Follow-on changes to support RuntimeRep - - - - - 2b1c572d by Matthew Pickering at 2016-03-04T21:04:02+00:00 Remove unused functions - - - - - eb906f50 by Richard Eisenberg at 2016-03-13T21:17:20+01:00 Follow-on changes to support RuntimeRep (cherry picked from commit ab954263a793d8ced734459d6194a5d89214b66c) - - - - - 8c34ef34 by Richard Eisenberg at 2016-03-14T23:47:23-04:00 Changes due to fix for GHC#11648. - - - - - 0e022014 by Richard Eisenberg at 2016-03-15T14:06:45+01:00 Changes due to fix for GHC#11648. (cherry picked from commit bb994de1ab0c76d1aaf1e39c54158db2526d31f1) - - - - - ed3f78ab by Rik Steenkamp at 2016-04-02T22:20:36+01:00 Fix printing of pattern synonym types Removes the call to `patSynType :: PatSyn -> Type` in `Convert.hs` as this function will be removed from GHC. Instead, we use the function `patSynSig` and build the `HsDecl` manually. This also fixes the printing of the two contexts and the quantified type variables in a pattern synonym type. Reviewers: goldfire, bgamari, mpickering Differential Revision: https://phabricator.haskell.org/D2048 - - - - - d3210042 by Rik Steenkamp at 2016-04-04T15:43:32+02:00 Fix printing of pattern synonym types Removes the call to `patSynType :: PatSyn -> Type` in `Convert.hs` as this function will be removed from GHC. Instead, we use the function `patSynSig` and build the `HsDecl` manually. This also fixes the printing of the two contexts and the quantified type variables in a pattern synonym type. Reviewers: goldfire, bgamari, mpickering Differential Revision: https://phabricator.haskell.org/D2048 (cherry picked from commit 3ddcbd6b8e6884bd95028381176eb33bee6896fb) - - - - - 236eec90 by Ben Gamari at 2016-04-10T23:40:15+02:00 doc: Fix option references (cherry picked from commit f915fb3c74328fb994235bbbd42092a691539197) - - - - - 692ee7e0 by Ben Gamari at 2016-04-10T23:40:15+02:00 doc: Only install if BUILD_SPHINX_HTML==YES Fixes GHC haskell/haddock#11818. - - - - - 79619f57 by Ben Gamari at 2016-04-10T23:46:22+02:00 doc: Only install if BUILD_SPHINX_HTML==YES Fixes GHC haskell/haddock#11818. (cherry picked from commit c6d6a18d85e5e2d9bb5904e6919e8a8d7e31c4c5) - - - - - 3358ccb4 by Ben Gamari at 2016-04-10T23:47:27+02:00 doc: Fix option references (cherry picked from commit f915fb3c74328fb994235bbbd42092a691539197) - - - - - 264949b1 by Ben Gamari at 2016-04-16T17:50:23+02:00 Merge pull request haskell/haddock#482 from RyanGlScott/ghc-head Collapse type/data family instances by default - - - - - 478c483a by Ben Gamari at 2016-04-16T17:51:09+02:00 Merge pull request haskell/haddock#489 from mpickering/unused-functions Remove some unused functions - - - - - c94e55f0 by Ryan Scott at 2016-04-16T17:57:54+02:00 Collapse type/data family instances by default (cherry picked from commit 2da130a8db8f995c119b544fad807533236cf088) - - - - - 31e633d3 by Ryan Scott at 2016-04-16T17:58:06+02:00 Ensure expanded family instances render correctly (cherry picked from commit 1338b5d7c32939de6bbc31af0049477e4f847103) - - - - - 03e4d197 by Matthew Pickering at 2016-04-16T17:58:21+02:00 Remove unused functions (cherry picked from commit b89d1c2456bdb2d4208d94ded56155f7088a37d0) - - - - - ed4116f6 by Ben Gamari at 2016-04-20T10:46:57+02:00 ghc: Install files for needed --hyperlinked-source - - - - - 0be999c4 by Ben Gamari at 2016-04-20T11:37:54+02:00 ghc: Install files for needed --hyperlinked-source (cherry picked from commit 5c82c9fc2d21ddaae4a2470f1c375426968f19c6) - - - - - 4d17544c by Simon Peyton Jones at 2016-04-20T12:42:28+01:00 Track change to HsGroup This relates to a big GHC patch for Trac haskell/haddock#11348 - - - - - 1700a50d by Ben Gamari at 2016-05-01T13:19:27+02:00 doc: At long last fix ghc.mk The variable reference was incorrectly escaped, meaning that Sphinx documentation was never installed. - - - - - 0b7c8125 by Ben Gamari at 2016-05-01T13:21:43+02:00 doc: At long last fix ghc.mk The variable reference was incorrectly escaped, meaning that Sphinx documentation was never installed. (cherry picked from commit 609018dd09c4ffe27f9248b2d8b50f6196cd42b9) - - - - - af115ce0 by Ryan Scott at 2016-05-04T22:15:50-04:00 Render Haddocks for derived instances Currently, one can document top-level instance declarations, but derived instances (both those in `deriving` clauses and standalone `deriving` instances) do not enjoy the same privilege. This makes the necessary changes to the Haddock API to enable rendering Haddock comments for derived instances. This is part of a fix for Trac haskell/haddock#11768. - - - - - 76fa1edc by Ben Gamari at 2016-05-10T18:13:25+02:00 haddock-test: A bit of refactoring for debuggability - - - - - 7d4c4b20 by Ben Gamari at 2016-05-10T18:13:25+02:00 Create: Mark a comment as TODO - - - - - 2a6d0c90 by Ben Gamari at 2016-05-10T18:13:25+02:00 html-test: Update reference output - - - - - bd60913d by Ben Gamari at 2016-05-10T18:13:25+02:00 hypsrc-test: Fix reference file path in cabal file It appears the haddock insists on prefixing --hyperlinked-sourcer output with directory which the source appeared in. - - - - - c1548057 by Ben Gamari at 2016-05-10T18:22:12+02:00 doc: Update extra-source-files in Cabal file - - - - - 41d5bae3 by Ben Gamari at 2016-05-10T18:29:21+02:00 Bump versions - - - - - ca75b779 by Ben Gamari at 2016-05-11T16:03:44+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 4e3cfd62 by Ben Gamari at 2016-05-11T16:06:45+02:00 Merge remote-tracking branch 'RyanGlScott/ghc-head' into ghc-head - - - - - a2379970 by Ben Gamari at 2016-05-11T23:15:11+02:00 doc: Add clean targets - - - - - f275212e by Ben Gamari at 2016-05-11T23:15:14+02:00 doc: Add html as an all-target for ghc Otherwise the html documentation won't be installed for binary-dist. - - - - - 388fc0af by Ben Gamari at 2016-05-12T09:49:12+02:00 Update CHANGES - - - - - bad81ad5 by Ben Gamari at 2016-05-12T09:49:38+02:00 Version bump - - - - - c01688a7 by Ben Gamari at 2016-05-12T10:04:58+02:00 Revert "Version bump" This bump was a bit premature. This reverts commit 7b238d9c5be9b07aa2d10df323b5c7b8d1634dc8. - - - - - 7ed05724 by Ben Gamari at 2016-05-12T10:05:33+02:00 doc: Fix GHC clean rule Apparently GHC's build system doesn't permit wildcards in clean paths. - - - - - 5d9611f4 by Ben Gamari at 2016-05-12T17:43:50+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 653566b2 by Ben Gamari at 2016-05-14T09:57:31+02:00 Version bump to 2.17.2 - - - - - b355c439 by Ben Gamari at 2016-05-14T09:57:51+02:00 doc: Use `$(MAKE)` instead of `make` This is necessary to ensure we use gmake. - - - - - 8a18537d by Ben Gamari at 2016-05-14T10:15:45+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - b3290ef1 by Sebastian Meric de Bellefon at 2016-05-14T11:29:47-04:00 Fix haskell/haddock#303. Hide footer when printing The "Produced by Haddock" footer was overlapping the page's body when printing. This patch hides the footer with a css media rule. - - - - - b4a76f89 by Sebastian Meric de Bellefon at 2016-05-15T02:12:46-04:00 Fix haskell/haddock#280. Parsing of module header The initial newlines were counted as indentation spaces, thus disturbing the parsing of next lines - - - - - ba797c9e by Ben Gamari at 2016-05-16T14:53:46+02:00 doc: Vendorize alabaster Sphinx theme Alabaster is now the default sphinx theme and is a significant improvement over the previous default that it's worthproviding it when unavailable (e.g. Sphinx <1.3). - - - - - c9283e44 by Ben Gamari at 2016-05-16T14:55:17+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 1c9ea198 by Sebastian Méric de Bellefon at 2016-05-16T12:30:40-04:00 Merge pull request haskell/haddock#502 from Helkafen/master Fix haskell/haddock#303. Hide footer when printing - - - - - 33631016 by Ben Gamari at 2016-05-16T19:56:11+02:00 Revert "doc: Vendorize alabaster Sphinx theme" This ended up causes far too many issues to be worthwhile. We'll just have to live with inconsistent haddock documentation. This reverts commit cec21957001143794e71bcd9420283df18e7de40. - - - - - 93317d26 by Ben Gamari at 2016-05-16T19:56:11+02:00 cabal: Fix README path - - - - - c8695b22 by Ben Gamari at 2016-05-16T19:58:51+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 0b50eaaa by Ben Gamari at 2016-05-16T21:02:08+02:00 doc: Use whichever theme sphinx deems appropriate - - - - - 857c1c9c by Ben Gamari at 2016-05-16T21:07:08+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 15fc5637 by Ben Gamari at 2016-05-22T12:43:59+02:00 Create: Remove redundant imports - - - - - 132ddc6a by Ben Gamari at 2016-05-22T12:43:59+02:00 Create: Better debug output For tracking down haskell/haddock#505 - - - - - 2252a149 by Ben Gamari at 2016-05-22T12:43:59+02:00 Don't consider default class ops when looking for decls When we are looking for an operation within a class we don't care about `default`-type declarations. This was the cause of haskell/haddock#505. - - - - - 4886b2ec by Oleg Grenrus at 2016-05-24T16:19:48+03:00 UnfelpfulSpan line number omitted Kind of resolves https://github.com/haskell/haddock/issues/508 - - - - - a4befd36 by Oleg Grenrus at 2016-05-24T16:53:35+03:00 Change Hyperlinked lexer to know about DataKinds ticks - - - - - f45cb52e by David Feuer at 2016-05-24T18:48:53-04:00 Make parser state a newtype Previously, it was `data` wrapping a `Maybe`, which seems a bit silly. Obviously, this can be changed back if anyone wants to add more fields some day. - - - - - 05013dd7 by Sebastian Meric de Bellefon at 2016-05-24T22:03:55-04:00 remove framed view of the HTML documentation (see haskell/haddock#114 and haskell/haddock#274) Frames are a bit broken, ignored by Hackage, and considered obsolete in general. This patch disables frames generation. The mini_*.html files are still used in the synopsis. - - - - - b8163a88 by Ben Gamari at 2016-05-25T14:44:15+02:00 Merge pull request haskell/haddock#507 from bgamari/T505 Fix haskell/haddock#505 - - - - - ea1b30c6 by Sebastian Meric de Bellefon at 2016-05-25T14:17:00-04:00 Update CHANGES - - - - - eddfc258 by Sebastian Méric de Bellefon at 2016-05-25T15:17:40-04:00 Merge pull request haskell/haddock#514 from Helkafen/frames remove framed view of the HTML documentation (see haskell/haddock#114 and haskell/haddock#274) - - - - - 0e506818 by Alex Biehl at 2016-05-26T12:43:09+02:00 Remove misplaced haddock comment - - - - - a07d28c0 by Ben Gamari at 2016-05-27T11:34:59+02:00 Merge pull request haskell/haddock#515 from alexbiehl/master Remove misplaced haddock comment - - - - - 9001d267 by Ben Gamari at 2016-05-27T11:35:46+02:00 Merge pull request haskell/haddock#513 from treeowl/newtype-since Make parser state a newtype - - - - - 74e1a018 by Sebastian Méric de Bellefon at 2016-05-28T17:28:15-04:00 Merge pull request haskell/haddock#504 from Helkafen/issue-280 Fix haskell/haddock#280. Parsing of module header - - - - - 37557f4f by Alan Zimmerman at 2016-05-29T23:36:50+02:00 Matching changes for haskell/haddock#12105 - - - - - 7d09e5d6 by Sebastian Meric de Bellefon at 2016-06-03T18:07:48-04:00 Version bumps (2.17.3, 1.4.2) - - - - - 85b4bc15 by Sebastian Méric de Bellefon at 2016-06-06T18:35:13-04:00 Merge pull request haskell/haddock#521 from Helkafen/master Version bumps (2.17.3, 1.4.2) - - - - - e95f0dee by Sebastian Meric de Bellefon at 2016-06-06T19:11:35-04:00 publish haddock-test library - - - - - 4de40586 by Sebastian Méric de Bellefon at 2016-06-06T20:26:30-04:00 Merge pull request haskell/haddock#512 from phadej/oleg-fixes Fixes for haskell/haddock#508 and haskell/haddock#510 - - - - - ddfd0789 by Dominic Steinitz at 2016-06-09T09:27:28+01:00 Documentation for LaTeX markup. - - - - - 697a503a by Dominic Steinitz at 2016-06-09T09:33:59+01:00 Fix spelling mistake. - - - - - 246f6fff by Dominic Steinitz at 2016-06-09T09:37:15+01:00 Camel case MathJax. - - - - - 4684bd23 by Dominic Steinitz at 2016-06-09T09:44:53+01:00 Fix math typo and add link. - - - - - f20c037c by Simon Peyton Jones at 2016-06-13T18:26:03+01:00 Follow changes to LHsSigWcType - - - - - 0c58996d by Simon Peyton Jones at 2016-06-15T12:56:01+01:00 Follow GHC re-adding FunTy - - - - - 401b5ca7 by Sebastian Méric de Bellefon at 2016-06-15T12:16:47-04:00 Merge pull request haskell/haddock#525 from idontgetoutmuch/master Documentation for LaTeX markup. - - - - - 92d263b7 by Sebastian Méric de Bellefon at 2016-06-15T12:17:29-04:00 Merge pull request haskell/haddock#522 from Helkafen/master publish haddock-test library - - - - - 0953a2ca by Sebastian Meric de Bellefon at 2016-06-16T00:46:46-04:00 Copyright holders shown on several lines. Fix haskell/haddock#279 - - - - - 65453e14 by Ben Gamari at 2016-06-16T11:16:32+02:00 ocean: Ensure that synopsis fully covers other content Previously MathJax content was being rendered on top of the synopsis due to ambiguous z-ordering. Here we explicitly give the synopsis block a higher z-index to ensure it is rendered on top. Fixes haskell/haddock#531. - - - - - 68e411a1 by Sebastian Méric de Bellefon at 2016-06-16T23:34:39-04:00 Merge pull request haskell/haddock#534 from bgamari/T531 ocean: Ensure that synopsis fully covers other content - - - - - fad6491b by Sebastian Méric de Bellefon at 2016-06-18T23:57:20-04:00 Merge pull request haskell/haddock#533 from Helkafen/master Copyright holders shown on several lines. Fix haskell/haddock#279 - - - - - 6108e21b by Sebastian Meric de Bellefon at 2016-06-22T23:08:28-04:00 do not create empty src directory Fix haskell/haddock#536. - - - - - 1ef23823 by Sebastian Méric de Bellefon at 2016-06-24T00:04:48-04:00 Merge pull request haskell/haddock#537 from Helkafen/master do not create empty src directory - - - - - 966baa96 by Omari Norman at 2016-06-29T21:59:34-04:00 Add $ as a special character If this character is not escaped, documentation built with Haddock 2.17.2 will fail. This was not an issue with 2.16 series, which causes builds to fail and there is nothing in the docs or error message giving a clue about why builds that used to succeed now don't. - - - - - 324adb60 by Ben Gamari at 2016-07-01T12:18:51+02:00 GhcUtils: Changes for multi-pattern signatures - - - - - d7571675 by Ömer Sinan Ağacan at 2016-07-21T13:30:47+02:00 Add support for unboxed sums - - - - - 29d0907b by Simon Marlow at 2016-07-22T13:55:48+01:00 Disable NFData instances for GHC types when GHC >= 8.2 - - - - - 702d95f3 by Simon Marlow at 2016-08-02T15:57:30+02:00 Disable NFData instances for GHC types when GHC >= 8.0.2 (cherry picked from commit a3309e797c42dae9bccdeb17ce52fcababbaff8a) - - - - - f4fa79c3 by Ben Gamari at 2016-08-07T13:51:18+02:00 ghc.mk: Don't attempt to install html/frames.html The frames business has been removed. - - - - - 9cd63daf by Ben Gamari at 2016-08-07T13:51:40+02:00 Haddock.Types: More precise version guard This allows haddock to be built with GHC 8.0.2 pre-releases. - - - - - f3d7e03f by Mateusz Kowalczyk at 2016-08-29T20:47:45+01:00 Merge pull request haskell/haddock#538 from massysett/master Add $ as a special character - - - - - 16dbf7fd by Bartosz Nitka at 2016-09-20T19:44:04+01:00 Fix rendering of class methods for Eq and Ord See haskell/haddock#549 and GHC issue haskell/haddock#12519 - - - - - 7c31c1ff by Bartosz Nitka at 2016-09-27T17:32:22-04:00 Fix rendering of class methods for Eq and Ord See haskell/haddock#549 and GHC issue haskell/haddock#12519 (cherry picked from commit 073d899a8f94ddec698f617a38d3420160a7fd0b) - - - - - 33a90dce by Ryan Scott at 2016-09-30T20:53:41-04:00 Haddock changes for T10598 See https://ghc.haskell.org/trac/ghc/ticket/10598 - - - - - 1f32f7cb by Ben Gamari at 2016-10-13T20:01:26-04:00 Update for refactoring of NameCache - - - - - 1678ff2e by Ben Gamari at 2016-11-15T17:42:48-05:00 Bump upper bound on base - - - - - 9262a7c5 by Alan Zimmerman at 2016-12-07T21:14:28+02:00 Match changes in GHC wip/T3384 branch - - - - - ac0eaf1a by Ben Gamari at 2016-12-09T09:48:41-05:00 haddock-api: Don't use stdcall calling convention on 64-bit Windows See GHC haskell/haddock#12890. - - - - - 04afe4f7 by Alan Zimmerman at 2016-12-12T20:07:21+02:00 Matching changes for GHC wip/T12942 - - - - - e1d1701d by Ben Gamari at 2016-12-13T16:50:41-05:00 Bump base upper bound - - - - - 3d3eacd1 by Alan Zimmerman at 2017-01-10T16:59:38+02:00 HsIParamTy now has a Located name - - - - - 7dbceefd by Kyrill Briantsev at 2017-01-12T13:23:50+03:00 Prevent GHC API from doing optimization passes. - - - - - d48d1e33 by Richard Eisenberg at 2017-01-19T08:41:41-05:00 Upstream changes re levity polymorphism - - - - - 40c25ed6 by Alan Zimmerman at 2017-01-26T15:16:18+02:00 Changes to match haskell/haddock#13163 in GHC - - - - - 504f586d by Ben Gamari at 2017-02-02T17:19:37-05:00 Kill remaining static flags - - - - - 49147ea0 by Justus Adam at 2017-03-02T15:33:34+01:00 Adding MDoc to exports of Documentation.Haddock - - - - - 1cfba9b4 by Justus Adam at 2017-03-09T11:41:44+01:00 Also exposing toInstalledIface - - - - - 53f0c0dd by Ben Gamari at 2017-03-09T13:10:08-05:00 Bump for GHC 8.3 - - - - - c7902d2e by Ben Gamari at 2017-03-09T23:46:02-05:00 Bump for GHC 8.2 - - - - - 4f3a74f8 by Ben Gamari at 2017-03-10T10:21:55-05:00 Merge branch 'ghc-head' - - - - - e273b72f by Richard Eisenberg at 2017-03-14T13:34:04-04:00 Update Haddock w.r.t. new HsImplicitBndrs - - - - - 6ec3d436 by Richard Eisenberg at 2017-03-14T15:15:52-04:00 Update Haddock w.r.t. new HsImplicitBndrs - - - - - eee3cda1 by Ben Gamari at 2017-03-15T15:19:59-04:00 Adapt to EnumSet - - - - - 017cf58e by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Correctly handle Backpack identity/semantic modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 736d6773 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Add a field marking if interface is a signature or not. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 475f84a0 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Render signature module tree separately from modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 13240b53 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Documentation. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - cd16d529 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 More docs. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 3bea97ae by Edward Z. Yang at 2017-03-15T22:50:46-07:00 TODO on moduleExports. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - b2b051ce by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Better Backpack support with signature merging. When we merge signatures, we gain exports that don't necessarily have a source-level declaration corresponding to them. This meant Haddock dropped them. There are two big limitations: * If there's no export list, we won't report inherited signatures. * If the type has a subordinate, the current hiDecl implementation doesn't reconstitute them. These are probably worth fixing eventually, but this gets us to minimum viable functionality. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 0f082795 by Edward Z. Yang at 2017-03-15T22:50:46-07:00 Fix haddock-test to work with latest version of Cabal. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 20ef63c9 by Edward Z. Yang at 2017-03-22T13:48:12-07:00 Annotate signature docs with (signature) Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 45692dcb by Edward Z. Yang at 2017-03-22T14:11:25-07:00 Render help documentation link next to (signature) in title. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 4eae8caf by Ben Gamari at 2017-03-23T09:25:33-04:00 Merge commit '240bc38b94ed2d0af27333b23392d03eeb615e82' into HEAD - - - - - 0bbe03f5 by Ben Gamari at 2017-03-23T09:27:28-04:00 haddock-api: Bump bound on GHC - - - - - 65f3ac9d by Alex Biehl at 2017-03-23T17:36:11+01:00 Merge pull request haskell/haddock#581 from JustusAdam/master Adding more exports to Documentation.Haddock - - - - - 37d49a47 by Alex Biehl at 2017-03-23T17:39:14+01:00 Merge pull request haskell/haddock#568 from awson/ghc-head Prevent GHC API from doing optimization passes. - - - - - 1ed047e4 by Brian Huffman at 2017-03-23T17:45:58+01:00 Print any user-supplied kind signatures on type parameters. This applies to type parameters on data, newtype, type, and class declarations, and also to forall-bound type vars in type signatures. - - - - - 1b78ca5c by Brian Huffman at 2017-03-23T17:45:58+01:00 Update test suite to expect kind annotations on type parameters. - - - - - a856b162 by Alex Biehl at 2017-03-23T17:49:32+01:00 Include travis build indication badge - - - - - 8e2e2c56 by Ben Gamari at 2017-03-23T17:20:08-04:00 haddock-api: Bump bound on GHC - - - - - 4d2d9995 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Correctly handle Backpack identity/semantic modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 26d6c150b31bc4580ab17cfd07b6e7f9afe10737) - - - - - a650e20f by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Add a field marking if interface is a signature or not. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 930cfbe58e2e87f5a4d431d89a3c204934e6e858) - - - - - caa282c2 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Render signature module tree separately from modules. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 2067a2d0afa9cef381d26fb7140b67c62f433fc0) - - - - - 49684884 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Documentation. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 0671abfe7e8ceae2269467a30b77ed9d9656e2cc) - - - - - 4dcfeb1a by Edward Z. Yang at 2017-03-23T17:20:08-04:00 More docs. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 3d77b373dd5807d5d956719dd7c849a11534fa6a) - - - - - 74dd19d2 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 TODO on moduleExports. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 94610e9b446324f4231fa6ad4c6ac51e4eba8c0e) - - - - - a9b19a23 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Better Backpack support with signature merging. When we merge signatures, we gain exports that don't necessarily have a source-level declaration corresponding to them. This meant Haddock dropped them. There are two big limitations: * If there's no export list, we won't report inherited signatures. * If the type has a subordinate, the current hiDecl implementation doesn't reconstitute them. These are probably worth fixing eventually, but this gets us to minimum viable functionality. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 6cc832dfb1de6088a4abcaae62b25a7e944d55c3) - - - - - d3631064 by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Fix haddock-test to work with latest version of Cabal. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit bf3c4d72a0fda38561376eac7eda216158783267) - - - - - ef2148fc by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Annotate signature docs with (signature) Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 07b88c5d4e79b87a319fbb08f8ea01dbb41063c1) - - - - - 2f29518b by Edward Z. Yang at 2017-03-23T17:20:08-04:00 Render help documentation link next to (signature) in title. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit 4eb765ca4205c79539d60b7afa9b7e261a4a49fe) - - - - - 37de047d by Phil Ruffwind at 2017-04-03T11:57:14+02:00 Update MathJax URL MathJax is shutting down their CDN: https://www.mathjax.org/cdn-shutting-down/ They recommend migrating to cdnjs. - - - - - e9d24ba8 by David C. Turner at 2017-04-03T14:58:01+02:00 Add highlight for :target to ocean.css - - - - - 4819a202 by Alex Biehl at 2017-04-11T19:36:48+02:00 Allow base-4.10 for haddock-test - - - - - 44cec69c by Alex Biehl at 2017-04-11T19:39:22+02:00 cabal.project for haddock-api, haddock-library and haddock-test - - - - - 935d0f6a by Alex Biehl at 2017-04-11T19:46:29+02:00 Move dist scripts to scripts/ - - - - - 128e150c by Alex Biehl at 2017-04-11T20:34:46+02:00 Add haddock to cabal.project - - - - - cc8e08ea by Alex Biehl at 2017-04-11T20:35:08+02:00 Read files for hyperlinker eagerly This also exposes Documentation.Haddock.Utf8 - - - - - 152dda78 by Alex Biehl at 2017-04-11T20:37:06+02:00 Explicit import list ofr Control.DeepSeq in Haddock.Interface.Create - - - - - 501b33c4 by Kyrill Briantsev at 2017-04-11T21:01:42+02:00 Prevent GHC API from doing optimization passes. - - - - - c9f3f5ff by Alexander Biehl at 2017-04-12T16:36:53+02:00 Add @alexbiehl as maintaner - - - - - 76f214cc by Alex Biehl at 2017-04-13T07:27:18+02:00 Disable doctest with ghc-8.3 Currently doctest doesn't support ghc-head - - - - - 46b4f5fc by Edward Z. Yang at 2017-04-22T20:38:26-07:00 Render (signature) only if it actually is a signature! I forgot a conditional, oops! Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - f0555235 by Alex Biehl at 2017-04-25T10:08:48+02:00 Travis: Use ghc-8.2.1 on master - - - - - 966ea348 by Alex Biehl at 2017-04-25T10:32:01+02:00 Travis: Verbose cabal output cf. https://travis-ci.org/haskell/haddock/jobs/225512194#L377 - - - - - 36972bcd by Alex Biehl at 2017-04-25T10:40:43+02:00 Use travis_retry for cabal invocations - - - - - b3a09d2c by Alex Biehl at 2017-04-25T17:02:20+02:00 Use new MathJax URL in html-test 18ed871afb82560d5433b2f53e31b4db9353a74e switched to a new MathJax URL but didn't update the tests. - - - - - ae331e5f by Alexander Biehl at 2017-04-25T17:02:20+02:00 Expand signatures for class declarations - - - - - e573c65a by Alexander Biehl at 2017-04-25T17:02:20+02:00 Hoogle: Correctly print classes with associated data types - - - - - 3fc6be9b by Edward Z. Yang at 2017-04-25T17:02:20+02:00 Render (signature) only if it actually is a signature! I forgot a conditional, oops! Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> (cherry picked from commit a0c4790e15a2d3fab8d830eee8fcd639fe6d39c9) - - - - - 6725c060 by Herbert Valerio Riedel at 2017-04-25T17:02:20+02:00 `html-test --accept` deltas to reference samples - - - - - 7d444d61 by Alex Biehl at 2017-04-26T07:13:50+02:00 Remove anything related to obsolete frames mode - - - - - b888972c by Alex Biehl at 2017-04-26T07:49:10+02:00 Cherry-picked remaining commits from haddock-2.17.4-release (#603) * Release haddock/haddock-api 2.17.4 and haddock-library 1.4.3 * Set version bounds for haddock-library NB: This allows GHC 8.2.1's base * Set version bounds for haddock & haddock-api The version bounds support GHC 8.2 * Merge (temporary) v2.17.3 branch into v2.17 This allows us to delete the v2.17.3 branch * Fixup changelog * Pin down haddock-api to a single version as otherwise `haddock`'s package version has no proper meaning * fix source-repo spec for haddock-api - - - - - 4161099b by Alex Biehl at 2017-04-26T11:11:20+02:00 Update changelog to reflect news in HEAD - - - - - eed72cb8 by Alex Biehl at 2017-04-26T11:11:20+02:00 Markdownify changelog - - - - - 5815cea1 by Alex Biehl at 2017-04-26T11:32:33+02:00 Bump to 2.18.0 (#605) - - - - - a551d558 by Alex Biehl at 2017-04-29T22:00:25+02:00 Update attoparsec-0.12.1.1 to attoparsec-0.13.1.0 - - - - - ea164a8d by Sergey Vinokurov at 2017-04-29T22:42:36+02:00 Improve error message - - - - - 2e10122f by Alex Biehl at 2017-04-30T10:07:46+02:00 Correctly remember collapsed sections (#608) Now the "collapsed" cookie stores which sections have changed state instead of which are collapsed. - - - - - f9b24d99 by Alex Biehl at 2017-05-01T17:40:36+02:00 Lazily decode docMap and argMap (#610) These are only used in case of a doc reexport so most of the time decoding these is wasted work. - - - - - 2372af62 by Alex Biehl at 2017-05-01T21:59:23+02:00 Fix Binary instance for InstalledInterface (#611) (#610) introduced lazy decoding for docs from InstalledInterface but forgot to remove the original calls to get and put_ - - - - - 6c633c13 by Nathan Collins at 2017-05-11T11:47:55+02:00 Improve documenation of Haddock markup (#614) * Improve documentation of Haddock markup. - document that Haddock supports inferring types top-level functions with without type signatures, but also explain why using this feature is discouraged. Looks like this feature has been around since version 2.0.0.0 in 2008! - rework the "Module description" section: - move the general discussion of field formatting to the section intro and add examples illustrating the prose for multiline fields. - mention that newlines are preserved in some multiline fields, but not in others (I also noticed that commas in the `Copyright` field are not preserved; I'll look into this bug later). - add a subsection for the module description fields documentation, and put the field keywords in code formatting (double back ticks) instead of double quotes, to be consistent with the typesetting of keywords in other parts of the documentation. - mention that "Named chunks" are not supported in the long-form "Module description" documentation. - fix formatting of keywords in the "Module attributes" section. Perhaps these errors were left over from an automatic translation to ReST from some other format as part of the transition to using Sphinx for Haddock documentation? Also, add a missing reference here; it just said "See ?"! - update footnote about special treatment for re-exporting partially imported modules not being implemented. In my tests it's not implemented at all -- I tried re-exporting both `import B hiding (f)` and `import B (a, b)` style partial imports, and in both cases got the same result as with full imports `import B`: I only get a module reference. * Rework the `Controlling the documentation structure` section. My main goal was to better explain how to use Haddock without an export list, since that's my most common use case, but I hope I improved the section overall: - remove the incomplete `Omitting the export list` section and fold it into the other sections. In particular, summarize the differences between using and not using an export list -- i.e. control over what and in what order is documented -- in the section lead. - add "realistic" examples that use the structure markup, both with and without an export list. I wanted a realistic example here to capture how it can be useful to explain the relationship between a group of functions in a section, in addition to documenting their individual APIs. - make it clear that you can associate documentation chunks with documentation sections when you aren't using an export list, and that doing it in the most obvious way -- i.e. with `-- |`, as you can in the export list -- doesn't work without an export list. It took me a while to figure this out the first time, since the docs didn't explain it at all before. - add a "no export list" example to the section header section. - add more cross references. * Add examples of gotchas for markup in `@...@`. I'm not sure this will help anyone, since I think most people first learn about `@...@` by reading other people's Haddocks, but I've documented the mistakes which I've made and then gotten confused by. * Use consistent Capitalization of Titles. Some titles were in usual title caps, and others only had the first word capitalized. I chose making them all use title caps because that seems to make the cross references look better. - - - - - d4734f45 by Ben Gamari at 2017-05-12T20:36:08+02:00 Haddock: Fix broken lazy IO in prologue reading (#615) We previously used withFile in conjunction with hGetContents. The list returned by the latter wasn't completely forced by the time we left the withFile block, meaning that we would try to read from a closed handle. - - - - - 93883f37 by Alex Biehl at 2017-05-12T21:02:33+02:00 Haddock: Fix broken lazy IO in prologue reading (#615) We previously used withFile in conjunction with hGetContents. The list returned by the latter wasn't completely forced by the time we left the withFile block, meaning that we would try to read from a closed handle. - - - - - 5b8f179c by Alex Biehl at 2017-05-13T12:48:10+02:00 Consequently use inClass and notInClass in haddock-library (#617) These allow attoparsec to do some clever lookup optimization - - - - - 77984b82 by Doug Wilson at 2017-05-27T17:37:38+02:00 Don't enable compilation for template haskell (#624) This is no longer necessary after ghc commit 53c78be0aab76a3107c4dacbb1d177afacdd37fa - - - - - 5a3de2b4 by Doug Wilson at 2017-05-27T19:54:53+02:00 Improve Syb code (#621) Specialize.hs and Ast.hs are modified to have their Syb code not recurse into Name or Id in HsSyn types. Specialize.hs is refactored to have fewer calls to Syb functions. Syb.hs has some foldl calls replaced with foldl' calls. There is still a lot of performance on the floor of Ast.hs. The RenamedSource is traversed many times, and lookupBySpan is very inefficient. everywhereBut and lookupBySpan dominate the runtime whenever --hyperlinked-source is passed. - - - - - 3d35a949 by Alex Biehl at 2017-05-30T19:01:37+02:00 Clear fixme comment (#625) - - - - - 2a44bd0c by Alex Biehl at 2017-05-30T19:02:12+02:00 Make haddock-library and haddock-api warning free (#626) - - - - - bd1a0e42 by Alex Biehl at 2017-06-01T10:40:33+02:00 Include `driver-test/*.hs` sdist (#630) This lead to haskell/haddock#629. - - - - - 184a3ab6 by Doug Wilson at 2017-06-03T12:02:08+02:00 Disable pattern match warnings (#628) This disables the pattern match checker which can be very expensive in some cases. The disabled warnings include: * Opt_WarnIncompletePatterns * Opt_WarnIncompleteUniPatterns * Opt_WarnIncompletePatternsRecUpd * Opt_WarnOverlappingPatterns - - - - - 0cf68004 by Alex Biehl at 2017-06-03T20:37:28+02:00 Allow user defined signatures for pattern synonyms (#631) - - - - - 7f51a58a by Alex Biehl at 2017-06-04T11:56:38+02:00 Use NameSet for isExported check (#632) - - - - - d8f044a9 by Alan Zimmerman at 2017-06-05T22:26:55+02:00 Match new AST as per GHC wip/new-tree-one-param See https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow - - - - - da1254e3 by Alan Zimmerman at 2017-06-05T22:26:55+02:00 Rename extension index tags - - - - - 538c7514 by Christiaan Baaij at 2017-06-09T08:26:43+02:00 Haddock support for bundled pattern synonyms (#627) * Haddock support for bundled pattern synonyms * Add fixities to bundled pattern synonyms * Add bundled pattern synonyms to the synopsis * Store bundled pattern fixities in expItemFixities * Add test for bundled pattern synonyms * Stop threading fixities * Include bundled pattern synonyms for re-exported data types Sadly, fixity information isn't found for re-exported data types * Support for pattern synonyms * Modify tests after haskell/haddock#631 * Test some reexport variations * Also lookup bundled pattern synonyms from `InstalledInterface`s * Check isExported for bundled pattern synonyms * Pattern synonym is exported check * Always look for pattern synonyms in the current module Another overlooked cornercase * Account for types named twice in export lists Also introduce a fast function for nubbing on a `Name` and use it throughout the code base. * correct fixities for reexported pattern synonyms * Fuse concatMap and map * Remove obsolete import * Add pattern synonyms to visible exports * Fix test * Remove corner case - - - - - a050bffd by Doug Wilson at 2017-06-21T09:27:33+02:00 Use new function getNameToInstancesIndex instead of tcRnGetInfo (#636) There is some performance improvement. GHC compiler: | version | bytes allocated | cpu_seconds --------------------------------- | before | 56057108648 | 41.0 | after | 51592019560 | 35.1 base: | version | bytes allocated | cpu_seconds --------------------------------- | before | 25174011784 | 14.6 | after | 23712637272 | 13.1 Cabal: | version | bytes allocated | cpu_seconds --------------------------------- | before | 18754966920 | 12.6 | after | 18198208864 | 11.6 - - - - - 5d06b871 by Doug Wilson at 2017-06-22T20:23:29+02:00 Use new function getNameToInstancesIndex instead of tcRnGetInfo (#639) * Use new function getNameToInstancesIndex instead of tcRnGetInfo There is some significant performance improvement in the ghc testsuite. haddock.base: -23.3% haddock.Cabal: -16.7% haddock.compiler: -19.8% * Remove unused imports - - - - - b11bb73a by Alex Biehl at 2017-06-23T14:44:41+02:00 Lookup fixities for reexports without subordinates (#642) So we agree that reexported declarations which do not have subordinates (for example top-level functions) shouldn't have gotten fixities reexported according to the current logic. I wondered why for example Prelude.($) which is obviously reexported from GHC.Base has fixities attached (c.f. http://hackage.haskell.org/package/base-4.9.1.0/docs/Prelude.html#v:-36-). The reason is this: In mkMaps we lookup all the subordinates of top-level declarations, of course top-level functions don't have subordinates so for them the resulting list is empty. In haskell/haddock#644 I established the invariant that there won't be any empty lists in the subordinate map. Without the patch from haskell/haddock#642 top-level functions now started to fail reexporting their fixities. - - - - - d2a6dad6 by Alex Biehl at 2017-06-23T18:30:45+02:00 Don't include names with empty subordinates in maps (#644) These are unecessary anyway and just blow up interface size - - - - - 69c2aac4 by Alex Biehl at 2017-06-29T19:54:49+02:00 Make per-argument docs for class methods work again (#648) * Make per-argument docs for class methods work again * Test case - - - - - c9448d54 by Bartosz Nitka at 2017-07-02T12:12:01+02:00 Fix haddock: internal error: links: UnhelpfulSpan (#561) * Fix haddock: internal error: links: UnhelpfulSpan This fixes haskell/haddock#554 for me. I believe this is another fall out of `wildcard-refactor`, like haskell/haddock#549. * Comment to clarify why we take the methods name location - - - - - d4f29eb7 by Alex Biehl at 2017-07-03T19:43:04+02:00 Document record fields when DuplicateRecordFields is enabled (#649) - - - - - 9d6e3423 by Yuji Yamamoto at 2017-07-03T22:37:58+02:00 Fix test failures on Windows (#564) * Ignore .stack-work * Fix for windows: use nul instead of /dev/null * Fix for windows: canonicalize line separator * Also normalize osx line endings - - - - - 7d81e8b3 by Yuji Yamamoto at 2017-07-04T16:13:12+02:00 Avoid errors on non UTF-8 Windows (#566) * Avoid errors on non UTF-8 Windows Problem ==== haddock exits with errors like below: `(1)` ``` haddock: internal error: <stderr>: hPutChar: invalid argument (invalid character) ``` `(2)` ``` haddock: internal error: Language\Haskell\HsColour\Anchors.hs: hGetContents: invalid argument (invalid byte sequence) ``` `(1)` is caused by printing [the "bullet" character](http://www.fileformat.info/info/unicode/char/2022/index.htm) onto stderr. For example, this warning contains it: ``` Language\Haskell\HsColour\ANSI.hs:62:10: warning: [-Wmissing-methods] • No explicit implementation for ‘toEnum’ • In the instance declaration for ‘Enum Highlight’ ``` `(2)` is caused when the input file of `readFile` contains some Unicode characters. In the case above, '⇒' is the cause. Environment ---- OS: Windows 10 haddock: 2.17.3 GHC: 8.0.1 Solution ==== Add `hSetEncoding handle utf8` to avoid the errors. Note ==== - I found the detailed causes by these changes for debugging: - https://github.com/haskell/haddock/commit/8f29edb6b02691c1cf4c479f6c6f3f922b35a55b - https://github.com/haskell/haddock/commit/1dd23bf2065a1e1f2c14d0f4abd847c906b4ecb4 - These errors happen even after executing `chcp 65001` on the console. According to the debug code, `hGetEncoding stderr` returns `CP932` regardless of the console encoding. * Avoid 'internal error: <stderr>: hPutChar: invalid argument (invalid character)' non UTF-8 Windows Better solution for 59411754a6db41d17820733c076e6a72bcdbd82b's (1) - - - - - eded67d2 by Alex Biehl at 2017-07-07T19:17:15+02:00 Remove redudant import warning (#651) - - - - - 05114757 by Alex Biehl at 2017-07-08T00:33:12+02:00 Avoid missing home module warning (#652) * Avoid missing home module warning * Update haddock-library.cabal - - - - - e9cfc902 by Bryn Edwards at 2017-07-17T07:51:20+02:00 Fix haskell/haddock#249 (#655) - - - - - eb02792b by Herbert Valerio Riedel at 2017-07-20T09:09:15+02:00 Fix compilation of lib:haddock-library w/ GHC < 8 - - - - - 9200bfbc by Alex Biehl at 2017-07-20T09:20:38+02:00 Prepare 2.18.1 release (#657) - - - - - 46ddd22c by Herbert Valerio Riedel at 2017-07-20T10:05:14+02:00 Tweak haddock-api.cabal for pending release - - - - - 85e33d29 by Herbert Valerio Riedel at 2017-07-20T10:05:14+02:00 Avoid trivial use of LambdaCase otherwise we can't test w/ e.g. GHC 7.4.2 - - - - - 3afb4bfe by Herbert Valerio Riedel at 2017-07-20T10:05:14+02:00 Refactor .cabal to use sub-lib for vendored lib A practical benefit is that we can control the build-depends and also avoid some recompilation between library and test-suite. - - - - - e56a552e by Herbert Valerio Riedel at 2017-07-20T10:17:48+02:00 haddock-api: add changelog pointing to haddock's changelog This addresses https://github.com/haskell/haddock/issues/638#issuecomment-309283297 - - - - - 2222ff0d by Herbert Valerio Riedel at 2017-07-20T10:19:56+02:00 Drop obsolete/misleading `stability: experimental` This .cabal property has long been considered obsolete - - - - - 9b882905 by Alex Biehl at 2017-07-20T11:25:54+02:00 Beef up haddock description (#658) * Beef up haddock description * Handle empty lines - - - - - bb60e95c by Herbert Valerio Riedel at 2017-07-20T12:08:53+02:00 Import @aisamanra's Haddock cheatsheet from https://github.com/aisamanra/haddock-cheatsheet - - - - - 0761e456 by Herbert Valerio Riedel at 2017-07-20T12:12:55+02:00 Add cheatsheet to haddock.cabal - - - - - 2ece0f0f by Herbert Valerio Riedel at 2017-07-20T12:18:38+02:00 Mention new-build in README - - - - - 947b7865 by Herbert Valerio Riedel at 2017-07-20T12:32:16+02:00 Update README Also improves markup and removes/fixes redundant/obsolete parts [skip ci] - - - - - 785e09ad by Alex Biehl at 2017-07-27T07:28:57+02:00 Bump haddock to 2.18.2, haddock-library to 1.4.5 - - - - - e3ff1ca3 by Alex Biehl at 2017-07-31T20:15:32+02:00 Move `DocMarkup` from haddock-api to haddock-library (#659) * Move `DocMarkup` from haddock-api to haddock-library * Move more markup related functions * Markup module * CHANGELOG - - - - - cda7c20c by Alex Biehl at 2017-07-31T20:35:49+02:00 Fixup haddock - - - - - 583b6812 by Alex Biehl at 2017-07-31T21:20:45+02:00 Changelog for haddock-library - - - - - bac6a0eb by Alex Biehl at 2017-07-31T21:50:24+02:00 Prepare haddock-library-1.4.5 release - - - - - 58ce6877 by Moritz Drexl at 2017-08-05T16:44:40+02:00 Fix renaming after instance signature specializing (#660) * rework rename * Add regression test for Bug 613 * update tests * update changelog - - - - - b8137ec8 by Tim Baumann at 2017-08-06T11:33:38+02:00 Fix: Generate pattern signatures for constructors exported as patterns (#663) * Fix pretty-printing of pattern signatures Pattern synonyms can have up to two contexts, both having a different semantic meaning: The first holds the constraints required to perform the matching, the second contains the constraints provided by a successful pattern match. When the first context is empty but the second is not it is necessary to render the first, empty context. * Generate pattern synonym signatures for ctors exported as patterns This fixes haskell/haddock#653. * Simplify extractPatternSyn It is not necessary to generate the simplest type signature since it will be simplified when pretty-printed. * Add changelog entries for PR haskell/haddock#663 * Fix extractPatternSyn error message - - - - - d037086b by Alex Biehl at 2017-08-06T12:43:25+02:00 Bump haddock-library - - - - - 99d7e792 by Alex Biehl at 2017-08-06T12:44:07+02:00 Bump haddock-library in haddock-api - - - - - 94802a5b by Alex Biehl at 2017-08-06T13:18:02+02:00 Provide --show-interface option to dump interfaces (#645) * WIP: Provide --show-interface option to dump interfaces Like ghcs own --show-iface this flag dumps a binary interface file to stdout in a human (and machine) readable fashion. Currently it uses json as output format. * Fill all the jsonNull stubs * Rework Bifunctor instance of DocH, update changelog and documentation * replace changelog, bring DocMarkupH doc back * Update CHANGES.md * Update CHANGES.md * Move Control.Arrow up It would result in unused import if the Bifunctor instance is not generated. - - - - - c662e476 by Ryan Scott at 2017-08-14T21:00:21-04:00 Adapt to haskell/haddock#14060 - - - - - b891eb73 by Alex Biehl at 2017-08-16T08:24:48+02:00 Bifoldable and Bitraversable for DocH and MetaDoc - - - - - 021bb56c by Alex Biehl at 2017-08-16T09:06:40+02:00 Refactoring: Make doc renaming monadic This allows us to later throw warnings if can't find an identifier - - - - - 39fbf022 by Alex Biehl at 2017-08-19T20:35:27+02:00 Hyperlinker: Avoid linear lookup in enrichToken (#669) * Make Span strict in Position * Hyperlinker: Use a proper map to enrich tokens - - - - - e13baedd by Alex Biehl at 2017-08-21T20:05:42+02:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 27dd6e87 by Alex Biehl at 2017-08-21T22:06:35+02:00 Drop Avails from export list - - - - - 86b247e2 by Alex Biehl at 2017-08-22T08:44:22+02:00 Bump ghc version for haddock-api tests - - - - - d4607ca0 by Alex Biehl at 2017-08-22T08:45:17+02:00 Revert "Drop Avails from export list" This reverts commit a850ba86d88a4fb9c0bd175453a2580e544e3def. - - - - - c9c54c30 by Alex Biehl at 2017-08-22T09:26:01+02:00 IntefaceFile version - - - - - a85b7c02 by Ben Gamari at 2017-08-22T09:29:52-04:00 haddock: Add Documentation.Haddock.Markup to other-modules - - - - - 34e976f5 by Ben Gamari at 2017-08-22T17:40:06+02:00 haddock: Add Documentation.Haddock.Markup to other-modules - - - - - 577abf06 by Ryan Scott at 2017-08-23T14:47:29-04:00 Update for haskell/haddock#14131 - - - - - da68fc55 by Florian Eggenhofer at 2017-08-27T18:21:56+02:00 Generate an index for package content search (#662) Generate an index for package content search - - - - - 39e62302 by Alex Biehl at 2017-08-27T18:50:16+02:00 Content search for haddock html doc - - - - - 91fd6fb2 by Alex Biehl at 2017-08-28T18:39:58+02:00 Fix tests for content search - - - - - b4a3798a by Alex Biehl at 2017-08-28T18:44:08+02:00 Add search button to #page-menu - - - - - 25a7ca65 by Alex Biehl at 2017-08-28T18:47:43+02:00 Load javascript below the fold - - - - - 8d323c1a by Alex Biehl at 2017-08-28T18:49:22+02:00 Accept tests - - - - - c5dac557 by Alex Biehl at 2017-08-28T19:14:55+02:00 Content search css - - - - - 89a5af57 by Paolo Veronelli at 2017-08-29T07:42:13+02:00 Removed `nowrap` for interface method sigs (#674) with nowrap the interfaces method sigs would expand at libitum - - - - - a505f6f7 by Alex Biehl at 2017-08-29T08:05:33+02:00 Include subordinates in content index - - - - - 4bb698c4 by Alexander Biehl at 2017-08-29T11:40:19+02:00 QuickNav: Make docbase configurable - - - - - c783bf44 by Alexander Biehl at 2017-08-29T11:48:36+02:00 QuickNav: Also use baseUrl for doc-index.json request - - - - - 47017510 by Alex Biehl at 2017-08-29T17:56:47+02:00 Fix test fallout (again) - - - - - 924fc318 by Alex Biehl at 2017-08-30T09:24:56+02:00 Write meta.json when generating html output (#676) - - - - - 717dea52 by Alex Biehl at 2017-09-01T09:20:34+02:00 Use relative URL when no docBaseUrl given - - - - - e5d85f3b by Alex Biehl at 2017-09-01T09:35:19+02:00 Add missing js files to data-files (#677) - - - - - 95b9231a by Alex Biehl at 2017-09-01T11:01:36+02:00 Rename "Search" tab to "Quick Jump" - - - - - da0ead0b by Alex Biehl at 2017-09-01T13:03:49+02:00 Make trigger link configurable (#678) QuickNav: Configurable show/hide trigger - - - - - de7da594 by Ben Gamari at 2017-09-05T06:49:55-04:00 Account for "Remember the AvailInfo for each IE" As of GHC commit f609374a55bdcf3b79f3a299104767aae2ffbf21 GHC retains the AvailInfo associated with each IE. @alexbiehl has a patch making proper use of this change, but this is just to keep things building. - - - - - b05cd3b3 by Ben Gamari at 2017-09-14T07:55:07-04:00 Bump upper bound on base - - - - - 79db899e by Herbert Valerio Riedel at 2017-09-21T23:27:52+02:00 Make compatible with Prelude.<> export in GHC 8.4/base-4.11 - - - - - 3405dd52 by Tim Baumann at 2017-09-23T22:02:01+02:00 Add compile step that bundles and compresses JS files (#684) * Add compile step that bundles and compresses JS files Also, manage dependencies on third-party JS libraries using NPM. * Compile JS from TypeScript * Enable 'noImplicitAny' in TypeScript * QuickJump: use JSX syntax * Generate source maps from TypeScript for easier debugging * TypeScript: more accurate type * Separate quick jump css file from ocean theme - - - - - df0b5742 by Alex Biehl at 2017-09-29T21:15:40+02:00 Bump base for haddock-library and haddock-test - - - - - 62b12ea0 by Merijn Verstraaten at 2017-10-04T16:03:13+02:00 Inhibit output of coverage information for hidden modules. (#687) * Inhibit output of coverage information for hidden modules. * Add changelog entry. - - - - - 8daf8bc1 by Alexander Biehl at 2017-10-05T11:27:05+02:00 Don't use subMap in attachInstances - - - - - ad75114e by Alexander Biehl at 2017-10-05T11:27:58+02:00 Revert "Don't use subMap in attachInstances" This reverts commit 3adf5bcb1a6c5326ab33dc77b4aa229a91d91ce9. - - - - - 7d4aa02f by Alex Biehl at 2017-10-08T15:32:28+02:00 Precise Haddock: Use Avails for export resolution (#688) * Use Avails for export resolution * Support reexported modules * Factor out availExportItem * Use avails for fullModuleExports * Don't use subMap in attachInstances * lookupDocs without subMap * Completely remove subMap * Only calculate unqualified modules when explicit export list is given * Refactor * Refine comment * return * Fix * Refactoring * Split avail if declaration is not exported itself * Move avail splitting - - - - - b9b4faa8 by Alex Biehl at 2017-10-08T19:38:21+02:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 43325295 by Alex Biehl at 2017-10-08T20:18:46+02:00 Fix merge fallout - - - - - c6423cc0 by Alex Biehl at 2017-10-08T20:36:12+02:00 Copy QuickJump files over - - - - - 1db587c3 by Tim Baumann at 2017-10-09T18:33:09+02:00 Use <details> element for collapsibles (#690) * Remove unnecessary call to 'collapseSection' The call is unnecessary since there is no corresponding toggle for hiding the section of orphan instances. * Use <details> for collapsibles This makes them work even when JS is disabled. Closes haskell/haddock#560. - - - - - 1b54c64b by Tim Baumann at 2017-10-10T09:50:59+02:00 Quick Jump: Show error when loading 'doc-index.json' failed (#691) - - - - - 910f716d by Veronika Romashkina at 2017-10-24T07:36:20+02:00 Fix tiny typo in docs (#693) - - - - - b21de7e5 by Ryan Scott at 2017-10-24T13:07:15+02:00 Overhaul Haddock's rendering of kind signatures (#681) * Overhaul Haddock's rendering of kind signatures * Strip off kind signatures when specializing As an added bonus, this lets us remove an ugly hack specifically for `(->)`. Yay! * Update due to 0390e4a0f61e37bd1dcc24a36d499e92f2561b67 * @alexbiehl's suggestions * Import injectiveVarsOfBinder from GHC - - - - - 6704405c by Ryan Scott at 2017-10-28T07:10:27+02:00 Fix Haddock rendering of kind-indexed data family instances (#694) - - - - - 470f6b9c by Alex Biehl at 2017-10-30T08:45:51+01:00 Add QuickJump version to meta.json (#696) - - - - - b89eccdf by Alex Biehl at 2017-10-30T10:15:49+01:00 Put Quickjump behind --quickjump flag (#697) - - - - - 3095fb58 by Alex Biehl at 2017-10-30T19:09:06+01:00 Add build command to package.json - - - - - f223fda9 by Alex Biehl at 2017-10-30T19:10:39+01:00 Decrease threshold for fuzzy matching - - - - - 80245dda by Edward Z. Yang at 2017-10-31T20:35:05+01:00 Supported reexported-modules via --reexport flag. Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu> - - - - - 7e389742 by Alex Biehl at 2017-10-31T20:37:56+01:00 Correct missing title in changelog - - - - - 1a2a1c03 by Alex Biehl at 2017-10-31T20:59:07+01:00 Copy quickjump.css for nicer error messages - - - - - db234bb9 by Alex Biehl at 2017-10-31T21:31:18+01:00 Reexported modules: Report warnings if argument cannot be parsed or ... module cannot be found - - - - - eea8a205 by Carlo Hamalainen at 2017-10-31T21:43:14+01:00 More general type for nameCacheFromGhc. (#539) - - - - - 580eb42a by Alex Biehl at 2017-10-31T21:46:52+01:00 Remote tab - - - - - 0e599498 by Alex Biehl at 2017-10-31T21:48:55+01:00 Merge remote-tracking branch 'origin/master' into ghc-head - - - - - 7b8539bb by Alex Biehl at 2017-10-31T22:28:34+01:00 fullModuleContents traverses exports in declaration order - - - - - 0c91fbf2 by Alex Biehl at 2017-10-31T22:32:31+01:00 Remove excessive use of list comprehensions - - - - - f7356e02 by Alex Biehl at 2017-11-01T19:11:03+01:00 Make better use of AvailInfo - - - - - f3e512d5 by Alex Biehl at 2017-11-02T12:16:22+01:00 Always return documentation for exported subordinates ... event if they have no documentation (e.g. noDocForDecl) By using the information in the AvailInfo we don't need additional export checks. - - - - - 7cf58898 by Alan Zimmerman at 2017-11-07T08:28:03+02:00 Match changes for Trees that Grow in GHC - - - - - e5105a41 by Alan Zimmerman at 2017-11-08T17:21:58+02:00 Match Trees That Grow - - - - - 55178266 by Alan Zimmerman at 2017-11-11T22:20:31+02:00 Match Trees that Grow in GHC for HsExpr - - - - - 2082ab02 by Ryan Scott at 2017-11-14T15:27:03+01:00 Actually render infix type operators as infix (#703) * Actually render infix type operators as infix * Account for things like `(f :*: g) p`, too - - - - - c52ab7d0 by Alan Zimmerman at 2017-11-14T23:14:26+02:00 Clean up use of PlaceHolder, to match TTG - - - - - 81cc9851 by Moritz Angermann at 2017-11-20T07:52:49+01:00 Declare use of `Paths_haddock` module in other-modules (#705) This was detected by `-Wmissing-home-modules` - - - - - f9d27598 by Moritz Angermann at 2017-11-20T12:47:34+01:00 Drop Paths_haddock from ghc.mk (#707) With haskell/haddock#705 and haskell/haddock#706, the custom addition should not be necessary any more. # Conflicts: # ghc.mk - - - - - f34818dc by Moritz Angermann at 2017-11-20T12:47:59+01:00 Add autogen-modules (#706) > Packages using 'cabal-version: >= 1.25' and the autogenerated module Paths_* must include it also on the 'autogen-modules' field besides 'exposed-modules' and 'other-modules'. This specifies that the module does not come with the package and is generated on setup. Modules built with a custom Setup.hs script also go here to ensure that commands like sdist don't fail. # Conflicts: # haddock.cabal - - - - - bb43a0aa by Ben Gamari at 2017-11-21T15:50:12-05:00 Revert "Clean up use of PlaceHolder, to match TTG" This reverts commit 134a7bb054ea730b13c8629a76232d73e3ace049. - - - - - af9ebb2b by Ben Gamari at 2017-11-21T15:50:14-05:00 Revert "Match Trees that Grow in GHC for HsExpr" This reverts commit 9f054dc365379c66668de6719840918190ae6e44. - - - - - 5d35c3af by Ben Gamari at 2017-11-21T15:50:15-05:00 Revert "Match Trees That Grow" This reverts commit 73a26af844ac50b8bec39de11d64452a6286b00c. - - - - - 99a8e43b by Ben Gamari at 2017-11-21T16:36:06-05:00 Revert "Match changes for Trees that Grow in GHC" This reverts commit 01eeeb048acd2dd05ff6471ae148a97cf0720547. - - - - - c4d650c2 by Ben Gamari at 2017-12-04T15:06:07-05:00 Bump GHC version - - - - - 027b2274 by Ben Gamari at 2017-12-04T17:06:31-05:00 Bump GHC bound to 8.4.* - - - - - 58eaf755 by Alex Biehl at 2017-12-06T15:44:24+01:00 Update changelog - - - - - d68f5584 by Simon Peyton Jones at 2017-12-07T14:39:56+00:00 Track changes to follow Trac haskell/haddock#14529 This tracks the refactoring of HsDecl.ConDecl. - - - - - dc519d6b by Alec Theriault at 2018-01-06T08:20:43-08:00 Pass to GHC visible modules for instance filtering The GHC-side `getNameToInstancesIndex` filters out incorrectly some instances because it is not aware of what modules are visible. On the Haddock side, we need to pass in the modules we are processing. On the GHC side, we need to check against _those_ modules when checking if an instance is visible. - - - - - 8285118c by Alec Theriault at 2018-01-13T12:12:37+01:00 Constructor and pattern synonym argument docs (#709) * Support Haddocks on constructor arguments This is in conjunction with https://phabricator.haskell.org/D4094. Adds support for rendering Haddock's on (non-record) constructor arguments, both for regular and GADT constructors. * Support haddocks on pattern synonym arguments It appears that GHC already parsed these - we just weren't using them. In the process of doing this, I tried to deduplicate some code around handling patterns. * Update the markup guide Add some information about the new support for commenting constructor arguments, and mention pattern synonyms and GADT-style constructors. * Overhaul LaTeX support for data/pattern decls This includes at least * fixing several bugs that resulted in invalid LaTeX * fixing GADT data declaration headers * overhaul handling of record fields * overhaul handling of GADT constructors * overhaul handling of bundled patterns * add support for constructor argument docs * Support GADT record constructors This means changes what existing HTML docs look like. As for LaTeX, looks like GADT records were never even supported. Now they are. * Clean up code/comments Made code/comments consistent between the LaTeX and XHTML backend when possible. * Update changelog * Patch post-rebase regressions * Another post-rebase change We want return values to be documentable on record GADT constructors. - - - - - ca4fabb4 by Alec Theriault at 2018-01-15T17:12:18-08:00 Update the GblRdrEnv when processing modules Without a complete environment, we will miss some instances that were encountered during typechecking. - - - - - 4c472fea by Ryan Scott at 2018-01-19T10:44:02+01:00 Fix haskell/haddock#732 (#733) - - - - - bff14dbd by Alex Biehl at 2018-01-19T15:33:30+01:00 extractDecl: Extract associated types correctly (#736) - - - - - a2a94a73 by Alex Biehl at 2018-01-19T15:34:40+01:00 extractDecl: Extract associated types correctly (#736) - - - - - 26df93dc by Alex Biehl at 2018-01-20T10:18:22+01:00 haddock-api: bump ghc to ^>= 8.4 - - - - - f65aeb1d by Alex Biehl at 2018-01-20T19:18:20+01:00 Fix duplicate declarations and TypeFamilies specifics - - - - - 0e721b97 by Alex Biehl at 2018-01-20T19:20:19+01:00 Fix duplicate declarations and TypeFamilies specifics - - - - - cb6234f6 by Ben Gamari at 2018-01-26T13:40:55-05:00 Merge remote-tracking branch 'harpocrates/fix/missing-orphan-instances' into ghc-head - - - - - 0fc28554 by Alec Theriault at 2018-02-01T14:58:18+01:00 Pass to GHC visible modules for instance filtering The GHC-side `getNameToInstancesIndex` filters out incorrectly some instances because it is not aware of what modules are visible. On the Haddock side, we need to pass in the modules we are processing. On the GHC side, we need to check against _those_ modules when checking if an instance is visible. - - - - - b9123772 by Alec Theriault at 2018-02-01T14:58:18+01:00 Update the GblRdrEnv when processing modules Without a complete environment, we will miss some instances that were encountered during typechecking. - - - - - 0c12e274 by Ryan Scott at 2018-02-01T14:58:18+01:00 Fix haskell/haddock#548 by rendering datatype kinds more carefully (#702) - - - - - 8876d20b by Alec Theriault at 2018-02-01T14:58:18+01:00 Use the GHC lexer for the Hyperlinker backend (#714) * Start changing to use GHC lexer * better cpp * Change SrcSpan to RealSrcSpan * Remove error * Try to stop too many open files * wip * wip * Revert "wip" This reverts commit b605510a195f26315e3d8ca90e6d95a6737553e1. Conflicts: haddock-api/haddock-api.cabal haddock-api/src/Haddock/Interface.hs * Remove pointless 'caching' * Use dlist rather than lists when finding vars * Use a map rather than list * Delete bogus comment * Rebase followup Things now run using the GHC lexer. There are still - stray debug statements - unnecessary changes w.r.t. master * Cleaned up differences w.r.t. current Haddock HEAD Things are looking good. quasiquotes in particular look beautiful: the TH ones (with Haskell source inside) colour/link their contents too! Haven't yet begun to check for possible performance problems. * Support CPP and top-level pragmas The support for these is hackier - but no more hacky than the existing support. * Tests pass, CPP is better recognized The tests were in some cases altered: I consider the new output to be more correct than the old one.... * Fix shrinking of source without tabs in test * Replace 'Position'/'Span' with GHC counterparts Replaces 'Position' -> 'GHC.RealSrcLoc' and 'Span' -> 'GHC.RealSrcSpan'. * Nits * Forgot entry in .cabal * Update changelog - - - - - 95c6a771 by Alec Theriault at 2018-02-01T14:58:18+01:00 Clickable anchors for headings (#716) See haskell/haddock#579. This just adds an <a> tag around the heading, pointing to the heading itself. - - - - - 21463d28 by Alex Biehl at 2018-02-01T14:58:18+01:00 Quickjump: Matches on function names weight more than matches in ... module names. - - - - - 8023af39 by Alex Biehl at 2018-02-01T14:58:18+01:00 Treat escaped \] better in definition lists (#717) This fixes haskell/haddock#546. - - - - - e4866dc1 by Alex Biehl at 2018-02-01T14:58:18+01:00 Remove scanner, takeWhile1_ already takes care of escaping - - - - - 9bcaa49d by Alex Biehl at 2018-02-01T14:58:18+01:00 Take until line feed - - - - - 01d2af93 by Oleg Grenrus at 2018-02-01T14:58:18+01:00 Add simple framework for running parser fixtures (#668) * Add simple framework for running parser fixtures * Compatible with tree-diff-0.0.0.1 * Use parseParas to parse fixtures This allows to test all syntactic constructs available in haddock markup. - - - - - 31128417 by Alec Theriault at 2018-02-01T14:58:18+01:00 Patch flaky parser test (#720) * Patch flaky parser test This test was a great idea, but it doesn't port over too well to using the GHC lexer. GHC rewrites its input a bit - nothing surprising, but we need to guard against those cases for the test. * Change instance head * Change use site - - - - - 9704f214 by Herbert Valerio Riedel at 2018-02-01T14:58:18+01:00 Include secondary LICENSE file in source dist - - - - - 51f25074 by Oleg Grenrus at 2018-02-01T14:58:18+01:00 Grid Tables (#718) * Add table examples * Add table types and adopt simple parser Simple parser is done by Giovanni Cappellotto (@potomak) in https://github.com/haskell/haddock/pull/577 It seems to support single fine full tables, so far from full RST-grid tables, but it's good start. Table type support row- and colspans, but obviously parser is lacking. Still TODO: - Latex backend. Should we use multirow package https://ctan.org/pkg/multirow?lang=en? - Hoogle backend: ? * Implement grid-tables * Refactor table parser * Add two ill-examples * Update CHANGES.md * Basic documentation for tables * Fix documentation example - - - - - 670d6200 by Alex Biehl at 2018-02-01T14:58:18+01:00 Add grid table example to cheatsheet (pdf and svg need to be regenerated thought) - - - - - 4262dec9 by Alec Theriault at 2018-02-01T14:58:18+01:00 Fix infinite loop when specializing instance heads (#723) * Fix infinite loop when specializing instance heads The bug can only be triggered from TH, hence why it went un-noticed for so long. * Add test for haskell/haddock#679 and haskell/haddock#710 - - - - - 67ecd803 by Alec Theriault at 2018-02-01T14:58:18+01:00 Filter RTS arguments from 'ghc-options' arguments (#725) This fixes haskell/haddock#666. - - - - - 7db26992 by Alex Biehl at 2018-02-01T14:58:18+01:00 Quickjump Scrollable overlay - - - - - da9ff634 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Hyperlinker: Adjust parser to new PFailed constructor - - - - - 7b7cf8cb by Alexander Biehl at 2018-02-01T14:58:18+01:00 Specialize: Add missing IdP annotations - - - - - 78cd7231 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Convert: Correct pass type - - - - - a2d0f590 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Warning free compilation - - - - - cd861cf3 by Alexander Biehl at 2018-02-01T14:58:18+01:00 hadock-2.19.0 / haddock-api-2.19.0 / haddock-library-1.5.0 - - - - - c6651b72 by Alexander Biehl at 2018-02-01T14:58:18+01:00 Adjust changelogs - - - - - 1e93da0b by Alexander Biehl at 2018-02-01T14:58:18+01:00 haddock-library: Info about breaking changes - - - - - f9b11db8 by Alec Theriault at 2018-02-02T12:36:02+01:00 Properly color pragma contents in hyperlinker The hyperlinker backend now classifies the content of pragmas as 'TkPragma'. That means that in something like '{-# INLINE foo #-}', 'foo' still gets classified as a pragma token. - - - - - c40b0043 by Alec Theriault at 2018-02-02T12:36:02+01:00 Support the new 'ITcolumn_prag' token - - - - - 4a2a4d39 by Alex Biehl at 2018-02-03T12:11:55+01:00 QuickJump: Mitigate encoding problems on Windows - - - - - bb34503a by Alex Biehl at 2018-02-04T18:39:31+01:00 Use withBinaryFile - - - - - 637605bf by Herbert Valerio Riedel at 2018-02-05T09:48:32+01:00 Try GHC 8.4.1 for Travis CI job - - - - - 7abb67e4 by Herbert Valerio Riedel at 2018-02-05T10:05:42+01:00 try harder to build w/ GHC 8.4.1 - - - - - 8255cc98 by Herbert Valerio Riedel at 2018-02-05T10:05:42+01:00 Add `SPDX-License-Identifier` as alised for "license" module header tokens C.f. SPDX 2.1 - Appendix V https://spdx.org/spdx-specification-21-web-version#h.twlc0ztnng3b The tag should appear on its own line in the source file, generally as part of a comment. SPDX-License-Identifier: <SPDX License Expression> Cherry-picked from haskell/haddock#743 - - - - - 267cd23d by Herbert Valerio Riedel at 2018-02-05T10:24:34+01:00 Make test-suite SMP compatible - - - - - 95d4bf40 by Alec Theriault at 2018-02-05T22:01:04+01:00 Hyperlink pattern synonyms and 'module' imports (#744) Links to pattern synonyms are now generated, as well as links from modules in import lists. Fixes haskell/haddock#731. - - - - - 67838dcd by Alec Theriault at 2018-02-06T08:23:36+01:00 Don't warn about missing '~' (#746) This manually filters out '~' from the list of things to warn about. It truly makes no sense to warn on this since '~' has nothing it could link to - it is magical. This fixes haskell/haddock#532. - - - - - ab6c3f9f by Alec Theriault at 2018-02-06T08:24:47+01:00 Don't barf on 'HsSpliceTy' (#745) This handles 'HsSpliceTy's by replacing them with what they expand to. IIUC everything that is happening, 'renameHsSpliceTy' should not be able to fail for the inputs we feed it from GHC. This fixes haskell/haddock#574. - - - - - 92bf95ad by Alex Biehl at 2018-02-06T08:28:23+01:00 Rename: renameHsSpliceTy ttg - - - - - 3130b1e1 by Alex Biehl at 2018-02-06T09:02:14+01:00 Expand SigDs - - - - - c72adae5 by Alex Biehl at 2018-02-06T09:20:51+01:00 fullModuleContents: support named docs - - - - - de2e4dbf by Alex Biehl at 2018-02-06T13:56:17+01:00 Hyperlinker: Also link pattern synonym arguments - - - - - b7c98237 by Alex Biehl at 2018-02-09T18:44:23+01:00 Expand SigD in a better place In https://github.com/haskell/haddock/issues/287 we found that haddock-2.19.0 would miss documentation on class methods with multiples names. This patch uses expandSigDecls in a more sensible place. - - - - - 8f598b27 by Alec Theriault at 2018-02-11T12:29:56+01:00 Add module tooltips to linked identifiers (#753) No more clicking to figure out whether your bytestring is strict or lazy! - - - - - d812e65d by Alec Theriault at 2018-02-11T12:31:44+01:00 Add 'show' option to complement 'hide' (#752) * Add 'show' option to complement 'hide' The behaviour is for flags passed in the command line to override flags in file headers. In the command line, later flags override earlier ones. Fixes haskell/haddock#751 and haskell/haddock#266. * Add a '--show-all' option - - - - - 6676cecb by Alex Biehl at 2018-02-18T11:07:15-05:00 QuickJump: Mitigate encoding problems on Windows (cherry picked from commit 86292c54bfee2343aee84559ec01f1fc68f52231) - - - - - e753dd88 by Alex Biehl at 2018-02-18T17:59:54+01:00 Use withBinaryFile - - - - - 724dc881 by Tamar Christina at 2018-02-19T05:34:49+01:00 Haddock: support splitted include paths. (#689) - - - - - 9b6d6f50 by Alex Biehl at 2018-02-19T05:57:02+01:00 Teach the HTML backend how to render methods with multiple names - - - - - a74aa754 by Alexander Biehl at 2018-02-19T10:04:34+01:00 Hoogle/Latex: Remove use of partial function - - - - - 66d8bb0e by Alec Theriault at 2018-02-25T16:04:01+01:00 Fix file handle leak (#763) (#764) Brought back some mistakenly deleted code for handling encoding and eager reading of files from e0ada1743cb722d2f82498a95b201f3ffb303137. - - - - - bb92d03d by Alex Biehl at 2018-03-02T14:21:23+01:00 Enable running test suite with stock haddock and ghc using ``` $ cabal new-run -- html-test --haddock-path=$(which haddock) --ghc-path=$(which ghc) ``` - - - - - dddb3cb2 by Alex Biehl at 2018-03-02T15:43:21+01:00 Make testsuite work with haddock-1.19.0 release (#766) - - - - - f38636ed by Alec Theriault at 2018-03-02T15:48:36+01:00 Support unicode operators, proper modules Unicode operators are a pretty big thing in Haskell, so supporting linking them seems like it outweighs the cost of the extra machinery to force Attoparsec to look for unicode. Fixes haskell/haddock#458. - - - - - 09d89f7c by Alec Theriault at 2018-03-02T15:48:43+01:00 Remove bang pattern - - - - - d150a687 by Alex Biehl at 2018-03-02T15:48:48+01:00 fix test - - - - - d6fd71a5 by Alex Biehl at 2018-03-02T16:22:38+01:00 haddock-test: Be more explicit which packages to pass We now pass `-hide-all-packages` to haddock when invoking the testsuite. This ensures we don't accidentally pick up any dependencies up through ghc.env files. - - - - - 0932c78c by Alex Biehl at 2018-03-02T17:50:38+01:00 Revert "fix test" This reverts commit 1ac2f9569242f6cb074ba6e577285a4c33ae1197. - - - - - 52516029 by Alex Biehl at 2018-03-02T18:16:50+01:00 Fix Bug548 for real - - - - - 89df9eb5 by Alex Biehl at 2018-03-05T18:28:19+01:00 Hyperlinker: Links for TyOps, class methods and associated types - - - - - d019a4cb by Ryan Scott at 2018-03-06T13:43:56-05:00 Updates for haskell/haddock#13324 - - - - - 6d5a42ce by Alex Biehl at 2018-03-10T18:25:57+01:00 Bump haddock-2.19.0.1, haddock-api-2.19.0.1, haddock-library-1.5.0.1 - - - - - c0e6f380 by Alex Biehl at 2018-03-10T18:25:57+01:00 Update changelogs for haddock-2.19.0.1 and haddock-library-1.5.0.1 - - - - - 500da489 by Herbert Valerio Riedel at 2018-03-10T18:25:57+01:00 Update to QC 2.11 - - - - - ce8362e9 by Herbert Valerio Riedel at 2018-03-10T18:25:57+01:00 Restore backward-compat with base-4.5 through base-4.8 - - - - - baae4435 by Alex Biehl at 2018-03-10T18:25:57+01:00 Bump lower bound for haddock-library - - - - - 10b7a73e by Alex Biehl at 2018-03-10T18:25:57+01:00 Haddock: Straighten out base bound - - - - - a6096f7b by Alex Biehl at 2018-03-13T08:45:06+01:00 extractDecl: Extract constructor patterns from data family instances (#776) * extractDecl: Allow extraction of data family instance constructors * extractDecl: extract data family instance constructors - - - - - ba4a0744 by Simon Jakobi at 2018-03-14T08:26:42+01:00 Readme: Update GHC version (#778) - - - - - 8de157d4 by Simon Jakobi at 2018-03-14T20:39:29+01:00 Add fixture test for definition lists - - - - - 425b46f9 by Simon Jakobi at 2018-03-14T20:39:29+01:00 Add fixture test for links - - - - - d53945d8 by Simon Jakobi at 2018-03-14T20:39:29+01:00 Add fixture test for inline links - - - - - f1dc7c99 by Simon Jakobi at 2018-03-14T20:39:29+01:00 fixtures: Slightly unmangle output - - - - - 0879d31c by Simon Jakobi at 2018-03-14T20:39:29+01:00 fixtures: Prevent stdout buffering - - - - - 1f9e5f1b by Simon Jakobi at 2018-03-14T20:39:29+01:00 haddock-library.cabal: Clean up GHC options - - - - - 066b891a by Simon Jakobi at 2018-03-14T20:39:29+01:00 Make a proper definition for the <link> parser - - - - - 573d6ba7 by Alec Theriault at 2018-03-21T09:16:57+01:00 Show where instances are defined (#748) * Indicate source module of instances Above instance, we now also display a link to the module where the instance was defined. This is sometimes helpful in figuring out what to import. * Source module for type/data families too * Remove parens * Accept tests - - - - - 99b5d28b by Alex Biehl at 2018-03-21T09:20:36+01:00 Prepare changelog for next release - - - - - 482d3a93 by Alex Biehl at 2018-03-23T15:57:36+01:00 Useful cost centres, timers and allocation counters (#785) * Add some useful cost-centres for profiling * Add withTiming for each haddock phase Invoking haddock with `--optghc=-ddump-timings` now shows the amount of time spent and the number of allocated bytes for each phase. - - - - - 773b41bb by Alec Theriault at 2018-03-27T08:35:59+02:00 @since includes package name (#749) * Metadoc stores a package name This means that '@since' annotations can be package aware. * Get the package name the right way This should extract the package name for `@since` annotations the right way. I had to move `modulePackageInfo` around to do this and, in the process, I took the liberty to update it. Since it appears that finding the package name is something that can fail, I added a warning for this case. * Silence warnings * Hide package for local 'since' annotations As discussed, this is still the usual case (and we should avoid being noisy for it). Although this commit is large, it is basically only about threading a 'Maybe Package' from 'Haddock.render' all the way to 'Haddock.Backends.Xhtml.DocMarkup.renderMeta'. * Bump binary interface version * Add a '--since-qual' option This controls when to qualify since annotations with the package they come from. The default is always, but I've left an 'external' variant where only those annotations coming from outside of the current package are qualified. * Make ParserSpec work * Make Fixtures work * Use package name even if package version is not available The @since stuff needs only the package name passed in, so it makes sense to not be forced to pass in a version too. - - - - - e42c57bc by Alex Biehl at 2018-03-27T08:42:50+02:00 haddock-2.19.1, haddock-api-2.19.1, haddock-library-1.6.0 - - - - - 8373a529 by Alex Biehl at 2018-03-28T10:17:11+02:00 Bump haddock and haddock-api to 2.20.0 - - - - - 5038eddd by Jack Henahan at 2018-04-03T13:28:12+02:00 Clear search string on hide for haskell/haddock#781 (#789) - - - - - 920ca1eb by Alex Biehl at 2018-04-03T16:35:50+02:00 Travis: Build with ghc-8.4.2 (#793) - - - - - a232f0eb by Alan Zimmerman at 2018-04-07T14:14:32+02:00 Match changes in GHC for D4199 Removing HasSourceText and SourceTextX classes. - - - - - ab85060b by Alan Zimmerman at 2018-04-09T21:20:24+02:00 Match GHC changes for TTG - - - - - 739302b6 by Alan Zimmerman at 2018-04-13T13:31:44+02:00 Match GHC for TTG implemented on HsBinds, D4581 - - - - - 2f56d3cb by Ryan Scott at 2018-04-19T11:42:58-04:00 Bump upper bound on base to < 4.13 See https://ghc.haskell.org/trac/ghc/ticket/15018. - - - - - a49df92a by Alex Biehl at 2018-04-20T07:31:44+02:00 Don't treat fixity signatures like declarations - - - - - d02c103b by Ryan Scott at 2018-04-24T11:20:11-04:00 Add regression test for haskell/haddock#413 Fixes haskell/haddock#413. - - - - - c7577f52 by Ryan Scott at 2018-04-24T13:51:06-07:00 Improve the Hoogle backend's treatment of type families (#808) Fixes parts 1 and 2 of haskell/haddock#806. - - - - - d88f85b1 by Alec Theriault at 2018-04-25T11:24:07-07:00 Replace 'attoparsec' with 'parsec' (#799) * Remove attoparsec with parsec and start fixing failed parses * Make tests pass * Fix encoding issues The Haddock parser no longer needs to worry about bytestrings. All the internal parsing work in haddock-library happens over 'Text'. * Remove attoparsec vendor * Fix stuff broken in 'attoparsec' -> 'parsec' * hyperlinks * codeblocks * examples Pretty much all issues are due to attoparsec's backtracking failure behaviour vs. parsec's non-backtracking failure behaviour. * Fix small TODOs * Missing quote + Haddocks * Better handle spaces before/after paragraphs * Address review comments - - - - - fc25e2fe by Alan Zimmerman at 2018-04-27T15:36:53+02:00 Match changes in GHC for TTG - - - - - 06175f91 by Herbert Valerio Riedel at 2018-05-01T18:11:09+02:00 Merge branch 'ghc-head' with 'ghc-8.4' - - - - - 879caaa8 by Alec Theriault at 2018-05-07T18:53:15-07:00 Filter out CRLFs in hyperlinker backend (#813) This prevents spurious lines from appearing in the final output. - - - - - 3e0120cb by Simon Jakobi at 2018-05-07T19:00:18-07:00 Add docs for some DocH constructors (#814) - - - - - 0a32c6db by Alec Theriault at 2018-05-08T02:15:45-07:00 Remove 'TokenGroup' from Hyperlinker (#818) Since the hyperlinker backend now relies on the GHC tokenizer, something like 'Bar.Baz.foo' already gets bunched together into one token (as opposed to being spread across 'Bar', '.', 'Baz', '.', and 'foo'). - - - - - 8816e783 by Simon Jakobi at 2018-05-08T10:48:11-07:00 Renamer: Warn about out of scope identifiers. (#819) - - - - - ad60366f by Ryan Scott at 2018-05-10T11:19:47-04:00 Remove Hoogle backend hack that butchers infix datatype names - - - - - 03b7cc3b by Ryan Scott at 2018-05-10T11:24:38-04:00 Wibbles - - - - - b03dd563 by Chaitanya Koparkar at 2018-05-10T11:44:58-04:00 Use the response file utilities defined in `base` (#821) Summary: The response file related modules were recently copied from `haddock` into `base`. This patch removes them from `haddock`. GHC Trac Issues: haskell/haddock#13896 - - - - - 9f298a40 by Ben Gamari at 2018-05-13T17:36:04-04:00 Account for refactoring of LitString - - - - - ea3dabe7 by Ryan Scott at 2018-05-16T09:21:43-04:00 Merge pull request haskell/haddock#826 from haskell/T825 Remove Hoogle backend hack that butchers infix datatype names - - - - - 0d234f7c by Alec Theriault at 2018-05-23T11:29:05+02:00 Use `ClassOpSig` instead of `TypeSig` for class methods (#835) * Fix minimal pragma handling Class declarations contain 'ClassOpSig' not 'Typesig'. This should fix haskell/haddock#834. * Accept html-test output - - - - - 15fc9712 by Simon Jakobi at 2018-05-31T04:17:47+02:00 Adjust to new HsDocString internals - - - - - 6f1e19a8 by Ben Gamari at 2018-06-02T16:18:58-04:00 Remove ParallelArrays and Data Parallel Haskell - - - - - 0d0355d9 by Ryan Scott at 2018-06-04T21:26:59-04:00 DerivingVia changes - - - - - 0d93475a by Simon Jakobi at 2018-06-05T19:47:05+02:00 Bump a few dependency bounds (#845) - - - - - 5cbef804 by Alec Theriault at 2018-06-05T19:47:16+02:00 Improve hyperlinker's 'spanToNewline' (#846) 'spanToNewline' is used to help break apart the source into lines which can then be partioned into CPP and non-CPP chunks. It is important that 'spanToNewline' not break apart tokens, so it needs to properly handle things like * block comments, possibly nested * string literals, possibly multi-line * CPP macros, possibly multi-line String literals in particular were not being properly handled. The fix is to to fall back in 'Text.Read.lex' to help lex things that are not comments. Fixes haskell/haddock#837. - - - - - 9094c56f by Alec Theriault at 2018-06-05T22:53:25+02:00 Extract docs from strict/unpacked constructor args (#839) This fixes haskell/haddock#836. - - - - - 70188719 by Simon Jakobi at 2018-06-08T22:20:30+02:00 Renamer: Warn about ambiguous identifiers (#831) * Renamer: Warn about ambiguous identifiers Example: Warning: 'elem' is ambiguous. It is defined * in ‘Data.Foldable’ * at /home/simon/tmp/hdk/src/Lib.hs:7:1 You may be able to disambiguate the identifier by qualifying it or by hiding some imports. Defaulting to 'elem' defined at /home/simon/tmp/hdk/src/Lib.hs:7:1 Fixes haskell/haddock#830. * Deduplicate warnings Fixes haskell/haddock#832. - - - - - 495cd1fc by Chaitanya Koparkar at 2018-06-13T23:01:34+02:00 Use the response file utilities defined in `base` (#821) Summary: The response file related modules were recently copied from `haddock` into `base`. This patch removes them from `haddock`. GHC Trac Issues: haskell/haddock#13896 - - - - - 81088732 by Ben Gamari at 2018-06-13T23:01:34+02:00 Account for refactoring of LitString - - - - - 7baf6587 by Simon Jakobi at 2018-06-13T23:05:08+02:00 Adjust to new HsDocString internals - - - - - bb61464d by Ben Gamari at 2018-06-13T23:05:22+02:00 Remove ParallelArrays and Data Parallel Haskell - - - - - 5d8cb87f by Ryan Scott at 2018-06-13T23:39:30+02:00 DerivingVia changes - - - - - 73d373a3 by Alec Theriault at 2018-06-13T23:39:30+02:00 Extract docs from strict/unpacked constructor args (#839) This fixes haskell/haddock#836. - - - - - 4865e254 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Remove `ITtildehsh` token - - - - - b867db54 by Alec Theriault at 2018-06-13T23:39:30+02:00 Filter out CRLFs in hyperlinker backend (#813) This prevents spurious lines from appearing in the final output. - - - - - 9598e392 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Add docs for some DocH constructors (#814) - - - - - 8a59035b by Alec Theriault at 2018-06-13T23:39:30+02:00 Remove 'TokenGroup' from Hyperlinker (#818) Since the hyperlinker backend now relies on the GHC tokenizer, something like 'Bar.Baz.foo' already gets bunched together into one token (as opposed to being spread across 'Bar', '.', 'Baz', '.', and 'foo'). - - - - - 29350fc8 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Renamer: Warn about out of scope identifiers. (#819) - - - - - 2590bbd9 by Ryan Scott at 2018-06-13T23:39:30+02:00 Remove Hoogle backend hack that butchers infix datatype names - - - - - a9939fdc by Ryan Scott at 2018-06-13T23:39:30+02:00 Wibbles - - - - - a22f7df4 by Alec Theriault at 2018-06-13T23:39:30+02:00 Use `ClassOpSig` instead of `TypeSig` for class methods (#835) * Fix minimal pragma handling Class declarations contain 'ClassOpSig' not 'Typesig'. This should fix haskell/haddock#834. * Accept html-test output - - - - - 8741015d by Simon Jakobi at 2018-06-13T23:39:30+02:00 Bump a few dependency bounds (#845) - - - - - 4791e1cc by Alec Theriault at 2018-06-13T23:39:30+02:00 Improve hyperlinker's 'spanToNewline' (#846) 'spanToNewline' is used to help break apart the source into lines which can then be partioned into CPP and non-CPP chunks. It is important that 'spanToNewline' not break apart tokens, so it needs to properly handle things like * block comments, possibly nested * string literals, possibly multi-line * CPP macros, possibly multi-line String literals in particular were not being properly handled. The fix is to to fall back in 'Text.Read.lex' to help lex things that are not comments. Fixes haskell/haddock#837. - - - - - 311d3216 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Renamer: Warn about ambiguous identifiers (#831) * Renamer: Warn about ambiguous identifiers Example: Warning: 'elem' is ambiguous. It is defined * in ‘Data.Foldable’ * at /home/simon/tmp/hdk/src/Lib.hs:7:1 You may be able to disambiguate the identifier by qualifying it or by hiding some imports. Defaulting to 'elem' defined at /home/simon/tmp/hdk/src/Lib.hs:7:1 Fixes haskell/haddock#830. * Deduplicate warnings Fixes haskell/haddock#832. - - - - - d0577817 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Complete FixitySig and FamilyDecl pattern matches - - - - - 055b3aa7 by Simon Jakobi at 2018-06-13T23:39:30+02:00 Fix redundant import warnings - - - - - f9ce19b1 by Simon Jakobi at 2018-06-13T23:49:52+02:00 html-test: Accept output - - - - - 04604ea7 by Simon Jakobi at 2018-06-13T23:54:37+02:00 Bump bounds on Cabal - - - - - 0713b692 by Simon Jakobi at 2018-06-14T00:00:12+02:00 Merge branch 'ghc-head' into ghc-head-update-3 - - - - - c6a56bfd by Simon Jakobi at 2018-06-14T02:33:27+02:00 Bump ghc bound for haddock-api spec test-suite - - - - - 119d04b2 by Simon Jakobi at 2018-06-14T12:37:48+02:00 Travis: `--allow-newer` for all packages - - - - - 0e876e2c by Alex Biehl at 2018-06-14T15:28:52+02:00 Merge pull request haskell/haddock#857 from sjakobi/ghc-head-update-3 Update ghc-head - - - - - 5be46454 by Alec Theriault at 2018-06-14T21:42:45+02:00 Improved handling of interfaces in 'haddock-test' (#851) This should now work with an inplace GHC where (for instance) HTML directories may not be properly recorded in the package DB. - - - - - 96ab1387 by Vladislav Zavialov at 2018-06-14T17:06:21-04:00 Handle -XStarIsType - - - - - e518f8c4 by Ben Gamari at 2018-06-14T17:48:00-04:00 Revert unintentional reversion of fix of haskell/haddock#548 - - - - - 01b9f96d by Alan Zimmerman at 2018-06-19T11:52:22+02:00 Match changes in GHC for haskell/haddock#14259 - - - - - 7f8c8298 by Ben Gamari at 2018-06-19T18:14:27-04:00 Bump GHC version to 8.6 - - - - - 11c6b5d2 by Ryan Scott at 2018-06-19T23:17:31-04:00 Remove HsEqTy and XEqTy - - - - - b33347c2 by Herbert Valerio Riedel at 2018-06-20T23:14:52+02:00 Revert "Bump GHC version to 8.6" This was applied to the wrong branch; there's now a `ghc-8.6` branch; ghc-head is always supposed to point to GHC HEAD, i.e. an odd major version. The next version bump to `ghc-head` is supposed to go from e.g. 8.5 to 8.7 This reverts commit 5e3cf5d8868323079ff5494a8225b0467404a5d1. - - - - - f0d2460e by Herbert Valerio Riedel at 2018-06-20T23:28:46+02:00 Update Travis CI job - - - - - ef239223 by Herbert Valerio Riedel at 2018-06-20T23:32:41+02:00 Drop GHC HEAD from CI and update GHC to 8.4.3 It's a waste of resource to even try to build this branch w/ ghc-head; so let's not do that... - - - - - 41c4a9fa by Ben Gamari at 2018-06-20T18:26:20-04:00 Bump GHC version to 8.7 - - - - - 8be593dc by Herbert Valerio Riedel at 2018-06-21T22:32:15+02:00 Update CI job to use GHC 8.7.* - - - - - b91d334a by Simon Jakobi at 2018-06-30T13:41:38+02:00 README updates (#856) * README: Remove mentions of master branch * README: Add instructions for using html-test * README: Change command to run _all_ the testsuites * README: Add project overview section - - - - - f707d848 by Alec Theriault at 2018-07-05T10:43:35-04:00 Export more fixities for Hoogle (#871) This exports fixities for more things, including class methods and type-level operators. - - - - - a6d2b8dc by Alec Theriault at 2018-07-06T10:06:32-04:00 Avoid line breaks due to line length in Hoogle (#868) * Avoid line breaks due to line length in Hoogle Hoogle operates in a line-oriented fashion, so we should avoid ever breaking due to long lines. One way of doing this non-intrusively is to modify the 'DynFlags' that are threaded through the 'Hoogle' module (note this is anyways only passed through for use in the various 'showSDoc' functions). * Amend test case - - - - - 13819f71 by Alan Zimmerman at 2018-07-15T19:33:51+02:00 Match XFieldOcc rename in GHC Trac haskell/haddock#15386 - - - - - c346aa78 by Simon Jakobi at 2018-07-19T12:29:32+02:00 haddock-library: Bump bounds for containers - - - - - 722e733c by Simon Jakobi at 2018-07-19T13:36:45+02:00 tyThingToLHsDecl: Preserve type synonyms that contain a forall (#880) * tyThingToLHsDecls: Preserve type synonyms that contain a forall Fixes haskell/haddock#879. * Add Note [Invariant: Never expand type synonyms] * Clarify Note [Invariant: Never expand type synonyms] - - - - - f0bd83fd by Alec Theriault at 2018-07-19T14:39:57+02:00 Fix HEAD html-test (#860) * Update tests for 'StarIsType' * Accept tests * Revert "Update tests for 'StarIsType'" This reverts commit 7f0c01383bbba6dc5af554ee82988d2cf44e407a. - - - - - 394053a8 by Simon Jakobi at 2018-07-19T14:58:07+02:00 haddock-library: Bump bounds for containers - - - - - 1bda11a2 by Alec Theriault at 2018-07-20T09:04:03+02:00 Add HEAD.hackage overlay (#887) * Add HEAD.hackage overlay * Add HCPKG variable - - - - - c7b4ab45 by Alec Theriault at 2018-07-20T12:01:16+02:00 Refactor handling of parens in types (#874) * Fix type parenthesization in Hoogle backend Ported the logic in the HTML and LaTeX backends for adding in parens into something top-level in 'GhcUtil'. Calling that from the Hoogle backend fixes haskell/haddock#873. * Remove parenthesizing logic from LaTeX and XHTML backends Now, the only times that parenthesis in types are added in any backend is through the explicit 'HsParTy' constructor. Precedence is also represented as its own datatype. * List out cases explicitly vs. catch-all * Fix printing of parens for QuantifiedConstraints The priority of printing 'forall' types was just one too high. Fixes haskell/haddock#877. * Accept HTML output for quantified contexts test - - - - - c05d32ad by Alec Theriault at 2018-07-20T12:01:49+02:00 Preserve docs on type family instances (#867) * Preserve docs on type family instances The only problem was that the instance location was slightly off for type family instances. * Accept output - - - - - 24b39ee4 by Alec Theriault at 2018-07-20T12:02:16+02:00 Fix broken instance source links (#869) The problem manifests itself in instances that are defined in modules other than the module where the class is defined. The fix is just to thread through the 'Module' of the instance further along. Since orphan instances appear to already have been working, I didn't do anything there. - - - - - cb9d2099 by Simon Jakobi at 2018-07-20T13:39:29+02:00 README updates (#856) * README: Remove mentions of master branch * README: Add instructions for using html-test * README: Change command to run _all_ the testsuites * README: Add project overview section (cherry picked from commit 61d6f935da97eb96685f07bf385102c2dbc2a33c) - - - - - 133f24f5 by Alec Theriault at 2018-07-20T13:39:29+02:00 Export more fixities for Hoogle (#871) This exports fixities for more things, including class methods and type-level operators. (cherry picked from commit 88316b972e3d47197b1019111bae0f7f87275fce) - - - - - 11024149 by Alec Theriault at 2018-07-20T13:39:29+02:00 Avoid line breaks due to line length in Hoogle (#868) * Avoid line breaks due to line length in Hoogle Hoogle operates in a line-oriented fashion, so we should avoid ever breaking due to long lines. One way of doing this non-intrusively is to modify the 'DynFlags' that are threaded through the 'Hoogle' module (note this is anyways only passed through for use in the various 'showSDoc' functions). * Amend test case (cherry picked from commit 657b1b3d519545f8d4ca048c06210d6cbf0f0da0) - - - - - de0c139e by Simon Jakobi at 2018-07-20T13:39:29+02:00 tyThingToLHsDecl: Preserve type synonyms that contain a forall (#880) * tyThingToLHsDecls: Preserve type synonyms that contain a forall Fixes haskell/haddock#879. * Add Note [Invariant: Never expand type synonyms] * Clarify Note [Invariant: Never expand type synonyms] (cherry picked from commit c3eb3f0581f69e816f9453b1747a9f2a3ba02bb9) - - - - - 6435e952 by Alec Theriault at 2018-07-20T13:39:29+02:00 Preserve docs on type family instances (#867) * Preserve docs on type family instances The only problem was that the instance location was slightly off for type family instances. * Accept output (cherry picked from commit 133e9c2c168db19c1135479f7ab144c4e33af2a4) - - - - - 1461af39 by Alec Theriault at 2018-07-20T13:39:29+02:00 Fix broken instance source links (#869) The problem manifests itself in instances that are defined in modules other than the module where the class is defined. The fix is just to thread through the 'Module' of the instance further along. Since orphan instances appear to already have been working, I didn't do anything there. (cherry picked from commit 2de7c2acf9b1ec85b09027a8bb58bf8512e91c05) - - - - - 69d3bde1 by Alec Theriault at 2018-07-20T13:49:47+02:00 Add some more unicode related tests (#872) This has been fixed for sure ever since we switched from attoparsec to parsec. Parts of it may have been working before that, but there was a point where this would have failed (see haskell/haddock#191). A regression test never hurt anyone. :) - - - - - 6a5c73c7 by Alec Theriault at 2018-07-20T13:50:00+02:00 Misc tests (#858) * More tests * spliced types * constructor/pattern argument docs * strictness marks on fields with argument docs * latex test cases need seperate directory * Accept tests - - - - - 92ca94c6 by Alec Theriault at 2018-07-20T13:55:36+02:00 Add some more unicode related tests (#872) This has been fixed for sure ever since we switched from attoparsec to parsec. Parts of it may have been working before that, but there was a point where this would have failed (see haskell/haddock#191). A regression test never hurt anyone. :) (cherry picked from commit 5ec7715d418bfac0f26aec6039792a99a6e89370) - - - - - 981bc7fa by Simon Jakobi at 2018-07-20T15:06:06+02:00 Additional tests for the identifier parser (#816) * Add tests for the identifier parser * docs: Clarify how to delimit identifiers - - - - - 27e7c0c5 by Simon Jakobi at 2018-07-20T15:09:05+02:00 Additional tests for the identifier parser (#816) * Add tests for the identifier parser * docs: Clarify how to delimit identifiers (cherry picked from commit 0861affeca4d72938f05a2eceddfae2c19199071) - - - - - 49e1a415 by Simon Jakobi at 2018-07-20T16:02:02+02:00 Update the ghc-8.6 branch (#889) * Revert "Bump GHC version to 8.6" This was applied to the wrong branch; there's now a `ghc-8.6` branch; ghc-head is always supposed to point to GHC HEAD, i.e. an odd major version. The next version bump to `ghc-head` is supposed to go from e.g. 8.5 to 8.7 This reverts commit 5e3cf5d8868323079ff5494a8225b0467404a5d1. * README updates (#856) * README: Remove mentions of master branch * README: Add instructions for using html-test * README: Change command to run _all_ the testsuites * README: Add project overview section (cherry picked from commit 61d6f935da97eb96685f07bf385102c2dbc2a33c) * Export more fixities for Hoogle (#871) This exports fixities for more things, including class methods and type-level operators. (cherry picked from commit 88316b972e3d47197b1019111bae0f7f87275fce) * Avoid line breaks due to line length in Hoogle (#868) * Avoid line breaks due to line length in Hoogle Hoogle operates in a line-oriented fashion, so we should avoid ever breaking due to long lines. One way of doing this non-intrusively is to modify the 'DynFlags' that are threaded through the 'Hoogle' module (note this is anyways only passed through for use in the various 'showSDoc' functions). * Amend test case (cherry picked from commit 657b1b3d519545f8d4ca048c06210d6cbf0f0da0) * tyThingToLHsDecl: Preserve type synonyms that contain a forall (#880) * tyThingToLHsDecls: Preserve type synonyms that contain a forall Fixes haskell/haddock#879. * Add Note [Invariant: Never expand type synonyms] * Clarify Note [Invariant: Never expand type synonyms] (cherry picked from commit c3eb3f0581f69e816f9453b1747a9f2a3ba02bb9) * Fix HEAD html-test (#860) * Update tests for 'StarIsType' * Accept tests * Revert "Update tests for 'StarIsType'" This reverts commit 7f0c01383bbba6dc5af554ee82988d2cf44e407a. * Refactor handling of parens in types (#874) * Fix type parenthesization in Hoogle backend Ported the logic in the HTML and LaTeX backends for adding in parens into something top-level in 'GhcUtil'. Calling that from the Hoogle backend fixes haskell/haddock#873. * Remove parenthesizing logic from LaTeX and XHTML backends Now, the only times that parenthesis in types are added in any backend is through the explicit 'HsParTy' constructor. Precedence is also represented as its own datatype. * List out cases explicitly vs. catch-all * Fix printing of parens for QuantifiedConstraints The priority of printing 'forall' types was just one too high. Fixes haskell/haddock#877. * Accept HTML output for quantified contexts test * Preserve docs on type family instances (#867) * Preserve docs on type family instances The only problem was that the instance location was slightly off for type family instances. * Accept output (cherry picked from commit 133e9c2c168db19c1135479f7ab144c4e33af2a4) * Fix broken instance source links (#869) The problem manifests itself in instances that are defined in modules other than the module where the class is defined. The fix is just to thread through the 'Module' of the instance further along. Since orphan instances appear to already have been working, I didn't do anything there. (cherry picked from commit 2de7c2acf9b1ec85b09027a8bb58bf8512e91c05) * Add some more unicode related tests (#872) This has been fixed for sure ever since we switched from attoparsec to parsec. Parts of it may have been working before that, but there was a point where this would have failed (see haskell/haddock#191). A regression test never hurt anyone. :) (cherry picked from commit 5ec7715d418bfac0f26aec6039792a99a6e89370) * Misc tests (#858) * More tests * spliced types * constructor/pattern argument docs * strictness marks on fields with argument docs * latex test cases need seperate directory * Accept tests * Additional tests for the identifier parser (#816) * Add tests for the identifier parser * docs: Clarify how to delimit identifiers (cherry picked from commit 0861affeca4d72938f05a2eceddfae2c19199071) - - - - - 5ca14bed by Simon Jakobi at 2018-07-20T16:05:47+02:00 Revert "Revert "Bump GHC version to 8.6"" That commit didn't belong onto the ghc-8.6 branch. This reverts commit acbaef3b9daf1d2dea10017964bf886e77a8e967. - - - - - 2dd600dd by Simon Jakobi at 2018-07-20T16:18:21+02:00 Don't warn about ambiguous identifiers when the candidate names belong to the same type This also changes the defaulting heuristic for ambiguous identifiers. We now prefer local names primarily, and type constructors or class names secondarily. Partially fixes haskell/haddock#854. - - - - - fceb2422 by Simon Jakobi at 2018-07-20T16:18:21+02:00 outOfScope: Recommend qualifying the identifier - - - - - acea5d23 by Simon Jakobi at 2018-07-20T16:19:35+02:00 outOfScope: Recommend qualifying the identifier (cherry picked from commit 73707ed58d879cc04cb644c5dab88c39ca1465b7) - - - - - 1a83ca55 by Simon Jakobi at 2018-07-20T16:19:35+02:00 Don't warn about ambiguous identifiers when the candidate names belong to the same type This also changes the defaulting heuristic for ambiguous identifiers. We now prefer local names primarily, and type constructors or class names secondarily. Partially fixes haskell/haddock#854. (cherry picked from commit d504a2864a4e1982e142cf88c023e7caeea3b76f) - - - - - 48374451 by Masahiro Sakai at 2018-07-20T17:06:42+02:00 Add # as a special character (#884) '#' has special meaning used for anchors and can be escaped using backslash. Therefore it would be nice to be listed as special characters. - - - - - 5e1a5275 by Alec Theriault at 2018-07-20T23:37:24+02:00 Let `haddock-test` bypass interface version check (#890) This means `haddock-test` might * crash during deserialization * deserialize incorrectly Still - it means things _might_ work where they were previously sure not to. - - - - - 27286754 by Yuji Yamamoto at 2018-07-23T08:16:01+02:00 Avoid "invalid argument (invalid character)" on non-unicode Windows (#892) Steps to reproduce and the error message ==== ``` > stack haddock basement ... snip ... Warning: 'A' is out of scope. Warning: 'haddock: internal error: <stdout>: commitBuffer: invalid argument (invalid character) ``` Environment ==== OS: Windows 10 ver. 1709 haddock: [HEAD of ghc-8.4 when I reproduce the error](https://github.com/haskell/haddock/commit/532b209d127e4cecdbf7e9e3dcf4f653a5605b5a). (I had to use this version to avoid another probrem already fixed in HEAD) GHC: 8.4.3 stack: Version 1.7.1, Git revision 681c800873816c022739ca7ed14755e85a579565 (5807 commits) x86_64 hpack-0.28.2 Related pull request ==== https://github.com/haskell/haddock/pull/566 - - - - - 6729d361 by Alec Theriault at 2018-07-23T13:52:56-07:00 Accumulate explicitly which modules to load for 'attachInstances' The old approach to fixing haskell/haddock#469, while correct, consumes a lot of memory. We ended up with a HUGE 'GblRdrEnv' in 'ic_rn_gbl_env'. However, 'getNameToInstancesIndex' takes that environment and compresses it down to a much smaller 'ModuleSet'. Now, we compute that 'ModuleSet' explicitly as we process modules. That way we can just tell 'getNameToInstancesIndex' what modules to load (instead of it trying to compute that information from the interactive context). - - - - - 8cf4e6b5 by Ryan Scott at 2018-07-27T11:28:03-04:00 eqTyCon_RDR now lives in TysWiredIn After GHC commit http://git.haskell.org/ghc.git/commit/f265008fb6f70830e7e92ce563f6d83833cef071 - - - - - 1ad251a6 by Alan Zimmerman at 2018-07-30T13:28:09-04:00 Match XFieldOcc rename in GHC Trac haskell/haddock#15386 (cherry picked from commit e3926b50ab8a7269fd6904b06e881745f08bc5d6) - - - - - 8aea2492 by Richard Eisenberg at 2018-08-02T10:54:17-04:00 Update against new HsImplicitBndrs - - - - - e42cada9 by Alec Theriault at 2018-08-04T17:51:30+02:00 Latex type families (#734) * Support for type families in LaTeX The code is ported over from the XHTML backend. * Refactor XHTML and LaTeX family handling This is mostly a consolidation effort: stripping extra exports, inlining some short definitions, and trying to make the backends match. The LaTeX backend now has preliminary support for data families, although the only the data instance head is printed (not the actual constructors). Both backends also now use "newtype" for newtype data family instances. * Add some tests - - - - - 0e852512 by Alex Biehl at 2018-08-06T13:04:02+02:00 Make --package-version optional for --hoogle generation (#899) * Make --package-version optional for --hoogle generation * Import mkVersion * It's makeVersion not mkVersion - - - - - d2abd684 by Noel Bourke at 2018-08-21T09:34:18+02:00 Remove unnecessary backslashes from docs (#908) On https://haskell-haddock.readthedocs.io/en/latest/markup.html#special-characters the backslash and backtick special characters showed up with an extra backslash before them – I think the escaping is not (or no longer) needed for those characters in rst. - - - - - 7a578a9e by Matthew Pickering at 2018-08-21T09:34:50+02:00 Load plugins when starting a GHC session (#905) Fixes haskell/haddock#900 - - - - - aa3d4db3 by Matthew Pickering at 2018-08-21T09:37:34+02:00 Load plugins when starting a GHC session (#905) Fixes haskell/haddock#900 - - - - - ede91744 by Alec Theriault at 2018-08-21T09:42:52+02:00 Better test output when Haddock crashes on a test (#902) In particular: we report the tests that crashed seperately from the tests that produced incorrect output. In order for tests to pass (and exit 0), they must not crash and must produce the right output. - - - - - 4a872b84 by Guillaume Bouchard at 2018-08-21T09:45:57+02:00 Fix a typo (#878) - - - - - 4dbf7595 by Ben Sklaroff at 2018-08-21T12:04:09-04:00 Add ITcomment_line_prag token to Hyperlinker Parser This token is necessary for parsing #line pragmas inside nested comments. Reviewers: bgamari Reviewed By: bgamari Differential Revision: https://phabricator.haskell.org/D4935 - - - - - 9170b2a9 by Ben Gamari at 2018-08-21T17:55:15-04:00 Merge pull request haskell/haddock#893 from harpocrates/get-name-to-instances Accumulate explicitly which modules to load for 'attachInstances' - - - - - d57b57cc by Ben Gamari at 2018-08-21T17:59:13-04:00 Merge branch 'ghc-head' of github.com:haskell/haddock into ghc-head - - - - - 14601ca2 by Alec Theriault at 2018-08-21T19:09:37-04:00 Accumulate explicitly which modules to load for 'attachInstances' The old approach to fixing haskell/haddock#469, while correct, consumes a lot of memory. We ended up with a HUGE 'GblRdrEnv' in 'ic_rn_gbl_env'. However, 'getNameToInstancesIndex' takes that environment and compresses it down to a much smaller 'ModuleSet'. Now, we compute that 'ModuleSet' explicitly as we process modules. That way we can just tell 'getNameToInstancesIndex' what modules to load (instead of it trying to compute that information from the interactive context). (cherry picked from commit 5c7c596c51d69b92164e9ba920157b36ce2b2ec1) - - - - - 438c645e by Matthew Pickering at 2018-08-21T19:12:39-04:00 Load plugins when starting a GHC session (#905) Fixes haskell/haddock#900 (cherry picked from commit e6aa8fb47b9477cc5ef5e46097524fe83e080f6d) - - - - - a80c5161 by Alec Theriault at 2018-08-21T22:06:40-07:00 Better rendering of unboxed sums/tuples * adds space after/before the '#' marks * properly reify 'HsSumTy' in 'synifyType' - - - - - 88456cc1 by Alec Theriault at 2018-08-21T22:06:40-07:00 Handle promoted tuples in 'synifyType' When we have a fully applied promoted tuple, we can expand it out properly. - - - - - fd1c1094 by Alec Theriault at 2018-08-21T22:19:34-07:00 Accept test cases - - - - - 6e80d9e0 by Alec Theriault at 2018-08-21T22:24:03-07:00 Merge pull request haskell/haddock#914 from harpocrates/feature/unboxed-stuff Better rendering of unboxed sums, unboxed tuples, promoted tuples. - - - - - 181a23f1 by Ben Gamari at 2018-08-23T15:53:48-04:00 Merge remote-tracking branch 'origin/ghc-8.6' into ghc-8.6 - - - - - 3a18c1d8 by Alec Theriault at 2018-08-27T14:15:25-07:00 Properly synify promoted list types We reconstruct promoted list literals whenever possible. That means that 'synifyType' produces '[Int, Bool, ()] instead of (Int ': (() ': (Bool ': ([] :: [Type])))) - - - - - b4794946 by Alec Theriault at 2018-09-03T07:19:55-07:00 Only look at visible types when synifying a 'HsListTy' The other types are still looked at when considering whether to make a kind signature or not. - - - - - a231fce2 by Alec Theriault at 2018-09-03T07:38:10-07:00 Merge pull request haskell/haddock#922 from harpocrates/promoted-lists Properly synify promoted list types - - - - - 0fdf044e by Ningning Xie at 2018-09-15T10:25:58-04:00 Update according to GHC Core changes - - - - - 7379b115 by Ningning Xie at 2018-09-15T15:40:18-04:00 update dataFullSig to work with Co Quantification This should have been in the previous patch, but wasn't. - - - - - cf84a046 by Alec Theriault at 2018-09-17T20:12:18-07:00 Fix/add to various docs * Add documentation for a bunch of previously undocumented options (fixes haskell/haddock#870) * Extend the documentation of `--hoogle` considerably (see haskell/haddock#807) * Describe how to add docs to `deriving` clauses (fixes haskell/haddock#912) * Fix inaccurate docs about hyperlinking infix identifiers (fixes haskell/haddock#780) - - - - - ae017935 by Alec Theriault at 2018-09-22T08:32:16-07:00 Update Travis - - - - - d95ae753 by Alec Theriault at 2018-09-22T09:34:10-07:00 Accept failing tests Also silence orphan warnings. - - - - - f3e67024 by Alec Theriault at 2018-09-22T09:41:23-07:00 Bump haddock-api-2.21.0, haddock-library-1.7.0 * Update CHANGELOGS * Update new versions in Cabal files * Purge references to ghc-8.4/master branches in README - - - - - 3f136d4a by Alec Theriault at 2018-09-22T10:53:31-07:00 Turn haddock-library into a minor release Fix some version bounds in haddock-library too. - - - - - b9def006 by Alec Theriault at 2018-09-22T13:07:35-07:00 keep cabal.project file - - - - - 4909aca7 by Alec Theriault at 2018-10-16T09:36:30-07:00 Build on 7.4 and 7.8 - - - - - 99d20a28 by Herbert Valerio Riedel at 2018-10-16T18:45:52+02:00 Minor tweak to package description - - - - - a8059618 by Herbert Valerio Riedel at 2018-10-16T18:47:24+02:00 Merge pull request haskell/haddock#945 haddock-api 2.21.0 and haddock-library 1.6.1 release - - - - - 2d9bdfc1 by Alec Theriault at 2018-10-16T10:54:21-07:00 Bump haddock-library to 1.7.0 The 1.6.1 release should've been a major bump, since types in the `Documentation.Haddock.Parser.Monad` module changed. This version makes that module internal (as it morally should be). - - - - - ed340cef by Alec Theriault at 2018-10-16T14:59:13-07:00 Merge branch 'ghc-8.4' into ghc-8.6 - - - - - 2821a8df by Alec Theriault at 2018-10-16T15:14:48-07:00 Merge branch 'ghc-8.6' into ghc-head - - - - - a722dc84 by Alec Theriault at 2018-10-16T16:28:55-07:00 Latex type families (#734) * Support for type families in LaTeX The code is ported over from the XHTML backend. * Refactor XHTML and LaTeX family handling This is mostly a consolidation effort: stripping extra exports, inlining some short definitions, and trying to make the backends match. The LaTeX backend now has preliminary support for data families, although the only the data instance head is printed (not the actual constructors). Both backends also now use "newtype" for newtype data family instances. * Add some tests - - - - - 63377496 by Alec Theriault at 2018-10-16T16:39:07-07:00 Update changelog - - - - - 099a0110 by Alec Theriault at 2018-10-16T16:49:28-07:00 Merge pull request haskell/haddock#942 from harpocrates/update-docs Fix & add to documentation - - - - - 0927416f by Alec Theriault at 2018-10-16T16:50:14-07:00 Set UTF-8 encoding before writing files (#934) This should fix haskell/haddock#929, as well as guard against future problems of this sort in other places. Basically replaces 'writeFile' (which selects the users default locale) with 'writeUtf8File' (which always uses utf8). - - - - - 83b7b017 by Alec Theriault at 2018-10-16T17:42:05-07:00 Output pattern synonyms in Hoogle backend (#947) * Output pattern synonyms in Hoogle backend We were previously weren't outputting _any_ pattern synonyms, bundled or not. Now, we output both. Fixes haskell/haddock#946. * Update changelog - - - - - 81e5033d by Alec Theriault at 2018-10-16T18:04:40-07:00 Release `haddock{,-api}-2.22.0` This version will accompany ghc-8.6.2 - - - - - 9661744e by Alex Biehl at 2018-10-18T08:14:32-07:00 Add NewOcean theme And make it the default theme. - - - - - 7ae6d722 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Improve appearance and readability These changes include: - use latest Haskell's logo colors - decrease #content width to improve readability - use nicer font - improve sizes and distances - - - - - 37f8703d by NunoAlexandre at 2018-10-18T08:14:32-07:00 Include custom font in the html head - - - - - 1d5e1d79 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Update html test reference files - - - - - 53b7651f by NunoAlexandre at 2018-10-18T08:14:32-07:00 Make it responsive - It makes small screens taking more space than larger ones - fixes a few issues present in small screens currently - make it look good across different screen sizes. - - - - - 6aa1aeb1 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Make the style consistent with hackage Several things are addressed here: - better responsive behaviour on the header - better space usage - consistent colors overall - other nit PR comments - - - - - 3a250c5c by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Place the package name before the menu links This supports the expected responsive menu design, where the package name appears above the menu links. - - - - - cae699b3 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update html-test reference files The package name element in the package-header is now a div instead of a paragraph, and it is now above the menu ul.links instead of below. - - - - - 2ec7fd2d by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Improve synopsis style and code - Use CSS3 instead of loading pictures to show "+" and "-" symbols - Drop redundant code - - - - - 0c874c01 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Decrease space between code blocks There was too much space between code blocks as pointed out by reviewers. - - - - - 85568ce2 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Add an initial-scale property to all haddock pages This solves an issue reported about the content looking incredibly small on mobile devices. - - - - - c1538926 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Address several PR comments - Darken text color like done for hackage - Move synopsis to left side - Make table of contents stick to the left on wide screens - Wrap links to avoid page overflow - Improve expand/collapse buttons - Fix issue with content size on mobile devices - Fix issue with font-size on landscape mode - Increase width of the content - Change colors of table of contents and synopsis - Etc - - - - - e6639e5f by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Make synopsis scrollable on wide screens When the synopsis is longer than the screen, you can’t see its end and you can't scroll down either, making the content unreachable. - - - - - 1f0591ff by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Improve information density - Reduce font size - Improve space between and within code blocks - Improve alignments - Improve spacing within sub-blocks - - - - - bf083097 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Minor adjustments Bring in some adjustments made to hackage: - link colors - page header show everything when package title is too long - - - - - 10375fc7 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Fix responsive triggers overlap issue The min and max width triggers have the same values, which caused the style resolution to take an intersection of both style declarations when the screen resolution had the size of the limts (say 1280px), causing an odd behaviour and look. - - - - - 95ff2f95 by NunoAlexandre at 2018-10-18T08:14:32-07:00 Fix issue with menu alignment on firefox Reported and described here: https://github.com/haskell/haddock/pull/721#issuecomment-374668869 - - - - - dc86587e by Alex Biehl at 2018-10-18T08:14:32-07:00 Changelog entry for NewOcean - - - - - 27195e47 by Herbert Valerio Riedel at 2018-10-18T08:14:32-07:00 html-test --accept - - - - - 83f4f9c0 by Alex Biehl at 2018-10-18T08:14:32-07:00 Avoid name shadowing - - - - - 231487f1 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update font to PT Sans Also migrate some general text related changes from hackage. - - - - - 313db81a by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Use 'flex' to fix header alignment - - - - - 5087367b by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Misc of tweaks - Update link colors to hackage scheme - Tune spacing between content elements - Update footer style - Fix and improve code blocks identation - - - - - b08020df by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update font in Xhtml.hs to PT Sans - - - - - 78ce06e3 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Improve code blocks styling - Fix and improve spacing - Improve colors and borders - - - - - 81262d20 by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Make package-header caption backward-compatible The current html generator of this branch wraps the package-header caption as a div, which does not work (without style adjustments) with the old themes. Changing it from div to span does the trick, without needing to adjust the old stylesheets. - - - - - dc4475cb by Nuno Alexandre at 2018-10-18T08:14:32-07:00 Update test-suite reference html pages - - - - - 393d35d8 by Alec Theriault at 2018-10-18T08:25:36-07:00 Accept tests - - - - - a94484ba by Alec Theriault at 2018-10-21T10:29:29-07:00 Fix CHANGELOG - - - - - 8797eca3 by Alec Theriault at 2018-10-21T10:36:19-07:00 Update 'data-files' to include NewOcean stuff - - - - - 1ae51e4a by Simon Jakobi at 2018-10-23T11:29:14+02:00 Fix typo in a warning - - - - - 009ad8e8 by Alec Theriault at 2018-10-24T12:47:47-07:00 Update JS dependencies This was done via `npm audit fix`. I think this fixes haskell/haddock#903 along with some more serious vulnerabilities that nobody seems to have noticed. - - - - - 051994db by Alec Theriault at 2018-10-24T17:31:09-07:00 Resurrect the style-switcher This fixes haskell/haddock#810. Looks like things were broken during the quickjump refactor of the JS. For the (git) record: I do not think the style switcher is a good idea. I'm fixing it for the same reason @mzero added it; as an answer to "rumblings from some that they didn't want their pixels changed on bit" - - - - - 2a1d620f by Alec Theriault at 2018-10-24T17:38:07-07:00 Fix copy-pasta error in data-files - - - - - ed5bfb7f by Alec Theriault at 2018-10-24T20:42:14-07:00 Fix the synopsis button Here's these changes are supposed to do: * put the synopsis back on the right side * properly have it on the edge of the screen on wide screens * adjust the background of the synopsis to match the button (otherwise the grey blends in with what is underneath) * get rid of the dotted purple line * the synopsis contents are now scrollable even when in wide screens (this has been a long-standing bug) - - - - - 883fd74b by Alec Theriault at 2018-10-25T20:16:46-07:00 Avoid more conflicts in generated ids (#954) This fixes haskell/haddock#953 by passing more names into the generated ids. - - - - - ea54e331 by Alec Theriault at 2018-10-25T21:07:12-07:00 Don't hide bullets in method docs I think thst CSS was meant only to deal with fields and the effect on bullets was accidental. Fixes haskell/haddock#926. - - - - - 9a14ef4a by Alec Theriault at 2018-10-25T22:02:07-07:00 Indent more things + slightly smaller font - - - - - b9f17e29 by Alec Theriault at 2018-10-25T22:10:01-07:00 Merge branch 'ghc-8.6' into wip/new-ocean - - - - - 096a3cfa by Alec Theriault at 2018-10-25T22:24:38-07:00 Accept HTML output - - - - - 2669517d by Alec Theriault at 2018-10-26T09:02:35-07:00 User manual + stuff for building GHC docs - - - - - 46b27687 by Alec Theriault at 2018-10-26T09:10:59-07:00 Make 'Contents' in NewOcean scrollable This only happens if the contents block on the left is so big that it doesn't fit (vertically) on the page. If that happens, we want it to be scrollable. - - - - - 3443dd94 by Alec Theriault at 2018-10-26T09:36:46-07:00 Revert "Make 'Contents' in NewOcean scrollable" This reverts commit f909ffd8353d6463fd5dd184998a32aa98d5c922. I missed the fact this also forces the 'Contents' to always go down to the bottom of the page. - - - - - ed081424 by Alec Theriault at 2018-10-26T14:22:23-07:00 Avoid some partiality AFAICT this wasn't causing any crashes, but that's mostly because we happen not to be forcing `pkgStr` when it would diverge. We come dangerously close to doing that in `ppHtmlIndex`. Fixes haskell/haddock#569. - - - - - 6a5bec41 by Alec Theriault at 2018-10-27T10:05:04-07:00 Fix documentation in `haddock-api` (#957) * Fix misplaced Haddocks in Haddock itself Haddock should be able to generate documentation for 'haddock-api' again. * Make CI check that documentation can be built. * Add back a doc that is OK - - - - - 5100450a by Matthew Yacavone at 2018-10-27T14:51:38-04:00 More explicit foralls (GHC Proposal 0007) - - - - - 8771a6b0 by Alec Theriault at 2018-11-05T13:58:11-08:00 Only run MathJax on entities with "mathjax" class (#960) Correspondingly, we wrap all inline/diplay math in <span class="mathjax"> ... the math .... </span> This fixes haskell/haddock#959. - - - - - bd7ff5c5 by Alec Theriault at 2018-11-05T15:54:22-08:00 Deduplicate some work in 'AttachInstances' Perf only change: * avoid needlessly union-ing maps * avoid synify-ing instances twice Took this opportunity to add some docs too - - - - - cf99fd8f by Alec Theriault at 2018-11-05T15:54:22-08:00 Specialize some SYB functions Perf only change: * Add a 'SPECIALIZE' pragma to help GHC optimize a 'Data a =>' constraint * Manually specialize the needlessly general type of 'specializeTyVarBndrs' - - - - - 4f91c473 by Alec Theriault at 2018-11-05T15:54:22-08:00 Improve perf of renaming Perf only change: * don't look up type variable names (they're never in the environment) * use a difference list for accumulating missing names * more efficient 'Functor'/'Applicative' instances for 'RnM' - - - - - 4bbab0d4 by Alec Theriault at 2018-11-05T15:54:22-08:00 Faster 'Text' driven parser combinators Perf only change: * use 'getParserState'/'setParserState' to make 'Text'-optimized parser combinators * minimize uses of 'Data.Text.{pack,unpack,cons,snoc}' - - - - - fa430c02 by Alec Theriault at 2018-11-06T12:03:24-08:00 Support hyperlink labels with inline markup The parser for pictures hasn't been properly adjusted yet. - - - - - c1431035 by Alec Theriault at 2018-11-06T12:03:24-08:00 Support (and flatten) inline markup in image links Inline markup is supported in image links but, as per the [commonmark recommendation][0], it is stripped back to a plain text representation. [0]: https://spec.commonmark.org/0.28/#example-547 - - - - - d4ee1ba5 by Alec Theriault at 2018-11-06T12:03:24-08:00 Accept test case - - - - - 8088aeb1 by Alec Theriault at 2018-11-06T12:03:24-08:00 Fix/add to haddock-library test suite - - - - - e78f644d by Alec Theriault at 2018-11-06T13:26:31-08:00 Bump version bounds - - - - - 644335eb by Alec Theriault at 2018-11-06T13:53:30-08:00 Merge pull request haskell/haddock#875 from harpocrates/feature/markup-in-hyperlinks Inline markup in markdown-style links and images - - - - - e173ed0d by Alec Theriault at 2018-11-07T12:37:18-08:00 Fix issues around plus/minus * swap the minimize unicode to something more intuitive * use new unicode expander/collapser for instance lists * address some alignment issues in the "index" page - - - - - b2d92df7 by Alec Theriault at 2018-11-07T13:41:57-08:00 Allow "Contents" summary to scroll in a fixed div In the unfortunate event that the "Contents" summary doesn't fit vertically (like in the "Prelude"), it will be scrollable. - - - - - ca704c23 by Alec Theriault at 2018-11-07T13:45:15-08:00 Accept HTML output changes - - - - - 82c0ec6d by Alec Theriault at 2018-11-07T18:12:54-08:00 overflow-y 'scroll' -> 'auto' - - - - - 571d7657 by Alec Theriault at 2018-11-08T19:44:12-08:00 Clicking on "Contents" navigates to top of page - - - - - 8065a012 by Alec Theriault at 2018-11-08T19:44:17-08:00 Space out functions more Also, functions and data decls now have the same space before and after them. - - - - - cc650ede by Alec Theriault at 2018-11-09T08:13:35-08:00 Merge branch 'ghc-8.6' into wip/new-ocean - - - - - 65f8c17f by Alec Theriault at 2018-11-10T14:04:06-08:00 Update changelog - - - - - 20473847 by Alec Theriault at 2018-11-10T14:21:40-08:00 Replace oplus/ominus expander/collapser icons with triangles - - - - - 16592957 by Alec Theriault at 2018-11-10T14:35:10-08:00 Merge pull request haskell/haddock#949 from haskell/wip/new-ocean Introduce NewOcean theme. - - - - - 357cefe1 by Alec Theriault at 2018-11-10T16:02:13-08:00 Merge branch 'ghc-8.6' into ghc-head - - - - - de612267 by Alec Theriault at 2018-11-11T20:01:21-08:00 Rename 'NewOcean' theme to 'Linuwial' - - - - - 954b5baa by Alec Theriault at 2018-11-12T08:33:18-08:00 Add blockquote styling Matches b71da1feabf33efbbc517ac376bb690b5a604c2f from hackage-server. Fixes haskell/haddock#967. - - - - - d32c0b0b by Fangyi Zhou at 2018-11-12T10:24:13-08:00 Fix some broken links (#15733) Summary: For links in subpackages as well. https://phabricator.haskell.org/D5257 Test Plan: Manually verify links Reviewers: mpickering, bgamari, osa1 Reviewed By: osa1 GHC Trac Issues: haskell/haddock#15733 Differential Revision: https://phabricator.haskell.org/D5262 - - - - - 41098b1f by Alp Mestanogullari at 2018-11-15T22:40:09+01:00 Follow GHC HEAD's HsTypes.Promoted -> BasicTypes.PromotionFlag change It got introduced in ghc/ghc at ae2c9b40f5b6bf272251d1f4107c60003f541b62. - - - - - c5c1c7e0 by Alec Theriault at 2018-11-15T13:48:13-08:00 Merge pull request haskell/haddock#970 from alpmestan/alp/fix-promotionflag Follow GHC HEAD's HsTypes.Promoted -> BasicTypes.PromotionFlag change - - - - - 6473d3a4 by Shayan-Najd at 2018-11-23T01:38:49+01:00 [TTG: Handling Source Locations] Foundation and Pat Trac Issues haskell/haddock#15495 This patch removes the ping-pong style from HsPat (only, for now), using the plan laid out at https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow/HandlingSourceLocations (solution A). - the class `HasSrcSpan`, and its functions (e.g., `cL` and `dL`), are introduced - some instances of `HasSrcSpan` are introduced - some constructors `L` are replaced with `cL` - some patterns `L` are replaced with `dL->L` view pattern - some type annotation are necessarily updated (e.g., `Pat p` --> `Pat (GhcPass p)`) - - - - - 7a088dfe by Alec Theriault at 2018-11-26T11:11:28-08:00 More uniform handling of `forall`'s in HTML/LaTeX * don't forget to print explicit `forall`'s when there are arg docs * when printing an explicit `forall`, print all tyvars Fixes haskell/haddock#973 - - - - - d735e570 by Alec Theriault at 2018-12-12T08:42:09-08:00 Fix warnings, accept output * remove redundant imports (only brought to light due to recent work for improving redundant import detection) * fix a bug that was casuing exports to appear in reverse order * fix something in haddock-library that prevented compilation on old GHC's - - - - - a3852f8a by Zejun Wu at 2018-12-14T09:37:47-05:00 Output better debug infromation on internal error in extractDecl This will make investigation of haskell/haddock#979 easier - - - - - 2eccb5b9 by Alec Theriault at 2018-12-17T09:25:10-05:00 Refactor names + unused functions (#982) This commit should not introduce any change in functionality! * consistently use `getOccString` to convert `Name`s to strings * compare names directly when possible (instead of comparing strings) * get rid of unused utility functions - - - - - e82e4df8 by Alec Theriault at 2018-12-20T16:16:30-05:00 Load plugins when compiling each module (#983) * WIP: Load (typechecker) plugins from language pragmas * Revert "Load plugins when starting a GHC session (#905)" This reverts commit 72d82e52f2a6225686d9668790ac33c1d1743193. * Simplify plugin initialization code - - - - - 96e86f38 by Alec Theriault at 2018-12-23T10:23:20-05:00 Properly synify and render promoted type variables (#985) * Synify and render properly promoted type variables Fixes haskell/haddock#923. * Accept output - - - - - 23343345 by Alec Theriault at 2018-12-27T16:39:38-05:00 Remove `haddock-test`'s dep. on `syb` (#987) The functionality is easily inlined into one short function: `gmapEverywhere`. This doesn't warrant pulling in another package. - - - - - d0734f21 by Alec Theriault at 2018-12-27T16:39:52-05:00 Address deprecation warnings in `haddock-test` (#988) Fixes haskell/haddock#885. - - - - - 4d9f144e by mynguyen at 2018-12-30T23:42:26-05:00 Visible kind application haddock update - - - - - ffe0e9ed by Alec Theriault at 2019-01-07T13:55:22-08:00 Print kinded tyvars in constructors for Hoogle (#993) Fixes haskell/haddock#992 - - - - - 2e18b55d by Alec Theriault at 2019-01-10T16:42:45-08:00 Accept new output `GHC.Maybe` -> `Data.Maybe` (#996) Since 53874834b779ad0dfbcde6650069c37926da1b79 in GHC, "GHC.Maybe" is marked as `not-home`. That changes around some test output. - - - - - 055da666 by Gabor Greif at 2019-01-22T14:41:51+01:00 Lone typofix - - - - - 01bb71c9 by Alec Theriault at 2019-01-23T11:46:46-08:00 Keep forall on H98 existential data constructors (#1003) The information about whether or not there is a source-level `forall` is already available on a `ConDecl` (as `con_forall`), so we should use it instead of always assuming `False`! Fixes haskell/haddock#1002. - - - - - f9b9bc0e by Ryan Scott at 2019-01-27T09:28:12-08:00 Fix haskell/haddock#1004 with a pinch of dropForAlls - - - - - 5cfcdd0a by Alec Theriault at 2019-01-28T16:49:57-08:00 Loosen 'QuickCheck' and 'hspec' bounds It looks like the new versions don't cause any breakage and loosening the bounds helps deps fit in one stack resolver. - - - - - 3545d3dd by Alec Theriault at 2019-01-31T01:37:25-08:00 Use `.hie` files for the Hyperlinker backend (#977) # Summary This is a large architectural change to the Hyperlinker. * extract link (and now also type) information from `.hie` instead of doing ad-hoc SYB traversals of the `RenamedSource`. Also adds a superb type-on-hover feature (#715). * re-engineer the lexer to avoid needless string conversions. By going directly through GHC's `P` monad and taking bytestring slices, we avoid a ton of allocation and have better handling of position pragmas and CPP. In terms of performance, the Haddock side of things has gotten _much_ more efficient. Unfortunately, much of this is cancelled out by the increased GHC workload for generating `.hie` files. For the full set of boot libs (including `ghc`-the-library) * the sum of total time went down by 9-10% overall * the sum of total allocations went down by 6-7% # Motivation Haddock is moving towards working entirely over `.hi` and `.hie` files. This change means we no longer need the `RenamedSource` from `TypecheckedModule` (something which is _not_ in `.hi` files). # Details Along the way a bunch of things were fixed: * Cross package (and other) links are now more reliable (#496) * The lexer tries to recover from errors on every line (instead of at CPP boundaries) * `LINE`/`COLUMN` pragmas are taken into account * filter out zero length tokens before rendering * avoid recomputing the `ModuleName`-based `SrcMap` * remove the last use of `Documentation.Haddock.Utf8` (see haskell/haddock#998) * restructure temporary folder logic for `.hi`/`.hie` model - - - - - 2ded3359 by Herbert Valerio Riedel at 2019-02-02T12:06:12+01:00 Update/modernise haddock-library.cabal file - - - - - 62b93451 by Herbert Valerio Riedel at 2019-02-02T12:19:31+01:00 Tentatively declare support for unreleased base-4.13/ghc-8.8 - - - - - 6041e767 by Herbert Valerio Riedel at 2019-02-02T16:04:32+01:00 Normalise LICENSE text w/ cabal's BSD2 template Also, correct the `.cabal` files to advertise `BSD2` instead of the incorrect `BSD3` license. - - - - - 0b459d7f by Alec Theriault at 2019-02-02T18:06:12-08:00 CI: fetch GHC from validate artifact Should help make CI be less broken - - - - - 6b5c07cf by Alec Theriault at 2019-02-02T18:06:12-08:00 Fix some Hyperlinker test suite fallout * Amend `ParserSpec` to match new Hyperlinker API - pass in compiler info - strip out null tokens * Make `hypsrc-test` pass reliably - strip out `local-*` ids - strip out `line-*` ids from the `ClangCppBug` test - re-accept output - - - - - ded34791 by Nathan Collins at 2019-02-02T18:31:23-08:00 Update README instructions for Stack No need to `stack install` Haddock to test it. Indeed, `stack install` changes the `haddock` on user's `PATH` if `~/.local/bin` is on user's `PATH` which may not be desirable when hacking on Haddock. - - - - - 723298c9 by Alec Theriault at 2019-02-03T09:11:05-08:00 Remove `Documentation.Haddock.Utf8` The circumstances under which this module appeared are completely gone. The Hyperlinker backend no longer needs this module (it uses the more efficient `Encoding` module from `ghc`). Why no deprecation? Because this module really shouldn't exist! - It isn't used in `haddock-library`/`haddock-api` anymore - It was copy pasted directly from `utf8-string` - Folks seeking a boot-lib only solution can use `ghc`'s `Encoding` - - - - - 51050006 by Alec Theriault at 2019-02-03T22:58:58-08:00 Miscellaneous improvements to `Convert` (#1020) Now that Haddock is moving towards working entirely over `.hi` and `.hie` files, all declarations and types are going to be synthesized via the `Convert` module. In preparation for this change, here are a bunch of fixes to this module: * Add kind annotations to type variables in `forall`'s whose kind is not `Type`, unless the kind can be inferred from some later use of the variable. See `implicitForAll` and `noKindTyVars` in particular if you wish to dive into this. * Properly detect `HsQualTy` in `synifyType`. This is done by following suit with what GHC's `toIfaceTypeX` does and checking the first argument of `FunTy{} :: Type` to see if it classified as a given/wanted in the typechecker (see `isPredTy`). * Beef up the logic around figuring out when an explicit `forall` is needed. This includes: observing if any of the type variables will need kind signatures, if the inferred type variable order _without_ a forall will still match the one GHC claims, and some other small things. * Add some (not yet used) functionality for default levity polymorphic type signatures. This functionality similar to `fprint-explicit-runtime-reps`. Couple other smaller fixes only worth mentioning: * Show the family result signature only when it isn't `Type` * Fix rendering of implicit parameters in the LaTeX and Hoogle backends * Better handling of the return kind of polykinded H98 data declarations * Class decls produced by `tyThingToLHsDecl` now contain associated type defaults and default method signatures when appropriate * Filter out more `forall`'s in pattern synonyms - - - - - 841980c4 by Oleg Grenrus at 2019-02-04T08:44:25-08:00 Make a fixture of weird parsing of lists (#997) The second example is interesting. If there's a list directly after the header, and that list has deeper structure, the parser is confused: It finds two lists: - One with the first nested element, - everything after it I'm not trying to fix this, as I'm not even sure this is a bug, and not a feature. - - - - - 7315c0c8 by Ryan Scott at 2019-02-04T12:17:56-08:00 Fix haskell/haddock#1015 with dataConUserTyVars (#1022) The central trick in this patch is to use `dataConUserTyVars` instead of `univ_tvs ++ ex_tvs`, which displays the foralls in a GADT constructor in a way that's more faithful to how the user originally wrote it. Fixes haskell/haddock#1015. - - - - - ee0b49a3 by Ryan Scott at 2019-02-04T15:25:17-05:00 Changes from haskell/haddock#14579 We now have a top-level `tyConAppNeedsKindSig` function, which means that we can delete lots of code in `Convert`. - - - - - 1c850dc8 by Alan Zimmerman at 2019-02-05T21:54:18+02:00 Matching changes in GHC for haskell/haddock#16236 - - - - - ab03c38e by Simon Marlow at 2019-02-06T08:07:33+00:00 Merge pull request haskell/haddock#1014 from hvr/pr/bsd2-normalise Normalise LICENSE text w/ cabal's BSD2 template - - - - - 5a92ccae by Alec Theriault at 2019-02-10T06:21:55-05:00 Merge remote-tracking branch 'gitlab/wip/T16236-2' into ghc-head - - - - - c0485a1d by Alec Theriault at 2019-02-10T03:32:52-08:00 Removes `haddock-test`s dependency on `xml`/`xhtml` (#1027) This means that `html-test`, `latex-test`, `hoogle-test`, and `hypsrc-test` now only depend on GHC boot libs. So we should now be able to build and run these as part of GHC's testsuite. \o/ The reference output has changed very slightly, in three ways: * we don't convert quotes back into `&quot;` as the `xml` lib did * we don't add extra `&nbsp;` as the `xml` lib did * we now remove the entire footer `div` (instead of just emptying it) - - - - - 65a448e3 by Alec Theriault at 2019-02-11T12:27:41-05:00 Remove workaround for now-fixed Clang CPP bug (#1028) Before LLVM 6.0.1 (or 10.0 on Apple LLVM), there was a bug where lines that started with an octothorpe but turned out not to lex like pragmas would have an extra line added after them. Since this bug has been fixed upstream and that it doesn't have dire consequences anyways, the workaround is not really worth it anymore - we can just tell people to update their clang version (or re-structure their pragma code). - - - - - 360ca937 by Alec Theriault at 2019-02-13T11:36:11-05:00 Clean up logic for guessing `-B` and `--lib` (#1026) Haddock built with the `in-ghc-tree` flag tries harder to find the GHC lib folder and its own resources. This should make it possible to use `in-ghc-tree`-built Haddock without having to specify the `-B` and `--lib` options (just how you can use in-tree GHC without always specifying the `-B` option). The logic to do this relies on `getExecutablePath`, so we only get this auto-detection on platforms where this function works. - - - - - d583e364 by Alec Theriault at 2019-02-16T10:41:22-05:00 Fix tests broken by GHC Changes in 19626218566ea709b5f6f287d3c296b0c4021de2 affected some of the hyperlinker output. Accepted the new output (hovering over a `..` now shows you what that wildcard binds). Also fixed some stray deprecation warnings. - - - - - da0c42cc by Vladislav Zavialov at 2019-02-17T11:39:19+03:00 Parser changes to match !380 - - - - - ab96bed7 by Ryan Scott at 2019-02-18T04:44:08-05:00 Bump ghc version to 8.9 - - - - - 44b7c714 by Alec Theriault at 2019-02-22T05:49:43-08:00 Match GHC changes for T16185 `FunTy` now has an `AnonArgFlag` that indicates whether the arrow is a `t1 => t2` or `t1 -> t2`. This commit shouldn't change any functionality in Haddock. - - - - - 2ee653b1 by Alec Theriault at 2019-02-24T18:53:33-08:00 Update .travis.yml Points to the new GHC CI artifact. - - - - - 90939d71 by Alec Theriault at 2019-02-25T00:42:41-08:00 Support value/type namespaces on identifier links Identifier links can be prefixed with a 'v' or 't' to indicate the value or type namespace of the desired identifier. For example: -- | Some link to a value: v'Data.Functor.Identity' -- -- Some link to a type: t'Data.Functor.Identity' The default is still the type (with a warning about the ambiguity) - - - - - d6ed496c by Alec Theriault at 2019-02-25T00:42:46-08:00 Better identifier parsing * '(<|>)' and '`elem`' now get parsed and rendered properly as links * 'DbModule'/'DbUnitId' now properly get split apart into two links * tuple names now get parsed properly * some more small niceties... The identifier parsing code is more precise and more efficient (although to be fair: it is also longer and in its own module). On the rendering side, we need to pipe through information about backticks/parens/neither all the way through from renaming to the backends. In terms of impact: a total of 35 modules in the entirety of the bootlib + ghc lib docs change. The only "regression" is things like '\0'. These should be changed to @\\0@ (the path by which this previously worked seems accidental). - - - - - 3c3b404c by Alec Theriault at 2019-02-25T22:12:11-08:00 Fix standalone deriving docs Docs on standalone deriving decls for classes with associated types should be associated with the class instance, not the associated type instance. Fixes haskell/haddock#1033 - - - - - d51ef69e by Alec Theriault at 2019-02-26T19:14:59-08:00 Fix bogus identifier defaulting This avoids a situation in which an identifier would get defaulted to a completely different identifier. Prior to this commit, the 'Bug1035' test case would hyperlink 'Foo' into 'Bar'! Fixes haskell/haddock#1035. - - - - - 88cbbdc7 by Ryan Scott at 2019-02-27T10:14:03-05:00 Visible dependent quantification (#16326) changes - - - - - 0dcf6cee by Xia Li-yao at 2019-02-27T21:53:27-05:00 Menu item controlling which instances are expanded/collapsed (#1007) Adds a menu item (like "Quick Jump") for options related to displaying instances. This provides functionality for: * expanding/collapsing all instances on the currently opened page * controlling whether instances are expanded/collapsed by default * controlling whether the state of instances should be "remembered" This new functionality is implemented in Typescript in `details-helper`. The built-in-themes style switcher also got a revamp so that all three of QuickJump, the style switcher, and instance preferences now have the same style and implementation structure. See also: https://mail.haskell.org/pipermail/haskell-cafe/2019-January/130495.html Fixes haskell/haddock#698. Co-authored-by: Lysxia <lysxia at gmail.com> Co-authored-by: Nathan Collins <conathan at galois.com> - - - - - 3828c0fb by Alec Theriault at 2019-02-28T12:42:49-05:00 `--show-interface` should output to stdout. (#1040) Fixes haskell/haddock#864. - - - - - a50f4cda by gbaz at 2019-03-01T07:43:16-08:00 Increase contrast of Linuwal theme (#1037) This is to address the concern that, on less nice and older screens, some of the shades of grey blend in too easily with the white background. * darken the font slightly * darken slightly the grey behind type signatures and such * add a border and round the corners on code blocks * knock the font down by one point - - - - - ab4d41de by Alec Theriault at 2019-03-03T09:23:26-08:00 Merge branch 'ghc-8.6' into ghc-8.8 - - - - - 12f509eb by Ben Gamari at 2019-03-04T22:13:20-05:00 Remove reference to Opt_SplitObjs flag Split-objects has been removed. - - - - - 5b3e4c9a by Ryan Scott at 2019-03-06T19:16:24-05:00 Update html-test output to reflect haskell/haddock#16391 changes - - - - - fc228af1 by Alec Theriault at 2019-03-09T08:29:23-08:00 Match changes for "Stop inferring over-polymorphic kinds" The `hsq_ext` field of `HsQTvs` is now just the implicit variables (instead of also including information about which of these variables are dependent). This commit shouldn't change any functionality in Haddock. - - - - - 6ac109eb by Alec Theriault at 2019-03-09T11:22:55-08:00 Add .hi, .dyn_hi, etc files to .gitignore Fixes haskell/haddock#1030. - - - - - b55f0c05 by Alec Theriault at 2019-03-09T11:22:55-08:00 Better support for default methods in classes * default methods now get rendered differently * default associated types get rendered * fix a forgotten `s/TypeSig/ClassOpSig/` refactor in LaTeX backend * LaTeX backend now renders default method signatures NB: there is still no way to document default class members and the NB: LaTeX backend still crashes on associated types - - - - - 10aea0cf by Alec Theriault at 2019-03-09T11:22:55-08:00 Avoid multi-line `emph` in LaTeX backend `markupWarning` often processes inputs which span across paragraphs. Unfortunately, LaTeX's `emph` is not made to handle this (and will crash). Fixes haskell/haddock#936. - - - - - d22dc2c9 by Alec Theriault at 2019-03-09T11:22:55-08:00 Many LaTeX backend fixes After this commit, we can run with `--latex` on all boot libraries without crashing (although the generated LaTeX still fails to compile in a handful of larger packages like `ghc` and `base`). * Add newlines after all block elements in LaTeX. This is important to prevent the final output from being more an more indented. See the `latext-test/src/Example` test case for a sample of this. * Support associated types in class declarations (but not yet defaults) * Several small issues for producing compiling LaTeX; - avoid empy `\haddockbeginargs` lists (ex: `type family Any`) - properly escape identifiers depending on context (ex: `Int#`) - add `vbox` around `itemize`/`enumerate` (so they can be in tables) * Several spacing fixes: - limit the width of `Pretty`-arranged monospaced code - cut out extra space characters in export lists - only escape spaces if there are _multiple_ spaces - allow type signatures to be multiline (even without docs) * Remove uninteresting and repetitive `main.tex`/`haddock.sty` files from `latex-test` test reference output. Fixes haskell/haddock#935, haskell/haddock#929 (LaTeX docs for `text` build & compile) Fixes haskell/haddock#727, haskell/haddock#930 (I think both are really about type families...) - - - - - 0e6cee00 by Alec Theriault at 2019-03-29T12:11:56-07:00 Remove workaround for now-fixed Clang CPP bug (#1028) Before LLVM 6.0.1 (or 10.0 on Apple LLVM), there was a bug where lines that started with an octothorpe but turned out not to lex like pragmas would have an extra line added after them. Since this bug has been fixed upstream and that it doesn't have dire consequences anyways, the workaround is not really worth it anymore - we can just tell people to update their clang version (or re-structure their pragma code). - - - - - ce05434d by Alan Zimmerman at 2019-03-29T12:12:11-07:00 Matching changes in GHC for haskell/haddock#16236 (cherry picked from commit 3ee6526d4ae7bf4deb7cd1caf24b3d7355573576) - - - - - d85766b2 by Ben Gamari at 2019-03-29T12:14:04-07:00 Bump GHC to 8.8 - - - - - 5a82cbaf by Oleg Grenrus at 2019-05-05T13:02:00-07:00 Redo ParseModuleHeader - - - - - b9033348 by Oleg Grenrus at 2019-05-05T13:02:00-07:00 Comment C, which clarifies why e.g. ReadP is not enough - - - - - bb55c8f4 by Alec Theriault at 2019-05-13T16:10:07-07:00 Remove outdated `.ghci` files and `scripts` The `.ghci` files are actively annoying when trying to `cabal v2-repl`. As for the `scripts`, the distribution workflow is completely different. - - - - - 5ee244dc by Alec Theriault at 2019-05-13T16:10:07-07:00 Remove obsolete arcanist files + STYLE Now that GHC is hosted on Gitlab, the arcanist files don't make sense anymore. The STYLE file contains nothing more than a dead link too. - - - - - d07c1928 by Oleg Grenrus at 2019-05-13T16:41:43-07:00 Redo ParseModuleHeader - - - - - 492762d2 by Oleg Grenrus at 2019-05-13T16:41:43-07:00 Comment C, which clarifies why e.g. ReadP is not enough - - - - - af2ac773 by Ryan Scott at 2019-05-14T17:22:13-04:00 Changes for haskell/haddock#16110/#16356 - - - - - 6820ed0d by Alec Theriault at 2019-05-17T08:51:27-07:00 Unbreak haskell/haddock#1004 test case `fail` is no longer part of `Monad`. - - - - - 6bf7be98 by Alec Theriault at 2019-05-17T08:51:27-07:00 Fix haskell/haddock#1063 with better parenthesization logic for contexts The only other change in html/hoogle/hyperlinker output for the boot libraries that this caused is a fix to some Hoogle output for implicit params. ``` $ diff -r _build/docs/ old_docs diff -r _build/docs/html/libraries/base/base.txt old_docs/html/libraries/base/base.txt 13296c13296 < assertError :: (?callStack :: CallStack) => Bool -> a -> a --- > assertError :: ?callStack :: CallStack => Bool -> a -> a ``` - - - - - b5716b61 by Ryan Scott at 2019-05-22T17:24:32-04:00 Match changes with haskell/haddock#14332 - - - - - c115abf6 by Alec Theriault at 2019-05-26T16:01:58-04:00 Remove Haddock's dependency on `Cabal` At this point, Haddock depended on Cabal-the-library solely for a verbosity parser (which misleadingly accepts all sorts of verbosity options that Haddock never uses). Now, the only dependency on Cabal is for `haddock-test` (which uses Cabal to locate the Haddock interface files of a couple boot libraries). - - - - - e5b2d4a3 by Alec Theriault at 2019-05-26T16:16:25-04:00 Regression test: promoted lists in associated types When possible, associated types with promoted lists should use the promoted list literal syntax (instead of repeated applications of ': and '[]). This was fixed in 2122de5473fd5b434af690ff9ccb1a2e58491f8c. Closes haskell/haddock#466, - - - - - cc5ad5d3 by Alec Theriault at 2019-05-26T17:55:54-04:00 Merge branch 'ghc-8.6' into ghc-8.8 - - - - - 4b3301a6 by Alec Theriault at 2019-05-26T17:57:52-04:00 Release haddock-2.23, haddock-library-1.8.0 Tentatively adjust bounds and changelogs for the release to be bundled with GHC 8.8.1. - - - - - 69c7cfce by Matthew Pickering at 2019-05-30T10:54:27+01:00 Update hyperlinker tests for new types in .hie files - - - - - 29b7e738 by Zubin Duggal at 2019-05-30T10:57:51+01:00 update for new way to store hiefile headers - - - - - aeca5d5f by Zubin Duggal at 2019-06-04T18:57:42-04:00 update for new way to store hiefile headers - - - - - ba2ca518 by Ben Gamari at 2019-06-07T23:11:14+00:00 Update test output for introduction of Safe-Inferred - - - - - 3a975a6c by Ryan Scott at 2019-07-03T12:06:27-04:00 Changes for haskell/haddock#15247 - - - - - 0df46555 by Zubin Duggal at 2019-07-22T10:52:50+01:00 Fix haddockHypsrcTest - - - - - 2688686b by Sylvain Henry at 2019-09-12T23:19:39+02:00 Fix for GHC module renaming - - - - - 9ec0f3fc by Alec Theriault at 2019-09-20T03:21:00-04:00 Fix Travis CI, loosen .cabal bounds (#1089) Tentatively for the 2.23 release: * updated Travis CI to work again * tweaked bounds in the `.cabal` files * adjusted `extra-source-files` to properly identify test files - - - - - ca559beb by Matthías Páll Gissurarson at 2019-09-28T12:14:40-04:00 Small change in to facilitate extended typed-holes (#1090) This change has no functional effect on haddock itself, it just changes one pattern to use `_ (` rather than `_(`, so that we may use `_(` as a token for extended typed-holes later. - - - - - 02e28976 by Vladislav Zavialov at 2019-09-28T12:17:45-04:00 Remove spaces around @-patterns (#1093) This is needed to compile `haddock` when [GHC Proposal haskell/haddock#229](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0229-whitespace-bang-patterns.rst) is implemented. - - - - - 83cbbf55 by Alexis King at 2019-09-30T21:12:42-04:00 Fix the ignore-exports option (#1082) The `ignore-exports` option has been broken since haskell/haddock#688, as mentioned in https://github.com/haskell/haddock/pull/766#issue-172505043. This PR fixes it. - - - - - e127e0ab by Ben Gamari at 2019-10-06T15:12:06-04:00 Fix a few haddock issues - - - - - 3a0f5c89 by Zubin Duggal at 2019-10-07T17:56:13-04:00 Fix crash when there are no srcspans in the file due to CPP - - - - - 339c5ff8 by Alec Theriault at 2019-10-07T17:56:13-04:00 Prefer un-hyperlinked sources to no sources It is possible to fail to extract an HIE ast. This is however not a reason to produce _no_ output - we should still make a colorized HTML page. - - - - - d47ef478 by Alec Theriault at 2019-10-07T17:56:13-04:00 Add a regression test for haskell/haddock#1091 Previously, this input would crash Haddock. - - - - - ed7c8b0f by Alec Theriault at 2019-10-07T20:56:48-04:00 Add Hyperlinker test cases for TH-related stuff Hopefully this will guard against regressions around quasiquotes, TH quotes, and TH splices. - - - - - d00436ab by Andreas Klebinger at 2019-10-21T15:53:03+02:00 Refactor for withTiming changes. - - - - - 4230e712 by Ben Gamari at 2019-10-22T09:36:37-04:00 Merge pull request haskell/haddock#1101 from AndreasPK/withTimingRefactor Refactor for withTiming changes. - - - - - d155c5f4 by Ryan Scott at 2019-10-23T10:37:17-04:00 Reify oversaturated data family instances correctly (#1103) This fixes haskell/haddock#1103 by adapting the corresponding patch for GHC (see https://gitlab.haskell.org/ghc/ghc/issues/17296 and https://gitlab.haskell.org/ghc/ghc/merge_requests/1877). - - - - - 331a5adf by Sebastian Graf at 2019-10-25T17:14:40+02:00 Refactor for OutputableBndrId changes - - - - - 48a490e0 by Ben Gamari at 2019-10-27T10:16:16-04:00 Merge pull request haskell/haddock#1105 from sgraf812/wip/flexible-outputable Refactor for OutputableBndrId changes - - - - - f62a7dfc by Sebastian Graf at 2019-11-01T11:54:16+00:00 Define `XRec` for location information and get rid of `HasSrcSpan` In https://gitlab.haskell.org/ghc/ghc/merge_requests/1970 I propose a simpler way to encode location information into the GHC and Haddock AST while incurring no cost for e.g. TH which doesn't need location information. These are just changes that have to happen in lock step. - - - - - d9b242ed by Ryan Scott at 2019-11-03T13:20:03-05:00 Changes from haskell/haddock#14579 We now have a top-level `tyConAppNeedsKindSig` function, which means that we can delete lots of code in `Convert`. (cherry picked from commit cfd682c5fd03b099a3d78c44f9279faf56a0ac70) - - - - - dfd42406 by Sebastian Graf at 2019-11-04T07:02:14-05:00 Define `XRec` for location information and get rid of `HasSrcSpan` In https://gitlab.haskell.org/ghc/ghc/merge_requests/1970 I propose a simpler way to encode location information into the GHC and Haddock AST while incurring no cost for e.g. TH which doesn't need location information. These are just changes that have to happen in lock step. - - - - - 0b15be7c by Ben Gamari at 2019-11-09T13:21:33-05:00 Import isRuntimeRepVar from Type rather than TyCoRep isRuntimeRepVar is not longer exported from TyCoRep due to ghc#17441. - - - - - 091f7283 by Ben Gamari at 2019-11-10T12:47:06-05:00 Bump to GHC 8.10 - - - - - e88c71f2 by Ben Gamari at 2019-11-14T00:22:24-05:00 Merge pull request haskell/haddock#1110 from haskell/wip/T17441 Import isRuntimeRepVar from Type rather than TyCoRep - - - - - 4e0bbc17 by Ben Gamari at 2019-11-14T00:22:45-05:00 Version bumps for GHC 8.11 - - - - - 0e85ceb4 by Ben Gamari at 2019-11-15T11:59:45-05:00 Bump to GHC 8.10 - - - - - 00d6d68b by Ben Gamari at 2019-11-16T18:35:58-05:00 Bump ghc version to 8.11 - - - - - dde1fc3f by Ben Gamari at 2019-11-16T20:40:37-05:00 Drop support for base 4.13 - - - - - f52e331d by Vladislav Zavialov at 2019-11-24T13:02:28+03:00 Update Hyperlinker.Parser.classify to use ITdollar - - - - - 1ad96198 by Vladislav Zavialov at 2019-11-28T16:12:33+03:00 Remove HasSrcSpan (#17494) - - - - - 651afd70 by Herbert Valerio Riedel at 2019-12-08T12:08:16+01:00 Document error-prone conditional definition of instances This can easily trip up people if one isn't aware of it. Usually it's better to avoid this kind of conditionality especially for typeclasses for which there's an compat-package as conditional instances like these tend to fragment the ecosystem into those packages that go the extra mile to provide backward compat via those compat-packages and those that fail to do so. - - - - - b521af56 by Herbert Valerio Riedel at 2019-12-08T12:09:54+01:00 Fix build-failure regression for base < 4.7 The `$>` operator definition is available only since base-4.7 which unfortunately wasn't caught before release to Hackage (but has been fixed up by a metadata-revision) This commit introduces a `CompatPrelude` module which allows to reduce the amount of CPP by ousting it to a central location, i.e. the new `CompatPrelude` module. This pattern also tends to reduce the tricks needed to silence unused import warnings. Addresses haskell/haddock#1119 - - - - - 556c375d by Sylvain Henry at 2020-01-02T19:01:55+01:00 Fix after Iface modules renaming - - - - - bd6c53e5 by Sylvain Henry at 2020-01-07T00:48:48+01:00 hsyl20-modules-renamer - - - - - fb23713b by Ryan Scott at 2020-01-08T07:41:13-05:00 Changes for GHC#17608 See https://gitlab.haskell.org/ghc/ghc/merge_requests/2372 - - - - - 4a4dd382 by Ryan Scott at 2020-01-25T08:08:26-05:00 Changes for GHC#17566 See https://gitlab.haskell.org/ghc/ghc/merge_requests/2469 - - - - - e782a44d by Sylvain Henry at 2020-01-26T02:12:37+01:00 Rename PackageConfig into UnitInfo - - - - - ba3c9f05 by Sylvain Henry at 2020-01-26T02:12:37+01:00 Rename lookupPackage - - - - - ab37f9b3 by Ben Gamari at 2020-01-29T13:00:44-05:00 Merge pull request haskell/haddock#1125 from haskell/wip/T17566-take-two Changes for GHC#17566 - - - - - 3ebd5ae0 by Ryan Scott at 2020-01-31T05:56:50-05:00 Merge branch 'wip-hsyl20-package-refactor' into ghc-head - - - - - 602a747e by Richard Eisenberg at 2020-02-04T09:05:43+00:00 Echo GHC's removal of PlaceHolder module This goes with GHC's !2083. - - - - - ccfe5679 by Sylvain Henry at 2020-02-10T10:13:56+01:00 Module hierarchy: runtime (cf haskell/haddock#13009) - - - - - 554914ce by Cale Gibbard at 2020-02-10T16:10:39-05:00 Fix build of haddock in stage1 We have to use the correct version of the GHC API, but the version of the compiler itself doesn't matter. - - - - - 5b6fa2a7 by John Ericson at 2020-02-10T16:18:07-05:00 Noramlize `tested-with` fields in cabal files - - - - - e6eb3ebe by Vladislav Zavialov at 2020-02-16T13:25:26+03:00 No MonadFail/Alternative for P - - - - - 90e181f7 by Ben Gamari at 2020-02-18T14:13:47-05:00 Merge pull request haskell/haddock#1129 from obsidiansystems/wip/fix-stage1-build Fix build of haddock in stage1 - - - - - 93b64636 by Sylvain Henry at 2020-02-19T11:20:27+01:00 Modules: Driver (#13009) - - - - - da4f6c7b by Vladislav Zavialov at 2020-02-22T15:33:02+03:00 Use RealSrcSpan in InstMap - - - - - 479b1b50 by Ben Gamari at 2020-02-23T10:28:13-05:00 Merge remote-tracking branch 'upstream/ghc-head' into HEAD - - - - - 55ecacf0 by Sylvain Henry at 2020-02-25T15:18:27+01:00 Modules: Core (#13009) - - - - - 60867b3b by Vladislav Zavialov at 2020-02-28T15:53:52+03:00 Ignore the BufLoc/BufSpan added in GHC's !2516 - - - - - 1e5506d3 by Sylvain Henry at 2020-03-02T12:32:43+01:00 Modules: Core (#13009) - - - - - 6fb53177 by Richard Eisenberg at 2020-03-09T14:49:40+00:00 Changes in GHC's !1913. - - - - - 30b792ea by Ben Gamari at 2020-03-16T12:45:02-04:00 Merge pull request haskell/haddock#1130 from hsyl20/wip/hsyl20-modules-core2 Modules: Core (#13009) - - - - - cd761ffa by Sylvain Henry at 2020-03-18T15:24:00+01:00 Modules: Types - - - - - b6646486 by Ben Gamari at 2020-03-18T14:42:43-04:00 Merge pull request haskell/haddock#1133 from hsyl20/wip/hsyl20/modules/types Modules: Types - - - - - 9325d734 by Kleidukos at 2020-03-19T12:38:31-04:00 Replace the 'caption' class so that the collapsible sections are shown - - - - - 5e2bb555 by Kleidukos at 2020-03-19T12:38:31-04:00 Force ghc-8.8.3 - - - - - c6fcd0aa by Kleidukos at 2020-03-19T12:38:31-04:00 Update test fixtures - - - - - 5c849cb1 by Sylvain Henry at 2020-03-20T09:34:39+01:00 Modules: Types - - - - - 7f439155 by Alec Theriault at 2020-03-20T20:17:01-04:00 Merge branch 'ghc-8.8' into ghc-8.10 - - - - - b7904e5c by Alina Banerjee at 2020-03-20T20:24:17-04:00 Update parsing to strip whitespace from table cells (#1074) * Update parsing to strip leading & trailing whitespace from table cells * Update fixture data to disallow whitespaces at both ends in table cells * Add test case for whitespaces stripped from both ends of table cells * Update table reference test data for html tests - - - - - b9d60a59 by Alec Theriault at 2020-03-22T11:46:42-04:00 Clean up warnings * unused imports * imports of `Data.List` without import lists * missing `CompatPrelude` file in `.cabal` - - - - - 0c317dbe by Alec Theriault at 2020-03-22T18:46:54-04:00 Fix NPM security warnings This was done by calling `npm audit fix`. Note that the security issues seem to have been entirely in the build dependencies, since the output JS has not changed. - - - - - 6e306242 by Alec Theriault at 2020-03-22T20:10:52-04:00 Tentative 2.24 release Adjusted changelogs and versions in `.cabal` files in preparation for the upcoming release bundled with GHC 8.10. - - - - - 1bfb4645 by Ben Gamari at 2020-03-23T16:40:54-04:00 Merge commit '3c2944c037263b426c4fe60a3424c27b852ea71c' into HEAD More changes from the GHC types module refactoring. - - - - - be8c6f3d by Alec Theriault at 2020-03-26T20:10:53-04:00 Update `.travis.yml` to work with GHC 8.10.1 * Regenerated the Travis file with `haskell-ci` * Beef up `.cabal` files with more `tested-with` information - - - - - b025a9c6 by Alec Theriault at 2020-03-26T20:10:53-04:00 Update README Removed some out of date links/info, added some more useful links. * badge to Hackage * update old trac link * `ghc-head` => `ghc-8.10` * `cabal new-*` is now `cabal v2-*` and it should Just Work * `--test-option='--accept'` is the way to accept testsuite output - - - - - 564d889a by Alec Theriault at 2020-03-27T20:34:33-04:00 Fix crash in `haddock-library` on unicode space Our quickcheck tests for `haddock-library` stumbled across an edge case input that was causing Haddock to crash: it was a unicode space character. The root cause of the crash is that we were implicitly assuming that if a space character was not " \t\f\v\r", it would have to be "\n". We fix this by instead defining horizontal space as: any space character that is not '\n'. Fixes haskell/haddock#1142 - - - - - 2d360ba1 by Alec Theriault at 2020-03-27T21:57:32-04:00 Disallow qualified uses of reserved identifiers This a GHC bug (https://gitlab.haskell.org/ghc/ghc/issues/14109) too, but it is a relatively easy fix in Haddock. Note that the fix must live in `haddock-api` instead of `haddock-library` because we can only really decide if an identifier is a reserved one by asking the GHC lexer. Fixes haskell/haddock#952 - - - - - 47ae22ed by Alec Theriault at 2020-03-28T13:36:25-04:00 Remove unused `Haddock.Utils` functions * removed functions in `Haddock.Utils` that were not used anywhere (or exported from the `haddock-api` package) * moved GHC-specific utils from `Haddock.Utils` to `Haddock.GhcUtils` - - - - - c0291245 by Alec Theriault at 2020-03-28T13:36:25-04:00 Use TTG empty extensions to remove some `error`'s None of these error cases should ever have been reachable, so this is just a matter of leveraging the type system to assert this. * Use the `NoExtCon` and `noExtCon` to handle case matches for no extension constructors, instead of throwing an `error`. * Use the extension field of `HsSpliceTy` to ensure that this variant of `HsType` cannot exist in an `HsType DocNameI`. - - - - - 0aff8dc4 by Alec Theriault at 2020-03-28T13:36:25-04:00 Use `unLoc`/`noLoc` from GHC instead of `unL`/`reL` * `unL` is already defined by GHC as `unLoc` * `reL` is already defined by GHC as `noLoc` (in a safer way too!) * Condense `setOutputDir` and add a about exporting from GHC Fixes haskell/haddock#978 - - - - - bf6f2fb7 by Alec Theriault at 2020-03-28T13:36:25-04:00 Cleanup up GHC flags in `.cabal` files * enable more useful warning flags in `haddock-api`, handle the new warnings generated * remove `-fwarn-tabs` (now we'd use `-Wtabs`, but this has been in `-Wall` for a while now) - - - - - c576fbf1 by Alec Theriault at 2020-03-28T13:36:25-04:00 `haddock-library` document header level Document the fact the header level is going to always be between 1 and 6 inclusive. Along the way, I also optimized the parsing code a bit. - - - - - 71bce0ee by Alec Theriault at 2020-03-28T14:26:27-04:00 Disallow links in section headers This is quite straightforward to implement, since we already had a function `docToHtmlNoAnchors` (which we used to generate the link in the sidebar "Contents"). This breaks test `Bug387`, but that test case has aged badly: we now automatically generate anchors for all headings, so manually adding an anchor in a section makes no sense. Nested anchors are, as pointed out in haskell/haddock#1054, disallowed by the HTML standard. Fixes haskell/haddock#1054 - - - - - b461b0ed by Sylvain Henry at 2020-03-30T10:34:23+02:00 Modules: type checker - - - - - cd8cd1ee by Ben Gamari at 2020-03-31T12:45:02-04:00 Merge pull request haskell/haddock#1152 from hsyl20/wip/hsyl20/modules/tc Module renaming - - - - - 5e8f8ea7 by Felix Yan at 2020-04-01T17:58:06-07:00 Allow QuickCheck 2.14 Builds fine and all tests pass. - - - - - dc6b1633 by Sylvain Henry at 2020-04-05T16:43:44+02:00 Module renaming: amend previous patch - - - - - eee2f4ae by Ryan Scott at 2020-04-05T09:04:43-07:00 Fix haskell/haddock#1050 by filtering out invisible AppTy arguments This makes the `synifyType` case for `AppTy` more intelligent by taking into consideration the visibilities of each `AppTy` argument and filtering out any invisible arguments, as they aren't intended to be displayed in the source code. (See haskell/haddock#1050 for an example of what can happen if you fail to filter these out.) Along the way, I noticed that a special `synifyType` case for `AppTy t1 (CoercionTy {})` could be consolidated with the case below it, so I took the opportunity to tidy this up. - - - - - 23eb99e8 by Ben Gamari at 2020-04-07T11:19:58-04:00 Merge pull request haskell/haddock#1154 from hsyl20/wip/hsyl20/modules/tc Module renaming: amend previous patch - - - - - 072d994d by Ryan Scott at 2020-04-07T19:32:47-04:00 Make NoExtCon fields strict These changes are a part of a fix for [GHC#17992](https://gitlab.haskell.org/ghc/ghc/issues/17992). - - - - - d8ebf6c8 by Ignat Insarov at 2020-04-09T21:15:01-04:00 Recode Doc to Json. (#1159) * Recode Doc to Json. * More descriptive field labels. - - - - - 52df4b4e by Sylvain Henry at 2020-04-10T12:39:18+02:00 Module renaming - - - - - d9ab8ec8 by Cale Gibbard at 2020-04-14T11:43:34-04:00 Add instance of XCollectPat for DocNameI - - - - - 323d221d by Cale Gibbard at 2020-04-14T11:43:34-04:00 Rename XCollectPat -> CollectPass - - - - - 2df80867 by Alec Theriault at 2020-04-15T07:30:51-07:00 Prune docstrings that are never rendered When first creating a Haddock interface, trim `ifaceDocMap` and `ifaceArgMap` to not include docstrings that can never appear in the final output. Besides checking with GHC which names are exported, we also need to keep all the docs attached to instance declarations (it is much tougher to detect when an instance is fully private). This change means: * slightly smaller interface files (7% reduction on boot libs) * slightly less work to do processing docstrings that aren't used * no warnings in Haddock's output about private docstrings (see haskell/haddock#1070) I've tested manually that this does not affect any of the boot library generated docs (the only change in output was some small re-ordering in a handful of instance lists). This should mean no docstrings have been incorrectly dropped. - - - - - f49c90cc by Alec Theriault at 2020-04-15T07:30:51-07:00 Don't warn about missing links in miminal sigs When renaming the Haddock interface, never emit warnings when renaming a minimal signature. Also added some documention around `renameInterface`. Minimal signatures intentionally include references to potentially un-exported methods (see the discussion in haskell/haddock#330), so it is expected that they will not always have a link destination. On the principle that warnings should always be resolvable, this shouldn't produce a warning. See haskell/haddock#1070. - - - - - a9eda64d by Ben Gamari at 2020-04-17T09:27:35-04:00 Merge pull request haskell/haddock#1160 from hsyl20/wip/hsyl20/modules/systools Module renaming - - - - - f40d7879 by Cale Gibbard at 2020-04-20T11:30:38-04:00 Merge remote-tracking branch 'origin/ghc-head' into wip/ttg-con-pat - - - - - a50e7753 by Ben Gamari at 2020-04-20T11:36:10-04:00 Merge pull request haskell/haddock#1165 from obsidiansystems/wip/ttg-con-pat Trees that Grow refactor (GHC !2553) - - - - - 6a24795c by Alec Theriault at 2020-04-21T08:06:45-07:00 Fallback to `hiDecl` when `extractDecl` fails Sometimes, the declaration being exported is a subdecl (for instance, a record accessor getting exported at the top-level). For these cases, Haddock has to find a way to produce some synthetic sensible top-level declaration. This is done with `extractDecl`. As is shown by haskell/haddock#1067, this is sometimes impossible to do just at a syntactic level (for instance when the subdecl is re-exported). In these cases, the only sensible thing to do is to try to reify a declaration based on a GHC `TyThing` via `hiDecl`. - - - - - eee1a8b7 by Sylvain Henry at 2020-04-24T15:46:05+02:00 Module structure - - - - - 50b9259c by Iñaki at 2020-04-25T18:38:11-04:00 Add support for custom section anchors (#1179) This allows to have stable anchors for groups, even if the set of groups in the documentation is altered. The syntax for setting the anchor of a group is -- * Group name #desiredAnchor# Which will produce an html anchor of the form '#g:desiredAnchor' Co-authored-by: Iñaki García Etxebarria <git at inaki.blueleaf.cc> - - - - - 4003c97a by Ben Gamari at 2020-04-26T09:35:15-04:00 Merge pull request haskell/haddock#1166 from hsyl20/wip/hsyl20/modules/utils Module structure - - - - - 5206ab60 by Sylvain Henry at 2020-04-27T16:47:39+02:00 Renamed UnitInfo fields - - - - - c32c333b by Sylvain Henry at 2020-04-27T17:32:58+02:00 UnitId has been renamed into Unit - - - - - 3e87db64 by Sylvain Henry at 2020-04-27T17:36:00+02:00 Fix for GHC.Unit.* modules - - - - - ae3323a7 by Ben Gamari at 2020-04-29T12:36:37-04:00 Merge pull request haskell/haddock#1183 from hsyl20/wip/hsyl20/unitid Refactoring of Unit code - - - - - b105564a by Artem Pelenitsyn at 2020-05-03T08:14:10+01:00 add dependency on exceptions because GHC.Exception was boiled down (ghc haskell/haddock#18075) - - - - - 9857eff3 by Zubin Duggal at 2020-05-04T18:48:25+01:00 Atomic update of NameCache in readHieFile - - - - - 86bbb226 by Sylvain Henry at 2020-05-14T16:36:27+02:00 Fix after Config module renaming - - - - - a4bbdbc2 by Gert-Jan Bottu at 2020-05-15T22:09:44+02:00 Explicit Specificity Support for Haddock - - - - - 46199daf by Ben Gamari at 2020-05-19T09:59:56-04:00 Merge pull request haskell/haddock#1192 from hsyl20/hsyl20/modules-config Fix after Config module renaming - - - - - f9a9d2ba by Gert-Jan Bottu at 2020-05-20T16:48:38-04:00 Explicit Specificity Support for Haddock - - - - - 55c5b7ea by Ben Gamari at 2020-05-21T00:32:02-04:00 Merge commit 'a8d7e66da4dcc3b242103271875261604be42d6e' into ghc-head - - - - - a566557f by Cale Gibbard at 2020-05-21T16:02:06-04:00 isBootSummary now produces a result of type IsBootInterface - - - - - ea52f905 by Zubin Duggal at 2020-05-24T17:55:48+01:00 update for hiefile-typeclass-info - - - - - 49ba7a67 by Willem Van Onsem at 2020-05-25T12:23:01-04:00 Use floor over round to calculate the percentage (#1195) If we compile documentation where only a small fraction is undocumented, it is misleading to see 100% coverage - 99% is more intuitive. Fixes haskell/haddock#1194 - - - - - c025ebf1 by Ben Gamari at 2020-05-29T14:32:42-04:00 Merge pull request haskell/haddock#1185 from obsidiansystems/boot-disambig isBootSummary now produces a result of type IsBootInterface - - - - - 74ab9415 by Ben Gamari at 2020-05-29T20:23:39-04:00 haddock: Bounds bumps for GHC 8.12 - - - - - b40be944 by Ben Gamari at 2020-06-03T17:02:31-04:00 testsuite: Update expected output for simplified subsumption - - - - - 624be71c by Ryan Scott at 2020-06-05T12:43:23-04:00 Changes for GHC#18191 See https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3337. - - - - - fbd8f7ce by Sylvain Henry at 2020-06-08T15:31:47+02:00 Fix after unit refactoring - - - - - 743fda4d by Ben Gamari at 2020-06-09T12:09:58-04:00 Merge pull request haskell/haddock#1202 from hsyl20/wip/hsyl20/unitid-ii Fix after unit refactoring - - - - - d07a06a9 by Ryan Scott at 2020-06-13T07:16:55-04:00 Use HsForAllTelescope (GHC#18235) - - - - - 389bb60d by Ben Gamari at 2020-06-13T15:30:52-04:00 haddock: Bounds bumps for GHC 8.12 - - - - - 7a377f5f by Ben Gamari at 2020-06-17T14:53:16-04:00 Merge pull request haskell/haddock#1199 from bgamari/wip/ghc-8.12 haddock: Bounds bumps for GHC 8.12 - - - - - 9fd9e586 by Krzysztof Gogolewski at 2020-06-17T16:09:07-04:00 Adapt Haddock to LinearTypes See ghc/ghc!852. - - - - - 46fe7636 by Ben Gamari at 2020-06-18T14:20:02-04:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-head - - - - - 35a3c9e2 by Zubin Duggal at 2020-06-21T21:19:18+05:30 Use functions exported from HsToCore - - - - - 8abe3928 by Ben Gamari at 2020-06-24T13:53:39-04:00 Merge pull request haskell/haddock#1204 from wz1000/wip/haddock-hstocore Use functions exported from GHC.HsToCore.Docs - - - - - 22f2c937 by Matthías Páll Gissurarson at 2020-06-26T19:07:03+02:00 Adapt Haddock for QualifiedDo - - - - - 3f6208d7 by Vladislav Zavialov at 2020-06-28T14:28:16+03:00 Handle LexicalNegation's ITprefixminus - - - - - 03a19f41 by Sylvain Henry at 2020-07-02T09:37:38+02:00 Rename hsctarget into backend - - - - - ea17ff23 by Andreas Klebinger at 2020-07-02T17:44:18+02:00 Update for UniqFM changes. - - - - - 9872f2f3 by Ben Gamari at 2020-07-09T10:39:19-04:00 Merge pull request haskell/haddock#1209 from AndreasPK/wip/typed_uniqfm Update for UniqFM changes. - - - - - 68f7b668 by Krzysztof Gogolewski at 2020-07-12T18:16:57+02:00 Sync with GHC removing {-# CORE #-} pragma See ghc ticket haskell/haddock#18048 - - - - - eb372681 by Sylvain Henry at 2020-07-20T11:41:30+02:00 Rename hscTarget into backend - - - - - fb7f78bf by Ben Gamari at 2020-07-21T12:15:25-04:00 Merge pull request haskell/haddock#1214 from hsyl20/wip/hsyl20/hadrian/ncg Rename hscTarget into backend - - - - - 1e8f5b56 by Ben Gamari at 2020-07-23T09:11:50-04:00 Merge commit '904dce0cafe0a241dd3ef355775db47fc12f434d' into ghc-head - - - - - d8fd1775 by Zubin Duggal at 2020-07-23T18:46:40+05:30 Update for modular ping pong - - - - - 8416f872 by Ben Gamari at 2020-07-23T09:35:03-04:00 Merge pull request haskell/haddock#1200 from wz1000/wip/wz1000-modular-ping-pong Modular ping pong - - - - - a24a8577 by Ben Gamari at 2020-07-28T15:23:36-04:00 Bump GHC version to 9.0 - - - - - 6a51c9dd by Sylvain Henry at 2020-08-05T18:47:05+02:00 Fix after Outputable refactoring - - - - - c05e1c99 by Ben Gamari at 2020-08-10T14:41:41-04:00 Merge pull request haskell/haddock#1223 from hsyl20/wip/hsyl20/dynflags/exception Fix after Outputable refactoring - - - - - d964f15b by Sylvain Henry at 2020-08-12T11:58:49+02:00 Fix after HomeUnit - - - - - 8e6d5b23 by Ben Gamari at 2020-08-12T14:25:30-04:00 Merge pull request haskell/haddock#1225 from hsyl20/wip/hsyl20/plugins/homeunit Fix after HomeUnit - - - - - 8c7880fe by Sylvain Henry at 2020-08-17T14:13:29+02:00 Remove Ord FastString instance - - - - - 8ea410db by Alex Biehl at 2020-08-19T10:56:32+02:00 Another round of `npm audit fix` (#1228) This should shut down the warnings on Github. Note that the security issues seem to have been entirely in the build dependencies, since the output JS has not changed. Last NPM dependency audit happend in d576b2327e2bc117f912fe0a9d595e9ae62614e0 Co-authored-by: Alex Biehl <alex.biehl at target.com> - - - - - 7af6e2a8 by Ben Gamari at 2020-08-31T13:59:34-04:00 Merge pull request haskell/haddock#1226 from hsyl20/wip/hsyl20/fs_ord Remove Ord FastString instance - - - - - ffbc8702 by Alan Zimmerman at 2020-09-07T21:47:41+01:00 Match GHC for haskell/haddock#18639, remove GENERATED pragma - - - - - a93f1268 by Alan Zimmerman at 2020-09-07T23:11:38+01:00 Merge pull request haskell/haddock#1232 from haskell/wip/T18639-remove-generated-pragma, Match GHC for haskell/haddock#18639, remove GENERATED pragma - - - - - 1f605d50 by Ben Gamari at 2020-09-14T18:30:01-04:00 Bump GHC version to 9.1 - - - - - 6599df62 by Vladislav Zavialov at 2020-09-18T14:05:15+03:00 Bump base upper bound to 4.16 - - - - - a01b3c43 by Ben Gamari at 2020-09-22T15:41:48-04:00 Update hypsrc-test for QuickLook This appears to be a spurious change. - - - - - e9cc6cac by Vladislav Zavialov at 2020-09-26T21:00:12+03:00 Updates for the new linear types syntax: a %p -> b - - - - - 30e3ca7c by Sylvain Henry at 2020-09-29T11:18:32-04:00 Update for parser (#1234) - - - - - b172f3e3 by Vladislav Zavialov at 2020-09-30T01:01:30+03:00 Updates for the new linear types syntax: a %p -> b - - - - - 0b9c08d3 by Sylvain Henry at 2020-09-30T11:02:33+02:00 Adapt to GHC parser changes - - - - - b9540b7a by Sylvain Henry at 2020-10-12T09:13:38-04:00 Don't pass the HomeUnitId (#1239) - - - - - 34762e80 by HaskellMouse at 2020-10-13T12:58:04+03:00 Changed tests due to unification of `Nat` and `Natural` in the follwing merge request: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3583 - - - - - 256f86b6 by Vladislav Zavialov at 2020-10-15T10:48:03+03:00 Add whitespace in: map ($ v) - - - - - 4a3f711b by Alan Zimmerman at 2020-10-19T08:57:27+01:00 Match GHC, adding IsUnicodeSyntax field to HsFunTy and HsScaled - - - - - 072cdd21 by Alan Zimmerman at 2020-10-21T14:48:28-04:00 Match GHC, adding IsUnicodeSyntax field to HsFunTy and HsScaled (cherry picked from commit a7d1d8e034d25612d5d08ed8fdbf6f472aded4a1) - - - - - 9e09a445 by Alan Zimmerman at 2020-10-21T23:53:34-04:00 Match GHC, adding IsUnicodeSyntax field to HsFunTy and HsScaled (cherry picked from commit a7d1d8e034d25612d5d08ed8fdbf6f472aded4a1) - - - - - 636d7de3 by Sylvain Henry at 2020-10-26T14:31:54-04:00 GHC.Driver.Types refactoring (#1242) - - - - - a597f000 by Ryan Scott at 2020-10-29T04:18:05-04:00 Adapt to the removal of Hs{Boxed,Constraint}Tuple See ghc/ghc!4097 and GHC#18723. - - - - - b96660fb by Ryan Scott at 2020-10-30T04:53:05-04:00 Adapt to HsConDecl{H98,GADT}Details split Needed for GHC#18844. - - - - - c287d82c by Ryan Scott at 2020-10-30T19:35:59-04:00 Adapt to HsOuterTyVarBndrs These changes accompany ghc/ghc!4107, which aims to be a fix for haskell/haddock#16762. - - - - - a34c31a1 by Ryan Scott at 2020-11-13T13:38:34-05:00 Adapt to splitPiTysInvisible being renamed to splitInvisPiTys This is a part of !4434, a fix for GHC#18939. - - - - - 66ea459d by Sylvain Henry at 2020-11-16T10:59:30+01:00 Fix after Plugins moved into HscEnv - - - - - 508556d8 by Ben Gamari at 2020-11-18T15:47:40-05:00 Merge pull request haskell/haddock#1253 from hsyl20/wip/hsyl20/plugins/hscenv Fix after Plugins moved into HscEnv - - - - - 620fec1a by Andreas Klebinger at 2020-11-24T20:51:59+01:00 Update for changes in GHC's Pretty - - - - - 01cc13ab by Richard Eisenberg at 2020-11-25T23:18:35-05:00 Avoid GHC#18932. - - - - - 8d29ba21 by Cale Gibbard at 2020-11-25T23:18:35-05:00 Add type arguments to PrefixCon - - - - - 414d5f87 by Sylvain Henry at 2020-11-30T17:06:04+01:00 DynFlags's unit fields moved to HscEnv - - - - - e356668c by Ben Gamari at 2020-11-30T11:11:37-05:00 Merge pull request haskell/haddock#1258 from hsyl20/wip/hsyl20/hscenv/unitstate Unit fields moved from DynFlags to HscEnv - - - - - 7cf552f1 by Ben Gamari at 2020-12-03T10:31:27-05:00 Merge pull request haskell/haddock#1257 from AndreasPK/wip/andreask/opt_dumps Update for changes in GHC's Pretty - - - - - fc0871c3 by Veronika Romashkina at 2020-12-08T16:35:33+01:00 Fix docs links from Darcs to GitHub in intro (#1262) - - - - - 7059e808 by Veronika Romashkina at 2020-12-08T16:36:16+01:00 Use gender neutral word in docs (#1260) - - - - - 1b16e5ee by Maximilian Tagher at 2020-12-08T16:40:03+01:00 Allow scrolling search results (#1235) Closes https://github.com/haskell/haddock/issues/1231 - - - - - 8a118c01 by dependabot[bot] at 2020-12-08T16:40:25+01:00 Bump bl from 1.2.2 to 1.2.3 in /haddock-api/resources/html (#1255) Bumps [bl](https://github.com/rvagg/bl) from 1.2.2 to 1.2.3. - [Release notes](https://github.com/rvagg/bl/releases) - [Commits](https://github.com/rvagg/bl/compare/v1.2.2...v1.2.3) Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - c89ff587 by Xia Li-yao at 2020-12-08T16:42:17+01:00 Allow more characters in anchor following module reference (#1220) - - - - - 14af7d64 by Xia Li-yao at 2020-12-08T16:43:05+01:00 Add dangling changes from branches ghc-8.6 and ghc-8.8 (#1243) * Fix multiple typos and inconsistencies in doc/markup.rst Note: I noticed some overlap with haskell/haddock#1112 from @wygulmage and haskell/haddock#1081 from @parsonsmatt after creating these proposed changes - mea culpa for not looking at the open PRs sooner. * Fix haskell/haddock#1113 If no Signatures, no section of index.html * Change the formatting of missing link destinations The current formatting of the missing link destination does not really help user to understand the reasons of the missing link. To address this, I've changed the formatting in two ways: - the missing link symbol name is now fully qualified. This way you immediately know which haskell module cannot be linked. It is then easier to understand why this module does not have documentation (hidden module or broken documentation). - one line per missing link, that's more readable now that symbol name can be longer due to qualification. For example, before haddock was listing missing symbol such as: ``` could not find link destinations for: Word8 Word16 mapMaybe ``` Now it is listed as: ``` could not find link destinations for: - Data.Word.Word8 - Data.Word.Word16 - Data.Maybe.mapMaybe ``` * Add `--ignore-link-symbol` command line argument This argument can be used multiples time. A missing link to a symbol listed by `--ignore-link-symbol` won't trigger "missing link" warning. * Forbid spaces in anchors (#1148) * Improve error messages with context information (#1060) Co-authored-by: Matt Audesse <matt at mattaudesse.com> Co-authored-by: Mike Pilgrem <mpilgrem at users.noreply.github.com> Co-authored-by: Guillaume Bouchard <guillaume.bouchard at tweag.io> Co-authored-by: Pepe Iborra <pepeiborra at gmail.com> - - - - - 89e3af13 by tomjaguarpaw at 2020-12-08T18:00:04+01:00 Enable two warnings (#1245) because they will be soon be added to -Wall. See https://gitlab.haskell.org/ghc/ghc/-/issues/15656 - - - - - c3320f8d by Willem Van Onsem at 2020-12-08T18:26:55+01:00 simplify calculating percentages fixing haskell/haddock#1194 (#1236) - - - - - 685df308 by Alex Biehl at 2020-12-08T20:06:26+01:00 Changes for GHC#17566 See https://gitlab.haskell.org/ghc/ghc/merge_requests/2469 - - - - - be3ec3c0 by Alex Biehl at 2020-12-08T20:06:26+01:00 Import intercalate - - - - - 32c33912 by Matthías Páll Gissurarson at 2020-12-08T21:15:30+01:00 Adapt Haddock for QualifiedDo - - - - - 31696088 by Alex Biehl at 2020-12-08T22:06:02+01:00 Fix haddock-library tests - - - - - fbc0998a by Alex Biehl at 2020-12-08T23:08:23+01:00 Move to GitHub CI (#1266) * Initial version of ci.yml This is a straight copy from Dmitrii Kovanikov's blog post at https://kodimensional.dev/github-actions. Will adapt to haddock in successive commits. * Delete .travis.yml * Modify to only test on ghc-8.10.{1,2} * Use actions/setup-haskell at v1.1.4 * Relax QuickCheck bound on haddock-api * Remove stack matrix for now * Nail down to ghc-8.10 branch for now * Pin index state to 2020-12-08T20:13:44Z for now * Disable macOS and Windows tests for now for speed up - - - - - 5b946b9a by tomjaguarpaw at 2020-12-10T19:01:41+01:00 Enable two warnings (#1245) (#1268) because they will be soon be added to -Wall. See https://gitlab.haskell.org/ghc/ghc/-/issues/15656 - - - - - bc5a408f by dependabot[bot] at 2020-12-10T19:02:16+01:00 Bump ini from 1.3.5 to 1.3.7 in /haddock-api/resources/html (#1269) Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - d02995f1 by Andrew Martin at 2020-12-14T16:48:40-05:00 Update for boxed rep - - - - - a381aeff by Ben Gamari at 2020-12-15T15:13:30-05:00 Revert "Enable two warnings (#1245) (#1268)" As this does not build on GHC `master`. This reverts commit 7936692badfe38f23ae95b51fb7bd7c2ff7e9bce. - - - - - a63c0a9e by Ben Gamari at 2020-12-15T15:17:59-05:00 Revert "Update for boxed rep" This reverts commit 4ffb30d8b637ccebecc81ce610f0af451ac8088d. - - - - - 53bfbb29 by Ben Gamari at 2020-12-15T15:37:24-05:00 Merge remote-tracking branch 'upstream/ghc-head' into ghc-head - - - - - bae76a30 by Ben Gamari at 2020-12-16T02:44:42+00:00 Update output for nullary TyConApp optimisation (ghc/ghc!2952) - - - - - 4b733b57 by Krzysztof Gogolewski at 2020-12-16T20:03:14+01:00 Display linear/multiplicity arrows correctly (#1238) Previously we were ignoring multiplicity and displayed a %1 -> b as a -> b. - - - - - ee463bd3 by Ryan Scott at 2020-12-16T16:55:23-05:00 Adapt to HsCoreTy (formerly NewHsTypeX) becoming a type synonym Needed for !4417, the fix for GHC#15706 and GHC#18914. - - - - - ed0b02f8 by tomjaguarpaw at 2020-12-19T10:17:19+00:00 Enable two warnings (#1245) (#1268) because they will be soon be added to -Wall. See https://gitlab.haskell.org/ghc/ghc/-/issues/15656 - - - - - d80bf8f5 by Sylvain Henry at 2020-12-21T10:09:25+01:00 Fix after binder collect changes - - - - - bf4c9d32 by Adam Gundry at 2020-12-23T21:35:01+00:00 Adapt to changes to GlobalRdrElt and AvailInfo Needed for ghc/ghc!4467 - - - - - 37736c4c by John Ericson at 2020-12-28T12:27:02-05:00 Support a new ghc --make node type for parallel backpack upsweep - - - - - 717bdeac by Vladislav Zavialov at 2020-12-29T10:50:02+03:00 Inline and fix getGADTConTypeG The getGADTConTypeG used HsRecTy, which is at odds with GHC issue haskell/haddock#18782. I noticed that getGADTConTypeG was only used in the Hoogle backend. Interestingly, when handling H98 constructors, Hoogle converts RecCon to PrefixCon (see Haddock.Backends.Hoogle.ppCtor). So I changed getGADTConTypeG to handle RecConGADT in the same manner as PrefixConGADT, and after this simplification moved it into the 'where' clause of ppCtor, to the only place where it is used. The practical effect of this change is as follows. Consider this example: data TestH98 = T98 { bar::Int } data TestGADT where TG :: { foo :: Int } -> TestGADT Before this patch, haddock --hoogle used to produce: T98 :: Int -> TestH98 [TG] :: {foo :: Int} -> TestGADT Notice how the record syntax was discarded in T98 but not TG. With this patch, we always produce signatures without record syntax: T98 :: Int -> TestH98 [TG] :: Int -> TestGADT I suspect this might also be a bugfix, as currently Hoogle doesn't seem to render GADT record constructors properly. - - - - - cb1b8c56 by Andreas Abel at 2020-12-30T21:12:37+01:00 Build instructions: haddock-library and -api first! - - - - - b947f6ad by Ben Gamari at 2020-12-31T13:04:19-05:00 Merge pull request haskell/haddock#1281 from obsidiansystems/wip/backpack-j Changes to support -j with backpack - - - - - 120e1cfd by Hécate Moonlight at 2021-01-04T19:54:58+01:00 Merge pull request haskell/haddock#1282 from andreasabel/master Build instructions: haddock-library and -api first! - - - - - fd45e41a by Ben Gamari at 2021-01-05T16:14:31-05:00 Merge remote-tracking branch 'origin/ghc-8.10' into ghc-9.0 - - - - - b471bdec by Ben Gamari at 2021-01-05T16:23:02-05:00 Merge commit '1e56f63c3197e7ca1c1e506e083c2bad25d08793' into ghc-9.0 - - - - - 81cdbc41 by Alex Biehl at 2021-01-09T12:14:41+01:00 Prepare Haddock for being a GHC Plugin - - - - - b646d952 by Alex Biehl at 2021-01-09T12:14:41+01:00 Make Haddock a GHC Plugin - - - - - cc044674 by Alex Biehl at 2021-01-09T12:14:41+01:00 Add -j[n] CLI param to Haddock executable It translates to `--ghcopt=-j[n]` - - - - - 84a04073 by Alex Biehl at 2021-01-09T12:14:41+01:00 Abstract Monad for interface creation I found that when running as a plugin the lookupName function (which runs in Ghc monad) does not work correctly from the typeCheckResultAction hook. Instead, we abstracted the monad used when creating interfaces, so that access to GHC session specific parts is explicit and so that the TcM can provide their (correct) implementation of lookupName. - - - - - 5be2c4f7 by Alex Biehl at 2021-01-09T12:14:41+01:00 Accept tests - - - - - 8cefee9d by Alex Biehl at 2021-01-09T16:10:47+01:00 Add missing dependency for mtl - - - - - 3681f919 by Ben Gamari at 2021-01-13T18:39:25-05:00 Merge remote-tracking branch 'origin/ghc-9.0' into ghc-head - - - - - 33c6b152 by Hécate Moonlight at 2021-01-14T16:04:20+01:00 Merge pull request haskell/haddock#1273 from hsyl20/wip/hsyl20/arrows Fix after binder collect changes - - - - - 70d13e8e by Joachim Breitner at 2021-01-22T19:03:45+01:00 Make haddock more robust to changes to the `Language` data type With the introduction of GHC2021, the `Languages` data type in GHC will grow. In preparation of that (and to avoid changing haddock with each new language), this change makes the code handle extensions to that data type gracefully. (cherry picked from commit c341dd7c9c3fc5ebc83a2d577c5a726f3eb152a5) - - - - - 7d6dd57a by John Ericson at 2021-01-22T22:02:02+00:00 Add `NoGhcTc` instance now that it's not closed - - - - - e5fdaf0a by Alan Zimmerman at 2021-01-23T22:57:44+00:00 Merge pull request haskell/haddock#1293 from obsidiansystems/wip/fix-18936 Add `NoGhcTc` instance now that it's not closed - - - - - 989a1e05 by Oleg Grenrus at 2021-01-24T16:11:46+03:00 Add import list to Data.List - - - - - 368e144a by Ben Gamari at 2021-01-28T22:15:48+01:00 Adapt to "Make PatSyn immutable" - - - - - abe66c21 by Alfredo Di Napoli at 2021-02-01T08:05:35+01:00 Rename pprLogErrMsg to new name - - - - - e600e75c by Hécate Moonlight at 2021-02-05T14:53:00+01:00 Move CI to ghc-9.0 - - - - - dd492961 by Vladislav Zavialov at 2021-02-05T14:53:00+01:00 Update cabal.project and README build instructions - - - - - 31bd292a by Hécate Moonlight at 2021-02-05T15:03:56+01:00 Merge pull request haskell/haddock#1296 from Kleidukos/ghc-9.0 Merge the late additions to ghc-8.10 into ghc-9.0 - - - - - 6388989e by Vladislav Zavialov at 2021-02-05T17:41:57+03:00 Cleanup: fix build warnings - - - - - f99407ef by Daniel Rogozin at 2021-02-05T18:11:48+03:00 type level characters support for haddock (required for haskell/haddock#11342) - - - - - d8c6b26f by Hécate Moonlight at 2021-02-05T17:44:50+01:00 Add a CONTRIBUTING.md file - - - - - 6a01ad98 by Hécate Moonlight at 2021-02-05T17:58:16+01:00 Merge pull request haskell/haddock#1312 from Kleidukos/proper-branch-etiquette Add a CONTRIBUTING.md file - - - - - 955eecc4 by Vladislav Zavialov at 2021-02-05T20:29:00+03:00 Merge commit 'a917dfd29f3103b69378138477514cbfa38558a9' into ghc-head - - - - - 47b3d6ab by Hécate Moonlight at 2021-02-05T19:09:38+01:00 Amend the CONTRIBUTING.md file - - - - - 23de6137 by Hécate Moonlight at 2021-02-05T19:16:49+01:00 Merge pull request haskell/haddock#1313 from Kleidukos/amend-contributing Amend the CONTRIBUTING.md file - - - - - 69026b59 by Krzysztof Gogolewski at 2021-02-05T23:05:56+01:00 Display linear/multiplicity arrows correctly (#1238) Previously we were ignoring multiplicity and displayed a %1 -> b as a -> b. (cherry picked from commit b4b4d896d2d68d6c48e7db7bfe95c185ca0709cb) - - - - - ea026b78 by Oleg Grenrus at 2021-02-06T17:14:45+01:00 Add import list to Data.List - - - - - 5204326f by Hécate Moonlight at 2021-02-06T17:15:44+01:00 Merge pull request haskell/haddock#1316 from Kleidukos/explicit-imports-to-data-list Add import list to Data.List - - - - - 1f4d2136 by Ben Gamari at 2021-02-06T11:53:31-05:00 Merge remote-tracking branch 'origin/ghc-head' into wip/ghc-head-merge - - - - - 13f0d09a by Ben Gamari at 2021-02-06T11:53:45-05:00 Fix partial record selector warning - - - - - 5c115f7e by Ben Gamari at 2021-02-06T11:55:52-05:00 Merge commit 'a917dfd29f3103b69378138477514cbfa38558a9' into wip/ghc-head-merge - - - - - b6fd8b75 by Ben Gamari at 2021-02-06T12:01:31-05:00 Merge commit '41964cb2fd54b5a10f8c0f28147015b7d5ad2c02' into wip/ghc-head-merge - - - - - a967194c by Ben Gamari at 2021-02-06T18:30:35-05:00 Merge branch 'wip/ghc-head-merge' into ghc-head - - - - - 1f4c3a91 by MorrowM at 2021-02-07T01:52:33+02:00 Fix search div not scrolling - - - - - 684b1287 by Iñaki García Etxebarria at 2021-02-07T16:13:04+01:00 Add support for labeled module references Support a markdown-style way of annotating module references. For instance -- | [label]("Module.Name#anchor") will create a link that points to the same place as the module reference "Module.Name#anchor" but the text displayed on the link will be "label". - - - - - bdb55a5d by Hécate Moonlight at 2021-02-07T16:18:10+01:00 Merge pull request haskell/haddock#1319 from alexbiehl/alex/compat Backward compat: Add support for labeled module references - - - - - 6ca70991 by Hécate Moonlight at 2021-02-07T16:21:29+01:00 Merge pull request haskell/haddock#1314 from tweag/show-linear-backport Backport haskell/haddock#1238 (linear types) to ghc-9.0 - - - - - d9d73298 by Alex Biehl at 2021-02-07T17:46:25+01:00 Remove dubious parseModLink Instead construct the ModLink value directly when parsing. - - - - - 33b4d020 by Hécate Moonlight at 2021-02-07T17:52:05+01:00 Merge pull request haskell/haddock#1320 from haskell/alex/fix Remove dubious parseModLink - - - - - 54211316 by Hécate Moonlight at 2021-02-07T18:12:07+01:00 Merge pull request haskell/haddock#1318 from MorrowM/ghc-9.0 Fix search div not scrolling - - - - - 19db679e by alexbiehl-gc at 2021-02-07T18:14:46+01:00 Merge pull request haskell/haddock#1317 from bgamari/wip/ghc-head-merge Merge ghc-8.10 into ghc-head - - - - - 6bc1e9e4 by Willem Van Onsem at 2021-02-07T18:25:30+01:00 simplify calculating percentages fixing haskell/haddock#1194 (#1236) - - - - - c8537cf8 by alexbiehl-gc at 2021-02-07T18:30:40+01:00 Merge pull request haskell/haddock#1322 from haskell/alex/forward-port simplify calculating percentages fixing haskell/haddock#1194 (#1236) - - - - - 2d47ae4e by alexbiehl-gc at 2021-02-07T18:39:59+01:00 Merge branch 'ghc-head' into ghc-9.0 - - - - - 849e4733 by Hécate Moonlight at 2021-02-07T18:43:19+01:00 Merge pull request haskell/haddock#1321 from Kleidukos/ghc-9.0 Merge ghc-9.0 into ghc-head - - - - - ee6095d7 by Sylvain Henry at 2021-02-08T11:36:38+01:00 Update for Logger - - - - - 4ad688c9 by Alex Biehl at 2021-02-08T18:11:24+01:00 Merge pull request haskell/haddock#1310 from hsyl20/wip/hsyl20/logger2 Logger refactoring - - - - - 922a9e0e by Ben Gamari at 2021-02-08T12:54:33-05:00 Merge remote-tracking branch 'upstream/ghc-head' into ghc-head - - - - - 991649d2 by Sylvain Henry at 2021-02-09T10:55:17+01:00 Fix to build with HEAD - - - - - a8348dc2 by Hécate Moonlight at 2021-02-09T10:58:51+01:00 Merge pull request haskell/haddock#1327 from hsyl20/wip/hsyl20/logger2 Fix to build with HEAD - - - - - 0abdbca6 by Fendor at 2021-02-09T20:06:15+01:00 Add UnitId to Target record - - - - - d5790a0e by Alex Biehl at 2021-02-11T10:32:32+01:00 Stable sort for (data/newtype) instances - - - - - 8e6036f5 by Alex Biehl at 2021-02-11T10:32:32+01:00 Also make TyLit deterministic - - - - - f76d2945 by Hécate Moonlight at 2021-02-11T11:00:31+01:00 Merge pull request haskell/haddock#1329 from hsyl20/hsyl20/stabe_iface Stable sort for instances - - - - - 5e0469ea by Oleg Grenrus at 2021-02-14T15:28:15+02:00 Add import list to Data.List in Haddock.Interface.Create - - - - - fa57cd24 by Hécate Moonlight at 2021-02-14T17:19:27+01:00 Merge pull request haskell/haddock#1331 from phadej/more-explicit-data-list-imports Add import list to Data.List in Haddock.Interface.Create - - - - - f0cd629c by Hécate Moonlight at 2021-02-21T00:22:01+01:00 Merge pull request haskell/haddock#1311 from fendor/wip/add-targetUnitId-to-target Add UnitId to Target record - - - - - 674ef723 by Joachim Breitner at 2021-02-22T10:39:18+01:00 html-test: Always set language from ghc-9.2 on, the “default” langauge of GHC is expected to change more wildly. To prepare for that (and unblock https://gitlab.haskell.org/ghc/ghc/-/merge_requests/4853), this sets the language for all the test files to `Haskell2010`. This should insolate this test suite against changes to the default. Cherry-picked from https://github.com/haskell/haddock/pull/1341 - - - - - f072d623 by Hécate Moonlight at 2021-02-22T10:56:51+01:00 Merge pull request haskell/haddock#1342 from nomeata/joachim/haskell2010-in-tests-ghc-head html-test: Always set language - - - - - caebbfca by Hécate Moonlight at 2021-02-22T11:53:07+01:00 Clean-up of Interface and Interface.Create's imports and pragmata - - - - - f6caa89d by Hécate Moonlight at 2021-02-22T11:54:58+01:00 Merge pull request haskell/haddock#1345 from Kleidukos/head/fix-interface-imports [ghc-head] Clean-up of Interface and Interface.Create's imports and pragmata - - - - - 7395c9cb by Hécate Moonlight at 2021-02-22T18:44:57+01:00 Explicit imports for Haddock.Interface and Haddock.Interface.Create - - - - - 6e9fb5d5 by Hécate Moonlight at 2021-02-22T18:45:28+01:00 Merge pull request haskell/haddock#1348 from Kleidukos/head/explicit-imports-interface Explicit imports for Haddock.Interface and Haddock.Interface.Create - - - - - 9198b118 by Alan Zimmerman at 2021-02-22T20:04:24+00:00 Context becomes a Maybe in the GHC AST This prevents noLoc's appearing in the ParsedSource. Match the change in GHC. - - - - - 0af20f64 by Hécate Moonlight at 2021-02-23T12:36:12+01:00 Fix the call-site of guessTarget in Interface.hs Explicit the imports from GHC.HsToCore.Docs - - - - - b7886885 by Hécate Moonlight at 2021-02-23T12:37:54+01:00 Merge pull request haskell/haddock#1349 from Kleidukos/fix-interface-guesstarget-call Fix the call-site of guessTarget in Interface.hs - - - - - 9cf041ba by Sylvain Henry at 2021-02-24T11:08:20+01:00 Fix haddockHypsrcTest output in ghc-head - - - - - b194182a by Hécate Moonlight at 2021-02-24T11:12:36+01:00 Merge pull request haskell/haddock#1351 from hsyl20/wip/hsyl20/fix-head Fix haddockHypsrcTest output in ghc-head - - - - - 3ce8b375 by Shayne Fletcher at 2021-03-06T09:55:03-05:00 Add ITproj to parser - - - - - d2abf762 by Ben Gamari at 2021-03-06T19:26:49-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - a0f6047d by Andrew Martin at 2021-03-07T11:25:23-05:00 Update for boxed rep - - - - - 6f63c99e by Ben Gamari at 2021-03-10T13:20:21-05:00 Update for "FastString: Use FastMutInt instead of IORef Int" - - - - - e13f01df by Luke Lau at 2021-03-10T15:38:40-05:00 Implement template-haskell's putDoc This catches up to GHC using the new extractTHDocs function, which returns documentation added via the putDoc function (provided it was compiled with Opt_Haddock). Since it's already a map from names -> docs, there's no need to do traversal etc. It also matches the change from the argument map being made an IntMap rather than a Map Int - - - - - 89263d94 by Alan Zimmerman at 2021-03-15T17:15:26+00:00 Match changes in GHC AST for in-tree API Annotations As landed via https://gitlab.haskell.org/ghc/ghc/-/merge_requests/2418 - - - - - 28db1934 by Alan Zimmerman at 2021-03-15T20:40:09+00:00 Change some type family test results. It is not clear to me whether the original was printing incorrectly (since we did not have the TopLevel flag before now), or if this behaviour is expected. For the time being I am assuming the former. - - - - - 7c11c989 by Sylvain Henry at 2021-03-22T10:05:19+01:00 Fix after NameCache changes - - - - - addbde15 by Sylvain Henry at 2021-03-22T10:05:19+01:00 NameCache doesn't store a UniqSupply anymore - - - - - 15ec6cec by Ben Gamari at 2021-03-22T17:53:44-04:00 Bump GHC version to 9.2 - - - - - dbd6aa63 by Hécate Moonlight at 2021-03-24T14:28:36+01:00 Merge pull request haskell/haddock#1365 from hsyl20/wip/hsyl20/iface1 NameCache refactoring - - - - - 2d32da7e by Oleg Grenrus at 2021-03-27T01:12:00+02:00 Specialization of Data.List - - - - - 32b84fa6 by Fendor at 2021-03-27T10:50:17+01:00 Add UnitId to Target record This way we always know to which home-unit a given target belongs to. So far, there only exists a single home-unit at a time, but it enables having multiple home-units at the same time. - - - - - 54bf9f0e by Hécate Moonlight at 2021-03-28T14:08:35+02:00 Merge pull request haskell/haddock#1368 from fendor/target-unit-id-revert Add UnitId to Target record - - - - - 7dea168a by Alan Zimmerman at 2021-03-29T08:45:52+01:00 EPA : Rename ApiAnn to EpAnn - - - - - 72967f65 by Alfredo Di Napoli at 2021-03-29T09:47:01+02:00 pprError changed name in GHC - - - - - 4bc61035 by Alan Zimmerman at 2021-03-29T16:16:27-04:00 EPA : Rename ApiAnn to EpAnn - - - - - 108d031d by Ben Gamari at 2021-03-29T18:49:36-04:00 Merge commit '36418c4f70d7d2b179a77925b3ad5caedb08c9b5' into HEAD - - - - - 1444f700 by Ben Gamari at 2021-03-31T09:18:39-04:00 Merge pull request haskell/haddock#1370 from adinapoli/wip/adinapoli-diag-reason-severity Rename pprError to mkParserErr - - - - - d3087b79 by Ben Gamari at 2021-03-31T11:34:17-04:00 Merge commit 'd8d8024ad6796549a8d3b5512dabf3288d14e30f' into ghc-head - - - - - 170b79e9 by Ben Gamari at 2021-03-31T12:24:56-04:00 Merge remote-tracking branch 'upstream/ghc-head' into ghc-head - - - - - db0d6bae by Ben Gamari at 2021-04-10T09:34:35-04:00 Bump GHC version to 9.3 - - - - - a9f2c421 by Alan Zimmerman at 2021-04-19T18:26:46-04:00 Update for EPA changes in GHC (cherry picked from commit cafb48118f7c111020663776845897e225607b41) - - - - - 1ee4b7c7 by Sylvain Henry at 2021-05-11T10:00:06+02:00 Removal of HsVersions.h (#1388) * Update for EPA changes in GHC * Account for HsVersions.h removal Co-authored-by: Alan Zimmerman <alan.zimm at gmail.com> - - - - - 79e819e9 by Hécate Moonlight at 2021-05-11T10:14:47+02:00 Revert "Removal of HsVersions.h (#1388)" This reverts commit 72118896464f94d81f10c52f5d9261efcacc57a6. - - - - - 3dbd3f8b by Alan Zimmerman at 2021-05-11T10:15:17+02:00 Update for EPA changes in GHC - - - - - 2ce80c17 by Sylvain Henry at 2021-05-11T10:15:19+02:00 Account for HsVersions.h removal - - - - - 00e4c918 by Christiaan Baaij at 2021-05-13T08:21:56+02:00 Add Haddock support for the OPAQUE pragma (#1380) - - - - - 8f9049b2 by Hécate Moonlight at 2021-05-13T08:40:22+02:00 fixup! Use GHC 9.2 in CI runner - - - - - 27ddec38 by Alan Zimmerman at 2021-05-13T22:51:20+01:00 EPA: match changes from GHC T19834 - - - - - f8a1d714 by Felix Yan at 2021-05-14T17:10:04+02:00 Allow hspec 2.8 (#1389) All tests are passing. - - - - - df44453b by Divam Narula at 2021-05-20T15:42:42+02:00 Update ref, the variables got renamed. (#1391) This is due to ghc/ghc!5555 which caused a change in ModDetails in case of NoBackend. Now the initModDetails is used to recreate the ModDetails from interface and in-memory ModDetails is not used. - - - - - e46bfc87 by Alan Zimmerman at 2021-05-20T19:05:09+01:00 Remove Maybe from HsQualTy Match changes in GHC for haskell/haddock#19845 - - - - - 79bd7b62 by Shayne Fletcher at 2021-05-22T08:20:39+10:00 FieldOcc: rename extFieldOcc to foExt - - - - - 6ed68c74 by Ben Gamari at 2021-05-21T22:29:30-04:00 Merge commit '3b6a8774bdb543dad59b2618458b07feab8a55e9' into ghc-head - - - - - f9a02d34 by Alfredo Di Napoli at 2021-05-24T13:53:00+02:00 New Parser diagnostics interface - - - - - 392807d0 by Ben Gamari at 2021-05-24T09:57:40-04:00 Merge pull request haskell/haddock#1394 from adinapoli/wip/adinapoli-align-ps-messages Align Haddock to use the new Parser diagnostics interface - - - - - 33023cd8 by Ben Gamari at 2021-05-24T11:19:16-04:00 Revert "Add Haddock support for the OPAQUE pragma (#1380)" This reverts commit a1337c599ef7720b0482a25c55f11794112496dc. The GHC patch associated with this change is not yet ready to be merged. - - - - - 8c005af7 by Ben Simms at 2021-05-28T07:56:20+02:00 CI configuration for ghc-head (#1395) - - - - - 1e947612 by Hécate Moonlight at 2021-05-28T12:27:35+02:00 Use GHC 9.2 in CI runner (#1378) - - - - - e6fa10ab by CGenie at 2021-05-31T09:02:13+02:00 Add page about common errors (#1396) * Update index.rst Common errors page * Create common-errors.rst * Update common-errors.rst * Use GHC 9.2 in CI runner (#1378) * [haddock-api] remove .hspec-failures Co-authored-by: Hécate Moonlight <Kleidukos at users.noreply.github.com> - - - - - abc72a8d by Sylvain Henry at 2021-06-01T10:02:06+02:00 Adapt Haddock to Logger and Parser changes (#1399) - - - - - 91373656 by Zubin Duggal at 2021-06-01T20:45:10+02:00 Update haddockHypSrc tests since we now compute slighly more type info (#1397) - - - - - ed712822 by Marcin Szamotulski at 2021-06-02T08:54:33+02:00 Added myself to contributors - - - - - 49fdbcb7 by Marcin Szamotulski at 2021-06-02T08:57:24+02:00 Document multi component support - - - - - 9ddc8d7d by Hécate Moonlight at 2021-06-02T09:35:55+02:00 Merge pull request haskell/haddock#1379 from coot/coot/document-multi-component-support Document multi component support - - - - - 585b5c5e by Ben Simms at 2021-06-02T19:46:54+02:00 Update CONTRIBUTING.md (#1402) - - - - - 1df4a605 by Ben Simms at 2021-06-02T19:47:14+02:00 Update CONTRIBUTING.md (#1403) - - - - - 58ea43d2 by sheaf at 2021-06-02T22:09:06+02:00 Update Haddock Bug873 to account for renaming - - - - - c5d0ab23 by Vladislav Zavialov at 2021-06-10T13:35:42+03:00 HsToken in FunTy, RecConGADT - - - - - 1ae2f40c by Hécate Moonlight at 2021-06-11T11:19:09+02:00 Update the CI badges - - - - - 6fdc4de2 by Sylvain Henry at 2021-06-28T19:21:17+02:00 Fix mkParserOpts (#1411) - - - - - 18201670 by Alfredo Di Napoli at 2021-07-05T07:55:12+02:00 Rename getErrorMessages Lexer import This commit renames the Lexer import in `Hyperlinker.Parser` from `getErrorMessages` to `getPsErrorMessages` to eliminate the ambiguity with the `getErrorMessages` function defined in `GHC.Types.Error`. - - - - - 23173ca3 by Ben Gamari at 2021-07-07T11:31:44-04:00 Merge pull request haskell/haddock#1413 from adinapoli/wip/adinapoli-issue-19920 Rename getErrorMessages Lexer import - - - - - b3dc4ed8 by Alan Zimmerman at 2021-07-28T22:30:59+01:00 EPA: match changes from GHC T19834 (cherry picked from commit 2fec1b44e0ee7e263286709aa528b4ecb99ac6c2) - - - - - 5f177278 by Ben Gamari at 2021-08-06T01:17:37-04:00 Merge commit '2a966c8ca37' into HEAD - - - - - cdd81d08 by Marcin Szamotulski at 2021-08-08T17:19:06+02:00 coot/multiple packages (ghc-9.2) (#1418) - - - - - be0d71f1 by Marcin Szamotulski at 2021-08-16T08:46:03+02:00 coot/multiple package (ghc-head) (#1419) * FromJSON class Aeson style FromJSON class with Parsec based json parser. * doc-index.json file for multiple packages When creating haddock summary page for multiple packages render doc-index.json file using contents of all found 'doc-index.json' files. * Render doc-index.json When rendering html, render doc-index.json file independently of maybe_index_url option. doc-index.json file is useful now even if maybe_index_url is not `Nothing`. * base url option New `Flag_BaseURL` which configures from where static files are loaded (--base-url). If given and not equal "." static files are not coppied, as this indicates that they are not read from the the directory where we'd copy them. The default value is ".". - - - - - 3b09dbdf by Hécate Moonlight at 2021-10-07T23:26:03+02:00 Update GHC 9.2 to latest pre-release in CI - - - - - 7ac55417 by Zubin Duggal at 2021-10-11T12:10:19+02:00 Enable Haddock tests in GHC windows CI (#1428) * testsuite: strip windows line endings for haddock * hyperlinker: Work around double escaping (#19236) * deterministic SCC - - - - - 1cb81f25 by Andrew Lelechenko at 2021-10-12T15:23:19+02:00 haddock-library does not depend on bytestring or transformers (#1426) - - - - - a890b9aa by sheaf at 2021-10-15T22:19:42+02:00 update haddockHypsrcTest for GHC MR !6705 (#1430) - - - - - 42a55c6c by Sylvain Henry at 2021-10-15T22:20:10+02:00 Fix after PkgQual refactoring (#1429) - - - - - 91659238 by Alan Zimmerman at 2021-10-28T18:57:10+01:00 Update for changes in GHC for branch wip/az/no-srcspan-anno-instances - - - - - acf23e60 by Vladislav Zavialov at 2021-11-05T02:09:47+03:00 Do not use forall as an identifier See GHC ticket haskell/haddock#20609 - - - - - c565db0e by Krzysztof Gogolewski at 2021-11-27T02:42:35+01:00 Update after NoExtCon -> DataConCantHappen rename - - - - - b5f55590 by Artem Pelenitsyn at 2021-11-27T11:14:17+01:00 fix CI for 9.2 (#1436) - - - - - 25cd621e by Matthew Pickering at 2021-12-02T11:46:54+00:00 Update html-test for Data.List revert - - - - - 1d5ff85f by malteneuss at 2021-12-15T07:56:55+01:00 Add hint about inline link issue (#1444) - - - - - 791fde81 by Sylvain Henry at 2021-12-16T09:29:51+01:00 Bump ghc-head (#1445) * Update after NoExtCon -> DataConCantHappen rename * Update html-test for Data.List revert * Fix for new Plugins datatype Co-authored-by: Krzysztof Gogolewski <krzysztof.gogolewski at tweag.io> Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - 44236317 by Sylvain Henry at 2021-12-17T09:39:00+01:00 Fix for new Plugins datatype - - - - - 80ada0fa by Hécate Moonlight at 2021-12-17T17:28:48+01:00 Remove ghc-head workflow (#1446) Contributions of GHC glue code are now done on the GHC gitlab, not in the GitHub repo anymore. - - - - - 49e171cd by Matthew Pickering at 2021-12-28T09:47:09+00:00 Remove use of ExtendedModSummary - - - - - 0e91b5ea by askeblad at 2022-01-04T09:18:35+01:00 update URLs - - - - - 9f13c212 by Hécate Moonlight at 2022-02-25T10:19:46+01:00 Fix solver for GHC 9.2 - - - - - 386751a1 by Meng Weng Wong at 2022-02-25T19:19:11+01:00 IDoc link has bitrotted; replaced with web.archive.org cache. (#1454) - - - - - d877cbe6 by Hécate Moonlight at 2022-02-25T19:21:58+01:00 Fix haddock user guide (#1456) - - - - - cc47f036 by Andrew Lelechenko at 2022-03-04T17:29:36+01:00 Allow text-2.0 in haddock-library (#1459) - - - - - 7b3685a3 by malteneuss at 2022-03-07T19:27:24+01:00 Add multi-line style hint to style section (#1460) - - - - - c51088b8 by John Ericson at 2022-03-11T16:46:26+01:00 Fix CollectPass instance to match TTG refactor Companion to GHC !7614 (https://gitlab.haskell.org/ghc/ghc/-/merge_requests/7614) - - - - - b882195b by Vladislav Zavialov at 2022-03-14T20:32:30+01:00 Link to (~) - - - - - 877349b8 by Christiaan Baaij at 2022-03-16T09:20:43+01:00 Add Haddock support for the OPAQUE pragma - - - - - 0ea22721 by askeblad at 2022-03-16T09:44:27+01:00 typos (#1464) - - - - - a6d13da1 by Matthew Pickering at 2022-03-22T13:41:17+00:00 Minimum changes needed for compilation with hi-haddock With hi-haddock, of course there is a much large refactoring of haddock which could be achieved but that is left for a future patch which can implemented at any time independently of GHC. - - - - - e7ac9129 by Matthew Pickering at 2022-03-22T21:17:50+00:00 Update test output - - - - - 6d916214 by Matthew Pickering at 2022-03-24T15:06:26+00:00 Merge branch 'wip/opaque_pragma' into 'ghc-head' Add Haddock support for the OPAQUE pragma See merge request ghc/haddock!2 - - - - - 42208183 by Steve Hart at 2022-03-25T20:43:50+01:00 Fix CI (#1467) * CI: Reinstall GHC with docs CI tests were failing because the GHC preinstalled to the CI environment does not include documentation, which is required for running the Haddock tests. This commit causes the CI workflow to reinstall GHC with docs so that tests can succeed. - - - - - 9676fd79 by Steve Hart at 2022-03-25T21:33:34+01:00 Make links in Synopsis functional again (#1458) Commit e41c1cbe9f0476997eac7b4a3f17cbc6b2262faf added a call to e.preventDefault() when handling click events that reach a toggle element. This prevents the browser from following hyperlinks within the Synopsis section when they are clicked by a user. This commit restores functioning hyperlinks within the Synopsis section by removing the call to e.preventDefault(), as it does not appear to be necessary, and removing it increases the flexibility of the details-helper code. - - - - - d1edd637 by sheaf at 2022-04-01T12:02:02+02:00 Keep track of promotion ticks in HsOpTy Keeping track of promotion ticks in HsOpTy allows us to properly pretty-print promoted constructors such as lists. - - - - - 9dcb2dfc by Jakob Brünker at 2022-04-01T15:46:22+00:00 Add support for \cases See merge request ghc/ghc!7873 - - - - - b0412ee5 by askeblad at 2022-04-06T17:47:57+02:00 spelling errors (#1471) - - - - - 6b18829b by Vladislav Zavialov at 2022-04-06T18:53:58+02:00 Rename [] to List - - - - - 2d046691 by Vladislav Zavialov at 2022-04-07T20:25:54+03:00 HsToken ConDeclGADT con_dcolon - - - - - 90b43da4 by Steve Hart at 2022-04-12T13:29:46+02:00 Parse Markdown links at beginning of line within a paragraph (#1470) * Catch Markdown links at beginning of line within paragraph Per Issue haskell/haddock#774, Markdown links were being parsed as ordinary text when they occurred at the beginning of a line other than the first line of the paragraph. This occurred because the parser was not interpreting a left square bracket as a special character that could delimit special markup. A space character was considered a special character, so, if a space occurred at the beginning of the new line, then the parser would interpret the space by itself and then continue parsing, thereby catching the Markdown link. '\n' was not treated as a special character, so the parser did not catch a Markdown link that may have followed. Note that this will allow for Markdown links that are not surrounded by spaces. For example, the following text includes a Markdown link that will be parsed: Hello, world[label](url) This is consistent with how the parser handles other types of markup. * Remove obsolete documentation hint Commit 6b9aeafddf20efc65d3725c16e3fc43a20aac343 should eliminate the need for the workaround suggested in the documentation. - - - - - 5b08312d by Hécate Moonlight at 2022-04-12T13:36:38+02:00 Force ghc-9.2 in the cabal.project - - - - - 0d0ea349 by dependabot[bot] at 2022-04-12T13:57:41+02:00 Bump path-parse from 1.0.5 to 1.0.7 in /haddock-api/resources/html (#1469) Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.5 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - 2b9fc65e by dependabot[bot] at 2022-04-12T13:57:54+02:00 Bump copy-props from 2.0.4 to 2.0.5 in /haddock-api/resources/html (#1468) Bumps [copy-props](https://github.com/gulpjs/copy-props) from 2.0.4 to 2.0.5. - [Release notes](https://github.com/gulpjs/copy-props/releases) - [Changelog](https://github.com/gulpjs/copy-props/blob/master/CHANGELOG.md) - [Commits](https://github.com/gulpjs/copy-props/compare/2.0.4...2.0.5) --- updated-dependencies: - dependency-name: copy-props dependency-type: indirect ... Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - ea98a6fb by Ben Gamari at 2022-04-23T22:54:37-04:00 Update for GHC 9.4 - - - - - 9e11864f by Ben Gamari at 2022-04-25T16:24:31-04:00 Merge remote-tracking branch 'upstream/ghc-9.2' into ghc-head - - - - - f83cc506 by Ben Gamari at 2022-04-25T17:00:25-04:00 Bump ghc version to 9.5 - - - - - e01c2e7d by Ben Gamari at 2022-04-28T16:19:04-04:00 Revert "Bump ghc-head (#1445)" This reverts commit b29a78ef6926101338f62e84f456dac8659dc9d2. This should not have been merged. - - - - - a2b5ee8c by Ben Gamari at 2022-04-28T16:19:24-04:00 Merge commit '2627a86c' into ghc-head - - - - - 0c6fe4f9 by Ben Gamari at 2022-04-29T10:05:54-04:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-9.4 - - - - - b6e5cb0a by Ben Gamari at 2022-04-29T11:46:06-04:00 Revert "HsToken ConDeclGADT con_dcolon" This reverts commit 24208496649a02d5f87373052c430ea4a97842c5. - - - - - 15a62888 by Ben Gamari at 2022-04-29T15:12:55-04:00 Bump base upper bound - - - - - 165b9031 by Ben Gamari at 2022-04-29T23:58:38-04:00 Update test output - - - - - e0c3e5da by Phil de Joux at 2022-05-02T14:46:38+02:00 Add hlint action .hlint.yaml with ignores & CPP. (#1475) - - - - - ead1158d by Raphael Das Gupta at 2022-05-02T14:46:48+02:00 fix grammar in docs: "can the" → "can be" (#1477) - - - - - cff97944 by Ben Gamari at 2022-05-02T18:38:56-04:00 Allow base-4.17 - - - - - e4ecb201 by Phil de Joux at 2022-05-03T13:14:55+02:00 Remove unused imports that GHC warned about. (#1480) - - - - - 222890b1 by Phil de Joux at 2022-05-03T13:15:46+02:00 Follow hlint suggestion to remove redundant bang. (#1479) - - - - - 058b671f by Phil de Joux at 2022-05-03T13:34:04+02:00 Follow hlint, remove language pragmas in libs. (#1478) - - - - - 0a645049 by Ben Simms at 2022-05-03T14:19:24+02:00 Keep track of ordered list indexes and render them (#1407) * Keep track of ordered list indexes and render them * Rename some identifiers to clarify - - - - - f0433304 by Norman Ramsey at 2022-05-04T15:13:34-04:00 update for changes in GHC API - - - - - 3740cf71 by Emily Martins at 2022-05-06T18:23:48+02:00 Add link to the readthedocs in cabal description to show on hackage. (cherry picked from commit 52e2d40d47295c02d3181aac0c53028e730f1e3b) - - - - - 5d754f1e by Hécate Moonlight at 2022-05-06T18:44:57+02:00 remove Bug873 - - - - - 968fc267 by Hécate Moonlight at 2022-05-06T18:48:28+02:00 Ignore "Use second" HLint suggestion. It increases laziness. - - - - - 02d14e97 by Jade Lovelace at 2022-05-07T17:42:08+02:00 Fix hyperlinks to external items and modules (#1482) Fixes haskell/haddock#1481. There were two bugs in this: * We were assuming that we were always getting a relative path to the module in question, while Nix gives us file:// URLs sometimes. This change checks for those and stops prepending `..` to them. * We were not linking to the file under the module. This seems to have been a regression introduced by haskell/haddock#977. That is, the URLs were going to something like file:///nix/store/3bwbsy0llxxn1pixx3ll02alln56ivxy-ghc-9.0.2-doc/share/doc/ghc/html/libraries/base-4.15.1.0/src which does not have the appropriate HTML file or fragment for the item in question at the end. There is a remaining instance of the latter bug, but not in the hyperlinker: the source links to items reexported from other modules are also not including the correct file name. e.g. the reexport of Entity in esqueleto, from persistent. NOTE: This needs to get tested with relative-path located modules. It seems correct for Nix based on my testing. Testing strategy: ``` nix-shell '<nixpkgs>' --pure -A haskell.packages.ghc922.aeson mkdir /tmp/aesonbuild && cd /tmp/aesonbuild export out=/tmp/aesonbuild/out genericBuild ln -sf $HOME/co/haddock/haddock-api/resources . ./Setup haddock --with-haddock=$HOME/path/to/haddock/exec --hyperlink-source ``` - - - - - b22b87ed by Artem Pelenitsyn at 2022-05-08T16:19:47+02:00 fix parsing trailing quotes in backticked identifiers (#1408) (#1483) - - - - - 80ae107b by Alex Biehl at 2022-05-08T16:37:16+02:00 Fix "Defined by not used" error (cherry picked from commit 6e02a620a26c3a44f98675dd1b93b08070c36c0a) - - - - - 4c838e84 by Hécate Moonlight at 2022-05-08T16:37:16+02:00 Fix the changelog and bump the version of haddock-library on ghc-9.2 - - - - - fc9827b4 by Hécate Moonlight at 2022-05-08T16:40:40+02:00 Fix the changelog and bump the version of haddock-library on ghc-9.2 - - - - - b153b555 by Xia Li-yao at 2022-05-20T17:52:42+02:00 Hide synopsis from search when hidden (#1486) Fix haskell/haddock#1451 - - - - - f3e38b85 by Marcin Szamotulski at 2022-05-21T23:32:31+02:00 Allow to hide interfaces when rendering multiple components (#1487) This is useful when one wishes to `--gen-contents` when rendering multiple components, but one does not want to render all modules. This is in particular useful when adding base package. - - - - - f942863b by Marcin Szamotulski at 2022-05-24T08:29:59+02:00 Check if doc-index.json exists before reading it (#1488) - - - - - 31e92982 by Marcin Szamotulski at 2022-05-25T16:22:13+02:00 Version bump 2.26.1 (#1489) * Version bump 2.26.1 We extended format accepted by `--read-interface` option, which requires updating the minor version. * Update documentation of --read-interface option - - - - - 7cc873e0 by sheaf at 2022-05-25T16:42:31+02:00 Updated HaddockHypsrcTest output for record update changes (MR !7981) - - - - - cd196942 by Marcin Szamotulski at 2022-05-25T20:28:47+02:00 Use visibility to decide which interfaces are included in quickjump (#1490) This is also consistent with how html index is build. See haskell/cabal#7669 for rationale behind this decision. - - - - - 00c713c5 by Hécate Moonlight at 2022-05-26T17:09:15+02:00 Add code of conduct and hspec failure files in .gitignore - - - - - 2f3039f1 by Hécate Moonlight at 2022-05-26T17:10:59+02:00 Add code of conduct and hspec failure files in .gitignore - - - - - 63a5650c by romes at 2022-05-31T12:43:22+01:00 TTG: Match new GHC AST - - - - - dd7d1617 by romes at 2022-06-02T16:11:00+01:00 Update for IE changes in !8228 - - - - - c23aaab7 by cydparser at 2022-06-06T08:48:14+02:00 Fix and improve CI (#1495) * Pin GHC version before creating the freeze file * Use newest action versions * Improve caching * Avoid unnecessarily reinstalling GHC * Use GHC 9.2.2 for CI Co-authored-by: Cyd Wise <cwise at tripshot.com> - - - - - c156fa77 by Hécate Moonlight at 2022-06-06T11:59:35+02:00 Add Mergify configuration (#1496) - - - - - 2dba4188 by Hécate Moonlight at 2022-06-06T16:12:50+02:00 Bump haddock's version in cabal file to 2.26.1 (#1497) - - - - - d7d4b8b9 by Marcin Szamotulski at 2022-06-07T06:09:40+00:00 Render module tree per package in the content page (#1492) * Render module tree per package in the content page When rendering content page for multiple packages it is useful to split the module tree per package. Package names in this patch are inferred from haddock's interface file names. * Write PackageInfo into interface file To keep interface file format backward compatible, instead of using `Binary` instance for `InterfaceFile` we introduce functions to serialise and deserialise, which depends on the interface file version. - - - - - 77765665 by Mike Pilgrem at 2022-06-12T21:57:19+01:00 Fix haskell/haddock#783 Don't show button if --quickjump not present - - - - - b0e079b0 by mergify[bot] at 2022-06-13T11:49:37+00:00 Merge pull request haskell/haddock#1108 from mpilgrem/fix783 Fix haskell/haddock#783 Don't show button if --quickjump not present - - - - - 6c0292b1 by Hécate Moonlight at 2022-06-21T17:21:08+02:00 Update the contribution guide - - - - - e413b9fa by dependabot[bot] at 2022-06-21T23:38:19+02:00 Bump shell-quote from 1.6.1 to 1.7.3 in /haddock-api/resources/html (#1500) Bumps [shell-quote](https://github.com/substack/node-shell-quote) from 1.6.1 to 1.7.3. - [Release notes](https://github.com/substack/node-shell-quote/releases) - [Changelog](https://github.com/substack/node-shell-quote/blob/master/CHANGELOG.md) - [Commits](https://github.com/substack/node-shell-quote/compare/1.6.1...1.7.3) --- updated-dependencies: - dependency-name: shell-quote dependency-type: indirect ... Signed-off-by: dependabot[bot] <support at github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> - - - - - 29d0ef70 by romes at 2022-07-06T11:29:39+02:00 TTG: AST Updates for !8308 - - - - - 1bae7c87 by Alan Zimmerman at 2022-07-06T22:50:43+01:00 Match GHC changes for T21805 This brings in a newtype for FieldLabelString - - - - - 6fe8b988 by Phil de Joux at 2022-07-16T20:54:26+00:00 Bump hlint version to 3.4.1, the version with counts. (#1503) Redo the counts available with the --default option. - - - - - 48fb43af by Phil de Joux at 2022-07-19T09:32:55+02:00 Follow hlint suggestion: unused LANGUAGE pragma. (#1504) * Follow hlint suggestion: unused LANGUAGE pragma. * Ignore within modules to pass linting and pass tests. - - - - - c1cf1fa7 by Phil de Joux at 2022-07-24T13:45:59+02:00 Follow hlint suggestion: redundant $. (#1505) * Follow hlint suggestion: redundant $. * Remove $ and surplus blank lines in Operators. - - - - - 74777eb2 by Jade Lovelace at 2022-07-29T11:02:41+01:00 Fix hyperlinks to external items and modules (#1482) Fixes haskell/haddock#1481. There were two bugs in this: * We were assuming that we were always getting a relative path to the module in question, while Nix gives us file:// URLs sometimes. This change checks for those and stops prepending `..` to them. * We were not linking to the file under the module. This seems to have been a regression introduced by haskell/haddock#977. That is, the URLs were going to something like file:///nix/store/3bwbsy0llxxn1pixx3ll02alln56ivxy-ghc-9.0.2-doc/share/doc/ghc/html/libraries/base-4.15.1.0/src which does not have the appropriate HTML file or fragment for the item in question at the end. There is a remaining instance of the latter bug, but not in the hyperlinker: the source links to items reexported from other modules are also not including the correct file name. e.g. the reexport of Entity in esqueleto, from persistent. NOTE: This needs to get tested with relative-path located modules. It seems correct for Nix based on my testing. Testing strategy: ``` nix-shell '<nixpkgs>' --pure -A haskell.packages.ghc922.aeson mkdir /tmp/aesonbuild && cd /tmp/aesonbuild export out=/tmp/aesonbuild/out genericBuild ln -sf $HOME/co/haddock/haddock-api/resources . ./Setup haddock --with-haddock=$HOME/path/to/haddock/exec --hyperlink-source ``` (cherry picked from commit ab53ccf089ea703b767581ac14be0f6c78a7678a) - - - - - faa4cfcf by Hécate Moonlight at 2022-07-29T20:31:20+02:00 Merge pull request haskell/haddock#1516 from duog/9-4-backport-fix-hyperlinks Backport 9-4: Fix hyperlinks to external items and modules (#1482) - - - - - 5d2450f3 by Ben Gamari at 2022-08-05T17:41:15-04:00 Merge remote-tracking branch 'origin/ghc-9.4' - - - - - 63954f73 by Ben Gamari at 2022-08-05T19:08:36-04:00 Clean up build and testsuite for GHC 9.4 - - - - - d4568cb8 by Hécate Moonlight at 2022-08-05T19:10:49-04:00 Bump the versions - - - - - 505583a4 by Ben Gamari at 2022-08-06T13:58:27-04:00 Merge pull request haskell/haddock#1518 from bgamari/wip/ghc-9.4-merge Merge GHC 9.4 into `main` - - - - - 5706f6a4 by Ben Gamari at 2022-08-06T22:57:21-04:00 html-test: Testsuite changes for GHC 9.4.1 - - - - - 5f2a45a2 by Ben Gamari at 2022-08-15T14:33:05-04:00 doc: Fix a few minor ReST issues Sphinx was complaining about too-short title underlines. - - - - - 220e6410 by Ben Gamari at 2022-08-15T14:41:24-04:00 Merge branch 'main' into ghc-head - - - - - fbeb1b02 by Ben Gamari at 2022-08-15T14:45:16-04:00 Updates for GHC 9.5 - - - - - eee562eb by Vladislav Zavialov at 2022-08-15T14:46:13-04:00 HsToken ConDeclGADT con_dcolon - - - - - c5f073db by Ben Gamari at 2022-08-15T16:55:35-04:00 Updates for GHC 9.5 - - - - - 3f7ab242 by Vladislav Zavialov at 2022-08-15T16:55:35-04:00 HsToken ConDeclGADT con_dcolon - - - - - a18e473d by Ben Gamari at 2022-08-16T08:35:19-04:00 Merge branch 'wip/ghc-head-bump' into ghc-head - - - - - af0ff3a4 by M Farkas-Dyck at 2022-09-15T21:16:05+00:00 Disuse `mapLoc`. - - - - - a748fc38 by Matthew Farkas-Dyck at 2022-09-17T10:44:18+00:00 Scrub partiality about `NewOrData`. - - - - - 2758fb6c by John Ericson at 2022-09-18T03:27:37+02:00 Test output changed because of change to `base` Spooky, but I guess that is intended? - - - - - a7eec128 by Torsten Schmits at 2022-09-21T11:06:55+02:00 update tests for the move of tuples to GHC.Tuple.Prim - - - - - 461e7b9d by Ross Paterson at 2022-09-24T22:01:25+00:00 match implementation of GHC proposal haskell/haddock#106 (Define Kinds Without Promotion) - - - - - f7fd77ef by sheaf at 2022-10-17T14:53:01+02:00 Update Haddock for GHC MR !8563 (configuration of diagnostics) - - - - - 3d3e85ab by Vladislav Zavialov at 2022-10-22T23:04:06+03:00 Class layout info - - - - - cbde4cb0 by Simon Peyton Jones at 2022-10-25T23:19:18+01:00 Adapt to Constraint-vs-Type See haskell/haddock#21623 and !8750 - - - - - 7108ba96 by Tom Smeding at 2022-11-01T22:33:23+01:00 Remove outdated footnote about module re-exports The footnote is invalid with GHC 9.2.4 (and possibly earlier): the described behaviour in the main text works fine. - - - - - 206c6bc7 by Hécate Moonlight at 2022-11-01T23:00:46+01:00 Merge pull request haskell/haddock#1534 from tomsmeding/patch-1 - - - - - a57b4c4b by Andrew Lelechenko at 2022-11-21T00:39:52+00:00 Support mtl-2.3 - - - - - e9d62453 by Simon Peyton Jones at 2022-11-25T13:49:12+01:00 Track small API change in TyCon.hs - - - - - eb1c73f7 by Ben Gamari at 2022-12-07T08:46:21-05:00 Update for GhC 9.6 - - - - - 063268dd by Ben Gamari at 2022-12-07T11:26:32-05:00 Merge remote-tracking branch 'upstream/ghc-head' into HEAD - - - - - 4ca722fe by Ben Gamari at 2022-12-08T14:43:26-05:00 Bump bounds to accomodate base-4.18 - - - - - 340b7511 by Vladislav Zavialov at 2022-12-10T12:31:28+00:00 HsToken in HsAppKindTy - - - - - 946226ec by Ben Gamari at 2022-12-13T20:12:56-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - fd8faa66 by Ben Gamari at 2022-12-22T13:44:28-05:00 Bump GHC version to 9.7 - - - - - 2958aa9c by Ben Gamari at 2022-12-22T14:49:16-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 9e0fefd8 by Andrei Borzenkov at 2023-01-30T14:02:04+04:00 Rename () to Unit, Rename (,,...,,) to Tuple<n> - - - - - eb3968b5 by Ben Gamari at 2023-03-10T02:32:43-05:00 Bump versions for ghc-9.6 release - - - - - 4aeead36 by Adam Gundry at 2023-03-23T13:53:47+01:00 Adapt to warning categories changes - - - - - 642d8d60 by sheaf at 2023-03-29T13:35:56+02:00 Adapt to record field refactor This commit adapts to the changes in GHC MR !8686, which overhauls the treatment of record fields in the renamer, adding separate record field namespaces and entirely removing the GreName datatype. - - - - - ac8d4333 by doyougnu at 2023-03-29T11:11:44-04:00 Update UniqMap API - - - - - 7866fc86 by Ben Orchard at 2023-04-20T11:29:33+02:00 update classify with new tokens - - - - - ffcdd683 by Finley McIlwaine at 2023-04-24T09:36:18-06:00 Remove index-state - - - - - 05b70982 by Finley McIlwaine at 2023-04-26T08:16:31-06:00 `renameInterface` space leak fixes - Change logic for accumulation of names for which link warnings will be generated - Change handling of `--ignore-link-symbol` to allow qualified and unqualified names. Added to CHANGES.md - Some formatting changes and comments here and there - - - - - e5697d7c by Finley McIlwaine at 2023-04-27T18:46:36-06:00 Messy things - ghc-debug dependency and instrumentation - cabal.project custom with-compiler - hie.yaml files - traces and such - - - - - 0b8ef80b by Finley McIlwaine at 2023-05-02T18:08:52-06:00 Stop retaining GRE closures GRE closures should never be necessary to Haddock, so we never want to keep them on the heap. Despite that, they are retained by a lot of the data structures that Haddock makes use of. - Attempt to fix that situation by adding strictness to various computations and pruning the `ifaceInstances` field of `Interface` to a much thinner data type. - Removes the `ifaceFamInstances` field, as it was never used. - Move some of the attach instances types (e.g. `SimpleType`) to the types module - - - - - 8bda991b by Finley McIlwaine at 2023-05-08T16:07:51-06:00 Memory usage fixes - Refactor `ifaceDeclMap` to drastically reduce memory footprint. We no longer store all declarations associated with a given name, since we only cared to determine if the only declaration associated with a name was a value declaration. Change the `DeclMap` type to better reflect this. - Drop pre-renaming export items after the renaming step. Since the Hoogle backend used the pre-renamed export items, this isn't trivial. We now generate Hoogle output for exported declarations during the renaming step (if Hoogle output /should/ be generated), and store that with the renamed export item. - Slightly refactor Hoogle backend to handle the above change and allow for early generation of Hoogle output. - Remove the `ifaceRnDocMap` and `ifaceRnArgMap` fields of the `Interface` type, as they were never used. - Remove some unnecessary strictness - Remove a lot of dead code from `Syb` module - - - - - 1611ac0c by Finley McIlwaine at 2023-05-09T11:51:57-06:00 Unify ErrMsgM and IfM - Delete ErrMsgM, stop accumulating warnings in a writer - Make IfM a state monad, print warnings directly to stdout, move IfM type into types module - Drop ErrMsg = String synonym - Unset IORefs from plugin after they are read, preventing unnecessary retention of interfaces - - - - - 42d696ab by Finley McIlwaine at 2023-05-11T15:52:07-06:00 Thunk leak fixes The strictness introduced in this commit was motivated by observing thunk leaks in the eventlog2html output. - Refactor attach instances list comprehension to avoid large intermediate thunks - Refactor some HTML backend list comprehensions to avoid large intermediate thunks - Avoid thunks accumulating in documentation types or documentation parser - A lot of orphan NFData instances to allow us to force documentation values - - - - - 68561cf6 by Finley McIlwaine at 2023-05-11T17:02:10-06:00 Remove GHC debug dep - - - - - 10519e3d by Finley McIlwaine at 2023-05-15T12:40:48-06:00 Force HIE file path Removes a potential retainer of `ModSummary`s - - - - - 1e4a6ec6 by Finley McIlwaine at 2023-05-15T14:20:34-06:00 Re-add index-state, with-compiler, delete hie.yamls - - - - - a2363fe9 by Hécate Moonlight at 2023-05-15T22:45:16+02:00 Merge pull request haskell/haddock#1594 from FinleyMcIlwaine/finley/ghc-9.6-mem-fixes Reduce memory usage - - - - - e8a78383 by Finley McIlwaine at 2023-05-17T12:19:16-06:00 Merge branch ghc-9.6 into ghc-head - - - - - 22e25581 by Finley McIlwaine at 2023-05-17T12:20:23-06:00 Merge branch 'ghc-head' of gitlab.haskell.org:ghc/haddock into ghc-head - - - - - 41bbf0df by Bartłomiej Cieślar at 2023-05-24T08:57:58+02:00 changes to the WarningTxt cases Signed-off-by: Bartłomiej Cieślar <bcieslar2001 at gmail.com> - - - - - c686ba9b by Hécate Moonlight at 2023-06-01T14:03:02-06:00 Port the remains of Hi-Haddock - - - - - 9d8a85fd by Hécate Moonlight at 2023-06-01T14:03:06-06:00 Stdout for tests - - - - - 36331d07 by Finley McIlwaine at 2023-06-01T14:06:02-06:00 Formatting, organize imports - - - - - a06059b1 by Finley McIlwaine at 2023-06-01T14:06:04-06:00 Fix empty context confusion in Convert module - - - - - 379346ae by Finley McIlwaine at 2023-06-01T14:06:04-06:00 Fix associated type families in Hoogle output - - - - - fc6ea7ed by Finley McIlwaine at 2023-06-01T14:06:04-06:00 Fix test refs Accept several changes in Hoogle tests: Pretty printing logic no longer prints the `(Proxy (Proxy (...))` chain in Bug806 with parentheses. Since this test was only meant to verify that line breaks do not occur, accept the change. `tyThingToLHsDecl` is called for class and data declarations, which ends up "synifying" the type variables and giving unlifted types kind signatures. As a result, type variables of kind `Type -> Type` are now printed with kind signatures in Hoogle output. This could be changed by manually drop kind signatures from class variables in the Hoogle backend if the behavior is deemed unacceptable. Sometimes subordinate declarations are exported separate from their parent declarations (e.g. record selectors). In this case, a type signature is cobbled together for the export item in `extractDecl`. Since this type signature is very manually constructed, it may lack kind signatures of decls constructed from `tyThingToLHsDecl`. An example of this is the `type-sigs` Hoogle test. Change `*` to `Type` in Hoogle test refs. I don't think this will break Hoogle behavior, since it appears to not consider type signatures in search. I have not fully verified this. - - - - - e14b7e58 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Fix LaTeX backend test refs Changes to GHC pretty printing code have resulted in some differences to Haddock's LaTeX output. - Type variables are printed explicitly quantified in the LinearTypes test - Wildcard types in type family equations are now printed numbered, e.g. _1 _2, in the TypeFamilies3 test - Combined signatures in DefaultSignatures test are now documented as separate signatures - - - - - 41b5b296 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Formatting and test source updates - Stop using kind `*` in html test sources - Add TypeOperators where necessary to avoid warnings and future errors - Rename some test modules to match their module names - - - - - c640e2a2 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Fix missing deprecation warnings on record fields `lookupOccEnv` was used to resolve `OccNames` with warnings attached, but it doesn't look in the record field namespace. Thus, if a record field had a warning attached, it would not resolve and the warning map would not include it. This commit fixes by using `lookupOccEnv_WithFields` instead. - - - - - fad0c462 by Finley McIlwaine at 2023-06-01T14:06:05-06:00 Formatting and some comments - - - - - 751fd023 by Finley McIlwaine at 2023-06-01T14:11:41-06:00 Accept HTML test diffs All diffs now boil down to the expected differences resulting from declarations being reified from TyThings in hi-haddock. Surface syntax now has much less control over the syntax used in the documentation. - - - - - d835c845 by Finley McIlwaine at 2023-06-01T14:11:45-06:00 Adapt to new load' type - - - - - dcf776c4 by Finley McIlwaine at 2023-06-01T14:13:13-06:00 Update mkWarningMap and moduleWarning - - - - - 8e8432fd by Finley McIlwaine at 2023-06-01T14:28:54-06:00 Revert load' changes - - - - - aeb2982c by Finley McIlwaine at 2023-06-01T14:40:24-06:00 Accept change to Instances test in html-test Link to Data.Tuple instead of GHC.Tuple.Prim - - - - - 8adfdbac by Finley McIlwaine at 2023-06-01T15:53:17-06:00 Reset ghc dep to ^>= 9.6 - - - - - 2b1ce93d by Finley McIlwaine at 2023-06-06T07:50:04-06:00 Update CHANGES.md, user guide, recomp avoidance * Add --trace-args flag for tracing arguments received to standard output * Avoid recompiling due to changes in optimization flags * Update users guide and changes.md - - - - - f3da6676 by Finley McIlwaine at 2023-06-06T14:12:56-06:00 Add "Avoiding Recompilation" section to docs This section is a bit of a WIP due to the unstable nature of hi-haddock and the lack of tooling supporting it, but its a good start. - - - - - bf36c467 by Matthew Pickering at 2023-06-07T10:16:09+01:00 Revert back to e16e20d592a6f5d9ed1af17b77fafd6495242345 Neither of these MRs are ready to land yet which causes issues with other MRs which are ready to land and need haddock changes. - - - - - 421510a9 by Vladislav Zavialov at 2023-06-07T09:36:30+00:00 atSign has no unicode variant Prior to this change, atSign was defined as follows: atSign unicode = text (if unicode then "@" else "@") Yes, this is the same symbol '\64' and not your font playing tricks on you. Now we define: atSign = char '@' Both the LaTeX and the Xhtml backend are updated accordingly. - - - - - 3785c276 by Vladislav Zavialov at 2023-06-07T09:36:30+00:00 LaTeX: fix printing of type variable bindings Consider this type signature: kindOf :: forall {k} (a :: k). Proxy a -> Proxy k Prior to this fix, the LaTeX backend rendered it like this: kindOf :: forall k a. Proxy a -> Proxy k Now we preserve explicit specificity and kind annotations. - - - - - 0febf3a8 by Vladislav Zavialov at 2023-06-07T09:36:30+00:00 Add support for invisible binders in type declarations - - - - - 13e33bb3 by Finley McIlwaine at 2023-06-08T07:51:59-06:00 Add "Avoiding Recompilation" section to docs This section is a bit of a WIP due to the unstable nature of hi-haddock and the lack of tooling supporting it, but its a good start. - - - - - 3e5340ce by Finley McIlwaine at 2023-06-08T07:54:27-06:00 Add note about stubdir to recompilation docs - - - - - db7e84dc by Finley at 2023-06-08T08:11:03-06:00 Merge pull request haskell/haddock#1597 from haskell/finley/hi-haddock-9.6 hi-haddock for ghc 9.6 - - - - - 4e085d17 by Finley McIlwaine at 2023-06-14T13:41:06-06:00 Replace SYB traversals - - - - - 7b39aec5 by Finley McIlwaine at 2023-06-14T14:20:17-06:00 Test ref accepts, remove unused HaddockClsInst - - - - - df9c2090 by Finley McIlwaine at 2023-06-15T08:02:51-06:00 Use batchMsg for progress reporting during load With hi-haddock as is, there is an awkward silence during the load operation. This commit makes haddock use the default `batchMsg` Messager for progress reporting, and makes the default GHC verbosity level 1, so the user can see what GHC is doing. - - - - - f23679a8 by Hécate Moonlight at 2023-06-15T20:31:53+02:00 Merge pull request haskell/haddock#1600 from haskell/finley/hi-haddock-optim - - - - - a7982192 by Finley McIlwaine at 2023-06-15T15:02:16-06:00 hi-haddock squashed - - - - - c34f0c8d by Finley McIlwaine at 2023-06-15T16:22:03-06:00 Merge remote-tracking branch 'origin/ghc-9.6' into finley/hi-haddock-squashed - - - - - 40452797 by Bartłomiej Cieślar at 2023-06-16T12:26:04+02:00 Changes related to MR !10283 MR !10283 changes the alternatives for WarningTxt pass. This MR reflects those changes in the haddock codebase. Signed-off-by: Bartłomiej Cieślar <bcieslar2001 at gmail.com> - - - - - e58673bf by Ben Gamari at 2023-06-16T09:33:35-04:00 Bump GHC version to 9.8 - - - - - 74bdf972 by Ben Gamari at 2023-06-16T09:36:18-04:00 Merge commit 'fcaaad06770a26d35d4aafd65772dedadf17669c' into ghc-head - - - - - 418ee3dc by Finley McIlwaine at 2023-06-20T15:39:05-04:00 Remove NFData SourceText, IfaceWarnings updates The NFData SourceText instance is now available in GHC Handle mod_iface mi_warns now being IfaceWarnings - - - - - 62f31380 by Finley McIlwaine at 2023-06-20T15:39:05-04:00 Accept Instances.hs test output Due to ghc!10469. - - - - - a8f2fc0e by Ben Gamari at 2023-06-20T15:48:08-04:00 Test fixes for "Fix associated data family doc structure items" Associated data families were being given their own export DocStructureItems, which resulted in them being documented separately from their classes in haddocks. This commit fixes it. - - - - - cb1ac33e by Bartłomiej Cieślar at 2023-06-21T12:56:02-04:00 Changes related to MR !10283 MR !10283 changes the alternatives for WarningTxt pass. This MR reflects those changes in the haddock codebase. Signed-off-by: Bartłomiej Cieślar <bcieslar2001 at gmail.com> - - - - - 9933e10b by Ben Gamari at 2023-06-21T12:56:02-04:00 Bump GHC version to 9.8 - - - - - fe8c18b6 by Ben Gamari at 2023-06-21T15:36:29-04:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - c61a0d5b by Ben Gamari at 2023-06-21T16:10:51-04:00 Bump GHC version to 9.9 - - - - - 0c2a756e by sheaf at 2023-07-07T13:45:12+02:00 Avoid incomplete record update in Haddock Hoogle This commit avoids running into an incomplete record update warning in the Hoogle backend of Haddock. This was only noticed now, because incomplete record updates were broken in GHC 9.6. Now that they are fixed, we have to avoid running into them! - - - - - f9b952a7 by Ben Gamari at 2023-07-21T11:58:05-04:00 Bump base bound to <4.20 For GHC 9.8. - - - - - 1b27e151 by Vladislav Zavialov at 2023-08-02T10:42:11+00:00 Check for puns (see ghc#23368) - - - - - 457341fd by Vladislav Zavialov at 2023-08-02T10:42:11+00:00 Remove fake exports for (~), List, and Tuple<n> The old reasoning no longer applies, nowadays those names can be mentioned in export lists. - - - - - bf3dcddf by Vladislav Zavialov at 2023-08-02T10:42:11+00:00 Fix pretty-printing of Solo and MkSolo - - - - - 495b2241 by Matthew Pickering at 2023-09-01T13:02:07+02:00 Fix issue with duplicate reexported definitions (T23616) When a class method was reexported, it's default methods were also showing up in the generated html page. The simplest and most non-invasive fix is to not look for the default method if we are just exporting the class method.. because the backends are just showing default methods when the whole class is exported. In general it would be worthwhile to rewrite this bit of code I think as the logic and what gets included is split over `lookupDocs` and `availExportDecl` it would be clearer to combine the two. The result of lookupDocs is always just passed to availExportDecl so it seems simpler and more obvious to just write the function directly. - - - - - 6551824d by Finley McIlwaine at 2023-09-05T13:06:57-07:00 Remove fake export of `FUN` from Prelude This prevents `data FUN` from being shown at the top of the Prelude docs. Fixes \#23920 on GHC. - - - - - 9ab5a448 by Alan Zimmerman at 2023-09-08T18:26:53+01:00 Match changes in wip/az/T23885-unicode-funtycon - - - - - 4d08364e by Alan Zimmerman at 2023-10-31T19:46:45+00:00 EPA: match changes in GHC - EPA: Comments in AnchorOperation - EPA: Remove EpaEofComment - - - - - e7da0d25 by Alan Zimmerman at 2023-11-05T11:20:31+00:00 EPA: match changes in GHC, l2l cleanup - - - - - 4ceac14d by Alan Zimmerman at 2023-11-11T15:16:41+00:00 EPA: Replace Anchor with EpaLocation Match GHC - - - - - 94fb8d47 by Alan Zimmerman at 2023-11-29T18:10:26+00:00 Match GHC, No comments in EpaDelta for comments - - - - - 32d208e1 by Vladislav Zavialov at 2023-12-12T20:41:36+03:00 EPA: Match changes to LHsToken removal - - - - - eebdd316 by Apoorv Ingle at 2024-01-23T13:49:12+00:00 Changes for haskell/haddock#18324 - - - - - 1fa1c00c by Jade at 2024-01-23T19:17:03-05:00 Enhance Documentation of functions exported by Data.Function This patch aims to improve the documentation of functions exported in Data.Function Tracking: #17929 Fixes: #10065 - - - - - ab47a43d by Jade at 2024-01-23T19:17:39-05:00 Improve documentation of hGetLine. - Add explanation for whether a newline is returned - Add examples Fixes #14804 - - - - - dd4af0e5 by Cheng Shao at 2024-01-23T19:18:17-05:00 Fix genapply for cross-compilation by nuking fragile CPP logic This commit fixes incorrectly built genapply when cross compiling (#24347) by nuking all fragile CPP logic in it from the orbit. All target-specific info are now read from DerivedConstants.h at runtime, see added note for details. Also removes a legacy Makefile and adds haskell language server support for genapply. - - - - - 0cda2b8b by Cheng Shao at 2024-01-23T19:18:17-05:00 rts: enable wasm32 register mapping The wasm backend didn't properly make use of all Cmm global registers due to #24347. Now that it is fixed, this patch re-enables full register mapping for wasm32, and we can now generate smaller & faster wasm modules that doesn't always spill arguments onto the stack. Fixes #22460 #24152. - - - - - 0325a6e5 by Greg Steuck at 2024-01-24T01:29:44-05:00 Avoid utf8 in primops.txt.pp comments They don't make it through readFile' without explicitly setting the encoding. See https://gitlab.haskell.org/ghc/ghc/-/issues/17755 - - - - - 1aaf0bd8 by David Binder at 2024-01-24T01:30:20-05:00 Bump hpc and hpc-bin submodule Bump hpc to 0.7.0.1 Bump hpc-bin to commit d1780eb2 - - - - - e693a4e8 by Ben Gamari at 2024-01-24T01:30:56-05:00 testsuite: Ignore stderr in T8089 Otherwise spurious "Killed: 9" messages to stderr may cause the test to fail. Fixes #24361. - - - - - a40f4ab2 by sheaf at 2024-01-24T14:04:33-05:00 Fix FMA instruction on LLVM We were emitting the wrong instructions for fused multiply-add operations on LLVM: - the instruction name is "llvm.fma.f32" or "llvm.fma.f64", not "fmadd" - LLVM does not support other instructions such as "fmsub"; instead we implement these by flipping signs of some arguments - the instruction is an LLVM intrinsic, which requires handling it like a normal function call instead of a machine instruction Fixes #24223 - - - - - 69abc786 by Andrei Borzenkov at 2024-01-24T14:05:09-05:00 Add changelog entry for renaming tuples from (,,...,,) to Tuple<n> (24291) - - - - - 0ac8f385 by Cheng Shao at 2024-01-25T00:27:48-05:00 compiler: remove unused GHC.Linker module The GHC.Linker module is empty and unused, other than as a hack for the make build system. We can remove it now that make is long gone; the note is moved to GHC.Linker.Loader instead. - - - - - 699da01b by Hécate Moonlight at 2024-01-25T00:28:27-05:00 Clarification for newtype constructors when using `coerce` - - - - - b2d8cd85 by Matt Walker at 2024-01-26T09:50:08-05:00 Fix #24308 Add tests for semicolon separated where clauses - - - - - 0da490a1 by Ben Gamari at 2024-01-26T17:34:41-05:00 hsc2hs: Bump submodule - - - - - 3f442fd2 by Ben Gamari at 2024-01-26T17:34:41-05:00 Bump containers submodule to 0.7 - - - - - 82a1c656 by Sebastian Nagel at 2024-01-29T02:32:40-05:00 base: with{Binary}File{Blocking} only annotates own exceptions Fixes #20886 This ensures that inner, unrelated exceptions are not misleadingly annotated with the opened file. - - - - - 9294a086 by Andreas Klebinger at 2024-01-29T02:33:15-05:00 Fix fma warning when using llvm on aarch64. On aarch64 fma is always on so the +fma flag doesn't exist for that target. Hence no need to try and pass +fma to llvm. Fixes #24379 - - - - - ced2e731 by sheaf at 2024-01-29T17:27:12-05:00 No shadowing warnings for NoFieldSelector fields This commit ensures we don't emit shadowing warnings when a user shadows a field defined with NoFieldSelectors. Fixes #24381 - - - - - 8eeadfad by Patrick at 2024-01-29T17:27:51-05:00 Fix bug wrong span of nested_doc_comment #24378 close #24378 1. Update the start position of span in `nested_doc_comment` correctly. and hence the spans of identifiers of haddoc can be computed correctly. 2. add test `HaddockSpanIssueT24378`. - - - - - a557580f by Alexey Radkov at 2024-01-30T19:41:52-05:00 Fix irrelevant dodgy-foreign-imports warning on import f-pointers by value A test *сс018* is attached (not sure about the naming convention though). Note that without the fix, the test fails with the *dodgy-foreign-imports* warning passed to stderr. The warning disappears after the fix. GHC shouldn't warn on imports of natural function pointers from C by value (which is feasible with CApiFFI), such as ```haskell foreign import capi "cc018.h value f" f :: FunPtr (Int -> IO ()) ``` where ```c void (*f)(int); ``` See a related real-world use-case [here](https://gitlab.com/daniel-casanueva/pcre-light/-/merge_requests/17). There, GHC warns on import of C function pointer `pcre_free`. - - - - - ca99efaf by Alexey Radkov at 2024-01-30T19:41:53-05:00 Rename test cc018 -> T24034 - - - - - 88c38dd5 by Ben Gamari at 2024-01-30T19:42:28-05:00 rts/TraverseHeap.c: Ensure that PosixSource.h is included first - - - - - ca2e919e by Simon Peyton Jones at 2024-01-31T09:29:45+00:00 Make decomposeRuleLhs a bit more clever This fixes #24370 by making decomposeRuleLhs undertand dictionary /functions/ as well as plain /dictionaries/ - - - - - 94ce031d by Teo Camarasu at 2024-02-01T05:49:49-05:00 doc: Add -Dn flag to user guide Resolves #24394 - - - - - 31553b11 by Ben Gamari at 2024-02-01T12:21:29-05:00 cmm: Introduce MO_RelaxedRead In hand-written Cmm it can sometimes be necessary to atomically load from memory deep within an expression (e.g. see the `CHECK_GC` macro). This MachOp provides a convenient way to do so without breaking the expression into multiple statements. - - - - - 0785cf81 by Ben Gamari at 2024-02-01T12:21:29-05:00 codeGen: Use relaxed accesses in ticky bumping - - - - - be423dda by Ben Gamari at 2024-02-01T12:21:29-05:00 base: use atomic write when updating timer manager - - - - - 8a310e35 by Ben Gamari at 2024-02-01T12:21:29-05:00 Use relaxed atomics to manipulate TSO status fields - - - - - d6809ee4 by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Add necessary barriers when manipulating TSO owner - - - - - 39e3ac5d by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Use `switch` to branch on why_blocked This is a semantics-preserving refactoring. - - - - - 515eb33d by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Fix synchronization on thread blocking state We now use a release barrier whenever we update a thread's blocking state. This required widening StgTSO.why_blocked as AArch64 does not support atomic writes on 16-bit values. - - - - - eb38812e by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Fix data race in threadPaused This only affects an assertion in the debug RTS and only needs relaxed ordering. - - - - - 26c48dd6 by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Fix data race in threadStatus# - - - - - 6af43ab4 by Ben Gamari at 2024-02-01T12:21:29-05:00 rts: Fix data race in Interpreter's preemption check - - - - - 9502ad3c by Ben Gamari at 2024-02-01T12:21:29-05:00 rts/Messages: Fix data race - - - - - 60802db5 by Ben Gamari at 2024-02-01T12:21:30-05:00 rts/Prof: Fix data race - - - - - ef8ccef5 by Ben Gamari at 2024-02-01T12:21:30-05:00 rts: Use relaxed ordering on dirty/clean info tables updates When changing the dirty/clean state of a mutable object we needn't have any particular ordering. - - - - - 76fe2b75 by Ben Gamari at 2024-02-01T12:21:30-05:00 codeGen: Use relaxed-read in closureInfoPtr - - - - - a6316eb4 by Ben Gamari at 2024-02-01T12:21:30-05:00 STM: Use acquire loads when possible Full sequential consistency is not needed here. - - - - - 6bddfd3d by Ben Gamari at 2024-02-01T12:21:30-05:00 rts: Use fence rather than redundant load Previously we would use an atomic load to ensure acquire ordering. However, we now have `ACQUIRE_FENCE_ON`, which allows us to express this more directly. - - - - - 55c65dbc by Ben Gamari at 2024-02-01T12:21:30-05:00 rts: Fix data races in profiling timer - - - - - 856b5e75 by Ben Gamari at 2024-02-01T12:21:30-05:00 Add Note [C11 memory model] - - - - - 6534da24 by Cheng Shao at 2024-02-01T12:22:07-05:00 compiler: move generic cmm optimization logic in NCG to a standalone module This commit moves GHC.CmmToAsm.cmmToCmm to a standalone module, GHC.Cmm.GenericOpt. The main motivation is enabling this logic to be run in the wasm backend NCG code, which is defined in other modules that's imported by GHC.CmmToAsm, causing a cyclic dependency issue. - - - - - 87e34888 by Cheng Shao at 2024-02-01T12:22:07-05:00 compiler: explicitly disable PIC in wasm32 NCG This commit explicitly disables the ncgPIC flag for the wasm32 target. The wasm backend doesn't support PIC for the time being. - - - - - c6ce242e by Cheng Shao at 2024-02-01T12:22:07-05:00 compiler: enable generic cmm optimizations in wasm backend NCG This commit enables the generic cmm optimizations in other NCGs to be run in the wasm backend as well, followed by a late cmm control-flow optimization pass. The added optimizations do catch some corner cases not handled by the pre-NCG cmm pipeline and are useful in generating smaller CFGs. - - - - - 151dda4e by Andrei Borzenkov at 2024-02-01T12:22:43-05:00 Namespacing for WARNING/DEPRECATED pragmas (#24396) New syntax for WARNING and DEPRECATED pragmas was added, namely namespace specifierss: namespace_spec ::= 'type' | 'data' | {- empty -} warning ::= warning_category namespace_spec namelist strings deprecation ::= namespace_spec namelist strings A new data type was introduced to represent these namespace specifiers: data NamespaceSpecifier = NoSpecifier | TypeNamespaceSpecifier (EpToken "type") | DataNamespaceSpecifier (EpToken "data") Extension field XWarning now contains this NamespaceSpecifier. lookupBindGroupOcc function was changed: it now takes NamespaceSpecifier and checks that the namespace of the found names matches the passed flag. With this change {-# WARNING data D "..." #-} pragma will only affect value namespace and {-# WARNING type D "..." #-} will only affect type namespace. The same logic is applicable to DEPRECATED pragmas. Finding duplicated warnings inside rnSrcWarnDecls now takes into consideration NamespaceSpecifier flag to allow warnings with the same names that refer to different namespaces. - - - - - 38c3afb6 by Bryan Richter at 2024-02-01T12:23:19-05:00 CI: Disable the test-cabal-reinstall job Fixes #24363 - - - - - 27020458 by Matthew Craven at 2024-02-03T01:53:26-05:00 Bump bytestring submodule to something closer to 0.12.1 ...mostly so that 16d6b7e835ffdcf9b894e79f933dd52348dedd0c (which reworks unaligned writes in Builder) and the stuff in https://github.com/haskell/bytestring/pull/631 can see wider testing. The less-terrible code for unaligned writes used in Builder on hosts not known to be ulaigned-friendly also takes less effort for GHC to compile, resulting in a metric decrease for T21839c on some platforms. The metric increase on T21839r is caused by the unrelated commit 750dac33465e7b59100698a330b44de7049a345c. It perhaps warrants further analysis and discussion (see #23822) but is not critical. Metric Decrease: T21839c Metric Increase: T21839r - - - - - cdddeb0f by Rodrigo Mesquita at 2024-02-03T01:54:02-05:00 Work around autotools setting C11 standard in CC/CXX In autoconf >=2.70, C11 is set by default for $CC and $CXX via the -std=...11 flag. In this patch, we split the "-std" flag out of the $CC and $CXX variables, which we traditionally assume to be just the executable name/path, and move it to $CFLAGS/$CXXFLAGS instead. Fixes #24324 - - - - - 5ff7cc26 by Apoorv Ingle at 2024-02-03T13:14:46-06:00 Expand `do` blocks right before typechecking using the `HsExpansion` philosophy. - Fixes #18324 #20020 #23147 #22788 #15598 #22086 #21206 - The change is detailed in - Note [Expanding HsDo with HsExpansion] in `GHC.Tc.Gen.Do` - Note [Doing HsExpansion in the Renamer vs Typechecker] in `GHC.Rename.Expr` expains the rational of doing expansions in type checker as opposed to in the renamer - Adds new datatypes: - `GHC.Hs.Expr.XXExprGhcRn`: new datatype makes this expansion work easier 1. Expansion bits for Expressions, Statements and Patterns in (`ExpandedThingRn`) 2. `PopErrCtxt` a special GhcRn Phase only artifcat to pop the previous error message in the error context stack - `GHC.Basic.Origin` now tracks the reason for expansion in case of Generated This is useful for type checking cf. `GHC.Tc.Gen.Expr.tcExpr` case for `HsLam` - Kills `HsExpansion` and `HsExpanded` as we have inlined them in `XXExprGhcRn` and `XXExprGhcTc` - Ensures warnings such as 1. Pattern match checks 2. Failable patterns 3. non-() return in body statements are preserved - Kill `HsMatchCtxt` in favor of `TcMatchAltChecker` - Testcases: * T18324 T20020 T23147 T22788 T15598 T22086 * T23147b (error message check), * DoubleMatch (match inside a match for pmc check) * pattern-fails (check pattern match with non-refutable pattern, eg. newtype) * Simple-rec (rec statements inside do statment) * T22788 (code snippet from #22788) * DoExpanion1 (Error messages for body statments) * DoExpansion2 (Error messages for bind statements) * DoExpansion3 (Error messages for let statements) Also repoint haddock to the right submodule so that the test (haddockHypsrcTest) pass Metric Increase 'compile_time/bytes allocated': T9020 The testcase is a pathalogical example of a `do`-block with many statements that do nothing. Given that we are expanding the statements into function binds, we will have to bear a (small) 2% cost upfront in the compiler to unroll the statements. - - - - - 0df8ce27 by Vladislav Zavialov at 2024-02-04T03:55:14-05:00 Reduce parser allocations in allocateCommentsP In the most common case, the comment queue is empty, so we can skip the work of processing it. This reduces allocations by about 10% in the parsing001 test. Metric Decrease: MultiLayerModulesRecomp parsing001 - - - - - ae856a82 by Matthew Pickering at 2024-02-05T12:22:39+00:00 ghc-internals fallout - - - - - cfd68290 by Simon Peyton Jones at 2024-02-05T17:58:33-05:00 Stop dropping a case whose binder is demanded This MR fixes #24251. See Note [Case-to-let for strictly-used binders] in GHC.Core.Opt.Simplify.Iteration, plus #24251, for lots of discussion. Final Nofib changes over 0.1%: +----------------------------------------- | imaginary/digits-of-e2 -2.16% | imaginary/rfib -0.15% | real/fluid -0.10% | real/gamteb -1.47% | real/gg -0.20% | real/maillist +0.19% | real/pic -0.23% | real/scs -0.43% | shootout/n-body -0.41% | shootout/spectral-norm -0.12% +======================================== | geom mean -0.05% Pleasingly, overall executable size is down by just over 1%. Compile times (in perf/compiler) wobble around a bit +/- 0.5%, but the geometric mean is -0.1% which seems good. - - - - - e4d137bb by Simon Peyton Jones at 2024-02-05T17:58:33-05:00 Add Note [Bangs in Integer functions] ...to document the bangs in the functions in GHC.Num.Integer - - - - - ce90f12f by Andrei Borzenkov at 2024-02-05T17:59:09-05:00 Hide WARNING/DEPRECATED namespacing under -XExplicitNamespaces (#24396) - - - - - e2ea933f by Simon Peyton Jones at 2024-02-06T10:12:04-05:00 Refactoring in preparation for lazy skolemisation * Make HsMatchContext and HsStmtContext be parameterised over the function name itself, rather than over the pass. See [mc_fun field of FunRhs] in Language.Haskell.Syntax.Expr - Replace types HsMatchContext GhcPs --> HsMatchContextPs HsMatchContext GhcRn --> HsMatchContextRn HsMatchContext GhcTc --> HsMatchContextRn (sic! not Tc) HsStmtContext GhcRn --> HsStmtContextRn - Kill off convertHsMatchCtxt * Split GHC.Tc.Type.BasicTypes.TcSigInfo so that TcCompleteSig (describing a complete user-supplied signature) is its own data type. - Split TcIdSigInfo(CompleteSig, PartialSig) into TcCompleteSig(CSig) TcPartialSig(PSig) - Use TcCompleteSig in tcPolyCheck, CheckGen - Rename types and data constructors: TcIdSigInfo --> TcIdSig TcPatSynInfo(TPSI) --> TcPatSynSig(PatSig) - Shuffle around helper functions: tcSigInfoName (moved to GHC.Tc.Types.BasicTypes) completeSigPolyId_maybe (moved to GHC.Tc.Types.BasicTypes) tcIdSigName (inlined and removed) tcIdSigLoc (introduced) - Rearrange the pattern match in chooseInferredQuantifiers * Rename functions and types: tcMatchesCase --> tcCaseMatches tcMatchesFun --> tcFunBindMatches tcMatchLambda --> tcLambdaMatches tcPats --> tcMatchPats matchActualFunTysRho --> matchActualFunTys matchActualFunTySigma --> matchActualFunTy * Add HasDebugCallStack constraints to: mkBigCoreVarTupTy, mkBigCoreTupTy, boxTy, mkPiTy, mkPiTys, splitAppTys, splitTyConAppNoView_maybe * Use `penv` from the outer context in the inner loop of GHC.Tc.Gen.Pat.tcMultiple * Move tcMkVisFunTy, tcMkInvisFunTy, tcMkScaledFunTys down the file, factor out and export tcMkScaledFunTy. * Move isPatSigCtxt down the file. * Formatting and comments Co-authored-by: Vladislav Zavialov <vlad.z.4096 at gmail.com> - - - - - f5d3e03c by Andrei Borzenkov at 2024-02-06T10:12:04-05:00 Lazy skolemisation for @a-binders (#17594) This patch is a preparation for @a-binders implementation. The main changes are: * Skolemisation is now prepared to deal with @binders. See Note [Skolemisation overview] in GHC.Tc.Utils.Unify. Most of the action is in - Utils.Unify.matchExpectedFunTys - Gen.Pat.tcMatchPats - Gen.Expr.tcPolyExprCheck - Gen.Binds.tcPolyCheck Some accompanying refactoring: * I found that funTyConAppTy_maybe was doing a lot of allocation, and rejigged userTypeError_maybe to avoid calling it. - - - - - 532993c8 by Zubin Duggal at 2024-02-06T10:12:41-05:00 driver: Really don't lose track of nodes when we fail to resolve cycles This fixes a bug in 8db8d2fd1c881032b1b360c032b6d9d072c11723, where we could lose track of acyclic components at the start of an unresolved cycle. We now ensure we never loose track of any of these components. As T24275 demonstrates, a "cyclic" SCC might not really be a true SCC: When viewed without boot files, we have a single SCC ``` [REC main:T24275B [main:T24275B {-# SOURCE #-}, main:T24275A {-# SOURCE #-}] main:T24275A [main:T24275A {-# SOURCE #-}]] ``` But with boot files this turns into ``` [NONREC main:T24275B {-# SOURCE #-} [], REC main:T24275B [main:T24275B {-# SOURCE #-}, main:T24275A {-# SOURCE #-}] main:T24275A {-# SOURCE #-} [main:T24275B], NONREC main:T24275A [main:T24275A {-# SOURCE #-}]] ``` Note that this is truly not an SCC, as no nodes are reachable from T24275B.hs-boot. However, we treat this entire group as a single "SCC" because it seems so when we analyse the graph without taking boot files into account. Indeed, we must return a single ResolvedCycle element in the BuildPlan for this as described in Note [Upsweep]. However, since after resolving this is not a true SCC anymore, `findCycle` fails to find a cycle and we have a sub-optimal error message as a result. To handle this, I extended `findCycle` to not assume its input is an SCC, and to try harder to find cycles in its input. Fixes #24275 - - - - - b35dd613 by Zubin Duggal at 2024-02-06T10:13:17-05:00 GHCi: Lookup breakpoint CCs in the correct module We need to look up breakpoint CCs in the module that the breakpoint points to, and not the current module. Fixes #24327 - - - - - b09e6958 by Zubin Duggal at 2024-02-06T10:13:17-05:00 testsuite: Add test for #24327 - - - - - 569b4c10 by doyougnu at 2024-02-07T03:06:26-05:00 ts: add compile_artifact, ignore_extension flag In b521354216f2821e00d75f088d74081d8b236810 the testsuite gained the capability to collect generic metrics. But this assumed that the test was not linking and producing artifacts and we only wanted to track object files, interface files, or build artifacts from the compiler build. However, some backends, such as the JS backend, produce artifacts when compiling, such as the jsexe directory which we want to track. This patch: - tweaks the testsuite to collect generic metrics on any build artifact in the test directory. - expands the exe_extension function to consider windows and adds the ignore_extension flag. - Modifies certain tests to add the ignore_extension flag. Tests such as heaprof002 expect a .ps file, but on windows without ignore_extensions the testsuite will look for foo.exe.ps. Hence the flag. - adds the size_hello_artifact test - - - - - 75a31379 by doyougnu at 2024-02-07T03:06:26-05:00 ts: add wasm_arch, heapprof002 wasm extension - - - - - c9731d6d by Rodrigo Mesquita at 2024-02-07T03:07:03-05:00 Synchronize bindist configure for #24324 In cdddeb0f1280b40cc194028bbaef36e127175c4c, we set up a workaround for #24324 in the in-tree configure script, but forgot to update the bindist configure script accordingly. This updates it. - - - - - d309f4e7 by Matthew Pickering at 2024-02-07T03:07:38-05:00 distrib/configure: Fix typo in CONF_GCC_LINKER_OPTS_STAGE2 variable Instead we were setting CONF_GCC_LINK_OPTS_STAGE2 which meant that we were missing passing `--target` when invoking the linker. Fixes #24414 - - - - - 77db84ab by Ben Gamari at 2024-02-08T00:35:22-05:00 llvmGen: Adapt to allow use of new pass manager. We now must use `-passes` in place of `-O<n>` due to #21936. Closes #21936. - - - - - 3c9ddf97 by Matthew Pickering at 2024-02-08T00:35:59-05:00 testsuite: Mark length001 as fragile on javascript Modifying the timeout multiplier is not a robust way to get this test to reliably fail. Therefore we mark it as fragile until/if javascript ever supports the stack limit. - - - - - 20b702b5 by Matthew Pickering at 2024-02-08T00:35:59-05:00 Javascript: Don't filter out rtsDeps list This logic appears to be incorrect as it would drop any dependency which was not in a direct dependency of the package being linked. In the ghc-internals split this started to cause errors because `ghc-internal` is not a direct dependency of most packages, and hence important symbols to keep which are hard coded into the js runtime were getting dropped. - - - - - 2df96366 by Ben Gamari at 2024-02-08T00:35:59-05:00 base: Cleanup whitespace in cbits - - - - - 44f6557a by Ben Gamari at 2024-02-08T00:35:59-05:00 Move `base` to `ghc-internal` Here we move a good deal of the implementation of `base` into a new package, `ghc-internal` such that it can be evolved independently from the user-visible interfaces of `base`. While we want to isolate implementation from interfaces, naturally, we would like to avoid turning `base` into a mere set of module re-exports. However, this is a non-trivial undertaking for a variety of reasons: * `base` contains numerous known-key and wired-in things, requiring corresponding changes in the compiler * `base` contains a significant amount of C code and corresponding autoconf logic, which is very fragile and difficult to break apart * `base` has numerous import cycles, which are currently dealt with via carefully balanced `hs-boot` files * We must not break existing users To accomplish this migration, I tried the following approaches: * [Split-GHC.Base]: Break apart the GHC.Base knot to allow incremental migration of modules into ghc-internal: this knot is simply too intertwined to be easily pulled apart, especially given the rather tricky import cycles that it contains) * [Move-Core]: Moving the "core" connected component of base (roughly 150 modules) into ghc-internal. While the Haskell side of this seems tractable, the C dependencies are very subtle to break apart. * [Move-Incrementally]: 1. Move all of base into ghc-internal 2. Examine the module structure and begin moving obvious modules (e.g. leaves of the import graph) back into base 3. Examine the modules remaining in ghc-internal, refactor as necessary to facilitate further moves 4. Go to (2) iterate until the cost/benefit of further moves is insufficient to justify continuing 5. Rename the modules moved into ghc-internal to ensure that they don't overlap with those in base 6. For each module moved into ghc-internal, add a shim module to base with the declarations which should be exposed and any requisite Haddocks (thus guaranteeing that base will be insulated from changes in the export lists of modules in ghc-internal Here I am using the [Move-Incrementally] approach, which is empirically the least painful of the unpleasant options above Bumps haddock submodule. Metric Decrease: haddock.Cabal haddock.base Metric Increase: MultiComponentModulesRecomp T16875 size_hello_artifact - - - - - e8fb2451 by Vladislav Zavialov at 2024-02-08T00:36:36-05:00 Haddock comments on infix constructors (#24221) Rewrite the `HasHaddock` instance for `ConDecl GhcPs` to account for infix constructors. This change fixes a Haddock regression (introduced in 19e80b9af252) that affected leading comments on infix data constructor declarations: -- | Docs for infix constructor | Int :* Bool The comment should be associated with the data constructor (:*), not with its left-hand side Int. - - - - - 9060d55b by Ben Gamari at 2024-02-08T00:37:13-05:00 Add os-string as a boot package Introduces `os-string` submodule. This will be necessary for `filepath-1.5`. - - - - - 9d65235a by Ben Gamari at 2024-02-08T00:37:13-05:00 gitignore: Ignore .hadrian_ghci_multi/ - - - - - d7ee12ea by Ben Gamari at 2024-02-08T00:37:13-05:00 hadrian: Set -this-package-name When constructing the GHC flags for a package Hadrian must take care to set `-this-package-name` in addition to `-this-unit-id`. This hasn't broken until now as we have not had any uses of qualified package imports. However, this will change with `filepath-1.5` and the corresponding `unix` bump, breaking `hadrian/multi-ghci`. - - - - - f2dffd2e by Ben Gamari at 2024-02-08T00:37:13-05:00 Bump filepath to 1.5.0.0 Required bumps of the following submodules: * `directory` * `filepath` * `haskeline` * `process` * `unix` * `hsc2hs` * `Win32` * `semaphore-compat` and the addition of `os-string` as a boot package. - - - - - ab533e71 by Matthew Pickering at 2024-02-08T00:37:50-05:00 Use specific clang assembler when compiling with -fllvm There are situations where LLVM will produce assembly which older gcc toolchains can't handle. For example on Deb10, it seems that LLVM >= 13 produces assembly which the default gcc doesn't support. A more robust solution in the long term is to require a specific LLVM compatible assembler when using -fllvm. Fixes #16354 - - - - - c32b6426 by Matthew Pickering at 2024-02-08T00:37:50-05:00 Update CI images with LLVM 15, ghc-9.6.4 and cabal-install-3.10.2.0 - - - - - 5fcd58be by Matthew Pickering at 2024-02-08T00:37:50-05:00 Update bootstrap plans for 9.4.8 and 9.6.4 - - - - - 707a32f5 by Matthew Pickering at 2024-02-08T00:37:50-05:00 Add alpine 3_18 release job This is mainly experimental and future proofing to enable a smooth transition to newer alpine releases once 3_12 is too old. - - - - - c37931b3 by John Ericson at 2024-02-08T06:39:05-05:00 Generate LLVM min/max bound policy via Hadrian Per #23966, I want the top-level configure to only generate configuration data for Hadrian, not do any "real" tasks on its own. This is part of that effort --- one less file generated by it. (It is still done with a `.in` file, so in a future world non-Hadrian also can easily create this file.) Split modules: - GHC.CmmToLlvm.Config - GHC.CmmToLlvm.Version - GHC.CmmToLlvm.Version.Bounds - GHC.CmmToLlvm.Version.Type This also means we can get rid of the silly `unused.h` introduced in !6803 / 7dfcab2f4bcb7206174ea48857df1883d05e97a2 as temporary kludge. Part of #23966 - - - - - 9f987235 by Apoorv Ingle at 2024-02-08T06:39:42-05:00 Enable mdo statements to use HsExpansions Fixes: #24411 Added test T24411 for regression - - - - - f8429266 by Jade at 2024-02-08T14:56:50+01:00 Adjust test for ghc MR !10993 - - - - - 762b2120 by Jade at 2024-02-08T15:17:15+00:00 Improve Monad, Functor & Applicative docs This patch aims to improve the documentation of Functor, Applicative, Monad and related symbols. The main goal is to make it more consistent and make accessible. See also: !10979 (closed) and !10985 (closed) Ticket #17929 Updates haddock submodule - - - - - 151770ca by Josh Meredith at 2024-02-10T14:28:15-05:00 JavaScript codegen: Use GHC's tag inference where JS backend-specific evaluation inference was previously used (#24309) - - - - - 2e880635 by Zubin Duggal at 2024-02-10T14:28:51-05:00 ci: Allow release-hackage-lint to fail Otherwise it blocks the ghcup metadata pipeline from running. - - - - - b0293f78 by Matthew Pickering at 2024-02-10T14:29:28-05:00 rts: eras profiling mode The eras profiling mode is useful for tracking the life-time of closures. When a closure is written, the current era is recorded in the profiling header. This records the era in which the closure was created. * Enable with -he * User mode: Use functions ghc-experimental module GHC.Profiling.Eras to modify the era * Automatically: --automatic-era-increment, increases the user era on major collections * The first era is era 1 * -he<era> can be used with other profiling modes to select a specific era If you just want to record the era but not to perform heap profiling you can use `-he --no-automatic-heap-samples`. https://well-typed.com/blog/2024/01/ghc-eras-profiling/ Fixes #24332 - - - - - be674a2c by Jade at 2024-02-10T14:30:04-05:00 Adjust error message for trailing whitespace in as-pattern. Fixes #22524 - - - - - 53ef83f9 by doyougnu at 2024-02-10T14:30:47-05:00 gitlab: js: add codeowners Fixes: - #24409 Follow on from: - #21078 and MR !9133 - When we added the JS backend this was forgotten. This patch adds the rightful codeowners. - - - - - 8bbe12f2 by Matthew Pickering at 2024-02-10T14:31:23-05:00 Bump CI images so that alpine3_18 image includes clang15 The only changes here are that clang15 is now installed on the alpine-3_18 image. - - - - - df9fd9f7 by Sylvain Henry at 2024-02-12T12:18:42-05:00 JS: handle stored null StablePtr Some Haskell codes unsafely cast StablePtr into ptr to compare against NULL. E.g. in direct-sqlite: if castStablePtrToPtr aggStPtr /= nullPtr then where `aggStPtr` is read (`peek`) from zeroed memory initially. We fix this by giving these StablePtr the same representation as other null pointers. It's safe because StablePtr at offset 0 is unused (for this exact reason). - - - - - 55346ede by Sylvain Henry at 2024-02-12T12:18:42-05:00 JS: disable MergeObjsMode test This isn't implemented for JS backend objects. - - - - - aef587f6 by Sylvain Henry at 2024-02-12T12:18:42-05:00 JS: add support for linking C sources Support linking C sources with JS output of the JavaScript backend. See the added documentation in the users guide. The implementation simply extends the JS linker to use the objects (.o) that were already produced by the emcc compiler and which were filtered out previously. I've also added some options to control the link with C functions (see the documentation about pragmas). With this change I've successfully compiled the direct-sqlite package which embeds the sqlite.c database code. Some wrappers are still required (see the documentation about wrappers) but everything generic enough to be reused for other libraries have been integrated into rts/js/mem.js. - - - - - b71b392f by Sylvain Henry at 2024-02-12T12:18:42-05:00 JS: avoid EMCC logging spurious failure emcc would sometime output messages like: cache:INFO: generating system asset: symbol_lists/424b44514e43d789148e69e4e7d1c7fdc0350b79.json... (this will be cached in "/emsdk/upstream/emscripten/cache/symbol_lists/424b44514e43d789148e69e4e7d1c7fdc0350b79.json" for subsequent builds) cache:INFO: - ok Cf https://github.com/emscripten-core/emscripten/issues/18607 This breaks our tests matching the stderr output. We avoid this by setting EMCC_LOGGING=0 - - - - - ff2c0cc9 by Simon Peyton Jones at 2024-02-12T12:19:17-05:00 Remove a dead comment Just remove an out of date block of commented-out code, and tidy up the relevant Notes. See #8317. - - - - - bedb4f0d by Teo Camarasu at 2024-02-12T18:50:33-05:00 nonmoving: Add support for heap profiling Add support for heap profiling while using the nonmoving collector. We greatly simply the implementation by disabling concurrent collection for GCs when heap profiling is enabled. This entails that the marked objects on the nonmoving heap are exactly the live objects. Note that we match the behaviour for live bytes accounting by taking the size of objects on the nonmoving heap to be that of the segment's block rather than the object itself. Resolves #22221 - - - - - d0d5acb5 by Teo Camarasu at 2024-02-12T18:51:09-05:00 doc: Add requires prof annotation to options that require it Resolves #24421 - - - - - 6d1e2386 by Alan Zimmerman at 2024-02-13T22:00:28+03:00 EPA: Match changes to HsParTy and HsFunTy - - - - - 57bb8c92 by Cheng Shao at 2024-02-13T14:07:49-05:00 deriveConstants: add needed constants for wasm backend This commit adds needed constants to deriveConstants. They are used by RTS code in the wasm backend to support the JSFFI logic. - - - - - 615eb855 by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: make genSym use C-based atomic increment on non-JS 32-bit platforms The pure Haskell implementation causes i386 regression in unrelated work that can be fixed by using C-based atomic increment, see added comment for details. - - - - - a9918891 by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: allow JSFFI for wasm32 This commit allows the javascript calling convention to be used when the target platform is wasm32. - - - - - 8771a53b by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: allow boxed JSVal as a foreign type This commit allows the boxed JSVal type to be used as a foreign argument/result type. - - - - - 053c92b3 by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: ensure ctors have the right priority on wasm32 This commit fixes the priorities of ctors generated by GHC codegen on wasm32, see the referred note for details. - - - - - b7942e0a by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: add JSFFI desugar logic for wasm32 This commit adds JSFFI desugar logic for the wasm backend. - - - - - 2c1dca76 by Cheng Shao at 2024-02-13T14:07:49-05:00 compiler: add JavaScriptFFI to supported extension list on wasm32 This commit adds JavaScriptFFI as a supported extension when the target platform is wasm32. - - - - - 9ad0e2b4 by Cheng Shao at 2024-02-13T14:07:49-05:00 rts/ghc-internal: add JSFFI support logic for wasm32 This commit adds rts/ghc-internal logic to support the wasm backend's JSFFI functionality. - - - - - e9ebea66 by Cheng Shao at 2024-02-13T14:07:49-05:00 ghc-internal: fix threadDelay for wasm in browsers This commit fixes broken threadDelay for wasm when it runs in browsers, see added note for detailed explanation. - - - - - f85f3fdb by Cheng Shao at 2024-02-13T14:07:49-05:00 utils: add JSFFI utility code This commit adds JavaScript util code to utils to support the wasm backend's JSFFI functionality: - jsffi/post-link.mjs, a post-linker to process the linked wasm module and emit a small complement JavaScript ESM module to be used with it at runtime - jsffi/prelude.js, a tiny bit of prelude code as the JavaScript side of runtime logic - jsffi/test-runner.mjs, run the jsffi test cases Co-authored-by: amesgen <amesgen at amesgen.de> - - - - - 77e91500 by Cheng Shao at 2024-02-13T14:07:49-05:00 hadrian: distribute jsbits needed for wasm backend's JSFFI support The post-linker.mjs/prelude.js files are now distributed in the bindist libdir, so when using the wasm backend's JSFFI feature, the user wouldn't need to fetch them from a ghc checkout manually. - - - - - c47ba1c3 by Cheng Shao at 2024-02-13T14:07:49-05:00 testsuite: add opts.target_wrapper This commit adds opts.target_wrapper which allows overriding the target wrapper on a per test case basis when testing a cross target. This is used when testing the wasm backend's JSFFI functionality; the rest of the cases are tested using wasmtime, though the jsffi cases are tested using the node.js based test runner. - - - - - 8e048675 by Cheng Shao at 2024-02-13T14:07:49-05:00 testsuite: T22774 should work for wasm JSFFI T22774 works since the wasm backend now supports the JSFFI feature. - - - - - 1d07f9a6 by Cheng Shao at 2024-02-13T14:07:49-05:00 testsuite: add JSFFI test cases for wasm backend This commit adds a few test cases for the wasm backend's JSFFI functionality, as well as a simple README to instruct future contributors to add new test cases. - - - - - b8997080 by Cheng Shao at 2024-02-13T14:07:49-05:00 docs: add documentation for wasm backend JSFFI This commit adds changelog and user facing documentation for the wasm backend's JSFFI feature. - - - - - ffeb000d by David Binder at 2024-02-13T14:08:30-05:00 Add tests from libraries/process/tests and libraries/Win32/tests to GHC These tests were previously part of the libraries, which themselves are submodules of the GHC repository. This commit moves the tests directly to the GHC repository. - - - - - 5a932cf2 by David Binder at 2024-02-13T14:08:30-05:00 Do not execute win32 tests on non-windows runners - - - - - 500d8cb8 by Jade at 2024-02-13T14:09:07-05:00 prevent GHCi (and runghc) from suggesting other symbols when not finding main Fixes: #23996 - - - - - b19ec331 by Cheng Shao at 2024-02-13T14:09:46-05:00 rts: update xxHash to v0.8.2 - - - - - 4a97bdb8 by Cheng Shao at 2024-02-13T14:09:46-05:00 rts: use XXH3_64bits hash on all 64-bit platforms This commit enables XXH3_64bits hash to be used on all 64-bit platforms. Previously it was only enabled on x86_64, so platforms like aarch64 silently falls back to using XXH32 which degrades the hashing function quality. - - - - - ee01de7d by Cheng Shao at 2024-02-13T14:09:46-05:00 rts: define XXH_INLINE_ALL This commit cleans up how we include the xxhash.h header and only define XXH_INLINE_ALL, which is sufficient to inline the xxHash functions without symbol collision. - - - - - 0e01e1db by Alan Zimmerman at 2024-02-14T02:13:22-05:00 EPA: Move EpAnn out of extension points Leaving a few that are too tricky, maybe some other time. Also - remove some unneeded helpers from Parser.y - reduce allocations with strictness annotations Updates haddock submodule Metric Decrease: parsing001 - - - - - de589554 by Andreas Klebinger at 2024-02-14T02:13:59-05:00 Fix ffi callbacks with >6 args and non-64bit args. Check for ptr/int arguments rather than 64-bit width arguments when counting integer register arguments. The old approach broke when we stopped using exclusively W64-sized types to represent sub-word sized integers. Fixes #24314 - - - - - 9c588f19 by Fendor at 2024-02-14T11:05:36+01:00 Adapt to GHC giving better Name's for linking - - - - - 325b7613 by Ben Gamari at 2024-02-14T14:27:45-05:00 rts/EventLog: Place eliminate duplicate strlens Previously many of the `post*` implementations would first compute the length of the event's strings in order to determine the event length. Later we would then end up computing the length yet again in `postString`. Now we instead pass the string length to `postStringLen`, avoiding the repeated work. - - - - - 8aafa51c by Ben Gamari at 2024-02-14T14:27:46-05:00 rts/eventlog: Place upper bound on IPE string field lengths The strings in IPE events may be of unbounded length. Limit the lengths of these fields to 64k characters to ensure that we don't exceed the maximum event length. - - - - - 0e60d52c by Zubin Duggal at 2024-02-14T14:27:46-05:00 rts: drop unused postString function - - - - - d8d1333a by Cheng Shao at 2024-02-14T14:28:23-05:00 compiler/rts: fix wasm unreg regression This commit fixes two wasm unreg regressions caught by a nightly pipeline: - Unknown stg_scheduler_loopzh symbol when compiling scheduler.cmm - Invalid _hs_constructor(101) function name when handling ctor - - - - - 264a4fa9 by Owen Shepherd at 2024-02-15T09:41:06-05:00 feat: Add sortOn to Data.List.NonEmpty Adds `sortOn` to `Data.List.NonEmpty`, and adds comments describing when to use it, compared to `sortWith` or `sortBy . comparing`. The aim is to smooth out the API between `Data.List`, and `Data.List.NonEmpty`. This change has been discussed in the [clc issue](https://github.com/haskell/core-libraries-committee/issues/227). - - - - - b57200de by Fendor at 2024-02-15T09:41:47-05:00 Prefer RdrName over OccName for looking up locations in doc renaming step Looking up by OccName only does not take into account when functions are only imported in a qualified way. Fixes issue #24294 Bump haddock submodule to include regression test - - - - - 8ad02724 by Luite Stegeman at 2024-02-15T17:33:32-05:00 JS: add simple optimizer The simple optimizer reduces the size of the code generated by the JavaScript backend without the complexity and performance penalty of the optimizer in GHCJS. Also see #22736 Metric Decrease: libdir size_hello_artifact - - - - - 20769b36 by Matthew Pickering at 2024-02-15T17:34:07-05:00 base: Expose `--no-automatic-time-samples` in `GHC.RTS.Flags` API This patch builds on 5077416e12cf480fb2048928aa51fa4c8fc22cf1 and modifies the base API to reflect the new RTS flag. CLC proposal #243 - https://github.com/haskell/core-libraries-committee/issues/243 Fixes #24337 - - - - - 778e1db3 by Andrei Borzenkov at 2024-02-16T16:12:07+03:00 Namespace specifiers for fixity signatures - - - - - 08031ada by Teo Camarasu at 2024-02-16T13:37:00-05:00 base: export System.Mem.performBlockingMajorGC The corresponding C function was introduced in ba73a807edbb444c49e0cf21ab2ce89226a77f2e. As part of #22264. Resolves #24228 The CLC proposal was disccused at: https://github.com/haskell/core-libraries-committee/issues/230 Co-authored-by: Ben Gamari <bgamari.foss at gmail.com> - - - - - 1f534c2e by Florian Weimer at 2024-02-16T13:37:42-05:00 Fix C output for modern C initiative GCC 14 on aarch64 rejects the C code written by GHC with this kind of error: error: assignment to ‘ffi_arg’ {aka ‘long unsigned int’} from ‘HsPtr’ {aka ‘void *’} makes integer from pointer without a cast [-Wint-conversion] 68 | *(ffi_arg*)resp = cret; | ^ Add the correct cast. For more information on this see: https://fedoraproject.org/wiki/Changes/PortingToModernC Tested-by: Richard W.M. Jones <rjones at redhat.com> - - - - - 5d3f7862 by Matthew Craven at 2024-02-16T13:38:18-05:00 Bump bytestring submodule to 0.12.1.0 - - - - - 902ebcc2 by Ian-Woo Kim at 2024-02-17T06:01:01-05:00 Add missing BCO handling in scavenge_one. - - - - - 97d26206 by Sylvain Henry at 2024-02-17T06:01:44-05:00 Make cast between words and floats real primops (#24331) First step towards fixing #24331. Replace foreign prim imports with real primops. - - - - - a40e4781 by Sylvain Henry at 2024-02-17T06:01:44-05:00 Perf: add constant folding for bitcast between float and word (#24331) - - - - - 5fd2c00f by Sylvain Henry at 2024-02-17T06:01:44-05:00 Perf: replace stack checks with assertions in casting primops There are RESERVED_STACK_WORDS free words (currently 21) on the stack, so omit the checks. Suggested by Cheng Shao. - - - - - 401dfe7b by Sylvain Henry at 2024-02-17T06:01:44-05:00 Reexport primops from GHC.Float + add deprecation - - - - - 4ab48edb by Ben Gamari at 2024-02-17T06:02:21-05:00 rts/Hash: Don't iterate over chunks if we don't need to free data When freeing a `HashTable` there is no reason to walk over the hash list before freeing it if the user has not given us a `dataFreeFun`. Noticed while looking at #24410. - - - - - bd5a1f91 by Cheng Shao at 2024-02-17T06:03:00-05:00 compiler: add SEQ_CST fence support In addition to existing Acquire/Release fences, this commit adds SEQ_CST fence support to GHC, allowing Cmm code to explicitly emit a fence that enforces total memory ordering. The following logic is added: - The MO_SeqCstFence callish MachOp - The %prim fence_seq_cst() Cmm syntax and the SEQ_CST_FENCE macro in Cmm.h - MO_SeqCstFence lowering logic in every single GHC codegen backend - - - - - 2ce2a493 by Cheng Shao at 2024-02-17T06:03:38-05:00 testsuite: fix hs_try_putmvar002 for targets without pthread.h hs_try_putmvar002 includes pthread.h and doesn't work on targets without this header (e.g. wasm32). It doesn't need to include this header at all. This was previously unnoticed by wasm CI, though recent toolchain upgrade brought in upstream changes that completely removes pthread.h in the single-threaded wasm32-wasi sysroot, therefore we need to handle that change. - - - - - 1fb3974e by Cheng Shao at 2024-02-17T06:03:38-05:00 ci: bump ci-images to use updated wasm image This commit bumps our ci-images revision to use updated wasm image. - - - - - 56e3f097 by Andrew Lelechenko at 2024-02-17T06:04:13-05:00 Bump submodule text to 2.1.1 T17123 allocates less because of improvements to Data.Text.concat in 1a6a06a. Metric Decrease: T17123 - - - - - a7569495 by Cheng Shao at 2024-02-17T06:04:51-05:00 rts: remove redundant rCCCS initialization This commit removes the redundant logic of initializing each Capability's rCCCS to CCS_SYSTEM in initProfiling(). Before initProfiling() is called during RTS startup, each Capability's rCCCS has already been assigned CCS_SYSTEM when they're first initialized. - - - - - 7a0293cc by Ben Gamari at 2024-02-19T07:11:00-05:00 Drop dependence on `touch` This drops GHC's dependence on the `touch` program, instead implementing it within GHC. This eliminates an external dependency and means that we have one fewer program to keep track of in the `configure` script - - - - - 0dbd729e by Andrei Borzenkov at 2024-02-19T07:11:37-05:00 Parser, renamer, type checker for @a-binders (#17594) GHC Proposal 448 introduces binders for invisible type arguments (@a-binders) in various contexts. This patch implements @-binders in lambda patterns and function equations: {-# LANGUAGE TypeAbstractions #-} id1 :: a -> a id1 @t x = x :: t -- @t-binder on the LHS of a function equation higherRank :: (forall a. (Num a, Bounded a) => a -> a) -> (Int8, Int16) higherRank f = (f 42, f 42) ex :: (Int8, Int16) ex = higherRank (\ @a x -> maxBound @a - x ) -- @a-binder in a lambda pattern in an argument -- to a higher-order function Syntax ------ To represent those @-binders in the AST, the list of patterns in Match now uses ArgPat instead of Pat: data Match p body = Match { ... - m_pats :: [LPat p], + m_pats :: [LArgPat p], ... } + data ArgPat pass + = VisPat (XVisPat pass) (LPat pass) + | InvisPat (XInvisPat pass) (HsTyPat (NoGhcTc pass)) + | XArgPat !(XXArgPat pass) The VisPat constructor represents patterns for visible arguments, which include ordinary value-level arguments and required type arguments (neither is prefixed with a @), while InvisPat represents invisible type arguments (prefixed with a @). Parser ------ In the grammar (Parser.y), the lambda and lambda-cases productions of aexp non-terminal were updated to accept argpats instead of apats: aexp : ... - | '\\' apats '->' exp + | '\\' argpats '->' exp ... - | '\\' 'lcases' altslist(apats) + | '\\' 'lcases' altslist(argpats) ... + argpat : apat + | PREFIX_AT atype Function left-hand sides did not require any changes to the grammar, as they were already parsed with productions capable of parsing @-binders. Those binders were being rejected in post-processing (isFunLhs), and now we accept them. In Parser.PostProcess, patterns are constructed with the help of PatBuilder, which is used as an intermediate data structure when disambiguating between FunBind and PatBind. In this patch we define ArgPatBuilder to accompany PatBuilder. ArgPatBuilder is a short-lived data structure produced in isFunLhs and consumed in checkFunBind. Renamer ------- Renaming of @-binders builds upon prior work on type patterns, implemented in 2afbddb0f24, which guarantees proper scoping and shadowing behavior of bound type variables. This patch merely defines rnLArgPatsAndThen to process a mix of visible and invisible patterns: + rnLArgPatsAndThen :: NameMaker -> [LArgPat GhcPs] -> CpsRn [LArgPat GhcRn] + rnLArgPatsAndThen mk = mapM (wrapSrcSpanCps rnArgPatAndThen) where + rnArgPatAndThen (VisPat x p) = ... rnLPatAndThen ... + rnArgPatAndThen (InvisPat _ tp) = ... rnHsTyPat ... Common logic between rnArgPats and rnPats is factored out into the rn_pats_general helper. Type checker ------------ Type-checking of @-binders builds upon prior work on lazy skolemisation, implemented in f5d3e03c56f. This patch extends tcMatchPats to handle @-binders. Now it takes and returns a list of LArgPat rather than LPat: tcMatchPats :: ... - -> [LPat GhcRn] + -> [LArgPat GhcRn] ... - -> TcM ([LPat GhcTc], a) + -> TcM ([LArgPat GhcTc], a) Invisible binders in the Match are matched up with invisible (Specified) foralls in the type. This is done with a new clause in the `loop` worker of tcMatchPats: loop :: [LArgPat GhcRn] -> [ExpPatType] -> TcM ([LArgPat GhcTc], a) loop (L l apat : pats) (ExpForAllPatTy (Bndr tv vis) : pat_tys) ... -- NEW CLAUSE: | InvisPat _ tp <- apat, isSpecifiedForAllTyFlag vis = ... In addition to that, tcMatchPats no longer discards type patterns. This is done by filterOutErasedPats in the desugarer instead. x86_64-linux-deb10-validate+debug_info Metric Increase: MultiLayerModulesTH_OneShot - - - - - 486979b0 by Jade at 2024-02-19T07:12:13-05:00 Add specialized sconcat implementation for Data.Monoid.First and Data.Semigroup.First Approved CLC Proposal: https://github.com/haskell/core-libraries-committee/issues/246 Fixes: #24346 - - - - - 17e309d2 by John Ericson at 2024-02-19T07:12:49-05:00 Fix reST in users guide It appears that aef587f65de642142c1dcba0335a301711aab951 wasn't valid syntax. - - - - - 35b0ad90 by Brandon Chinn at 2024-02-19T07:13:25-05:00 Fix searching for errors in sphinx build - - - - - 4696b966 by Cheng Shao at 2024-02-19T07:14:02-05:00 hadrian: fix wasm backend post linker script permissions The post-link.mjs script was incorrectly copied and installed as a regular data file without executable permission, this commit fixes it. - - - - - a6142e0c by Cheng Shao at 2024-02-19T07:14:40-05:00 testsuite: mark T23540 as fragile on i386 See #24449 for details. - - - - - 249caf0d by Matthew Craven at 2024-02-19T20:36:09-05:00 Add @since annotation to Data.Data.mkConstrTag - - - - - cdd939e7 by Jade at 2024-02-19T20:36:46-05:00 Enhance documentation of Data.Complex - - - - - d04f384f by Ben Gamari at 2024-02-21T04:59:23-05:00 hadrian/bindist: Ensure that phony rules are marked as such Otherwise make may not run the rule if file with the same name as the rule happens to exist. - - - - - efcbad2d by Ben Gamari at 2024-02-21T04:59:23-05:00 hadrian: Generate HSC2HS_EXTRAS variable in bindist installation We must generate the hsc2hs wrapper at bindist installation time since it must contain `--lflag` and `--cflag` arguments which depend upon the installation path. The solution here is to substitute these variables in the configure script (see mk/hsc2hs.in). This is then copied over a dummy wrapper in the install rules. Fixes #24050. - - - - - c540559c by Matthew Pickering at 2024-02-21T04:59:23-05:00 ci: Show --info for installed compiler - - - - - ab9281a2 by Matthew Pickering at 2024-02-21T04:59:23-05:00 configure: Correctly set --target flag for linker opts Previously we were trying to use the FP_CC_SUPPORTS_TARGET with 4 arguments, when it only takes 3 arguments. Instead we need to use the `FP_PROG_CC_LINKER_TARGET` function in order to set the linker flags. Actually fixes #24414 - - - - - 9460d504 by Rodrigo Mesquita at 2024-02-21T04:59:59-05:00 configure: Do not override existing linker flags in FP_LD_NO_FIXUP_CHAINS - - - - - 77629e76 by Andrei Borzenkov at 2024-02-21T05:00:35-05:00 Namespacing for fixity signatures (#14032) Namespace specifiers were added to syntax of fixity signatures: - sigdecl ::= infix prec ops | ... + sigdecl ::= infix prec namespace_spec ops | ... To preserve namespace during renaming MiniFixityEnv type now has separate FastStringEnv fields for names that should be on the term level and for name that should be on the type level. makeMiniFixityEnv function was changed to fill MiniFixityEnv in the right way: - signatures without namespace specifiers fill both fields - signatures with 'data' specifier fill data field only - signatures with 'type' specifier fill type field only Was added helper function lookupMiniFixityEnv that takes care about looking for a name in an appropriate namespace. Updates haddock submodule. Metric Decrease: MultiLayerModulesTH_OneShot - - - - - 84357d11 by Teo Camarasu at 2024-02-21T05:01:11-05:00 rts: only collect live words in nonmoving census when non-concurrent This avoids segfaults when the mutator modifies closures as we examine them. Resolves #24393 - - - - - 9ca56dd3 by Ian-Woo Kim at 2024-02-21T05:01:53-05:00 mutex wrap in refreshProfilingCCSs - - - - - 1387966a by Cheng Shao at 2024-02-21T05:02:32-05:00 rts: remove unused HAVE_C11_ATOMICS macro This commit removes the unused HAVE_C11_ATOMICS macro. We used to have a few places that have fallback paths when HAVE_C11_ATOMICS is not defined, but that is completely redundant, since the FP_CC_SUPPORTS__ATOMICS configure check will fail when the C compiler doesn't support C11 style atomics. There are also many places (e.g. in unreg backend, SMP.h, library cbits, etc) where we unconditionally use C11 style atomics anyway which work in even CentOS 7 (gcc 4.8), the oldest distro we test in our CI, so there's no value in keeping HAVE_C11_ATOMICS. - - - - - 0f40d68f by Andreas Klebinger at 2024-02-21T05:03:09-05:00 RTS: -Ds - make sure incall is non-zero before dereferencing it. Fixes #24445 - - - - - e5886de5 by Ben Gamari at 2024-02-21T05:03:44-05:00 rts/AdjustorPool: Use ExecPage abstraction This is just a minor cleanup I found while reviewing the implementation. - - - - - 826c5b47 by Torsten Schmits at 2024-02-21T13:17:05+01:00 rename GHC.Tuple.Prim to GHC.Tuple - - - - - 09941666 by Adam Gundry at 2024-02-21T13:53:12+00:00 Define GHC2024 language edition (#24320) See https://github.com/ghc-proposals/ghc-proposals/pull/613. Also fixes #24343 and improves the documentation of language editions. Co-authored-by: Joachim Breitner <mail at joachim-breitner.de> - - - - - 2cff14d5 by Ben Gamari at 2024-02-22T09:35:56-05:00 Bump bounds - - - - - f49376b3 by Ben Gamari at 2024-02-22T09:35:56-05:00 Allow `@since` annotations in export lists Here we extend Haddock to admit `@since` annotations in export lists. These can be attached to most export list items (although not subordinate lists). These annotations supercede the declaration's `@since` annotation in produced Haddocks. - - - - - b5aa93df by Ben Gamari at 2024-02-22T12:09:06-05:00 Allow package-qualified @since declarations - - - - - 8f5957f2 by Ben Gamari at 2024-02-22T13:55:19-05:00 Documentation changes from ghc-internal restructuring Previously many declarations (e.g. `Int`) were declared to have a "home" in `Prelude`. However, now Haddock instead chooses to put these in more specific homes (e.g. `Data.Int`). Given that the "home" decision is driven by heuristics and in general these changes seem quite reasonable I am accepting them: * `Int` moved from `Prelude` to `Data.Int` * `(~)` moved from `Prelude` to `Data.Type.Equality` * `Type` moved from `GHC.Types` to `Data.Kind` * `Maybe` moved from `Prelude` to `Data.Maybe` * `Bool` moved from `Prelude` to `Data.Bool` * `Ordering` moved from `Prelude` to `Data.Ord` As well, more identifiers are now hyperlinked; it's not immediately clear *why*, but it is an improvement nevertheless. - - - - - ec33fec3 by Ben Gamari at 2024-02-22T20:36:24-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 5121a4ed by Ben Gamari at 2024-02-23T06:40:55-05:00 Allow docstrings after exports Here we extend the parser and AST to preserve docstrings following export items. We then extend Haddock to parse `@since` annotations in such docstrings, allowing changes in export structure to be properly documented. Bumps haddock submodule. - - - - - 30cfd251 by Torsten Schmits at 2024-02-24T13:00:42-05:00 rename GHC.Tuple.Prim to GHC.Tuple - - - - - 0eb2265d by Hécate Moonlight at 2024-02-24T16:02:16-05:00 Improve the synopsis and description of base - - - - - 2e36f5d2 by Jade at 2024-02-24T16:02:51-05:00 Error Messages: Properly align cyclic module error Fixes: #24476 - - - - - bbfb051c by Ben Gamari at 2024-02-24T19:10:23-05:00 Allow docstrings after exports Here we extend the parser and AST to preserve docstrings following export items. We then extend Haddock to parse `@since` annotations in such docstrings, allowing changes in export structure to be properly documented. - - - - - d8d6ad8c by Ben Gamari at 2024-02-24T19:10:23-05:00 ghc-internal: Move modules into GHC.Internal.* namespace Bumps haddock submodule due to testsuite output changes. - - - - - a82af7cd by Ben Gamari at 2024-02-24T19:10:23-05:00 ghc-internal: Rewrite `@since ` to `@since base-` These will be incrementally moved to the export sites in `base` where possible. - - - - - ca3836e1 by Ben Gamari at 2024-02-24T19:10:23-05:00 base: Migrate Haddock `not-home` pragmas from `ghc-internal` This ensures that we do not use `base` stub modules as declarations' homes when not appropriate. - - - - - c8cf3e26 by Ben Gamari at 2024-02-24T19:10:23-05:00 base: Partially freeze exports of GHC.Base Sadly there are still a few module reexports. However, at least we have decoupled from the exports of `GHC.Internal.Base`. - - - - - 272573c6 by Ben Gamari at 2024-02-24T19:10:23-05:00 Move Haddock named chunks - - - - - 2d8a881d by Ben Gamari at 2024-02-24T19:10:23-05:00 Drop GHC.Internal.Data.Int - - - - - 55c4c385 by Ben Gamari at 2024-02-24T19:10:23-05:00 compiler: Fix mention to `GHC....` modules in wasm desugaring Really, these references should be via known-key names anyways. I have fixed the proximate issue here but have opened #24472 to track the additional needed refactoring. - - - - - 64150911 by Ben Gamari at 2024-02-24T19:10:23-05:00 Accept performance shifts from ghc-internal restructure As expected, Haddock now does more work. Less expected is that some other testcases actually get faster, presumably due to less interface file loading. As well, the size_hello_artifact test regressed a bit when debug information is enabled due to debug information for the new stub symbols. Metric Decrease: T12227 T13056 Metric Increase: haddock.Cabal haddock.base MultiLayerModulesTH_OneShot size_hello_artifact - - - - - 317a915b by Ben Gamari at 2024-02-24T19:10:23-05:00 Expose GHC.Wasm.Prim from ghc-experimental Previously this was only exposed from `ghc-internal` which violates our agreement that users shall not rely on things exposed from that package. Fixes #24479. - - - - - 3bbd2bf2 by Ben Gamari at 2024-02-24T19:10:23-05:00 compiler/tc: Small optimisation of evCallStack Don't lookupIds unless we actually need them. - - - - - 3e5c9e3c by Ben Gamari at 2024-02-24T19:10:23-05:00 compiler/tc: Use toException instead of SomeException - - - - - 125714a6 by Ben Gamari at 2024-02-24T19:10:23-05:00 base: Factor out errorBelch This was useful when debugging - - - - - 3d6aae7c by Ben Gamari at 2024-02-24T19:10:23-05:00 base: Clean up imports of GHC.Stack.CloneStack - - - - - 6900306e by Ben Gamari at 2024-02-24T19:10:24-05:00 base: Move PrimMVar to GHC.Internal.MVar - - - - - 28f8a148 by Ben Gamari at 2024-02-24T19:10:24-05:00 base: Move prettyCallStack to GHC.Internal.Stack - - - - - 4892de47 by Ben Gamari at 2024-02-24T19:10:24-05:00 base: Explicit dependency to workaround #24436 Currently `ghc -M` fails to account for `.hs-boot` files correctly, leading to issues with cross-package one-shot builds failing. This currently manifests in `GHC.Exception` due to the boot file for `GHC.Internal.Stack`. Work around this by adding an explicit `import`, ensuring that `GHC.Internal.Stack` is built before `GHC.Exception`. See #24436. - - - - - 294c93a5 by Ben Gamari at 2024-02-24T19:10:24-05:00 base: Use displayException in top-level exception handler Happily this also allows us to eliminate a special case for Deadlock exceptions. Implements [CLC #198](https://github.com/haskell/core-libraries-committee/issues/198). - - - - - 732db81d by Ben Gamari at 2024-02-24T19:12:18-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - cf756a25 by Ben Gamari at 2024-02-24T22:11:53-05:00 rts: Fix symbol references in Wasm RTS - - - - - 4e4d47a0 by Jade at 2024-02-26T15:17:20-05:00 GHCi: Improve response to unloading, loading and reloading modules Fixes #13869 - - - - - f3de8a3c by Zubin Duggal at 2024-02-26T15:17:57-05:00 rel-eng/fetch-gitlab.py: Fix name of aarch64 alpine 3_18 release job - - - - - c71bfdff by Cheng Shao at 2024-02-26T15:18:35-05:00 hadrian/hie-bios: pass -j to hadrian This commit passes -j to hadrian in the hadrian/hie-bios scripts. When the user starts HLS in a fresh clone that has just been configured, it takes quite a while for hie-bios to pick up the ghc flags and start actual indexing, due to the fact that the hadrian build step defaulted to -j1, so -j speeds things up and improve HLS user experience in GHC. Also add -j flag to .ghcid to speed up ghcid, and sets the Windows build root to .hie-bios which also works and unifies with other platforms, the previous build root _hie-bios was missing from .gitignore anyway. - - - - - 50bfdb46 by Cheng Shao at 2024-02-26T15:18:35-05:00 ci: enable parallelism in hadrian/ghci scripts This commit enables parallelism when the hadrian/ghci scripts are called in CI. The time bottleneck is in the hadrian build step, but previously the build step wasn't parallelized. - - - - - 61a78231 by Felix Yan at 2024-02-26T15:19:14-05:00 m4: Correctly detect GCC version When calling as `cc`, GCC does not outputs lowercased "gcc" at least in 13.2.1 version here. ``` $ cc --version cc (GCC) 13.2.1 20230801 ... ``` This fails the check and outputs the confusing message: `configure: $CC is not gcc; assuming it's a reasonably new C compiler` This patch makes it check for upper-cased "GCC" too so that it works correctly: ``` checking version of gcc... 13.2.1 ``` - - - - - 001aa539 by Teo Camarasu at 2024-02-27T13:26:46-05:00 Fix formatting in whereFrom docstring Previously it used markdown syntax rather than Haddock syntax for code quotes - - - - - e8034d15 by Teo Camarasu at 2024-02-27T13:26:46-05:00 Move ClosureType type to ghc-internal - Use ClosureType for InfoProv.ipDesc. - Use ClosureType for CloneStack.closureType. - Now ghc-heap re-exports this type from ghc-internal. See the accompanying CLC proposal: https://github.com/haskell/core-libraries-committee/issues/210 Resolves #22600 - - - - - 3da0a551 by Matthew Craven at 2024-02-27T13:27:22-05:00 StgToJS: Simplify ExprInline constructor of ExprResult Its payload was used only for a small optimization in genAlts, avoiding a few assignments for programs of this form: case NormalDataCon arg1 arg2 of x { NormalDataCon x1 x2 -> ... ; } But when compiling with optimizations, this sort of code is generally eliminated by case-of-known-constructor in Core-to-Core. So it doesn't seem worth tracking and cleaning up again in StgToJS. - - - - - 61bc92cc by Cheng Shao at 2024-02-27T16:58:42-05:00 rts: add missing ccs_mutex guard to internal_dlopen See added comment for details. Closes #24423. - - - - - dd29d3b2 by doyougnu at 2024-02-27T16:59:23-05:00 cg: Remove GHC.Cmm.DataFlow.Collections In pursuit of #15560 and #17957 and generally removing redundancy. - - - - - d3a050d2 by Cheng Shao at 2024-02-27T17:00:00-05:00 utils: remove unused lndir from tree Ever since the removal of the make build system, the in tree lndir hasn't been actually built, so this patch removes it. - - - - - 86bf7010 by Ben Gamari at 2024-02-27T19:28:10-05:00 Merge remote-tracking branch 'origin/ghc-head' into HEAD - - - - - 74b24a9b by Teo Camarasu at 2024-02-28T16:32:58+00:00 rts: avoid checking bdescr of value outside of Haskell heap In nonmovingTidyWeaks we want to check if the key of a weak pointer lives in the non-moving heap. We do this by checking the flags of the block the key lives in. But we need to be careful with values that live outside the Haskell heap, since they will lack a block descriptor and looking for one may lead to a segfault. In this case we should just accept that it isn't on the non-moving heap. Resolves #24492 - - - - - b4cae4ec by Simon Peyton Jones at 2024-02-29T02:10:08-05:00 In mkDataConRep, ensure the in-scope set is right A small change that fixes #24489 - - - - - 3836a110 by Cheng Shao at 2024-02-29T21:25:45-05:00 testsuite: fix T23540 fragility on 32-bit platforms T23540 is fragile on 32-bit platforms. The root cause is usage of `getEvidenceTreesAtPoint`, which internally relies on `Name`'s `Ord` instance, which is indeterministic. The solution is adding a deterministic `Ord` instance for `EvidenceInfo` and sorting the evidence trees before pretty printing. Fixes #24449. - - - - - 960c8d47 by Teo Camarasu at 2024-02-29T21:26:20-05:00 Reduce AtomicModifyIORef increment count This test leads to a lot of contention when N>2 and becomes very slow. Let's reduce the amount of work we do to compensate. Resolves #24490 - - - - - 2e46c8ad by Matthew Pickering at 2024-03-01T05:48:06-05:00 hadrian: Improve parallelism in binary-dist-dir rule I noticed that the "docs" target was needed after the libraries and executables were built. We can improve the parallelism by needing everything at once so that documentation can be built immediately after a library is built for example. - - - - - cb6c11fe by Matthew Pickering at 2024-03-01T05:48:07-05:00 ci: Bump windows and freebsd boot compilers to 9.6.4 We have previously bumped the docker images to use 9.6.4, but neglected to bump the windows images until now. - - - - - 30f06996 by Matthew Pickering at 2024-03-01T05:48:07-05:00 ci: darwin: Update to 9.6.2 for boot compiler 9.6.4 is currently broken due to #24050 Also update to use LLVM-15 rather than LLVM-11, which is out of date. - - - - - d9d69e12 by Matthew Pickering at 2024-03-01T05:48:07-05:00 Bump minimum bootstrap version to 9.6 - - - - - 67ace1c5 by Matthew Pickering at 2024-03-01T05:48:07-05:00 ci: Enable more documentation building Here we enable documentation building on 1. Darwin: The sphinx toolchain was already installed so we enable html and manpages. 2. Rocky8: Full documentation (toolchain already installed) 3. Alpine: Full documetnation (toolchain already installed) 4. Windows: HTML and manpages (toolchain already installed) Fixes #24465 - - - - - 39583c39 by Matthew Pickering at 2024-03-01T05:48:42-05:00 ci: Bump ci-images to allow updated aarch64-alpine image with llvm15 and clang15 - - - - - d91d00fc by Torsten Schmits at 2024-03-01T15:01:50-05:00 Introduce ListTuplePuns extension This implements Proposal 0475, introducing the `ListTuplePuns` extension which is enabled by default. Disabling this extension makes it invalid to refer to list, tuple and sum type constructors by using built-in syntax like `[Int]`, `(Int, Int)`, `(# Int#, Int# #)` or `(# Int | Int #)`. Instead, this syntax exclusively denotes data constructors for use with `DataKinds`. The conventional way of referring to these data constructors by prefixing them with a single quote (`'(Int, Int)`) is now a parser error. Tuple declarations have been moved to `GHC.Tuple.Prim` and the `Solo` data constructor has been renamed to `MkSolo` (in a previous commit). Unboxed tuples and sums now have real source declarations in `GHC.Types`. Unit and solo types for tuples are now called `Unit`, `Unit#`, `Solo` and `Solo#`. Constraint tuples now have the unambiguous type constructors `CTuple<n>` as well as `CUnit` and `CSolo`, defined in `GHC.Classes` like before. A new parser construct has been added for the unboxed sum data constructor declarations. The type families `Tuple`, `Sum#` etc. that were intended to provide nicer syntax have been omitted from this change set due to inference problems, to be implemented at a later time. See the MR discussion for more info. Updates the submodule utils/haddock. Updates the cabal submodule due to new language extension. Metric Increase: haddock.base Metric Decrease: MultiLayerModulesTH_OneShot size_hello_artifact Proposal document: https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0475-tuple-syntax.rst Merge request: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/8820 Tracking ticket: https://gitlab.haskell.org/ghc/ghc/-/issues/21294 - - - - - bbdb6286 by Sylvain Henry at 2024-03-01T15:01:50-05:00 JS linker: filter unboxed tuples - - - - - dec6d8d3 by Arnaud Spiwack at 2024-03-01T15:02:30-05:00 Improve error messages coming from non-linear patterns This enriched the `CtOrigin` for non-linear patterns to include data of the pattern that created the constraint (which can be quite useful if it occurs nested in a pattern) as well as an explanation why the pattern is non-restricted in (at least in some cases). - - - - - 6612388e by Arnaud Spiwack at 2024-03-01T15:02:30-05:00 Adjust documentation of linear lets according to committee decision - - - - - 1c064ef1 by Cheng Shao at 2024-03-02T17:11:19-05:00 compiler: start deprecating cmmToRawCmmHook cmmToRawCmmHook was added 4 years ago in d561c8f6244f8280a2483e8753c38e39d34c1f01. Its only user is the Asterius project, which has been archived and deprecated in favor of the ghc wasm backend. This patch starts deprecating cmmToRawCmmHook by placing a DEPRECATED pragma, and actual removal shall happen in a future GHC major release if no issue to oppose the deprecation has been raised in the meantime. - - - - - 9b74845f by Andrew Lelechenko at 2024-03-02T17:11:55-05:00 Data.List.NonEmpty.unzip: use WARNING with category instead of DEPRECATED CLC proposal: https://github.com/haskell/core-libraries-committee/issues/258 - - - - - 61bb5ff6 by Finley McIlwaine at 2024-03-04T09:01:40-08:00 add -fprof-late-overloaded and -fprof-late-overloaded-calls * Refactor late cost centre insertion for extensibility * Add two more late cost centre insertion methods that add SCCs to overloaded top level bindings and call sites with dictionary arguments. * Some tests for the basic functionality of the new insertion methods Resolves: #24500 - - - - - 82ccb801 by Andreas Klebinger at 2024-03-04T19:59:14-05:00 x86-ncg: Fix fma codegen when arguments are globals Fix a bug in the x86 ncg where results would be wrong when the desired output register and one of the input registers were the same global. Also adds a tiny optimization to make use of the memory addressing support when convenient. Fixes #24496 - - - - - 18ad1077 by Matthew Pickering at 2024-03-05T14:22:31-05:00 rel_eng: Update hackage docs upload scripts This adds the upload of ghc-internal and ghc-experimental to our scripts which upload packages to hackage. - - - - - bf47c9ba by Matthew Pickering at 2024-03-05T14:22:31-05:00 docs: Remove stray module comment from GHC.Profiling.Eras - - - - - 37d9b340 by Matthew Pickering at 2024-03-05T14:22:31-05:00 Fix ghc-internal cabal file The file mentioned some artifacts relating to the base library. I have renamed these to the new ghc-internal variants. - - - - - 23f2a478 by Matthew Pickering at 2024-03-05T14:22:31-05:00 Fix haddock source links and hyperlinked source There were a few issues with the hackage links: 1. We were using the package id rather than the package name for the package links. This is fixed by now allowing the template to mention %pkg% or %pkgid% and substituing both appropiatly. 2. The `--haddock-base-url` flag is renamed to `--haddock-for-hackage` as the new base link works on a local or remote hackage server. 3. The "src" path including too much stuff, so cross-package source links were broken as the template was getting double expanded. Fixes #24086 - - - - - 2fa336a9 by Ben Gamari at 2024-03-05T14:23:07-05:00 filepath: Bump submodule to 1.5.2.0 - - - - - 31217944 by Ben Gamari at 2024-03-05T14:23:07-05:00 os-string: Bump submodule to 2.0.2 - - - - - 4074a3f2 by Matthew Pickering at 2024-03-05T21:44:35-05:00 base: Reflect new era profiling RTS flags in GHC.RTS.Flags * -he profiling mode * -he profiling selector * --automatic-era-increment CLC proposal #254 - https://github.com/haskell/core-libraries-committee/issues/254 - - - - - a8c0e31b by Sylvain Henry at 2024-03-05T21:45:14-05:00 JS: faster implementation for some numeric primitives (#23597) Use faster implementations for the following primitives in the JS backend by not using JavaScript's BigInt: - plusInt64 - minusInt64 - minusWord64 - timesWord64 - timesInt64 Co-authored-by: Josh Meredith <joshmeredith2008 at gmail.com> - - - - - 21e3f325 by Cheng Shao at 2024-03-05T21:45:52-05:00 rts: add -xr option to control two step allocator reserved space size This patch adds a -xr RTS option to control the size of virtual memory address space reserved by the two step allocator on a 64-bit platform, see added documentation for explanation. Closes #24498. - - - - - dedcf102 by Cheng Shao at 2024-03-06T13:39:04-05:00 rts: expose HeapAlloc.h as public header This commit exposes HeapAlloc.h as a public header. The intention is to expose HEAP_ALLOCED/HEAP_ALLOCED_GC, so they can be used in assertions in other public headers, and they may also be useful for user code. - - - - - d19441d7 by Cheng Shao at 2024-03-06T13:39:04-05:00 rts: assert pointer is indeed heap allocated in Bdescr() This commit adds an assertion to Bdescr() to assert the pointer is indeed heap allocated. This is useful to rule out RTS bugs that attempt to access non-existent block descriptor of a static closure, #24492 being one such example. - - - - - 9a656a04 by Ben Gamari at 2024-03-06T13:39:39-05:00 ghc-experimental: Add dummy dependencies to work around #23942 This is a temporary measure to improve CI reliability until a proper solution is developed. Works around #23942. - - - - - 1e84b924 by Simon Peyton Jones at 2024-03-06T13:39:39-05:00 Three compile perf improvements with deep nesting These were changes are all triggered by #24471. 1. Make GHC.Core.Opt.SetLevels.lvlMFE behave better when there are many free variables. See Note [Large free-variable sets]. 2. Make GHC.Core.Opt.Arity.floatIn a bit lazier in its Cost argument. This benefits the common case where the ArityType turns out to be nullary. See Note [Care with nested expressions] 3. Make GHC.CoreToStg.Prep.cpeArg behave for deeply-nested expressions. See Note [Eta expansion of arguments in CorePrep] wrinkle (EA2). Compile times go down by up to 4.5%, and much more in artificial cases. (Geo mean of compiler/perf changes is -0.4%.) Metric Decrease: CoOpt_Read T10421 T12425 - - - - - c4b13113 by Hécate Moonlight at 2024-03-06T13:40:17-05:00 Use "module" instead of "library" when applicable in base haddocks - - - - - 9cd9efb4 by Vladislav Zavialov at 2024-03-07T13:01:54+03:00 Rephrase error message to say "visible arguments" (#24318) * Main change: make the error message generated by mkFunTysMsg more accurate by changing "value arguments" to "visible arguments". * Refactor: define a new type synonym VisArity and use it instead of Arity in a few places. It might be the case that there other places in the compiler that should talk about visible arguments rather than value arguments, but I haven't tried to find them all, focusing only on the error message reported in the ticket. - - - - - 4b6e76b5 by Patrick at 2024-03-07T22:09:30+08:00 fix haskell/haddock#24493, with module name introduced in hieAst The accompanies haddoc PR with GHC PR https://gitlab.haskell.org/ghc/ghc/-/merge_requests/12153 Two things have been done: 1. Link is introduced to every `X` in `module X where`, since we introduce the module name to HieAst, 2. `{-# LINE 4 "hypsrc-test/src/PositionPragmas.hs" #-}` is added before the `module PositionPragmas where` in ` hypsrc-test/ref/src/PositionPragmas.html `.It ensures only a single hieAst for file `hypsrc-test/src/PositionPragmas.hs` is generated. - - - - - d523a6a7 by Ben Gamari at 2024-03-07T19:40:45-05:00 Bump array submodule - - - - - 7e55003c by Ben Gamari at 2024-03-07T19:40:45-05:00 Bump stm submodule - - - - - 32d337ef by Ben Gamari at 2024-03-07T19:40:45-05:00 Introduce exception context Here we introduce the `ExceptionContext` type and `ExceptionAnnotation` class, allowing dynamically-typed user-defined annotations to be attached to exceptions. CLC Proposal: https://github.com/haskell/core-libraries-committee/issues/199 GHC Proposal: https://github.com/ghc-proposals/ghc-proposals/pull/330 - - - - - 39f3d922 by Ben Gamari at 2024-03-07T19:40:46-05:00 testsuite/interface-stability: Update documentation - - - - - fdea7ada by Ben Gamari at 2024-03-07T19:40:46-05:00 ghc-internal: comment formatting - - - - - 4fba42ef by Ben Gamari at 2024-03-07T19:40:46-05:00 compiler: Default and warn ExceptionContext constraints - - - - - 3886a205 by Ben Gamari at 2024-03-07T19:40:46-05:00 base: Introduce exception backtraces Here we introduce the `Backtraces` type and associated machinery for attaching these via `ExceptionContext`. These has a few compile-time regressions (`T15703` and `T9872d`) due to the additional dependencies in the exception machinery. As well, there is a surprisingly large regression in the `size_hello_artifact` test. This appears to be due to various `Integer` and `Read` bits now being reachable at link-time. I believe it should be possible to avoid this but I have accepted the change for now to get the feature merged. CLC Proposal: https://github.com/haskell/core-libraries-committee/issues/199 GHC Proposal: https://github.com/ghc-proposals/ghc-proposals/pull/330 Metric Increase: T15703 T9872d size_hello_artifact - - - - - 18c5409f by Ben Gamari at 2024-03-07T19:40:46-05:00 users guide: Release notes for exception backtrace work - - - - - f849c5fc by Ben Gamari at 2024-03-07T19:40:46-05:00 compiler: Don't show ExceptionContext of GhcExceptions Most GhcExceptions are user-facing errors and therefore the ExceptionContext has little value. Ideally we would enable it in the DEBUG compiler but I am leaving this for future work. - - - - - dc646e6f by Sylvain Henry at 2024-03-07T19:40:46-05:00 Disable T9930fail for the JS target (cf #19174) - - - - - bfc09760 by Alan Zimmerman at 2024-03-07T19:41:22-05:00 Update showAstData to honour blanking of AnnParen Also tweak rendering of SrcSpan to remove extra blank line. - - - - - 50454a29 by Ben Gamari at 2024-03-08T03:32:42-05:00 ghc-internal: Eliminate GHC.Internal.Data.Kind This was simply reexporting things from `ghc-prim`. Instead reexport these directly from `Data.Kind`. Also add build ordering dependency to work around #23942. - - - - - 38a4b6ab by Ben Gamari at 2024-03-08T03:33:18-05:00 rts: Fix SET_HDR initialization of retainer set This fixes a regression in retainer set profiling introduced by b0293f78cb6acf2540389e22bdda420d0ab874da. Prior to that commit the heap traversal word would be initialized by `SET_HDR` using `LDV_RECORD_CREATE`. However, the commit added a `doingLDVProfiling` check in `LDV_RECORD_CREATE`, meaning that this initialization no longer happened. Given that this initialization was awkwardly indirectly anyways, I have fixed this by explicitly initializating the heap traversal word to `NULL` in `SET_PROF_HDR`. This is equivalent to the previous behavior, but much more direct. Fixes #24513. - - - - - 635abccc by Ben Gamari at 2024-03-08T17:09:06-05:00 Bump ghc version to 9.10 - - - - - 2859a637 by Ben Gamari at 2024-03-08T18:26:47-05:00 base: Use strerror_r instead of strerror As noted by #24344, `strerror` is not necessarily thread-safe. Thankfully, POSIX.1-2001 has long offered `strerror_r`, which is safe to use. Fixes #24344. CLC discussion: https://github.com/haskell/core-libraries-committee/issues/249 - - - - - 5b934048 by Ben Gamari at 2024-03-08T18:50:12-05:00 Bump base upper bound - - - - - b30d134e by Ben Gamari at 2024-03-08T18:50:44-05:00 Testsuite output update - - - - - edb9bf77 by Jade at 2024-03-09T03:39:38-05:00 Error messages: Improve Error messages for Data constructors in type signatures. This patch improves the error messages from invalid type signatures by trying to guess what the user did and suggesting an appropriate fix. Partially fixes: #17879 - - - - - cfb197e3 by Patrick at 2024-03-09T03:40:15-05:00 HieAst: add module name #24493 The main purpose of this is to tuck the module name `xxx` in `module xxx where` into the hieAst. It should fix #24493. The following have been done: 1. Renamed and update the `tcg_doc_hdr :: Maybe (LHsDoc GhcRn)` to `tcg_hdr_info :: (Maybe (LHsDoc GhcRn), Maybe (XRec GhcRn ModuleName))` To store the located module name information. 2. update the `RenamedSource` and `RenamedStuff` with extra `Maybe (XRec GhcRn ModuleName)` located module name information. 3. add test `testsuite/tests/hiefile/should_compile/T24493.hs` to ensure the module name is added and update several relevent tests. 4. accompanied submodule haddoc test update MR in https://gitlab.haskell.org/ghc/haddock/-/merge_requests/53 - - - - - 2341d81e by Vaibhav Sagar at 2024-03-09T03:40:54-05:00 GHC.Utils.Binary: fix a couple of typos - - - - - 5580e1bd by Ben Gamari at 2024-03-09T03:41:30-05:00 rts: Drop .wasm suffix from .prof file names This replicates the behavior on Windows, where `Hi.exe` will produce profiling output named `Hi.prof` instead of `Hi.exe.prof`. While in the area I also fixed the extension-stripping logic, which incorrectly rewrote `Hi.exefoo` to `Hi.foo`. Closes #24515. - - - - - 259495ee by Cheng Shao at 2024-03-09T03:41:30-05:00 testsuite: drop exe extension from .hp & .prof filenames See #24515 for details. - - - - - c477a8d2 by Ben Gamari at 2024-03-09T03:42:05-05:00 rts/linker: Enable GOT support on all platforms There is nothing platform-dependent about our GOT implementation and GOT support is needed by `T24171` on i386. - - - - - 2e592857 by Vladislav Zavialov at 2024-03-09T03:42:41-05:00 Drop outdated comment on TcRnIllformedTypePattern This should have been done in 0f0c53a501b but I missed it. - - - - - c554b4da by Ben Gamari at 2024-03-09T09:39:20-05:00 rts/CloneStack: Bounds check array write - - - - - 15c590a5 by Ben Gamari at 2024-03-09T09:39:20-05:00 rts/CloneStack: Don't expose helper functions in header - - - - - e831ce31 by Ben Gamari at 2024-03-09T09:39:20-05:00 base: Move internals of GHC.InfoProv into GHC.InfoProv.Types Such that we can add new helpers into GHC.InfoProv.Types without breakage. - - - - - 6948e24d by Ben Gamari at 2024-03-09T09:39:20-05:00 rts: Lazily decode IPE tables Previously we would eagerly allocate `InfoTableEnt`s for each info table registered in the info table provenance map. However, this costs considerable memory and initialization time. Instead we now lazily decode these tables. This allows us to use one-third the memory *and* opens the door to taking advantage of sharing opportunities within a module. This required considerable reworking since lookupIPE now must be passed its result buffer. - - - - - 9204a04e by Ben Gamari at 2024-03-09T09:39:20-05:00 rts/IPE: Don't expose helper in header - - - - - 308926ff by Ben Gamari at 2024-03-09T09:39:20-05:00 rts/IPE: Share module_name within a Node This allows us to shave a 64-bit word off of the packed IPE entry size. - - - - - bebdea05 by Ben Gamari at 2024-03-09T09:39:20-05:00 IPE: Expose unit ID in InfoTableProv Here we add the unit ID to the info table provenance structure. - - - - - 6519c9ad by Ben Gamari at 2024-03-09T09:39:35-05:00 rts: Refactor GHC.Stack.CloneStack.decode Don't allocate a Ptr constructor per frame. - - - - - ed0b69dc by Ben Gamari at 2024-03-09T09:39:35-05:00 base: Do not expose whereFrom# from GHC.Exts - - - - - 2b1faea9 by Vladislav Zavialov at 2024-03-09T17:38:21-05:00 docs: Update info on TypeAbstractions * Mention TypeAbstractions in 9.10.1-notes.rst * Set the status to "Experimental". * Add a "Since: GHC 9.x" comment to each section. - - - - - f8b88918 by Ben Gamari at 2024-03-09T21:21:46-05:00 ci-images: Bump Alpine image to bootstrap with 9.8.2 - - - - - 705e6927 by Ben Gamari at 2024-03-09T21:21:46-05:00 testsuite: Mark T24171 as fragile due to #24512 I will fix this but not in time for 9.10.1-alpha1 - - - - - c74196e1 by Ben Gamari at 2024-03-09T21:21:46-05:00 testsuite: Mark linker_unload_native as fragile In particular this fails on platforms without `dlinfo`. I plan to address this but not before 9.10.1-alpha1. - - - - - f4d87f7a by Ben Gamari at 2024-03-09T21:21:46-05:00 configure: Bump version to 9.10 - - - - - 88df9a5f by Ben Gamari at 2024-03-09T21:21:46-05:00 Bump transformers submodule to 0.6.1.1 - - - - - 8176d5e8 by Ben Gamari at 2024-03-09T21:21:46-05:00 testsuite: Increase ulimit for T18623 1 MByte was just too tight and failed intermittently on some platforms (e.g. CentOS 7). Bumping the limit to 8 MByte should provide sufficient headroom. Fixes #23139. - - - - - c74b38a3 by Ben Gamari at 2024-03-09T21:21:46-05:00 base: Bump version to 4.20.0.0 - - - - - b2937fc3 by Ben Gamari at 2024-03-09T21:21:46-05:00 ghc-internal: Set initial version at 9.1001.0 This provides PVP compliance while maintaining a clear correspondence between GHC releases and `ghc-internal` versions. - - - - - 4ae7d868 by Ben Gamari at 2024-03-09T21:21:46-05:00 ghc-prim: Bump version to 0.11.0 - - - - - 50798dc6 by Ben Gamari at 2024-03-09T21:21:46-05:00 template-haskell: Bump version to 2.22.0.0 - - - - - 8564f976 by Ben Gamari at 2024-03-09T21:21:46-05:00 base-exports: Accommodate spurious whitespace changes in 32-bit output It appears that this was - - - - - 9d4f0e98 by Ben Gamari at 2024-03-09T21:21:46-05:00 users-guide: Move exception backtrace relnotes to 9.10 This was previously mistakenly added to the GHC 9.8 release notes. - - - - - 145eae60 by Ben Gamari at 2024-03-09T21:21:46-05:00 gitlab/rel_eng: Fix name of Rocky8 artifact - - - - - 39c2a630 by Ben Gamari at 2024-03-09T21:21:46-05:00 gitlab/rel_eng: Fix path of generate_jobs_metadata - - - - - aed034de by Ben Gamari at 2024-03-09T21:21:46-05:00 gitlab/upload: Rework recompression The old `combine` approach was quite fragile due to use of filename globbing. Moreover, it didn't parallelize well. This refactoring makes the goal more obvious, parallelizes better, and is more robust. - - - - - 9bdf3586 by Ben Gamari at 2024-03-09T21:37:44-05:00 Merge branch 'ghc-9.10' into ghc-head - - - - - cec76981 by Ben Gamari at 2024-03-09T21:54:00-05:00 Bump GHC version to 9.11 - - - - - 4c59feb7 by Ben Gamari at 2024-03-09T22:15:01-05:00 Merge remote-tracking branch 'origin/ghc-head' into ghc-head - - - - - dc207d06 by Ben Gamari at 2024-03-10T08:56:08-04:00 configure: Bump GHC version to 9.11 Bumps haddock submodule. - - - - - 8b2513e8 by Ben Gamari at 2024-03-11T01:20:03-04:00 rts/linker: Don't unload code when profiling is enabled The heap census may contain references (e.g. `Counter.identity`) to static data which must be available when the census is reported at the end of execution. Fixes #24512. - - - - - 7810b4c3 by Ben Gamari at 2024-03-11T01:20:03-04:00 rts/linker: Don't unload native objects when dlinfo isn't available To do so is unsafe as we have no way of identifying references to symbols provided by the object. Fixes #24513. Fixes #23993. - - - - - 0590764c by Ben Gamari at 2024-03-11T01:20:39-04:00 rel_eng/upload: Purge both $rel_name/ and $ver/ This is necessary for prereleases, where GHCup accesses the release via `$ver/` - - - - - b85a4631 by Brandon Chinn at 2024-03-12T19:25:56-04:00 Remove duplicate code normalising slashes - - - - - c91946f9 by Brandon Chinn at 2024-03-12T19:25:56-04:00 Simplify regexes with raw strings - - - - - 1a5f53c6 by Brandon Chinn at 2024-03-12T19:25:57-04:00 Don't normalize backslashes in characters - - - - - 7ea971d3 by Andrei Borzenkov at 2024-03-12T19:26:32-04:00 Fix compiler crash caused by implicit RHS quantification in type synonyms (#24470) - - - - - 39f3ac3e by Cheng Shao at 2024-03-12T19:27:11-04:00 Revert "compiler: make genSym use C-based atomic increment on non-JS 32-bit platforms" This reverts commit 615eb855416ce536e02ed935ecc5a6f25519ae16. It was originally intended to fix #24449, but it was merely sweeping the bug under the rug. 3836a110577b5c9343915fd96c1b2c64217e0082 has properly fixed the fragile test, and we no longer need the C version of genSym. Furthermore, the C implementation causes trouble when compiling with clang that targets i386 due to alignment warning and libatomic linking issue, so it makes sense to revert it. - - - - - e6bfb85c by Cheng Shao at 2024-03-12T19:27:11-04:00 compiler: fix out-of-bound memory access of genSym on 32-bit This commit fixes an unnoticed out-of-bound memory access of genSym on 32-bit. ghc_unique_inc is 32-bit sized/aligned on 32-bit platforms, but we mistakenly treat it as a Word64 pointer in genSym, and therefore will accidentally load 2 garbage higher bytes, or with a small but non-zero chance, overwrite something else in the data section depends on how the linker places the data segments. This regression was introduced in !11802 and fixed here. - - - - - 77171cd1 by Ben Orchard at 2024-03-14T09:00:40-04:00 Note mutability of array and address access primops Without an understanding of immutable vs. mutable memory, the index primop family have a potentially non-intuitive type signature: indexOffAddr :: Addr# -> Int# -> a readOffAddr :: Addr# -> Int# -> State# d -> (# State# d, a #) indexOffAddr# might seem like a free generality improvement, which it certainly is not! This change adds a brief note on mutability expectations for most index/read/write access primops. - - - - - 7da7f8f6 by Alan Zimmerman at 2024-03-14T09:01:15-04:00 EPA: Fix regression discarding comments in contexts Closes #24533 - - - - - 73be65ab by Fendor at 2024-03-19T01:42:53-04:00 Fix sharing of 'IfaceTyConInfo' during core to iface type translation During heap analysis, we noticed that during generation of 'mi_extra_decls' we have lots of duplicates for the instances: * `IfaceTyConInfo NotPromoted IfaceNormalTyCon` * `IfaceTyConInfo IsPromoted IfaceNormalTyCon` which should be shared instead of duplicated. This duplication increased the number of live bytes by around 200MB while loading the agda codebase into GHCi. These instances are created during `CoreToIface` translation, in particular `toIfaceTyCon`. The generated core looks like: toIfaceTyCon = \ tc_sjJw -> case $wtoIfaceTyCon tc_sjJw of { (# ww_sjJz, ww1_sjNL, ww2_sjNM #) -> IfaceTyCon ww_sjJz (IfaceTyConInfo ww1_sjNL ww2_sjNM) } whichs removes causes the sharing to work propery. Adding explicit sharing, with NOINLINE annotations, changes the core to: toIfaceTyCon = \ tc_sjJq -> case $wtoIfaceTyCon tc_sjJq of { (# ww_sjNB, ww1_sjNC #) -> IfaceTyCon ww_sjNB ww1_sjNC } which looks much more like sharing is happening. We confirmed via ghc-debug that all duplications were eliminated and the number of live bytes are noticeably reduced. - - - - - bd8209eb by Alan Zimmerman at 2024-03-19T01:43:28-04:00 EPA: Address more 9.10.1-alpha1 regressions from recent changes Closes #24533 Hopefully for good this time - - - - - 31bf85ee by Fendor at 2024-03-19T14:48:08-04:00 Escape multiple arguments in the settings file Uses responseFile syntax. The issue arises when GHC is installed on windows into a location that has a space, for example the user name is 'Fake User'. The $topdir will also contain a space, consequentially. When we resolve the top dir in the string `-I$topdir/mingw/include`, then `words` will turn this single argument into `-I/C/Users/Fake` and `User/.../mingw/include` which trips up the flag argument parser of various tools such as gcc or clang. We avoid this by escaping the $topdir before replacing it in `initSettngs`. Additionally, we allow to escape spaces and quotation marks for arguments in `settings` file. Add regression test case to count the number of options after variable expansion and argument escaping took place. Additionally, we check that escaped spaces and double quotation marks are correctly parsed. - - - - - f45f700e by Matthew Pickering at 2024-03-19T14:48:44-04:00 Read global package database from settings file Before this patch, the global package database was always assumed to be in libdir </> package.conf.d. This causes issues in GHC's build system because there are sometimes situations where the package database you need to use is not located in the same place as the settings file. * The stage1 compiler needs to use stage1 libraries, so we should set "Global Package DB" for the stage1 compiler to the stage1 package database. * Stage 2 cross compilers need to use stage2 libraries, so likewise, we should set the package database path to `_build/stage2/lib/` * The normal situation is where the stage2 compiler uses stage1 libraries. Then everything lines up. * When installing we have rearranged everything so that the settings file and package database line up properly, so then everything should continue to work as before. In this case we set the relative package db path to `package.conf.d`, so it resolves the same as before. * ghc-pkg needs to be modified as well to look in the settings file fo the package database rather than assuming the global package database location relative to the lib folder. * Cabal/cabal-install will work correctly because they query the global package database using `--print-global-package-db`. A reasonable question is why not generate the "right" settings files in the right places in GHC's build system. In order to do this you would need to engineer wrappers for all executables to point to a specific libdir. There are also situations where the same package db is used by two different compilers with two different settings files (think stage2 cross compiler and stage3 compiler). In short, this 10 line patch allows for some reasonable simplifications in Hadrian at very little cost to anything else. Fixes #24502 - - - - - 4c8f1794 by Matthew Pickering at 2024-03-19T14:48:44-04:00 hadrian: Remove stage1 testsuite wrappers logic Now instead of producing wrappers which pass the global package database argument to ghc and ghc-pkg, we write the location of the correct package database into the settings file so you can just use the intree compiler directly. - - - - - da0d8ba5 by Matthew Craven at 2024-03-19T14:49:20-04:00 Remove unused ghc-internal module "GHC.Internal.Constants" - - - - - b56d2761 by Matthew Craven at 2024-03-19T14:49:20-04:00 CorePrep: Rework lowering of BigNat# literals Don't use bigNatFromWord#, because that's terrible: * We shouldn't have to traverse a linked list at run-time to build a BigNat# literal. That's just silly! * The static List object we have to create is much larger than the actual BigNat#'s contents, bloating code size. * We have to read the corresponding interface file, which causes un-tracked implicit dependencies. (#23942) Instead, encode them into the appropriate platform-dependent sequence of bytes, and generate code that copies these bytes at run-time from an Addr# literal into a new ByteArray#. A ByteArray# literal would be the correct thing to generate, but these are not yet supported; see also #17747. Somewhat surprisingly, this change results in a slight reduction in compiler allocations, averaging around 0.5% on ghc's compiler performance tests, including when compiling programs that contain no bignum literals to begin with. The specific cause of this has not been investigated. Since this lowering no longer reads the interface file for GHC.Num.BigNat, the reasoning in Note [Depend on GHC.Num.Integer] is obsoleted. But the story of un-tracked built-in dependencies remains complex, and Note [Tracking dependencies on primitives] now exists to explain this complexity. Additionally, many empty imports have been modified to refer to this new note and comply with its guidance. Several empty imports necessary for other reasons have also been given brief explanations. Metric Decrease: MultiLayerModulesTH_OneShot - - - - - 349ea330 by Fendor at 2024-03-19T14:50:00-04:00 Eliminate thunk in 'IfaceTyCon' Heap analysis showed that `IfaceTyCon` retains a thunk to `IfaceTyConInfo`, defeating the sharing of the most common instances of `IfaceTyConInfo`. We make sure the indirection is removed by adding bang patterns to `IfaceTyCon`. Experimental results on the agda code base, where the `mi_extra_decls` were read from disk: Before this change, we observe around 8654045 instances of: `IfaceTyCon[Name,THUNK_1_0]` But these thunks almost exclusively point to a shared value! Forcing the thunk a little bit more, leads to `ghc-debug` reporting: `IfaceTyCon[Name:Name,IfaceTyConInfo]` and a noticeable reduction of live bytes (on agda ~10%). - - - - - 594bee0b by Krzysztof Gogolewski at 2024-03-19T14:50:36-04:00 Minor misc cleanups - GHC.HsToCore.Foreign.JavaScript: remove dropRuntimeRepArgs; boxed tuples don't take RuntimeRep args - GHC.HsToCore.Foreign.Call: avoid partial pattern matching - GHC.Stg.Unarise: strengthen the assertion; we can assert that non-rubbish literals are unary rather than just non-void - GHC.Tc.Gen.HsType: make sure the fsLit "literal" rule fires - users_guide/using-warnings.rst: remove -Wforall-identifier, now deprecated and does nothing - users_guide/using.rst: fix formatting - andy_cherry/test.T: remove expect_broken_for(23272...), 23272 is fixed The rest are simple cleanups. - - - - - cf55a54b by Ben Gamari at 2024-03-19T14:51:12-04:00 mk/relpath: Fix quoting Previously there were two instances in this script which lacked proper quoting. This resulted in `relpath` invocations in the binary distribution Makefile producing incorrect results on Windows, leading to confusing failures from `sed` and the production of empty package registrations. Fixes #24538. - - - - - 5ff88389 by Bryan Richter at 2024-03-19T14:51:48-04:00 testsuite: Disable T21336a on wasm - - - - - 60023351 by Ben Gamari at 2024-03-19T22:33:10-04:00 hadrian/bindist: Eliminate extraneous `dirname` invocation Previously we would call `dirname` twice per installed library file. We now instead reuse this result. This helps appreciably on Windows, where processes are quite expensive. - - - - - 616ac300 by Ben Gamari at 2024-03-19T22:33:10-04:00 hadrian: Package mingw toolchain in expected location This fixes #24525, a regression due to 41cbaf44a6ab5eb9fa676d65d32df8377898dc89. Specifically, GHC expects to find the mingw32 toolchain in the binary distribution root. However, after this patch it was packaged in the `lib/` directory. - - - - - de9daade by Ben Gamari at 2024-03-19T22:33:11-04:00 gitlab/rel_eng: More upload.sh tweaks - - - - - 1dfe12db by Ben Gamari at 2024-03-19T22:33:11-04:00 rel_eng: Drop dead prepare_docs codepath - - - - - dd2d748b by Ben Gamari at 2024-03-19T22:33:11-04:00 rel_env/recompress_all: unxz before recompressing Previously we would rather compress the xz *again*, before in addition compressing it with the desired scheme. Fixes #24545. - - - - - 9d936c57 by Ben Gamari at 2024-03-19T22:33:11-04:00 mk-ghcup-metadata: Fix directory of testsuite tarball As reported in #24546, the `dlTest` artifact should be extracted into the `testsuite` directory. - - - - - 6d398066 by Ben Gamari at 2024-03-19T22:33:11-04:00 ghcup-metadata: Don't populate dlOutput unless necessary ghcup can apparently infer the output name of an artifact from its URL. Consequently, we should only include the `dlOutput` field when it would differ from the filename of `dlUri`. Fixes #24547. - - - - - 576f8b7e by Zubin Duggal at 2024-03-19T22:33:46-04:00 Revert "Apply shellcheck suggestion to SUBST_TOOLDIR" This reverts commit c82770f57977a2b5add6e1378f234f8dd6153392. The shellcheck suggestion is spurious and results in SUBST_TOOLDIR being a no-op. `set` sets positional arguments for bash, but we want to set the variable given as the first autoconf argument. Fixes #24542 Metric decreases because the paths in the settings file are now shorter, so we allocate less when we read the settings file. ------------------------- Metric Decrease: T12425 T13035 T9198 ------------------------- - - - - - cdfe6e01 by Fendor at 2024-03-19T22:34:22-04:00 Compact serialisation of IfaceAppArgs In #24563, we identified that IfaceAppArgs serialisation tags each cons cell element with a discriminator byte. These bytes add up quickly, blowing up interface files considerably when '-fwrite-if-simplified-core' is enabled. We compact the serialisation by writing out the length of 'IfaceAppArgs', followed by serialising the elements directly without any discriminator byte. This improvement can decrease the size of some interface files by up to 35%. - - - - - 97a2bb1c by Simon Peyton Jones at 2024-03-20T17:11:29+00:00 Expand untyped splices in tcPolyExprCheck Fixes #24559 - - - - - 5f275176 by Alan Zimmerman at 2024-03-20T22:44:12-04:00 EPA: Clean up Exactprint helper functions a bit - Introduce a helper lens to compose on `EpAnn a` vs `a` versions - Rename some prime versions of functions back to non-prime They were renamed during the rework - - - - - da2a10ce by Vladislav Zavialov at 2024-03-20T22:44:48-04:00 Type operators in promoteOccName (#24570) Type operators differ from term operators in that they are lexically classified as (type) constructors, not as (type) variables. Prior to this change, promoteOccName did not account for this difference, causing a scoping issue that affected RequiredTypeArguments. type (!@#) = Bool f = idee (!@#) -- Not in scope: ‘!@#’ (BUG) Now we have a special case in promoteOccName to account for this. - - - - - 247fc0fa by Preetham Gujjula at 2024-03-21T10:19:18-04:00 docs: Remove mention of non-existent Ord instance for Complex The documentation for Data.Complex says that the Ord instance for Complex Float is deficient, but there is no Ord instance for Complex a. The Eq instance for Complex Float is similarly deficient, so we use that as an example instead. - - - - - 6fafc51e by Andrei Borzenkov at 2024-03-21T10:19:54-04:00 Fix TH handling in `pat_to_type_pat` function (#24571) There was missing case for `SplicePat` in `pat_to_type_at` function, hence patterns with splicing that checked against `forall->` doesn't work properly because they fall into the "illegal pattern" case. Code example that is now accepted: g :: forall a -> () g $([p| a |]) = () - - - - - 52072f8e by Sylvain Henry at 2024-03-21T21:01:59-04:00 Type-check default declarations before deriving clauses (#24566) See added Note and #24566. Default declarations must be type-checked before deriving clauses. - - - - - 7dfdf3d9 by Sylvain Henry at 2024-03-21T21:02:40-04:00 Lexer: small perf changes - Use unsafeChr because we know our values to be valid - Remove some unnecessary use of `ord` (return Word8 values directly) - - - - - 864922ef by Sylvain Henry at 2024-03-21T21:02:40-04:00 JS: fix some comments - - - - - 3e0b2b1f by Sebastian Graf at 2024-03-21T21:03:16-04:00 Simplifier: Re-do dependency analysis in abstractFloats (#24551) In #24551, we abstracted a string literal binding over a type variable, triggering a CoreLint error when that binding floated to top-level. The solution implemented in this patch fixes this by re-doing dependency analysis on a simplified recursive let binding that is about to be type abstracted, in order to find the minimal set of type variables to abstract over. See wrinkle (AB5) of Note [Floating and type abstraction] for more details. Fixes #24551 - - - - - 8a8ac65a by Matthew Craven at 2024-03-23T00:20:52-04:00 Improve toInteger @Word32 on 64-bit platforms On 64-bit platforms, every Word32 fits in an Int, so we can convert to Int# without having to perform the overflow check integerFromWord# uses internally. - - - - - 0c48f2b9 by Apoorv Ingle at 2024-03-23T00:21:28-04:00 Fix for #24552 (see testcase T24552) Fixes for a bug in desugaring pattern synonyms matches, introduced while working on on expanding `do`-blocks in #18324 The `matchWrapper` unecessarily (and incorrectly) filtered out the default wild patterns in a match. Now the wild pattern alternative is simply ignored by the pm check as its origin is `Generated`. The current code now matches the expected semantics according to the language spec. - - - - - b72705e9 by Simon Peyton Jones at 2024-03-23T00:22:04-04:00 Print more info about kinds in error messages This fixes #24553, where GHC unhelpfully said error: [GHC-83865] • Expected kind ‘* -> * -> *’, but ‘Foo’ has kind ‘* -> * -> *’ See Note [Showing invisible bits of types in error messages] - - - - - 8f7cfc7e by Tristan Cacqueray at 2024-03-23T00:22:44-04:00 docs: remove the don't use float hint This hint is outdated, ``Complex Float`` are now specialised, and the heap space suggestion needs more nuance so it should be explained in the unboxed/storable array documentation. - - - - - 5bd8ed53 by Andreas Klebinger at 2024-03-23T16:18:33-04:00 NCG: Fix a bug in jump shortcutting. When checking if a jump has more than one destination account for the possibility of some jumps not being representable by a BlockId. We do so by having isJumpishInstr return a `Maybe BlockId` where Nothing represents non-BlockId jump destinations. Fixes #24507 - - - - - 8d67f247 by Ben Gamari at 2024-03-23T16:19:09-04:00 docs: Drop old release notes, add for 9.12.1 - - - - - 7db8c992 by Cheng Shao at 2024-03-25T13:45:46-04:00 rts: fix clang compilation on aarch64 This patch fixes function prototypes in ARMOutlineAtomicsSymbols.h which causes "error: address argument to atomic operation must be a pointer to _Atomic type" when compiling with clang on aarch64. - - - - - 237194ce by Sylvain Henry at 2024-03-25T13:46:27-04:00 Lexer: fix imports for Alex 3.5.1 (#24583) - - - - - 810660b7 by Cheng Shao at 2024-03-25T22:19:16-04:00 libffi-tarballs: bump libffi-tarballs submodule to libffi 3.4.6 This commit bumps the libffi-tarballs submodule to libffi 3.4.6, which includes numerous upstream libffi fixes, especially https://github.com/libffi/libffi/issues/760. - - - - - d2ba41e8 by Alan Zimmerman at 2024-03-25T22:19:51-04:00 EPA: do not duplicate comments in signature RHS - - - - - 32a8103f by Rodrigo Mesquita at 2024-03-26T21:16:12-04:00 configure: Use LDFLAGS when trying linkers A user may configure `LDFLAGS` but not `LD`. When choosing a linker, we will prefer `ldd`, then `ld.gold`, then `ld.bfd` -- however, we have to check for a working linker. If either of these fail, we try the next in line. However, we were not considering the `$LDFLAGS` when checking if these linkers worked. So we would pick a linker that does not support the current $LDFLAGS and fail further down the line when we used that linker with those flags. Fixes #24565, where `LDFLAGS=-Wl,-z,pack-relative-relocs` is not supported by `ld.gold` but that was being picked still. - - - - - bf65a7c3 by Rodrigo Mesquita at 2024-03-26T21:16:48-04:00 bindist: Clean xattrs of bin and lib at configure time For issue #21506, we started cleaning the extended attributes of binaries and libraries from the bindist *after* they were installed to workaround notarisation (#17418), as part of `make install`. However, the `ghc-toolchain` binary that is now shipped with the bindist must be run at `./configure` time. Since we only cleaned the xattributes of the binaries and libs after they were installed, in some situations users would be unable to run `ghc-toolchain` from the bindist, failing at configure time (#24554). In this commit we move the xattr cleaning logic to the configure script. Fixes #24554 - - - - - cfeb70d3 by Rodrigo Mesquita at 2024-03-26T21:17:24-04:00 Revert "NCG: Fix a bug in jump shortcutting." This reverts commit 5bd8ed53dcefe10b72acb5729789e19ceb22df66. Fixes #24586 - - - - - 13223f6d by Serge S. Gulin at 2024-03-27T07:28:51-04:00 JS: `h$rts_isProfiled` is removed from `profiling` and left its version at `rts/js/config.js` - - - - - 0acfe391 by Alan Zimmerman at 2024-03-27T07:29:27-04:00 EPA: Do not extend declaration range for trailine zero len semi The lexer inserts virtual semicolons having zero width. Do not use them to extend the list span of items in a list. - - - - - cd0fb82f by Alan Zimmerman at 2024-03-27T19:33:08+00:00 EPA: Fix FamDecl range The span was incorrect if opt_datafam_kind_sig was empty - - - - - f8f384a8 by Ben Gamari at 2024-03-29T01:23:03-04:00 Fix type of _get_osfhandle foreign import Fixes #24601. - - - - - 00d3ecf0 by Alan Zimmerman at 2024-03-29T12:19:10+00:00 EPA: Extend StringLiteral range to include trailing commas This goes slightly against the exact printing philosophy where trailing decorations should be in an annotation, but the practicalities of adding it to the WarningTxt environment, and the problems caused by deviating do not make a more principles approach worthwhile. - - - - - efab3649 by brandon s allbery kf8nh at 2024-03-31T20:04:01-04:00 clarify Note [Preproccesing invocations] - - - - - c8a4c050 by Ben Gamari at 2024-04-02T12:50:35-04:00 rts: Fix TSAN_ENABLED CPP guard This should be `#if defined(TSAN_ENABLED)`, not `#if TSAN_ENABLED`, lest we suffer warnings. - - - - - e91dad93 by Cheng Shao at 2024-04-02T12:50:35-04:00 rts: fix errors when compiling with TSAN This commit fixes rts compilation errors when compiling with TSAN: - xxx_FENCE macros are redefined and trigger CPP warnings. - Use SIZEOF_W. WORD_SIZE_IN_BITS is provided by MachDeps.h which Cmm.h doesn't include by default. - - - - - a9ab9455 by Cheng Shao at 2024-04-02T12:50:35-04:00 rts: fix clang-specific errors when compiling with TSAN This commit fixes clang-specific rts compilation errors when compiling with TSAN: - clang doesn't have -Wtsan flag - Fix prototype of ghc_tsan_* helper functions - __tsan_atomic_* functions aren't clang built-ins and sanitizer/tsan_interface_atomic.h needs to be included - On macOS, TSAN runtime library is libclang_rt.tsan_osx_dynamic.dylib, not libtsan. -fsanitize-thread as a link-time flag will take care of linking the TSAN runtime library anyway so remove tsan as an rts extra library - - - - - 865bd717 by Cheng Shao at 2024-04-02T12:50:35-04:00 compiler: fix github link to __tsan_memory_order in a comment - - - - - 07cb627c by Cheng Shao at 2024-04-02T12:50:35-04:00 ci: improve TSAN CI jobs - Run TSAN jobs with +thread_sanitizer_cmm which enables Cmm instrumentation as well. - Run TSAN jobs in deb12 which ships gcc-12, a reasonably recent gcc that @bgamari confirms he's using in #GHC:matrix.org. Ideally we should be using latest clang release for latest improvements in sanitizers, though that's left as future work. - Mark TSAN jobs as manual+allow_failure in validate pipelines. The purpose is to demonstrate that we have indeed at least fixed building of TSAN mode in CI without blocking the patch to land, and once merged other people can begin playing with TSAN using their own dev setups and feature branches. - - - - - a1c18c7b by Andrei Borzenkov at 2024-04-02T12:51:11-04:00 Merge tc_infer_hs_type and tc_hs_type into one function using ExpType philosophy (#24299, #23639) This patch implements refactoring which is a prerequisite to updating kind checking of type patterns. This is a huge simplification of the main worker that checks kind of HsType. It also fixes the issues caused by previous code duplication, e.g. that we didn't add module finalizers from splices in inference mode. - - - - - 817e8936 by Rodrigo Mesquita at 2024-04-02T20:13:05-04:00 th: Hide the Language.Haskell.TH.Lib.Internal module from haddock Fixes #24562 - - - - - b36ee57b by Sylvain Henry at 2024-04-02T20:13:46-04:00 JS: reenable h$appendToHsString optimization (#24495) The optimization introducing h$appendToHsString wasn't kicking in anymore (while it did in 9.8.1) because of the changes introduced in #23270 (7e0c8b3bab30). This patch reenables the optimization by matching on case-expression, as done in Cmm for unpackCString# standard thunks. The test is also T24495 added in the next commits (two commits for ease of backporting to 9.8). - - - - - 527616e9 by Sylvain Henry at 2024-04-02T20:13:46-04:00 JS: fix h$appendToHsString implementation (#24495) h$appendToHsString needs to wrap its argument in an updatable thunk to behave like unpackAppendCString#. Otherwise if a SingleEntry thunk is passed, it is stored as-is in a CONS cell, making the resulting list impossible to deepseq (forcing the thunk doesn't update the contents of the CONS cell)! The added test checks that the optimization kicks in and that h$appendToHsString works as intended. Fix #24495 - - - - - faa30b41 by Simon Peyton Jones at 2024-04-02T20:14:22-04:00 Deal with duplicate tyvars in type declarations GHC was outright crashing before this fix: #24604 - - - - - e0b0c717 by Simon Peyton Jones at 2024-04-02T20:14:58-04:00 Try using MCoercion in exprIsConApp_maybe This is just a simple refactor that makes exprIsConApp_maybe a little bit more direct, simple, and efficient. Metrics: compile_time/bytes allocated geo. mean -0.1% minimum -2.0% maximum -0.0% Not a big gain, but worthwhile given that the code is, if anything, easier to grok. - - - - - 15f4d867 by Duncan Coutts at 2024-04-03T01:27:17-04:00 Initial ./configure support for selecting I/O managers In this patch we just define new CPP vars, but don't yet use them or replace the existing approach. That will follow. The intention here is that every I/O manager can be enabled/disabled at GHC build time (subject to some constraints). More than one I/O manager can be enabled to be built. At least one I/O manager supporting the non-threaded RTS must be enabled as well as at least one supporting the non-threaded RTS. The I/O managers enabled here will become the choices available at runtime at RTS startup (in later patches). The choice can be made with RTS flags. There are separate sets of choices for the threaded and non-threaded RTS ways, because most I/O managers are specific to these ways. Furthermore we must establish a default I/O manager for the threaded and non-threaded RTS. Most I/O managers are platform-specific so there are checks to ensure each one can be enabled on the platform. Such checks are also where (in future) any system dependencies (e.g. libraries) can be checked. The output is a set of CPP flags (in the mk/config.h file), with one flag per named I/O manager: * IOMGR_BUILD_<name> : which ones should be built (some) * IOMGR_DEFAULT_NON_THREADED_<name> : which one is default (exactly one) * IOMGR_DEFAULT_THREADED_<name> : which one is default (exactly one) and a set of derived flags in IOManager.h * IOMGR_ENABLED_<name> : enabled for the current RTS way Note that IOMGR_BUILD_<name> just says that an I/O manager will be built for _some_ RTS way (i.e. threaded or non-threaded). The derived flags IOMGR_ENABLED_<name> in IOManager.h say if each I/O manager is enabled in the "current" RTS way. These are the ones that can be used for conditional compilation of the I/O manager code. Co-authored-by: Pi Delport <pi at well-typed.com> - - - - - 85b0f87a by Duncan Coutts at 2024-04-03T01:27:17-04:00 Change the handling of the RTS flag --io-manager= Now instead of it being just used on Windows to select between the WinIO vs the MIO or Win32-legacy I/O managers, it is now used on all platforms for selecting the I/O manager to use. Right now it remains the case that there is only an actual choice on Windows, but that will change later. Document the --io-manager flag in the user guide. This change is also reflected in the RTS flags types in the base library. Deprecate the export of IoSubSystem from GHC.RTS.Flags with a message to import it from GHC.IO.Subsystem. The way the 'IoSubSystem' is detected also changes. Instead of looking at the RTS flag, there is now a C bool global var in the RTS which gets set on startup when the I/O manager is selected. This bool var says whether the selected I/O manager classifies as "native" on Windows, which in practice means the WinIO I/O manager has been selected. Similarly, the is_io_mng_native_p RTS helper function is re-implemented in terms of the selected I/O manager, rather than based on the RTS flags. We do however remove the ./configure --native-io-manager flag because we're bringing the WinIO/MIO/Win32-legacy choice under the new general scheme for selecting I/O managers, and that new scheme involves no ./configure time user choices, just runtime RTS flag choices. - - - - - 1a8f020f by Duncan Coutts at 2024-04-03T01:27:17-04:00 Convert {init,stop,exit}IOManager to switch style Rather than ad-hoc cpp conitionals on THREADED_RTS and mingw32_HOST_OS, we use a style where we switch on the I/O manager impl, with cases for each I/O manager impl. - - - - - a5bad3d2 by Duncan Coutts at 2024-04-03T01:27:17-04:00 Split up the CapIOManager content by I/O manager Using the new IOMGR_ENABLED_<name> CPP defines. - - - - - 1d36e609 by Duncan Coutts at 2024-04-03T01:27:17-04:00 Convert initIOManagerAfterFork and wakeupIOManager to switch style - - - - - c2f26f36 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Move most of waitRead#/Write# from cmm to C Moves it into the IOManager.c where we can follow the new pattern of switching on the selected I/O manager. - - - - - 457705a8 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Move most of the delay# impl from cmm to C Moves it into the IOManager.c where we can follow the new pattern of switching on the selected I/O manager. Uses a new IOManager API: syncDelay, following the naming convention of sync* for thread-synchronous I/O & timer/delay operations. As part of porting from cmm to C, we maintain the rule that the why_blocked gets accessed using load acquire and store release atomic memory operations. There was one exception to this rule: in the delay# primop cmm code on posix (not win32), the why_blocked was being updated using a store relaxed, not a store release. I've no idea why. In this convesion I'm playing it safe here and using store release consistently. - - - - - e93058e0 by Duncan Coutts at 2024-04-03T01:27:18-04:00 insertIntoSleepingQueue is no longer public No longer defined in IOManager.h, just a private function in IOManager.c. Since it is no longer called from cmm code, just from syncDelay. It ought to get moved further into the select() I/O manager impl, rather than living in IOManager.c. On the other hand appendToIOBlockedQueue is still called from cmm code in the win32-legacy I/O manager primops async{Read,Write}#, and it is also used by the select() I/O manager. Update the CPP and comments to reflect this. - - - - - 60ce9910 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Move anyPendingTimeoutsOrIO impl from .h to .c The implementation is eventually going to need to use more private things, which will drag in unwanted includes into IOManager.h, so it's better to move the impl out of the header file and into the .c file, at the slight cost of it no longer being inline. At the same time, change to the "switch (iomgr_type)" style. - - - - - f70b8108 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Take a simpler approach to gcc warnings in IOManager.c We have lots of functions with conditional implementations for different I/O managers. Some functions, for some I/O managers, naturally have implementations that do nothing or barf. When only one such I/O manager is enabled then the whole function implementation will have an implementation that does nothing or barfs. This then results in warnings from gcc that parameters are unused, or that the function should be marked with attribute noreturn (since barf does not return). The USED_IF_THREADS trick for fine-grained warning supression is fine for just two cases, but an equivalent here would need USED_IF_THE_ONLY_ENABLED_IOMGR_IS_X_OR_Y which would have combinitorial blowup. So we take a coarse grained approach and simply disable these two warnings for the whole file. So we use a GCC pragma, with its handy push/pop support: #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wsuggest-attribute=noreturn" #pragma GCC diagnostic ignored "-Wunused-parameter" ... #pragma GCC diagnostic pop - - - - - b48805b9 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Add a new trace class for the iomanager It makes sense now for it to be separate from the scheduler class of tracers. Enabled with +RTS -Do. Document the -Do debug flag in the user guide. - - - - - f0c1f862 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Have the throwTo impl go via (new) IOManager APIs rather than directly operating on the IO manager's data structures. Specifically, when thowing an async exception to a thread that is blocked waiting for I/O or waiting for a timer, then we want to cancel that I/O waiting or cancel the timer. Currently this is done directly in removeFromQueues() in RaiseAsync.c. We want it to go via proper APIs both for modularity but also to let us support multiple I/O managers. So add sync{IO,Delay}Cancel, which is the cancellation for the corresponding sync{IO,Delay}. The implementations of these use the usual "switch (iomgr_type)" style. - - - - - 4f9e9c4e by Duncan Coutts at 2024-04-03T01:27:18-04:00 Move awaitEvent into a proper IOManager API and have the scheduler use it. Previously the scheduler calls awaitEvent directly, and awaitEvent is implemented directly in the RTS I/O managers (select, win32). This relies on the old scheme where there's a single active I/O manager for each platform and RTS way. We want to move that to go via an API in IOManager.{h,c} which can then call out to the active I/O manager. Also take the opportunity to split awaitEvent into two. The existing awaitEvent has a bool wait parameter, to say if the call should be blocking or non-blocking. We split this into two separate functions: pollCompletedTimeoutsOrIO and awaitCompletedTimeoutsOrIO. We split them for a few reasons: they have different post-conditions (specifically the await version is supposed to guarantee that there are threads runnable when it completes). Secondly, it is also anticipated that in future I/O managers the implementations of the two cases will be simpler if they are separated. - - - - - 5ad4b30f by Duncan Coutts at 2024-04-03T01:27:18-04:00 Rename awaitEvent in select and win32 I/O managers These are now just called from IOManager.c and are the per-I/O manager backend impls (whereas previously awaitEvent was the entry point). Follow the new naming convention in the IOManager.{h,c} of awaitCompletedTimeoutsOrIO, with the I/O manager's name as a suffix: so awaitCompletedTimeoutsOrIO{Select,Win32}. - - - - - d30c6bc6 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Tidy up a couple things in Select.{h,c} Use the standard #include {Begin,End}Private.h style rather than RTS_PRIVATE on individual decls. And conditionally build the code for the select I/O manager based on the new CPP IOMGR_ENABLED_SELECT rather than on THREADED_RTS. - - - - - 4161f516 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Add an IOManager API for scavenging TSO blocked_info When the GC scavenges a TSO it needs to scavenge the tso->blocked_info but the blocked_info is a big union and what lives there depends on the two->why_blocked, which for I/O-related reasons is something that in principle is the responsibility of the I/O manager and not the GC. So the right thing to do is for the GC to ask the I/O manager to sscavenge the blocked_info if it encounters any I/O-related why_blocked reasons. So we add scavengeTSOIOManager in IOManager.{h,c} with the usual style. Now as it happens, right now, there is no special scavenging to do, so the implementation of scavengeTSOIOManager is a fancy no-op. That's because the select I/O manager uses only the fd and target members, which are not GC pointers, and the win32-legacy I/O manager _ought_ to be using GC-managed heap objects for the StgAsyncIOResult but it is actually usingthe C heap, so again no GC pointers. If the win32-legacy were doing this more sensibly, then scavengeTSOIOManager would be the right place to do the GC magic. Future I/O managers will need GC heap objects in the tso->blocked_info and will make use of this functionality. - - - - - 94a87d21 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Add I/O manager API notifyIOManagerCapabilitiesChanged Used in setNumCapabilities. It only does anything for MIO on Posix. Previously it always invoked Haskell code, but that code only did anything on non-Windows (and non-JS), and only threaded. That currently effectively means the MIO I/O manager on Posix. So now it only invokes it for the MIO Posix case. - - - - - 3be6d591 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Select an I/O manager early in RTS startup We need to select the I/O manager to use during startup before the per-cap I/O manager initialisation. - - - - - aaa294d0 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Make struct CapIOManager be fully opaque Provide an opaque (forward) definition in Capability.h (since the cap contains a *CapIOManager) and then only provide a full definition in a new file IOManagerInternals.h. This new file is only supposed to be included by the IOManager implementation, not by its users. So that means IOManager.c and individual I/O manager implementations. The posix/Signals.c still needs direct access, but that should be eliminated. Anything that needs direct access either needs to be clearly part of an I/O manager (e.g. the sleect() one) or go via a proper API. - - - - - 877a2a80 by Duncan Coutts at 2024-04-03T01:27:18-04:00 The select() I/O manager does have some global initialisation It's just to make sure an exception CAF is a GC root. - - - - - 9c51473b by Duncan Coutts at 2024-04-03T01:27:18-04:00 Add tracing for the main I/O manager actions Using the new tracer class. Note: The unconditional definition of showIOManager should be compatible with the debugTrace change in 7c7d1f6. Co-authored-by: Pi Delport <pi at well-typed.com> - - - - - c7d3e3a3 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Include the default I/O manager in the +RTS --info output Document the extra +RTS --info output in the user guide - - - - - 8023bad4 by Duncan Coutts at 2024-04-03T01:27:18-04:00 waitRead# / waitWrite# do not work for win32-legacy I/O manager Previously it was unclear that they did not work because the code path was shared with other I/O managers (in particular select()). Following the code carefully shows that what actually happens is that the calling thread would block forever: the thread will be put into the blocked queue, but no other action is scheduled that will ever result in it getting unblocked. It's better to just fail loudly in case anyone accidentally calls it, also it's less confusing code. - - - - - 83a74d20 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Conditionally ignore some GCC warnings Some GCC versions don't know about some warnings, and they complain that we're ignoring unknown warnings. So we try to ignore the warning based on the GCC version. - - - - - 1adc6fa4 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Accept changes to base-exports All the changes are in fact not changes at all. Previously, the IoSubSystem data type was defined in GHC.RTS.Flags and exported from both GHC.RTS.Flags and GHC.IO.SubSystem. Now, the data type is defined in GHC.IO.SubSystem and still exported from both modules. Therefore, the same exports and same instances are still available from both modules. But the base-exports records only the defining module, and so it looks like a change when it is fully compatible. Related: we do add a deprecation to the export of the type via GHC.RTS.Flags, telling people to use the export from GHC.IO.SubSystem. Also the sort order for some unrelated Show instances changed. No idea why. The same changes apply in the other versions, with a few more changes due to sort order weirdness. - - - - - 8d950968 by Duncan Coutts at 2024-04-03T01:27:18-04:00 Accept metric decrease in T12227 I can't think of any good reason that anything in this MR should have changed the number of allocations, up or down. (Yes this is an empty commit.) Metric Decrease: T12227 - - - - - e869605e by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Several improvements to the handling of coercions * Make `mkSymCo` and `mkInstCo` smarter Fixes #23642 * Fix return role of `SelCo` in the coercion optimiser. Fixes #23617 * Make the coercion optimiser `opt_trans_rule` work better for newtypes Fixes #23619 - - - - - 1efd0714 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 FloatOut: improve floating for join point See the new Note [Floating join point bindings]. * Completely get rid of the complicated join_ceiling nonsense, which I have never understood. * Do not float join points at all, except perhaps to top level. * Some refactoring around wantToFloat, to treat Rec and NonRec more uniformly - - - - - 9c00154d by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Improve eta-expansion through call stacks See Note [Eta expanding through CallStacks] in GHC.Core.Opt.Arity This is a one-line change, that fixes an inconsistency - || isCallStackPredTy ty + || isCallStackPredTy ty || isCallStackTy ty - - - - - 95a9a172 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Spelling, layout, pretty-printing only - - - - - bdf1660f by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Improve exprIsConApp_maybe a little Eliminate a redundant case at birth. This sometimes reduces Simplifier iterations. See Note [Case elim in exprIsConApp_maybe]. - - - - - 609cd32c by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Inline GHC.HsToCore.Pmc.Solver.Types.trvVarInfo When exploring compile-time regressions after meddling with the Simplifier, I discovered that GHC.HsToCore.Pmc.Solver.Types.trvVarInfo was very delicately balanced. It's a small, heavily used, overloaded function and it's important that it inlines. By a fluke it was before, but at various times in my journey it stopped doing so. So I just added an INLINE pragma to it; no sense in depending on a delicately-balanced fluke. - - - - - ae24c9bc by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Slight improvement in WorkWrap Ensure that WorkWrap preserves lambda binders, in case of join points. Sadly I have forgotten why I made this change (it was while I was doing a lot of meddling in the Simplifier, but * it does no harm, * it is slightly more efficient, and * presumably it made something better! Anyway I have kept it in a separate commit. - - - - - e9297181 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Use named record fields for the CastIt { ... } data constructor This is a pure refactor - - - - - b4581e23 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Remove a long-commented-out line Pure refactoring - - - - - e026bdf2 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Simplifier improvements This MR started as: allow the simplifer to do more in one pass, arising from places I could see the simplifier taking two iterations where one would do. But it turned into a larger project, because these changes unexpectedly made inlining blow up, especially join points in deeply-nested cases. The main changes are below. There are also many new or rewritten Notes. Avoiding simplifying repeatedly ~~~~~~~~~~~~~~~ See Note [Avoiding simplifying repeatedly] * The SimplEnv now has a seInlineDepth field, which says how deep in unfoldings we are. See Note [Inline depth] in Simplify.Env. Currently used only for the next point: avoiding repeatedly simplifying coercions. * Avoid repeatedly simplifying coercions. see Note [Avoid re-simplifying coercions] in Simplify.Iteration As you'll see from the Note, this makes use of the seInlineDepth. * Allow Simplify.Iteration.simplAuxBind to inline used-once things. This is another part of Note [Post-inline for single-use things], and is really good for reducing simplifier iterations in situations like case K e of { K x -> blah } wher x is used once in blah. * Make GHC.Core.SimpleOpt.exprIsConApp_maybe do some simple case elimination. Note [Case elim in exprIsConApp_maybe] * Improve the case-merge transformation: - Move the main code to `GHC.Core.Utils.mergeCaseAlts`, to join `filterAlts` and friends. See Note [Merge Nested Cases] in GHC.Core.Utils. - Add a new case for `tagToEnum#`; see wrinkle (MC3). - Add a new case to look through join points: see wrinkle (MC4) postInlineUnconditionally ~~~~~~~~~~~~~~~~~~~~~~~~~ * Allow Simplify.Utils.postInlineUnconditionally to inline variables that are used exactly once. See Note [Post-inline for single-use things]. * Do not postInlineUnconditionally join point, ever. Doing so does not reduce allocation, which is the main point, and with join points that are used a lot it can bloat code. See point (1) of Note [Duplicating join points] in GHC.Core.Opt.Simplify.Iteration. * Do not postInlineUnconditionally a strict (demanded) binding. It will not allocate a thunk (it'll turn into a case instead) so again the main point of inlining it doesn't hold. Better to check per-call-site. * Improve occurrence analyis for bottoming function calls, to help postInlineUnconditionally. See Note [Bottoming function calls] in GHC.Core.Opt.OccurAnal Inlining generally ~~~~~~~~~~~~~~~~~~ * In GHC.Core.Opt.Simplify.Utils.interestingCallContext, use RhsCtxt NonRecursive (not BoringCtxt) for a plain-seq case. See Note [Seq is boring] Also, wrinkle (SB1), inline in that `seq` context only for INLINE functions (UnfWhen guidance). * In GHC.Core.Opt.Simplify.Utils.interestingArg, - return ValueArg for OtherCon [c1,c2, ...], but - return NonTrivArg for OtherCon [] This makes a function a little less likely to inline if all we know is that the argument is evaluated, but nothing else. * isConLikeUnfolding is no longer true for OtherCon {}. This propagates to exprIsConLike. Con-like-ness has /positive/ information. Join points ~~~~~~~~~~~ * Be very careful about inlining join points. See these two long Notes Note [Duplicating join points] in GHC.Core.Opt.Simplify.Iteration Note [Inlining join points] in GHC.Core.Opt.Simplify.Inline * When making join points, don't do so if the join point is so small it will immediately be inlined; check uncondInlineJoin. * In GHC.Core.Opt.Simplify.Inline.tryUnfolding, improve the inlining heuristics for join points. In general we /do not/ want to inline join points /even if they are small/. See Note [Duplicating join points] GHC.Core.Opt.Simplify.Iteration. But sometimes we do: see Note [Inlining join points] in GHC.Core.Opt.Simplify.Inline; and the new `isBetterUnfoldingThan` function. * Do not add an unfolding to a join point at birth. This is a tricky one and has a long Note [Do not add unfoldings to join points at birth] It shows up in two places - In `mkDupableAlt` do not add an inlining - (trickier) In `simplLetUnfolding` don't add an unfolding for a fresh join point I am not fully satisifed with this, but it works and is well documented. * In GHC.Core.Unfold.sizeExpr, make jumps small, so that we don't penalise having a non-inlined join point. Performance changes ~~~~~~~~~~~~~~~~~~~ * Binary sizes fall by around 2.6%, according to nofib. * Compile times improve slightly. Here are the figures over 1%. I investiate the biggest differnce in T18304. It's a very small module, just a few hundred nodes. The large percentage difffence is due to a single function that didn't quite inline before, and does now, making code size a bit bigger. I decided gains outweighed the losses. Metrics: compile_time/bytes allocated (changes over +/- 1%) ------------------------------------------------ CoOpt_Singletons(normal) -9.2% GOOD LargeRecord(normal) -23.5% GOOD MultiComponentModulesRecomp(normal) +1.2% MultiLayerModulesTH_OneShot(normal) +4.1% BAD PmSeriesS(normal) -3.8% PmSeriesV(normal) -1.5% T11195(normal) -1.3% T12227(normal) -20.4% GOOD T12545(normal) -3.2% T12707(normal) -2.1% GOOD T13253(normal) -1.2% T13253-spj(normal) +8.1% BAD T13386(normal) -3.1% GOOD T14766(normal) -2.6% GOOD T15164(normal) -1.4% T15304(normal) +1.2% T15630(normal) -8.2% T15630a(normal) NEW T15703(normal) -14.7% GOOD T16577(normal) -2.3% GOOD T17516(normal) -39.7% GOOD T18140(normal) +1.2% T18223(normal) -17.1% GOOD T18282(normal) -5.0% GOOD T18304(normal) +10.8% BAD T18923(normal) -2.9% GOOD T1969(normal) +1.0% T19695(normal) -1.5% T20049(normal) -12.7% GOOD T21839c(normal) -4.1% GOOD T3064(normal) -1.5% T3294(normal) +1.2% BAD T4801(normal) +1.2% T5030(normal) -15.2% GOOD T5321Fun(normal) -2.2% GOOD T6048(optasm) -16.8% GOOD T783(normal) -1.2% T8095(normal) -6.0% GOOD T9630(normal) -4.7% GOOD T9961(normal) +1.9% BAD WWRec(normal) -1.4% info_table_map_perf(normal) -1.3% parsing001(normal) +1.5% geo. mean -2.0% minimum -39.7% maximum +10.8% * Runtimes generally improve. In the testsuite perf/should_run gives: Metrics: runtime/bytes allocated ------------------------------------------ Conversions(normal) -0.3% T13536a(optasm) -41.7% GOOD T4830(normal) -0.1% haddock.Cabal(normal) -0.1% haddock.base(normal) -0.1% haddock.compiler(normal) -0.1% geo. mean -0.8% minimum -41.7% maximum +0.0% * For runtime, nofib is a better test. The news is mostly good. Here are the number more than +/- 0.1%: # bytes allocated ==========================++========== imaginary/digits-of-e1 || -14.40% imaginary/digits-of-e2 || -4.41% imaginary/paraffins || -0.17% imaginary/rfib || -0.15% imaginary/wheel-sieve2 || -0.10% real/compress || -0.47% real/fluid || -0.10% real/fulsom || +0.14% real/gamteb || -1.47% real/gg || -0.20% real/infer || +0.24% real/pic || -0.23% real/prolog || -0.36% real/scs || -0.46% real/smallpt || +4.03% shootout/k-nucleotide || -20.23% shootout/n-body || -0.42% shootout/spectral-norm || -0.13% spectral/boyer2 || -3.80% spectral/constraints || -0.27% spectral/hartel/ida || -0.82% spectral/mate || -20.34% spectral/para || +0.46% spectral/rewrite || +1.30% spectral/sphere || -0.14% ==========================++========== geom mean || -0.59% real/smallpt has a huge nest of local definitions, and I could not pin down a reason for a regression. But there are three big wins! Metric Decrease: CoOpt_Singletons LargeRecord T12227 T12707 T13386 T13536a T14766 T15703 T16577 T17516 T18223 T18282 T18923 T21839c T20049 T5321Fun T5030 T6048 T8095 T9630 T783 Metric Increase: MultiLayerModulesTH_OneShot T13253-spj T18304 T18698a T9961 T3294 - - - - - 27db3c5e by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Testsuite message changes from simplifier improvements - - - - - 271a7812 by Simon Peyton Jones at 2024-04-03T01:27:55-04:00 Account for bottoming functions in OccurAnal This fixes #24582, a small but long-standing bug - - - - - 0fde229f by Ben Gamari at 2024-04-04T07:04:58-04:00 testsuite: Introduce template-haskell-exports test - - - - - 0c4a9686 by Luite Stegeman at 2024-04-04T07:05:39-04:00 Update correct counter in bumpTickyAllocd - - - - - 5f085d3a by Fendor at 2024-04-04T14:47:33-04:00 Replace `SizedSeq` with `FlatBag` for flattened structure LinkedLists are notoriously memory ineffiecient when all we do is traversing a structure. As 'UnlinkedBCO' has been identified as a data structure that impacts the overall memory usage of GHCi sessions, we avoid linked lists and prefer flattened structure for storing. We introduce a new memory efficient representation of sequential elements that has special support for the cases: * Empty * Singleton * Tuple Elements This improves sharing in the 'Empty' case and avoids the overhead of 'Array' until its constant overhead is justified. - - - - - 82cfe10c by Fendor at 2024-04-04T14:47:33-04:00 Compact FlatBag array representation `Array` contains three additional `Word`'s we do not need in `FlatBag`. Move `FlatBag` to `SmallArray`. Expand the API of SmallArray by `sizeofSmallArray` and add common traversal functions, such as `mapSmallArray` and `foldMapSmallArray`. Additionally, allow users to force the elements of a `SmallArray` via `rnfSmallArray`. - - - - - 36a75b80 by Andrei Borzenkov at 2024-04-04T14:48:10-04:00 Change how invisible patterns represented in haskell syntax and TH AST (#24557) Before this patch: data ArgPat p = InvisPat (LHsType p) | VisPat (LPat p) With this patch: data Pat p = ... | InvisPat (LHsType p) ... And the same transformation in the TH land. The rest of the changes is just updating code to handle new AST and writing tests to check if it is possible to create invalid states using TH. Metric Increase: MultiLayerModulesTH_OneShot - - - - - 28009fbc by Matthew Pickering at 2024-04-04T14:48:46-04:00 Fix off by one error in seekBinNoExpand and seekBin - - - - - 9b9e031b by Ben Gamari at 2024-04-04T21:30:08-04:00 compiler: Allow more types in GHCForeignImportPrim For many, many years `GHCForeignImportPrim` has suffered from the rather restrictive limitation of not allowing any non-trivial types in arguments or results. This limitation was justified by the code generator allegely barfing in the presence of such types. However, this restriction appears to originate well before the NCG rewrite and the new NCG does not appear to have any trouble with such types (see the added `T24598` test). Lift this restriction. Fixes #24598. - - - - - 1324b862 by Alan Zimmerman at 2024-04-04T21:30:44-04:00 EPA: Use EpaLocation not SrcSpan in ForeignDecls This allows us to update them for makeDeltaAst in ghc-exactprint - - - - - 19883a23 by Alan Zimmerman at 2024-04-05T16:58:17-04:00 EPA: Use EpaLocation for RecFieldsDotDot So we can update it to a delta position in makeDeltaAst if needed. - - - - - e8724327 by Matthew Pickering at 2024-04-05T16:58:53-04:00 Remove accidentally committed test.hs - - - - - 88cb3e10 by Fendor at 2024-04-08T09:03:34-04:00 Avoid UArray when indexing is not required `UnlinkedBCO`'s can occur many times in the heap. Each `UnlinkedBCO` references two `UArray`'s but never indexes them. They are only needed to encode the elements into a `ByteArray#`. The three words for the lower bound, upper bound and number of elements are essentially unused, thus we replace `UArray` with a wrapper around `ByteArray#`. This saves us up to three words for each `UnlinkedBCO`. Further, to avoid re-allocating these words for `ResolvedBCO`, we repeat the procedure for `ResolvedBCO` and add custom `Binary` and `Show` instances. For example, agda's repl session has around 360_000 UnlinkedBCO's, so avoiding these three words is already saving us around 8MB residency. - - - - - f2cc1107 by Fendor at 2024-04-08T09:04:11-04:00 Never UNPACK `FastMutInt` for counting z-encoded `FastString`s In `FastStringTable`, we count the number of z-encoded FastStrings that exist in a GHC session. We used to UNPACK the counters to not waste memory, but live retainer analysis showed that we allocate a lot of `FastMutInt`s, retained by `mkFastZString`. We lazily compute the `FastZString`, only incrementing the counter when the `FastZString` is forced. The function `mkFastStringWith` calls `mkZFastString` and boxes the `FastMutInt`, leading to the following core: mkFastStringWith = \ mk_fs _ -> = case stringTable of { FastStringTable _ n_zencs segments# _ -> ... case ((mk_fs (I# ...) (FastMutInt n_zencs)) `cast` <Co:2> :: ...) ... Marking this field as `NOUNPACK` avoids this reboxing, eliminating the allocation of a fresh `FastMutInt` on every `FastString` allocation. - - - - - c6def949 by Matthew Pickering at 2024-04-08T16:06:51-04:00 Force in_multi to avoid retaining entire hsc_env - - - - - fbb91a63 by Fendor at 2024-04-08T16:06:51-04:00 Eliminate name thunk in declaration fingerprinting Thunk analysis showed that we have about 100_000 thunks (in agda and `-fwrite-simplified-core`) pointing to the name of the name decl. Forcing this thunk fixes this issue. The thunk created here is retained by the thunk created by forkM, it is better to eagerly force this because the result (a `Name`) is already retained indirectly via the `IfaceDecl`. - - - - - 3b7b0c1c by Alan Zimmerman at 2024-04-08T16:07:27-04:00 EPA: Use EpaLocation in WarningTxt This allows us to use an EpDelta if needed when using makeDeltaAst. - - - - - 12b997df by Alan Zimmerman at 2024-04-08T16:07:27-04:00 EPA: Move DeltaPos and EpaLocation' into GHC.Types.SrcLoc This allows us to use a NoCommentsLocation for the possibly trailing comma location in a StringLiteral. This in turn allows us to correctly roundtrip via makeDeltaAst. - - - - - 868c8a78 by Fendor at 2024-04-09T08:51:50-04:00 Prefer packed representation for CompiledByteCode As there are many 'CompiledByteCode' objects alive during a GHCi session, representing its element in a more packed manner improves space behaviour at a minimal cost. When running GHCi on the agda codebase, we find around 380 live 'CompiledByteCode' objects. Packing their respective 'UnlinkedByteCode' can save quite some pointers. - - - - - be3bddde by Alan Zimmerman at 2024-04-09T08:52:26-04:00 EPA: Capture all comments in a ClassDecl Hopefully the final fix needed for #24533 - - - - - 3d0806fc by Jade at 2024-04-10T05:39:53-04:00 Validate -main-is flag using parseIdentifier Fixes #24368 - - - - - dd530bb7 by Rodrigo Mesquita at 2024-04-10T05:40:29-04:00 rts: free error message before returning Fixes a memory leak in rts/linker/PEi386.c - - - - - e008a19a by Alexis King at 2024-04-10T05:40:29-04:00 linker: Avoid linear search when looking up Haskell symbols via dlsym See the primary Note [Looking up symbols in the relevant objects] for a more in-depth explanation. When dynamically loading a Haskell symbol (typical when running a splice or GHCi expression), before this commit we would search for the symbol in all dynamic libraries that were loaded. However, this could be very inefficient when too many packages are loaded (which can happen if there are many package dependencies) because the time to lookup the would be linear in the number of packages loaded. This commit drastically improves symbol loading performance by introducing a mapping from units to the handles of corresponding loaded dlls. These handles are returned by dlopen when we load a dll, and can then be used to look up in a specific dynamic library. Looking up a given Name is now much more precise because we can get lookup its unit in the mapping and lookup the symbol solely in the handles of the dynamic libraries loaded for that unit. In one measurement, the wait time before the expression was executed went from +-38 seconds down to +-2s. This commit also includes Note [Symbols may not be found in pkgs_loaded], explaining the fallback to the old behaviour in case no dll can be found in the unit mapping for a given Name. Fixes #23415 Co-authored-by: Rodrigo Mesquita (@alt-romes) - - - - - dcfaa190 by Rodrigo Mesquita at 2024-04-10T05:40:29-04:00 rts: Make addDLL a wrapper around loadNativeObj Rewrite the implementation of `addDLL` as a wrapper around the more principled `loadNativeObj` rts linker function. The latter should be preferred while the former is preserved for backwards compatibility. `loadNativeObj` was previously only available on ELF platforms, so this commit further refactors the rts linker to transform loadNativeObj_ELF into loadNativeObj_POSIX, which is available in ELF and MachO platforms. The refactor made it possible to remove the `dl_mutex` mutex in favour of always using `linker_mutex` (rather than a combination of both). Lastly, we implement `loadNativeObj` for Windows too. - - - - - 12931698 by Rodrigo Mesquita at 2024-04-10T05:40:29-04:00 Use symbol cache in internal interpreter too This commit makes the symbol cache that was used by the external interpreter available for the internal interpreter too. This follows from the analysis in #23415 that suggests the internal interpreter could benefit from this cache too, and that there is no good reason not to have the cache for it too. It also makes it a bit more uniform to have the symbol cache range over both the internal and external interpreter. This commit also refactors the cache into a function which is used by both `lookupSymbol` and also by `lookupSymbolInDLL`, extending the caching logic to `lookupSymbolInDLL` too. - - - - - dccd3ea1 by Ben Gamari at 2024-04-10T05:40:29-04:00 testsuite: Add test for lookupSymbolInNativeObj - - - - - 1b1a92bd by Alan Zimmerman at 2024-04-10T05:41:05-04:00 EPA: Remove unnecessary XRec in CompleteMatchSig The XRec for [LIdP pass] is not needed for exact printing, remove it. - - - - - 6e18ce2b by Ben Gamari at 2024-04-12T08:16:09-04:00 users-guide: Clarify language extension documentation Over the years the users guide's language extension documentation has gone through quite a few refactorings. In the process some of the descriptions have been rendered non-sensical. For instance, the description of `NoImplicitPrelude` actually describes the semantics of `ImplicitPrelude`. To fix this we: * ensure that all extensions are named in their "positive" sense (e.g. `ImplicitPrelude` rather than `NoImplicitPrelude`). * rework the documentation to avoid flag-oriented wording like "enable" and "disable" * ensure that the polarity of the documentation is consistent with reality. Fixes #23895. - - - - - a933aff3 by Zubin Duggal at 2024-04-12T08:16:45-04:00 driver: Make `checkHomeUnitsClosed` faster The implementation of `checkHomeUnitsClosed` was traversing every single path in the unit dependency graph - this grows exponentially and quickly grows to be infeasible on larger unit dependency graphs. Instead we replace this with a faster implementation which follows from the specificiation of the closure property - there is a closure error if there are units which are both are both (transitively) depended upon by home units and (transitively) depend on home units, but are not themselves home units. To compute the set of units required for closure, we first compute the closure of the unit dependency graph, then the transpose of this closure, and find all units that are reachable from the home units in the transpose of the closure. - - - - - 23c3e624 by Andreas Klebinger at 2024-04-12T08:17:21-04:00 RTS: Emit warning when -M < -H Fixes #24487 - - - - - d23afb8c by Ben Gamari at 2024-04-12T08:17:56-04:00 testsuite: Add broken test for CApiFFI with -fprefer-bytecode See #24634. - - - - - a4bb3a51 by Ben Gamari at 2024-04-12T08:18:32-04:00 base: Deprecate GHC.Pack As proposed in #21461. Closes #21540. - - - - - 55eb8c98 by Ben Gamari at 2024-04-12T08:19:08-04:00 ghc-internal: Fix mentions of ghc-internal in deprecation warnings Closes #24609. - - - - - b0fbd181 by Ben Gamari at 2024-04-12T08:19:44-04:00 rts: Implement set_initial_registers for AArch64 Fixes #23680. - - - - - 14c9ec62 by Ben Gamari at 2024-04-12T08:20:20-04:00 ghcup-metadata: Use Debian 9 binaries on Ubuntu 16, 17 Closes #24646. - - - - - 35a1621e by Ben Gamari at 2024-04-12T08:20:55-04:00 Bump unix submodule to 2.8.5.1 Closes #24640. - - - - - a1c24df0 by Finley McIlwaine at 2024-04-12T08:21:31-04:00 Correct default -funfolding-use-threshold in docs - - - - - 0255d03c by Oleg Grenrus at 2024-04-12T08:22:07-04:00 FastString is a __Modified__ UTF-8 - - - - - c3489547 by Matthew Pickering at 2024-04-12T13:13:44-04:00 rts: Improve tracing message when nursery is resized It is sometimes more useful to know how much bigger or smaller the nursery got when it is resized. In particular I am trying to investigate situations where we end up with fragmentation due to the nursery (#24577) - - - - - 5e4f4ba8 by Simon Peyton Jones at 2024-04-12T13:14:20-04:00 Don't generate wrappers for `type data` constructors with StrictData Previously, the logic for checking if a data constructor needs a wrapper or not would take into account whether the constructor's fields have explicit strictness (e.g., `data T = MkT !Int`), but the logic would _not_ take into account whether `StrictData` was enabled. This meant that something like `type data T = MkT Int` would incorrectly generate a wrapper for `MkT` if `StrictData` was enabled, leading to the horrible errors seen in #24620. To fix this, we disable generating wrappers for `type data` constructors altogether. Fixes #24620. Co-authored-by: Ryan Scott <ryan.gl.scott at gmail.com> - - - - - dbdf1995 by Alex Mason at 2024-04-15T15:28:26+10:00 Implements MO_S_Mul2 and MO_U_Mul2 using the UMULH, UMULL and SMULH instructions for AArch64 Also adds a test for MO_S_Mul2 - - - - - 42bd0407 by Teo Camarasu at 2024-04-16T20:06:39-04:00 Make template-haskell a stage1 package Promoting template-haskell from a stage0 to a stage1 package means that we can much more easily refactor template-haskell. We implement this by duplicating the in-tree `template-haskell`. A new `template-haskell-next` library is autogenerated to mirror `template-haskell` `stage1:ghc` to depend on the new interface of the library including the `Binary` instances without adding an explicit dependency on `template-haskell`. This is controlled by the `bootstrap-th` cabal flag When building `template-haskell` modules as part of this vendoring we do not have access to quote syntax, so we cannot use variable quote notation (`'Just`). So we either replace these with hand-written `Name`s or hide the code behind CPP. We can remove the `th_hack` from hadrian, which was required when building stage0 packages using the in-tree `template-haskell` library. For more details see Note [Bootstrapping Template Haskell]. Resolves #23536 Co-Authored-By: Sebastian Graf <sgraf1337 at gmail.com> Co-Authored-By: Matthew Craven <5086-clyring at users.noreply.gitlab.haskell.org> - - - - - 3d973e47 by Ben Gamari at 2024-04-16T20:07:15-04:00 Bump parsec submodule to 3.1.17.0 - - - - - 9d38bfa0 by Simon Peyton Jones at 2024-04-16T20:07:51-04:00 Clone CoVars in CorePrep This MR addresses #24463. It's all explained in the new Note [Cloning CoVars and TyVars] - - - - - 0fe2b410 by Andreas Klebinger at 2024-04-16T20:08:27-04:00 NCG: Fix a bug where we errounously removed a required jump instruction. Add a new method to the Instruction class to check if we can eliminate a jump in favour of fallthrough control flow. Fixes #24507 - - - - - 9f99126a by Teo Camarasu at 2024-04-16T20:09:04-04:00 Fix documentation preview from doc-tarball job - Include all the .html files and assets in the job artefacts - Include all the .pdf files in the job artefacts - Mark the artefact as an "exposed" artefact meaning it turns up in the UI. Resolves #24651 - - - - - 3a0642ea by Ben Gamari at 2024-04-16T20:09:39-04:00 rts: Ignore EINTR while polling in timerfd itimer implementation While the RTS does attempt to mask signals, it may be that a foreign library unmasks them. This previously caused benign warnings which we now ignore. See #24610. - - - - - 9a53cd3f by Alan Zimmerman at 2024-04-16T20:10:15-04:00 EPA: Add additional comments field to AnnsModule This is used in exact printing to store comments coming after the `where` keyword but before any comments allocated to imports or decls. It is used in ghc-exactprint, see https://github.com/alanz/ghc-exactprint/commit/44bbed311fd8f0d053053fef195bf47c17d34fa7 - - - - - e5c43259 by Bryan Richter at 2024-04-16T20:10:51-04:00 Remove unrunnable FreeBSD CI jobs FreeBSD runner supply is inelastic. Currently there is only one, and it's unavailable because of a hardware issue. - - - - - 914eb49a by Ben Gamari at 2024-04-16T20:11:27-04:00 rel-eng: Fix mktemp usage in recompress-all We need a temporary directory, not a file. - - - - - f30e4984 by Teo Camarasu at 2024-04-16T20:12:03-04:00 Fix ghc API link in docs/index.html This was missing part of the unit ID meaning it would 404. Resolves #24674 - - - - - d7a3d6b5 by Ben Gamari at 2024-04-16T20:12:39-04:00 template-haskell: Declare TH.Lib.Internal as not-home Rather than `hide`. Closes #24659. - - - - - 5eaa46e7 by Matthew Pickering at 2024-04-19T02:14:55-04:00 testsuite: Rename isCross() predicate to needsTargetWrapper() isCross() was a misnamed because it assumed that all cross targets would provide a target wrapper, but the two most common cross targets (javascript, wasm) don't need a target wrapper. Therefore we rename this predicate to `needsTargetWrapper()` so situations in the testsuite where we can check whether running executables requires a target wrapper or not. - - - - - 55a9d699 by Simon Peyton Jones at 2024-04-19T02:15:32-04:00 Do not float HNFs out of lambdas This MR adjusts SetLevels so that it is less eager to float a HNF (lambda or constructor application) out of a lambda, unless it gets to top level. Data suggests that this change is a small net win: * nofib bytes-allocated falls by -0.09% (but a couple go up) * perf/should_compile bytes-allocated falls by -0.5% * perf/should_run bytes-allocated falls by -0.1% See !12410 for more detail. When fiddling elsewhere, I also found that this patch had a huge positive effect on the (very delicate) test perf/should_run/T21839r But that improvement doesn't show up in this MR by itself. Metric Decrease: MultiLayerModulesRecomp T15703 parsing001 - - - - - f0701585 by Alan Zimmerman at 2024-04-19T02:16:08-04:00 EPA: Fix comments in mkListSyntaxTy0 Also extend the test to confirm. Addresses #24669, 1 of 4 - - - - - b01c01d4 by Serge S. Gulin at 2024-04-19T02:16:51-04:00 JS: set image `x86_64-linux-deb11-emsdk-closure` for build - - - - - c90c6039 by Alan Zimmerman at 2024-04-19T02:17:27-04:00 EPA: Provide correct span for PatBind And remove unused parameter in checkPatBind Contributes to #24669 - - - - - bee54c24 by Krzysztof Gogolewski at 2024-04-19T11:13:00+02:00 Update quantification order following GHC haskell/haddock#23764 - - - - - 2814eb89 by Ben Gamari at 2024-04-19T18:57:05+02:00 hypsrc-test: Fix output of PositionPragmas.html - - - - - 26036f96 by Alan Zimmerman at 2024-04-19T13:11:08-04:00 EPA: Fix span for PatBuilderAppType Include the location of the prefix @ in the span for InVisPat. Also removes unnecessary annotations from HsTP. Contributes to #24669 - - - - - dba03aab by Matthew Craven at 2024-04-19T13:11:44-04:00 testsuite: Give the pre_cmd for mhu-perf more time - - - - - d31fbf6c by Krzysztof Gogolewski at 2024-04-19T21:04:09-04:00 Fix quantification order for a `op` b and a %m -> b Fixes #23764 Implements https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0640-tyop-quantification-order.rst Updates haddock submodule. - - - - - 385cd1c4 by Sebastian Graf at 2024-04-19T21:04:45-04:00 Make `seq#` a magic Id and inline it in CorePrep (#24124) We can save much code and explanation in Tag Inference and StgToCmm by making `seq#` a known-key Magic Id in `GHC.Internal.IO` and inline this definition in CorePrep. See the updated `Note [seq# magic]`. I also implemented a new `Note [Flatten case-bind]` to get better code for otherwise nested case scrutinees. I renamed the contructors of `ArgInfo` to use an `AI` prefix in order to resolve the clash between `type CpeApp = CoreExpr` and the data constructor of `ArgInfo`, as well as fixed typos in `Note [CorePrep invariants]`. Fixes #24252 and #24124. - - - - - 275e41a9 by Jade at 2024-04-20T11:10:40-04:00 Put the newline after errors instead of before them This mainly has consequences for GHCi but also slightly alters how the output of GHC on the commandline looks. Fixes: #22499 - - - - - dd339c7a by Teo Camarasu at 2024-04-20T11:11:16-04:00 Remove unecessary stage0 packages Historically quite a few packages had to be stage0 as they depended on `template-haskell` and that was stage0. In #23536 we made it so that was no longer the case. This allows us to remove a bunch of packages from this list. A few still remain. A new version of `Win32` is required by `semaphore-compat`. Including `Win32` in the stage0 set requires also including `filepath` because otherwise Hadrian's dependency logic gets confused. Once our boot compiler has a newer version of `Win32` all of these will be able to be dropped. Resolves #24652 - - - - - 2f8e3a25 by Alan Zimmerman at 2024-04-20T11:11:52-04:00 EPA: Avoid duplicated comments in splice decls Contributes to #24669 - - - - - c70b9ddb by Serge S. Gulin at 2024-04-21T16:33:43+03:00 JS: fix typos and namings (fixes #24602) You may noted that I've also changed term of ``` , global "h$vt_double" ||= toJExpr IntV ``` See "IntV" and ``` WaitReadOp -> \[] [fd] -> pure $ PRPrimCall $ returnS (app "h$waidRead" [fd]) ``` See "h$waidRead" - - - - - 3db54f9b by Serge S. Gulin at 2024-04-21T16:33:43+03:00 JS: trivial checks for variable presence (fixes #24602) - - - - - 777f108f by Serge S. Gulin at 2024-04-21T16:33:43+03:00 JS: fs module imported twice (by emscripten and by ghc-internal). ghc-internal import wrapped in a closure to prevent conflict with emscripten (fixes #24602) Better solution is to use some JavaScript module system like AMD, CommonJS or even UMD. It will be investigated at other issues. At first glance we should try UMD (See https://github.com/umdjs/umd) - - - - - a45a5712 by Serge S. Gulin at 2024-04-21T16:33:43+03:00 JS: thread.js requires h$fds and h$fdReady to be declared for static code analysis, minimal code copied from GHCJS (fixes #24602) I've just copied some old pieces of GHCJS from publicly available sources (See https://github.com/Taneb/shims/blob/a6dd0202dcdb86ad63201495b8b5d9763483eb35/src/io.js#L607). Also I didn't put details to h$fds. I took minimal and left only its object initialization: `var h$fds = {};` - - - - - ad90bf12 by Serge S. Gulin at 2024-04-21T16:33:43+03:00 JS: heap and stack overflows reporting defined as js hard failure (fixes #24602) These errors were treated as a hard failure for browser application. The fix is trivial: just throw error. - - - - - 5962fa52 by Serge S. Gulin at 2024-04-21T16:33:44+03:00 JS: Stubs for code without actual implementation detected by Google Closure Compiler (fixes #24602) These errors were fixed just by introducing stubbed functions with throw for further implementation. - - - - - a0694298 by Serge S. Gulin at 2024-04-21T16:34:07+03:00 JS: Add externs to linker (fixes #24602) After enabling jsdoc and built-in google closure compiler types I was needed to deal with the following: 1. Define NodeJS-environment types. I've just copied minimal set of externs from semi-official repo (see https://github.com/externs/nodejs/blob/6c6882c73efcdceecf42e7ba11f1e3e5c9c041f0/v8/nodejs.js#L8). 2. Define Emscripten-environment types: `HEAP8`. Emscripten already provides some externs in our code but it supposed to be run in some module system. And its definitions do not work well in plain bundle. 3. We have some functions which purpose is to add to functions some contextual information via function properties. These functions should be marked as `modifies` to let google closure compiler remove calls if these functions are not used actually by call graph. Such functions are: `h$o`, `h$sti`, `h$init_closure`, `h$setObjInfo`. 4. STG primitives such as registries and stuff from `GHC.StgToJS`. `dXX` properties were already present at externs generator function but they are started from `7`, not from `1`. This message is related: `// fixme does closure compiler bite us here?` - - - - - e58bb29f by Serge S. Gulin at 2024-04-21T16:34:07+03:00 JS: added both tests: for size and for correctness (fixes #24602) By some reason MacOS builds add to stderr messages like: Ignoring unexpected archive entry: __.SYMDEF ... However I left stderr to `/dev/null` for compatibility with linux CI builds. - - - - - 909f3a9c by Serge S. Gulin at 2024-04-21T16:34:07+03:00 JS: Disable js linker warning for empty symbol table to make js tests running consistent across environments - - - - - 83eb10da by Serge S. Gulin at 2024-04-21T16:34:07+03:00 JS: Add special preprocessor for js files due of needing to keep jsdoc comments (fixes #24602) Our js files have defined google closure compiler types at jsdoc entries but these jsdoc entries are removed by cpp preprocessor. I considered that reusing them in javascript-backend would be a nice thing. Right now haskell processor uses `-traditional` option to deal with comments and `//` operators. But now there are following compiler options: `-C` and `-CC`. You can read about them at GCC (see https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#index-CC) and CLang (see https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-CC). It seems that `-CC` works better for javascript jsdoc than `-traditional`. At least it leaves `/* ... */` comments w/o changes. - - - - - e1cf8dc2 by brandon s allbery kf8nh at 2024-04-22T03:48:26-04:00 fix link in CODEOWNERS It seems that our local Gitlab no longer has documentation for the `CODEOWNERS` file, but the master documentation still does. Use that instead. - - - - - a27c6a49 by Fendor at 2024-04-22T10:13:03+02:00 Adapt to UserData split - - - - - 1efc5a7a by Fendor at 2024-04-22T10:13:03+02:00 Adapt to BinHandle split - - - - - 593f4e04 by Fendor at 2024-04-23T10:19:14-04:00 Add performance regression test for '-fwrite-simplified-core' - - - - - 1ba39b05 by Fendor at 2024-04-23T10:19:14-04:00 Typecheck corebindings lazily during bytecode generation This delays typechecking the corebindings until the bytecode generation happens. We also avoid allocating a thunk that is retained by `unsafeInterleaveIO`. In general, we shouldn't retain values of the hydrated `Type`, as not evaluating the bytecode object keeps it alive. It is better if we retain the unhydrated `IfaceType`. See Note [Hydrating Modules] - - - - - e916fc92 by Alan Zimmerman at 2024-04-23T10:19:50-04:00 EPA: Keep comments in a CaseAlt match The comments now live in the surrounding location, not inside the Match. Make sure we keep them. Closes #24707 - - - - - d2b17f32 by Cheng Shao at 2024-04-23T15:01:22-04:00 driver: force merge objects when building dynamic objects This patch forces the driver to always merge objects when building dynamic objects even when ar -L is supported. It is an oversight of !8887: original rationale of that patch is favoring the relatively cheap ar -L operation over object merging when ar -L is supported, which makes sense but only if we are building static objects! Omitting check for whether we are building dynamic objects will result in broken .so files with undefined reference errors at executable link time when building GHC with llvm-ar. Fixes #22210. - - - - - 209d09f5 by Julian Ospald at 2024-04-23T15:02:03-04:00 Allow non-absolute values for bootstrap GHC variable Fixes #24682 - - - - - 3fff0977 by Matthew Pickering at 2024-04-23T15:02:38-04:00 Don't depend on registerPackage function in Cabal More recent versions of Cabal modify the behaviour of libAbiHash which breaks our usage of registerPackage. It is simpler to inline the part of registerPackage that we need and avoid any additional dependency and complication using the higher-level function introduces. - - - - - c62dc317 by Cheng Shao at 2024-04-25T01:32:02-04:00 ghc-bignum: remove obsolete ln script This commit removes an obsolete ln script in ghc-bignum/gmp. See 060251c24ad160264ae8553efecbb8bed2f06360 for its original intention, but it's been obsolete for a long time, especially since the removal of the make build system. Hence the house cleaning. - - - - - 6399d52b by Cheng Shao at 2024-04-25T01:32:02-04:00 ghc-bignum: update gmp to 6.3.0 This patch bumps the gmp-tarballs submodule and updates gmp to 6.3.0. The tarball format is now xz, and gmpsrc.patch has been patched into the tarball so hadrian no longer needs to deal with patching logic when building in-tree GMP. - - - - - 65b4b92f by Cheng Shao at 2024-04-25T01:32:02-04:00 hadrian: remove obsolete Patch logic This commit removes obsolete Patch logic from hadrian, given we no longer need to patch the gmp tarball when building in-tree GMP. - - - - - 71f28958 by Cheng Shao at 2024-04-25T01:32:02-04:00 autoconf: remove obsolete patch detection This commit removes obsolete deletection logic of the patch command from autoconf scripts, given we no longer need to patch anything in the GHC build process. - - - - - daeda834 by Sylvain Henry at 2024-04-25T01:32:43-04:00 JS: correctly handle RUBBISH literals (#24664) - - - - - 8a06ddf6 by Matthew Pickering at 2024-04-25T11:16:16-04:00 Linearise ghc-internal and base build This is achieved by requesting the final package database for ghc-internal, which mandates it is fully built as a dependency of configuring the `base` package. This is at the expense of cross-package parrallelism between ghc-internal and the base package. Fixes #24436 - - - - - 94da9365 by Andrei Borzenkov at 2024-04-25T11:16:54-04:00 Fix tuple puns renaming (24702) Move tuple renaming short cutter from `isBuiltInOcc_maybe` to `isPunOcc_maybe`, so we consider incoming module. I also fixed some hidden bugs that raised after the change was done. - - - - - fa03b1fb by Fendor at 2024-04-26T18:03:13-04:00 Refactor the Binary serialisation interface The goal is simplifiy adding deduplication tables to `ModIface` interface serialisation. We identify two main points of interest that make this difficult: 1. UserData hardcodes what `Binary` instances can have deduplication tables. Moreover, it heavily uses partial functions. 2. GHC.Iface.Binary hardcodes the deduplication tables for 'Name' and 'FastString', making it difficult to add more deduplication. Instead of having a single `UserData` record with fields for all the types that can have deduplication tables, we allow to provide custom serialisers for any `Typeable`. These are wrapped in existentials and stored in a `Map` indexed by their respective `TypeRep`. The `Binary` instance of the type to deduplicate still needs to explicitly look up the decoder via `findUserDataReader` and `findUserDataWriter`, which is no worse than the status-quo. `Map` was chosen as microbenchmarks indicate it is the fastest for a small number of keys (< 10). To generalise the deduplication table serialisation mechanism, we introduce the types `ReaderTable` and `WriterTable` which provide a simple interface that is sufficient to implement a general purpose deduplication mechanism for `writeBinIface` and `readBinIface`. This allows us to provide a list of deduplication tables for serialisation that can be extended more easily, for example for `IfaceTyCon`, see the issue https://gitlab.haskell.org/ghc/ghc/-/issues/24540 for more motivation. In addition to this refactoring, we split `UserData` into `ReaderUserData` and `WriterUserData`, to avoid partial functions and reduce overall memory usage, as we need fewer mutable variables. Bump haddock submodule to accomodate for `UserData` split. ------------------------- Metric Increase: MultiLayerModulesTH_Make MultiLayerModulesRecomp T21839c ------------------------- - - - - - bac57298 by Fendor at 2024-04-26T18:03:13-04:00 Split `BinHandle` into `ReadBinHandle` and `WriteBinHandle` A `BinHandle` contains too much information for reading data. For example, it needs to keep a `FastMutInt` and a `IORef BinData`, when the non-mutable variants would suffice. Additionally, this change has the benefit that anyone can immediately tell whether the `BinHandle` is used for reading or writing. Bump haddock submodule BinHandle split. - - - - - 4d6394dd by Simon Peyton Jones at 2024-04-26T18:03:49-04:00 Fix missing escaping-kind check in tcPatSynSig Note [Escaping kind in type signatures] explains how we deal with escaping kinds in type signatures, e.g. f :: forall r (a :: TYPE r). a where the kind of the body is (TYPE r), but `r` is not in scope outside the forall-type. I had missed this subtlety in tcPatSynSig, leading to #24686. This MR fixes it; and a similar bug in tc_top_lhs_type. (The latter is tested by T24686a.) - - - - - 981c2c2c by Alan Zimmerman at 2024-04-26T18:04:25-04:00 EPA: check-exact: check that the roundtrip reproduces the source Closes #24670 - - - - - a8616747 by Andrew Lelechenko at 2024-04-26T18:05:01-04:00 Document that setEnv is not thread-safe - - - - - 1e41de83 by Bryan Richter at 2024-04-26T18:05:37-04:00 CI: Work around frequent Signal 9 errors - - - - - a6d5f9da by Naïm Favier at 2024-04-27T17:52:40-04:00 ghc-internal: add MonadFix instance for (,) Closes https://gitlab.haskell.org/ghc/ghc/-/issues/24288, implements CLC proposal https://github.com/haskell/core-libraries-committee/issues/238. Adds a MonadFix instance for tuples, permitting value recursion in the "native" writer monad and bringing consistency with the existing instance for transformers's WriterT (and, to a lesser extent, for Solo). - - - - - 64feadcd by Rodrigo Mesquita at 2024-04-27T17:53:16-04:00 bindist: Fix xattr cleaning The original fix (725343aa) was incorrect because it used the shell bracket syntax which is the quoting syntax in autoconf, making the test for existence be incorrect and therefore `xattr` was never run. Fixes #24554 - - - - - e2094df3 by damhiya at 2024-04-28T23:52:00+09:00 Make read accepts binary integer formats CLC proposal : https://github.com/haskell/core-libraries-committee/issues/177 - - - - - c62239b7 by Sylvain Henry at 2024-04-29T10:35:00+02:00 Fix tests for T22229 - - - - - 1c2fd963 by Alan Zimmerman at 2024-04-29T23:17:00-04:00 EPA: Preserve comments in Match Pats Closes #24708 Closes #24715 Closes #24734 - - - - - 4189d17e by Sylvain Henry at 2024-04-29T23:17:42-04:00 LLVM: better unreachable default destination in Switch (#24717) See added note. Co-authored-by: Siddharth Bhat <siddu.druid at gmail.com> - - - - - a3725c88 by Cheng Shao at 2024-04-29T23:18:20-04:00 ci: enable wasm jobs for MRs with wasm label This patch enables wasm jobs for MRs with wasm label. Previously the wasm label didn't actually have any effect on the CI pipeline, and full-ci needed to be applied to run wasm jobs which was a waste of runners when working on the wasm backend, hence the fix here. - - - - - 702f7964 by Matthew Pickering at 2024-04-29T23:18:56-04:00 Make interface files and object files depend on inplace .conf file A potential fix for #24737 - - - - - 728af21e by Cheng Shao at 2024-04-30T05:30:23-04:00 utils: remove obsolete vagrant scripts Vagrantfile has long been removed in !5288. This commit further removes the obsolete vagrant scripts in the tree. - - - - - 36f2c342 by Cheng Shao at 2024-04-30T05:31:00-04:00 Update autoconf scripts Scripts taken from autoconf 948ae97ca5703224bd3eada06b7a69f40dd15a02 - - - - - ecbf22a6 by Ben Gamari at 2024-04-30T05:31:36-04:00 ghcup-metadata: Drop output_name field This is entirely redundant to the filename of the URL. There is no compelling reason to name the downloaded file differently from its source. - - - - - c56d728e by Zubin Duggal at 2024-04-30T22:45:09-04:00 testsuite: Handle exceptions in framework_fail when testdir is not initialised When `framework_fail` is called before initialising testdir, it would fail with an exception reporting the testdir not being initialised instead of the actual failure. Ensure we report the actual reason for the failure instead of failing in this way. One way this can manifest is when trying to run a test that doesn't exist using `--only` - - - - - d5bea4d6 by Alan Zimmerman at 2024-04-30T22:45:45-04:00 EPA: Fix range for GADT decl with sig only Closes #24714 - - - - - 4d78c53c by Sylvain Henry at 2024-05-01T17:23:06-04:00 Fix TH dependencies (#22229) Add a dependency between Syntax and Internal (via module reexport). - - - - - 37e38db4 by Sylvain Henry at 2024-05-01T17:23:06-04:00 Bump haddock submodule - - - - - ca13075c by Sylvain Henry at 2024-05-01T17:23:47-04:00 JS: cleanup to prepare for #24743 - - - - - 40026ac3 by Alan Zimmerman at 2024-05-01T22:45:07-04:00 EPA: Preserve comments for PrefixCon Preserve comments in fun (Con {- c1 -} a b) = undefined Closes #24736 - - - - - 92134789 by Hécate Moonlight at 2024-05-01T22:45:42-04:00 Correct `@since` metadata in HpcFlags It was introduced in base-4.20, not 4.22. Fix #24721 - - - - - a580722e by Cheng Shao at 2024-05-02T08:18:45-04:00 testsuite: fix req_target_smp predicate - - - - - ac9c5f84 by Andreas Klebinger at 2024-05-02T08:18:45-04:00 STM: Remove (unused)coarse grained locking. The STM code had a coarse grained locking mode guarded by #defines that was unused. This commit removes the code. - - - - - 917ef81b by Andreas Klebinger at 2024-05-02T08:18:45-04:00 STM: Be more optimistic when validating in-flight transactions. * Don't lock tvars when performing non-committal validation. * If we encounter a locked tvar don't consider it a failure. This means in-flight validation will only fail if committing at the moment of validation is *guaranteed* to fail. This prevents in-flight validation from failing spuriously if it happens in parallel on multiple threads or parallel to thread comitting. - - - - - 167a56a0 by Alan Zimmerman at 2024-05-02T08:19:22-04:00 EPA: fix span for empty \case(s) In instance SDecide Nat where SZero %~ (SSucc _) = Disproved (\case) Ensure the span for the HsLam covers the full construct. Closes #24748 - - - - - 9bae34d8 by doyougnu at 2024-05-02T15:41:08-04:00 testsuite: expand size testing infrastructure - closes #24191 - adds windows_skip, wasm_skip, wasm_arch, find_so, _find_so - path_from_ghcPkg, collect_size_ghc_pkg, collect_object_size, find_non_inplace functions to testsuite - adds on_windows and req_dynamic_ghc predicate to testsuite The design is to not make the testsuite too smart and simply offload to ghc-pkg for locations of object files and directories. - - - - - b85b1199 by Sylvain Henry at 2024-05-02T15:41:49-04:00 GHCi: support inlining breakpoints (#24712) When a breakpoint is inlined, its context may change (e.g. tyvars in scope). We must take this into account and not used the breakpoint tick index as its sole identifier. Each instance of a breakpoint (even with the same tick index) now gets a different "info" index. We also need to distinguish modules: - tick module: module with the break array (tick counters, status, etc.) - info module: module having the CgBreakInfo (info at occurrence site) - - - - - 649c24b9 by Oleg Grenrus at 2024-05-03T20:45:42-04:00 Expose constructors of SNat, SChar and SSymbol in ghc-internal - - - - - d603f199 by Mikolaj Konarski at 2024-05-03T20:46:19-04:00 Add DCoVarSet to PluginProv (!12037) - - - - - ba480026 by Serge S. Gulin at 2024-05-03T20:47:01-04:00 JS: Enable more efficient packing of string data (fixes #24706) - - - - - be1e60ee by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Track in-scope variables in ruleCheckProgram This small patch fixes #24726, by tracking in-scope variables properly in -drule-check. Not hard to do! - - - - - 58408c77 by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Add a couple more HasCallStack constraints in SimpleOpt Just for debugging, no effect on normal code - - - - - 70e245e8 by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Add comments to Prep.hs This documentation patch fixes a TODO left over from !12364 - - - - - e5687186 by Simon Peyton Jones at 2024-05-03T20:47:37-04:00 Use HasDebugCallStack, rather than HasCallStack - - - - - 631cefec by Cheng Shao at 2024-05-03T20:48:17-04:00 driver: always merge objects when possible This patch makes the driver always merge objects with `ld -r` when possible, and only fall back to calling `ar -L` when merge objects command is unavailable. This completely reverts !8887 and !12313, given more fixes in Cabal seems to be needed to avoid breaking certain configurations and the maintainence cost is exceeding the behefits in this case :/ - - - - - 1dacb506 by Ben Gamari at 2024-05-03T20:48:53-04:00 Bump time submodule to 1.14 As requested in #24528. ------------------------- Metric Decrease: ghc_bignum_so rts_so Metric Increase: cabal_syntax_dir rts_so time_dir time_so ------------------------- - - - - - 4941b90e by Ben Gamari at 2024-05-03T20:48:53-04:00 Bump terminfo submodule to current master - - - - - 43d48b44 by Cheng Shao at 2024-05-03T20:49:30-04:00 wasm: use scheduler.postTask() for context switch when available This patch makes use of scheduler.postTask() for JSFFI context switch when it's available. It's a more principled approach than our MessageChannel based setImmediate() implementation, and it's available in latest version of Chromium based browsers. - - - - - 08207501 by Cheng Shao at 2024-05-03T20:50:08-04:00 testsuite: give pre_cmd for mhu-perf 5x time - - - - - bf3d4db0 by Alan Zimmerman at 2024-05-03T20:50:43-04:00 EPA: Preserve comments for pattern synonym sig Closes #24749 - - - - - c49493f2 by Matthew Pickering at 2024-05-04T06:02:57-04:00 tests: Widen acceptance window for dir and so size tests These are testing things which are sometimes out the control of a GHC developer. Therefore we shouldn't fail CI if something about these dependencies change because we can't do anything about it. It is still useful to have these statistics for visualisation in grafana though. Ticket #24759 - - - - - 9562808d by Matthew Pickering at 2024-05-04T06:02:57-04:00 Disable rts_so test It has already manifested large fluctuations and destabilising CI Fixes #24762 - - - - - fc24c5cf by Ryan Scott at 2024-05-04T06:03:33-04:00 unboxedSum{Type,Data}Name: Use GHC.Types as the module Unboxed sum constructors are now defined in the `GHC.Types` module, so if you manually quote an unboxed sum (e.g., `''Sum2#`), you will get a `Name` like: ```hs GHC.Types.Sum2# ``` The `unboxedSumTypeName` function in `template-haskell`, however, mistakenly believes that unboxed sum constructors are defined in `GHC.Prim`, so `unboxedSumTypeName 2` would return an entirely different `Name`: ```hs GHC.Prim.(#|#) ``` This is a problem for Template Haskell users, as it means that they can't be sure which `Name` is the correct one. (Similarly for `unboxedSumDataName`.) This patch fixes the implementations of `unboxedSum{Type,Data}Name` to use `GHC.Types` as the module. For consistency with `unboxedTupleTypeName`, the `unboxedSumTypeName` function now uses the non-punned syntax for unboxed sums (`Sum<N>#`) as the `OccName`. Fixes #24750. - - - - - 7eab4e01 by Alan Zimmerman at 2024-05-04T16:14:55+01:00 EPA: Widen stmtslist to include last semicolon Closes #24754 - - - - - 06f7db40 by Teo Camarasu at 2024-05-05T00:19:38-04:00 doc: Fix type error in hs_try_putmvar example - - - - - af000532 by Moritz Schuler at 2024-05-05T06:30:58-04:00 Fix parsing of module names in CLI arguments closes issue #24732 - - - - - da74e9c9 by Ben Gamari at 2024-05-05T06:31:34-04:00 ghc-platform: Add Setup.hs The Hadrian bootstrapping script relies upon `Setup.hs` to drive its build. Addresses #24761. - - - - - 35d34fde by Alan Zimmerman at 2024-05-05T12:52:40-04:00 EPA: preserve comments in class and data decls Fix checkTyClHdr which was discarding comments. Closes #24755 - - - - - 03c5dfbf by Simon Peyton Jones at 2024-05-05T12:53:15-04:00 Fix a float-out error Ticket #24768 showed that the Simplifier was accidentally destroying a join point. It turned out to be that we were sending a bottoming join point to the top, accidentally abstracting over /other/ join points. Easily fixed. - - - - - adba68e7 by John Ericson at 2024-05-05T19:35:56-04:00 Substitute bindist files with Hadrian not configure The `ghc-toolchain` overhaul will eventually replace all this stuff with something much more cleaned up, but I think it is still worth making this sort of cleanup in the meantime so other untanglings and dead code cleaning can procede. I was able to delete a fair amount of dead code doing this too. `LLVMTarget_CPP` is renamed to / merged with `LLVMTarget` because it wasn't actually turned into a valid CPP identifier. (Original to 1345c7cc42c45e63ab1726a8fd24a7e4d4222467, actually.) Progress on #23966 Co-Authored-By: Sylvain Henry <hsyl20 at gmail.com> - - - - - 18f4ff84 by Alan Zimmerman at 2024-05-05T19:36:32-04:00 EPA: fix mkHsOpTyPV duplicating comments Closes #24753 - - - - - a19201d4 by Matthew Craven at 2024-05-06T19:54:29-04:00 Add test cases for #24664 ...since none are present in the original MR !12463 fixing this issue. - - - - - 46328a49 by Alan Zimmerman at 2024-05-06T19:55:05-04:00 EPA: preserve comments in data decls Closes #24771 - - - - - 3b51995c by Andrei Borzenkov at 2024-05-07T14:39:40-04:00 Rename Solo# data constructor to MkSolo# (#24673) - data Solo# a = (# a #) + data Solo# a = MkSolo# a And `(# foo #)` syntax now becomes just a syntactic sugar for `MkSolo# a`. - - - - - 4d59abf2 by Arsen Arsenović at 2024-05-07T14:40:24-04:00 Add the cmm_cpp_is_gcc predicate to the testsuite A future C-- test called T24474-cmm-override-g0 relies on the GCC-specific behaviour of -g3 implying -dD, which, in turn, leads to it emitting #defines past the preprocessing stage. Clang, at least, does not do this, so the test would fail if ran on Clang. As the behaviour here being tested is ``-optCmmP-g3'' undoing effects of the workaround we apply as a fix for bug #24474, and the workaround was for GCC-specific behaviour, the test needs to be marked as fragile on other compilers. - - - - - 25b0b404 by Arsen Arsenović at 2024-05-07T14:40:24-04:00 Split out the C-- preprocessor, and make it pass -g0 Previously, C-- was processed with the C preprocessor program. This means that it inherited flags passed via -optc. A flag that is somewhat often passed through -optc is -g. At certain -g levels (>=2), GCC starts emitting defines *after* preprocessing, for the purposes of debug info generation. This is not useful for the C-- compiler, and, in fact, causes lexer errors. We can suppress this effect (safely, if supported) via -g0. As a workaround, in older versions of GCC (<=10), GCC only emitted defines if a certain set of -g*3 flags was passed. Newer versions check the debug level. For the former, we filter out those -g*3 flags and, for the latter, we specify -g0 on top of that. As a compatible and effective solution, this change adds a C-- preprocessor distinct from the C compiler and preprocessor, but that keeps its flags. The command line produced for C-- preprocessing now looks like: $pgmCmmP $optCs_without_g3 $g0_if_supported $optCmmP Closes: https://gitlab.haskell.org/ghc/ghc/-/issues/24474 - - - - - 9b4129a5 by Andreas Klebinger at 2024-05-08T13:24:20-04:00 -fprof-late: Only insert cost centres on functions/non-workfree cafs. They are usually useless and doing so for data values comes with a large compile time/code size overhead. Fixes #24103 - - - - - 259b63d3 by Sebastian Graf at 2024-05-08T13:24:57-04:00 Simplifier: Preserve OccInfo on DataAlt fields when case binder is dead (#24770) See the adjusted `Note [DataAlt occ info]`. This change also has a positive repercussion on `Note [Combine case alts: awkward corner]`. Fixes #24770. We now try not to call `dataConRepStrictness` in `adjustFieldsIdInfo` when all fields are lazy anyway, leading to a 2% ghc/alloc decrease in T9675. Metric Decrease: T9675 - - - - - 31b28cdb by Sebastian Graf at 2024-05-08T13:24:57-04:00 Kill seqRule, discard dead seq# in Prep (#24334) Discarding seq#s in Core land via `seqRule` was problematic; see #24334. So instead we discard certain dead, discardable seq#s in Prep now. See the updated `Note [seq# magic]`. This fixes the symptoms of #24334. - - - - - b2682534 by Rodrigo Mesquita at 2024-05-10T01:47:51-04:00 Document NcgImpl methods Fixes #19914 - - - - - 4d3acbcf by Zejun Wu at 2024-05-10T01:48:28-04:00 Make renamer to be more flexible with parens in the LHS of the rules We used to reject LHS like `(f a) b` in RULES and requires it to be written as `f a b`. It will be handy to allow both as the expression may be more readable with extra parens in some cases when infix operator is involved. Espceially when TemplateHaskell is used, extra parens may be added out of user's control and result in "valid" rules being rejected and there are not always ways to workaround it. Fixes #24621 - - - - - ab840ce6 by Ben Gamari at 2024-05-10T01:49:04-04:00 IPE: Eliminate dependency on Read Instead of encoding the closure type as decimal string we now simply represent it as an integer, eliminating the need for `Read` in `GHC.Internal.InfoProv.Types.peekInfoProv`. Closes #24504. ------------------------- Metric Decrease: T24602_perf_size size_hello_artifact ------------------------- - - - - - a9979f55 by Cheng Shao at 2024-05-10T01:49:43-04:00 testsuite: fix testwsdeque with recent clang This patch fixes compilation of testwsdeque.c with recent versions of clang, which will fail with the error below: ``` testwsdeque.c:95:33: error: warning: format specifies type 'long' but the argument has type 'void *' [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~~ ^ testwsdeque.c:95:39: error: warning: format specifies type 'int' but the argument has type 'StgWord' (aka 'unsigned long') [-Wformat] 95 | barf("FAIL: %ld %d %d", p, n, val); | ~~ ^~~ | %lu testwsdeque.c:133:42: error: error: incompatible function pointer types passing 'void (void *)' to parameter of type 'OSThreadProc *' (aka 'void *(*)(void *)') [-Wincompatible-function-pointer-types] 133 | createOSThread(&ids[n], "thief", thief, (void*)(StgWord)n); | ^~~~~ /workspace/ghc/_build/stage1/lib/../lib/x86_64-linux-ghc-9.11.20240502/rts-1.0.2/include/rts/OSThreads.h:193:51: error: note: passing argument to parameter 'startProc' here 193 | OSThreadProc *startProc, void *param); | ^ 2 warnings and 1 error generated. ``` - - - - - c2b33fc9 by Rodrigo Mesquita at 2024-05-10T01:50:20-04:00 Rename pre-processor invocation args Small clean up. Uses proper names for the various groups of arguments that make up the pre-processor invocation. - - - - - 2b1af08b by Cheng Shao at 2024-05-10T01:50:55-04:00 ghc-heap: fix typo in ghc-heap cbits - - - - - fc2d6de1 by Jade at 2024-05-10T21:07:16-04:00 Improve performance of Data.List.sort(By) This patch improves the algorithm to sort lists in base. It does so using two strategies: 1) Use a four-way-merge instead of the 'default' two-way-merge. This is able to save comparisons and allocations. 2) Use `(>) a b` over `compare a b == GT` and allow inlining and specialization. This mainly benefits types with a fast (>). Note that this *may* break instances with a *malformed* Ord instance where `a > b` is *not* equal to `compare a b == GT`. CLC proposal: https://github.com/haskell/core-libraries-committee/issues/236 Fixes #24280 ------------------------- Metric Decrease: MultiLayerModulesTH_Make T10421 T13719 T15164 T18698a T18698b T1969 T9872a T9961 T18730 WWRec T12425 T15703 ------------------------- - - - - - 1012e8aa by Matthew Pickering at 2024-05-10T21:07:52-04:00 Revert "ghcup-metadata: Drop output_name field" This reverts commit ecbf22a6ac397a791204590f94c0afa82e29e79f. This breaks the ghcup metadata generation on the nightly jobs. - - - - - daff1e30 by Jannis at 2024-05-12T13:38:35-04:00 Division by constants optimization - - - - - 413217ba by Andreas Klebinger at 2024-05-12T13:39:11-04:00 Tidy: Add flag to expose unfoldings if they take dictionary arguments. Add the flag `-fexpose-overloaded-unfoldings` to be able to control this behaviour. For ghc's boot libraries file size grew by less than 1% when it was enabled. However I refrained from enabling it by default for now. I've also added a section on specialization more broadly to the users guide. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot Metric Increase: T12425 T13386 hard_hole_fits ------------------------- - - - - - c5d89412 by Zubin Duggal at 2024-05-13T22:19:53-04:00 Don't store a GlobalRdrEnv in `mi_globals` for GHCi. GHCi only needs the `mi_globals` field for modules imported with :module +*SomeModule. It uses this field to make the top level environment in `SomeModule` available to the repl. By default, only the first target in the command line parameters is "star" loaded into GHCi. Other modules have to be manually "star" loaded into the repl. Storing the top level GlobalRdrEnv for each module is very wasteful, especially given that we will most likely never need most of these environments. Instead we store only the information needed to reconstruct the top level environment in a module, which is the `IfaceTopEnv` data structure, consisting of all import statements as well as all top level symbols defined in the module (not taking export lists into account) When a particular module is "star-loaded" into GHCi (as the first commandline target, or via an explicit `:module +*SomeModule`, we reconstruct the top level environment on demand using the `IfaceTopEnv`. - - - - - d65bf4a2 by Fendor at 2024-05-13T22:20:30-04:00 Add perf regression test for `-fwrite-if-simplified-core` - - - - - 2c0f8ddb by Andrei Borzenkov at 2024-05-13T22:21:07-04:00 Improve pattern to type pattern transformation (23739) `pat_to_type_pat` function now can handle more patterns: - TuplePat - ListPat - LitPat - NPat - ConPat Allowing these new constructors in type patterns significantly increases possible shapes of type patterns without `type` keyword. This patch also changes how lookups in `lookupOccRnConstr` are performed, because we need to fall back into types when we didn't find a constructor on data level to perform `ConPat` to type transformation properly. - - - - - be514bb4 by Cheng Shao at 2024-05-13T22:21:43-04:00 hadrian: fix hadrian building with ghc-9.10.1 - - - - - ad38e954 by Cheng Shao at 2024-05-13T22:21:43-04:00 linters: fix lint-whitespace compilation with ghc-9.10.1 - - - - - a593f284 by Andreas Klebinger at 2024-05-15T07:32:10-04:00 Expand the `inline` rule to look through casts/ticks. Fixes #24808 - - - - - b1e0c313 by Cheng Shao at 2024-05-15T07:32:46-04:00 testsuite: bump PartialDownSweep timeout to 5x on wasm32 - - - - - b2227487 by Fendor at 2024-05-15T17:14:06-04:00 Add Eq and Ord instance to `IfaceType` We add an `Ord` instance so that we can store `IfaceType` in a `Data.Map` container. This is required to deduplicate `IfaceType` while writing `.hi` files to disk. Deduplication has many beneficial consequences to both file size and memory usage, as the deduplication enables implicit sharing of values. See issue #24540 for more motivation. The `Ord` instance would be unnecessary if we used a `TrieMap` instead of `Data.Map` for the deduplication process. While in theory this is clerarly the better option, experiments on the agda code base showed that a `TrieMap` implementation has worse run-time performance characteristics. To the change itself, we mostly derive `Eq` and `Ord`. This requires us to change occurrences of `FastString` with `LexicalFastString`, since `FastString` has no `Ord` instance. We change the definition of `IfLclName` to a newtype of `LexicalFastString`, to make such changes in the future easier. Bump haddock submodule for IfLclName changes - - - - - d368f9a6 by Fendor at 2024-05-15T17:14:06-04:00 Move out LiteralMap to avoid cyclic module dependencies - - - - - 2fcc09fd by Fendor at 2024-05-15T17:14:06-04:00 Add deduplication table for `IfaceType` The type `IfaceType` is a highly redundant, tree-like data structure. While benchmarking, we realised that the high redundancy of `IfaceType` causes high memory consumption in GHCi sessions when byte code is embedded into the `.hi` file via `-fwrite-if-simplified-core` or `-fbyte-code-and-object-code`. Loading such `.hi` files from disk introduces many duplicates of memory expensive values in `IfaceType`, such as `IfaceTyCon`, `IfaceTyConApp`, `IA_Arg` and many more. We improve the memory behaviour of GHCi by adding an additional deduplication table for `IfaceType` to the serialisation of `ModIface`, similar to how we deduplicate `Name`s and `FastString`s. When reading the interface file back, the table allows us to automatically share identical values of `IfaceType`. To provide some numbers, we evaluated this patch on the agda code base. We loaded the full library from the `.hi` files, which contained the embedded core expressions (`-fwrite-if-simplified-core`). Before this patch: * Load time: 11.7 s, 2.5 GB maximum residency. After this patch: * Load time: 7.3 s, 1.7 GB maximum residency. This deduplication has the beneficial side effect to additionally reduce the size of the on-disk interface files tremendously. For example, on agda, we reduce the size of `.hi` files (with `-fwrite-if-simplified-core`): * Before: 101 MB on disk * Now: 24 MB on disk This has even a beneficial side effect on the cabal store. We reduce the size of the store on disk: * Before: 341 MB on disk * Now: 310 MB on disk Note, none of the dependencies have been compiled with `-fwrite-if-simplified-core`, but `IfaceType` occurs in multiple locations in a `ModIface`. We also add IfaceType deduplication table to .hie serialisation and refactor .hie file serialisation to use the same infrastrucutre as `putWithTables`. Bump haddock submodule to accomodate for changes to the deduplication table layout and binary interface. - - - - - 36aa7cf1 by Fendor at 2024-05-15T17:14:06-04:00 Add run-time configurability of `.hi` file compression Introduce the flag `-fwrite-if-compression=<n>` which allows to configure the compression level of writing .hi files. The motivation is that some deduplication operations are too expensive for the average use case. Hence, we introduce multiple compression levels with variable impact on performance, but still reduce the memory residency and `.hi` file size on disk considerably. We introduce three compression levels: * `1`: `Normal` mode. This is the least amount of compression. It deduplicates only `Name` and `FastString`s, and is naturally the fastest compression mode. * `2`: `Safe` mode. It has a noticeable impact on .hi file size and is marginally slower than `Normal` mode. In general, it should be safe to always use `Safe` mode. * `3`: `Full` deduplication mode. Deduplicate as much as we can, resulting in minimal .hi files, but at the cost of additional compilation time. Reading .hi files doesn't need to know the initial compression level, and can always deserialise a `ModIface`, as we write out a byte that indicates the next value has been deduplicated. This allows users to experiment with different compression levels for packages, without recompilation of dependencies. Note, the deduplication also has an additional side effect of reduced memory consumption to implicit sharing of deduplicated elements. See https://gitlab.haskell.org/ghc/ghc/-/issues/24540 for example where that matters. ------------------------- Metric Decrease: MultiLayerModulesDefsGhciWithCore T16875 T21839c T24471 hard_hole_fits libdir ------------------------- - - - - - 1e63a6fb by Matthew Pickering at 2024-05-15T17:14:07-04:00 Introduce regression tests for `.hi` file sizes Add regression tests to track how `-fwrite-if-compression` levels affect the size of `.hi` files. - - - - - 639d742b by M Farkas-Dyck at 2024-05-15T17:14:49-04:00 TTG: ApplicativeStatement exist only in Rn and Tc Co-Authored-By: romes <rodrigo.m.mesquita at gmail.com> - - - - - aa7b336b by Jade at 2024-05-15T23:06:17-04:00 Documentation: Improve documentation for symbols exported from System.IO - - - - - c561de8f by Jade at 2024-05-15T23:06:54-04:00 Improve suggestions for language extensions - When suggesting Language extensions, also suggest Extensions which imply them - Suggest ExplicitForAll and GADTSyntax instead of more specific extensions - Rephrase suggestion to include the term 'Extension' - Also moves some flag specific definitions out of Session.hs into Flags.hs (#24478) Fixes: #24477 Fixes: #24448 Fixes: #10893 - - - - - 4c7ae2a1 by Andreas Klebinger at 2024-05-15T23:07:30-04:00 Testsuite: Check if llvm assembler is available for have_llvm - - - - - bc672166 by Torsten Schmits at 2024-05-15T23:08:06-04:00 refactor quadratic search in warnMissingHomeModules - - - - - 7875e8cb by Torsten Schmits at 2024-05-15T23:08:06-04:00 add test that runs MakeDepend on thousands of modules - - - - - b84b91f5 by Adam Gundry at 2024-05-16T15:32:06-04:00 Representation-polymorphic HasField (fixes #22156) This generalises the HasField class to support representation polymorphism, so that instead of type HasField :: forall {k} . k -> Type -> Type -> Constraint we have type HasField :: forall {k} {r_rep} {a_rep} . k -> TYPE r_rep -> TYPE a_rep -> Constraint - - - - - 05285090 by Matthew Pickering at 2024-05-16T15:32:43-04:00 Bump os-string submodule to 2.0.2.2 Closes #24786 - - - - - 886ab43a by Cheng Shao at 2024-05-17T01:34:50-04:00 rts: do not prefetch mark_closure bdescr in non-moving gc when ASSERTS_ENABLED This commit fixes a small an oversight in !12148: the prefetch logic in non-moving GC may trap in debug RTS because it calls Bdescr() for mark_closure which may be a static one. It's fine in non-debug RTS because even invalid bdescr addresses are prefetched, they will not cause segfaults, so this commit implements the most straightforward fix: don't prefetch mark_closure bdescr when assertions are enabled. - - - - - b38dcf39 by Teo Camarasu at 2024-05-17T01:34:50-04:00 rts: Allocate non-moving segments with megablocks Non-moving segments are 8 blocks long and need to be aligned. Previously we serviced allocations by grabbing 15 blocks, finding an aligned 8 block group in it and returning the rest. This proved to lead to high levels of fragmentation as a de-allocating a segment caused an 8 block gap to form, and this could not be reused for allocation. This patch introduces a segment allocator based around using entire megablocks to service segment allocations in bulk. When there are no free segments, we grab an entire megablock and fill it with aligned segments. As the megablock is free, we can easily guarantee alignment. Any unused segments are placed on a free list. It only makes sense to free segments in bulk when all of the segments in a megablock are freeable. After sweeping, we grab the free list, sort it, and find all groups of segments where they cover the megablock and free them. This introduces a period of time when free segments are not available to the mutator, but the risk that this would lead to excessive allocation is low. Right after sweep, we should have an abundance of partially full segments, and this pruning step is relatively quick. In implementing this we drop the logic that kept NONMOVING_MAX_FREE segments on the free list. We also introduce an eventlog event to log the amount of pruned/retained free segments. See Note [Segment allocation strategy] Resolves #24150 ------------------------- Metric Decrease: T13253 T19695 ------------------------- - - - - - 710665bd by Cheng Shao at 2024-05-17T01:35:30-04:00 rts: fix I/O manager compilation errors for win32 target This patch fixes I/O manager compilation errors for win32 target discovered when cross-compiling to win32 using recent clang: ``` rts/win32/ThrIOManager.c:117:7: error: error: call to undeclared function 'is_io_mng_native_p'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 117 | if (is_io_mng_native_p ()) { | ^ | 117 | if (is_io_mng_native_p ()) { | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) rts/fs.c:143:28: error: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes] 143 | int setErrNoFromWin32Error () { | ^ | void | 143 | int setErrNoFromWin32Error () { | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) rts/win32/ConsoleHandler.c:227:9: error: error: call to undeclared function 'interruptIOManagerEvent'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 227 | interruptIOManagerEvent (); | ^ | 227 | interruptIOManagerEvent (); | ^ rts/win32/ConsoleHandler.c:227:9: error: note: did you mean 'getIOManagerEvent'? | 227 | interruptIOManagerEvent (); | ^ rts/include/rts/IOInterface.h:27:10: error: note: 'getIOManagerEvent' declared here 27 | void * getIOManagerEvent (void); | ^ | 27 | void * getIOManagerEvent (void); | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) rts/win32/ConsoleHandler.c:196:9: error: error: call to undeclared function 'setThreadLabel'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 196 | setThreadLabel(cap, t, "signal handler thread"); | ^ | 196 | setThreadLabel(cap, t, "signal handler thread"); | ^ rts/win32/ConsoleHandler.c:196:9: error: note: did you mean 'postThreadLabel'? | 196 | setThreadLabel(cap, t, "signal handler thread"); | ^ rts/eventlog/EventLog.h:118:6: error: note: 'postThreadLabel' declared here 118 | void postThreadLabel(Capability *cap, | ^ | 118 | void postThreadLabel(Capability *cap, | ^ 1 error generated. `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1) ``` - - - - - 28b9cee0 by Rodrigo Mesquita at 2024-05-17T01:36:05-04:00 configure: Check C99-compat for Cmm preprocessor Fixes #24815 - - - - - 8927e0c3 by Andreas Klebinger at 2024-05-17T01:36:41-04:00 Ensure `tcHasFixedRuntimeRep (# #)` returns True. - - - - - 04179044 by doyougnu at 2024-05-17T09:00:32-04:00 testsuite: make find_so regex less general Closes #24759 Background. In MR !12372 we began tracking shared object files and directories sizes for dependencies. However, this broke release builds because release builds alter the filenames swapping "in-place" for a hash. This was not considered in the MR and thus broke release pipelines. Furthermore, the rts_so test was found to be wildly varying and was therefore disabled in !12561. This commit fixes both of these issues: - fix the rts_so test by making the regex less general, now the rts_so test and all other foo.so tests must match "libHS<some-lib>-<version>-<hash|'in-place>-<ghc>". This prevents the rts_so test from accidentally matching different rts variants such as rts_threaded, which was the cause of the wild swings after !12372. - add logic to match either a hash or the string in-place. This should make the find_so function build agnostic. - - - - - 0962b50d by Andreas Klebinger at 2024-05-17T09:01:08-04:00 TagAnalysis: Treat all bottom ids as tagged during analysis. Ticket #24806 showed that we also need to treat dead end thunks as tagged during the analysis. - - - - - 7eb9f184 by Ben Gamari at 2024-05-17T11:23:37-04:00 Remove haddock submodule In preparation for merge into the GHC, as proposed in #23178. - - - - - 47b14dcc by Fendor at 2024-05-17T11:28:17-04:00 Adapt to `IfLclName` newtype changes (cherry picked from commit a711607e29b925f3d69e27c5fde4ba655c711ff1) - - - - - 6cc6681d by Fendor at 2024-05-17T11:28:17-04:00 Add IfaceType deduplication table to interface file serialisation Although we do not really need it in the interface file serialisation, as the deserialisation uses `getWithUserData`, we need to mirror the structure `getWithUserData` expects. Thus, we write essentially an empty `IfaceType` table at the end of the file, as the interface file doesn't reference `IfaceType`. (cherry picked from commit c9bc29c6a708483d2abc3d8ec9262510ce87ca61) - - - - - b9721206 by Ben Gamari at 2024-05-17T11:30:22-04:00 ghc-tags.yaml: Initial commit - - - - - 074e7d8f by Ben Gamari at 2024-05-17T11:31:29-04:00 fourmolu: Add configuration - - - - - 151b1736 by Ben Gamari at 2024-05-17T11:32:52-04:00 Makefile: Rework for use by haddock developers Previously the Makefile was present only for GHC's old make-based build system. Now since the make-based build system is gone we can use it for more useful ends. - - - - - a7dcf13b by Ben Gamari at 2024-05-17T11:36:14-04:00 Reformat with fourmolu Using previously-added configuration and `fourmolu -i .` Note that we exclude the test-cases (`./{hoogle,html-hypsrc,latex}-test`) as they are sensitive to formatting. - - - - - 0ea6017b by Ben Gamari at 2024-05-17T11:40:04-04:00 Add 'utils/haddock/' from commit 'a7dcf13bfbb97b20e75cc8ce650e2bb628db4660' git-subtree-dir: utils/haddock git-subtree-mainline: 7eb9f1849b1c72a1c61dee88462b4244550406f3 git-subtree-split: a7dcf13bfbb97b20e75cc8ce650e2bb628db4660 - - - - - aba1d304 by Hécate Moonlight at 2024-05-17T11:40:48-04:00 Add exceptions to the dangling notes list - - - - - 527bfbfb by Hécate Moonlight at 2024-05-17T11:40:52-04:00 Add haddock to the whitespace lint ignore list - - - - - 43274677 by Ben Gamari at 2024-05-17T11:41:20-04:00 git-blame-ignore-revs: Ignore haddock reformatting - - - - - 0e679e37 by Fendor at 2024-05-18T00:27:24-04:00 Pass cpp options to the CC builder in hadrian - - - - - bb40244e by Sylvain Henry at 2024-05-18T00:28:06-04:00 JS: fix allocation constant (fix #24746) - - - - - 646d30ab by Jade at 2024-05-18T19:23:31+02:00 Add highlighting for inline-code snippets in haddock - - - - - 64459a3e by Hécate Moonlight at 2024-05-19T08:42:27-04:00 haddock: Add a .readthedocs.yml file for online documentation - - - - - 7d3d9bbf by Serge S. Gulin at 2024-05-19T18:47:05+00:00 Unicode: General Category size test (related #24789) Added trivial size performance test which involves unicode general category usage via `read`. The `read` itself uses general category to detect spaces. The purpose for this test is to measure outcome of applying improvements at General Category representation in code discussed at #24789. - - - - - 8e04efcf by Alan Zimmerman at 2024-05-19T21:29:34-04:00 EPA: Remove redundant code Remove unused epAnnAnns function various cases for showAstData that no longer exist - - - - - 071d7a1e by Rodrigo Mesquita at 2024-05-20T10:55:16-04:00 Improve docs on closed type families in hs-boots Fixes #24776 - - - - - d9e2c119 by Torsten Schmits at 2024-05-20T10:55:52-04:00 Use default deviation for large-project test This new performance test has the purpose of detecting regressions in complexity in relation to the number of modules in a project, so 1% deviation is way too small to avoid false positives. - - - - - 20b0136a by Ben Gamari at 2024-05-22T00:31:39-04:00 ghcup-metadata: Various fixes from 9.10.1 Use Debian 12/x86-64, Debian 10/aarch64, and Debian 11/aarch64 bindists where possible. - - - - - 6838a7c3 by Sylvain Henry at 2024-05-22T00:32:23-04:00 Reverse arguments to stgCallocBytes (fix #24828) - - - - - f50f46c3 by Fendor at 2024-05-22T00:32:59-04:00 Add log messages for Iface serialisation compression level Fix the label of the number of 'IfaceType' entries in the log message. Add log message for the compression level that is used to serialise a an interface file. Adds `Outputable` instance for 'CompressionIFace'. - - - - - 3bad5d55 by Hécate Moonlight at 2024-05-22T00:33:40-04:00 base: Update doctests outputs ghc-internal: Update doctests outputs - - - - - 9317c6fb by David Binder at 2024-05-22T00:34:21-04:00 haddock: Fix the testsuites of the haddock-library - Apply all the metadata revisions from Hackage to the cabal file. - Fix the `ParserSpec.hs` file in the `spec` testsuite of haddock-library. - Make `CHANGES.md` an extra-doc-file instead of an extra-source-file. - - - - - 54073b02 by David Binder at 2024-05-22T00:34:21-04:00 haddock: Fix parser of @since pragma The testsuite contained tests for annotations of the form `@since foo-bar-0.5.0`, but the parser was written incorrectly. - - - - - ede6ede3 by Matthew Pickering at 2024-05-22T00:34:57-04:00 Fix nightly pages job It seems likely broken by 9f99126a which moved `index.html` from the root folder into `docs/` folder. Fixes #24840 - - - - - b7bcf729 by Cheng Shao at 2024-05-22T00:35:32-04:00 autoconf: remove unused context diff check This patch removes redundant autoconf check for the context diff program given it isn't actually been used anywhere, especially since make removal. - - - - - ea2fe66e by Hécate Moonlight at 2024-05-22T00:36:13-04:00 haddock: Rework the contributing guide - - - - - 0f302a94 by Hécate Moonlight at 2024-05-22T00:36:52-04:00 haddock: Add module relationships diagrams of haddock-api and haddock-library - - - - - d1a9f34f by Hécate Moonlight at 2024-05-22T00:36:52-04:00 Add instructions - - - - - b880ee80 by Hécate Moonlight at 2024-05-22T00:36:52-04:00 Add SVG outputs - - - - - 6d7e6ad8 by Ben Gamari at 2024-05-22T13:40:05-04:00 rts: Fix size of StgOrigThunkInfo frames Previously the entry code of the `stg_orig_thunk` frame failed to account for the size of the profiling header as it hard-coded the frame size. Fix this. Fixes #24809. - - - - - c645fe40 by Fendor at 2024-05-22T13:40:05-04:00 Add regression test T24809 for stg_orig_thunk_info_frame size - - - - - 4181aa40 by Andreas Klebinger at 2024-05-22T13:40:42-04:00 bindists: Check for existence of share folder before trying to copy it. This folder isn't distributed in windows bindists A lack of doing so resulted us copying loads of files twice. - - - - - d216510e by Matthew Pickering at 2024-05-22T13:40:42-04:00 Remove ad-hoc installation of mingw toolchain in relocatable bindists This reverts 616ac30026e8dd7d2ebb98d92dde071eedf5d951 The choice about whether to install mingw is taken in the installation makefile. This is also broken on non-windows systems. The actual issue was the EnableDistroToolchain variable wasn't declared in mk/config.mk and therefore the check to install mingw was failing. - - - - - 7b4c1998 by Cheng Shao at 2024-05-22T21:52:52-04:00 testsuite: fix T17920 for wasm backend T17920 was marked as fragile on wasm before; it can be trivially fixed by avoiding calling variadic printf() in cmm. - - - - - c739383b by Cheng Shao at 2024-05-22T21:53:29-04:00 testsuite: bump T22744 timeout to 5x - - - - - c4c6d714 by Cheng Shao at 2024-05-22T21:54:06-04:00 testsuite: don't attempt to detect host cpu features when testing cross ghc The testsuite driver CPU feature detection logic only detects host CPU and only makes sense when we are not testing a cross GHC. - - - - - 3d9e4ce6 by Simon Peyton Jones at 2024-05-22T21:54:43-04:00 Better skolemisation As #24810 showed, it is (a little) better to skolemise en-bloc, so that Note [Let-bound skolems] fires more often. See Note [Skolemisation en bloc] in GHC.Tc.Utils.Instantiate. - - - - - a3cd3a1d by Ryan Scott at 2024-05-22T21:55:19-04:00 Add missing parenthesizePat in cvtp We need to ensure that the output of `cvtp` is parenthesized (at precedence `sigPrec`) so that any pattern signatures with a surrounding pattern signature can parse correctly. Fixes #24837. - - - - - 4bb2a7cc by Hécate Moonlight at 2024-05-22T21:55:59-04:00 [base] Document the memory overhead of ByteArray Add a diagram that shows the constituent parts of a ByteArray and their memory overhead. - - - - - 8b2a016a by Hécate Moonlight at 2024-05-22T21:56:38-04:00 Haddock: Add MR template for Haddock - - - - - ead75532 by Peter Trommler at 2024-05-23T02:28:05-04:00 PPC: Support ELF v2 on powerpc64 big-endian Detect ELF v2 on PowerPC 64-bit systems. Check for `_CALL_ELF` preprocessor macro. Fixes #21191 - - - - - 9d4c10f2 by Hécate Kleidukos at 2024-05-23T02:28:44-04:00 gitlab: Add @Kleidukos to CODEOWNERS for utils/haddock - - - - - 28e64170 by Preetham Gujjula at 2024-05-23T07:20:48-04:00 haddock: Add cabal-fmt to tools for `make style` - - - - - 00126a89 by Andrei Borzenkov at 2024-05-23T07:21:24-04:00 haddock: fix verbosity option parsing - - - - - a3e0b68b by Ryan Hendrickson at 2024-05-23T15:52:03-04:00 base: specify tie-breaking behavior of min, max, and related list/Foldable functions - - - - - bdcc0f37 by doyougnu at 2024-05-24T07:51:18-04:00 cmm: add word <-> double/float bitcast - closes: #25331 This is the last step in the project plan described in #25331. This commit: - adds bitcast operands for x86_64, LLVM, aarch64 - For PPC and i386 we resort to using the cmm implementations - renames conversion MachOps from Conv to Round|Truncate - - - - - f0d257f7 by Krzysztof Gogolewski at 2024-05-24T07:51:55-04:00 StgToByteCode: minor refactor Some functions in StgToByteCode were filtering out void arguments. However, StgToByteCode is called after unarisation: the void arguments should have been removed earlier. Instead of filtering out, we assert that the args are non-void. - - - - - 03137fd2 by Krzysztof Gogolewski at 2024-05-24T07:51:55-04:00 StgToByteCode: minor refactor `layoutNativeCall` was always called with a `primRepCmmType platform` callback. Hence we can put it inside of `layoutNativeCall` rather than repeat it. - - - - - 27c430f3 by David Binder at 2024-05-24T07:52:38-04:00 haddock: Remove compatibility shims for GHC < 8.4 from haddock-library - - - - - 8dd8a076 by Cheng Shao at 2024-05-24T07:53:14-04:00 compiler: avoid saving foreign call target to local when there are no caller-save GlobalRegs This patch makes the STG->Cmm backend avoid saving foreign call target to local when there are no caller-save GlobalRegs. Since 321941a8ebe25192cdeece723e1058f2f47809ea, when we lower a foreign call, we unconditionally save the foreign call target to a temporary local first, then rely on cmmSink to clean it up later, which only happens with -fcmm-sink (implied by -O) and not in unoptimized code. And this is troublesome for the wasm backend NCG, which needs to infer a foreign call target symbol's type signature from the Cmm call site. Previously, the NCG has been emitting incorrect type signatures for unoptimized code, which happens to work with `wasm-ld` most of the time, but this is never future-proof against upstream toolchain updates, and it causes horrible breakages when LTO objects are included in linker input. Hence this patch. - - - - - 986df1ab by Cheng Shao at 2024-05-24T07:53:14-04:00 testsuite: add callee-no-local regression test - - - - - 52d62e2a by Sylvain Henry at 2024-05-24T07:53:57-04:00 Fix HasCallStack leftovers from !12514 / #24726 - - - - - c5e00c35 by crumbtoo at 2024-05-24T07:54:38-04:00 user_guide: Fix typo in MultiWayIf chapter Close #24829 - - - - - bd323b0e by Ben Gamari at 2024-05-24T07:55:15-04:00 base: Ensure that CHANGELOG is included in extra-source-files This was missed in the `ghc-internal` split. Closes #24831. - - - - - 1bfd32e8 by Ben Gamari at 2024-05-24T07:55:15-04:00 base: Fix changelog reference to setBacktraceMechanismState (cherry picked from commit b63f7ba01fdfd98a01d2f0dec8d9262b3e595c5d) - - - - - 43e8e4f3 by Sylvain Henry at 2024-05-24T12:16:43-04:00 Float/double unboxed literal support for HexFloatLiterals (fix #22155) - - - - - 4a7f4713 by Fendor at 2024-05-24T12:17:19-04:00 Improve test labels for binary interface file size tests Test labels for binary interface file sizes are hard to read and overly verbose at the same time. Extend the name for the metric title, but shorten it in the actual comparison table. - - - - - 14e554cf by Zubin Duggal at 2024-05-24T12:17:55-04:00 Revert "Fix haskell/haddock#783 Don't show button if --quickjump not present" This reverts commit 7776566531e72c415f66dd3b13da9041c52076aa. - - - - - f56838c3 by Ben Gamari at 2024-05-24T12:17:55-04:00 Fix default hyperlinked sources pattern Previously this didn't include the `%M` token which manifested as broken links to the hyperlinked sources of reexports of declarations defined in other packages. Fixes haddock#1628. (cherry picked from commit 1432bcc943d41736eca491ecec4eb9a6304dab36) - - - - - 42efa62c by Ben Gamari at 2024-05-24T12:17:55-04:00 Make DocPaths a proper data type (cherry picked from commit 7f3a5c4da0023ae47b4c376c9b1ea2d706c94d8c) - - - - - 53d9ceb3 by Ben Gamari at 2024-05-24T12:17:55-04:00 haddock: Bump version to 2.30 (cherry picked from commit 994989ed3d535177e57b778629726aeabe8c7602) - - - - - e4db1112 by Zubin Duggal at 2024-05-24T12:17:55-04:00 haddock-api: allow base 4.20 and ghc 9.11 - - - - - e294f7a2 by PHO at 2024-05-24T12:17:55-04:00 Add a flag "threaded" for building haddock with the threaded RTS GHC isn't guaranteed to have a threaded RTS. There should be a way to build it with the vanilla one. (cherry picked from commit 75a94e010fb5b0236c670d22b04f5472397dc15d) - - - - - 51165bc9 by Andreas Klebinger at 2024-05-25T10:58:03-04:00 Update ticky counter event docs. Add the info about the info table address and json fields. Fixes #23200 - - - - - 98597ad5 by Sylvain Henry at 2024-05-25T10:58:45-04:00 Export extractPromotedList (#24866) This can be useful in plugins. - - - - - 228dcae6 by Teo Camarasu at 2024-05-28T13:12:24+00:00 template-haskell: Move wired-ins to ghc-internal Thus we make `template-haskell` reinstallable and keep it as the public API for Template Haskell. All of the wired-in identifiers are moved to `ghc-internal`. This necessitates also moving much of `ghc-boot-th` into `ghc-internal`. These modules are then re-exported from `ghc-boot-th` and `template-haskell`. To avoid a dependency on `template-haskell` from `lib:ghc`, we instead depend on the TH ASTs via `ghc-boot-th`. As `template-haskell` no longer has special status, we can drop the logic adding an implicit dependency on `template-haskell` when using TH. We can also drop the `template-haskell-next` package, which was previously used when bootstrapping. When bootstrapping, we need to vendor the TH AST modules from `ghc-internal` into `ghc-boot-th`. This is controlled by the `bootstrap` cabal flag as before. See Note [Bootstrapping Template Haskell]. We split out a GHC.Internal.TH.Lift module resolving #24752. This module is only built when not bootstrapping. Resolves #24703 ------------------------- Metric Increase: ghc_boot_th_dir ghc_boot_th_so ------------------------- - - - - - 62dded28 by Teo Camarasu at 2024-05-28T13:12:24+00:00 testsuite: mark tests broken by #24886 Now that `template-haskell` is no longer wired-in. These tests are triggering #24886, and so need to be marked broken. - - - - - 3ca72ad9 by Cheng Shao at 2024-05-30T02:57:06-04:00 rts: fix missing function prototypes in ClosureMacros.h - - - - - e0029e3d by Andreas Klebinger at 2024-05-30T02:57:43-04:00 UnliftedFFITypes: Allow `(# #)` as argument when it's the only argument. This allows representing functions like: int foo(void); to be imported like this: foreign import ccall "a_number_c" c_number :: (# #) -> Int64# Which can be useful when the imported function isn't implicitly stateful. - - - - - d0401335 by Matthew Pickering at 2024-05-30T02:58:19-04:00 ci: Update ci-images commit for fedora38 image The fedora38 nightly job has been failing for quite a while because `diff` was no longer installed. The ci-images bump explicitly installs `diffutils` into these images so hopefully they now pass again. - - - - - 3c97c74a by Jan Hrček at 2024-05-30T02:58:58-04:00 Update exactprint docs - - - - - 77760cd7 by Jan Hrček at 2024-05-30T02:58:58-04:00 Incorporate review feedback - - - - - 87591368 by Jan Hrček at 2024-05-30T02:58:58-04:00 Remove no longer relevant reference to comments - - - - - 05f4f142 by Jan Hrček at 2024-05-30T02:58:59-04:00 Replace outdated code example - - - - - 45a4a5f3 by Andreas Klebinger at 2024-05-30T02:59:34-04:00 Reword error resulting from missing -XBangPatterns. It can be the result of either a bang pattern or strict binding, so now we say so instead of claiming it must be a bang pattern. Fixes #21032 - - - - - e17f2df9 by Cheng Shao at 2024-05-30T03:00:10-04:00 testsuite: bump MultiLayerModulesDefsGhciReload timeout to 10x - - - - - 7a660042 by Cheng Shao at 2024-05-30T14:42:29-04:00 rts: ensure gc_thread/gen_workspace is allocated with proper alignment gc_thread/gen_workspace are required to be aligned by 64 bytes. However, this property has not been properly enforced before, and numerous alignment violations at runtime has been caught by UndefinedBehaviorSanitizer that look like: ``` rts/sm/GC.c:1167:8: runtime error: member access within misaligned address 0x0000027a3390 for type 'gc_thread' (aka 'struct gc_thread_'), which requires 64 byte alignment 0x0000027a3390: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1167:8 rts/sm/GC.c:1184:13: runtime error: member access within misaligned address 0x0000027a3450 for type 'gen_workspace' (aka 'struct gen_workspace_'), which requires 64 byte alignment 0x0000027a3450: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/GC.c:1184:13 ``` This patch fixes the gc_thread/gen_workspace misalignment issue by explicitly allocating them with alignment constraint. - - - - - c77a48af by Cheng Shao at 2024-05-30T14:42:29-04:00 rts: fix an unaligned load in nonmoving gc This patch fixes an unaligned load in nonmoving gc by ensuring the closure address is properly untagged first before attempting to prefetch its header. The unaligned load is reported by UndefinedBehaviorSanitizer: ``` rts/sm/NonMovingMark.c:921:9: runtime error: member access within misaligned address 0x0042005f3a71 for type 'StgClosure' (aka 'struct StgClosure_'), which requires 8 byte alignment 0x0042005f3a71: note: pointer points here 00 00 00 98 43 13 8e 12 7f 00 00 50 3c 5f 00 42 00 00 00 58 17 b7 92 12 7f 00 00 89 cb 5e 00 42 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/sm/NonMovingMark.c:921:9 ``` This issue had previously gone unnoticed since it didn't really harm runtime correctness, the invalid header address directly loaded from a tagged pointer is only used as prefetch address and will not cause segfaults. However, it still should be corrected because the prefetch would be rendered useless by this issue, and untagging only involves a single bitwise operation without memory access so it's cheap enough to add. - - - - - 05c4fafb by Cheng Shao at 2024-05-30T14:42:29-04:00 rts: use __builtin_offsetof to implement STG_FIELD_OFFSET This patch fixes the STG_FIELD_OFFSET macro definition by using __builtin_offsetof, which is what gcc/clang uses to implement offsetof in standard C. The previous definition that uses NULL pointer involves subtle undefined behavior in C and thus reported by UndefinedBehaviorSanitizer as well: ``` rts/Capability.h:243:58: runtime error: member access within null pointer of type 'Capability' (aka 'struct Capability_') SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Capability.h:243:58 ``` - - - - - 5ff83bfc by Sylvain Henry at 2024-05-30T14:43:10-04:00 JS: remove useless h$CLOCK_REALTIME (#23202) - - - - - 95ef2d58 by Matthew Pickering at 2024-05-30T14:43:47-04:00 ghcup-metadata: Fix metadata generation There were some syntax errors in the generation script which were preventing it from running. I have tested this with: ``` nix shell --extra-experimental-features nix-command -f .gitlab/rel_eng -c ghcup-metadata --metadata ghcup-0.0.7.yaml --date="2024-05-27" --pipeline-id=95534 --version=9.11.20240525 ``` which completed successfully. - - - - - 1bc66ee4 by Jakob Bruenker at 2024-05-30T14:44:22-04:00 Add diagrams to Arrows documentation This adds diagrams to the documentation of Arrows, similar to the ones found on https://www.haskell.org/arrows/. It does not add diagrams for ArrowChoice for the time being, mainly because it's not clear to me how to visually distinguish them from the ones for Arrow. Ideally, you might want to do something like highlight the arrows belonging to the same tuple or same Either in common colors, but that's not really possible with unicode. - - - - - d10a1c65 by Matthew Craven at 2024-05-30T23:35:48-04:00 Make UnsafeSNat et al. into pattern synonyms ...so that they do not cause coerce to bypass the nominal role on the corresponding singleton types when they are imported. See Note [Preventing unsafe coercions for singleton types] and the discussion at #23478. This also introduces unsafeWithSNatCo (and analogues for Char and Symbol) so that users can still access the dangerous coercions that importing the real constructors would allow, but only in a very localized way. - - - - - 0958937e by Cheng Shao at 2024-05-30T23:36:25-04:00 hadrian: build C/C++ with split sections when enabled When split sections is enabled, ensure -fsplit-sections is passed to GHC as well when invoking GHC to compile C/C++; and pass -ffunction-sections -fdata-sections to gcc/clang when compiling C/C++ with the hadrian Cc builder. Fixes #23381. - - - - - 02b1f91e by Cheng Shao at 2024-05-30T23:36:25-04:00 driver: build C/C++ with -ffunction-sections -fdata-sections when split sections is enabled When -fsplit-sections is passed to GHC, pass -ffunction-sections -fdata-sections to gcc/clang when building C/C++. Previously, -fsplit-sections was only respected by the NCG/LLVM backends, but not the unregisterised backend; the GHC driver did not pass -fdata-sections and -ffunction-sections to the C compiler, which resulted in excessive executable sizes. Fixes #23381. ------------------------- Metric Decrease: size_hello_artifact size_hello_unicode ------------------------- - - - - - fd47e2e3 by Cheng Shao at 2024-05-30T23:37:00-04:00 testsuite: mark process005 as fragile on JS - - - - - 34a04ea1 by Matthew Pickering at 2024-05-31T06:08:36-04:00 Add -Wderiving-typeable to -Wall Deriving `Typeable` does nothing, and it hasn't done for a long while. There has also been a warning for a long while which warns you about uselessly deriving it but it wasn't enabled in -Wall. Fixes #24784 - - - - - 75fa7b0b by Matthew Pickering at 2024-05-31T06:08:36-04:00 docs: Fix formatting of changelog entries - - - - - 303c4b33 by Preetham Gujjula at 2024-05-31T06:09:21-04:00 docs: Fix link to injective type families paper Closes #24863 - - - - - df97e9a6 by Ben Gamari at 2024-05-31T06:09:57-04:00 ghc-internal: Fix package description The previous description was inherited from `base` and was inappropriate for `ghc-internal`. Also fix the maintainer and bug reporting fields. Closes #24906. - - - - - bf0737c0 by Cheng Shao at 2024-05-31T06:10:33-04:00 compiler: remove ArchWasm32 special case in cmmDoCmmSwitchPlans This patch removes special consideration for ArchWasm32 in cmmDoCmmSwitchPlans, which means the compiler will now disable cmmImplementSwitchPlans for wasm unreg backend, just like unreg backend of other targets. We enabled it in the past to workaround some compile-time panic in older versions of LLVM, but those panics are no longer present, hence no need to keep this workaround. - - - - - 7eda4bd2 by Cheng Shao at 2024-05-31T15:52:04-04:00 utils: add hie.yaml config file for ghc-config Add hie.yaml to ghc-config project directory so it can be edited using HLS. - - - - - 1e5752f6 by Cheng Shao at 2024-05-31T15:52:05-04:00 hadrian: handle findExecutable "" gracefully hadrian may invoke findExecutable "" at run-time due to a certain program is not found by configure script. Which is fine and findExecutable is supposed to return Nothing in this case. However, on Windows there's a directory bug that throws an exception (see https://github.com/haskell/directory/issues/180), so we might as well use a wrapper for findExecutable and handle exceptions gracefully. - - - - - 4eb5ad09 by Cheng Shao at 2024-05-31T15:52:05-04:00 configure: do not set LLC/OPT/LLVMAS fallback values when FIND_LLVM_PROG fails When configure fails to find LLC/OPT/LLVMAS within supported version range, it used to set "llc"/"opt"/"clang" as fallback values. This behavior is particularly troublesome when the user has llc/opt/clang with other versions in their PATH and run the testsuite, since hadrian will incorrectly assume have_llvm=True and pass that to the testsuite driver, resulting in annoying optllvm test failures (#23186). If configure determines llc/opt/clang wouldn't work, then we shouldn't pretend it'll work at all, and the bindist configure will invoke FIND_LLVM_PROG check again at install time anyway. - - - - - 5f1afdf7 by Sylvain Henry at 2024-05-31T15:52:52-04:00 Introduce UniqueSet and use it to replace 'UniqSet Unique' 'UniqSet Unique' represents a set of uniques as a 'Map Unique Unique', which is wasting space (associated key/value are always the same). Fix #23572 and #23605 - - - - - e0aa42b9 by crumbtoo at 2024-05-31T15:53:33-04:00 Improve template-haskell haddocks Closes #15822 - - - - - ae170155 by Olivier Benz at 2024-06-01T09:35:17-04:00 Bump max LLVM version to 19 (not inclusive) - - - - - 92aa65ea by Matthew Pickering at 2024-06-01T09:35:17-04:00 ci: Update CI images to test LLVM 18 The debian12 image in this commit has llvm 18 installed. - - - - - adb1fe42 by Serge S. Gulin at 2024-06-01T09:35:53-04:00 Unicode: make ucd2haskell build-able again ucd2haskell tool used streamly library which version in cabal was out of date. It is updated to the latest version at hackage with deprecated parts rewritten. Also following fixes were applied to existing code in suppose that from its last run the code structure was changed and now it was required to be up to date with actual folder structures: 1. Ghc module path environment got a suffix with `src`. 2. Generated code got 2.1 `GHC.Internal` prefix for `Data.*`. 2.2 `GHC.Unicode.Internal` swapped on `GHC.Internal.Unicode` according to actual structure. - - - - - ad56fd84 by Jade at 2024-06-01T09:36:29-04:00 Replace 'NB' with 'Note' in error messages - - - - - 6346c669 by Cheng Shao at 2024-06-01T09:37:04-04:00 compiler: fix -ddump-cmm-raw when compiling .cmm This patch fixes missing -ddump-cmm-raw output when compiling .cmm, which is useful for debugging cmm related codegen issues. - - - - - 1c834ad4 by Ryan Scott at 2024-06-01T09:37:40-04:00 Print namespace specifiers in FixitySig's Outputable instance For whatever reason, the `Outputable` instance for `FixitySig` simply did not print out namespace specifiers, leading to the confusing `-ddump-splices` output seen in #24911. This patch corrects this oversight. Fixes #24911. - - - - - cf49fb5f by Sylvain Henry at 2024-06-01T09:38:19-04:00 Configure: display C++ compiler path - - - - - f9c1ae12 by Cheng Shao at 2024-06-02T14:01:55-04:00 hadrian: disable PIC for in-tree GMP on wasm32 This patch disables PIC for in-tree GMP on wasm32 target. Enabling PIC unconditionally adds undesired code size and runtime overhead for wasm32. - - - - - 1a32f828 by Cheng Shao at 2024-06-02T14:01:55-04:00 hadrian: disable in-tree gmp fft code path for wasm32 This patch disables in-tree GMP FFT code paths for wasm32 target in order to give up some performance of multiplying very large operands in exchange for reduced code size. - - - - - 06277d56 by Cheng Shao at 2024-06-02T14:01:55-04:00 hadrian: build in-tree GMP with malloc-notreentrant on wasm32 This patch makes hadrian build in-tree GMP with the --enable-alloca=malloc-notreentrant configure option. We will only need malloc-reentrant when we have threaded RTS and SMP support on wasm32, which will take some time to happen, before which we should use malloc-notreentrant to avoid undesired runtime overhead. - - - - - 9f614270 by ARATA Mizuki at 2024-06-02T14:02:35-04:00 Set package include paths when assembling .S files Fixes #24839. Co-authored-by: Sylvain Henry <hsyl20 at gmail.com> - - - - - 4998a6ed by Alex Mason at 2024-06-03T02:09:29-04:00 Improve performance of genericWordQuotRem2Op (#22966) Implements the algorithm from compiler-rt's udiv128by64to64default. This rewrite results in a roughly 24x improvement in runtime on AArch64 (and likely any other arch that uses it). - - - - - ae50a8eb by Cheng Shao at 2024-06-03T02:10:05-04:00 testsuite: mark T7773 as fragile on wasm - - - - - c8ece0df by Fendor at 2024-06-03T19:43:22-04:00 Migrate `Finder` component to `OsPath`, fixed #24616 For each module in a GHCi session, we keep alive one `ModLocation`. A `ModLocation` is fairly inefficiently packed, as `String`s are expensive in memory usage. While benchmarking the agda codebase, we concluded that we keep alive around 11MB of `FilePath`'s, solely retained by `ModLocation`. We provide a more densely packed encoding of `ModLocation`, by moving from `FilePath` to `OsPath`. Further, we migrate the full `Finder` component to `OsPath` to avoid unnecessary transformations. As the `Finder` component is well-encapsulated, this requires only a minimal amount of changes in other modules. We introduce pattern synonym for 'ModLocation' which maintains backwards compatibility and avoids breaking consumers of 'ModLocation'. - - - - - 0cff083a by Cheng Shao at 2024-06-03T19:43:58-04:00 compiler: emit NaturallyAligned when element type & index type are the same width This commit fixes a subtle mistake in alignmentFromTypes that used to generate Unaligned when element type & index type are the same width. Fixes #24930. - - - - - 18f63970 by Sebastian Graf at 2024-06-04T05:05:27-04:00 Parser: Remove unused `apats` rule - - - - - 38757c30 by David Knothe at 2024-06-04T05:05:27-04:00 Implement Or Patterns (#22596) This commit introduces a new language extension, `-XOrPatterns`, as described in GHC Proposal 522. An or-pattern `pat1; ...; patk` succeeds iff one of the patterns `pat1`, ..., `patk` succeed, in this order. See also the summary `Note [Implmentation of OrPatterns]`. Co-Authored-By: Sebastian Graf <sgraf1337 at gmail.com> - - - - - 395412e8 by Cheng Shao at 2024-06-04T05:06:04-04:00 compiler/ghci/rts: remove stdcall support completely We have formally dropped i386 windows support (#18487) a long time ago. The stdcall foreign call convention is only used by i386 windows, and the legacy logic around it is a significant maintenance burden for future work that adds arm64 windows support (#24603). Therefore, this patch removes stdcall support completely from the compiler as well as the RTS (#24883): - stdcall is still recognized as a FFI calling convention in Haskell syntax. GHC will now unconditionally emit a warning (-Wunsupported-calling-conventions) and treat it as ccall. - Apart from minimum logic to support the parsing and warning logic, all other code paths related to stdcall has been completely stripped from the compiler. - ghci only supports FFI_DEFAULT_ABI and ccall convention from now on. - FFI foreign export adjustor code on all platforms no longer handles the stdcall case and only handles ccall from now on. - The Win32 specific parts of RTS no longer has special code paths for stdcall. This commit is the final nail on the coffin for i386 windows support. Further commits will perform more housecleaning to strip the legacy code paths and pave way for future arm64 windows support. - - - - - d1fe9ab6 by Cheng Shao at 2024-06-04T05:06:04-04:00 rts: remove legacy i386 windows code paths This commit removes some legacy i386 windows related code paths in the RTS, given this target is no longer supported. - - - - - a605e4b2 by Cheng Shao at 2024-06-04T05:06:04-04:00 autoconf: remove i386 windows related logic This commit removes legacy i386 windows logic in autoconf scripts. - - - - - 91e5ac5e by Cheng Shao at 2024-06-04T05:06:04-04:00 llvm-targets: remove i386 windows support This commit removes i386 windows from llvm-targets and the script to generate it. - - - - - 65fe75a4 by Cheng Shao at 2024-06-04T05:06:04-04:00 libraries/utils: remove stdcall related legacy logic This commit removes stdcall related legacy logic in libraries and utils. ccall should be used uniformly for all supported windows hosts from now on. - - - - - d2a83302 by Cheng Shao at 2024-06-04T05:06:04-04:00 testsuite: adapt the testsuite for stdcall removal This patch adjusts test cases to handle the stdcall removal: - Some stdcall usages are replaced with ccall since stdcall doesn't make sense anymore. - We also preserve some stdcall usages, and check in the expected warning messages to ensure GHC always warn about stdcall usages (-Wunsupported-calling-conventions) as expected. - Error code testsuite coverage is slightly improved, -Wunsupported-calling-conventions is now tested. - Obsolete code paths related to i386 windows are also removed. - - - - - cef8f47a by Cheng Shao at 2024-06-04T05:06:04-04:00 docs: minor adjustments for stdcall removal This commit include minor adjustments of documentation related to stdcall removal. - - - - - 54332437 by Cheng Shao at 2024-06-04T05:06:04-04:00 docs: mention i386 Windows removal in 9.12 changelog This commit mentions removal of i386 Windows support and stdcall related change in the 9.12 changelog. - - - - - 2aaea8a1 by Cheng Shao at 2024-06-04T05:06:40-04:00 hadrian: improve user settings documentation This patch adds minor improvements to hadrian user settings documentation: - Add missing `ghc.cpp.opts` case - Remove non-existent `cxx` case - Clarify `cc.c.opts` also works for C++, while `cc.deps.opts` doesn't - Add example of passing configure argument to autoconf packages - - - - - 71010381 by Alex Mason at 2024-06-04T12:09:07-04:00 Add AArch64 CLZ, CTZ, RBIT primop implementations. Adds support for emitting the clz and rbit instructions, which are used by GHC.Prim.clz*#, GHC.Prim.ctz*# and GHC.Prim.bitReverse*#. - - - - - 44e2abfb by Cheng Shao at 2024-06-04T12:09:43-04:00 hadrian: add +text_simdutf flavour transformer to allow building text with simdutf This patch adds a +text_simdutf flavour transformer to hadrian to allow downstream packagers and users that build from source to opt-in simdutf support for text, in order to benefit from SIMD speedup at run-time. It's still disabled by default for the time being. - - - - - 077cb2e1 by Cheng Shao at 2024-06-04T12:09:43-04:00 ci: enable +text_simdutf flavour transformer for wasm jobs This commit enables +text_simdutf flavour transformer for wasm jobs, so text is now built with simdutf support for wasm. - - - - - b23746ad by Teo Camarasu at 2024-06-04T22:50:50-04:00 base: Use TemplateHaskellQuotes in instance Lift ByteArray Resolves #24852 - - - - - 3fd25743 by Teo Camarasu at 2024-06-04T22:50:50-04:00 base: Mark addrToByteArray as NOINLINE This function should never be inlined in order to keep code size small. - - - - - 98ad1ea5 by Cheng Shao at 2024-06-04T22:51:26-04:00 compiler: remove unused CompilerInfo/LinkerInfo types This patch removes CompilerInfo/LinkerInfo types from the compiler since they aren't actually used anywhere. - - - - - 11795244 by Cheng Shao at 2024-06-05T06:33:17-04:00 rts: remove unused PowerPC/IA64 native adjustor code This commit removes unused PowerPC/IA64 native adjustor code which is never actually enabled by autoconf/hadrian. Fixes #24920. - - - - - 5132754b by Sylvain Henry at 2024-06-05T06:33:57-04:00 RTS: fix warnings with doing*Profiling (#24918) - - - - - accc8c33 by Cheng Shao at 2024-06-05T11:35:36-04:00 hadrian: don't depend on inplace/mingw when --enable-distro-toolchain on Windows - - - - - 6ffbd678 by Cheng Shao at 2024-06-05T11:35:37-04:00 autoconf: normalize paths of some build-time dependencies on Windows This commit applies path normalization via cygpath -m to some build-time dependencies on Windows. Without this logic, the /clang64/bin prefixed msys2-style paths cause the build to fail with --enable-distro-toolchain. - - - - - 075dc6d4 by Cheng Shao at 2024-06-05T11:36:12-04:00 hadrian: remove OSDarwin mention from speedHack This commit removes mentioning of OSDarwin from speedHack, since speedHack is purely for i386 and we no longer support i386 darwin (#24921). - - - - - 83235c4c by Cheng Shao at 2024-06-05T11:36:12-04:00 compiler: remove 32-bit darwin logic This commit removes all 32-bit darwin logic from the compiler, given we no longer support 32-bit apple systems (#24921). Also contains a bit more cleanup of obsolete i386 windows logic. - - - - - 1eb99bc3 by Cheng Shao at 2024-06-05T11:36:12-04:00 rts: remove 32-bit darwin/ios logic This commit removes 32-bit darwin/ios related logic from the rts, given we no longer support them (#24921). - - - - - 24f65892 by Cheng Shao at 2024-06-05T11:36:12-04:00 llvm-targets: remove 32-bit darwin/ios targets This commit removes 32-bit darwin/ios targets from llvm-targets given we no longer support them (#24921). - - - - - ccdbd689 by Cheng Shao at 2024-06-05T11:36:12-04:00 testsuite: remove 32-bit darwin logic This commit removes 32-bit darwin logic from the testsuite given it's no longer supported (#24921). Also contains more cleanup of obsolete i386 windows logic. - - - - - 11d661c4 by Cheng Shao at 2024-06-05T11:36:13-04:00 docs: mention 32-bit darwin/ios removal in 9.12 changelog This commit mentions removal of 32-bit darwin/ios support (#24921) in the 9.12 changelog. - - - - - 7c173310 by Georgi Lyubenov at 2024-06-05T15:17:22-04:00 Add firstA and secondA to Data.Bitraversable Please see https://github.com/haskell/core-libraries-committee/issues/172 for related discussion - - - - - 3b6f9fd1 by Ben Gamari at 2024-06-05T15:17:59-04:00 base: Fix name of changelog Fixes #24899. Also place it under `extra-doc-files` to better reflect its nature and avoid triggering unnecessary recompilation if it changes. - - - - - 1f4d2ef7 by Sebastian Graf at 2024-06-05T15:18:34-04:00 Announce Or-patterns in the release notes for GHC 9.12 (#22596) Leftover from !9229. - - - - - 8650338d by Jan Hrček at 2024-06-06T10:39:24-04:00 Improve haddocks of Language.Haskell.Syntax.Pat.Pat - - - - - 2eee65e1 by Cheng Shao at 2024-06-06T10:40:00-04:00 testsuite: bump T7653 timeout for wasm - - - - - 990fed60 by Sylvain Henry at 2024-06-07T14:45:23-04:00 StgToCmm: refactor opTranslate and friends - Change arguments order to avoid `\args -> ...` lambdas - Fix documentation - Rename StgToCmm options ("big" doesn't mean anything) - - - - - 1afad514 by Sylvain Henry at 2024-06-07T14:45:23-04:00 NCG x86: remove dead code (#5444) Since 6755d833af8c21bbad6585144b10e20ac4a0a1ab this code is dead. - - - - - 595c0894 by Cheng Shao at 2024-06-07T14:45:58-04:00 testsuite: skip objc-hi/objcxx-hi when cross compiling objc-hi/objcxx-hi should be skipped when cross compiling. The existing opsys('darwin') predicate only asserts the host system is darwin but tells us nothing about the target, hence the oversight. - - - - - edfe6140 by qqwy at 2024-06-08T11:23:54-04:00 Replace '?callStack' implicit param with HasCallStack in GHC.Internal.Exception.throw - - - - - 35a64220 by Cheng Shao at 2024-06-08T11:24:30-04:00 rts: cleanup inlining logic This patch removes pre-C11 legacy code paths related to INLINE_HEADER/STATIC_INLINE/EXTERN_INLINE macros, ensure EXTERN_INLINE is treated as static inline in most cases (fixes #24945), and also corrects the comments accordingly. - - - - - 9ea90ed2 by Andrew Lelechenko at 2024-06-08T11:25:06-04:00 CODEOWNERS: add @core-libraries to track base interface changes A low-tech tactical solution for #24919 - - - - - 580fef7b by Ben Gamari at 2024-06-09T01:27:21-04:00 ghc-internal: Update CHANGELOG to reflect current version - - - - - 391ecff5 by Ben Gamari at 2024-06-09T01:27:21-04:00 ghc-internal: Update prologue.txt to reflect package description - - - - - 3dca3b7d by Ben Gamari at 2024-06-09T01:27:57-04:00 compiler: Clarify comment regarding need for MOVABS The comment wasn't clear in stating that it was only applicable to immediate source and memory target operands. - - - - - 6bd850e8 by doyougnu at 2024-06-09T21:02:14-04:00 JS: establish single source of truth for symbols In pursuit of: #22736. This MR moves ad-hoc symbols used throughout the js backend into a single symbols file. Why? First, this cleans up the code by removing ad-hoc strings created on the fly and therefore makes the code more maintainable. Second, it makes it much easier to eventually type these identifiers. - - - - - f3017dd3 by Cheng Shao at 2024-06-09T21:02:49-04:00 rts: replace ad-hoc MYTASK_USE_TLV with proper CC_SUPPORTS_TLS This patch replaces the ad-hoc `MYTASK_USE_TLV` with the `CC_SUPPORTS_TLS` macro. If TLS support is detected by autoconf, then we should use that for managing `myTask` in the threaded RTS. - - - - - e17d7e8c by Ben Gamari at 2024-06-11T05:25:21-04:00 users-guide: Fix stylistic issues in 9.12 release notes - - - - - 8a8a982a by Hugo Peters at 2024-06-11T05:25:57-04:00 fix typo in the simplifier debug output: baling -> bailing - - - - - 16475bb8 by Hécate Moonlight at 2024-06-12T03:07:55-04:00 haddock: Correct the Makefile to take into account Darwin systems - - - - - a2f60da5 by Hécate Kleidukos at 2024-06-12T03:08:35-04:00 haddock: Remove obsolete links to github.com/haskell/haddock in the docs - - - - - de4395cd by qqwy at 2024-06-12T03:09:12-04:00 Add `__GLASGOW_HASKELL_ASSERTS_IGNORED__` as CPP macro name if `-fasserts-ignored is set. This allows users to create their own Control.Exception.assert-like functionality that does something other than raising an `AssertFailed` exception. Fixes #24967 - - - - - 0e9c4dee by Ryan Hendrickson at 2024-06-12T03:09:53-04:00 compiler: add hint to TcRnBadlyStaged message - - - - - 2747cd34 by Simon Peyton Jones at 2024-06-12T12:51:37-04:00 Fix a QuickLook bug This MR fixes the bug exposed by #24676. The problem was that quickLookArg was trying to avoid calling tcInstFun unnecessarily; but it was in fact necessary. But that in turn forced me into a significant refactoring, putting more fields into EValArgQL. Highlights: see Note [Quick Look overview] in GHC.Tc.Gen.App * Instantiation variables are now distinguishable from ordinary unification variables, by level number = QLInstVar. This is treated like "level infinity". See Note [The QLInstVar TcLevel] in GHC.Tc.Utils.TcType. * In `tcApp`, we don't track the instantiation variables in a set Delta any more; instead, we just tell them apart by their level number. * EValArgQL now much more clearly captures the "half-done" state of typechecking an argument, ready for later resumption. See Note [Quick Look at value arguments] in GHC.Tc.Gen.App * Elminated a bogus (never used) fast-path in GHC.Tc.Utils.Instantiate.instCallConstraints See Note [Possible fast path for equality constraints] Many other small refactorings. - - - - - 1b1523b1 by George Thomas at 2024-06-12T12:52:18-04:00 Fix non-compiling extensible record `HasField` example - - - - - 97b141a3 by Zubin Duggal at 2024-06-12T12:52:55-04:00 haddock: Fix hyperlinker source urls (#24907) This fixes a bug introduced by f56838c36235febb224107fa62334ebfe9941aba Links to external modules in the hyperlinker are uniformly generated using splicing the template given to us instead of attempting to construct the url in an ad-hoc manner. - - - - - 954f864c by Zubin Duggal at 2024-06-12T12:52:55-04:00 haddock: Add name anchor to external source urls from documentation page URLs for external source links from documentation pages were missing a splice location for the name. Fixes #24912 - - - - - b0b64177 by Simon Peyton Jones at 2024-06-12T12:53:31-04:00 Prioritise nominal equalities The main payload of this patch is * Prioritise nominal equalities in the constraint solver. This ameliorates the incompleteness of solving for representational constraints over newtypes: see #24887. See (EX2) in Note [Decomposing newtype equalities] in GHC.Tc.Solver.Equality In doing this patch I tripped over some other things that I refactored: * Move `isCoVarType` from `GHC.Core.Type` to `GHC.Core.Predicate` where it seems more at home. * Clarify the "rewrite role" of a constraint. I was very puzzled about what the role of, say `(Eq a)` might be, but see the new Note [The rewrite-role of a constraint]. In doing so I made predTypeEqRel crash when given a non-equality. Usually it expects an equality; but it was being mis-used for the above rewrite-role stuff. - - - - - cb7c1b83 by Liam Goodacre at 2024-06-12T12:54:09-04:00 compiler: missing-deriving-strategies suggested fix Extends the missing-deriving-strategies warning with a suggested fix that includes which deriving strategies were assumed. For info about the warning, see comments for `TcRnNoDerivStratSpecified`, `TcRnNoDerivingClauseStrategySpecified`, & `TcRnNoStandaloneDerivingStrategySpecified`. For info about the suggested fix, see `SuggestExplicitDerivingClauseStrategies` & `SuggestExplicitStandalanoDerivingStrategy`. docs: Rewords missing-deriving-strategies to mention the suggested fix. Resolves #24955 - - - - - 4e36d3a3 by Jan Hrček at 2024-06-12T12:54:48-04:00 Further haddocks improvements in Language.Haskell.Syntax.Pat.Pat - - - - - 558353f4 by Cheng Shao at 2024-06-12T12:55:24-04:00 rts: use page sized mblocks on wasm This patch changes mblock size to page size on wasm. It allows us to simplify our wasi-libc fork, makes it much easier to test third party libc allocators like emmalloc/mimalloc, as well as experimenting with threaded RTS in wasm. - - - - - b3cc5366 by Matthew Pickering at 2024-06-12T23:06:57-04:00 compiler: Make ghc-experimental not wired in If you need to wire in definitions, then place them in ghc-internal and reexport them from ghc-experimental. Ticket #24903 - - - - - 700eeab9 by Hécate Kleidukos at 2024-06-12T23:07:37-04:00 base: Use a more appropriate unicode arrow for the ByteArray diagram This commit rectifies the usage of a unicode arrow in favour of one that doesn't provoke mis-alignment. - - - - - cca7de25 by Matthew Pickering at 2024-06-12T23:08:14-04:00 ghcup-metadata: Fix debian version ranges This was caught by `ghcup-ci` failing and attempting to install a deb12 bindist on deb11. ``` configure: WARNING: m4/prep_target_file.m4: Expecting YES/NO but got in ArSupportsDashL_STAGE0. Defaulting to False. bin/ghc-toolchain-bin: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by bin/ghc-toolchain-bin) bin/ghc-toolchain-bin: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /tmp/tmp.LBhwvFbVoy/foobarbaz/.ghcup/tmp/ghcup-708d9668d5d82287/ghc-9.11.20240609-x86_64-unknown-linux/bin/../lib/x86_64-linux-ghc-9.11.20240609/libHSunix-2.8.5.1-inplace-ghc9.11.20240609.so) bin/ghc-toolchain-bin: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /tmp/tmp.LBhwvFbVoy/foobarbaz/.ghcup/tmp/ghcup-708d9668d5d82287/ghc-9.11.20240609-x86_64-unknown-linux/bin/../lib/x86_64-linux-ghc-9.11.20240609/libHSunix-2.8.5.1-inplace-ghc9.11.20240609.so) ``` Fixes #24974 - - - - - 7b23ce8b by Pierre Le Marre at 2024-06-13T15:35:04-04:00 ucd2haskell: remove Streamly dependency + misc - Remove dead code. - Remove `streamly` dependency. - Process files with `bytestring`. - Replace Unicode files parsers with the corresponding ones from the package `unicode-data-parser`. - Simplify cabal file and rename module - Regenerate `ghc-internal` Unicode files with new header - - - - - 4570319f by Jacco Krijnen at 2024-06-13T15:35:41-04:00 Document how to run haddocks tests (#24976) Also remove ghc 9.7 requirement - - - - - fb629e24 by amesgen at 2024-06-14T00:28:20-04:00 compiler: refactor lower_CmmExpr_Ptr - - - - - def46c8c by amesgen at 2024-06-14T00:28:20-04:00 compiler: handle CmmRegOff in lower_CmmExpr_Ptr - - - - - ce76bf78 by Simon Peyton Jones at 2024-06-14T00:28:56-04:00 Small documentation update in Quick Look - - - - - 19bcfc9b by Simon Peyton Jones at 2024-06-14T14:44:19-04:00 Add hack for #24623 ..Th bug in #24623 is randomly triggered by this MR!.. - - - - - 7a08a025 by Simon Peyton Jones at 2024-06-14T14:44:19-04:00 Various fixes to type-tidying This MR was triggered by #24868, but I found a number of bugs and infelicities in type-tidying as I went along. Highlights: * Fix to #24868 is in GHC.Tc.Errors.report_unsolved: avoid using the OccNames of /bound/ variables when tidying /free/ variables; see the call to `tidyAvoiding`. That avoid the gratuitous renaming which was the cause of #24868. See Note [tidyAvoiding] in GHC.Core.TyCo.Tidy * Refactor and document the tidying of open types. See GHC.Core.TyCo.Tidy Note [Tidying open types] Note [Tidying is idempotent] * Tidy the coercion variable in HoleCo. That's important so that tidied types have tidied kinds. * Some small renaming to make things consistent. In particular the "X" forms return a new TidyEnv. E.g. tidyOpenType :: TidyEnv -> Type -> Type tidyOpenTypeX :: TidyEnv -> Type -> (TidyEnv, Type) - - - - - 2eac0288 by Simon Peyton Jones at 2024-06-14T14:44:19-04:00 Wibble - - - - - e5d24cc2 by Simon Peyton Jones at 2024-06-14T14:44:20-04:00 Wibbles - - - - - 246bc3a4 by Simon Peyton Jones at 2024-06-14T14:44:56-04:00 Localise a case-binder in SpecConstr.mkSeqs This small change fixes #24944 See (SCF1) in Note [SpecConstr and strict fields] - - - - - a5994380 by Sylvain Henry at 2024-06-15T03:20:29-04:00 PPC: display foreign label in panic message (cf #23969) - - - - - bd95553a by Rodrigo Mesquita at 2024-06-15T03:21:06-04:00 cmm: Parse MO_BSwap primitive operation Parsing this operation allows it to be tested using `test-primops` in a subsequent MR. - - - - - e0099721 by Andrew Lelechenko at 2024-06-16T17:57:38-04:00 Make flip representation polymorphic, similar to ($) and (&) CLC proposal: https://github.com/haskell/core-libraries-committee/issues/245 - - - - - 118a1292 by Alan Zimmerman at 2024-06-16T17:58:15-04:00 EPA: Add location to Match Pats list So we can freely modify the pats and the following item spacing will still be valid when exact printing. Closes #24862 - - - - - db343324 by Fabricio de Sousa Nascimento at 2024-06-17T10:01:51-04:00 compiler: Rejects RULES whose LHS immediately fails to type-check Fixes GHC crashing on `decomposeRuleLhs` due to ignoring coercion values. This happens when we have a RULE that does not type check, and enable `-fdefer-type-errors`. We prevent this to happen by rejecting RULES with an immediately LHS type error. Fixes #24026 - - - - - e7a95662 by Dylan Thinnes at 2024-06-17T10:02:35-04:00 Add hscTypecheckRenameWithDiagnostics, for HLS (#24996) Use runHsc' in runHsc so that both functions can't fall out of sync We're currently copying parts of GHC code to get structured warnings in HLS, so that we can recreate `hscTypecheckRenameWithDiagnostics` locally. Once we get this function into GHC we can drop the copied code in future versions of HLS. - - - - - d70abb49 by sheaf at 2024-06-18T18:47:20-04:00 Clarify -XGADTs enables existential quantification Even though -XGADTs does not turn on -XExistentialQuantification, it does allow the user of existential quantification syntax, without needing to use GADT-style syntax. Fixes #20865 - - - - - 13fdf788 by David Binder at 2024-06-18T18:48:02-04:00 Add RTS flag --read-tix-file (GHC Proposal 612) This commit introduces the RTS flag `--read-tix-file=<yes|no>` which controls whether a preexisting .tix file is read in at the beginning of a program run. The default is currently `--read-tix-file=yes` but will change to `--read-tix-file=no` in a future release of GHC. For this reason, whenever a .tix file is read in a warning is emitted to stderr. This warning can be silenced by explicitly passing the `--read-tix-file=yes` option. Details can be found in the GHC proposal cited below. Users can query whether this flag has been used with the help of the module `GHC.RTS.Flags`. A new field `readTixFile` was added to the record `HpcFlags`. These changes have been discussed and approved in - GHC proposal 612: https://github.com/ghc-proposals/ghc-proposals/pull/612 - CLC proposal 276: https://github.com/haskell/core-libraries-committee/issues/276 - - - - - f0e3cb6a by Fendor at 2024-06-18T18:48:38-04:00 Improve sharing of duplicated values in `ModIface`, fixes #24723 As a `ModIface` often contains duplicated values that are not necessarily shared, we improve sharing by serialising the `ModIface` to an in-memory byte array. Serialisation uses deduplication tables, and deserialisation implicitly shares duplicated values. This helps reducing the peak memory usage while compiling in `--make` mode. The peak memory usage is especially smaller when generating interface files with core expressions (`-fwrite-if-simplified-core`). On agda, this reduces the peak memory usage: * `2.2 GB` to `1.9 GB` for a ghci session. On `lib:Cabal`, we report: * `570 MB` to `500 MB` for a ghci session * `790 MB` to `667 MB` for compiling `lib:Cabal` with ghc There is a small impact on execution time, around 2% on the agda code base. - - - - - 1bab7dde by Fendor at 2024-06-18T18:48:38-04:00 Avoid unneccessarily re-serialising the `ModIface` To reduce memory usage of `ModIface`, we serialise `ModIface` to an in-memory byte array, which implicitly shares duplicated values. This serialised byte array can be reused to avoid work when we actually write the `ModIface` to disk. We introduce a new field to `ModIface` which allows us to save the byte array, and write it direclty to disk if the `ModIface` wasn't changed after the initial serialisation. This requires us to change absolute offsets, for example to jump to the deduplication table for `Name` or `FastString` with relative offsets, as the deduplication byte array doesn't contain header information, such as fingerprints. To allow us to dump the binary blob to disk, we need to replace all absolute offsets with relative ones. We introduce additional helpers for `ModIface` binary serialisation, which construct relocatable binary blobs. We say the binary blob is relocatable, if the binary representation can be moved and does not contain any absolute offsets. Further, we introduce new primitives for `Binary` that allow to create relocatable binaries, such as `forwardGetRel` and `forwardPutRel`. ------------------------- Metric Decrease: MultiLayerModulesDefsGhcWithCore Metric Increase: MultiComponentModules MultiLayerModules T10421 T12150 T12234 T12425 T13035 T13253-spj T13701 T13719 T14697 T15703 T16875 T18698b T18140 T18304 T18698a T18730 T18923 T20049 T24582 T5837 T6048 T9198 T9961 mhu-perf ------------------------- These metric increases may look bad, but they are all completely benign, we simply allocate 1 MB per module for `shareIface`. As this allocation is quite quick, it has a negligible impact on run-time performance. In fact, the performance difference wasn't measurable on my local machine. Reducing the size of the pre-allocated 1 MB buffer avoids these test failures, but also requires us to reallocate the buffer if the interface file is too big. These reallocations *did* have an impact on performance, which is why I have opted to accept all these metric increases, as the number of allocated bytes is merely a guidance. This 1MB allocation increase causes a lot of tests to fail that generally have a low allocation number. E.g., increasing from 40MB to 41MB is a 2.5% increase. In particular, the tests T12150, T13253-spj, T18140, T18304, T18698a, T18923, T20049, T24582, T5837, T6048, and T9961 only fail on i386-darwin job, where the number of allocated bytes seems to be lower than in other jobs. The tests T16875 and T18698b fail on i386-linux for the same reason. - - - - - 099992df by Andreas Klebinger at 2024-06-18T18:49:14-04:00 Improve documentation of @Any@ type. In particular mention possible uses for non-lifted types. Fixes #23100. - - - - - 5e75412b by Jakob Bruenker at 2024-06-18T18:49:51-04:00 Update user guide to indicate support for 64-tuples - - - - - 4f5da595 by Andreas Klebinger at 2024-06-18T18:50:28-04:00 lint notes: Add more info to notes.stdout When fixing a note reference CI fails with a somewhat confusing diff. See #21123. This commit adds a line to the output file being compared which hopefully makes it clear this is the list of broken refs, not all refs. Fixes #21123 - - - - - 1eb15c61 by Jakob Bruenker at 2024-06-18T18:51:04-04:00 docs: Update mention of ($) type in user guide Fixes #24909 - - - - - 1d66c9e3 by Jan Hrček at 2024-06-18T18:51:47-04:00 Remove duplicate Anno instances - - - - - 8ea0ba95 by Sven Tennie at 2024-06-18T18:52:23-04:00 AArch64: Delete unused RegNos This has the additional benefit of getting rid of the -1 encoding (real registers start at 0.) - - - - - 325422e0 by Sjoerd Visscher at 2024-06-18T18:53:04-04:00 Bump stm submodule to current master - - - - - 64fba310 by Cheng Shao at 2024-06-18T18:53:40-04:00 testsuite: bump T17572 timeout on wasm32 - - - - - eb612fbc by Sven Tennie at 2024-06-19T06:46:00-04:00 AArch64: Simplify BL instruction The BL constructor carried unused data in its third argument. - - - - - b0300503 by Alan Zimmerman at 2024-06-19T06:46:36-04:00 TTG: Move SourceText from `Fixity` to `FixitySig` It is only used there, simplifies the use of `Fixity` in the rest of the code, and is moved into a TTG extension point. Precedes !12842, to simplify it - - - - - 842e119b by Rodrigo Mesquita at 2024-06-19T06:47:13-04:00 base: Deprecate some .Internal modules Deprecates the following modules according to clc-proposal #217: https://github.com/haskell/core-libraries-committee/issues/217 * GHC.TypeNats.Internal * GHC.TypeLits.Internal * GHC.ExecutionStack.Internal Closes #24998 - - - - - 24e89c40 by Jacco Krijnen at 2024-06-20T07:21:27-04:00 ttg: Use List instead of Bag in AST for LHsBindsLR Considering that the parser used to create a Bag of binds using a cons-based approach, it can be also done using lists. The operations in the compiler don't really require Bag. By using lists, there is no dependency on GHC.Data.Bag anymore from the AST. Progress towards #21592 - - - - - 04f5bb85 by Simon Peyton Jones at 2024-06-20T07:22:03-04:00 Fix untouchability test This MR fixes #24938. The underlying problem was tha the test for "does this implication bring in scope any equalities" was plain wrong. See Note [Tracking Given equalities] and Note [Let-bound skolems] both in GHC.Tc.Solver.InertSet. Then * Test LocalGivenEqs succeeds for a different reason than before; see (LBS2) in Note [Let-bound skolems] * New test T24938a succeeds because of (LBS2), whereas it failed before. * Test LocalGivenEqs2 now fails, as it should. * Test T224938, the repro from the ticket, fails, as it should. - - - - - 9a757a27 by Simon Peyton Jones at 2024-06-20T07:22:40-04:00 Fix demand signatures for join points This MR tackles #24623 and #23113 The main change is to give a clearer notion of "worker/wrapper arity", esp for join points. See GHC.Core.Opt.DmdAnal Note [Worker/wrapper arity and join points] This Note is a good summary of what this MR does: (1) The "worker/wrapper arity" of an Id is * For non-join-points: idArity * The join points: the join arity (Id part only of course) This is the number of args we will use in worker/wrapper. See `ww_arity` in `dmdAnalRhsSig`, and the function `workWrapArity`. (2) A join point's demand-signature arity may exceed the Id's worker/wrapper arity. See the `arity_ok` assertion in `mkWwBodies`. (3) In `finaliseArgBoxities`, do trimBoxity on any argument demands beyond the worker/wrapper arity. (4) In WorkWrap.splitFun, make sure we split based on the worker/wrapper arity (re)-computed by workWrapArity. - - - - - 5e8faaf1 by Jan Hrček at 2024-06-20T07:23:20-04:00 Update haddocks of Import/Export AST types - - - - - cd512234 by Hécate Kleidukos at 2024-06-20T07:24:02-04:00 haddock: Update bounds in cabal files and remove allow-newer stanza in cabal.project - - - - - 8a8ff8f2 by Rodrigo Mesquita at 2024-06-20T07:24:38-04:00 cmm: Don't parse MO_BSwap for W8 Don't support parsing bswap8, since bswap8 is not really an operation and would have to be implemented as a no-op (and currently is not implemented at all). Fixes #25002 - - - - - 5cc472f5 by sheaf at 2024-06-20T07:25:14-04:00 Delete unused testsuite files These files were committed by mistake in !11902. This commit simply removes them. - - - - - 7b079378 by Matthew Pickering at 2024-06-20T07:25:50-04:00 Remove left over debugging pragma from 2016 This pragma was accidentally introduced in 648fd73a7b8fbb7955edc83330e2910428e76147 The top-level cost centres lead to a lack of optimisation when compiling with profiling. - - - - - c872e09b by Hécate Kleidukos at 2024-06-20T19:28:36-04:00 haddock: Remove unused pragmata, qualify usages of Data.List functions, add more sanity checking flags by default This commit enables some extensions and GHC flags in the cabal file in a way that allows us to reduce the amount of prologuing on top of each file. We also prefix the usage of some List functions that removes ambiguity when they are also exported from the Prelude, like foldl'. In general, this has the effect of pointing out more explicitly that a linked list is used. Metric Increase: haddock.Cabal haddock.base haddock.compiler - - - - - 8c87d4e1 by Arnaud Spiwack at 2024-06-20T19:29:12-04:00 Add test case for #23586 - - - - - 568de8a5 by Arnaud Spiwack at 2024-06-20T19:29:12-04:00 When matching functions in rewrite rules: ignore multiplicity When matching a template variable to an expression, we check that it has the same type as the matched expression. But if the variable `f` has type `A -> B` while the expression `e` has type `A %1 -> B`, the match was previously rejected. A principled solution would have `f` substituted by `\(%Many x) -> e x` or some other appropriate coercion. But since linearity is not properly checked in Core, we can be cheeky and simply ignore multiplicity while matching. Much easier. This has forced a change in the linter which, when `-dlinear-core-lint` is off, must consider that `a -> b` and `a %1 -> b` are equal. This is achieved by adding an argument to configure the behaviour of `nonDetCmpTypeX` and modify `ensureEqTys` to call to the new behaviour which ignores multiplicities when comparing two `FunTy`. Fixes #24725. - - - - - c8a8727e by Simon Peyton Jones at 2024-06-20T19:29:12-04:00 Faster type equality This MR speeds up type equality, triggered by perf regressions that showed up when fixing #24725 by parameterising type equality over whether to ignore multiplicity. The changes are: * Do not use `nonDetCmpType` for type /equality/. Instead use a specialised type-equality function, which we have always had! `nonDetCmpType` remains, but I did not invest effort in refactoring or optimising it. * Type equality is parameterised by - whether to expand synonyms - whether to respect multiplicities - whether it has a RnEnv2 environment In this MR I systematically specialise it for static values of these parameters. Much more direct and predictable than before. See Note [Specialising type equality] * We want to avoid comparing kinds if possible. I refactored how this happens, at least for `eqType`. See Note [Casts and coercions in type comparison] * To make Lint fast, we want to avoid allocating a thunk for <msg> in ensureEqTypes ty1 ty2 <msg> because the test almost always succeeds, and <msg> isn't needed. See Note [INLINE ensureEqTys] Metric Decrease: T13386 T5030 - - - - - 21fc180b by Ryan Hendrickson at 2024-06-22T10:40:55-04:00 base: Add inits1 and tails1 to Data.List - - - - - d640a3b6 by Sebastian Graf at 2024-06-22T10:41:32-04:00 Derive previously hand-written `Lift` instances (#14030) This is possible now that #22229 is fixed. - - - - - 33fee6a2 by Sebastian Graf at 2024-06-22T10:41:32-04:00 Implement the "Derive Lift instances for data types in template-haskell" proposal (#14030) After #22229 had been fixed, we can finally derive the `Lift` instance for the TH AST, as proposed by Ryan Scott in https://mail.haskell.org/pipermail/libraries/2015-September/026117.html. Fixes #14030, #14296, #21759 and #24560. The residency of T24471 increases by 13% because we now load `AnnLookup` from its interface file, which transitively loads the whole TH AST. Unavoidable and not terrible, I think. Metric Increase: T24471 - - - - - 383c01a8 by Matthew Pickering at 2024-06-22T10:42:08-04:00 bindist: Use complete relative paths when cding to directories If a user has configured CDPATH on their system then `cd lib` may change into an unexpected directory during the installation process. If you write `cd ./lib` then it will not consult `CDPATH` to determine what you mean. I have added a check on ghcup-ci to verify that the bindist installation works in this situation. Fixes #24951 - - - - - 5759133f by Hécate Kleidukos at 2024-06-22T10:42:49-04:00 haddock: Use the more precise SDocContext instead of DynFlags The pervasive usage of DynFlags (the parsed command-line options passed to ghc) blurs the border between different components of Haddock, and especially those that focus solely on printing text on the screen. In order to improve the understanding of the real dependencies of a function, the pretty-printer options are made concrete earlier in the pipeline instead of late when pretty-printing happens. This also has the advantage of clarifying which functions actually require DynFlags for purposes other than pretty-printing, thus making the interactions between Haddock and GHC more understandable when exploring the code base. See Henry, Ericson, Young. "Modularizing GHC". https://hsyl20.fr/home/files/papers/2022-ghc-modularity.pdf. 2022 - - - - - 749e089b by Alexander McKenna at 2024-06-22T10:43:24-04:00 Add INLINE [1] pragma to compareInt / compareWord To allow rules to be written on the concrete implementation of `compare` for `Int` and `Word`, we need to have an `INLINE [1]` pragma on these functions, following the `matching_overloaded_methods_in_rules` note in `GHC.Classes`. CLC proposal https://github.com/haskell/core-libraries-committee/issues/179 Fixes https://gitlab.haskell.org/ghc/ghc/-/issues/22643 - - - - - db033639 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 ci: Enable strict ghc-toolchain setting for bindists - - - - - 14308a8f by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 ghc-toolchain: Improve parse failure error Improves the error message for when `ghc-toolchain` fails to read a valid `Target` value from a file (in doFormat mode). - - - - - 6e7cfff1 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 bindist: ghc-toolchain related options in configure - - - - - 958d6931 by Matthew Pickering at 2024-06-24T17:21:15-04:00 ci: Fail when bindist configure fails when installing bindist It is better to fail earlier if the configure step fails rather than carrying on for a more obscure error message. - - - - - f48d157d by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 ghc-toolchain: Fix error logging indentation - - - - - f1397104 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 bindist: Correct default.target substitution The substitution on `default.target.in` must be done after `PREP_TARGET_FILE` is called -- that macro is responsible for setting the variables that will be effectively substituted in the target file. Otherwise, the target file is invalid. Fixes #24792 #24574 - - - - - 665e653e by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 configure: Prefer tool name over tool path It is non-obvious whether the toolchain configuration should use full-paths to tools or simply their names. In addressing #24574, we've decided to prefer executable names over paths, ultimately, because the bindist configure script already does this, thus is the default in ghcs out there. Updates the in-tree configure script to prefer tool names (`AC_CHECK_TOOL` rather than `AC_PATH_TOOL`) and `ghc-toolchain` to ignore the full-path-result of `findExecutable`, which it previously used over the program name. This change doesn't undo the fix in bd92182cd56140ffb2f68ec01492e5aa6333a8fc because `AC_CHECK_TOOL` still takes into account the target triples, unlike `AC_CHECK_PROG/AC_PATH_PROG`. - - - - - 463716c2 by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 dist: Don't forget to configure JavascriptCPP We introduced a configuration step for the javascript preprocessor, but only did so for the in-tree configure script. This commit makes it so that we also configure the javascript preprocessor in the configure shipped in the compiler bindist. - - - - - e99cd73d by Rodrigo Mesquita at 2024-06-24T17:21:15-04:00 distrib: LlvmTarget in distrib/configure LlvmTarget was being set and substituted in the in-tree configure, but not in the configure shipped in the bindist. We want to set the LlvmTarget to the canonical LLVM name of the platform that GHC is targetting. Currently, that is going to be the boostrapped llvm target (hence the code which sets LlvmTarget=bootstrap_llvm_target). - - - - - 4199aafe by Matthew Pickering at 2024-06-24T17:21:51-04:00 Update bootstrap plans for recent GHC versions (9.6.5, 9.8.2, 9.10.10) - - - - - f599d816 by Matthew Pickering at 2024-06-24T17:21:51-04:00 ci: Add 9_10 bootstrap testing job - - - - - 8f4b799d by Hécate Kleidukos at 2024-06-24T17:22:30-04:00 haddock: Move the usage of mkParserOpts directly to ppHyperlinkedModuleSource in order to avoid passing a whole DynFlags Follow up to !12931 - - - - - 210cf1cd by Hécate Kleidukos at 2024-06-24T17:22:30-04:00 haddock: Remove cabal file linting rule This will be reintroduced with a properly ignored commit when the cabal files are themselves formatted for good. - - - - - 7fe85b13 by Peter Trommler at 2024-06-24T22:03:41-04:00 PPC NCG: Fix sign hints in C calls Sign hints for parameters are in the second component of the pair. Fixes #23034 - - - - - 949a0e0b by Andrew Lelechenko at 2024-06-24T22:04:17-04:00 base: fix missing changelog entries - - - - - 1bfa9111 by Andreas Klebinger at 2024-06-26T21:49:53-04:00 GHCi interpreter: Tag constructor closures when possible. When evaluating PUSH_G try to tag the reference we are pushing if it's a constructor. This is potentially helpful for performance and required to fix #24870. - - - - - caf44a2d by Andrew Lelechenko at 2024-06-26T21:50:30-04:00 Implement Data.List.compareLength and Data.List.NonEmpty.compareLength `compareLength xs n` is a safer and faster alternative to `compare (length xs) n`. The latter would force and traverse the entire spine (potentially diverging), while the former traverses as few elements as possible. The implementation is carefully designed to maintain as much laziness as possible. As per https://github.com/haskell/core-libraries-committee/issues/257 - - - - - f4606ae0 by Serge S. Gulin at 2024-06-26T21:51:05-04:00 Unicode: adding compact version of GeneralCategory (resolves #24789) The following features are applied: 1. Lookup code like Cmm-switches (draft implementation proposed by Sylvain Henry @hsyl20) 2. Nested ifs (logarithmic search vs linear search) (the idea proposed by Sylvain Henry @hsyl20) ------------------------- Metric Decrease: size_hello_artifact size_hello_unicode ------------------------- - - - - - 0e424304 by Hécate Kleidukos at 2024-06-26T21:51:44-04:00 haddock: Restructure import statements This commit removes idiosyncrasies that have accumulated with the years in how import statements were laid out, and defines clear but simple guidelines in the CONTRIBUTING.md file. - - - - - 9b8ddaaf by Arnaud Spiwack at 2024-06-26T21:52:23-04:00 Rename test for #24725 I must have fumbled my tabs when I copy/pasted the issue number in 8c87d4e1136ae6d28e92b8af31d78ed66224ee16. - - - - - b0944623 by Arnaud Spiwack at 2024-06-26T21:52:23-04:00 Add original reproducer for #24725 - - - - - 77ce65a5 by Matthew Pickering at 2024-06-27T07:57:14-04:00 Expand LLVM version matching regex for compability with bsd systems sed on BSD systems (such as darwin) does not support the + operation. Therefore we take the simple minded approach of manually expanding group+ to groupgroup*. Fixes #24999 - - - - - bdfe4a9e by Matthew Pickering at 2024-06-27T07:57:14-04:00 ci: On darwin configure LLVMAS linker to match LLC and OPT toolchain The version check was previously broken so the toolchain was not detected at all. - - - - - 07e03a69 by Matthew Pickering at 2024-06-27T07:57:15-04:00 Update nixpkgs commit for darwin toolchain One dependency (c-ares) changed where it hosted the releases which breaks the build with the old nixpkgs commit. - - - - - 144afed7 by Rodrigo Mesquita at 2024-06-27T07:57:50-04:00 base: Add changelog entry for #24998 - - - - - eebe1658 by Sylvain Henry at 2024-06-28T07:13:26-04:00 X86/DWARF: support no tables-next-to-code and asm-shortcutting (#22792) - Without TNTC (tables-next-to-code), we must be careful to not duplicate labels in pprNatCmmDecl. Especially, as a CmmProc is identified by the label of its entry block (and not of its info table), we can't reuse the same label to delimit the block end and the proc end. - We generate debug infos from Cmm blocks. However, when asm-shortcutting is enabled, some blocks are dropped at the asm codegen stage and some labels in the DebugBlocks become missing. We fix this by filtering the generated debug-info after the asm codegen to only keep valid infos. Also add some related documentation. - - - - - 6e86d82b by Sylvain Henry at 2024-06-28T07:14:06-04:00 PPC NCG: handle JMP to ForeignLabels (#23969) - - - - - 9e4b4b0a by Sylvain Henry at 2024-06-28T07:14:06-04:00 PPC NCG: support loading 64-bit value on 32-bit arch (#23969) - - - - - 50caef3e by Sylvain Henry at 2024-06-28T07:14:46-04:00 Fix warnings in genapply - - - - - 37139b17 by Matthew Pickering at 2024-06-28T07:15:21-04:00 libraries: Update os-string to 2.0.4 This updates the os-string submodule to 2.0.4 which removes the usage of `TemplateHaskell` pragma. - - - - - 0f3d3bd6 by Sylvain Henry at 2024-06-30T00:47:40-04:00 Bump array submodule - - - - - 354c350c by Sylvain Henry at 2024-06-30T00:47:40-04:00 GHCi: Don't use deprecated sizeofMutableByteArray# - - - - - 35d65098 by Ben Gamari at 2024-06-30T00:47:40-04:00 primops: Undeprecate addr2Int# and int2Addr# addr2Int# and int2Addr# were marked as deprecated with the introduction of the OCaml code generator (1dfaee318171836b32f6b33a14231c69adfdef2f) due to its use of tagged integers. However, this backend has long vanished and `base` has all along been using `addr2Int#` in the Show instance for Ptr. While it's unlikely that we will have another backend which has tagged integers, we may indeed support platforms which have tagged pointers. Consequently we undeprecate the operations but warn the user that the operations may not be portable. - - - - - 3157d817 by Sylvain Henry at 2024-06-30T00:47:41-04:00 primops: Undeprecate par# par# is still used in base and it's not clear how to replace it with spark# (see #24825) - - - - - c8d5b959 by Ben Gamari at 2024-06-30T00:47:41-04:00 Primops: Make documentation generation more efficient Previously we would do a linear search through all primop names, doing a String comparison on the name of each when preparing the HsDocStringMap. Fix this. - - - - - 65165fe4 by Ben Gamari at 2024-06-30T00:47:41-04:00 primops: Ensure that deprecations are properly tracked We previously failed to insert DEPRECATION pragmas into GHC.Prim's ModIface, meaning that they would appear in the Haddock documentation but not issue warnings. Fix this. See #19629. Haddock also needs to be fixed: https://github.com/haskell/haddock/issues/223 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - bc1d435e by Mario Blažević at 2024-06-30T00:48:20-04:00 Improved pretty-printing of unboxed TH sums and tuples, fixes #24997 - - - - - 0d170eaf by Zubin Duggal at 2024-07-04T11:08:41-04:00 compiler: Turn `FinderCache` into a record of operations so that GHC API clients can have full control over how its state is managed by overriding `hsc_FC`. Also removes the `uncacheModule` function as this wasn't being used by anything since 1893ba12fe1fa2ade35a62c336594afcd569736e Fixes #23604 - - - - - 4664997d by Teo Camarasu at 2024-07-04T11:09:18-04:00 Add HasCallStack to T23221 This makes the test a bit easier to debug - - - - - 66919dcc by Teo Camarasu at 2024-07-04T11:09:18-04:00 rts: use live words to estimate heap size We use live words rather than live blocks to determine the size of the heap for determining memory retention. Most of the time these two metrics align, but they can come apart in normal usage when using the nonmoving collector. The nonmoving collector leads to a lot of partially occupied blocks. So, using live words is more accurate. They can also come apart when the heap is suffering from high levels fragmentation caused by small pinned objects, but in this case, the block size is the more accurate metric. Since this case is best avoided anyway. It is ok to accept the trade-off that we might try (and probably) fail to return more memory in this case. See also the Note [Statistics for retaining memory] Resolves #23397 - - - - - 8dfca66a by Oleg Grenrus at 2024-07-04T11:09:55-04:00 Add reflections of GHC.TypeLits/Nats type families ------------------------- Metric Increase: ghc_experimental_dir ghc_experimental_so ------------------------- - - - - - 6c469bd2 by Adam Gundry at 2024-07-04T11:10:33-04:00 Correct -Wpartial-fields warning to say "Definition" rather than "Use" Fixes #24710. The message and documentation for `-Wpartial-fields` were misleading as (a) the warning occurs at definition sites rather than use sites, and (b) the warning relates to the definition of a field independently of the selector function (e.g. because record updates are also partial). - - - - - 977b6b64 by Max Ulidtko at 2024-07-04T11:11:11-04:00 GHCi: Support local Prelude Fixes #10920, an issue where GHCi bails out when started alongside a file named Prelude.hs or Prelude.lhs (even empty file suffices). The in-source Note [GHCi and local Preludes] documents core reasoning. Supplementary changes: * add debug traces for module lookups under -ddump-if-trace; * drop stale comment in GHC.Iface.Load; * reduce noise in -v3 traces from GHC.Utils.TmpFs; * new test, which also exercizes HomeModError. - - - - - 87cf4111 by Ryan Scott at 2024-07-04T11:11:47-04:00 Add missing gParPat in cvtp's ViewP case When converting a `ViewP` using `cvtp`, we need to ensure that the view pattern is parenthesized so that the resulting code will parse correctly when roundtripped back through GHC's parser. Fixes #24894. - - - - - b05613c5 by Adam Gundry at 2024-07-04T11:12:23-04:00 Use structured error representation for module cycle errors (see #18516) This removes the re-export of cyclicModuleErr from the top-level GHC module. - - - - - 70389749 by Adam Gundry at 2024-07-04T11:12:23-04:00 Use structured error representation when reloading a nonexistent module - - - - - 680ade3d by sheaf at 2024-07-04T11:12:23-04:00 Use structured errors for a Backpack instantiation error - - - - - 97c6d6de by sheaf at 2024-07-04T11:12:23-04:00 Move mkFileSrcSpan to GHC.Unit.Module.Location - - - - - f9e7bd9b by Adriaan Leijnse at 2024-07-04T11:12:59-04:00 ttg: Remove SourceText from OverloadedLabel Progress towards #21592 - - - - - 00d63245 by Alexander Foremny at 2024-07-04T11:12:59-04:00 AST: GHC.Prelude -> Prelude Refactor occurrences to GHC.Prelude with Prelude within Language/Haskell. Progress towards #21592 - - - - - cc846ea5 by Alexander Foremny at 2024-07-04T11:12:59-04:00 AST: remove occurrences of GHC.Unit.Module.ModuleName `GHC.Unit.Module` re-exports `ModuleName` from `Language.Haskell.Syntax.Module.Name`. Progress towards #21592 - - - - - 24c7d287 by Fabian Kirchner at 2024-07-04T11:12:59-04:00 AST: move Data instance definition for ModuleName to GHC.Unit.Types To remove the dependency on GHC.Utils.Misc inside Language.Haskell.Syntax.Module.Name, the instance definition is moved from there into GHC.Unit.Types. Progress towards #21592 - - - - - 6cbba381 by Fabian Kirchner at 2024-07-04T11:12:59-04:00 AST: move negateOverLitVal into GHC.Hs.Lit The function negateOverLitVal is not used within Language.Haskell and therefore can be moved to the respective module inside GHC.Hs. Progress towards #21592 - - - - - 611aa7c6 by Fabian Kirchner at 2024-07-04T11:12:59-04:00 AST: move conDetailsArity into GHC.Rename.Module The function conDetailsArity is only used inside GHC.Rename.Module. We therefore move it there from Language.Haskell.Syntax.Lit. Progress towards #21592 - - - - - 1b968d16 by Mauricio at 2024-07-04T11:12:59-04:00 AST: Remove GHC.Utils.Assert from GHC Simple cleanup. Progress towards #21592 - - - - - 3d192e5d by Fabian Kirchner at 2024-07-04T11:12:59-04:00 ttg: extract Specificity, ForAllTyFlag and helper functions from GHC.Types.Var Progress towards #21592 Specificity, ForAllTyFlag and its' helper functions are extracted from GHC.Types.Var and moved into a new module Language.Haskell.Syntax.Specificity. Note: Eventually (i.e. after Language.Haskell.Syntax.Decls does not depend on GHC.* anymore) these should be moved into Language.Haskell.Syntax.Decls. At this point, this would cause cyclic dependencies. - - - - - 257d1adc by Adowrath at 2024-07-04T11:12:59-04:00 ttg: Split HsSrcBang, remove ref to DataCon from Syntax.Type Progress towards #21592 This splits HsSrcBang up, creating the new HsBang within `Language.Haskell.Syntax.Basic`. `HsBang` holds the unpackedness and strictness information, while `HsSrcBang` only adds the SourceText for usage within the compiler directly. Inside the AST, to preserve the SourceText, it is hidden behind the pre-existing extension point `XBindTy`. All other occurrences of `HsSrcBang` were adapted to deconstruct the inner `HsBang`, and when interacting with the `BindTy` constructor, the hidden `SourceText` is extracted/inserted into the `XBindTy` extension point. `GHC.Core.DataCon` exports both `HsSrcBang` and `HsBang` for convenience. A constructor function `mkHsSrcBang` that takes all individual components has been added. Two exceptions has been made though: - The `Outputable HsSrcBang` instance is replaced by `Outputable HsBang`. While being only GHC-internal, the only place it's used is in outputting `HsBangTy` constructors -- which already have `HsBang`. It wouldn't make sense to reconstruct a `HsSrcBang` just to ignore the `SourceText` anyway. - The error `TcRnUnexpectedAnnotation` did not use the `SourceText`, so it too now only holds a `HsBang`. - - - - - 24757fec by Mauricio at 2024-07-04T11:12:59-04:00 AST: Moved definitions that use GHC.Utils.Panic to GHC namespace Progress towards #21592 - - - - - 9be49379 by Mike Pilgrem at 2024-07-04T11:13:41-04:00 Fix #25032 Refer to Cabal's `includes` field, not `include-files` - - - - - 9e2ecf14 by Andrew Lelechenko at 2024-07-04T11:14:17-04:00 base: fix more missing changelog entries - - - - - a82121b3 by Peter Trommler at 2024-07-04T11:14:53-04:00 X86 NCG: Fix argument promotion in foreign C calls Promote 8 bit and 16 bit signed arguments by sign extension. Fixes #25018 - - - - - fab13100 by Bryan Richter at 2024-07-04T11:15:29-04:00 Add .gitlab/README.md with creds instructions - - - - - 564981bd by Matthew Pickering at 2024-07-05T07:35:29-04:00 configure: Set LD_STAGE0 appropiately when 9.10.1 is used as a boot compiler In 9.10.1 the "ld command" has been removed, so we fall back to using the more precise "merge objects command" when it's available as LD_STAGE0 is only used to set the object merging command in hadrian. Fixes #24949 - - - - - a949c792 by Matthew Pickering at 2024-07-05T07:35:29-04:00 hadrian: Don't build ghci object files for ./hadrian/ghci target There is some convoluted logic which determines whether we build ghci object files are not. In any case, if you set `ghcDynPrograms = pure False` then it forces them to be built. Given we aren't ever building executables with this flavour it's fine to leave `ghcDynPrograms` as the default and it should be a bit faster to build less. Also fixes #24949 - - - - - 48bd8f8e by Matthew Pickering at 2024-07-05T07:36:06-04:00 hadrian: Remove STG dump from ticky_ghc flavour transformer This adds 10-15 minutes to build time, it is a better strategy to precisely enable dumps for the modules which show up prominently in a ticky profile. Given I am one of the only people regularly building ticky compilers I think it's worthwhile to remove these. Fixes #23635 - - - - - 5b1aefb7 by Matthew Pickering at 2024-07-05T07:36:06-04:00 hadrian: Add dump_stg flavour transformer This allows you to write `--flavour=default+ticky_ghc+dump_stg` if you really want STG for all modules. - - - - - ab2b60b6 by Sven Tennie at 2024-07-08T15:03:41-04:00 AArch64: Simplify stmtToInstrs type There's no need to hand `Nothing`s around... (there was no case with a `BlockId`.) - - - - - 71a7fa8c by Sven Tennie at 2024-07-08T15:03:41-04:00 AArch64: Simplify stmtsToInstrs type The `BlockId` parameter (`bid`) is never used, only handed around. Deleting it simplifies the surrounding code. - - - - - 8bf6fd68 by Simon Peyton Jones at 2024-07-08T15:04:17-04:00 Fix eta-expansion in Prep As #25033 showed, we were eta-expanding in a way that broke a join point, which messed up Note [CorePrep invariants]. The fix is rather easy. See Wrinkle (EA1) of Note [Eta expansion of arguments in CorePrep] - - - - - 96acf823 by Sjoerd Visscher at 2024-07-09T06:16:14-04:00 One-shot Haddock - - - - - 74ec4c06 by Sjoerd Visscher at 2024-07-09T06:16:14-04:00 Remove haddock-stdout test option Superseded by output handling of Hadrian - - - - - ed8a8f0b by Rodrigo Mesquita at 2024-07-09T06:16:51-04:00 ghc-boot: Relax Cabal bound Fixes #25013 - - - - - 3f9548fe by Matthew Pickering at 2024-07-09T06:17:36-04:00 ci: Unset ALEX/HAPPY variables when testing bootstrap jobs Ticket #24826 reports a regression in 9.10.1 when building from a source distribution. This patch is an attempt to reproduce the issue on CI by more aggressively removing `alex` and `happy` from the environment. - - - - - aba2c9d4 by Andrea Bedini at 2024-07-09T06:17:36-04:00 hadrian: Ignore build-tool-depends fields in cabal files hadrian does not utilise the build-tool-depends fields in cabal files and their presence can cause issues when building source distribution (see #24826) Ideally Cabal would support building "full" source distributions which would remove the need for workarounds in hadrian but for now we can patch the build-tool-depends out of the cabal files. Fixes #24826 - - - - - 12bb9e7b by Matthew Pickering at 2024-07-09T06:18:12-04:00 testsuite: Don't attempt to link when checking whether a way is supported It is sufficient to check that the simple test file compiles as it will fail if there are not the relevant library files for the requested way. If you break a way so badly that even a simple executable fails to link (as I did for profiled dynamic way), it will just mean the tests for that way are skipped on CI rather than displayed. - - - - - 46ec0a8e by Torsten Schmits at 2024-07-09T13:37:02+02:00 Improve docs for NondecreasingIndentation The text stated that this affects indentation of layouts nested in do expressions, while it actually affects that of do layouts nested in any other. - - - - - dddc9dff by Zubin Duggal at 2024-07-12T11:41:24-04:00 compiler: Fingerprint -fwrite-if-simplified-core We need to recompile if this flag is changed because later modules might depend on the simplified core for this module if -fprefer-bytecode is enabled. Fixes #24656 - - - - - 145a6477 by Matthew Pickering at 2024-07-12T11:42:00-04:00 Add support for building profiled dynamic way The main payload of this change is to hadrian. * Default settings will produced dynamic profiled objects * `-fexternal-interpreter` is turned on in some situations when there is an incompatibility between host GHC and the way attempting to be built. * Very few changes actually needed to GHC There are also necessary changes to the bootstrap plans to work with the vendored Cabal dependency. These changes should ideally be reverted by the next GHC release. In hadrian support is added for building profiled dynamic libraries (nothing too exciting to see there) Updates hadrian to use a vendored Cabal submodule, it is important that we replace this usage with a released version of Cabal library before the 9.12 release. Fixes #21594 ------------------------- Metric Increase: libdir ------------------------- - - - - - 414a6950 by Matthew Pickering at 2024-07-12T11:42:00-04:00 testsuite: Make find_so regex more precise The hash contains lowercase [a-z0-9] and crucially not _p which meant we sometimes matched on `libHS.._p` profiled shared libraries rather than the normal shared library. - - - - - dee035bf by Alex Mason at 2024-07-12T11:42:41-04:00 ncg(aarch64): Add fsqrt instruction, byteSwap primitives [#24956] Implements the FSQRT machop using native assembly rather than a C call. Implements MO_BSwap by producing assembly to do the byte swapping instead of producing a foreign call a C function. In `tar`, the hot loop for `deserialise` got almost 4x faster by avoiding the foreign call which caused spilling live variables to the stack -- this means the loop did 4x more memory read/writing than necessary in that particular case! - - - - - 5104ee61 by Sylvain Henry at 2024-07-12T11:43:23-04:00 Linker: use m32 allocator for sections when NEED_PLT (#24432) Use M32 allocator to avoid fragmentation when allocating ELF sections. We already did this when NEED_PLT was undefined. Failing to do this led to relocations impossible to fulfil (#24432). - - - - - 52d66984 by Sylvain Henry at 2024-07-12T11:43:23-04:00 RTS: allow M32 allocation outside of 4GB range when assuming -fPIC - - - - - c34fef56 by Sylvain Henry at 2024-07-12T11:43:23-04:00 Linker: fix stub offset Remove unjustified +8 offset that leads to memory corruption (cf discussion in #24432). - - - - - 280e4bf5 by Simon Peyton Jones at 2024-07-12T11:43:59-04:00 Make type-equality on synonyms a bit faster This MR make equality fast for (S tys1 `eqType` S tys2), where S is a non-forgetful type synonym. It doesn't affect compile-time allocation much, but then comparison doesn't allocate anyway. But it seems like a Good Thing anyway. See Note [Comparing type synonyms] in GHC.Core.TyCo.Compare and Note [Forgetful type synonyms] in GHC.Core.TyCon Addresses #25009. - - - - - cb83c347 by Alan Zimmerman at 2024-07-12T11:44:35-04:00 EPA: Bring back SrcSpan in EpaDelta When processing files in ghc-exactprint, the usual workflow is to first normalise it with makeDeltaAst, and then operate on it. But we need the original locations to operate on it, in terms of finding things. So restore the original SrcSpan for reference in EpaDelta - - - - - 7bcda869 by Matthew Pickering at 2024-07-12T11:45:11-04:00 Update alpine release job to 3.20 alpine 3.20 was recently released and uses a new python and sphinx toolchain which could be useful to test. - - - - - 43aa99b8 by Matthew Pickering at 2024-07-12T11:45:11-04:00 testsuite: workaround bug in python-3.12 There is some unexplained change to binding behaviour in python-3.12 which requires moving this import from the top-level into the scope of the function. I didn't feel any particular desire to do a deep investigation as to why this changed as the code works when modified like this. No one in the python IRC channel seemed to know what the problem was. - - - - - e3914028 by Adam Sandberg Ericsson at 2024-07-12T11:45:47-04:00 initialise mmap_32bit_base during RTS startup #24847 - - - - - 86b8ecee by Hécate Kleidukos at 2024-07-12T11:46:27-04:00 haddock: Only fetch supported languages and extensions once per Interface list This reduces the number of operations done on each Interface, because supported languages and extensions are determined from architecture and operating system of the build host. This information remains stable across Interfaces, and as such doesn not need to be recovered for each Interface. - - - - - 4f85366f by sheaf at 2024-07-13T05:58:14-04:00 Testsuite: use py-cpuinfo to compute CPU features This replaces the rather hacky logic we had in place for checking CPU features. In particular, this means that feature availability now works properly on Windows. - - - - - 41f1354d by Matthew Pickering at 2024-07-13T05:58:51-04:00 testsuite: Replace $CC with $TEST_CC The TEST_CC variable should be set based on the test compiler, which may be different to the compiler which is set to CC on your system (for example when cross compiling). Fixes #24946 - - - - - 572fbc44 by sheaf at 2024-07-15T08:30:32-04:00 isIrrefutableHsPat: consider COMPLETE pragmas This patch ensures we taken into account COMPLETE pragmas when we compute whether a pattern is irrefutable. In particular, if a pattern synonym is the sole member of a COMPLETE pragma (without a result TyCon), then we consider a pattern match on that pattern synonym to be irrefutable. This affects the desugaring of do blocks, as it ensures we don't use a "fail" operation. Fixes #15681 #16618 #22004 - - - - - 84dadea9 by Zubin Duggal at 2024-07-15T08:31:09-04:00 haddock: Handle non-hs files, so that haddock can generate documentation for modules with foreign imports and template haskell. Fixes #24964 - - - - - 0b4ff9fa by Zubin Duggal at 2024-07-15T12:12:30-04:00 haddock: Keep track of warnings/deprecations from dependent packages in `InstalledInterface` and use this to propagate these on items re-exported from dependent packages. Fixes #25037 - - - - - b8b4b212 by Zubin Duggal at 2024-07-15T12:12:30-04:00 haddock: Keep track of instance source locations in `InstalledInterface` and use this to add source locations on out of package instances Fixes #24929 - - - - - 559a7a7c by Matthew Pickering at 2024-07-15T12:13:05-04:00 ci: Refactor job_groups definition, split up by platform The groups are now split up so it's easier to see which jobs are generated for each platform No change in behaviour, just refactoring. - - - - - 20383006 by Matthew Pickering at 2024-07-16T11:48:25+01:00 ci: Replace debian 10 with debian 12 on validation jobs Since debian 10 is now EOL we migrate onwards to debian 12 as the basis for most platform independent validation jobs. - - - - - 12d3b66c by Matthew Pickering at 2024-07-17T13:22:37-04:00 ghcup-metadata: Fix use of arch argument The arch argument was ignored when making the jobname, which lead to failures when generating metadata for the alpine_3_18-aarch64 bindist. Fixes #25089 - - - - - bace981e by Matthew Pickering at 2024-07-19T10:14:02-04:00 testsuite: Delay querying ghc-pkg to find .so dirs until test is run The tests which relied on find_so would fail when `test` was run before the tree was built. This was because `find_so` was evaluated too eagerly. We can fix this by waiting to query the location of the libraries until after the compiler has built them. - - - - - 478de1ab by Torsten Schmits at 2024-07-19T10:14:37-04:00 Add `complete` pragmas for backwards compat patsyns `ModLocation` and `ModIface` !12347 and !12582 introduced breaking changes to these two constructors and mitigated that with pattern synonyms. - - - - - b57792a8 by Matthew Pickering at 2024-07-19T10:15:13-04:00 ci: Fix ghcup-metadata generation (again) I made some mistakes in 203830065b81fe29003c1640a354f11661ffc604 * Syntax error * The aarch-deb11 bindist doesn't exist I tested against the latest nightly pipeline locally: ``` nix run .gitlab/generate-ci#generate-job-metadata nix shell -f .gitlab/rel_eng/ -c ghcup-metadata --pipeline-id 98286 --version 9.11.20240715 --fragment --date 2024-07-17 --metadata=/tmp/meta ``` - - - - - 1fa35b64 by Andreas Klebinger at 2024-07-19T17:35:20+02:00 Revert "Allow non-absolute values for bootstrap GHC variable" This broke configure in subtle ways resulting in #25076 where hadrian didn't end up the boot compiler it was configured to use. This reverts commit 209d09f52363b261b900cf042934ae1e81e2caa7. - - - - - 55117e13 by Simon Peyton Jones at 2024-07-24T02:41:12-04:00 Fix bad bug in mkSynonymTyCon, re forgetfulness As #25094 showed, the previous tests for forgetfulness was plain wrong, when there was a forgetful synonym in the RHS of a synonym. - - - - - a8362630 by Sergey Vinokurov at 2024-07-24T12:22:45-04:00 Define Eq1, Ord1, Show1 and Read1 instances for basic Generic representation types This way the Generically1 newtype could be used to derive Eq1 and Ord1 for user types with DerivingVia. The CLC proposal is https://github.com/haskell/core-libraries-committee/issues/273. The GHC issue is https://gitlab.haskell.org/ghc/ghc/-/issues/24312. - - - - - de5d9852 by Simon Peyton Jones at 2024-07-24T12:23:22-04:00 Address #25055, by disabling case-of-runRW# in Gentle phase See Note [Case-of-case and full laziness] in GHC.Driver.Config.Core.Opt.Simplify - - - - - 3f89ab92 by Andreas Klebinger at 2024-07-25T14:12:54+02:00 Fix -freg-graphs for FP and AARch64 NCG (#24941). It seems we reserve 8 registers instead of four for global regs based on the layout in Note [AArch64 Register assignments]. I'm not sure it's neccesary, but for now we just accept this state of affairs and simple update -fregs-graph to account for this. - - - - - f6b4c1c9 by Simon Peyton Jones at 2024-07-27T09:45:44-04:00 Fix nasty bug in occurrence analyser As #25096 showed, the occurrence analyser was getting one-shot info flat out wrong. This commit does two things: * It fixes the bug and actually makes the code a bit tidier too. The work is done in the new function GHC.Core.Opt.OccurAnal.mkRhsOccEnv, especially the bit that prepares the `occ_one_shots` for the RHS. See Note [The OccEnv for a right hand side] * When floating out a binding we must be conservative about one-shot info. But we were zapping the entire demand info, whereas we only really need zap the /top level/ cardinality. See Note [Floatifying demand info when floating] in GHC.Core.Opt.SetLevels For some reason there is a 2.2% improvement in compile-time allocation for CoOpt_Read. Otherwise nickels and dimes. Metric Decrease: CoOpt_Read - - - - - 646ee207 by Torsten Schmits at 2024-07-27T09:46:20-04:00 add missing cell in flavours table - - - - - ec2eafdb by Ben Gamari at 2024-07-28T20:51:12+02:00 users-guide: Drop mention of dead __PARALLEL_HASKELL__ macro This has not existed for over a decade. - - - - - e2f2a56e by Arnaud Spiwack at 2024-07-28T22:21:07-04:00 Add tests for 25081 - - - - - 23f50640 by Arnaud Spiwack at 2024-07-28T22:21:07-04:00 Scale multiplicity in list comprehension Fixes #25081 - - - - - d2648289 by romes at 2024-07-30T01:38:12-04:00 TTG HsCmdArrForm: use Fixity via extension point Also migrate Fixity from GHC.Hs to Language.Haskell.Syntax since it no longer uses any GHC-specific data types. Fixed arrow desugaring bug. (This was dead code before.) Remove mkOpFormRn, it is also dead code, only used in the arrow desugaring now removed. Co-authored-by: Fabian Kirchner <kirchner at posteo.de> Co-authored-by: Alan Zimmerman <alan.zimm at gmail.com> - - - - - e258ad54 by Matthew Pickering at 2024-07-30T01:38:48-04:00 ghcup-metadata: More metadata fixes * Incorrect version range on the alpine bindists * Missing underscore in "unknown_versioning" Fixes #25119 - - - - - 72b54c07 by Rodrigo Mesquita at 2024-08-01T00:47:29-04:00 Deriving-via one-shot strict state Monad instances A small refactor to use deriving via GHC.Utils.Monad.State.Strict Monad instances for state Monads with unboxed/strict results which all re-implemented the one-shot trick in the instance and used unboxed tuples: * CmmOptM in GHC.Cmm.GenericOpt * RegM in GHC.CmmToAsm.Reg.Linear.State * UniqSM in GHC.Types.Unique.Supply - - - - - bfe4b3d3 by doyougnu at 2024-08-01T00:48:06-04:00 Rts linker: add case for pc-rel 64 relocation part of the upstream haskell.nix patches - - - - - 5843c7e3 by doyougnu at 2024-08-01T00:48:42-04:00 RTS linker: aarch64: better debug information Dump better debugging information when a symbol address is null. Part of the haskell.nix patches upstream project Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - c2e9c581 by Rodrigo Mesquita at 2024-08-01T00:49:18-04:00 base: Add haddocks to HasExceptionContext Fixes #25091 - - - - - f954f428 by Sylvain Henry at 2024-08-01T00:49:59-04:00 Only lookup ghcversion.h file in the RTS include-dirs by default. The code was introduced in 3549c952b535803270872adaf87262f2df0295a4. It used `getPackageIncludePath` which name doesn't convey that it looks into all include paths of the preload units too. So this behavior is probably unintentional and it should be ok to change it. Fix #25106 - - - - - 951ce3d5 by Matthew Pickering at 2024-08-01T00:50:35-04:00 driver: Fix -Wmissing-home-modules when multiple units have the same module name It was assumed that module names were unique but that isn't true with multiple units. The fix is quite simple, maintain a set of `(ModuleName, UnitId)` and query that to see whether the module has been specified. Fixes #25122 - - - - - bae1fea4 by sheaf at 2024-08-01T00:51:15-04:00 PMC: suggest in-scope COMPLETE sets when possible This commit modifies GHC.HsToCore.Pmc.Solver.generateInhabitingPatterns to prioritise reporting COMPLETE sets in which all of the ConLikes are in scope. This avoids suggesting out of scope constructors when displaying an incomplete pattern match warning, e.g. in baz :: Ordering -> Int baz = \case EQ -> 5 we prefer: Patterns of type 'Ordering' not matched: LT GT over: Patterns of type 'Ordering' not matched: OutOfScope Fixes #25115 - - - - - ff158fcd by Tommy Bidne at 2024-08-02T01:14:32+12:00 Print exception metadata in default handler CLC proposals 231 and 261: - Add exception type metadata to SomeException's displayException. - Add "Exception" header to default exception handler. See: https://github.com/haskell/core-libraries-committee/issues/231 https://github.com/haskell/core-libraries-committee/issues/261 Update stm submodule for test fixes. - - - - - 8b2f70a2 by Andrei Borzenkov at 2024-08-01T23:00:46-04:00 Type syntax in expressions (#24159, #24572, #24226) This patch extends the grammar of expressions with syntax that is typically found only in types: * function types (a -> b), (a ->. b), (a %m -> b) * constrained types (ctx => t) * forall-quantification (forall tvs. t) The new forms are guarded behind the RequiredTypeArguments extension, as specified in GHC Proposal #281. Examples: {-# LANGUAGE RequiredTypeArguments #-} e1 = f (Int -> String) -- function type e2 = f (Int %1 -> String) -- linear function type e3 = f (forall a. Bounded a => a) -- forall type, constraint The GHC AST and the TH AST have been extended as follows: syntax | HsExpr | TH.Exp ---------------+----------+-------------- a -> b | HsFunArr | ConE (->) a %m -> b | HsFunArr | ConE FUN ctx => t | HsQual | ConstrainedE forall a. t | HsForAll | ForallE forall a -> t | HsForAll | ForallVisE Additionally, a new warning flag -Wview-pattern-signatures has been introduced to aid with migration to the new precedence of (e -> p :: t). Co-authored-by: Vladislav Zavialov <vlad.z.4096 at gmail.com> - - - - - 66e7f57d by Brandon Chinn at 2024-08-01T21:50:58-07:00 Implement MultilineStrings (#24390) This commit adds support for multiline strings, proposed at https://github.com/ghc-proposals/ghc-proposals/pull/569. Multiline strings can now be written as: myString = """ this is a multiline string """ The multiline string will have leading indentation stripped away. Full details of this post-processing may be found at the new GHC.Parser.String module. In order to cleanly implement this and maximize reusability, I broke out the lexing logic for strings out of Lexer.x into a new GHC.Parser.String module, which lexes strings with any provided "get next character" function. This also gave us the opportunity to clean up this logic, and even optimize it a bit. With this change, parsing string literals now takes 25% less time and 25% less space. - - - - - cf47b96f by Rodrigo Mesquita at 2024-08-03T05:59:40-04:00 hi: Stable sort avails Sorting the Avails in DocStructures is required to produce fully deterministic interface files in presence of re-exported modules. Fixes #25104 - - - - - af2ae742 by M. Taimoor Zaeem at 2024-08-03T18:52:50+05:00 haddock: decrease margin on top of small headings - - - - - a1e42e7a by Rodrigo Mesquita at 2024-08-05T21:03:04-04:00 hi: Deterministic ImportedMods in Usages The `mi_usages` field of the interface files must use a deterministic list of `Usage`s to guarantee a deterministic interface. However, this list was, in its origins, constructed from a `ModuleEnv` which uses a non-deterministic ordering that was leaking into the interface. Specifically, ImportedMods = ModuleEnv ... would get converted to a list and then passed to `mkUsageInfo` to construct the Usages. The solution is simple. Back `ImportedMods` with a deterministic map. `Map Module ...` is enough, since the Ord instance for `Module` already uses a stable, deterministic, comparison. Fixes #25131 - - - - - eb1cb536 by Serge S. Gulin at 2024-08-06T08:54:55+00:00 testsuite: extend size performance tests with gzip (fixes #25046) The main purpose is to create tests for minimal app (hello world and its variations, i.e. unicode used) distribution size metric. Many platforms support distribution in compressed form via gzip. It would be nice to collect information on how much size is taken by the executional bundle for each platform at minimal edge case. 2 groups of tests are added: 1. We extend javascript backend size tests with gzip-enabled versions for all cases where an optimizing compiler is used (for now it is google closure compiler). 2. We add trivial hello world tests with gzip-enabled versions for all other platforms at CI pipeline where no external optimizing compiler is used. - - - - - d94410f8 by Rodrigo Mesquita at 2024-08-07T11:49:19-04:00 ghc-internal: @since for backtraceDesired Fixes point 1 in #25052 - - - - - bfe600f5 by Rodrigo Mesquita at 2024-08-07T11:49:19-04:00 ghc-internal: No trailing whitespace in exceptions Fixes #25052 - - - - - 62650d9f by Andreas Klebinger at 2024-08-07T11:49:54-04:00 Add since annotation for -fkeep-auto-rules. This partially addresses #25082. - - - - - 5f0e23fd by Andreas Klebinger at 2024-08-07T11:49:54-04:00 Mention `-fkeep-auto-rules` in release notes. It was added earlier but hadn't appeared in any release notes yet. Partially addresses #25082. - - - - - 7446a09a by Sylvain Henry at 2024-08-07T11:50:35-04:00 Cmm: don't perform unsound optimizations on 32-bit compiler hosts - beef61351b240967b49169d27a9a19565cf3c4af enabled the use of MO_Add/MO_Sub for 64-bit operations in the C and LLVM backends - 6755d833af8c21bbad6585144b10e20ac4a0a1ab did the same for the x86 NCG backend However we store some literal values as `Int` in the compiler. As a result, some Cmm optimizations transformed target 64-bit literals into compiler `Int`. If the compiler is 32-bit, this leads to computing with wrong literals (see #24893 and #24700). This patch disables these Cmm optimizations for 32-bit compilers. This is unsatisfying (optimizations shouldn't be compiler-word-size dependent) but it fixes the bug and it makes the patch easy to backport. A proper fix would be much more invasive but it shall be implemented in the future. Co-authored-by: amesgen <amesgen at amesgen.de> - - - - - d59faaf2 by Vladislav Zavialov at 2024-08-07T11:51:11-04:00 docs: Update info on RequiredTypeArguments Add a section on "types in terms" that were implemented in 8b2f70a202 and remove the now outdated suggestion of using `type` for them. - - - - - 39fd6714 by Sylvain Henry at 2024-08-07T11:51:52-04:00 JS: fix minor typo in base's jsbits - - - - - e7764575 by Sylvain Henry at 2024-08-07T11:51:52-04:00 RTS: remove hack to force old cabal to build a library with only JS sources Need to extend JSC externs with Emscripten RTS definitions to avoid JSC_UNDEFINED_VARIABLE errors when linking without the emcc rts. Fix #25138 Some recompilation avoidance tests now fail. This is tracked with the other instances of this failure in #23013. My hunch is that they were working by chance when we used the emcc linker. Metric Decrease: T24602_perf_size - - - - - d1a40233 by Brandon Chinn at 2024-08-07T11:53:08-04:00 Support multiline strings in type literals (#25132) - - - - - 610840eb by Sylvain Henry at 2024-08-07T11:53:50-04:00 JS: fix callback documentation (#24377) Fix #24377 - - - - - 6ae4b76a by Zubin Duggal at 2024-08-13T13:36:57-04:00 haddock: Build haddock-api and haddock-library using hadrian We build these two packages as regular boot library dependencies rather than using the `in-ghc-tree` flag to include the source files into the haddock executable. The `in-ghc-tree` flag is moved into haddock-api to ensure that haddock built from hackage can still find the location of the GHC bindist using `ghc-paths`. Addresses #24834 This causes a metric decrease under non-release flavours because under these flavours libraries are compiled with optimisation but executables are not. Since we move the bulk of the code from the haddock executable to the haddock-api library, we see a metric decrease on the validate flavours. Metric Decrease: haddock.Cabal haddock.base haddock.compiler - - - - - 51ffba5d by Arnaud Spiwack at 2024-08-13T13:37:50-04:00 Add an extension field to HsRecFields This is the Right Thing to Do™. And it prepares for storing a multiplicity coercion there. First step of the plan outlined here and below https://gitlab.haskell.org/ghc/ghc/-/merge_requests/12947#note_573091 - - - - - 4d2faeeb by Arnaud Spiwack at 2024-08-13T13:37:50-04:00 Add test for #24961 - - - - - 623b4337 by Arnaud Spiwack at 2024-08-13T13:37:50-04:00 Ensures that omitted record fields in pattern have multiplicity Many Omitted fields were simply ignored in the type checker and produced incorrect Core code. Fixes #24961 Metric Increase: RecordUpdPerf - - - - - c749bdfd by Sylvain Henry at 2024-08-13T13:38:41-04:00 AARCH64 linker: skip NONE relocations This patch is part of the patches upstreamed from haskell.nix. See https://github.com/input-output-hk/haskell.nix/pull/1960 for the original report/patch. - - - - - 682a6a41 by Brandon Chinn at 2024-08-13T13:39:17-04:00 Support multiline strings in TH - - - - - ee0a9c18 by Matthew Pickering at 2024-08-14T14:27:39-04:00 Extend -reexported-module flag to support module renaming The -reexported-module flag now supports renaming -rexported-modules. ``` -rexported-module "A as B" ``` This feature is only relevant to multi-component sessions. Fixes #25139 - - - - - e9496000 by Arnaud Spiwack at 2024-08-14T14:28:20-04:00 Don't restrict eta-reduction of linear functions This commit simply removes code. All the supporting implementation has been done as part of !12883. Closes #25129 - - - - - 2bb4156e by sheaf at 2024-08-14T14:28:56-04:00 Allow @ character in C labels Generated symbol names can include the '@' character, for example when using `__attribute__((vectorcall))`. - - - - - 7602ca23 by Sylvain Henry at 2024-08-14T14:29:36-04:00 Linker: replace blind tuple with a datatype + docs - - - - - bdd77b9e by sheaf at 2024-08-16T12:47:11-04:00 isIrrefutableHsPat: look up ConLikes in the HscEnv At GhcRn stage, in isIrrefutableHsPat we only looked up data constructors in the RdrEnv, which meant that we lacked fallibility information for out-of-scope constructors (which can arise from Template Haskell splices). Instead, we use 'lookupGREInfo', which looks up the information in the type environment. This was the correct function to call all along, but was not used in 572fbc44 due to import cycle reasons. The appropriate functions, 'irrefutableConLike{Rn,Tc}' have been moved to 'GHC.Rename.Env', which avoids import cycles. Fixes #25164 - - - - - 4bee377c by Sylvain Henry at 2024-08-16T12:47:53-04:00 Linker: some refactoring to prepare for #24886 - Rename LoadedBCOs into LazyBCOs - Bundle SptEntries with CompiledByteCode and removed [SptEntry] field from the BCOs constructor - Rename Linkable's LM constructor into Linkable: in the past we had LM and LP for Module and Package, now we only have the former. - Rename Unlinked into LinkablePart (and linkableUnlinked into linkableParts) - Use NonEmpty to encode invariant in Linkable's linkableParts type - Add helpers: linkableLibs, linkableBCOs, etc. - Add documentation - Remove partial nameOfObject - Rename nameOfObject_maybe into linkablePartPath - Rename byteCodeOfObject into linkablePartAllBCOs. - Refactor linkablePartAllBCOs to avoid a panic if a LazyBCO has a C stub. Document the fact that LazyBCOs are returned in this case (contrary to linkableBCOs which only returns non-lazy ones) Refactoring done while trying to understand how to adapt the linker code to support the JS backend too (cf #24886). - - - - - fa0dbaca by Mario Blažević at 2024-08-17T03:31:32+00:00 Implements the Exportable Named Default proposal (#24305) This squashed commit adds support for exportable named defaults, the accepted GHC proposal at https://github.com/ghc-proposals/ghc-proposals/pull/409 The proposal extends the Haskell '98 declarations default (Int, Double) which were implicitly always applying to Num class alone, to allow specifying an arbitrary single-parameter class: default IsString (Text, String) The effect of this declaration would be to eliminate the ambiguous type errors around string literals when OverloadedStrings extension is active. The declaration by itself has effect only in its module, so the proposal also adds the ability to export class defaults: module MyModule (default IsIstring) Once the language extension is published and established, we can consider using it in base and other libraries. See Note [Named default declarations] in GHC.Tc.Gen.Default for implementation details. - - - - - 1deba6b2 by Simon Peyton Jones at 2024-08-17T13:58:13-04:00 Make kick-out more selective This MR revised the crucial kick-out criteria in the constraint solver. Ticket #24984 showed an example in which * We were kicking out unnecessarily * That gave rise to extra work, of course * But it /also/ led to exponentially-sized coercions due to lack of sharing in coercions (something we want to fix separately #20264) This MR sharpens up the kick-out criteria; specifially in (KK2) we look only under type family applications if (fs>=fw). This forced me to understand the existing kick-out story, and I ended up rewriting many of the careful Notes in GHC.Tc.Solver.InertSet. Especially look at the new `Note [The KickOut Criteria]` The proof of termination is not air-tight, but it is better than before, and both Richard and I think it's correct :-). - - - - - 88488847 by Cheng Shao at 2024-08-18T04:44:01+02:00 testsuite: remove undesired -fasm flag from test ways This patch removes the -fasm flag from test ways, except ways like optasm that explicitly state they are meant to be compiled with NCG backend. Most test ways should use the default codegen backend, and the precense of -fasm can cause stderr mismatches like this when GHC is configured with the unregisterised backend: ``` --- /dev/null +++ /tmp/ghctest-3hydwldj/test spaces/testsuite/tests/profiling/should_compile/prof-late-cc.run/prof-late-cc.comp.stderr.normalised @@ -0,0 +1,2 @@ +when making flags consistent: warning: [GHC-74335] [-Winconsistent-flags (in -Wdefault)] + Target platform uses unregisterised ABI, so compiling via C *** unexpected failure for prof-late-cc(prof_no_auto) ``` This has been breaking the wasm unreg nightly job since !12595 landed. - - - - - 3a145315 by Cheng Shao at 2024-08-18T13:05:45-04:00 ghci: fix isMinTTY.h casing for Windows targets This commit fixes isMinTTY.h casing in isMinTTY.c that's compiled for Windows targets. While this looks harmless given Windows filesystems are case-insensitive by default, it does cause a compilation warning with recent versions of clang, so we might as well fix the casing: ``` driver\ghci\isMinTTY.c:10:10: error: warning: non-portable path to file '"isMinTTY.h"'; specified path differs in case from file name on disk [-Wnonportable-include-path] | 10 | #include "isMINTTY.h" | ^ #include "isMINTTY.h" ^~~~~~~~~~~~ "isMinTTY.h" 1 warning generated. ``` - - - - - 5f972bfb by Zubin Duggal at 2024-08-21T03:18:15-04:00 compiler: Fix pretty printing of ticked prefix constructors (#24237) - - - - - ef0a08e7 by Mike Pilgrem at 2024-08-21T03:18:57-04:00 Fix #15773 Clarify further -rtsopts 'defaults' in docs - - - - - 05a4be58 by Sebastian Graf at 2024-08-21T03:19:33-04:00 Improve efficiency of `assertError` (#24625) ... by moving `lazy` to the exception-throwing branch. It's all documented in `Note [Strictness of assertError]`. - - - - - c29b2b5a by sheaf at 2024-08-21T13:11:30-04:00 GHCi debugger: drop record name spaces for Ids When binding new local variables at a breakpoint, we should create Ids with variable namespace, and not record field namespace. Otherwise the rest of the compiler falls over because the IdDetails are wrong. Fixes #25109 - - - - - bd82ac9f by Hécate Kleidukos at 2024-08-21T13:12:12-04:00 base: Final deprecation of GHC.Pack The timeline mandated by #21461 has come to its term and after two years and four minor releases, we are finally removing GHC.Pack from base. Closes #21536 - - - - - 5092dbff by Sylvain Henry at 2024-08-21T13:12:54-04:00 JS: support rubbish static literals (#25177) Support for rubbish dynamic literals was added in #24664. This patch does the same for static literals. Fix #25177 - - - - - b5a2c061 by Phil de Joux at 2024-08-21T13:13:33-04:00 haddock docs: prefix comes before, postfix comes after - - - - - 6fde3685 by Marcin Szamotulski at 2024-08-21T23:15:39-04:00 haddock: include package info with --show-interface - - - - - 7e02111b by Andreas Klebinger at 2024-08-21T23:16:15-04:00 Document the (x86) SIMD macros. Fixes #25021. - - - - - 05116c83 by Rodrigo Mesquita at 2024-08-22T10:37:44-04:00 ghc-internal: Derive version from ghc's version Fixes #25005 - - - - - 73f5897d by Ben Gamari at 2024-08-22T10:37:44-04:00 base: Deprecate GHC.Desugar See https://github.com/haskell/core-libraries-committee/issues/216. This will be removed in GHC 9.14. - - - - - 821d0a9a by Cheng Shao at 2024-08-22T10:38:22-04:00 compiler: Store ForeignStubs and foreign C files in interfaces This data is used alongside Core bindings to reconstruct intermediate build products when linking Template Haskell splices with bytecode. Since foreign stubs and files are generated in the pipeline, they were lost with only Core bindings stored in interfaces. The interface codec type `IfaceForeign` contains a simplified representation of `ForeignStubs` and the set of foreign sources that were manually added by the user. When the backend phase writes an interface, `mkFullIface` calls `encodeIfaceForeign` to read foreign source file contents and assemble `IfaceForeign`. After the recompilation status check of an upstream module, `initWholeCoreBindings` calls `decodeIfaceForeign` to restore `ForeignStubs` and write the contents of foreign sources to the file system as temporary files. The restored foreign inputs are then processed by `hscInteractive` in the same manner as in a regular pipeline. When linking the stub objects for splices, they are excluded from suffix adjustment for the interpreter way through a new flag in `Unlinked`. For details about these processes, please consult Note [Foreign stubs and TH bytecode linking]. Metric Decrease: T13701 - - - - - f0408eeb by Cheng Shao at 2024-08-23T10:37:10-04:00 git: remove a.out and include it in .gitignore a.out is a configure script byproduct. It was mistakenly checked into the tree in !13118. This patch removes it, and include it in .gitignore to prevent a similar error in the future. - - - - - 1f95c5e4 by Matthew Pickering at 2024-08-23T10:37:46-04:00 docs: Fix code-block syntax on old sphinx version This code-block directive breaks the deb9 sphinx build. Fixes #25201 - - - - - 27dceb42 by Sylvain Henry at 2024-08-26T11:05:11-04:00 JS: add basic support for POSIX *at functions (#25190) openat/fstatat/unlinkat/dup are now used in the recent release of the `directory` and `file-io` packages. As such, these functions are (indirectly) used in the following tests one we'll bump the `directory` submodule (see !13122): - openFile008 - jsOptimizer - T20509 - bkpcabal02 - bkpcabal03 - bkpcabal04 - - - - - c68be356 by Matthew Pickering at 2024-08-26T11:05:11-04:00 Update directory submodule to latest master The primary reason for this bump is to fix the warning from `ghc-pkg check`: ``` Warning: include-dirs: /data/home/ubuntu/.ghcup/ghc/9.6.2/lib/ghc-9.6.2/lib/../lib/aarch64-linux-ghc-9.6.2/directory-1.3.8.1/include doesn't exist or isn't a directory ``` This also requires adding the `file-io` package as a boot library (which is discussed in #25145) Fixes #23594 #25145 - - - - - 4ee094d4 by Matthew Pickering at 2024-08-26T11:05:47-04:00 Fix aarch64-alpine target platform description We are producing bindists where the target triple is aarch64-alpine-linux when it should be aarch64-unknown-linux This is because the bootstrapped compiler originally set the target triple to `aarch64-alpine-linux` which is when propagated forwards by setting `bootstrap_target` from the bootstrap compiler target. In order to break this chain we explicitly specify build/host/target for aarch64-alpine. This requires a new configure flag `--enable-ignore-` which just switches off a validation check that the target platform of the bootstrap compiler is the same as the build platform. It is the same, but the name is just wrong. These commits can be removed when the bootstrap compiler has the correct target triple (I looked into patching this on ci-images, but it looked hard to do correctly as the build/host platform is not in the settings file). Fixes #25200 - - - - - e0e0f2b2 by Matthew Pickering at 2024-08-26T11:05:47-04:00 Bump nixpkgs commit for gen_ci script - - - - - 63a27091 by doyougnu at 2024-08-26T20:39:30-04:00 rts: win32: emit additional debugging information -- migration from haskell.nix - - - - - aaab3d10 by Vladislav Zavialov at 2024-08-26T20:40:06-04:00 Only export defaults when NamedDefaults are enabled (#25206) This is a reinterpretation of GHC Proposal #409 that avoids a breaking change introduced in fa0dbaca6c "Implements the Exportable Named Default proposal" Consider a module M that has no explicit export list: module M where default (Rational) Should it export the default (Rational)? The proposal says "yes", and there's a test case for that: default/DefaultImport04.hs However, as it turns out, this change in behavior breaks existing programs, e.g. the colour-2.3.6 package can no longer be compiled, as reported in #25206. In this patch, we make implicit exports of defaults conditional on the NamedDefaults extension. This fix is unintrusive and compliant with the existing proposal text (i.e. it does not require a proposal amendment). Should the proposal be amended, we can go for a simpler solution, such as requiring all defaults to be exported explicitly. Test case: testsuite/tests/default/T25206.hs - - - - - 3a5bebf8 by Matthew Pickering at 2024-08-28T14:16:42-04:00 simplifier: Fix space leak during demand analysis The lazy structure (a list) in a strict field in `DmdType` is not fully forced which leads to a very large thunk build-up. It seems there is likely still more work to be done here as it seems we may be trading space usage for work done. For now, this is the right choice as rather than using all the memory on my computer, compilation just takes a little bit longer. See #25196 - - - - - c2525e9e by Ryan Scott at 2024-08-28T14:17:17-04:00 Add missing parenthesizeHsType in cvtp's InvisP case We need to ensure that when we convert an `InvisP` (invisible type pattern) to a `Pat`, we parenthesize it (at precedence `appPrec`) so that patterns such as `@(a :: k)` will parse correctly when roundtripped back through the parser. Fixes #25209. - - - - - 1499764f by Sjoerd Visscher at 2024-08-29T16:52:56+02:00 Haddock: Add no-compilation flag This flag makes sure to avoid recompilation of the code when generating documentation by only reading the .hi and .hie files, and throw an error if it can't find them. - - - - - 768fe644 by Andreas Klebinger at 2024-09-03T13:15:20-04:00 Add functions to check for weakly pinned arrays. This commit adds `isByteArrayWeaklyPinned#` and `isMutableByteArrayWeaklyPinned#` primops. These check if a bytearray is *weakly* pinned. Which means it can still be explicitly moved by the user via compaction but won't be moved by the RTS. This moves us one more stop closer to nailing down #22255. - - - - - b16605e7 by Arsen Arsenović at 2024-09-03T13:16:05-04:00 ghc-toolchain: Don't leave stranded a.outs when testing for -g0 This happened because, when ghc-toolchain tests for -g0, it does so by compiling an empty program. This compilation creates an a.out. Since we create a temporary directory, lets place the test program compilation in it also, so that it gets cleaned up. Fixes: 25b0b40467d0a12601497117c0ad14e1fcab0b74 Closes: https://gitlab.haskell.org/ghc/ghc/-/issues/25203 - - - - - 83e70b14 by Torsten Schmits at 2024-09-03T13:16:41-04:00 Build foreign objects for TH with interpreter's way when loading from iface Fixes #25211 When linking bytecode for TH from interface core bindings with `-fprefer-byte-code`, foreign sources are loaded from the interface as well and compiled to object code in an ad-hoc manner. The results are then loaded by the interpreter, whose way may differ from the current build's target way. This patch ensures that foreign objects are compiled with the interpreter's way. - - - - - 0d3bc2fa by Cheng Shao at 2024-09-04T07:20:06-04:00 rts: fix checkClosure error message This patch fixes an error message in checkClosure() when the closure has already been evacuated. The previous logic was meant to print the evacuated closure's type in the error message, but it was completely wrong, given info was not really an info table, but a tagged pointer that points to the closure's new address. - - - - - fb0a4e5c by Sven Tennie at 2024-09-04T07:20:43-04:00 MO_AcquireFence: Less restrictive barrier GCC and CLang translate the built-in `atomic_thread_fence(memory_order_acquire)` to `dmb ishld`, which is a bit less restrictive than `dmb ish` (which also implies stores.) - - - - - a45f1488 by Fendor at 2024-09-04T20:22:00-04:00 testsuite: Add support to capture performance metrics via 'perf' Performance metrics collected via 'perf' can be more accurate for run-time performance than GHC's rts, due to the usage of hardware counters. We allow performance tests to also record PMU events according to 'perf list'. - - - - - ce61fca5 by Fendor at 2024-09-04T20:22:00-04:00 gitlab-ci: Add nightly job for running the testsuite with perf profiling support - - - - - 6dfb9471 by Fendor at 2024-09-04T20:22:00-04:00 Enable perf profiling for compiler performance tests - - - - - da306610 by sheaf at 2024-09-04T20:22:41-04:00 RecordCon lookup: don't allow a TyCon This commit adds extra logic when looking up a record constructor. If GHC.Rename.Env.lookupOccRnConstr returns a TyCon (as it may, due to the logic explained in Note [Pattern to type (P2T) conversion]), we emit an error saying that the data constructor is not in scope. This avoids the compiler falling over shortly thereafter, in the call to 'lookupConstructorInfo' inside 'GHC.Rename.Env.lookupRecFieldOcc', because the record constructor would not have been a ConLike. Fixes #25056 - - - - - 9c354beb by Matthew Pickering at 2024-09-04T20:23:16-04:00 Use deterministic names for temporary files When there are multiple threads they can race to create a temporary file, in some situations the thread will create ghc_1.c and in some it will create ghc_2.c. This filename ends up in the debug info for object files after compiling a C file, therefore contributes to object nondeterminism. In order to fix this we store a prefix in `TmpFs` which serves to namespace temporary files. The prefix is populated from the counter in TmpFs when the TmpFs is forked. Therefore the TmpFs must be forked outside the thread which consumes it, in a deterministic order, so each thread always receives a TmpFs with the same prefix. This assumes that after the initial TmpFs is created, all other TmpFs are created from forking the original TmpFs. Which should have been try anyway as otherwise there would be file collisions and non-determinism. Fixes #25224 - - - - - 59906975 by Hécate Kleidukos at 2024-09-05T10:57:15-04:00 Silence x-partial in Haddock.Backends.Xhtml This is an unfortunate consequence of two mechanisms: * GHC provides (possibly-empty) lists of names * The functions that retrieve those names are not equipped to do error reporting, and thus accept these lists at face value. They will have to be attached an effect for error reporting in a later refactoring - - - - - 8afbab62 by Hécate Kleidukos at 2024-09-05T10:57:15-04:00 hadrian: Support loading haddock in ghci There is one tricky aspect with wired-in packages where the boot package is built with `-this-unit-id ghc` but the dependency is reported as `-package-id ghc-9.6...`. This has never been fixed in GHC as the situation of loading wired-in packages into the multi-repl seems like quite a niche feature that is always just easier to workaround. - - - - - 6cac9eb8 by Matthew Pickering at 2024-09-05T10:57:15-04:00 hadrian/multi: Load all targets when ./hadrian/ghci-multi is called This seems to make a bit more sense than just loading `ghc` component (and dependencies). - - - - - 7d84df86 by Matthew Pickering at 2024-09-05T10:57:51-04:00 ci: Beef up determinism interface test There have recently been some determinism issues with the simplifier and documentation. We enable more things to test in the ABI test to check that we produce interface files deterministically. - - - - - 5456e02e by Sylvain Henry at 2024-09-06T11:57:01+02:00 Transform some StgRhsClosure into StgRhsCon after unarisation (#25166) Before unarisation we may have code like: Test.foo :: Test.D [GblId, Unf=OtherCon []] = \u [] case (# |_| #) [GHC.Types.(##)] of sat_sAw [Occ=Once1] { __DEFAULT -> Test.D [GHC.Types.True sat_sAw]; }; After unarisation we get: Test.foo :: Test.D [GblId, Unf=OtherCon []] = {} \u [] Test.D [GHC.Types.True 2#]; Notice that it's still an Updatable closure for no reason anymore. This patch transforms appropriate StgRhsClosures into StgRhsCons after unarisation, allowing these closures to be statically allocated. Now we get the expected: Test.foo :: Test.D [GblId, Unf=OtherCon []] = Test.D! [GHC.Types.True 2#]; Fix #25166 To avoid duplicating code, this patch refactors the mk(Top)StgRhs functions and put them in a GHC.Stg.Make module alongside the new mk(Top)StgRhsCon_maybe functions. - - - - - 958b4518 by Hécate Kleidukos at 2024-09-06T16:40:56-04:00 haddock: Add missing requirements.txt for the online manual - - - - - 573f9833 by Sven Tennie at 2024-09-08T09:58:21+00:00 AArch64: Implement takeRegRegMoveInstr This has likely been forgotten. - - - - - 20b0de7d by Hécate Kleidukos at 2024-09-08T14:19:28-04:00 haddock: Configuration fix for ReadTheDocs - - - - - 03055c71 by Sylvain Henry at 2024-09-09T14:58:15-04:00 JS: fake support for native adjustors (#25159) The JS backend doesn't support adjustors (I believe) and in any case if it ever supports them it will be a native support, not one via libffi. - - - - - 5bf0e6bc by Sylvain Henry at 2024-09-09T14:58:56-04:00 JS: remove redundant h$lstat It was introduced a second time by mistake in 27dceb42376c34b99a38e36a33b2abc346ed390f (cf #25190) - - - - - ffbc2ab0 by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Refactor only newSysLocalDs * Change newSysLocalDs to take a scaled type * Add newSysLocalMDs that takes a type and makes a ManyTy local Lots of files touched, nothing deep. - - - - - 7124e4ad by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Don't introduce 'nospec' on the LHS of a RULE This patch address #25160. The main payload is: * When desugaring the LHS of a RULE, do not introduce the `nospec` call for non-canonical evidence. See GHC.Core.InstEnv Note [Coherence and specialisation: overview] The `nospec` call usually introdued in `dsHsWrapper`, but we don't want it on the LHS of a RULE (that's what caused #25160). So now `dsHsWrapper` takes a flag to say if it's on the LHS of a RULE. See wrinkle (NC1) in `Note [Desugaring non-canonical evidence]` in GHC.HsToCore.Binds. But I think this flag will go away again when I have finished with my (entirely separate) speciaise-on-values patch (#24359). All this meant I had to re-understand the `nospec` stuff and coherence, and that in turn made me do some refactoring, and add a lot of new documentation The big change is that in GHC.Core.InstEnv, I changed the /type synonym/ `Canonical` into a /data type/ `CanonicalEvidence` and documented it a lot better. That in turn made me realise that CalLStacks were being treated with a bit of a hack, which I documented in `Note [CallStack and ExecptionContext hack]`. - - - - - 663daf8d by Simon Peyton Jones at 2024-09-10T00:40:37-04:00 Add defaulting of equalities This MR adds one new defaulting strategy to the top-level defaulting story: see Note [Defaulting equalities] in GHC.Tc.Solver. This resolves #25029 and #25125, which showed that users were accidentally relying on a GHC bug, which was fixed by commit 04f5bb85c8109843b9ac2af2a3e26544d05e02f4 Author: Simon Peyton Jones <simon.peytonjones at gmail.com> Date: Wed Jun 12 17:44:59 2024 +0100 Fix untouchability test This MR fixes #24938. The underlying problem was tha the test for "does this implication bring in scope any equalities" was plain wrong. This fix gave rise to a number of user complaints; but the improved defaulting story of this MR largely resolves them. On the way I did a bit of refactoring, of course * Completely restructure the extremely messy top-level defaulting code. The new code is in GHC.Tc.Solver.tryDefaulting, and is much, much, much esaier to grok. - - - - - e28cd021 by Andrzej Rybczak at 2024-09-10T00:41:18-04:00 Don't name a binding pattern It's a keyword when PatternSynonyms are set. - - - - - b09571e2 by Simon Peyton Jones at 2024-09-10T00:41:54-04:00 Do not use an error thunk for an absent dictionary In worker/wrapper we were using an error thunk for an absent dictionary, but that works very badly for -XDictsStrict, or even (as #24934 showed) in some complicated cases involving strictness analysis and unfoldings. This MR just uses RubbishLit for dictionaries. Simple. No test case, sadly because our only repro case is rather complicated. - - - - - 8bc9f5f6 by Hécate Kleidukos at 2024-09-10T00:42:34-04:00 haddock: Remove support for applehelp format in the Manual - - - - - 9ca15506 by doyougnu at 2024-09-10T10:46:38-04:00 RTS linker: add support for hidden symbols (#25191) Add linker support for hidden symbols. We basically treat them as weak symbols. Patch upstreamed from haskell.nix Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 3b2dc826 by Sven Tennie at 2024-09-10T10:47:14-04:00 Fix C warnings (#25237) GCC 14 treats the fixed warnings as errors by default. I.e. we're gaining GCC 14 compatibility with these fixes. - - - - - 05715994 by Sylvain Henry at 2024-09-10T10:47:55-04:00 JS: fix codegen of static string data Before this patch, when string literals are made trivial, we would generate `h$("foo")` instead of `h$str("foo")`. This was introduced by mistake in 6bd850e887b82c5a28bdacf5870d3dc2fc0f5091. - - - - - 949ebced by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Re-organise cross-OS compatibility layer - - - - - 84ac9a99 by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Remove CPP for obsolete GHC and Cabal versions - - - - - 370d1599 by Hécate Kleidukos at 2024-09-10T19:19:40-04:00 haddock: Move the changelog file to the 'extra-doc-files' section in the cabal file - - - - - cfbff65a by Simon Peyton Jones at 2024-09-10T19:20:16-04:00 Add ZonkAny and document it This MR fixed #24817 by adding ZonkAny, which takes a Nat argument. See Note [Any types] in GHC.Builtin.Types, especially wrinkle (Any4). - - - - - 0167e472 by Matthew Pickering at 2024-09-11T02:41:42-04:00 hadrian: Make sure ffi headers are built before using a compiler When we are using ffi adjustors then we rely on `ffi.h` and `ffitarget.h` files during code generation when compiling stubs. Therefore we need to add this dependency to the build system (which this patch does). Reproducer, configure with `--enable-libffi-adjustors` and then build "_build/stage1/libraries/ghc-prim/build/GHC/Types.p_o". Observe that this fails before this patch and works afterwards. Fixes #24864 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 0f696958 by Rodrigo Mesquita at 2024-09-11T02:42:18-04:00 base: Deprecate BCO primops exports from GHC.Exts See https://github.com/haskell/core-libraries-committee/issues/212. These reexports will be removed in GHC 9.14. - - - - - cf0e7729 by Alan Zimmerman at 2024-09-11T02:42:54-04:00 EPA: Remove Anchor = EpaLocation synonym This just causes confusion. - - - - - 8e462f4d by Andrew Lelechenko at 2024-09-11T22:20:37-04:00 Bump submodule deepseq to 1.5.1.0 - - - - - aa4500ae by Sebastian Graf at 2024-09-11T22:21:13-04:00 User's guide: Fix the "no-backtracking" example of -XOrPatterns (#25250) Fixes #25250. - - - - - 1c479c01 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add Native Code Generator (NCG) This architecture wasn't supported before. Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 51b678e1 by Sven Tennie at 2024-09-12T10:39:38+00:00 Adjust test timings for slower computers Increase the delays a bit to be able to run these tests on slower computers. The reference was a Lichee Pi 4a RISCV64 machine. - - - - - a0e41741 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add RTS linker This architecture wasn't supported before. Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - d365b1d4 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Ignore divbyzero test The architecture's behaviour differs from the test's expectations. See comment in code why this is okay. - - - - - abf3d699 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Enable MulMayOflo_full test It works and thus can be tested. - - - - - 38c7ea8c by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: LibffiAdjustor: Ensure code caches are flushed RISCV64 needs a specific code flushing sequence (involving fence.i) when new code is created/loaded. - - - - - 7edc6965 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add additional linker symbols for builtins We're relying on some GCC/Clang builtins. These need to be visible to the linker (and not be stripped away.) - - - - - 92ad3d42 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Add GHCi support As we got a RTS linker for this architecture now, we can enable GHCi for it. - - - - - a145f701 by Sven Tennie at 2024-09-12T10:39:38+00:00 RISCV64: Set codeowners of the NCG - - - - - 8e6d58cf by Sven Tennie at 2024-09-12T10:39:38+00:00 Add test for C calling convention Ensure that parameters and return values are correctly processed. A dedicated test (like this) helps to get the subtleties of calling conventions easily right. The test is failing for WASM32 and marked as fragile to not forget to investigate this (#25249). - - - - - fff55592 by Torsten Schmits at 2024-09-12T21:50:34-04:00 finder: Add `IsBootInterface` to finder cache keys - - - - - cdf530df by Alan Zimmerman at 2024-09-12T21:51:10-04:00 EPA: Sync ghc-exactprint to GHC - - - - - 1374349b by Sebastian Graf at 2024-09-13T07:52:11-04:00 DmdAnal: Fast path for `multDmdType` (#25196) This is in order to counter a regression exposed by SpecConstr. Fixes #25196. - - - - - 80769bc9 by Andrew Lelechenko at 2024-09-13T07:52:47-04:00 Bump submodule array to 0.5.8.0 - - - - - 49ac3fb8 by Sylvain Henry at 2024-09-16T10:33:01-04:00 Linker: add support for extra built-in symbols (#25155) See added Note [Extra RTS symbols] and new user guide entry. Co-authored-by: Hamish Mackenzie <Hamish.K.Mackenzie at gmail.com> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 3939a8bf by Samuel Thibault at 2024-09-16T10:33:44-04:00 GNU/Hurd: Add getExecutablePath support GNU/Hurd exposes it as /proc/self/exe just like on Linux. - - - - - d3b19851 by Sylvain Henry at 2024-09-17T11:03:28-04:00 RTS: expose closure_sizeW_ (#25252) C code using the closure_sizeW macro can't be linked with the RTS linker without this patch. It fails with: ghc-9.11.20240911: Failed to lookup symbol: closure_sizeW_ Fix #25252 Co-authored-by: Hamish Mackenzie <Hamish.K.Mackenzie at gmail.com> Co-authored-by: Moritz Angermann <moritz.angermann at gmail.com> - - - - - 137bf74d by Sebastian Graf at 2024-09-17T11:04:05-04:00 HsExpr: Inline `HsWrap` into `WrapExpr` This nice refactoring was suggested by Simon during review: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13261#note_583374 Fixes #25264. - - - - - 7fd9e5e2 by Sebastian Graf at 2024-09-17T11:04:05-04:00 Pmc: Improve Desugaring of overloaded list patterns (#25257) This actually makes things simpler. Fixes #25257. - - - - - e4169ba9 by Ben Gamari at 2024-09-18T07:55:28-04:00 configure: Correctly report when subsections-via-symbols is disabled As noted in #24962, currently subsections-via-symbols is disabled on AArch64/Darwin due to alleged breakage. However, `configure` reports to the user that it is enabled. Fix this. - - - - - 9d20a787 by Mario Blažević at 2024-09-18T07:56:08-04:00 Modified the default export implementation to match the amended spec - - - - - 35eb4f42 by Sylvain Henry at 2024-09-18T07:57:00-04:00 FFI: don't ppr Id/Var symbols with debug info (#25255) Even if `-dpp-debug` is enabled we should still generate valid C code. So we disable debug info printing when rendering with Code style. - - - - - 9e96dad8 by Sebastian Graf at 2024-09-21T17:47:59-04:00 Demand: Combine examples into Note (#25107) Just a leftover from !13060. Fixes #25107. - - - - - 21aaa34b by sheaf at 2024-09-21T17:48:36-04:00 Use x86_64-unknown-windows-gnu target for LLVM on Windows - - - - - 992a7624 by sheaf at 2024-09-21T17:48:36-04:00 LLVM: use -relocation-model=pic on Windows This is necessary to avoid the segfaults reported in #22487. Fixes #22487 - - - - - c50d29be by Ryan Hendrickson at 2024-09-21T17:49:15-04:00 compiler: Use type abstractions when deriving For deriving newtype and deriving via, in order to bring type variables needed for the coercions into scope, GHC generates type signatures for derived class methods. As a simplification, drop the type signatures and instead use type abstractions to bring method type variables into scope. - - - - - f04fd0ae by Zubin Duggal at 2024-09-21T17:49:51-04:00 driver: Ensure we run driverPlugin for staticPlugins (#25217) driverPlugins are only run when the plugin state changes. This meant they were never run for static plugins, as their state never changes. We need to keep track of whether a static plugin has been initialised to ensure we run static driver plugins at least once. This necessitates an additional field in the `StaticPlugin` constructor as this state has to be bundled with the plugin itself, as static plugins have no name/identifier we can use to otherwise reference them - - - - - 620becd7 by Andreas Klebinger at 2024-09-21T17:50:27-04:00 Allow unknown fd device types for setNonBlockingMode. This allows fds with a unknown device type to have blocking mode set. This happens for example for fds from the inotify subsystem. Fixes #25199. - - - - - c76e25b3 by Hécate Kleidukos at 2024-09-21T17:51:07-04:00 Use Hackage version of Cabal 3.14.0.0 for Hadrian. We remove the vendored Cabal submodule. Also update the bootstrap plans Fixes #25086 - - - - - 6c83fd7f by Zubin Duggal at 2024-09-21T17:51:07-04:00 ci: Ensure we source ci.sh in any jobs that run commands outside of ci.sh ci.sh sets up the toolchain environment, including paths for the cabal directory, the toolchain binaries etc. If we run any commands outside of ci.sh, unless we source ci.sh we will use the wrong values for these environment variables. In particular, I ran into an issue where the cabal invocation `hadrian/ghci` was using an old index state despite `ci.sh setup` updating and setting the correct index state. This is because `ci.sh` sets the `CABAL_DIR` to a different place, which is where the index was downloaded to, but we were using the default cabal directory outside ci.sh The solution is to source the correct environment `ci.sh` using `. ci.sh setup` - - - - - 9586998d by Sven Tennie at 2024-09-21T17:51:43-04:00 ghc-toolchain: Set -fuse-ld even for ld.bfd This reflects the behaviour of the autoconf scripts. - - - - - d7016e0d by Sylvain Henry at 2024-09-21T17:52:24-04:00 Parser: be more careful when lexing extended literals (#25258) Previously we would lex invalid prefixes like "8#Int3" as [8#Int, 3]. A side-effect of this patch is that we now allow negative unsigned extended literals. They trigger an overflow warning later anyway. - - - - - ca67d7cb by Zubin Duggal at 2024-09-22T02:34:06-04:00 rts: Ensure we dump new Cost Centres added by freshly loaded objects to the eventlog. To do this, we keep track of the ID of the last cost centre we dumped in DUMPED_CC_ID, and call dumpCostCentresToEventLog from refreshProfilingCCSs, which will dump all the new cost centres up to the one we already dumped in DUMPED_CC_ID. Fixes #24148 - - - - - c0df5aa9 by Alan Zimmerman at 2024-09-22T02:34:42-04:00 EPA: Replace AnnsModule am_main with EpTokens Working towards removing `AddEpAnn` - - - - - 2a551cd5 by Matthew Pickering at 2024-09-24T16:33:50+05:30 ci: Run abi-test on test-abi label - - - - - ab4039ac by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 testsuite: Add a test for object determinism Extends the abi_test with an object determinism check Also includes a standalone test to be run by developers manually when debugging issues with determinism. - - - - - d62c18d8 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Sampling uniques in the CG To achieve object determinism, the passes processing Cmm and the rest of the code generation pipeline musn't create new uniques which are non-deterministic. This commit changes occurrences of non-deterministic unique sampling within these code generation passes by a deterministic unique sampling strategy by propagating and threading through a deterministic incrementing counter in them. The threading is done implicitly with `UniqDSM` and `UniqDSMT`. Secondly, the `DUniqSupply` used to run a `UniqDSM` must be threaded through all passes to guarantee uniques in different passes are unique amongst them altogether. Specifically, the same `DUniqSupply` must be threaded through the CG Streaming pipeline, starting with Driver.Main calling `StgToCmm.codeGen`, `cmmPipeline`, `cmmToRawCmm`, and `codeOutput` in sequence. To thread resources through the `Stream` abstraction, we use the `UniqDSMT` transformer on top of `IO` as the Monad underlying the Stream. `UniqDSMT` will thread the `DUniqSupply` through every pass applied to the `Stream`, for every element. We use @type CgStream = Stream (UniqDSMT IO)@ for the Stream used in code generation which that carries through the deterministic unique supply. See Note [Deterministic Uniques in the CG] - - - - - 3bbe4af4 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Cmm unique renaming pass To achieve object determinism, we need to prevent the non-deterministic uniques from leaking into the object code. We can do this by deterministically renaming the non-external uniques in the Cmm groups that are yielded right after StgToCmm. The key to deterministic renaming is observing that the order of declarations, instructions, and data in the Cmm groups are already deterministic (modulo other determinism bugs), regardless of the uniques. We traverse the Cmm AST in this deterministic order and rename the uniques, incrementally, in the order they are found, thus making them deterministic. This renaming is guarded by -fobject-determinism which is disabled by default for now. This is one of the key passes for object determinism. Read about the overview of object determinism and a more detailed explanation of this pass in: * Note [Object determinism] * Note [Renaming uniques deterministically] Significantly closes the gap to #12935 - - - - - 8357ed50 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: DCmmGroup vs CmmGroup Part of our strategy in producing deterministic objects, namely, renaming all Cmm uniques in order, depend on the object code produced having a deterministic order (say, A_closure always comes before B_closure). However, the use of LabelMaps in the Cmm representation invalidated this requirement because the LabelMaps elements would already be in a non-deterministic order (due to the original uniques), and the renaming in sequence wouldn't work because of that non-deterministic order. Therefore, we now start off with lists in CmmGroup (which preserve the original order), and convert them into LabelMaps (for performance in the code generator) after the uniques of the list elements have been renamed. See Note [DCmmGroup vs CmmGroup or: Deterministic Info Tables] and #12935. Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - 0e675fb8 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: Don't print unique in pprFullName This unique was leaking as part of the profiling description in info tables when profiling was enabled, despite not providing information relevant to the profile. - - - - - 340f58b0 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: UDFM for distinct-constructor-tables In order to produce deterministic objects when compiling with -distinct-constructor-tables, we also have to update the data constructor map to be backed by a deterministic unique map (UDFM) rather than a non-deterministic one (UniqMap). - - - - - 282f37a0 by Rodrigo Mesquita at 2024-09-24T16:33:50+05:30 determinism: InfoTableMap uniques in generateCgIPEStub Fixes object determinism when using -finfo-table-map Make sure to also deterministically rename the IPE map (as per Note [Renaming uniques deterministically]), and to use a deterministic unique supply when creating new labels for the IPE information to guarantee deterministic objects when IPE information is requested. Note that the Cmm group produced in generateCgIPEStub must /not/ be renamed because renaming uniques is not idempotent, and the references to the previously renamed code in the IPE Cmm group would be renamed twice and become invalid references to non-existent symbols. We do need to det-rename the InfoTableMap that is created in the conversion from Core to Stg. This is not a problem since that map won't refer any already renamed names (since it was created before the renaming). - - - - - 7b37afc9 by Zubin Duggal at 2024-09-24T16:33:50+05:30 ci: Allow abi-test to fail. We are not fully deterministic yet, see #12935 for work that remains to be done. - - - - - a63ee33a by Simon Peyton Jones at 2024-09-25T17:08:24-04:00 Add Given injectivity for built-in type families Ticket #24845 asks (reasonably enough) that if we have [G] a+b ~ 0 then we also know [G] a ~ 0, b ~ 0 and similar injectivity-like facts for other built-in type families. The status quo was that we never generate evidence for injectivity among Givens -- but it is quite reasonnable to do so. All we need is to have /evidence/ for the new constraints This MR implements that goal. I also took the opportunity to * Address #24978: refactoring UnivCo * Fix #25248, which was a consequences of the previous formulation of UnivCo As a result this MR touches a lot of code. The big things are: * Coercion constructor UnivCo now takes a [Coercion] as argument to express the coercions on which the UnivCo depends. A nice consequence is that UnivCoProvenance now has no free variables, simpler in a number of places. * Coercion constructors AxiomInstCo and AxiomRuleCo are combined into AxiomCo. The new AxiomCo, carries a (slightly oddly named) CoAxiomRule, which itself is a sum type of the various forms of built-in axiom. See Note [CoAxiomRule] in GHC.Core.Coercion.Axiom A merit of this is that we can separate the case of open and closed type families, and eliminate the redundant `BranchIndex` in the former case. * Much better representation for data BuiltInSynFamily, which means we no longer need to enumerate built-in axioms as well as built-in tycons. * There is a massive refactor in GHC.Builtin.Types.Literals, which contains all the built-in axioms for type-level operations (arithmetic, append, cons etc). A big change is that instead of redundantly having (a) a hand-written matcher, and (b) a template-based "proves" function, which were hard to keep in sync, the two are derive from one set of human-supplied info. See GHC.Builtin.Types.Literals.mkRewriteAxiom, and friends. * Significant changes in GHC.Tc.Solver.Equality to account for the new opportunity for Given/Given equalities. Smaller things * Improve pretty-printing to avoid parens around atomic coercions. * Do proper eqType in findMatchingIrreds, not `eqTypeNoKindCheck`. Looks like a bug, Richard agrees. * coercionLKind and coercionRKind are hot functions. I refactored the implementation (which I had to change anyway) to increase sharing. See Note [coercionKind performance] in GHC.Core.Coercion * I wrote a new Note [Finding orphan names] in GHC.Core.FVs about orphan names * I improved the `is_concrete` flag in GHC.Core.Type.buildSynTyCon, to avoid calling tyConsOfType. I forget exactly why I did this, but it's definitely better now. * I moved some code from GHC.Tc.Types.Constraint into GHC.Tc.Types.CtLocEnv and I renamed the module GHC.Tc.Types.CtLocEnv to GHC.Tc.Types.CtLoc - - - - - dd8ef342 by Ryan Scott at 2024-09-25T17:09:01-04:00 Resolve ambiguous method-bound type variables in vanilla defaults and GND When defining an instance of a class with a "vanilla" default, such as in the following example (from #14266): ```hs class A t where f :: forall x m. Monoid x => t m -> m f = <blah> instance A [] ``` We have to reckon with the fact that the type of `x` (bound by the type signature for the `f` method) is ambiguous. If we don't deal with the ambiguity somehow, then when we generate the following code: ```hs instance A [] where f = $dmf @[] -- NB: the type of `x` is still ambiguous ``` Then the generated code will not typecheck. (Issue #25148 is a more recent example of the same problem.) To fix this, we bind the type variables from the method's original type signature using `TypeAbstractions` and instantiate `$dmf` with them using `TypeApplications`: ```hs instance A [] where f @x @m = $dmf @[] @x @m -- `x` is no longer ambiguous ``` Note that we only do this for vanilla defaults and not for generic defaults (i.e., defaults using `DefaultSignatures`). For the full details, see `Note [Default methods in instances] (Wrinkle: Ambiguous types from vanilla method type signatures)`. The same problem arose in the code generated by `GeneralizedNewtypeDeriving`, as we also fix it here using the same technique. This time, we can take advantage of the fact that `GeneralizedNewtypeDeriving`-generated code _already_ brings method-bound type variables into scope via `TypeAbstractions` (after !13190), so it is very straightforward to visibly apply the type variables on the right-hand sides of equations. See `Note [GND and ambiguity]`. Fixes #14266. Fixes #25148. - - - - - 0a4da5d2 by ARATA Mizuki at 2024-09-25T17:09:41-04:00 Document primitive string literals and desugaring of string literals Fixes #17474 and #17974 Co-authored-by: Matthew Craven <5086-clyring at users.noreply.gitlab.haskell.org> - - - - - ad0731ad by Zubin Duggal at 2024-09-25T17:10:18-04:00 rts: Fix segfault when using non-moving GC with profiling `nonMovingCollect()` swaps out the `static_flag` value used as a sentinel for `gct->scavenged_static_objects`, but the subsequent call `resetStaticObjectForProfiling()` sees the old value of `static_flag` used as the sentinel and segfaults. So we must call `resetStaticObjectForProfiling()` before calling `nonMovingCollect()` as otherwise it looks for the incorrect sentinel value Fixes #25232 and #23958 Also teach the testsuite driver about nonmoving profiling ways and stop disabling metric collection when nonmoving GC is enabled. - - - - - e7a26d7a by Sylvain Henry at 2024-09-25T17:11:00-04:00 Fix interaction between fork and kqueue (#24672) A kqueue file descriptor isn't inherited by a child created with fork. As such we mustn't try to close this file descriptor as we would close a random one, e.g. the one used by timerfd. Fix #24672 - - - - - 6863503c by Simon Peyton Jones at 2024-09-25T17:11:37-04:00 Improve GHC.Tc.Solver.defaultEquality This MR improves GHC.Tc.Solver.defaultEquality to solve #25251. The main change is to use checkTyEqRhs to check the equality, so that we do promotion properly. But within that we needed a small enhancement to LC_Promote. See Note [Defaulting equalites] (DE4) and (DE5) The tricky case is (alas) hard to trigger, so I have not added a regression test. - - - - - 97a6c6c3 by Sylvain Henry at 2024-09-25T17:12:18-04:00 JS: fix h$withCStringOnHeap helper (#25288) strlen returns the length of the string without the \0 terminating byte, hence CString weren't properly allocated on the heap (ending \0 byte was missing). - - - - - 5f7c20bc by Ben Gamari at 2024-09-26T04:14:05-04:00 base: Propagate `error` CallStack to thrown exception Previously `errorCallWithCallStackException` failed to propagate its `CallStack` argument, which represents the call-chain of the preceding `error` call, to the exception that it returned. Consequently, the call-stack of `error` calls were quite useless. Unfortunately, this is the second time that I have fixed this but it seems the first must have been lost in rebasing. Fixes a bug in the implementation of CLC proposal 164 <https://github.com/haskell/core-libraries-committee/issues/164> Fixes #24807. - - - - - c20d5186 by Matthew Pickering at 2024-09-26T04:14:42-04:00 driver: Fix -working-dir for foreign files -working-dir definitely needs more serious testing, there are some easy ways to test this. * Modify Cabal to call ghc using -working-dir rather than changing directory. * Modify the testsuite to run ghc using `-working-dir` rather than running GHC with cwd = temporary directory. However this will have to wait until after 9.12. Fixes #25150 - - - - - 88eaa7ac by Sylvain Henry at 2024-09-26T04:15:24-04:00 Enum deriving: reuse predError, succError, toEnumError Reuse predError, succError, and toEnumError when deriving Enum instances to avoid generating different error strings per instance. E.g. before this patch for every instance for a type FOO we would generate a string: "pred{FOO}: tried to take `pred' of first tag in enumeration"# - - - - - e9fa1163 by Sylvain Henry at 2024-09-26T04:15:24-04:00 Enum deriving: generate better code (#16364) Generate better code for Enum.toEnum: check both the lower and the upper bounds at once with an unsigned comparison. Initially I've used a type ascription with a call to 'fromIntegral', hence the slight refactoring of nlAscribe. Using 'fromIntegral' was problematic (too low in the module hierarchy) so 'enumIntToWord' was introduced instead. Combined with the previous commit, T21839c ghc/alloc decrease by 5% Metric Decrease: T21839c - - - - - 383af074 by Sylvain Henry at 2024-09-26T04:16:06-04:00 Core: add absorb rules for binary or/and (#16351) Rules: x or (x and y) ==> x x and (x or y) ==> x - - - - - 783c8b29 by Matthew Pickering at 2024-09-26T12:07:44-04:00 Don't compile `asBox` with -fprof-late The `asBox` function is intended to store exactly the closure which the user passes to it. Placing a cost centre on asBox introduces a thunk, which violates this expectation and can change the result of using asBox when profiling is enabled. See #25212 for more details and ample opportunity to discuss if this is a bug or not. - - - - - 0967dcc7 by Matthew Pickering at 2024-09-26T12:07:44-04:00 Fix normalisation of .prof files Fix 1: If a cost centre contained CAF then the normalisation was corrupted, now only check if CAF is at the start of a line. Fix 2: "no location info" contain a space, which messed up the next normalisation logic which assumed that columns didn't have spaced in. - - - - - 9eda1cb9 by Matthew Pickering at 2024-09-26T12:07:44-04:00 testsuite: Fix normalisation of prof_files removing newlines These normalisation steps were collapsing lines together, which made subsequent normalisation steps fail. ``` foo x y z CAF x y z qux x y z ``` was getting normalised to ``` foo x y z qux x y z ``` which means that subsequent line based filters would not work correctly. - - - - - 2b25f9e2 by Matthew Pickering at 2024-09-26T12:07:44-04:00 packaging: Enable late-ccs for release flavour This enables late cost centres when building profiled libraries and subsequently greatly improves the resolution of cost centre stacks when profiling. This patch also introduces the `grep_prof` test modifier which is used to apply a further filter to the .prof file before they are compared. Fixes #21732 ------------------------- Metric Increase: libdir ------------------------- - - - - - bb030d0d by Brandon Chinn at 2024-09-26T12:08:21-04:00 Replace manual string lexing (#25158) Metric Increase: MultilineStringsPerf This commit replaces the manual string lexing logic with native Alex lexing syntax. This aligns the lexer much closer to the Haskell Report, making it easier to see how the implementation and spec relate. This slightly increases memory usage when compiling multiline strings because we now have two distinct phases: lexing the multiline string with Alex and post-processing the string afterwards. Before, these were done at the same time, but separating them allows us to push as much logic into normal Alex lexing as possible. Since multiline strings are a new feature, this regression shouldn't be too noticeable. We can optimize this over time. - - - - - 16742987 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Revert !4655: Stop 'import "base" Prelude' removing implicit Prelude import This behaviour is problematic for the principle reason that `import Prelude` may not refer to the `base` package, and in which case importing an entirely unrelated module causing your implicit prelude to leave the scope is extremely surprising. See the added test for this example. Discussion on #17045. The secondary reason for reverting this patch is that "base" can't be a wired in package any more (see #24903), so we have to remove special logic which singles out base from the compiler. The rule for implicit shadowing is now simply: * If you write import Prelude (..) then you don't get an implicit prelude import * If you write import "foobar" Prelude (..) for all pkgs foobar, you get an implicit import of prelude. If you want to write a package import of Prelude, then you can enable `NoImplicitPrelude` for the module in question to recover the behaviour of ghc-9.2-9.10. Fixes #17045 - - - - - 57c50f41 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Rename COMPILING_BASE_PACKAGE to COMPILING_GHC_INTERNAL_PACKAGE The COMPILING_BASE_PACKAGE macro is concerned with issues defining symbols and using symbols in the same compilation unit. However, these symbols now exist in ghc-internal rather than base, so we should rename the macro accordingly. The code is guards is likely never used as we never produce windows DLLs but it is simpler to just perform the renaming for now. These days there is little doubt that this macro defined in this ad-hoc manner would be permitted to exist, but these days are not those days. Fixes #25221 - - - - - 70764243 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Preload ghc-internal rather than base This occurence of baseUnitId was missed when moving the bulk of internal definitions into `ghc-internal`. We need to remove this preloading of `base` now because `base` should not be wired in. Towards #24903 - - - - - 12915609 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Remove Data.List compat warning There is currently a warning implemented in -Wcompat which warns you when importing Data.List in a non-qualified manner. ``` A.hs:3:8: warning: [-Wcompat-unqualified-imports] To ensure compatibility with future core libraries changes imports to Data.List should be either qualified or have an explicit import list. | 3 | import Data.List | ^^^^^^^^^ Ok, one module loaded. ``` GHC ticket: https://gitlab.haskell.org/ghc/ghc/-/issues/17244 CLC discussion: https://groups.google.com/g/haskell-core-libraries/c/q3zHLmzBa5E This warning was implemented as part of the migration to making Data.List monomorphic again (and to be used like Data.Set, Data.Map etc). That doesn't seem like it happened, and I imagine that the current CLC would require a new proposal anyway in order to do that now. It's not clear in any case what "future core libraries changes" we are waiting to happen before this warning can be removed. Given the first phase of the proposal has lasted 5 years it doesn't seem that anyone is motivated to carry the proposal to completion. It does seem a bit unnecessary to include a warning in the compiler about "future changes to the module" when there's no timeline or volunteer to implement these changes. The removal of this warning was discussed again at: https://github.com/haskell/core-libraries-committee/issues/269 During the discussion there was no new enthusiasm to move onto the next stages of the proposal so we are removing the warning to unblock the reinstallable "base" project (#24903) Fixes #24904 - - - - - d4e4d498 by Matthew Pickering at 2024-09-26T12:08:57-04:00 Move Control.Monad.Zip into ghc-internal mzip is wired in and therefore needs to be in ghc-internal. Fixes #25222 Towards #24903 - - - - - d3dacdfb by Matthew Pickering at 2024-09-26T12:08:57-04:00 Unwire the base package This patch just removes all the functions related to wiring-in the base package and the `-this-unit-id=base` flag from the cabal file. After this commit "base" becomes just like any other package and the door is opened to moving base into an external repo and releasing base on a separate schedule to the rest of ghc. Closes #24903 - - - - - 1b39363b by Patrick at 2024-09-27T06:10:19-04:00 Add entity information to HieFile #24544 Enhanced HieFile to capture entity information for identifiers, enabling better support for language tools and protocols. See issue #24544 for more details. Work have been done: * Introduction of new data type `EntityInfo` in `GHC.Iface.Ext.Types`. * Add extra field `hie_entity_infos :: NameEntityInfo` to `HieFile` to store the mapping from entity name to corresponding entity infos in `GHC.Iface.Ext.Types`. * Compute `EntityInfo` for each entity name in the HieAst from `TyThing, Id, OccName` when generating the `HieFile` in `GHC.Iface.Ext.Ast`. * Add test T24544 to test the generation of `EntityInfo`. - - - - - 4f3618d8 by sheaf at 2024-09-27T06:10:57-04:00 The X86 SIMD patch. This commit adds support for 128 bit wide SIMD vectors and vector operations to GHC's X86 native code generator. Main changes: - Introduction of vector formats (`GHC.CmmToAsm.Format`) - Introduction of 128-bit virtual register (`GHC.Platform.Reg`), and removal of unused Float virtual register. - Refactor of `GHC.Platform.Reg.Class.RegClass`: it now only contains two classes, `RcInteger` (for general purpose registers) and `RcFloatOrVector` (for registers that can be used for scalar floating point values as well as vectors). - Modify `GHC.CmmToAsm.X86.Instr.regUsageOfInstr` to keep track of which format each register is used at, so that the register allocator can know if it needs to spill the entire vector register or just the lower 64 bits. - Modify spill/load/reg-2-reg code to account for vector registers (`GHC.CmmToAsm.X86.Instr.{mkSpillInstr, mkLoadInstr, mkRegRegMoveInstr, takeRegRegMoveInstr}`). - Modify the register allocator code (`GHC.CmmToAsm.Reg.*`) to propagate the format we are storing in any given register, for instance changing `Reg` to `RegFormat` or `GlobalReg` to `GlobalRegUse`. - Add logic to lower vector `MachOp`s to X86 assembly (see `GHC.CmmToAsm.X86.CodeGen`) - Minor cleanups to genprimopcode, to remove the llvm_only attribute which is no longer applicable. Tests for this feature are provided in the "testsuite/tests/simd" directory. Fixes #7741 Keeping track of register formats adds a small memory overhead to the register allocator (in particular, regUsageOfInstr now allocates more to keep track of the `Format` each register is used at). This explains the following metric increases. ------------------------- Metric Increase: T12707 T13035 T13379 T3294 T4801 T5321FD T5321Fun T783 ------------------------- - - - - - 10e431ef by sheaf at 2024-09-27T06:10:57-04:00 Use xmm registers in genapply This commit updates genapply to use xmm, ymm and zmm registers, for stg_ap_v16/stg_ap_v32/stg_ap_v64, respectively. It also updates the Cmm lexer and parser to produce Cmm vectors rather than 128/256/512 bit wide scalars for V16/V32/V64, removing bits128, bits256 and bits512 in favour of vectors. The Cmm Lint check is weakened for vectors, as (in practice, e.g. on X86) it is okay to use a single vector register to hold multiple different types of data, and we don't know just from seeing e.g. "XMM1" how to interpret the 128 bits of data within. Fixes #25062 - - - - - 8238fb2d by sheaf at 2024-09-27T06:10:57-04:00 Add vector fused multiply-add operations This commit adds fused multiply add operations such as `fmaddDoubleX2#`. These are handled both in the X86 NCG and the LLVM backends. - - - - - 2cb7b748 by sheaf at 2024-09-27T06:10:57-04:00 Add vector shuffle primops This adds vector shuffle primops, such as ``` shuffleFloatX4# :: FloatX4# -> FloatX4# -> (# Int#, Int#, Int#, Int# #) -> FloatX4# ``` which shuffle the components of the input two vectors into the output vector. NB: the indices must be compile time literals, to match the X86 SHUFPD instruction immediate and the LLVM shufflevector instruction. These are handled in the X86 NCG and the LLVM backend. Tested in simd009. - - - - - 0d2428d6 by sheaf at 2024-09-27T06:10:57-04:00 Add Broadcast MachOps This adds proper MachOps for broadcast instructions, allowing us to produce better code for broadcasting a value than simply packing that value (doing many vector insertions in a row). These are lowered in the X86 NCG and LLVM backends. In the LLVM backend, it uses the previously introduced shuffle instructions. - - - - - e6c19a41 by sheaf at 2024-09-27T06:10:57-04:00 Fix treatment of signed zero in vector negation This commit fixes the handling of signed zero in floating-point vector negation. A slight hack was introduced to work around the fact that Cmm doesn't currently have a notion of signed floating point literals (see get_float_broadcast_value_reg). This can be removed once CmmFloat can express the value -0.0. The simd006 test has been updated to use a stricter notion of equality of floating-point values, which ensure the validity of this change. - - - - - f496ff7f by sheaf at 2024-09-27T06:10:57-04:00 Add min/max primops This commit adds min/max primops, such as minDouble# :: Double# -> Double# -> Double# minFloatX4# :: FloatX4# -> FloatX4# -> FloatX4# minWord16X8# :: Word16X8# -> Word16X8# -> Word16X8# These are supported in: - the X86, AArch64 and PowerPC NCGs, - the LLVM backend, - the WebAssembly and JavaScript backends. Fixes #25120 - - - - - 5dd2a423 by sheaf at 2024-09-27T06:10:57-04:00 Add test for C calls & SIMD vectors - - - - - f824e1ee by sheaf at 2024-09-27T06:10:58-04:00 Add test for #25169 - - - - - d54db7f3 by sheaf at 2024-09-27T06:10:58-04:00 Fix #25169 using Plan A from the ticket We now compile certain low-level Cmm functions in the RTS multiple times, with different levels of vector support. We then dispatch at runtime in the RTS, based on what instructions are supported. See Note [realArgRegsCover] in GHC.Cmm.CallConv. Fixes #25169 ------------------------- Metric Increase: T10421 T12425 T18730 T1969 T9198 ------------------------- - - - - - d5f8778a by sheaf at 2024-09-27T06:10:58-04:00 Fix C calls with SIMD vectors This commit fixes the code generation for C calls, to take into account the calling convention. This is particularly tricky on Windows, where all vectors are expected to be passed by reference. See Note [The Windows X64 C calling convention] in GHC.CmmToAsm.X86.CodeGen. - - - - - f64bd564 by sheaf at 2024-09-27T06:10:58-04:00 X86 CodeGen: refactor getRegister CmmLit This refactors the code dealing with loading literals into registers, removing duplication and putting all the code in a single place. It also changes which XOR instruction is used to place a zero value into a register, so that we use VPXOR for a 128-bit integer vector when AVX is supported. - - - - - ab12de6b by sheaf at 2024-09-27T06:10:58-04:00 X86 genCCall: promote arg before calling evalArgs The job of evalArgs is to ensure each argument is put into a temporary register, so that it can then be loaded directly into one of the argument registers for the C call, without the generated code clobbering any other register used for argument passing. However, if we promote arguments after calling evalArgs, there is the possibility that the code used for the promotion will clobber a register, defeating the work of evalArgs. To avoid this, we first promote arguments, and only then call evalArgs. - - - - - 8fd12429 by sheaf at 2024-09-27T06:10:58-04:00 X86 genCCall64: simplify loadArg code This commit simplifies the argument loading code by making the assumption that it is safe to directly load the argument into register, because doing so will not clobber any previous assignments. This assumption is borne from the use of 'evalArgs', which evaluates any arguments which might necessitate non-trivial code generation into separate temporary registers. - - - - - 12504a9f by sheaf at 2024-09-27T06:10:58-04:00 LLVM: propagate GlobalRegUse information This commit ensures we keep track of how any particular global register is being used in the LLVM backend. This informs the LLVM type annotations, and avoids type mismatches of the following form: argument is not of expected type '<2 x double>' call ccc <2 x double> (<2 x double>) (<4 x i32> arg) - - - - - 2bb1e8df by Cheng Shao at 2024-09-27T06:11:35-04:00 Link bytecode from interface-stored core bindings in oneshot mode !13042 Part of #T25090 If the flag `-fprefer-byte-code` is given when compiling a module containing TH, GHC will use Core bindings stored in interfaces to compile and link bytecode for splices. This was only implemented for `--make` mode initially, so this commit adds the same mechanism to oneshot mode (`-c`). When an interface is loaded into the EPS in `loadInterface` that has dehydrated Core bindings, an entry is added to the new field `eps_iface_bytecode`, containing an IO action that produces a bytecode `Linkable`, lazily processing the `mi_extra_decls` by calling `loadIfaceByteCode`. When Template Haskell dependencies are resolved in `getLinkDeps`, this action is looked up after loading a module's interface. If it exists, the action is evaluated and the bytecode is added to the set of `Linkable`s used for execution of the splice; otherwise it falls back on the traditional object file. Metric Decrease: MultiLayerModules T13701 - - - - - 7cb7172e by Matthew Pickering at 2024-09-27T06:12:12-04:00 ci: Fix variable inheritence for ghcup-metadata testing job Downstream in ghcup-ci we use the CONFIGURE_ARGS variable to determine how to setup all the different jobs. On the downstream trigger this was being inherited from the default setting in .gitlab.yml file. Therefore this led to job failures as the necessary CONFIGURE_ARGS were not being passed to the configure script when installing the bindist. See docs: * https://docs.gitlab.com/ee/ci/yaml/#inherit * https://docs.gitlab.com/ee/ci/yaml/#triggerforward 1. inherit:variables:fals - This stops the global variables being inherited into the job and hence forwarded onto the downstream job. 2. trigger:forward:* - yaml_variables: true (default) pass yaml variables to downstream, this is important to pass the upstream pipeline id to downstream. - pipeline_variables: false (default) but don't pass pipeline variables (normal environment variables). Fixes #25294 - - - - - 9ffd6163 by Leo at 2024-09-27T16:26:01+05:30 Fix typo in Prelude doc for (>>=) Fix a minor typo ("equivialent" instead of "equivalent") in the documentation for (>>=) in the prelude. - - - - - 5745dbd3 by Vladislav Zavialov at 2024-09-27T16:26:52+05:30 Wildcard binders in type declarations (#23501) Add support for wildcard binders in type declarations: type Const a b = a -- BEFORE: the `b` had to be named -- even if unused on the RHS type Const a _ = a -- AFTER: the compiler accepts -- a wildcard binder `_` The new feature is part of GHC Proposal #425 "Invisible binders in type declarations", and more specifically its amendment #641. Just like a named binder, a wildcard binder `_` may be: * plain: _ * kinded: (_ :: k -> Type) * invisible, plain: @_ * invisible, kinded: @(_ :: k -> Type) Those new forms of binders are allowed to occur on the LHSs of data, newtype, type, class, and type/data family declarations: data D _ = ... newtype N _ = ... type T _ = ... class C _ where ... type family F _ data family DF _ (Test case: testsuite/tests/typecheck/should_compile/T23501a.hs) However, we choose to reject them in forall telescopes and type family result variable binders (the latter being part of the TypeFamilyDependencies extension): type family Fd a = _ -- disallowed (WildcardBndrInTyFamResultVar) fn :: forall _. Int -- disallowed (WildcardBndrInForallTelescope) (Test case: testsuite/tests/rename/should_fail/T23501_fail.hs) See the new Notes: * Note [Type variable binders] * Note [Wildcard binders in disallowed contexts] To accommodate the new forms of binders, HsTyVarBndr was changed as follows (demonstrated without x-fields for clarity) -- BEFORE (ignoring x-fields and locations) data HsTyVarBndr flag = UserTyVar flag Name | KindedTyVar flag Name HsKind -- AFTER (ignoring x-fields and locations) data HsTyVarBndr flag = HsTvb flag HsBndrVar HsBndrKind data HsBndrVar = HsBndrVar Name | HsBndrWildCard data HsBndrKind = HsBndrNoKind | HsBndrKind LHsKind The rest of the patch is downstream from this change. To avoid a breaking change to the TH AST, we generate fresh names to replace wildcard binders instead of adding a dedicated representation for them (as discussed in #641). And to put a cherry on top of the cake, we now allow wildcards in kind-polymorphic type variable binders in constructor patterns, see Note [Type patterns: binders and unifiers] and the tyPatToBndr function in GHC.Tc.Gen.HsType; example: fn (MkT @(_ :: forall k. k -> Type) _ _) = ... (Test case: testsuite/tests/typecheck/should_compile/T23501b.hs) - - - - - ff2bdca2 by Matthew Pickering at 2024-09-27T16:27:08+05:30 ci: Push perf notes from wasm jobs It was observed in #25299 that we were failing to push performance numbers from the wasm jobs. In future we might want to remove this ad-hoc check but for now it's easier to add another special case. Towards #25299 - - - - - 4c76f75c by Zubin Duggal at 2024-09-27T16:44:00+05:30 Bump GHC version to 9.12 - - - - - e4ac1b0d by Zubin Duggal at 2024-09-27T19:12:24+05:30 Bump GHC version to 9.13 - - - - - da20cac1 by Andreas Klebinger at 2024-10-02T22:18:48-04:00 SpecConstr: Introduce a separate argument limit for forced specs. We used to put no limit at all on specializations forced via the SPEC argument. This isn't always reasonable so we introduce a very high limit that applies to forced specializations, a flag to control it, and we now emit a warning if we fail a specialization because we exceed the warning. Fixes #25197 - - - - - 39497eed by Andreas Klebinger at 2024-10-02T22:19:24-04:00 ghc-experimental: Expose primops and ghc extensions via GHC.PrimOps This will be the new place for functions that would have gone into GHC.Exts in the past but are not stable enough to do so now. Addresses #25242 - - - - - e9dc2690 by Sylvain Henry at 2024-10-02T22:20:06-04:00 RTS: cleanup timerfd file descriptors after a fork (#25280) When we init a timerfd-based ticker, we should be careful to cleanup the old file descriptors (e.g. after a fork). - - - - - 64e876bc by Rodrigo Mesquita at 2024-10-02T22:20:43-04:00 determinism: Deterministic MonadGetUnique LlvmM Update LlvmM to thread a unique deterministic supply (using UniqDSMT), and use it in the MonadGetUnique instance. This makes uniques sampled from LlvmM deterministic, which guarantees object determinism with -fllvm. Fixes #25274 - - - - - 36bbb167 by Matthew Pickering at 2024-10-02T22:21:18-04:00 Bump LLVM upper bound to allow LLVM 19 Also bumps the ci-images commit so that the deb12 images uses LLVM 19 for testing. ------------------------- Metric Decrease: size_hello_artifact_gzip size_hello_unicode_gzip ------------------------- Fixes #25295 - - - - - 0029ca91 by Matthew Pickering at 2024-10-02T22:21:54-04:00 configure: Allow happy-2.0.2 happy-2.0.2 can be used to compile GHC. happy-2.0 and 2.0.1 have bugs which make it unsuitable to use. The version bound is now == 1.20.* || >= 2.0.2 && < 2.1 Fixes #25276 - - - - - 92976985 by ARATA Mizuki at 2024-10-02T22:22:35-04:00 Use bundled llc/opt on Windows (#22438) - - - - - af59749a by Matthew Pickering at 2024-10-02T22:23:11-04:00 Fix registerArch for riscv64 The register allocator doesn't support vector registers on riscv64, therefore advertise as NoVectors. Fixes #25314 - - - - - a49e66fc by Matthew Pickering at 2024-10-02T22:23:11-04:00 riscv: Avoid using csrr instruction to test for vector registers The csrr instruction isn't allowed in qemu user-mode, and raises an illegal instruction error when it is encountered. Therefore for now, we just hard-code that there is no support for vector registers since the rest of the compiler doesn't support vector registers for riscv. Fixes #25312 - - - - - 115a30e9 by Andreas Klebinger at 2024-10-02T22:23:11-04:00 Add support for fp min/max to riscv Fixes #25313 - - - - - f28b5992 by Ben Gamari at 2024-10-02T22:23:47-04:00 testsuite/perf: Report better error message on malformed note Previously a malformed perf note resulted in very poor errors. Here we slight improve this situation. - - - - - 51377508 by Ben Gamari at 2024-10-02T22:23:47-04:00 testsuite: Handle division-by-zero more gracefully Previously we would fail with an ZeroDivisionError. Fixes #25321 - - - - - 50490075 by Matthew Pickering at 2024-10-03T05:55:13-04:00 ci: Add nightly & release ubuntu-22.04 jobs This adds build of bindists on ubuntu-22.04 on nightly and release pipelines. We also update ghcup-metadata to provide ubuntu-22.04 bindists on ubuntu-22.04. Fixes #25317 - - - - - 9cf1cef5 by Zubin Duggal at 2024-10-03T05:55:49-04:00 haddock: Bump binary interface version to 46. This allows haddock to give good error messages when being used on mismatched interface files. We bump to 46 since GHC 9.12 uses version 45: https://gitlab.haskell.org/ghc/ghc/-/commit/362afd632032ee8f174690c3ffe0015076b83ce6 This should have been done in e4ac1b0d281b85a0144d1ef6f84a1df00e236052 but was overlooked. - - - - - 2293c0b7 by Andreas Klebinger at 2024-10-03T05:56:25-04:00 Change versionig of ghc-experimental to follow ghc versions. Just like ghc-internal it will now use the @ProjectVersionForLib@ macro for versioning. This means for ghc=9.10.1, ghc-experimental's version will be 9.1001.0 and so on. This fixes #25289 - - - - - 876d6e0e by Ben Gamari at 2024-10-04T15:07:53+01:00 base: Add `HasCallStack` constraint to `ioError` As proposed in core-libraries-committee#275. - - - - - 9bfd9fd0 by Matthew Pickering at 2024-10-04T15:08:03+01:00 Fix toException method for ExceptionWithContext Fixes #25235 - - - - - ac004028 by Matthew Pickering at 2024-10-04T15:09:07+01:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - bcb293f2 by Cheng Shao at 2024-10-04T17:59:28-04:00 testsuite: remove accidentally checked in debug print logic - - - - - 68e2da5a by Rodrigo Mesquita at 2024-10-05T10:36:15-04:00 Deprecation for WarnCompatUnqualifiedImports Fixes #25330 - - - - - 4327f0e8 by Andrew Lelechenko at 2024-10-05T10:36:52-04:00 Restrict Data.List.NonEmpty.unzip to NonEmpty (a, b) -> (NonEmpty a, NonEmpty b) Implementing the final phase of CLC proposal https://github.com/haskell/core-libraries-committee/issues/86 - - - - - ceca9efb by Cheng Shao at 2024-10-06T02:18:31+00:00 driver: fix runWorkerLimit on wasm This commit fixes link-time unresolved symbol errors for sem_open etc on wasm, by making runWorkerLimit always behave single-threaded. This avoids introducing the jobserver logic into the final wasm module and thus avoids referencing the posix semaphore symbols. - - - - - 135fd1ac by Torsten Schmits at 2024-10-06T02:18:31+00:00 Parallelize getRootSummary computations in dep analysis downsweep This reuses the upsweep step's infrastructure to process batches of modules in parallel. I benchmarked this by running `ghc -M` on two sets of 10,000 modules; one with a linear dependency chain and the other with a binary tree. Comparing different values for the number of modules per thread suggested an optimum at `length targets `div` (n_cap * 2)`, with results similar to this one (6 cores, 12 threads): ``` Benchmark 1: linear 1 jobs Time (mean ± σ): 1.775 s ± 0.026 s [User: 1.377 s, System: 0.399 s] Range (min … max): 1.757 s … 1.793 s 2 runs Benchmark 2: linear 6 jobs Time (mean ± σ): 876.2 ms ± 20.9 ms [User: 1833.2 ms, System: 518.6 ms] Range (min … max): 856.2 ms … 898.0 ms 3 runs Benchmark 3: linear 12 jobs Time (mean ± σ): 793.5 ms ± 23.2 ms [User: 2318.9 ms, System: 718.6 ms] Range (min … max): 771.9 ms … 818.0 ms 3 runs ``` Results don't differ much when the batch size is reduced to a quarter of that, but there's significant thread scheduling overhead for a size of 1: ``` Benchmark 1: linear 1 jobs Time (mean ± σ): 2.611 s ± 0.029 s [User: 2.851 s, System: 0.783 s] Range (min … max): 2.591 s … 2.632 s 2 runs Benchmark 2: linear 6 jobs Time (mean ± σ): 1.189 s ± 0.007 s [User: 2.707 s, System: 1.103 s] Range (min … max): 1.184 s … 1.194 s 2 runs Benchmark 3: linear 12 jobs Time (mean ± σ): 1.097 s ± 0.006 s [User: 2.938 s, System: 1.300 s] Range (min … max): 1.093 s … 1.101 s 2 runs ``` Larger batches also slightly worsen performance. - - - - - 535a2117 by Daniel Díaz at 2024-10-06T09:51:46-04:00 Clarify the meaning of "exactly once" in LinearTypes Solves documentaion issue #25084. - - - - - 92f8939a by Krzysztof Gogolewski at 2024-10-06T09:52:22-04:00 Only allow (a => b) :: Constraint rather than CONSTRAINT rep Fixes #25243 - - - - - 4a2f0f13 by Alan Zimmerman at 2024-10-07T05:16:54-04:00 EPA: Remove unused hsCaseAnnsRest We never populate it, so remove it. - - - - - 5099057b by John Paul Adrian Glaubitz at 2024-10-07T05:17:40-04:00 rts: Fix invocation of __ieee_set_fp_control() on alpha-linux Fixes the following error when building GHC on alpha-linux: rts/posix/Signals.c: In function ‘initDefaultHandlers’: rts/posix/Signals.c:709:5: error: error: implicit declaration of function ‘ieee_set_fp_control’ [-Wimplicit-function-declaration] 709 | ieee_set_fp_control(0); | ^~~~~~~~~~~~~~~~~~~ | 709 | ieee_set_fp_control(0); | - - - - - c9590ba0 by Teo Camarasu at 2024-10-07T05:18:17-04:00 Add changelog entries for !12479 - - - - - bf9c9566 by Matthew Pickering at 2024-10-07T13:19:30-04:00 javascript: Read fields of ObjectBlock lazily When linking a module with a large dependency footprint too much of the object files were forced during linking. This lead to a large amount of memory taken up by thunks which would never be forced On the PartialDownsweep test this halves the memory required (from 25G to 13G). Towards #25324 ------------------------- Metric Increase: size_hello_obj ------------------------- - - - - - 571329df by Matthew Pickering at 2024-10-07T13:20:06-04:00 ci: Run the i386 validation job when i386 label is set This is helpful when making changes to base and must update the javascript and i386 base exports files. - - - - - e68f9aaf by Matthew Pickering at 2024-10-07T13:20:42-04:00 Rewrite partitionByWorkerSize to avoid pattern match checker bug With `-g3` the pattern match checker would warn about these incomplete patterns. This affects the debug_info builds on CI. ``` Pattern match(es) are non-exhaustive In an equation for ‘go’: Patterns of type ‘[a]’, ‘[a]’, ‘[SpecFailWarning]’ not matched: (_:_) _ _ | 2514 | go [] small warnings = (small, warnings) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^... ``` Workaround for #25338 - - - - - d915dc8b by Arnaud Spiwack at 2024-10-07T19:23:00-04:00 Remove the wrapper/coercion-passing logic for submultiplicity checks Instead, we use a dedicated DelayedError, which is emitted systematically on submultiplicity checks, but is suppressed if we can indeed solve the submultiplicity constraint with a reflexivity coercion. This way, we don't have to return anything from `tcSubMult`, which now looks like a regular constraint check, the rest is implementation detail. This removes all of the strange boilerplate that I'd been struggling with under the previous implementation. Even if submultiplicity checks are not properly constraints, this way it's contained entirely within a `WantedConstraint`. Much more pleasant. Closes #25128. - - - - - 1d226116 by Sven Tennie at 2024-10-07T19:23:37-04:00 AArch64: Implement switch/jump tables (#19912) This improves the performance of Cmm switch statements (compared to a chain of if statements.) - - - - - 3fe621dd by Mario Blažević at 2024-10-07T19:24:18-04:00 Fixes #25256, missing parens inside TH-printed pattern type signature - - - - - ea4b4391 by ARATA Mizuki at 2024-10-07T19:24:59-04:00 Better documentation for floatRange function Closes #16479 - - - - - ff09205c by Andreas Klebinger at 2024-10-07T19:25:35-04:00 Adjust progress message for hadrian to include cwd. Fixes #25335 - - - - - 5fd320da by Sven Tennie at 2024-10-07T19:26:12-04:00 CCallConv test: Align argument types The C calling convention / standard requires that arguments and their values are of the same type. - - - - - c6e5fd3d by Cheng Shao at 2024-10-07T19:26:47-04:00 hadrian: remove unused ghciWithDebugger field from flavour config This patch removes the ghciWithDebugger field from flavour config since it's actually not used anywhere. - - - - - 9c9c790d by sheaf at 2024-10-07T19:27:23-04:00 user's guide: update docs for X86 CPU flags This commit updates the section of the user's guide pertaining to X86 feature flags with the following changes: - the NCG backend now supports SIMD, so remove all text that says the contrary, - the LLVM backend does not "automatically detect" features, so remove any text that makes that claim. - - - - - a1ecc826 by Sven Tennie at 2024-10-08T13:36:03-04:00 ci: RISCV64 cross-compile testing This adds a validation job which tests that we can build a riscv64 cross compiler and build a simple program using it. We do not currently run the whole testsuite. Towards #25254 Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - d5c2577f by Arnaud Spiwack at 2024-10-08T13:36:44-04:00 Remove unused accumulators in partition_errors - - - - - 55609880 by Andrzej Rybczak at 2024-10-09T16:41:46-04:00 Fix typo in the @since annotation of annotateIO - - - - - ef481813 by Alan Zimmerman at 2024-10-09T16:42:23-04:00 EPA: Remove [AddEpAnn] from (most of) HsExpr EPA: introduce EpAnnLam for lambda annotationsi, and remove `glAA` from `Parser.y`, it is the same as `glR` EPA: Remove unused annotation from XOpApp EPA: Use EpToken for XNPat and XNegApp EPA: specific anns for XExplicitTuple / XTuplePat / sumPatParens. EPA: Use specific annotation for MultiIf EPA: Move annotations into FunRhs EPA: Remove [AddEpAnn] from SigPat and ExprWithTySig EPA: Remove [AddEpAnn] from ArithSeq EPA: Remove [AddEpAnn] from HsProc EPA: Remove [AddEpAnn] from HsStatic EPA: Remove [AddEpAnn] from BindStmt EPA: Remove [AddEpAnn] from TransStmt EPA: Remove [AddEpAnn] from HsTypedSplice EPA: Remove [AddEpAnn] from HsUntypedSpliceExpr - - - - - 69960230 by Fabian Thorand at 2024-10-10T19:03:59+00:00 Handle exceptions from IO manager backend If an IO manager backend throws, it will not actually have registered the file descriptor. However, at that point, the IO manager state was already updated to assume the file descriptor is being tracked, leading to errors and an eventual deadlock down the line as documented in the issue #21969. The fix for this is to undo the IO manager state change in case the backend throws (just as we already do when the backend signals that the file type is not supported). The exception then bubbles up to user code. That way we make sure that 1. the bookkeeping state of the IO manager is consistent with the actions taken by the backend, even in the presence of unexpected failures, and 2. the error is not silent and visible to user code, making failures easier to debug. - - - - - 1587cccf by Hassan Al-Awwadi at 2024-10-11T03:52:36-04:00 Put RdrName in the foExt field of FieldOcc The main purpose of this commit is to rip RdrName out of FieldOcc, in accordance with #21592, and as a side note it has simplified the method we use to deal with ambiguity somewhat. To do the first, we make FieldOccs store (LIdP p) instead of always storing Located RdrName, and moved the readername to the extension points where necessary. For the second, well, we just turn an ambiguous RdrName into a unbound Name through mkUnboundName. Later during disambiguateRecordBinds of the type checking phase, we will try and do type-directed disambiguation based on the rdrName field (for now), so this hack works out fine. See Note [Ambiguous FieldOcc in record updates] for more details. There are two additional minor changes in this commit: * The HsRecSel constructor of HsExpr has been moved to the extension constuctors, since its really GHC specific. * HsProjection no longer has a Located DotFieldOcc as a field, but just a regular DotFieldOcc, since DotFieldOcc already wraps a located FieldLabelString co-authored by: @Jade <Jade512 at proton.me> @alt-romes <rodrigo.m.mesquita at gmail.com> - - - - - 2338a971 by Cheng Shao at 2024-10-11T03:53:13-04:00 driver: bail out when -fllvm is passed to GHC not configured with LLVM This patch makes GHC bail out with an proper error message when it's not configured with LLVM but users attempt to pass -fllvm, see #25011 and added comment for details. Fixes #25011 Co-authored-by: Rodrigo Mesquita <rodrigo.m.mesquita at gmail.com> - - - - - 78ad81ec by Cristiano Moraes at 2024-10-11T03:53:55-04:00 configure: Find C++ probing when GCC version is the latest but G++ is old #23118 - - - - - 083703a1 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Consider Wanteds with rewriters as insoluble This MR fixes #25325 See GHC.Tc.Types.Constraint, Note [Insoluble Wanteds], especially (IW2) There is a small change in the error message for T14172, but it looks entirely acceptable to me. - - - - - 0dfaeb66 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Wibbles - - - - - 09d24d82 by Simon Peyton Jones at 2024-10-11T03:54:32-04:00 Spelling errors - - - - - 694489ed by sheaf at 2024-10-11T03:55:14-04:00 LLVM: use sse4.2 instead of sse42 LLVM expects the former instead of the latter since version 3.4. Fixes #25019 - - - - - 06ae8507 by sheaf at 2024-10-11T03:55:14-04:00 LLVM: make SSE4.2 imply +popcnt For consistency with the NCG as well as with Clang and GCC, we make the SSE4.2 feature flag imply +popcnt when using the LLVM backend. Fixes #25353 - - - - - 3fe843c7 by Cheng Shao at 2024-10-11T03:55:50-04:00 Drop obsolete libffi Makefile This patch drops obsolete libffi Makefile from the tree, given it's completely unused since removal of make build system in !7094. - - - - - df70405c by Ben Gamari at 2024-10-11T03:56:26-04:00 ghc-internal: Fix incomplete matches on IOError As noted in #25362, these incomplete matches were previously not being warned about. They were easily addressed by use of `GHC.Internal.Event.Windows.withException`. Closes #25362. - - - - - 8584504b by Matthew Pickering at 2024-10-11T03:57:02-04:00 compiler: Fix orientation of GHC.Hs.Doc boot file We should be free to import things from Language.Haskell.Syntax in GHC modules. Therefore the the boot file for the loop between ImpExp and GHC.Hs.Doc was in the wrong place. Issue #21592 - - - - - d029f170 by Ben Gamari at 2024-10-11T23:43:17-04:00 testsuite: Normalise trailing digits from hole fits output The type variables in the holes fit output from `abstract_refinement_hole_fits` is quite sensitive to compiler configuration. Specifically, a slight change in the inlining behavior of `throw` changes type variable naming in `(>>=)` and a few others. Ideally we would make hole fits output more deterministic but in the meantime we simply normalise this difference away as it not relevant to the test's goal. - - - - - da5d7d0d by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Add test for #25066 - - - - - eb7ddae1 by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Fix #25066 As noted in #25066, the exception backtrace proposal introduced a rather subtle performance regression due to simplification producing Core which the demand analyser concludes may diverge with a precise exception. The nature of the problem is more completely described in the new Note [Hiding precise exception signature in throw]. The (rather hacky) solution we use here hides the problematic optimisation through judicious use of `noinline`. Ultimately however we will want a more principled solution (e.g. #23847). Fixes #255066 CLC proposal: https://github.com/haskell/core-libraries-committee/issues/290 Metric Decrease: T9872d - - - - - 0060ece7 by Ben Gamari at 2024-10-11T23:43:17-04:00 base: Improve documentation of Control.Exception.Backtrace - - - - - 18f532f3 by Ben Gamari at 2024-10-11T23:43:53-04:00 Bump process submodule to v1.6.25.0 - - - - - a9a3badf by Hassan Al-Awwadi at 2024-10-11T23:44:29-04:00 Move HsInteger and HsRat to an extension constructor These constructors were only used during the TC stage, or during template haskell. It seemed clear that it was independent of the source syntax represented in L.H.S, and thus we removed it according to #21592. - - - - - 4dd30cba by Artem Pelenitsyn at 2024-10-11T23:45:09-04:00 Docs: Linear types: link Strict Patterns subsection Also, fix a bug in RST with missing newline before a listing. Co-authored-by: Arnaud Spiwack <arnaud at spiwack.net> - - - - - adca5f2b by Ben Gamari at 2024-10-11T23:45:45-04:00 users guide: Address remaining TODOs in eventlog format docs Closes #25296. - - - - - 9291c125 by Sylvain Henry at 2024-10-11T23:46:26-04:00 Fix z-encoding of tuples (#25364) Tuples with prefix/suffix strings weren't always properly encoded with their shortcut notations. Fix this. - - - - - c08b68bc by Sven Tennie at 2024-10-11T23:47:01-04:00 Delete constants that can be deduced There are macros in MachRegs.h to figure those out. - - - - - 8b402da2 by Zubin Duggal at 2024-10-12T20:36:57+00:00 hadrian: Handle broken symlinks properly when creating source dist directories If we have a broken symlink in the repository, don't try to `need` the symlink or the target of the symlink. Attempting to do so has `shake` attempt to read the target to compute its hash, which fails because the target doesn't exist. - - - - - 16f97667 by Zubin Duggal at 2024-10-12T20:36:57+00:00 hadrian: exclude cabal.project.symlink.broken from source archives Cabal 3.14 introduced a broken symlink in its testsuite. Unfortunately, this broke our source distribution as we use use `tar --dereference` to avoid issues with symlink compatibility on windows, and `tar --dereference` chokes when it encounters any broken symlinks. We can't get rid of `--dereference` because symlinks are generally broken on windows, so the only option is to exclude this file from source archives. see also https://github.com/haskell/cabal/issues/10442 - - - - - f1a2c9fc by Zubin Duggal at 2024-10-12T20:36:57+00:00 Bump Cabal submodule to 3.14 Metric Decrease: MultiLayerModulesTH_OneShot Metric Increase: haddock.Cabal - - - - - 745dd590 by Ben Gamari at 2024-10-14T09:13:12-04:00 users-guide: Document GHCi :where command Resolve #24509. - - - - - e9cc4699 by Alan Zimmerman at 2024-10-14T09:13:48-04:00 EPA: Remove [AddEpAnn] from IE, Pat and some Tys EPA: Remove [AddEpAnn] from LazyPat EPA: Remove [AddEpAnn] from RecordCon/RecordUpd/ConPat EPA: Remove [AddEpAnn] from HsFieldBind EPA: Remove [AddEpAnn] from PatSynBind EPA: Remove [AddEpAnn] from IPBind EPA: Remove [AddEpAnn] from FixSig EPA: Remove [AddEpAnn] from activation rules EPA: Remove [AddEpann] from SpecInstSig EPA: Remove [AddEpAnn] from MinimalSig EPA: Remove [AddEpAnn] from SCCFunSig EPA: Remove [AddEpAnn] from CompleteMatchSig EPA: Remove [AddEpAnn] from AnnSig, as used in PatSynSig, ClassOpSig, TypeSig EPA: Remove [AddEpAnn] from IEThingAbs EPA: Remove [AddEpAnn] from IEThingAll / IEThingWith EPA: Remove [AddEpAnn] from IEModuleContents EPA: Remove [AddEpAnn] from HsOpTy EPA: Remove [AddEpAnn] for various binders EPA: Remove [AddEpAnn] for HsIParamTy - - - - - 81a570bf by Sebastian Graf at 2024-10-14T22:15:31-04:00 Desugaring, plus -Wincomplete-record-selectors This commit does several related things: * Major refactor of the handling of applications in the desugarer. Now all applications are handled in `dsApp`, `ds_app` and related functions. This dramatically simplifies the code and removes complicated cruft that had accumulated. Hooray. Fixes #25281. * Improve the handling of -Wincomplete-record-selectors. We now incorporate the result type of unsaturated record selector applications as well as consider long-distance information in getField applications. Plus, the implmentation now builds the improved `dsApp` stuff above, so it is much easier to understand. Plus, incorporates improved error message wording suggested by Adam Gundry in !12685. Fixes #24824, #24891 See the long Note [Detecting incomplete record selectors] * Add -Wincomplete-record-selectors to -Wall, as specified in GHC Proposal 516. To do this, I also had to add -Wno-incomplete-record-selectors to the build flags for Cabal in GHC's CI. See hadrian/src/Settings/Warnings.hs. We can remove this when Cabal is updated so that it doesn't trigger the warning: https://github.com/haskell/cabal/issues/10402 2.6% decrease in compile time allocation in RecordUpPerf Metric Decrease: RecordUpdPerf - - - - - ae7bc08e by Simon Peyton Jones at 2024-10-14T22:15:31-04:00 Elmininate incomplete record selectors This patch is a pure refactor of GHC's source code, to avoid the use of partial record selectors. It was provoked by adding -Wincomplete-record-selectors to -Wall (as the GHC Proposal specified), which in turn showed up lots of places where GHC was using incomplete record selectors. This patch does mostly-simple refactoring to make it clear to the pattern match checker that there is in fact no partiality. There is one externally-visible change: I changed the data type HoleFit to split out the two cases data HoleFit = TcHoleFit TcHoleFit | RawHoleFit SDoc data TcHoleFit = HoleFit { ...lots of fields } There are large swathes of code that just deal with `TcHoleFit`, and having it as a separate data types makes it apparent that `RawHoleFit` can't occur. This makes it much better -- but the change is visible in the HolePlugin interface. I decided that there are so few clients of this API that it's worth the change. I moved several functions from Language.Haskell.Syntax to GHC.Hs. Reason, when instantiated at (GhcPass _), the extension data construtcor is guaranteed unused, and that justifies omitted patterns in these functions. By putting them in GHC.Hs.X I can specialise the type for (GhcPass _) and thereby make the function total. An interesting side-light is that there were a few local function definitions without a type signature, like this one in GHC.Parser.Header convImport (L _ i) = (ideclPkgQual i, reLoc $ ideclName i) This is fully closed, and so is generalised; but that generalises it to any old pass, not (GhcPass _), so GHC rightly complains about the use of the selector `ideclPkgQual`. I added a type signature to `i`, thus convImport (L _ (i::ImportDecl GhcPs)) = (ideclPkgQual i, reLoc $ ideclName i) which specialised the function enough to make the record selector complete. Quite a surprising consequence of local let-generalisation! - - - - - 6a067226 by Simon Peyton Jones at 2024-10-14T22:15:31-04:00 Add -Werror=-Wno-error=incomplete-record-selectors to hadrian-multi In the main MR, -Wall now includes -Wincomplete-record-selectors. However `hadrian-multi` has many, many warnings about incomplete record selectors, so this patch stops those warnings being treated as errors. (See discussion on !13308.) A better fix would be to remove the use of incomplete record selectors, since each of them represents a potential crash. - - - - - edeafc14 by Ben Gamari at 2024-10-14T22:16:08-04:00 users-guide: Document field coalescence - - - - - 55b83587 by ARATA Mizuki at 2024-10-14T22:16:49-04:00 LLVM backend: Use correct rounding for Float literals Fixes #22033 - - - - - e59fe5c6 by Hassan Al-Awwadi at 2024-10-15T08:25:33+00:00 Changed import from Ghc. module to L.H.S module Progresses #21592 For some reason we still imported GHC.Types.Fixity when the definitino of Fixity and LexicalFixity have already been moved to Language.Haskell.Syntax.Basic. This fixes that for - - - - - ab1767d5 by Simon Peyton Jones at 2024-10-15T23:45:04-04:00 Add a release-notes entry for -Wincomplete-record-selectors - - - - - 6f0a62db by ur4t at 2024-10-16T15:33:43+00:00 GHCi: fix improper location of ghci_history file Fixes #24266 - - - - - 5f67db48 by Alan Zimmerman at 2024-10-17T05:18:43-04:00 EPA: Remove [AddEpAnn] commit 3 EPA: Remove [AddEpAnn] from HsDocTy EPA: Remove [AddEpAnn] from HsBangTy EPA: Remove [AddEpAnn] from HsExplicitListTy EPA: Remove [AddEpAnn] from HsExplicitTupleTy EPA: Remove [AddEpAnn] from HsTypedBracket EPA: Remove [AddEpAnn] from HsUntypedBracket EPA: Remove [AddEpAnn] from PatBuilderOpApp EPA: break out 'EpToken "|"' from ClassDecl anns EPA: Remove [AddEpAnn] from ClassDecl EPA: Remove [AddEpAnn] from SynDecl - - - - - fbbbd010 by Daan Rijks at 2024-10-17T05:19:19-04:00 Expand the haddocks for Control.Category - - - - - 076c1a10 by Andrew Lelechenko at 2024-10-17T05:19:19-04:00 documentation: more examples for Control.Category - - - - - 90891962 by Cheng Shao at 2024-10-17T16:41:18+00:00 ghci: mitigate host/target word size mismatch in BCOByteArray serialization This patch mitigates a severe host/target word size mismatch issue in BCOByteArray serialization logic introduced since !12142, see added note for detailed explanation. - - - - - 839ac52e by Cheng Shao at 2024-10-17T16:41:18+00:00 ghci: use plain malloc for mkConInfoTable on non-TNTC platforms This patch avoids using mmap() to allocate executable memory for mkConInfoTable on platforms without tables-next-to-code, see added comment for explanation. - - - - - a998f69d by Cheng Shao at 2024-10-17T16:41:18+00:00 ghc-internal: add missing CPPs for wasm This patch adds some missing CPP guards to ghc-internal, given those functions are non existent on wasm and would cause linking issues. - - - - - 71a471e7 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: rename prelude.js to prelude.mjs This commit renames prelude.js to prelude.mjs for wasm backend rts jsbits, and slightly adjusts the jsbits contents. This is for preparing the implementation of dyld.mjs that contains wasm dynamic linker logic, which needs to import prelude.mjs as a proper ESM module. - - - - - 33d9db17 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: add __wrapped_freeJSVal This commit wraps imported freeJSVal in a __wrapped_freeJSVal C function for wasm backend RTS. In general, wasm imports are only supposed to be directly called by C; they shouldn't be used as function pointers, which confuses wasm-ld at link-time when generating shared libraries. - - - - - 0d0a16a8 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: correct stale link in comment - - - - - 90a35c41 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: drop interpretBCO support from non-dyn ways on wasm This commit drops interpretBCO support from non dynamic rts ways on wasm. The bytecode interpreter is only useful when the RTS linker also works, and on wasm it only works for dynamic ways anyway. An additional benefit of dropping interpretBCO is reduction in code size of linked wasm modules, especially since interpretBCO references ffi_call which is an auto-generated large function in libffi-wasm and unused by most user applications. - - - - - 98a32ec5 by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: don't build predefined GloblRegs for wasm PIC mode This commit wraps the predefined GlobalRegs in Wasm.S under a CPP guard to prevent building for PIC mode. When building dynamic ways of RTS, the wasm globals that represent STG GlobalRegs will be created and supplied by dyld.mjs. The current wasm dylink convention doesn't properly support exporting relocatable wasm globals at all, any wasm global exported by a .so is assumed to be a GOT.mem entry. - - - - - bef94bde by Cheng Shao at 2024-10-17T16:41:18+00:00 rts: fix conflicting StgRun definitions on wasm This commit fixes conflicting StgRun definition when building dynamic ways of RTS for wasm in unregisterised mode. - - - - - a6a82cdb by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: use targetSupportsRPaths predicate This commit changes the hostSupportsRPaths predicate to targetSupportsRPaths and use that to decide whether to pass RPATH-related link-time options. It's not applied to stage0, we should just use the default link-time options of stageBoot ghc. - - - - - f232c872 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: disable internal-interpreter of ghc library when cross compiling This commit disable the internal-interpreter flag of ghc library when cross compiling, only external interpreter works in such cases. - - - - - 577c1819 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: enable internal-interpreter for ghc-bin stage0 This commit enables internal-interpreter flag for ghc-bin even when compiling stage0, as long as target supports ghci. It enables ghci functionality for cross targets that support ghci, since cross ghc-bin is really stage0. - - - - - c247f2ee by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: fix CFLAGS for gmp shared objs on wasm This commit adds -fvisibility=default to CFLAGS of gmp when building for wasm. This is required to generate the ghc-bignum shared library without linking errors. Clang defaults to -fvisibility=hidden for wasm targets, which will cause issues when a symbol is expected to be exported in a shared library but without explicit visibility attribute annotation. - - - - - 775410fd by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: re-enable PIC for gmp on wasm This commit re-enables --with-pic=yes configuration option of gmp when building for wasm, given we're about to include support for shared libraries, TH and ghci. - - - - - b45080a3 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian: add the host_fully_static flavour transformer This commit adds the host_fully_static flavour transformer to hadrian, which ensures stage0 is fully statically linked while still permitting stage1 libdir to contain shared libraries. This is intended to be used by the wasm backend to build portable linux bindists that contain wasm shared libraries. - - - - - 5043507c by Cheng Shao at 2024-10-17T16:41:18+00:00 ci: update wasm jobs configuration This commit bumps ci-image revision to use updated wasm toolchain, and use host_fully_static instead of fully_static for wasm jobs so to ensure wasm shared libraries can be properly built. - - - - - 2956a3f7 by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian/testsuite: implement config.cross logic This commit implements the config.cross field in the testsuite driver. It comes from the "cross compiling" ghc info field for both in-tree/out-of-tree GHC, and is an accurate predicate of whether we're cross-compiling or not (compared to the precense of target emulator), and is useful to implement predicates to assert the precense of internal interpreter (only available on non-cross GHC) for tests that do require it (e.g. plugins). - - - - - 8c74a0ed by Cheng Shao at 2024-10-17T16:41:18+00:00 hadrian/compiler: implement targetRTSLinkerOnlySupportsSharedLibs This patch implements the targetRTSLinkerOnlySupportsSharedLibs predicate in hadrian. Its definition in hadrian is the single source of truth, and the information propagates to ghc settings file, ghc driver and testsuite driver. It is used in various places to ensure dynamic dependency is selected when the target RTS linker only supports loading dynamic code. - - - - - b4c3c340 by Cheng Shao at 2024-10-17T16:41:18+00:00 testsuite: don't use host cpu features when testing cross ghc This patch disables CPU feature detection logic when testing cross GHC, since those features don't make sense for the target anyway. - - - - - 3c21b696 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: implement & use req_plugins predicate This commit implements req_plugins predicate to indicate that the test requires plugin functionality. Currently this means cross GHC is disabled since internal-interpreter doesn't work in cross GHC yet. - - - - - 93b8af80 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: make use of config.interp_force_dyn This commit takes config.interp_force_dyn into consideration when setting up TH/ghci way flags. - - - - - 94673d41 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: bump T17572 timeout - - - - - 2b5efc2d by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: bump T22744 pre_cmd timeout - - - - - 45102e2a by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip terminfo_so for cross ghc - - - - - 05e40406 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: fix shared library size tests for cross ghc This commit fixes shared library size tests (e.g. array_so in testsuite/tests/perf/size/all.T) when testing cross ghc. Previously, if shared library file extension of host and target differs, those tests will fail with framework errors due to not finding the right files. - - - - - fa68f833 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip ghc api tests that attempt to spawn processes inside wasm This commit skips a few ghc api tests on wasm, since they would attempt to spawn processes inside wasm, which is not supported at all. - - - - - 1241c04e by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: skip T22840 due to broken -dtag-inference-checks on wasm - - - - - 78c8b900 by Cheng Shao at 2024-10-17T16:41:19+00:00 testsuite: ensure $(ghciWayFlags) can be overridden This commit revises boilerplate.mk in testsuite as well as a few other places, to ensure the tests that do make use of $(ghciWayFlags) can receive the right $(ghciWayFlags) from testsuite driver config. - - - - - 47989ecc by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: skip rdynamic on wasm - - - - - fefb4ea1 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: skip T2615 on wasm This commit marks T2615 as skip on wasm, given LD_* environment variables aren't supported on wasm anyway. - - - - - 77c79762 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: mark MultiLayerModulesTH_Make/MultiLayerModulesTH_OneShot as fragile on wasm - - - - - 69bb4745 by Cheng Shao at 2024-10-17T16:41:24+00:00 testsuite: fix T16180 on wasm This commit fixes T16180 on wasm once TH support is flipped on. The fix is simply adding right asm code for wasm. - - - - - 621c753d by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: fix -fexternal-interpreter flag for JS backend Previously, -fexternal-interpreter is broken for JS backend, since GHC would attempt to launch a non-existent ghc-iserv* executable. This commit fixes it by adjusting pattern matching order in setTopSessionDynFlags. - - - - - 80aa8983 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: use interpreterDynamic predicate in preloadLib This commit use the interpreterDynamic predicate in preloadLib to decide if we should do dynLoadObjs instead of loadObj. Previously we used hostIsDynamic which was only written with non-cross internal interpreter in mind. The testsuite is also adjusted to remove hard-wired -fPIC flag for cbits (doesn't work in i386 RTS linker in vanilla way, #25260) and properly pass ghc_th_way_flags to ghc. - - - - - 74411461 by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix Cmm dynamic CLabels for wasm This commit fixes the handling of dynamic CLabels for the wasm backend. Just do the simplest handling: preserve the original CLabel, both unreg/NCG backends can handle them properly without issue. - - - - - f6abaf13 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: add necessary compile-time flags for wasm PIC mode This commit adds necessary compile-time flags when compiling for wasm PIC mode, see added comment for detailed explanation. - - - - - 9745fcfb by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: add necessary link-time flags for wasm shared libs This commit adds necessary link-time flags for wasm shared libs, see added comments for detailed explanation. - - - - - 649aae00 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: enforce -fno-use-rpaths for wasm This commit ensures the GHC driver never passes any RPATH-related link-time flags on wasm, which is not supported at all. - - - - - 47baa904 by Cheng Shao at 2024-10-17T16:41:24+00:00 driver: ensure static archives are picked when linking static .wasm modules This commit ensures static archives are picked when linking .wasm modules which are supposed to be fully static, even when ghc may be invoked with -dynamic, see added comment for explanation. - - - - - fc3a5591 by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix dynamic_too_enable for targets that require dynamic libraries This commit fixes dynamic_too_enable for targets whose RTS linker can only load dynamic code. - - - - - 94ef949e by Cheng Shao at 2024-10-17T16:41:24+00:00 compiler: fix checkNonStdWay for targets that require dynamic libraries This commit fixes checkNonStdWay to ensure that for targets whose RTS linker can only load dynamic code, the dynamic way of object is selected. - - - - - 88e99248 by Cheng Shao at 2024-10-17T16:41:24+00:00 ghc-bin: enforce dynamic way when the target requires so This commit makes ghc-bin use dynamic way when it is doing interactive stuff on certain targets whose RTS linker can only handle dynamic code. - - - - - 549582ef by Cheng Shao at 2024-10-17T16:41:24+00:00 hadrian/ghci: add wasm dyld This commit adds the wasm dynamic linker implementation, as well as ghci logic to call it and hadrian logic to install it to the correct location. See the top-level note in utils/jsffi/dyld.mjs for more details. - - - - - b562e3a6 by Cheng Shao at 2024-10-17T16:41:29+00:00 driver: fix getGccSearchDirectory for wasm target This commit fixes getGccSearchDirectory logic for wasm target, ensures the correct search directory containing libc.so etc can be found by GHC. getGccSearchDirectory is also exported so it can be used elsewhere to obtain the wasi-sdk libdir and pass to the dyld script. - - - - - 2d6107dc by Cheng Shao at 2024-10-17T16:41:29+00:00 driver: add wasm backend iserv logic This commit adds wasm backend iserv logic to the driver, see added comments for explanation. - - - - - 61f5baa5 by Cheng Shao at 2024-10-17T16:41:29+00:00 compiler: add PIC support to wasm backend NCG This commit adds support for generating PIC to the wasm backend NCG. - - - - - 652e7239 by Cheng Shao at 2024-10-17T16:41:29+00:00 hadrian/compiler: flip on support for shared libs & ghci for wasm This commit flips on the support for shared libs and ghci for the wasm target, given all required support logic has been added in previous commits. - - - - - 74a1f681 by Cheng Shao at 2024-10-17T16:41:29+00:00 testsuite: flip on support for shared libs, TH & ghci for wasm This commit flips on support for shared libs, TH & ghci for wasm in the testsuite, given support has been landed in previous commits. - - - - - 525d451e by Cheng Shao at 2024-10-17T23:03:34-04:00 Revert "compiler: start deprecating cmmToRawCmmHook" This reverts commit 1c064ef1f3e1aa2afc996e962ad53effa99ec5f4. Turns out the GHC-WPC project does use it to observe Cmm in the pipeline, see #25363. - - - - - 5bcfefd5 by Cheng Shao at 2024-10-17T23:04:09-04:00 rts: fix pointer overflow undefined behavior in bytecode interpreter This patch fixes an unnoticed undefined behavior in the bytecode interpreter. It can be caught by building `rts/Interpreter.c` with `-fsanitize=pointer-overflow`, the warning message is something like: ``` rts/Interpreter.c:1369:13: runtime error: addition of unsigned offset to 0x004200197660 overflowed to 0x004200197658 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1369:13 rts/Interpreter.c:1265:13: runtime error: addition of unsigned offset to 0x004200197660 overflowed to 0x004200197658 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1265:13 rts/Interpreter.c:1645:13: runtime error: addition of unsigned offset to 0x0042000b22f8 overflowed to 0x0042000b22f0 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior rts/Interpreter.c:1645:13 ``` Whenever we do something like `SpW(-1)`, the negative argument is implicitly converted to an unsigned integer type and causes pointer arithmetic overflow. It happens to be harmless for most targets since overflowing would wrap the result to desired value, but it's still coincidental and undefined behavior. Furthermore, it causes real damage to the wasm backend, given clang-20 will emit invalid wasm code that crashes at run-time for this kind of C code! (see https://github.com/llvm/llvm-project/issues/108770) The fix here is adding some explicit casts to ensure we always use the signed `ptrdiff_t` type as right hand operand of pointer arithmetic. - - - - - eb67875f by Matthew Craven at 2024-10-18T12:18:35+00:00 Bump transformers submodule The svg image files mentioned in transformers.cabal were previously not checked in, which broke sdist generation. - - - - - 366a1109 by Matthew Craven at 2024-10-18T12:18:35+00:00 Remove reference to non-existent file in haddock.cabal - - - - - 826852e9 by Matthew Craven at 2024-10-18T12:18:35+00:00 Move tests T11462 and T11525 into tests/tcplugins - - - - - dbe27152 by Matthew Craven at 2024-10-18T12:18:35+00:00 Repair the 'build-cabal' hadrian target Fixes #23117. Fixes #23281. Fixes #23490. This required: * Updating the bit-rotted compiler/Setup.hs and its setup-depends * Listing a few recently-added libraries and utilities in cabal.project-reinstall * Setting allow-boot-library-installs to 'True' since Cabal now considers the 'ghc' package itself a boot library for the purposes of this flag Additionally, the allow-newer block in cabal.project-reinstall was removed. This block was probably added because when the libraries/Cabal submodule is too new relative to the cabal-install executable, solving the setup-depends for any package with a custom setup requires building an old Cabal (from Hackage) against the in-tree version of base, and this can fail un-necessarily due to tight version bounds on base. However, the blind allow-newer can also cause the solver to go berserk and choose a stupid build plan that has no business succeeding, and the failures when this happens are dreadfully confusing. (See #23281 and #24363.) Why does setup-depends solving insist on an old version of Cabal? See: https://github.com/haskell/cabal/blob/0a0b33983b0f022b9697f7df3a69358ee9061a89/cabal-install/src/Distribution/Client/ProjectPlanning.hs#L1393-L1410 The right solution here is probably to use the in-tree cabal-install from libraries/Cabal/cabal-install with the build-cabal target rather than whatever the environment happens to provide. But this is left for future work. - - - - - b3c00c62 by Matthew Craven at 2024-10-18T12:18:35+00:00 Revert "CI: Disable the test-cabal-reinstall job" This reverts commit 38c3afb64d3ffc42f12163c6f0f0d5c414aa8255. - - - - - a04959b8 by Daneel Yaitskov at 2024-10-19T09:34:15-04:00 base: speed up traceEventIO and friends when eventlogging is turned off #17949 Check the RTS flag before doing any work with the given lazy string. Fix #17949 Co-authored-by: Michael Peyton Jones <me at michaelpj.com> Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - eff16c22 by Matthew Pickering at 2024-10-19T21:55:55-04:00 ci: Add support for ONLY_JOBS variable to trigger any validation pipeline By setting the ONLY_JOBS variable to the name of the job (or multiple jobs), the resulting pipeline will include a validation job for that pipeline. For example - if you set ONLY_JOBS="x86_64-linux-ubuntu22_04-validate" then a ubuntu22_04 job will be included in the validation pipeline. This is useful for testing specific jobs. Fixes #25332 - - - - - 280b6278 by Zubin Duggal at 2024-10-19T21:56:31-04:00 rel-eng: ghcup metadata generation: generated yaml anchors with meaningful names (cherry picked from commit d83f5bd730a8aef37d8a38b3560590d9798f8e45) - - - - - 25edf849 by Alan Zimmerman at 2024-10-19T21:57:08-04:00 EPA: Remove [AddEpAnn] Commit 4 EPA: Remove [AddEpAnn] from DataDecl This is quite a big change. The most important part is moving the annotations into HsDataDefn, using a specific annotation data type. It has a knock-on to everything that uses HsDataDefn EPA: Remove [AddEpAnn] for FunDep EPA: Remove [AddEpann] from FamilyDecl EPA: Remove [AddEpAnn] From InjectivityAnn EPA: Remove [AddEpAnn] from DefaultDecl EPA: Remove [AddEpAnn] from RuleDecls EPA: Remove [AddEpAnn] from Warnings - - - - - d5f42045 by Luite Stegeman at 2024-10-20T16:34:47-04:00 Interpreter: Add locking for communication with external interpreter This adds locking to communication with the external interpreter to prevent concurrent tasks interfering with each other. This fixes Template Haskell with the external interpreter in parallel (-j) builds. Fixes #25083 - - - - - d6bfea76 by Matthew James Kraai at 2024-10-20T16:35:29-04:00 Use monospace font for "Either a b" in fmap docs The documentation for fmap shows "`Either a b`" in the default font instead of showing "Either a b" in a monospace font. - - - - - 4bc7f9c8 by Luite Stegeman at 2024-10-20T16:36:15-04:00 Parser: remove non-ASCII characters from Parser.y Non-ASCII characters in the source causes a problem with the default Haskell Language Server setup in VSCode. Two characters seems to have been left in by accident. Workaround for #25396 - - - - - 7f61ed4e by Alan Zimmerman at 2024-10-21T06:39:45-04:00 EPA: Remove [AddEpAnn] Commit 5 EPA: Remove [AddEpAnn] from AnnPragma EPA: Remove [AddEpAnn] From ForeignDecl EPA: Remove [AddEpAnn] from RoleAnnotDecl EPA: Remove [AddEpAnn] from StandaloneKindSig EPA: Remove [AddEpAnn] From HsDeriving EPA: Remove [AddEpAnn] from ConDeclField EPA: Remove [AddEpAnn] from ConDeclGADT EPA: Remove [AddEpAnn] from ConDeclH98 EPA: Remove [AddEpAnn] from ClsInstDecl - - - - - f8694fe7 by Cheng Shao at 2024-10-21T06:40:21-04:00 wasm: bump dyld v8 heap size limit This patch adds `--max-old-space-size=8192` to wasm dyld shebang arguments to bump V8 heap size limit. The default limit (`heap_size_limit` returned by `v8.getHeapStatistics()`) is dynamically determined and a bit too low under certain workloads, and V8 would waste too much CPU time to garbage collect old generation heap more aggressively. Bumping the limit to 8G doesn't imply dyld would really take that much memory at run-time, but it lessens V8 heap stress significantly. - - - - - d328d173 by Luite Stegeman at 2024-10-21T12:39:18+00:00 Add requestTickyCounterSamples to GHC.Internal.Profiling This allows the user to request ticky counters to be written to the eventlog at specific times. See #24645 - - - - - 71765b1d by Simon Peyton Jones at 2024-10-21T20:55:00-04:00 Move defaulting code into a new module GHC.Tc.Solver had reached 4,000 lines -- although quite a lot of them are comments. This MR * Adds the new module GHC.Tc.Solver.Default, which has all the complex, but well modularised, defaulting code * Moves a bit of code from GHC.Tc.Solver into the existing GHC.Tc.Solver.Solve. Notably solveWanteds and simplifyWantedsTcM, which are called from GHC.Tc.Solver.Default It's a pure refactor. No code changes. - - - - - a398227b by Simon Peyton Jones at 2024-10-21T20:55:00-04:00 Improve the generalisation code in Solver.simplifyInfer The code in `decideQuantification` has become quite complicated. This MR straightens it out, adds a new Note, and on the way fixes #25266. See especially Note [decideAndPromoteTyVars] which is is where all the action happens in this MR. - - - - - 148059fe by Andrzej Rybczak at 2024-10-21T20:55:40-04:00 Adjust catches to properly rethrow exceptions https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13302 implemented exception rethrowing proposal, but it didn't adjust `catches`. This fixes it. - - - - - 25121dbc by doyougnu at 2024-10-22T09:38:18-04:00 linker: add --optimistic-linking flag This patch adds: - the --optimistic-linking flag which binds unknown symbols in the runtime linker to 0xDEADBEEF instead of exiting with failure - The test T25240 which tests these flags using dead code in the FFI system. - closes #25240 This patch is part of the upstreaming haskell.nix patches project. - - - - - f19e076d by doyougnu at 2024-10-22T09:38:18-04:00 ghc-internal: hide linkerOptimistic in MiscFlags - - - - - edc02197 by Cheng Shao at 2024-10-22T09:38:54-04:00 hadrian: fix bindist executable wrapper logic for cross targets This commit fixes an oversight of hadrian wrapper generation logic: when doing cross compilation, `wrapper` is called on executable names with cross prefix, therefore we must use `isSuffixOf` when matching to take the cross prefix into account. Also add missing cross prefix to ghci wrapper content and fix hsc2hs wrapper logic. - - - - - edf3bdf5 by Andreas Klebinger at 2024-10-22T16:30:42-04:00 mkTick: Push ticks through unsafeCoerce#. unsafeCoerce# doesn't exist at runtime so we should treat it like a Cast for the purpose of mkTick. This means if we have `{-# SCC foo #-} (unsafeCoerce# trivial_expr))` we now push the scope part of the cost centre up to `trivial_expr` at which point we can discard it completely if the expression is trivial enough. This fixes #25212. - - - - - 1bdb1317 by Cheng Shao at 2024-10-22T16:31:17-04:00 hadrian: enable late-CCS for perf flavour as well This patch enables late-CCS for perf flavour so that the testsuite can pass for perf as well. Fixes #25308. - - - - - fde12aba by Cheng Shao at 2024-10-22T16:31:54-04:00 hadrian: make sure ghc-bin internal-interpreter is disabled for stage0 when not cross compiling This patch disables internal-interpreter flag for stage0 ghc-bin when not cross compiling, see added comment for explanation. Fixes #25406. - - - - - 6ab8d751 by ignatiusm at 2024-10-24T01:23:35-04:00 Improve heap overflow exception message (#25198) Catch heap overflow exceptions and suggest using `+RTS -M<size>`. Fix #25198 - - - - - b3f7fb80 by Rodrigo Mesquita at 2024-10-24T01:24:12-04:00 determinism: Interface re-export list det In 'DocStructureItem' we want to make sure the 'Avails' are sorted, for interface file determinism. This commit introduces 'DetOrdAvails', a newtype that should only be constructed by sorting Avails with 'sortAvails' unless the avails are known to be deterministically ordered. This newtype is used by 'DocStructureItem' where 'Avails' was previously used to ensure the list of avails is deterministically sorted by construction. Note: Even though we order the constructors and avails in the interface file, the order of constructors in the haddock output is still determined from the order of declaration in the source. This was also true before, when the list of constructors in the interface file <docs> section was non-deterministic. Some haddock tests such as "ConstructorArgs" observe this (check the order of constructors in out/ConstructorArgs.html vs src/ConstructorArgs.hs vs its interface file) The updated tests are caused by haddock corners where the order in the source is not preserved (and was non-deterministic before this PR): * Module header in the latex backend * Re-export of pattern synonyms associated to a datatype (#25342) Fixes #25304 - - - - - e39c8c99 by Rodrigo Mesquita at 2024-10-24T01:24:12-04:00 Revert "ci: Allow abi-test to fail." After #25304, the abi-test with interface and object determinism succeeds. This reverts commit 7b37afc9f3e79559055488998ee73187886a0e00. - - - - - 7b1b0c6d by Alan Zimmerman at 2024-10-24T13:07:02-04:00 EPA: reduce [AddEpann] in AnnList Remove it from the `al_rest` field, and make `AnnList` parameterized on a type to be used in `al_rest`, for the various use cases. - - - - - 4a00731e by Rodrigo Mesquita at 2024-10-24T13:07:38-04:00 Fix -fobject-determinism flag definition The flag should be defined as an fflag to make sure the -fno-object-determinism flag is also an available option. Fixes #25397 - - - - - 55e4b9f2 by Sebastian Graf at 2024-10-25T07:01:54-04:00 CorePrep: Attach evaldUnfolding to floats to detect more values See `Note [Pin evaluatedness on floats]`. - - - - - 9f57c96d by Sebastian Graf at 2024-10-25T07:01:54-04:00 Make DataCon workers strict in strict fields (#20749) This patch tweaks `exprIsConApp_maybe`, `exprIsHNF` and friends, and Demand Analysis so that they exploit and maintain strictness of DataCon workers. See `Note [Strict fields in Core]` for details. Very little needed to change, and it puts field seq insertion done by Tag Inference into a new perspective: That of *implementing* strict field semantics. Before Tag Inference, DataCon workers are strict. Afterwards they are effectively lazy and field seqs happen around use sites. History has shown that there is no other way to guarantee taggedness and thus the STG Strict Field Invariant. Knock-on changes: * I reworked the whole narrative around "Tag inference". It's now called "EPT enforcement" and I recycyled the different overview Notes into `Note [EPT enforcement]`. * `exprIsHNF` previously used `exprOkForSpeculation` on unlifted arguments instead of recursing into `exprIsHNF`. That regressed the termination analysis in CPR analysis (which simply calls out to `exprIsHNF`), so I made it call `exprOkForSpeculation`, too. * There's a small regression in Demand Analysis, visible in the changed test output of T16859: Previously, a field seq on a variable would give that variable a "used exactly once" demand, now it's "used at least once", because `dmdTransformDataConSig` accounts for future uses of the field that actually all go through the case binder (and hence won't re-enter the potential thunk). The difference should hardly be observable. * The Simplifier's fast path for data constructors only applies to lazy data constructors now. I observed regressions involving Data.Binary.Put's `Pair` data type. * Unfortunately, T21392 does no longer reproduce after this patch, so I marked it as "not broken" in order to track whether we regress again in the future. Fixes #20749, the satisfying conclusion of an annoying saga (cf. the ideas in #21497 and #22475). Compiler perf generally improves, sometimes drastically: Baseline Test Metric value New value Change -------------------------------------------------------------------------------- ManyConstructors(normal) ghc/alloc 3,629,760,116 3,711,852,800 +2.3% BAD MultiLayerModulesTH_OneShot(normal) ghc/alloc 2,502,735,440 2,565,282,888 +2.5% BAD T12707(normal) ghc/alloc 804,399,798 791,807,320 -1.6% GOOD T17516(normal) ghc/alloc 964,987,744 1,008,383,520 +4.5% T18140(normal) ghc/alloc 75,381,152 49,860,560 -33.9% GOOD T18698b(normal) ghc/alloc 232,614,457 184,262,736 -20.8% GOOD T18923(normal) ghc/alloc 62,002,368 58,301,408 -6.0% GOOD T20049(normal) ghc/alloc 75,719,168 70,494,368 -6.9% GOOD T3294(normal) ghc/alloc 1,237,925,833 1,157,638,992 -6.5% GOOD T9233(normal) ghc/alloc 686,490,105 635,166,688 -7.5% GOOD geo. mean -0.7% minimum -33.9% maximum +4.5% I looked at T17516. It seems we do a few more simplifier iterations and end up with a larger program. It seems that some things inline more, while other things inline less. I don't see low-hanging fruit. I also looked at MultiLayerModulesTH_OneShot. It appears we generate a strange join point in the `getUnique` method of `Uniquable GHC.Unit.Types.Module` that should better call-site inline, but does not. Perhaps with !11492. NoFib does not seem affected much either: +-------------------------------++--+------------+-----------+---------------+-----------+ | || | base/ | std. err. | T20749/ (rel) | std. err. | +===============================++==+============+===========+===============+===========+ | spectral/last-piece || | 7.263e8 | 0.0% | +0.62% | 0.0% | +===============================++==+============+===========+===============+===========+ | geom mean || | +0.00% | | | | +-------------------------------++--+------------+-----------+---------------+-----------+ I had a look at last-piece. Nothing changes in stg-final, but there is a bit of ... movement around Data.Map.insert's use of GHC.Exts.lazy that is gone in stg-final. Co-Authored-By: Jaro Reinders <jaro.reinders at gmail.com> Metric Decrease: T12707 T18140 T18698b T18923 T19695 T20049 T3294 T9233 T21839c Metric Increase: ManyConstructors MultiLayerModulesTH_OneShot - - - - - 0225249a by Simon Peyton Jones at 2024-10-25T07:02:32-04:00 Some renaming This is a pure refactor, tidying up some inconsistent naming: isEqPred --> isEqClassPred isEqPrimPred --> isEqPred isReprEqPrimPred --> isReprEqPred mkPrimEqPred --> mkNomEqPred mkReprPrimEqPred --> mkReprEqPred mkPrimEqPredRold --> mkEqPredRole Plus I moved mkNomEqPred, mkReprEqPred, mkEqPredRolek from GHC.Core.Coercion to GHC.Core.Predicate where they belong. That means that Coercion imports Predicate rather than vice versa -- better. - - - - - 15a3456b by Ryan Hendrickson at 2024-10-25T07:02:32-04:00 compiler: Fix deriving with method constraints See Note [Inferred contexts from method constraints] Co-authored-by: Simon Peyton Jones <simon.peytonjones at gmail.com> - - - - - dbc77ce8 by Alan Zimmerman at 2024-10-25T18:20:13+01:00 EPA: Remove AddEpann commit 7 EPA: Remove [AddEpAnn] from HYPHEN in Parser.y The return value is never used, as it is part of the backpack configuration parsing. EPA: Remove last [AddEpAnn] usages Remove residual usage in GHC. It is still used - In haddock TTG extension point definitions (to be removed) - Some check-exact residual, to be removed - Comments around DisambECP in PostProcess EPA: Clean up [AddEpAnn] from check-exact There is one left, to be cleaned up when we remove AddEpann itself EPA: Remove [AddEpAnn] from haddock The TTG extension points need a value, it is not critical what that value is, in most cases. EPA: Remove AddEpAnn from HsRuleAnn EPA: Remove AddEpAnn from HsCmdArrApp - - - - - 23ddcc01 by Simon Peyton Jones at 2024-10-26T12:44:34-04:00 Fix optimisation of InstCo It turned out (#25387) that the fix to #15725 was not quite right: commit 48efbc04bd45d806c52376641e1a7ed7278d1ec7 Date: Mon Oct 15 10:25:02 2018 +0200 Fix #15725 with an extra Sym Optimising InstCo is quite subtle, and the invariants surrounding the LiftingContext in the coercion optimiser were not stated explicitly. This patch refactors the InstCo optimisation, and documents these invariants. See * Note [Optimising InstCo] * Note [The LiftingContext in optCoercion] I also did some refactoring of course: * Instead of a Bool swap-flag, I am not using GHC.Types.Basic.SwapFlag * I added some invariant-checking the coercion-construction functions in GHC.Core.Coercion.Opt. (Sadly these invariants don't hold during typechecking, becuase the types are un-zonked, so I can't put these checks in GHC.Core.Coercion.) - - - - - 589fea7f by Cheng Shao at 2024-10-27T05:36:38-04:00 ghcid: use multi repl for ghcid - - - - - d52a0475 by Andrew Lelechenko at 2024-10-27T05:37:13-04:00 documentation: add motivating section to Control.Monad.Fix - - - - - 301c3b54 by Cheng Shao at 2024-10-27T05:37:49-04:00 wasm: fix safari console error message related to import("node:timers") This patch fixes the wasm backend JSFFI prelude script to avoid calling `import("node:timers")` on non-deno hosts. Safari doesn't like it and would print an error message to the console. Fixes https://gitlab.haskell.org/ghc/ghc-wasm-meta/-/issues/13. - - - - - 9f02dfb5 by Simon Peyton Jones at 2024-10-27T15:10:08-04:00 Add a missing tidy in UnivCo We were failing to tidy the argument coercions of a UnivCo, which led directly to #25391. The fix is, happily, trivial. I don't have a small repro case (it came up when building horde-ad, which uses typechecker plugins). It should be possible to make a repro case, by using a plugin (which builds a UnivCo) but I decided it was not worth the bother. The bug is egregious and easily fixed. - - - - - 853050c3 by Andrew Lelechenko at 2024-10-27T15:10:44-04:00 Bump text submodule to 2.1.2 - - - - - 90746a59 by Andrew Lelechenko at 2024-10-27T15:10:44-04:00 hadrian: allow -Wunused-imports for text package - - - - - 8a6691c3 by Alan Zimmerman at 2024-10-27T19:44:48+00:00 EPA: Remove AddEpAnn Commit 8/final EPA: Remove AddEpAnn from AnnList EPA: Remove AddEpAnn from GrhsAnn This is the last actual use EPA: Remove NameAdornment from NameAnn Also rework AnnContext to use EpToken, and AnnParen EPA: Remove AddEpAnn. Final removal There are now none left, except for in a large note/comment in PostProcess, describing the historical transition to the disambiguation infrastructure - - - - - d5e7990c by Alan Zimmerman at 2024-10-28T21:41:05+00:00 EPA: Remove AnnKeywordId. This was used as part of AddEpAnn, and is no longer needed. Also remove all the haddock comments about which of are attached to the various parts of the AST. This is now clearly captured in the appropriate TTG extension points, and the `ExactPrint.hs` file. - - - - - e08b8370 by Serge S. Gulin at 2024-10-29T23:17:01-04:00 JS: Re-add optimization for literal strings in genApp (fixes #23479) Based on https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10588/ Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Andrei Borzenkov <root at sandwitch.dev> Co-authored-by: Danil Berestov <goosedb at yandex.ru> ------------------------- Metric Decrease: T25046_perf_size_gzip size_hello_artifact size_hello_artifact_gzip size_hello_unicode size_hello_unicode_gzip ------------------------- - - - - - e3496ef6 by Cheng Shao at 2024-10-29T23:17:37-04:00 compiler: remove unused hscDecls/hscDeclsWithLocation This patch removes unused `hscDecls`/`hscDeclsWithLocation` functions from the compiler, to reduce maintenance burden when doing refactorings related to ghci. - - - - - b1eed26f by Cheng Shao at 2024-10-29T23:18:13-04:00 testsuite: add T25414 test case marked as broken This commit adds T25414 test case to demonstrate #25414. It is marked as broken and will be fixed by the next commit. - - - - - e70009bc by Cheng Shao at 2024-10-29T23:18:13-04:00 driver: fix foreign stub handling logic in hscParsedDecls This patch fixes foreign stub handling logic in `hscParsedDecls`. Previously foreign stubs were simply ignored here, so any feature that involve foreign stubs would not work in ghci (e.g. CApiFFI). The patch reuses `generateByteCode` logic and eliminates a large chunk of duplicate logic that implements Core to bytecode generation pipeline here. Fixes #25414. - - - - - 1d7cd7fe by Andreas Klebinger at 2024-10-30T19:14:28-04:00 Add since tag for -fwrite-if-compression in user guide. Partial fix for #25395 - - - - - b349fd1b by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: Remove some unused functions - - - - - f859d61c by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: use explicit vertical bar token for ExplicitSum / SumPat - - - - - 721ac00d by Ben Gamari at 2024-10-31T08:37:38-04:00 rts/Disassembler: Fix encoding of BRK_FUN instruction The offset of the CC field was not updated after the encoding change in b85b11994e0130ff2401dd4bbdf52330e0bcf776. Fix this. Fixes #25374. - - - - - 0bc94360 by Alan Zimmerman at 2024-10-31T08:38:15-04:00 EPA: Bring in last EpToken usages For import declarations, NameAnnCommas and NPlusKPat. And remove anchor, it is the same as epaLocationRealSrcSpan. - - - - - 0b11cdc0 by sheaf at 2024-10-31T08:38:55-04:00 Assert that ctEvCoercion is called on an equality Calling 'ctEvCoercion' on non-equality constraints is always incorrect. We add an assertion to this function to detect such cases; for example a type-checking plugin might erroneously do this. - - - - - ea458779 by doyougnu at 2024-11-01T18:11:33-04:00 ghc-internal: strict, unboxed src loc ranges - closes: #20449 - See CLC proposal: #55 - - - - - 778ac793 by Kazuki Okamoto at 2024-11-01T18:12:13-04:00 No haddock markup in doctest line - - - - - cf0deeaf by Andreas Klebinger at 2024-11-02T17:54:52-04:00 Reword -fexpose-overloaded-unfoldings docs. This should make them slightly clearer. Fixes #24844 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 1c21e7d4 by Andreas Klebinger at 2024-11-02T17:55:29-04:00 Compile T25062 simd tests even if we can't run them. Helps avoid them being utterly broken. Fixes #25341 - - - - - 573cad4b by Cheng Shao at 2024-11-02T17:56:04-04:00 Remove unused USE_REPORT_PRELUDE code paths from the tree This patch removes unused `USE_REPORT_PRELUDE` code paths from the tree. They have been present since the first git revision 4fb94ae5e5d632748fa2e6c35e259eccc5a1a3f4, and might have been useful for debugging purposes many years ago, but these code paths are never actually built. Removing these ease maintenance of relevant modules in the future, and also allows us to get rid of `CPP` extension in those modules as a nice byproduct. - - - - - 97f600c6 by Hassan Al-Awwadi at 2024-11-04T15:52:12+00:00 Refactored BooleanFormula to be in line with TTG (#21592) There are two parts to this commit. * We moved the definition of BooleanFormula over to L.H.S.BooleanFormula * We parameterized the BooleanFormula over the pass The GHC specific details of BooleanFormula remain in Ghc.Data.BooleanFormula. Because its parameterized over the pass its no longer a functor or traversable, but we defined bfMap and bfTraverse for the cases where we needed fmap and traverse originally. Most other changes are just churn. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot ------------------------- - - - - - d4fd3580 by Andreas Klebinger at 2024-11-05T07:36:16-05:00 ghc-heap: Fix incomplete selector warnings. Use utility functions instead of selectors to read partial attributes. Part of fixing #25380. - - - - - fdd9f62a by Peter Trommler at 2024-11-05T07:36:51-05:00 PPC NCG: Implement fmin and fmax - - - - - 8e217256 by Mike Pilgrem at 2024-11-07T04:34:20-05:00 Re CLC #293 - Don't specify Data.List.NonEmpty in terms of partial See https://github.com/haskell/core-libraries-committee/issues/293 `List.init` had already been driven out of `tails1` by 21fc180bec93d964a7f4ffdf2429ef6f74b49ab6 but this specification also avoided partial `fromList`, so I preferred it. The `changelog.md` for `base` is updated, with an entry added under `base-4.22.0.0`. - - - - - 346e4cd1 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: copy zip files into the correct directory Fixes #25446 - - - - - bbdbe225 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: Sign .gz bindists too Fixes #25447 - - - - - 0c722e14 by Hécate Kleidukos at 2024-11-07T04:35:37-05:00 hadrian: Enforce the usage of GHC >=9.8.1 for ghci-multi GHC 9.6 no good when it comes to multi-repl stuff, despite being well within the range of n-2 releases for bootstrapping, when the script was adapted to load haddock, in !12851 - - - - - d8f8a1c3 by Sylvain Henry at 2024-11-07T19:27:46-05:00 Handle the special ghc-prim:GHC.Prim module in the compiler Before this patch, some custom hacks were necessary in ghc-prim's Setup.hs to register the GHC.Prim (virtual) module and in Hadrian to generate haddocks properly. In this patch we special-case this module in the compiler itself instead (which it already is, see ghcPrimIface in GHC.Iface.Load). From Cabal/Hadrian's perspective GHC.Prim is now just a normal autogenerated module. This simplification is worthwhile on its own. It was found while looking into the work needed for #24453 which aims to merge ghc-prim, ghc-bignum, and ghc-internal. It's also one step closer to remove ghc-prim's custom setup. - - - - - a55adc8e by Cheng Shao at 2024-11-07T19:28:22-05:00 Clean up obsolete CPP guarded code paths from the tree This patch cleans up obsolete CPP guarded code paths from the tree. The minimum supported boot GHC version is 9.6, and all the pre-9.6 era code paths can be removed. - - - - - 9ede97f3 by Cheng Shao at 2024-11-07T19:28:58-05:00 Remove obsolete executable wrappers from the tree The executable wrappers are handled by hadrian and bindist Makefile. The various .wrapper scripts in the tree are unused since removal of Make build system, so this patch removes them all. - - - - - 7d42b2df by tristian at 2024-11-07T19:29:40-05:00 TcRnDuplicateDecls now suggests to use the DuplicateRecordFields extension. Fixes: !24627 - - - - - e56ed179 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: normalise some versions in callstacks (cherry picked from commit f230e29f30d0c1c566d4dd251807fcab76a2710e) - - - - - a28fc903 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: use -fhide-source-paths to normalise some backpack tests (cherry picked from commit b19de476bc5ce5c7792e8af1354b94a4286a1a13) - - - - - ed16d303 by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite/haddock: strip version identifiers and unit hashes from html tests (cherry picked from commit fbf0889eadc410d43dd5c1657e320634b6738fa5) - - - - - e45e5836 by Zubin Duggal at 2024-11-11T15:16:36+05:30 haddock: oneshot tests can drop files if they share modtimes. Stop this by including the filename in the key. Ideally we would use `ghc -M` output to do a proper toposort Partially addresses #25372 (cherry picked from commit e78c7ef96e395f1ef41f04790aebecd0409b92b9) - - - - - 9104e6eb by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: fix normalisation of T9930fail so that it doesn't get tripped up by ghc executable (ARGV[0]) differences (cherry picked from commit a79a587e025d42d34bb30e115fc5c7cab6c1e030) - - - - - 2c31264a by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: normalise windows file seperators (cherry picked from commit f858875e03b9609656b542aaaaff85ad0a83878a) - - - - - 2807f91b by Zubin Duggal at 2024-11-11T15:21:30+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites - - - - - c02add17 by Ben Gamari at 2024-11-12T01:22:11-05:00 configure: Check version number validity Here we verify the previously informal invariant that stable release version numbers must have three components, preventing costly failed releases. Specifically, the check fails in the following scenarios: * `version=9.13` while `RELEASE=YES` since this would imply a release made from an unstable branch * `version=9.13.0` since unstable versions should only have two components * `version=9.12` since this has the wrong number of version components for a stable branch Fixes #25390. - - - - - 747fd322 by Teo Camarasu at 2024-11-12T01:22:49-05:00 docs: link to #14474 in the template-haskell docs - - - - - 6d96bb62 by Zubin Duggal at 2024-11-12T01:23:25-05:00 testsuite: normalise execvp vs exec differences in process tests Fixes #25431 - - - - - 502e6711 by Torsten Schmits at 2024-11-12T01:24:01-05:00 fix test lint that accumulated while the checks were broken I didn't fix the issues flagged by the #ifdef linter because it were so many that it seemed like the rule has become obsolete. - - - - - 223a4cb5 by Torsten Schmits at 2024-11-12T01:24:02-05:00 test driver: fix file collection for regex linters When a testsuite linter is executed with the `tracked` strategy, the driver runs `git ls-tree` to collect eligible files. This appears to have ceased producing any paths – `ls-tree` restricts its results to the current working directory, which is `testsuite/tests/linters` in this case. As a quick fix, this patch changes the working directory to match expectations. - - - - - 9ad9ac63 by Alan Zimmerman at 2024-11-12T01:24:39-05:00 EPA: Capture location of '_' for wild card type binder And keep track of promotion status in HsExplicitTupleTy, so the round-trip ppr test works for it. Updates Haddock output too, using the PromotionFlag in HsExplicitTupleTy. Closes #25454 - - - - - c37b96fa by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix setImmediate() implementation for Cloudflare Workers This patch fixes setImmediate() implementation for Cloudflare Workers in the wasm backend's js prelude script. Cloudflare Workers doesn't support the MessageChannel API, and we use a setTimeout() based fallback implementation in this case. - - - - - bea8ea4c by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix FinalizationRegistry logic for Cloudflare Workers This patch fixes FinalizationRegistry related logic for Cloudflare Workers in wasm backend js post linker. Cloudflare Workers doesn't support FinalizationRegistry, in this case we use a dummy implementation that doesn't do anything. - - - - - 00d551bf by Cheng Shao at 2024-11-13T08:48:21-05:00 Remove obsolete cross-port script This patch removes the obsolete cross-port script in the tree. The script was based on the legacy Make build system which has been pruned from the tree long ago. For hadrian, proper support for two-stage bootstrapping onto a new unsupported platform is a work in progress in !11444. - - - - - 75a2eae4 by Cheng Shao at 2024-11-13T08:48:58-05:00 hadrian: fix bindist makefile for wasm32-wasi target This patch fixes one incoherent place between bindist makefile and hadrian logic: I forgot to include wasi/wasm32 in OsSupportsGHCi/ArchSupportsGHCi as well. And this results in incorrect settings file generated after installing the bindist, and "Use interpreter"/"Have interpreter" fields incorrectly have "NO" values where they should be "YES" like --info output of in-tree version. - - - - - 0614abef by Alan Zimmerman at 2024-11-13T08:49:34-05:00 EPA: Correctly capture leading semis in decl list Closes #25467 - - - - - 00d58ae1 by Sebastian Graf at 2024-11-13T15:21:23-05:00 DmdAnal: Make `prompt#` lazy (#25439) This applies the same treatment to `prompt#` as for `catch#`. See `Note [Strictness for mask/unmask/catch/prompt]`. Fixes #25439. - - - - - 93233a66 by Ben Gamari at 2024-11-13T15:21:59-05:00 boot: Do not attempt to update config.sub While Apple ARM hardware was new we found that the autoconf scripts included in some boot packages were too old. As a mitigation for this, we introduced logic in the `boot` script to update the `config.sub` with that from the GHC tree. However, this causes submodules which have `config.sub` committted to appear to be dirty. This is a considerable headache. Now since `config.sub` with full platform support is more common we can remove `boot`'s `config.sub` logic. Fixes #19574. - - - - - fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 9c53489d by Andrei Borzenkov at 2024-12-12T15:06:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 13fe48d4 by Matthew Pickering at 2024-12-12T15:07:19-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - 62a2b25f by Sylvain Henry at 2024-12-14T04:31:09-05:00 TNTC: set CmmProc entry_label properly (#25565) Before this patch we were renaming the entry label of a CmmProc late in the CmmToAsm pass. It led to inconsistencies and to some labels being used in info tables but not being emitted (#25565). Now we set the CmmProc entry label earlier in the StgToCmm monad and we don't renamed it afterwards. - - - - - b339e7c3 by Simon Hengel at 2024-12-14T04:31:47-05:00 Make filter functionality for system tools line-based This is more efficient as: - All existing filter functions were line-based anyway. They broke up the input into lines and then joined it back together. - We already break up the output from system tools into lines when processing it. Splitting up the output of system tools once and then filtering and processing it reduces both code and runtime complexity. - - - - - 39669077 by Simon Hengel at 2024-12-14T04:31:47-05:00 Refactoring: Don't use a `Chan` when parsing SysTools output - - - - - 64756530 by Simon Peyton Jones at 2024-12-14T22:28:04-05:00 Tidy up the handling of `assert` Fixes #25493 - - - - - 8658fbc1 by Rodrigo Mesquita at 2024-12-14T22:28:41-05:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 80f0e02d by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - 175a1355 by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - 8ef2dad6 by Simon Peyton Jones at 2024-12-17T02:48:09-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - e86b1b20 by Ben Gamari at 2024-12-17T13:51:39-05:00 testsuite: Use math.inf instead of division-by-zero This both more directly captures the intent and also fixes #25580. - - - - - 430d965a by Ben Gamari at 2024-12-17T13:52:15-05:00 rts: Fix incorrect format specifiers in era profiling Fixes #25581. - - - - - 267098ad by Andreas Klebinger at 2024-12-18T23:43:13-05:00 Document `-prof` and non `-prof` code being incompatible. Fixes #25518. - - - - - 04433916 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: output metadata fragment in CI (cherry picked from commit 52b58a660e735b20961d792d8fa9267f01247a50) - - - - - 7c78804e by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore (cherry picked from commit dc86785eb43afd1bd292287c064fb5ad94fe8c7f) - - - - - 1d72cfb2 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: still use centos for redhat <9 - - - - - 3f7ebc58 by Sylvain Henry at 2024-12-19T20:40:14-05:00 Merge ghc-bignum into ghc-internal (#24453) First step towards merging ghc-bignum and ghc-prim into ghc-internal. After this patch, ghc-bignum is deprecated and is just a shallow package reexporting modules from ghc-internal and base. Use those directly instead. Move `gmp` submodule into ghc-internal directory. - - - - - ee0150c2 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Improve performance of deriving Show Significantly improves performance of deriving Show instances by avoiding using the very polymorphic `.` operator in favour of inlining its definition. We were generating tons of applications of it, each which had 3 type arguments! Improves on #9557 ------------------------- Metric Decrease: InstanceMatching T12707 T3294 ------------------------ - - - - - 8b266671 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Don't eta expand cons when deriving Data This eta expansion was introduced with the initial commit for Linear types. I believe this isn't needed any longer. My guess is it is an artifact from the initial linear types implementation: data constructors are linear, but they shouldn't need to be eta expanded to be used as higher order functions. I suppose in the early days this wasn't true. For instance, this works now: data T x = T x f = \(x :: forall y. y -> T y) -> x True f T -- ok! T is linear, but can be passed where an unrestricted higher order function is expected. I recall there being some magic around to make this work for data constructors... Since this works, there's no need to eta_expand the data constructors in the derived Data instances. - - - - - 59981c80 by Matthew Pickering at 2024-12-20T12:59:17+00:00 Add support for ghc-debug to ghc executable - - - - - 12 changed files: - .ghcid - + .git-blame-ignore-revs - .gitattributes - .gitignore - .gitlab-ci.yml - + .gitlab/README.md - .gitlab/ci.sh - .gitlab/darwin/nix/sources.json - .gitlab/darwin/toolchain.nix - .gitlab/generate-ci/flake.lock - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/5061be136174049f2c29e96484a0cbf2ec1459cf...59981c80ff348b5a72a04213e47b71e123210707 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/5061be136174049f2c29e96484a0cbf2ec1459cf...59981c80ff348b5a72a04213e47b71e123210707 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 13:37:53 2024 From: gitlab at gitlab.haskell.org (Zubin (@wz1000)) Date: Fri, 20 Dec 2024 08:37:53 -0500 Subject: [Git][ghc/ghc][wip/9.12-forward-ports] 6 commits: Bump base, ghc-prim and template-haskell versions for 9.12 Message-ID: <67657331515ab_45a5d923a4c270b@gitlab.mail> Zubin pushed to branch wip/9.12-forward-ports at Glasgow Haskell Compiler / GHC Commits: 97585ad8 by Zubin Duggal at 2024-12-20T19:07:22+05:30 Bump base, ghc-prim and template-haskell versions for 9.12 Also bump various submodules. (cherry picked from commit 6fc1fa3bdc8f53acdb19e47145789274060e498f) Bump base bound to 4.21 for GHC 9.12 (cherry picked from commit 473a201c6b55aea5bf9c9db0836a66ea1b657e04) Bump binary submodule to 0.8.9.2 (cherry picked from commit 7199869a52ab45e8856658248bf807954d58cc20) (cherry picked from commit ec2f40b45c1a3d82d17a2fc07e9ddb9218bc3940) Bump exceptions submodule to 0.10.9 (cherry picked from commit f5b5d1dc2d326368e5b173d622630d77f019b629) Bump file-io submodule to 0.1.4 (cherry picked from commit ba786681de6ac5fa49938e2cd71a5988f0f40d1f) bump os-string submodule to 2.0.6 (cherry picked from commit 3a7ffdbb832c045a55fd1ef24f546abdd9d9e30f) bump transformers submodule to 0.6.1.2 (cherry picked from commit 53b46fd437421b9e5a001edc6d1c427439d7714f) Bump directory submodule to v1.3.9.0 (cherry picked from commit 27dc2664c5404bb462092bb216c2c37b418fd1f8) Bump Win32 submodule to v2.14.1.0 (cherry picked from commit 80df88086180f5e39212b2feacf70a9d2b263c6c) Bump filepath submodule to 1.5.3.0 (cherry picked from commit 29bfae2c58a7303a081a6e7956b9f55e5faf3eeb) Bump file-io submodule to avoid usage of QuasiQuotes (cherry picked from commit 97b0dff223a6c4cc003adec448104c277f214645) Bump unix submodule to 2.8.6.0 (cherry picked from commit a1f56d6d6a99c100f88ef0a8b4d51298cf24a42d) Bump os-string submodule to 2.0.8 (cherry picked from commit 0121b76fd52ea0c0ce5d07085bc195666b63c625) Bump file-io submodule to avoid usage of QuasiQuotes (cherry picked from commit 962ceb50c8a6fc370e1c0a267f5cd5562a8cf759) Bump filepath submodule to 1.5.4.0 (cherry picked from commit 7bc6877fd5d41c6d5900678ad5e73ed30f366569) Bump file-io submodule to 0.1.5 (cherry picked from commit 9478b5aefe2877d58baf527edcf936dddbb955b7) Bump Cabal submodule to 3.14.1.0 (cherry picked from commit 5c9c3e3f79a79bb6d9a77a17c716dc3a0bcbd2aa) Bump directory submodule to 0.12.2.0 (cherry picked from commit 897906265db37af34ae2aaa016cec417f263407b) Bump array submodule for base bump Bump stm submodule for base bump Bump process submodule for base bump - - - - - b001005f by Zubin Duggal at 2024-12-20T19:07:42+05:30 Fix ghc-e005 after HasCallstack changes (cherry picked from commit 77f340a24561cea8a6f2ada296b3ea356ab1823c) - - - - - 3539ff63 by Zubin Duggal at 2024-12-20T19:07:42+05:30 Add haskeline to stage0Packages Otherwise we link against boot inplace and boot unix as boot haskeline depends on boot unix. (cherry picked from commit 90b493769ebdf3cd7be404d18462dc20ac1044df) - - - - - 26c0ae8a by Zubin Duggal at 2024-12-20T19:07:42+05:30 Fix TH changelog - - - - - f6f5222d by Zubin Duggal at 2024-12-20T19:07:42+05:30 release: copy index.html from correct directory (cherry picked from commit cbfd0829cd61928976c9eb17ba4af18272466063) - - - - - b5133d43 by Zubin Duggal at 2024-12-20T19:07:42+05:30 hadrian-multi: warn on unused imports os-string has redundant imports (cherry picked from commit dde3796be689ea57543936e22aa5ea4ef7ed995e) - - - - - 30 changed files: - .gitlab-ci.yml - .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py - compiler/ghc.cabal.in - ghc/ghc-bin.cabal.in - hadrian/src/Settings/Default.hs - hadrian/src/Settings/Warnings.hs - libraries/Cabal - libraries/Win32 - libraries/array - libraries/base/base.cabal.in - libraries/binary - libraries/bytestring - libraries/deepseq - libraries/directory - libraries/exceptions - libraries/file-io - libraries/filepath - libraries/ghc-boot-th/ghc-boot-th.cabal.in - libraries/ghc-boot/ghc-boot.cabal.in - libraries/ghc-compact/ghc-compact.cabal - libraries/ghc-experimental/ghc-experimental.cabal.in - libraries/ghc-heap/ghc-heap.cabal.in - libraries/ghc-internal/ghc-internal.cabal.in - libraries/ghc-prim/ghc-prim.cabal - libraries/ghci/ghci.cabal.in - libraries/haskeline - libraries/hpc - libraries/os-string - libraries/parsec - libraries/process The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/dfcfcbbfa744330c712e48c501e7f9cbc905e854...b5133d439a306cda19a4349778fa84bb03a17998 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/dfcfcbbfa744330c712e48c501e7f9cbc905e854...b5133d439a306cda19a4349778fa84bb03a17998 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 15:19:55 2024 From: gitlab at gitlab.haskell.org (Andreas Klebinger (@AndreasK)) Date: Fri, 20 Dec 2024 10:19:55 -0500 Subject: [Git][ghc/ghc][wip/andreask/9.10-backports] 9 commits: GHCi: Support local Prelude Message-ID: <67658b1b16d49_45a5d17295c44667f@gitlab.mail> Andreas Klebinger pushed to branch wip/andreask/9.10-backports at Glasgow Haskell Compiler / GHC Commits: 6c1bf036 by Max Ulidtko at 2024-12-20T13:28:23+01:00 GHCi: Support local Prelude Fixes #10920, an issue where GHCi bails out when started alongside a file named Prelude.hs or Prelude.lhs (even empty file suffices). The in-source Note [GHCi and local Preludes] documents core reasoning. Supplementary changes: * add debug traces for module lookups under -ddump-if-trace; * drop stale comment in GHC.Iface.Load; * reduce noise in -v3 traces from GHC.Utils.TmpFs; * new test, which also exercizes HomeModError. (cherry picked from commit 977b6b64e184795f3f12ac5b2637707f0696457c) - - - - - 03727a8e by Cheng Shao at 2024-12-20T13:30:00+01:00 compiler: emit NaturallyAligned when element type & index type are the same width This commit fixes a subtle mistake in alignmentFromTypes that used to generate Unaligned when element type & index type are the same width. Fixes #24930. (cherry picked from commit 0cff083abb24701530974872b21cf897c9955a9a) - - - - - 487c8c8d by qqwy at 2024-12-20T13:32:00+01:00 Replace '?callStack' implicit param with HasCallStack in GHC.Internal.Exception.throw (cherry picked from commit edfe6140be64f0d9365f7e954d3db534d63bb04f) - - - - - 33ee13b5 by Cheng Shao at 2024-12-20T13:32:54+01:00 rts: use page sized mblocks on wasm This patch changes mblock size to page size on wasm. It allows us to simplify our wasi-libc fork, makes it much easier to test third party libc allocators like emmalloc/mimalloc, as well as experimenting with threaded RTS in wasm. (cherry picked from commit 558353f4e22643b94b9710a45c3364c518d57b46) - - - - - 71115f23 by Simon Peyton Jones at 2024-12-20T13:40:27+01:00 Localise a case-binder in SpecConstr.mkSeqs This small change fixes #24944 See (SCF1) in Note [SpecConstr and strict fields] (cherry picked from commit 246bc3a43a57b7c9ea907bd9ef15b7ef7c490681) - - - - - e417441e by Andreas Klebinger at 2024-12-20T13:43:40+01:00 Expand the `inline` rule to look through casts/ticks. Fixes #24808 (cherry picked from commit a593f28426ca508a72b49d0112ef934ce9f453fd) - - - - - 113e76d3 by Simon Peyton Jones at 2024-12-20T13:51:19+01:00 Fix a float-out error Ticket #24768 showed that the Simplifier was accidentally destroying a join point. It turned out to be that we were sending a bottoming join point to the top, accidentally abstracting over /other/ join points. Easily fixed. (cherry picked from commit 03c5dfbf52969504ca3473cb2eb7b3f7cf96d4b3) - - - - - d39bdab8 by Peter Trommler at 2024-12-20T13:58:28+01:00 PPC NCG: Fix sign hints in C calls Sign hints for parameters are in the second component of the pair. Fixes #23034 (cherry picked from commit 7fe85b1354a13749f14d588e3cc742b8ae2d8da9) - - - - - a92613c2 by Andreas Klebinger at 2024-12-20T16:00:28+01:00 More 9.10.2 Changelog notes. - - - - - 30 changed files: - compiler/GHC.hs - compiler/GHC/CmmToAsm/PPC/CodeGen.hs - compiler/GHC/Core/Opt/ConstantFold.hs - compiler/GHC/Core/Opt/SetLevels.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Iface/Env.hs - compiler/GHC/Iface/Load.hs - compiler/GHC/StgToCmm/Prim.hs - compiler/GHC/Utils/TmpFs.hs - docs/users_guide/9.10.2-notes.rst - ghc/GHCi/UI.hs - + libraries/ghc-compact/tests/T18757.stdout-wasm32-unknown-wasi - libraries/ghc-internal/src/GHC/Internal/Exception.hs - rts/include/rts/Constants.h - rts/sm/NonMoving.h - rts/wasm/OSMem.c - + testsuite/tests/codeGen/should_run/T23034.h - + testsuite/tests/codeGen/should_run/T23034.hs - + testsuite/tests/codeGen/should_run/T23034.stdout - + testsuite/tests/codeGen/should_run/T23034_c.c - testsuite/tests/codeGen/should_run/all.T - testsuite/tests/diagnostic-codes/codes.stdout - + testsuite/tests/ghci/should_run/LocalPrelude/Prelude.hs - + testsuite/tests/ghci/should_run/T10920.hs - + testsuite/tests/ghci/should_run/T10920.script - + testsuite/tests/ghci/should_run/T10920.stderr - + testsuite/tests/ghci/should_run/T10920.stdout - testsuite/tests/ghci/should_run/all.T - testsuite/tests/interface-stability/base-exports.stdout - testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/1a7a0500b165a5f746691a37df1329c421b08b19...a92613c21bc0d728d87fb48eb0a3f9bff20e04f5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/1a7a0500b165a5f746691a37df1329c421b08b19...a92613c21bc0d728d87fb48eb0a3f9bff20e04f5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 15:20:07 2024 From: gitlab at gitlab.haskell.org (Matthew Pickering (@mpickering)) Date: Fri, 20 Dec 2024 10:20:07 -0500 Subject: [Git][ghc/ghc][wip/romes/graph-compact-easy] 98 commits: driver: Always link against "base" package when one shot linking Message-ID: <67658b2735617_45a5d16ec8b84687@gitlab.mail> Matthew Pickering pushed to branch wip/romes/graph-compact-easy at Glasgow Haskell Compiler / GHC Commits: 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 9c53489d by Andrei Borzenkov at 2024-12-12T15:06:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 13fe48d4 by Matthew Pickering at 2024-12-12T15:07:19-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - 62a2b25f by Sylvain Henry at 2024-12-14T04:31:09-05:00 TNTC: set CmmProc entry_label properly (#25565) Before this patch we were renaming the entry label of a CmmProc late in the CmmToAsm pass. It led to inconsistencies and to some labels being used in info tables but not being emitted (#25565). Now we set the CmmProc entry label earlier in the StgToCmm monad and we don't renamed it afterwards. - - - - - b339e7c3 by Simon Hengel at 2024-12-14T04:31:47-05:00 Make filter functionality for system tools line-based This is more efficient as: - All existing filter functions were line-based anyway. They broke up the input into lines and then joined it back together. - We already break up the output from system tools into lines when processing it. Splitting up the output of system tools once and then filtering and processing it reduces both code and runtime complexity. - - - - - 39669077 by Simon Hengel at 2024-12-14T04:31:47-05:00 Refactoring: Don't use a `Chan` when parsing SysTools output - - - - - 64756530 by Simon Peyton Jones at 2024-12-14T22:28:04-05:00 Tidy up the handling of `assert` Fixes #25493 - - - - - 8658fbc1 by Rodrigo Mesquita at 2024-12-14T22:28:41-05:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 80f0e02d by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - 175a1355 by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - 8ef2dad6 by Simon Peyton Jones at 2024-12-17T02:48:09-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - e86b1b20 by Ben Gamari at 2024-12-17T13:51:39-05:00 testsuite: Use math.inf instead of division-by-zero This both more directly captures the intent and also fixes #25580. - - - - - 430d965a by Ben Gamari at 2024-12-17T13:52:15-05:00 rts: Fix incorrect format specifiers in era profiling Fixes #25581. - - - - - 267098ad by Andreas Klebinger at 2024-12-18T23:43:13-05:00 Document `-prof` and non `-prof` code being incompatible. Fixes #25518. - - - - - 04433916 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: output metadata fragment in CI (cherry picked from commit 52b58a660e735b20961d792d8fa9267f01247a50) - - - - - 7c78804e by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore (cherry picked from commit dc86785eb43afd1bd292287c064fb5ad94fe8c7f) - - - - - 1d72cfb2 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: still use centos for redhat <9 - - - - - 3f7ebc58 by Sylvain Henry at 2024-12-19T20:40:14-05:00 Merge ghc-bignum into ghc-internal (#24453) First step towards merging ghc-bignum and ghc-prim into ghc-internal. After this patch, ghc-bignum is deprecated and is just a shallow package reexporting modules from ghc-internal and base. Use those directly instead. Move `gmp` submodule into ghc-internal directory. - - - - - ee0150c2 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Improve performance of deriving Show Significantly improves performance of deriving Show instances by avoiding using the very polymorphic `.` operator in favour of inlining its definition. We were generating tons of applications of it, each which had 3 type arguments! Improves on #9557 ------------------------- Metric Decrease: InstanceMatching T12707 T3294 ------------------------ - - - - - 8b266671 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Don't eta expand cons when deriving Data This eta expansion was introduced with the initial commit for Linear types. I believe this isn't needed any longer. My guess is it is an artifact from the initial linear types implementation: data constructors are linear, but they shouldn't need to be eta expanded to be used as higher order functions. I suppose in the early days this wasn't true. For instance, this works now: data T x = T x f = \(x :: forall y. y -> T y) -> x True f T -- ok! T is linear, but can be passed where an unrestricted higher order function is expected. I recall there being some magic around to make this work for data constructors... Since this works, there's no need to eta_expand the data constructors in the derived Data instances. - - - - - fb24e551 by Rodrigo Mesquita at 2024-12-20T15:17:49+00:00 driver: Store the HomePackageTable in a mutable reference Co-authored-by: Matthew Pickering <matthewtpickering at gmail.com> - - - - - 30 changed files: - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - .gitmodules - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/Pipeline.hs - compiler/GHC/Core/Opt/Simplify/Utils.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/Opt/Specialise.hs - compiler/GHC/Core/SimpleOpt.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/Core/Type.hs - compiler/GHC/CoreToStg/Prep.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/d6a62da7b6e358994515813c1c4a817491003476...fb24e5510f894a20282f08cba72e5fd36ad63c91 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/d6a62da7b6e358994515813c1c4a817491003476...fb24e5510f894a20282f08cba72e5fd36ad63c91 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 15:43:53 2024 From: gitlab at gitlab.haskell.org (Matthew Pickering (@mpickering)) Date: Fri, 20 Dec 2024 10:43:53 -0500 Subject: [Git][ghc/ghc] Pushed new branch wip/unbound-name-qualified Message-ID: <676590b97ada1_35004ac36f476953@gitlab.mail> Matthew Pickering pushed new branch wip/unbound-name-qualified at Glasgow Haskell Compiler / GHC -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/unbound-name-qualified You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 15:44:24 2024 From: gitlab at gitlab.haskell.org (Matthew Pickering (@mpickering)) Date: Fri, 20 Dec 2024 10:44:24 -0500 Subject: [Git][ghc/ghc][wip/unbound-name-qualified] 228 commits: EPA: reduce [AddEpann] in AnnList Message-ID: <676590d847309_35004abcd40771a7@gitlab.mail> Matthew Pickering pushed to branch wip/unbound-name-qualified at Glasgow Haskell Compiler / GHC Commits: 7b1b0c6d by Alan Zimmerman at 2024-10-24T13:07:02-04:00 EPA: reduce [AddEpann] in AnnList Remove it from the `al_rest` field, and make `AnnList` parameterized on a type to be used in `al_rest`, for the various use cases. - - - - - 4a00731e by Rodrigo Mesquita at 2024-10-24T13:07:38-04:00 Fix -fobject-determinism flag definition The flag should be defined as an fflag to make sure the -fno-object-determinism flag is also an available option. Fixes #25397 - - - - - 55e4b9f2 by Sebastian Graf at 2024-10-25T07:01:54-04:00 CorePrep: Attach evaldUnfolding to floats to detect more values See `Note [Pin evaluatedness on floats]`. - - - - - 9f57c96d by Sebastian Graf at 2024-10-25T07:01:54-04:00 Make DataCon workers strict in strict fields (#20749) This patch tweaks `exprIsConApp_maybe`, `exprIsHNF` and friends, and Demand Analysis so that they exploit and maintain strictness of DataCon workers. See `Note [Strict fields in Core]` for details. Very little needed to change, and it puts field seq insertion done by Tag Inference into a new perspective: That of *implementing* strict field semantics. Before Tag Inference, DataCon workers are strict. Afterwards they are effectively lazy and field seqs happen around use sites. History has shown that there is no other way to guarantee taggedness and thus the STG Strict Field Invariant. Knock-on changes: * I reworked the whole narrative around "Tag inference". It's now called "EPT enforcement" and I recycyled the different overview Notes into `Note [EPT enforcement]`. * `exprIsHNF` previously used `exprOkForSpeculation` on unlifted arguments instead of recursing into `exprIsHNF`. That regressed the termination analysis in CPR analysis (which simply calls out to `exprIsHNF`), so I made it call `exprOkForSpeculation`, too. * There's a small regression in Demand Analysis, visible in the changed test output of T16859: Previously, a field seq on a variable would give that variable a "used exactly once" demand, now it's "used at least once", because `dmdTransformDataConSig` accounts for future uses of the field that actually all go through the case binder (and hence won't re-enter the potential thunk). The difference should hardly be observable. * The Simplifier's fast path for data constructors only applies to lazy data constructors now. I observed regressions involving Data.Binary.Put's `Pair` data type. * Unfortunately, T21392 does no longer reproduce after this patch, so I marked it as "not broken" in order to track whether we regress again in the future. Fixes #20749, the satisfying conclusion of an annoying saga (cf. the ideas in #21497 and #22475). Compiler perf generally improves, sometimes drastically: Baseline Test Metric value New value Change -------------------------------------------------------------------------------- ManyConstructors(normal) ghc/alloc 3,629,760,116 3,711,852,800 +2.3% BAD MultiLayerModulesTH_OneShot(normal) ghc/alloc 2,502,735,440 2,565,282,888 +2.5% BAD T12707(normal) ghc/alloc 804,399,798 791,807,320 -1.6% GOOD T17516(normal) ghc/alloc 964,987,744 1,008,383,520 +4.5% T18140(normal) ghc/alloc 75,381,152 49,860,560 -33.9% GOOD T18698b(normal) ghc/alloc 232,614,457 184,262,736 -20.8% GOOD T18923(normal) ghc/alloc 62,002,368 58,301,408 -6.0% GOOD T20049(normal) ghc/alloc 75,719,168 70,494,368 -6.9% GOOD T3294(normal) ghc/alloc 1,237,925,833 1,157,638,992 -6.5% GOOD T9233(normal) ghc/alloc 686,490,105 635,166,688 -7.5% GOOD geo. mean -0.7% minimum -33.9% maximum +4.5% I looked at T17516. It seems we do a few more simplifier iterations and end up with a larger program. It seems that some things inline more, while other things inline less. I don't see low-hanging fruit. I also looked at MultiLayerModulesTH_OneShot. It appears we generate a strange join point in the `getUnique` method of `Uniquable GHC.Unit.Types.Module` that should better call-site inline, but does not. Perhaps with !11492. NoFib does not seem affected much either: +-------------------------------++--+------------+-----------+---------------+-----------+ | || | base/ | std. err. | T20749/ (rel) | std. err. | +===============================++==+============+===========+===============+===========+ | spectral/last-piece || | 7.263e8 | 0.0% | +0.62% | 0.0% | +===============================++==+============+===========+===============+===========+ | geom mean || | +0.00% | | | | +-------------------------------++--+------------+-----------+---------------+-----------+ I had a look at last-piece. Nothing changes in stg-final, but there is a bit of ... movement around Data.Map.insert's use of GHC.Exts.lazy that is gone in stg-final. Co-Authored-By: Jaro Reinders <jaro.reinders at gmail.com> Metric Decrease: T12707 T18140 T18698b T18923 T19695 T20049 T3294 T9233 T21839c Metric Increase: ManyConstructors MultiLayerModulesTH_OneShot - - - - - 0225249a by Simon Peyton Jones at 2024-10-25T07:02:32-04:00 Some renaming This is a pure refactor, tidying up some inconsistent naming: isEqPred --> isEqClassPred isEqPrimPred --> isEqPred isReprEqPrimPred --> isReprEqPred mkPrimEqPred --> mkNomEqPred mkReprPrimEqPred --> mkReprEqPred mkPrimEqPredRold --> mkEqPredRole Plus I moved mkNomEqPred, mkReprEqPred, mkEqPredRolek from GHC.Core.Coercion to GHC.Core.Predicate where they belong. That means that Coercion imports Predicate rather than vice versa -- better. - - - - - 15a3456b by Ryan Hendrickson at 2024-10-25T07:02:32-04:00 compiler: Fix deriving with method constraints See Note [Inferred contexts from method constraints] Co-authored-by: Simon Peyton Jones <simon.peytonjones at gmail.com> - - - - - dbc77ce8 by Alan Zimmerman at 2024-10-25T18:20:13+01:00 EPA: Remove AddEpann commit 7 EPA: Remove [AddEpAnn] from HYPHEN in Parser.y The return value is never used, as it is part of the backpack configuration parsing. EPA: Remove last [AddEpAnn] usages Remove residual usage in GHC. It is still used - In haddock TTG extension point definitions (to be removed) - Some check-exact residual, to be removed - Comments around DisambECP in PostProcess EPA: Clean up [AddEpAnn] from check-exact There is one left, to be cleaned up when we remove AddEpann itself EPA: Remove [AddEpAnn] from haddock The TTG extension points need a value, it is not critical what that value is, in most cases. EPA: Remove AddEpAnn from HsRuleAnn EPA: Remove AddEpAnn from HsCmdArrApp - - - - - 23ddcc01 by Simon Peyton Jones at 2024-10-26T12:44:34-04:00 Fix optimisation of InstCo It turned out (#25387) that the fix to #15725 was not quite right: commit 48efbc04bd45d806c52376641e1a7ed7278d1ec7 Date: Mon Oct 15 10:25:02 2018 +0200 Fix #15725 with an extra Sym Optimising InstCo is quite subtle, and the invariants surrounding the LiftingContext in the coercion optimiser were not stated explicitly. This patch refactors the InstCo optimisation, and documents these invariants. See * Note [Optimising InstCo] * Note [The LiftingContext in optCoercion] I also did some refactoring of course: * Instead of a Bool swap-flag, I am not using GHC.Types.Basic.SwapFlag * I added some invariant-checking the coercion-construction functions in GHC.Core.Coercion.Opt. (Sadly these invariants don't hold during typechecking, becuase the types are un-zonked, so I can't put these checks in GHC.Core.Coercion.) - - - - - 589fea7f by Cheng Shao at 2024-10-27T05:36:38-04:00 ghcid: use multi repl for ghcid - - - - - d52a0475 by Andrew Lelechenko at 2024-10-27T05:37:13-04:00 documentation: add motivating section to Control.Monad.Fix - - - - - 301c3b54 by Cheng Shao at 2024-10-27T05:37:49-04:00 wasm: fix safari console error message related to import("node:timers") This patch fixes the wasm backend JSFFI prelude script to avoid calling `import("node:timers")` on non-deno hosts. Safari doesn't like it and would print an error message to the console. Fixes https://gitlab.haskell.org/ghc/ghc-wasm-meta/-/issues/13. - - - - - 9f02dfb5 by Simon Peyton Jones at 2024-10-27T15:10:08-04:00 Add a missing tidy in UnivCo We were failing to tidy the argument coercions of a UnivCo, which led directly to #25391. The fix is, happily, trivial. I don't have a small repro case (it came up when building horde-ad, which uses typechecker plugins). It should be possible to make a repro case, by using a plugin (which builds a UnivCo) but I decided it was not worth the bother. The bug is egregious and easily fixed. - - - - - 853050c3 by Andrew Lelechenko at 2024-10-27T15:10:44-04:00 Bump text submodule to 2.1.2 - - - - - 90746a59 by Andrew Lelechenko at 2024-10-27T15:10:44-04:00 hadrian: allow -Wunused-imports for text package - - - - - 8a6691c3 by Alan Zimmerman at 2024-10-27T19:44:48+00:00 EPA: Remove AddEpAnn Commit 8/final EPA: Remove AddEpAnn from AnnList EPA: Remove AddEpAnn from GrhsAnn This is the last actual use EPA: Remove NameAdornment from NameAnn Also rework AnnContext to use EpToken, and AnnParen EPA: Remove AddEpAnn. Final removal There are now none left, except for in a large note/comment in PostProcess, describing the historical transition to the disambiguation infrastructure - - - - - d5e7990c by Alan Zimmerman at 2024-10-28T21:41:05+00:00 EPA: Remove AnnKeywordId. This was used as part of AddEpAnn, and is no longer needed. Also remove all the haddock comments about which of are attached to the various parts of the AST. This is now clearly captured in the appropriate TTG extension points, and the `ExactPrint.hs` file. - - - - - e08b8370 by Serge S. Gulin at 2024-10-29T23:17:01-04:00 JS: Re-add optimization for literal strings in genApp (fixes #23479) Based on https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10588/ Co-authored-by: Sylvain Henry <sylvain at haskus.fr> Co-authored-by: Andrei Borzenkov <root at sandwitch.dev> Co-authored-by: Danil Berestov <goosedb at yandex.ru> ------------------------- Metric Decrease: T25046_perf_size_gzip size_hello_artifact size_hello_artifact_gzip size_hello_unicode size_hello_unicode_gzip ------------------------- - - - - - e3496ef6 by Cheng Shao at 2024-10-29T23:17:37-04:00 compiler: remove unused hscDecls/hscDeclsWithLocation This patch removes unused `hscDecls`/`hscDeclsWithLocation` functions from the compiler, to reduce maintenance burden when doing refactorings related to ghci. - - - - - b1eed26f by Cheng Shao at 2024-10-29T23:18:13-04:00 testsuite: add T25414 test case marked as broken This commit adds T25414 test case to demonstrate #25414. It is marked as broken and will be fixed by the next commit. - - - - - e70009bc by Cheng Shao at 2024-10-29T23:18:13-04:00 driver: fix foreign stub handling logic in hscParsedDecls This patch fixes foreign stub handling logic in `hscParsedDecls`. Previously foreign stubs were simply ignored here, so any feature that involve foreign stubs would not work in ghci (e.g. CApiFFI). The patch reuses `generateByteCode` logic and eliminates a large chunk of duplicate logic that implements Core to bytecode generation pipeline here. Fixes #25414. - - - - - 1d7cd7fe by Andreas Klebinger at 2024-10-30T19:14:28-04:00 Add since tag for -fwrite-if-compression in user guide. Partial fix for #25395 - - - - - b349fd1b by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: Remove some unused functions - - - - - f859d61c by Alan Zimmerman at 2024-10-30T19:15:04-04:00 EPA: use explicit vertical bar token for ExplicitSum / SumPat - - - - - 721ac00d by Ben Gamari at 2024-10-31T08:37:38-04:00 rts/Disassembler: Fix encoding of BRK_FUN instruction The offset of the CC field was not updated after the encoding change in b85b11994e0130ff2401dd4bbdf52330e0bcf776. Fix this. Fixes #25374. - - - - - 0bc94360 by Alan Zimmerman at 2024-10-31T08:38:15-04:00 EPA: Bring in last EpToken usages For import declarations, NameAnnCommas and NPlusKPat. And remove anchor, it is the same as epaLocationRealSrcSpan. - - - - - 0b11cdc0 by sheaf at 2024-10-31T08:38:55-04:00 Assert that ctEvCoercion is called on an equality Calling 'ctEvCoercion' on non-equality constraints is always incorrect. We add an assertion to this function to detect such cases; for example a type-checking plugin might erroneously do this. - - - - - ea458779 by doyougnu at 2024-11-01T18:11:33-04:00 ghc-internal: strict, unboxed src loc ranges - closes: #20449 - See CLC proposal: #55 - - - - - 778ac793 by Kazuki Okamoto at 2024-11-01T18:12:13-04:00 No haddock markup in doctest line - - - - - cf0deeaf by Andreas Klebinger at 2024-11-02T17:54:52-04:00 Reword -fexpose-overloaded-unfoldings docs. This should make them slightly clearer. Fixes #24844 Co-authored-by: Sylvain Henry <sylvain at haskus.fr> - - - - - 1c21e7d4 by Andreas Klebinger at 2024-11-02T17:55:29-04:00 Compile T25062 simd tests even if we can't run them. Helps avoid them being utterly broken. Fixes #25341 - - - - - 573cad4b by Cheng Shao at 2024-11-02T17:56:04-04:00 Remove unused USE_REPORT_PRELUDE code paths from the tree This patch removes unused `USE_REPORT_PRELUDE` code paths from the tree. They have been present since the first git revision 4fb94ae5e5d632748fa2e6c35e259eccc5a1a3f4, and might have been useful for debugging purposes many years ago, but these code paths are never actually built. Removing these ease maintenance of relevant modules in the future, and also allows us to get rid of `CPP` extension in those modules as a nice byproduct. - - - - - 97f600c6 by Hassan Al-Awwadi at 2024-11-04T15:52:12+00:00 Refactored BooleanFormula to be in line with TTG (#21592) There are two parts to this commit. * We moved the definition of BooleanFormula over to L.H.S.BooleanFormula * We parameterized the BooleanFormula over the pass The GHC specific details of BooleanFormula remain in Ghc.Data.BooleanFormula. Because its parameterized over the pass its no longer a functor or traversable, but we defined bfMap and bfTraverse for the cases where we needed fmap and traverse originally. Most other changes are just churn. ------------------------- Metric Decrease: MultiLayerModulesTH_OneShot ------------------------- - - - - - d4fd3580 by Andreas Klebinger at 2024-11-05T07:36:16-05:00 ghc-heap: Fix incomplete selector warnings. Use utility functions instead of selectors to read partial attributes. Part of fixing #25380. - - - - - fdd9f62a by Peter Trommler at 2024-11-05T07:36:51-05:00 PPC NCG: Implement fmin and fmax - - - - - 8e217256 by Mike Pilgrem at 2024-11-07T04:34:20-05:00 Re CLC #293 - Don't specify Data.List.NonEmpty in terms of partial See https://github.com/haskell/core-libraries-committee/issues/293 `List.init` had already been driven out of `tails1` by 21fc180bec93d964a7f4ffdf2429ef6f74b49ab6 but this specification also avoided partial `fromList`, so I preferred it. The `changelog.md` for `base` is updated, with an entry added under `base-4.22.0.0`. - - - - - 346e4cd1 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: copy zip files into the correct directory Fixes #25446 - - - - - bbdbe225 by Zubin Duggal at 2024-11-07T04:34:57-05:00 release: Sign .gz bindists too Fixes #25447 - - - - - 0c722e14 by Hécate Kleidukos at 2024-11-07T04:35:37-05:00 hadrian: Enforce the usage of GHC >=9.8.1 for ghci-multi GHC 9.6 no good when it comes to multi-repl stuff, despite being well within the range of n-2 releases for bootstrapping, when the script was adapted to load haddock, in !12851 - - - - - d8f8a1c3 by Sylvain Henry at 2024-11-07T19:27:46-05:00 Handle the special ghc-prim:GHC.Prim module in the compiler Before this patch, some custom hacks were necessary in ghc-prim's Setup.hs to register the GHC.Prim (virtual) module and in Hadrian to generate haddocks properly. In this patch we special-case this module in the compiler itself instead (which it already is, see ghcPrimIface in GHC.Iface.Load). From Cabal/Hadrian's perspective GHC.Prim is now just a normal autogenerated module. This simplification is worthwhile on its own. It was found while looking into the work needed for #24453 which aims to merge ghc-prim, ghc-bignum, and ghc-internal. It's also one step closer to remove ghc-prim's custom setup. - - - - - a55adc8e by Cheng Shao at 2024-11-07T19:28:22-05:00 Clean up obsolete CPP guarded code paths from the tree This patch cleans up obsolete CPP guarded code paths from the tree. The minimum supported boot GHC version is 9.6, and all the pre-9.6 era code paths can be removed. - - - - - 9ede97f3 by Cheng Shao at 2024-11-07T19:28:58-05:00 Remove obsolete executable wrappers from the tree The executable wrappers are handled by hadrian and bindist Makefile. The various .wrapper scripts in the tree are unused since removal of Make build system, so this patch removes them all. - - - - - 7d42b2df by tristian at 2024-11-07T19:29:40-05:00 TcRnDuplicateDecls now suggests to use the DuplicateRecordFields extension. Fixes: !24627 - - - - - e56ed179 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: normalise some versions in callstacks (cherry picked from commit f230e29f30d0c1c566d4dd251807fcab76a2710e) - - - - - a28fc903 by Zubin Duggal at 2024-11-11T15:16:35+05:30 testsuite: use -fhide-source-paths to normalise some backpack tests (cherry picked from commit b19de476bc5ce5c7792e8af1354b94a4286a1a13) - - - - - ed16d303 by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite/haddock: strip version identifiers and unit hashes from html tests (cherry picked from commit fbf0889eadc410d43dd5c1657e320634b6738fa5) - - - - - e45e5836 by Zubin Duggal at 2024-11-11T15:16:36+05:30 haddock: oneshot tests can drop files if they share modtimes. Stop this by including the filename in the key. Ideally we would use `ghc -M` output to do a proper toposort Partially addresses #25372 (cherry picked from commit e78c7ef96e395f1ef41f04790aebecd0409b92b9) - - - - - 9104e6eb by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: fix normalisation of T9930fail so that it doesn't get tripped up by ghc executable (ARGV[0]) differences (cherry picked from commit a79a587e025d42d34bb30e115fc5c7cab6c1e030) - - - - - 2c31264a by Zubin Duggal at 2024-11-11T15:16:36+05:30 testsuite: normalise windows file seperators (cherry picked from commit f858875e03b9609656b542aaaaff85ad0a83878a) - - - - - 2807f91b by Zubin Duggal at 2024-11-11T15:21:30+05:30 testsuite: Also match <VERSION> placeholders when normalising callsites - - - - - c02add17 by Ben Gamari at 2024-11-12T01:22:11-05:00 configure: Check version number validity Here we verify the previously informal invariant that stable release version numbers must have three components, preventing costly failed releases. Specifically, the check fails in the following scenarios: * `version=9.13` while `RELEASE=YES` since this would imply a release made from an unstable branch * `version=9.13.0` since unstable versions should only have two components * `version=9.12` since this has the wrong number of version components for a stable branch Fixes #25390. - - - - - 747fd322 by Teo Camarasu at 2024-11-12T01:22:49-05:00 docs: link to #14474 in the template-haskell docs - - - - - 6d96bb62 by Zubin Duggal at 2024-11-12T01:23:25-05:00 testsuite: normalise execvp vs exec differences in process tests Fixes #25431 - - - - - 502e6711 by Torsten Schmits at 2024-11-12T01:24:01-05:00 fix test lint that accumulated while the checks were broken I didn't fix the issues flagged by the #ifdef linter because it were so many that it seemed like the rule has become obsolete. - - - - - 223a4cb5 by Torsten Schmits at 2024-11-12T01:24:02-05:00 test driver: fix file collection for regex linters When a testsuite linter is executed with the `tracked` strategy, the driver runs `git ls-tree` to collect eligible files. This appears to have ceased producing any paths – `ls-tree` restricts its results to the current working directory, which is `testsuite/tests/linters` in this case. As a quick fix, this patch changes the working directory to match expectations. - - - - - 9ad9ac63 by Alan Zimmerman at 2024-11-12T01:24:39-05:00 EPA: Capture location of '_' for wild card type binder And keep track of promotion status in HsExplicitTupleTy, so the round-trip ppr test works for it. Updates Haddock output too, using the PromotionFlag in HsExplicitTupleTy. Closes #25454 - - - - - c37b96fa by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix setImmediate() implementation for Cloudflare Workers This patch fixes setImmediate() implementation for Cloudflare Workers in the wasm backend's js prelude script. Cloudflare Workers doesn't support the MessageChannel API, and we use a setTimeout() based fallback implementation in this case. - - - - - bea8ea4c by Cheng Shao at 2024-11-12T01:25:15-05:00 wasm: fix FinalizationRegistry logic for Cloudflare Workers This patch fixes FinalizationRegistry related logic for Cloudflare Workers in wasm backend js post linker. Cloudflare Workers doesn't support FinalizationRegistry, in this case we use a dummy implementation that doesn't do anything. - - - - - 00d551bf by Cheng Shao at 2024-11-13T08:48:21-05:00 Remove obsolete cross-port script This patch removes the obsolete cross-port script in the tree. The script was based on the legacy Make build system which has been pruned from the tree long ago. For hadrian, proper support for two-stage bootstrapping onto a new unsupported platform is a work in progress in !11444. - - - - - 75a2eae4 by Cheng Shao at 2024-11-13T08:48:58-05:00 hadrian: fix bindist makefile for wasm32-wasi target This patch fixes one incoherent place between bindist makefile and hadrian logic: I forgot to include wasi/wasm32 in OsSupportsGHCi/ArchSupportsGHCi as well. And this results in incorrect settings file generated after installing the bindist, and "Use interpreter"/"Have interpreter" fields incorrectly have "NO" values where they should be "YES" like --info output of in-tree version. - - - - - 0614abef by Alan Zimmerman at 2024-11-13T08:49:34-05:00 EPA: Correctly capture leading semis in decl list Closes #25467 - - - - - 00d58ae1 by Sebastian Graf at 2024-11-13T15:21:23-05:00 DmdAnal: Make `prompt#` lazy (#25439) This applies the same treatment to `prompt#` as for `catch#`. See `Note [Strictness for mask/unmask/catch/prompt]`. Fixes #25439. - - - - - 93233a66 by Ben Gamari at 2024-11-13T15:21:59-05:00 boot: Do not attempt to update config.sub While Apple ARM hardware was new we found that the autoconf scripts included in some boot packages were too old. As a mitigation for this, we introduced logic in the `boot` script to update the `config.sub` with that from the GHC tree. However, this causes submodules which have `config.sub` committted to appear to be dirty. This is a considerable headache. Now since `config.sub` with full platform support is more common we can remove `boot`'s `config.sub` logic. Fixes #19574. - - - - - fa66fa64 by Ryan Scott at 2024-11-14T19:05:00-05:00 Add regression test for #16234 Issue #16234 was likely fixed by !9765. This adds a regression test to ensure that it remains fixed. Fixes #16234. - - - - - bfe64df8 by Matthew Pickering at 2024-11-14T19:05:36-05:00 ghc-internal: Update to Unicode 16 This patch updates the automatically generated code for querying unicode properties to unicode 16. Fixes #25402 - - - - - 1fd83f86 by Ben Gamari at 2024-11-14T19:06:13-05:00 configure: Accept happy-2.1.2 happy-2.1 was released in late Oct 2024. I have confirmed that master bootstraps with it. Here we teach configure to accept this tool. Fixes #25438. - - - - - aa58fc5b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Tighten up invariants of PACK - - - - - 8aa4c10a by Ben Gamari at 2024-11-14T19:06:49-05:00 testsuite: Fix badly escaped literals Use raw string literals to ensure that `\s` is correctly interpreted as a character class. - - - - - 0e084029 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts: Improve documentation of SLIDE bytecode instruction - - - - - 9bf3663b by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Assert that TEST*_P discriminators are valid - - - - - 1f668511 by Ben Gamari at 2024-11-14T19:06:49-05:00 rts/Interpreter: Improve documentation of TEST*_P instructions - - - - - 59e0a770 by Cheng Shao at 2024-11-14T19:07:25-05:00 misc: improve clangd compile_flags.txt flags This patch improves the compile_flags.txt config used to power clangd for the rts C codebase. The flags in the file are sampled & deduped from a real stage1 build with clang-19 and vastly improves the IDE accuracy when hacking the rts. For maximum code coverage under the default settings, compile_flags.txt defaults to threaded+profiled+dynamic+debug way. This does not mean profdyn needs to be actually built in _build/stage1 for IDE to work. To activate IDE for other RTS ways, simply remove one of the -D flags at the end of compile_flags.txt and restart clangd. - - - - - c2c562e0 by Ben Gamari at 2024-11-14T19:08:01-05:00 testsuite: Don't consider untracked files in dirtiness check Considering trees containing untracked files as dirty is a bridge too far. The chance of an untracked file significantly affecting measured performanced metrics is quite small whereas not collecting measurements is quite inconvenient for some workflows. We now ignore untracked files in the dirtiness check. Fixes #25471. - - - - - ed2ed6c5 by Cheng Shao at 2024-11-14T19:08:37-05:00 testsuite: add regression test T25473 This commit adds regression test T25473 marked as broken due to #25473. It will be fixed in the subsequent commit. - - - - - bd0a8b7e by Cheng Shao at 2024-11-14T19:08:37-05:00 wasm: fix foreign import javascript "wrapper" in TH/ghci This patch fixes foreign import javascript "wrapper" in wasm backend's TH/ghci by fixing the handling of dyld/finalization_registry magic variables. Fixes T25473 and closes #25473. - - - - - f1b0bc32 by Ben Gamari at 2024-11-14T19:09:13-05:00 rts/linker: Make FreeBSD declarations proper prototypes The iconv declarations for FreeBSD were previously not prototypes, leading to warnings. - - - - - 086cbbc1 by Ben Gamari at 2024-11-14T19:09:13-05:00 base: Drop redundant import in FreeBSD ExecutablePath implementation - - - - - 79ecd199 by Ben Gamari at 2024-11-14T19:09:13-05:00 compiler: Fix partial selector warnings in GHC.Runtime.Heap.Inspect - - - - - 1acb73bf by Andrew Lelechenko at 2024-11-15T06:10:47-05:00 gitlab: mention CLC in MR template - - - - - 8f2e0832 by Ben Gamari at 2024-11-15T06:11:24-05:00 rts: Allow use of GNU-stack notes on FreeBSD Previously we gated use of GNU-style non-executable stack notes to only apply on Linux. However, these are also supported by FreeBSD, which also uses ELF. Fix this. Fixes #25475. - - - - - 2c427cb0 by Ben Gamari at 2024-11-16T05:27:40-05:00 rts: Fix EINTR check in timerfd ticker When `poll` failed we previously checked that `errno == -EINTR` to silence the failure warning. However, this is wrong as `errno` values are generally not negated error codes (in contrast to many system call results, which is likely what the original author had in mind). Fixes #25477. - - - - - a0fa4941 by Ben Gamari at 2024-11-16T05:28:16-05:00 rts: Increase gen_workspace alignment to 128 bytes on AArch64 Increase to match the 128-byte cache-line size of Apple's ARMv8 implementation. Closes #25459. - - - - - 142d8afa by Ben Gamari at 2024-11-16T16:20:47-05:00 rts/RtsFlags: Refactor size parsing This makes a number of improvements mentioned in #20201: * fail if the argument cannot be parsed as a number (`-Mturtles`) * fail if an unrecognized unit is given (e.g. `-M1x`) - - - - - b7a146e5 by Ben Gamari at 2024-11-16T16:20:47-05:00 testsuite: Add tests for RTS flag parsing error handling See #20201. - - - - - ddb7afa6 by Ben Gamari at 2024-11-16T16:21:23-05:00 users guide: Mention language extensions in equality constraints discussion As suggested in #24127, mention the language extensions necessary for usage of equality constriants in their documentation. Closes #24127. - - - - - 36133dac by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/9.14.1-notes: Fix list syntax - - - - - 888de658 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide/debug-info: Fix duplicate flag descriptions - - - - - f120e427 by Ben Gamari at 2024-11-16T16:21:23-05:00 users-guide: Fix reference to 9.14.1 release notes - - - - - 8e975032 by Ben Gamari at 2024-11-16T16:21:59-05:00 Introduce GHC.Tc.Plugin.lookupTHName This makes it significantly more convenient (and less GHC-version-dependent) to resolve a template-haskell name into a GHC Name. As proposed in #24741. - - - - - a0e168ec by ARATA Mizuki at 2024-11-16T16:22:40-05:00 x86 NCG SIMD: Lower packFloatX4#, insertFloatX4# and broadcastFloatX4# to SSE1 instructions Fixes #25441 Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 3936bf1b by sheaf at 2024-11-16T16:23:22-05:00 X86 NCG: allow VXOR at scalar floating-point types The NCG can emit VXOR instructions at scalar floating-point types, but the pretty-printer would panic instead of emitting the appropriate VXORPS/VXORPD instructions. This patch rectifies that oversight. Fixes #25455 - - - - - d9dff93a by Ben Gamari at 2024-11-16T16:23:58-05:00 rts: Fix platform-dependent pointer casts Previously we had unnecessary (and incorrect) platform-dependent casts to turn `OSThreadIds`s into a integer. We now just uniformly cast first to a `uintptr_t` (which is always safe, regardless of whether `OSThreadId` is a pointer), and then cast to the desired integral type. This fixes a warning on musl platforms. - - - - - 6d95cdb8 by Ben Gamari at 2024-11-16T16:24:34-05:00 testsuite: Mark encoding004 as broken on FreeBSD Due to #22003, CP936 fails to roundtrip: ```diff == CP936 +Failed to roundtrip given mutant byte at index 891 (251 /= 123 at index 891) +Failed to roundtrip given mutant byte at index 1605 (197 /= 69 at index 1605) +Failed to roundtrip given mutant byte at index 2411 (235 /= 107 at index 2411) +Failed to roundtrip given mutant byte at index 6480 (208 /= 80 at index 6480) +Failed to roundtrip given mutant byte at index 6482 (210 /= 82 at index 6482) +Failed to roundtrip given mutant byte at index 6484 (212 /= 84 at index 6484) +Failed to roundtrip given mutant byte at index 6496 (224 /= 96 at index 6496) +Failed to roundtrip given mutant byte at index 7243 (203 /= 75 at index 7243) +Failed to roundtrip given mutant byte at index 7277 (237 /= 109 at index 7277) +Failed to roundtrip given mutant byte at index 8027 (219 /= 91 at index 8027) +Failed to roundtrip given mutant byte at index 8801 (225 /= 97 at index 8801) ``` - - - - - 26e86984 by Ben Gamari at 2024-11-18T04:05:31-05:00 hadrian: Allow haddock options to be passed via key-value settings - - - - - 6e68b117 by Matthew Pickering at 2024-11-18T04:06:07-05:00 Exception rethrowing Basic changes: * Change `catch` function to propagate exceptions using the WhileHandling mechanism. * Introduce `catchNoPropagate`, which does the same as before, but passes an exception which can be rethrown. * Introduce `rethrowIO` combinator, which rethrows an exception with a context and doesn't add a new backtrace. * Introduce `tryWithContext` for a variant of `try` which can rethrow the exception with it's original context. * onException is modified to rethrow the original error rather than creating a new callstack. * Functions which rethrow in GHC.Internal.IO.Handle.FD, GHC.Internal.IO.Handle.Internals, GHC.Internal.IO.Handle.Text, and GHC.Internal.System.IO.Error are modified to not add a new callstack. Implements CLC proposal#202 <https://github.com/haskell/core-libraries-committee/issues/202> - - - - - a4e0d235 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 exceptions: Improve the message layout as per #285 This commit fixes the layout of the additional information included when displaying an exception, namely the type of the exception. It also fixes the default handler's heading message to work well together with the improved display message of SomeException. CLC proposal#285 - - - - - 284ffab3 by Rodrigo Mesquita at 2024-11-18T04:06:07-05:00 Display type and callstack of exception on handler This commit changes the Exception instance of SomeException to *simply* display the underlying exception in `displayException`. The augmented exception message that included the type and backtrace of the exception are now only printed on a call to `displayExceptionWithInfo`. At a surface level, existing programs should behave the same since the `uncaughtExceptionHandler`, which is responsible for printing out uncaught exceptions to the user, will use `displayExceptionWithInfo` by default. However, unlike the instance's `displayException` method, the `uncaughtExceptionHandler` can be overriden with `setUncaughtExceptionHandler`. This makes the extra information opt-in without fixing it the instance, which can be valuable if your program wants to display uncaught exceptions to users in a user-facing way (ie without backtraces). This is what was originally agreed for CLC#231 or CLC#261 with regard to the type of the exception information. The call stack also becoming part of the default handler rather than the Exception instance is an ammendment to CLC#164. Discussion of the ammendment is part of CLC#285. - - - - - 36cddd2c by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Remove redundant CallStack from exceptions Before the exception backtraces proposal was implemented, ErrorCall accumulated its own callstack via HasCallStack constraints, but ExceptionContext is now accumulated automatically. The original ErrorCall mechanism is now redundant and we get a duplicate CallStack Updates Cabal submodule to fix their usage of ErrorCallWithLocation to ErrorCall CLC proposal#285 Fixes #25283 - - - - - 7a74330b by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Freeze call stack in error throwing functions CLC proposal#285 - - - - - 3abf31a4 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 De-duplicate displayContext and displayExceptionContext The former was unused except for one module where it was essentially re-defining displayExceptionContext. Moreover, this commit extends the fix from bfe600f5bb3ecd2c8fa71c536c63d3c46984e3f8 to displayExceptionContext too, which was missing. - - - - - c0d783f8 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Re-export NoBacktrace from Control.Exception This was originally proposed and accepted in section "2.7 Capturing Backtraces on Exceptions" of the CLC proposal for exception backtraces. However, the implementation missed this re-export, which this commit now fixes. - - - - - 802b5c3e by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Fix exception backtraces from GHCi When running the program with `runhaskell`/`runghc` the backtrace should match the backtrace one would get by compiling and running the program. But currently, an exception thrown in a program interpreted with `runhaskell` will: * Not include the original exception backtrace at all * Include the backtrace from the internal GHCi/ghc rethrowing of the original exception This commit fixes this divergence by not annotating the ghc(i) backtrace (with NoBacktrace) and making sure that the backtrace of the original exception is serialized across the boundary and rethrown with the appropriate context. Fixes #25116 The !13301 MR (not this commit in particular) improves performance of MultiLayerModules. Unfortunately, T3294 regresses on aarch64-linux-deb12 by 1% allocations. Since this patch must be merged for 9.12 ASAP, we will not be able to investigate the slight regression on this platform in time. ------------------------- Metric Decrease: MultiLayerModulesRecomp MultiLayerModulesTH_OneShot Metric Increase: T3294 ------------------------- - - - - - 3e89eb65 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 base: Add to changelog.md CLC #285 - - - - - d9326a48 by Rodrigo Mesquita at 2024-11-18T04:06:08-05:00 Bump array and stm submodules for testsuite The testsuites of array and stm had to be updated according to !13301. Updates submodule array and stm. - - - - - 325fcb5d by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Clean up code style of Nativei386 adjustor - - - - - 39bb6e58 by Ben Gamari at 2024-11-18T04:06:45-05:00 rts/adjustor: Fix stack overrun error in Nativei386 adjustor We were reserving the wrong kind of adjustor context (the generic `AdjustorContext` used by other adjustor implementations, rather than the i386-specific `CCallContext`) to return the adjustor context while freeing, resulting in #25485. Fixes #25485. - - - - - 831aab22 by sheaf at 2024-11-18T21:22:36-05:00 Include diagnostic reason in -fdiagnostics-as-json This commit ensures that the -fdiagnostics-as-json output includes the diagnostic reason. This allows the full error message produced by GHC to be re-constructed from the JSON output. Fixes #25403 - - - - - 3e5bfdd3 by Ben Gamari at 2024-11-18T21:23:12-05:00 rts: Introduce printIPE This is a convenience utility for use in GDB. - - - - - 44d909a3 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Don't store boot locations in finder cache Partially reverts commit fff55592a7b Amends add(Home)ModuleToFinder so that locations for boot files are not stored in the finder cache. Removes InstalledModule field from InstalledFound constructor since it's the same as the key that was searched for. - - - - - 64c95292 by Sjoerd Visscher at 2024-11-19T14:38:24-05:00 Concentrate boot extension logic in Finder With new mkHomeModLocation that takes an extra HscSource to add boot extensions if required. - - - - - 11bad98d by ARATA Mizuki at 2024-11-19T14:39:08-05:00 Better documentation for floating-point min/max and SIMD primitives See #25350 for floating-point min/max Co-authored-by: sheaf <sam.derbyshire at gmail.com> - - - - - 791a47b2 by Arnaud Spiwack at 2024-11-20T14:00:05+00:00 Add test for #25185 - - - - - 374e18e5 by Arnaud Spiwack at 2024-11-20T14:09:30+00:00 Quick look: emit the multiplicity of app heads in tcValArgs Otherwise it's not scaled properly by the context, allowing unsound expressions. Fixes #25185. - - - - - 1fc02399 by sheaf at 2024-11-20T18:11:03-05:00 x86 NCG: fix regUsageOfInstr for VMOVU & friends This commit fixes the implementation of 'regUsageOfInstr' for vector operations that take an 'Operand' as the destination, by ensuring that when the destination is an address then the address should be *READ*, and not *WRITTEN*. Getting this wrong is a disaster, as it means the register allocator has incorrect information, which can lead to it discard stores to registers, segfaults ensuing. Fixes #25486 - - - - - 7bd407a6 by Brandon Chinn at 2024-11-21T14:08:15-05:00 Fix CRLF in multiline strings (#25375) - - - - - 7575709b by Rodrigo Mesquita at 2024-11-21T14:08:52-05:00 Improve reachability queries on ModuleGraph Introduces `ReachabilityIndex`, an index constructed from a `GHC.Data.Graph.Directed` `Graph` that supports fast reachability queries (in $O(1)$). This abstract data structure is exposed from `GHC.Data.Graph.Directed.Reachability`. This index is constructed from the module graph nodes and cached in `ModuleGraph`, enabling efficient reachability queries on the module graph. Previously, we'd construct a Map of Set of ModuleGraph nodes which used a lot of memory (`O(n^2)` in the number of nodes) and cache that in the `ModuleGraph`. By using the reachability index we get rid of this space leak in the module graph -- even though the index is still quadratic in the number of modules, it is much, much more space efficient due to its representation using an IntMap of IntSet as opposed to the transitive closure we previously cached. In a memory profile of MultiLayerModules with 100x100 modules, memory usage improved from 6GB residency to 2.8GB, out of which roughly 1.8GB are caused by a second space leak related to ModuleGraph. On the same program, it brings compile time from 7.5s to 5.5s. Note how we simplify `checkHomeUnitsClosed` in terms of `isReachableMany` and by avoiding constructing a second graph with the full transitive closure -- it suffices to answer the reachability query on the full graph without collapsing the transitive closure completely into nodes. Unfortunately, solving this leak means we have to do a little bit more work since we can no longer cache the result of turning vertex indices into nodes. This results in a slight regression in MultiLayerModulesTH_Make, but results in large performance and memory wins when compiling large amounts of modules. ------------------------- Metric Decrease: mhu-perf Metric Increase: MultiLayerModulesTH_Make ------------------------- - - - - - bcbcdaaf by Cheng Shao at 2024-11-21T14:09:28-05:00 driver: fix hpc undefined symbol issue in TH with -fprefer-byte-code This commit fixes an undefined symbol error in RTS linker when attempting to compile home modules with -fhpc and -fbyte-code-and-object-code/-fprefer-byte-code, see #25510 for detailed description and analysis of the bug. Also adds T25510/T25510c regression tests to test make mode/oneshot mode of the bug. - - - - - 970ada5a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Bump ci-images For introduction of Alpine/i386 image. Thanks to Julian for the base image. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 8115abc2 by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Add release job for i386/Alpine As requested by Mikolaj and started by Julian. Co-Authored-By: Julian Ospald <hasufell at hasufell.de> - - - - - 639f0149 by Ben Gamari at 2024-11-22T23:32:06-05:00 rts/linker/Elf: Resolve _GLOBAL_OFFSET_TABLE_ - - - - - 490d4d0a by Ben Gamari at 2024-11-22T23:32:06-05:00 gitlab-ci: Mark i386 Alpine test breakages Marks the following tests as broken on i386/Alpine: * T22033 due to #25497 * simd009, T25062_V16, T25169, T22187_run due to #25498 - - - - - 536cdf09 by Cheng Shao at 2024-11-22T23:32:42-05:00 compiler: remove unused GHC.Linker.Loader.loadExpr This patch removes the unused `GHC.Linker.Loader.loadExpr` function. It was moved from `GHC.Runtime.Linker.linkExpr` in `ghc-9.0` to `GHC.Linker.Loader.loadExpr` in `ghc-9.2`, and remain completely unused and untested ever since. There's also no third party user of this function to my best knowledge, so let's remove this. Anyone who wants to write their own GHC API function to load bytecode can consult the source code in older release branches. - - - - - 6ee35024 by Drew Fenwick at 2024-11-22T23:33:26-05:00 Fix a non-compiling example in the type abstractions docs This patch adds a missing Show constraint to a code example in the User Guide's type abstractions docs to fix issue #25422. - - - - - d1172e20 by Rodrigo Mesquita at 2024-11-22T23:34:02-05:00 Re-introduce ErrorCallWithLocation with a deprecation pragma With the removal of the duplicate backtrace, part of CLC proposal #285, the constructor `ErrorCallWithLocation` was removed from base. This commit re-introduces it with a deprecation. - - - - - 1187a60a by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Skip tests requiring Hadrian deps in out-of-tree testsuite runs Some testsuite tests require specific tools (e.g. `check-ppr` and `check-exact`) beyond those shipped in the binary distribution. Skip these tests. Fixes #13897. - - - - - c37d7a2e by Ben Gamari at 2024-11-22T23:34:39-05:00 testsuite: Declare exactprint tests' dependency on check-exact - - - - - 454ce957 by Ben Gamari at 2024-11-22T23:35:15-05:00 ghc-internal: Fix a few cases of missing Haddock markup - - - - - a249649b by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/GHCiPrimCall : Add missing Makefile includes - - - - - a021a493 by Ben Gamari at 2024-11-22T23:35:51-05:00 testsuite/IpeStats: Use Make rather than shell interpolation - - - - - 6e1fbda7 by Ben Gamari at 2024-11-25T03:55:44-05:00 hadrian-ghci-multi: Pass -this-package-name in unit response files As noted in #25509, the `-this-package-name` must be passed for each package to ensure that GHC can response references to the packages' exposed modules via package-qualified imports. Fix this. Closes #25509. - - - - - a05e4a9b by Simon Hengel at 2024-11-25T03:56:33-05:00 Refactoring: Use `OnOff` more consistently for `Extension` - - - - - 7536181d by Matthew Pickering at 2024-11-25T14:00:07-05:00 driver: Always link against "base" package when one shot linking The default value for base-unit-id is stored in the settings file. At install time, this can be set by using the BASE_UNIT_ID environment variable. At runtime, the value can be set by `-base-unit-id` flag. For whether all this is a good idea, see #25382 Fixes #25382 - - - - - 7f90f319 by Andreas Klebinger at 2024-11-25T14:00:44-05:00 Compacting GC: Handle black holes in large objects. As #14497 showed black holes can appear inside large objects when we capture a computation and later blackhole it like we do for AP_STACK closures. Fixes #24791 - - - - - 291388e1 by Cheng Shao at 2024-11-25T14:01:19-05:00 ci: minor nix-in-docker improvements This patch makes some minor improvements re nix-in-docker logic in the ci configuration: - Update `nixos/nix` to the latest version - Apply $CPUS to `cores`/`max-jobs` to avoid oversubscribing while allowing a reasonable degree of parallelism - Remove redundant `--extra-experimental-features nix-command` in later `nix shell` invocations, it's already configured in `/etc/nix/nix.conf` - - - - - e684c406 by Cheng Shao at 2024-11-25T14:01:57-05:00 ci: avoid depending on stack job for test-bootstrap jobs This patch makes test-bootstrap related ci jobs only depend on hadrian-ghc-in-ghci job to finish, consistent with other jobs in the full-build stage generated by gen_ci.hs. This allows the jobs to be spawned earlier and improve overall pipeline parallelism. - - - - - caaf5388 by Simon Hengel at 2024-11-25T14:02:41-05:00 Refactoring: Remove `pSupportedExts` from `ParserOpts` This is never used for lexing / parsing. It is only used by `GHC.Parser.Header.getOptions`. - - - - - 41f8365c by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Add test for #25515 - - - - - 9279619f by Arnaud Spiwack at 2024-11-25T14:03:23-05:00 Desugar record notation with correct multiplicities Simply uses the multiplicity as stored in the field. As I'm writing this commit, the only possible multiplicity is 1, but !13525 is changing this. It's actually easier to take !13525 into account. Fixes #25515. - - - - - fcc3ae6e by Andreas Klebinger at 2024-11-26T08:24:58-05:00 Clarify INLINE unfolding optimization docs. Fixes #24660 - - - - - 88c4fe1d by Cheng Shao at 2024-11-26T08:25:34-05:00 rts: remove -Wl,-U,___darwin_check_fd_set_overflow hack This patch bumps macOS minimum SDK version to 11.0 for x86_64-darwin to align it with aarch64-darwin. This allows us to get rid of the horrible -Wl,-U,___darwin_check_fd_set_overflow hack, which is causing linker warnings and testsuite failures on macOS 15. Fixes #25504. - - - - - 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 9c53489d by Andrei Borzenkov at 2024-12-12T15:06:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 13fe48d4 by Matthew Pickering at 2024-12-12T15:07:19-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - 62a2b25f by Sylvain Henry at 2024-12-14T04:31:09-05:00 TNTC: set CmmProc entry_label properly (#25565) Before this patch we were renaming the entry label of a CmmProc late in the CmmToAsm pass. It led to inconsistencies and to some labels being used in info tables but not being emitted (#25565). Now we set the CmmProc entry label earlier in the StgToCmm monad and we don't renamed it afterwards. - - - - - b339e7c3 by Simon Hengel at 2024-12-14T04:31:47-05:00 Make filter functionality for system tools line-based This is more efficient as: - All existing filter functions were line-based anyway. They broke up the input into lines and then joined it back together. - We already break up the output from system tools into lines when processing it. Splitting up the output of system tools once and then filtering and processing it reduces both code and runtime complexity. - - - - - 39669077 by Simon Hengel at 2024-12-14T04:31:47-05:00 Refactoring: Don't use a `Chan` when parsing SysTools output - - - - - 64756530 by Simon Peyton Jones at 2024-12-14T22:28:04-05:00 Tidy up the handling of `assert` Fixes #25493 - - - - - 8658fbc1 by Rodrigo Mesquita at 2024-12-14T22:28:41-05:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 80f0e02d by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - 175a1355 by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - 8ef2dad6 by Simon Peyton Jones at 2024-12-17T02:48:09-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - e86b1b20 by Ben Gamari at 2024-12-17T13:51:39-05:00 testsuite: Use math.inf instead of division-by-zero This both more directly captures the intent and also fixes #25580. - - - - - 430d965a by Ben Gamari at 2024-12-17T13:52:15-05:00 rts: Fix incorrect format specifiers in era profiling Fixes #25581. - - - - - 267098ad by Andreas Klebinger at 2024-12-18T23:43:13-05:00 Document `-prof` and non `-prof` code being incompatible. Fixes #25518. - - - - - 04433916 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: output metadata fragment in CI (cherry picked from commit 52b58a660e735b20961d792d8fa9267f01247a50) - - - - - 7c78804e by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore (cherry picked from commit dc86785eb43afd1bd292287c064fb5ad94fe8c7f) - - - - - 1d72cfb2 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: still use centos for redhat <9 - - - - - 3f7ebc58 by Sylvain Henry at 2024-12-19T20:40:14-05:00 Merge ghc-bignum into ghc-internal (#24453) First step towards merging ghc-bignum and ghc-prim into ghc-internal. After this patch, ghc-bignum is deprecated and is just a shallow package reexporting modules from ghc-internal and base. Use those directly instead. Move `gmp` submodule into ghc-internal directory. - - - - - ee0150c2 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Improve performance of deriving Show Significantly improves performance of deriving Show instances by avoiding using the very polymorphic `.` operator in favour of inlining its definition. We were generating tons of applications of it, each which had 3 type arguments! Improves on #9557 ------------------------- Metric Decrease: InstanceMatching T12707 T3294 ------------------------ - - - - - 8b266671 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Don't eta expand cons when deriving Data This eta expansion was introduced with the initial commit for Linear types. I believe this isn't needed any longer. My guess is it is an artifact from the initial linear types implementation: data constructors are linear, but they shouldn't need to be eta expanded to be used as higher order functions. I suppose in the early days this wasn't true. For instance, this works now: data T x = T x f = \(x :: forall y. y -> T y) -> x True f T -- ok! T is linear, but can be passed where an unrestricted higher order function is expected. I recall there being some magic around to make this work for data constructors... Since this works, there's no need to eta_expand the data constructors in the derived Data instances. - - - - - 27099fa1 by Matthew Pickering at 2024-12-20T15:44:09+00:00 warnings: Find out if a qualified name is in the interactive scope directly There were two ad-hoc mechanisms used to determine which modules were in the interactive scope. 1. Look at everything in the GRE, to see what is imported qualified. 2. Look at the last loaded module in the HPT. (1) Is very inefficient, GlobalRdrEnvs can be very big. (2) is incorrect, there is no reason to assume the "last" thing added to the HPT has any relevance to module loading order. Happily, the same checks can be implemented directly by looking at the interactive imports from the interactive context. This mirrors what happens for normal imports. See #14225 and #15611 - - - - - 30 changed files: - .ghcid - .gitattributes - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/hello.hs - .gitlab/jobs.yaml - .gitlab/merge_request_templates/Default.md - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - .gitlab/rel_eng/recompress-all - .gitlab/rel_eng/upload.sh - .gitmodules - boot - compile_flags.txt - compiler/GHC.hs - compiler/GHC/Builtin/Names.hs - compiler/GHC/Builtin/Types.hs - compiler/GHC/Builtin/Types/Prim.hs - compiler/GHC/Builtin/primops.txt.pp - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/CmmToAsm/Format.hs - compiler/GHC/CmmToAsm/PPC/CodeGen.hs - compiler/GHC/CmmToAsm/PPC/Instr.hs - compiler/GHC/CmmToAsm/PPC/Ppr.hs - compiler/GHC/CmmToAsm/Ppr.hs - compiler/GHC/CmmToAsm/X86/CodeGen.hs - compiler/GHC/CmmToAsm/X86/Instr.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8604427182d02516f3f6c1518efb84dbae9bc4ed...27099fa1443a9ccb12b4e5ad04910785ed66ca53 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8604427182d02516f3f6c1518efb84dbae9bc4ed...27099fa1443a9ccb12b4e5ad04910785ed66ca53 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 15:48:36 2024 From: gitlab at gitlab.haskell.org (Matthew Pickering (@mpickering)) Date: Fri, 20 Dec 2024 10:48:36 -0500 Subject: [Git][ghc/ghc][wip/unbound-name-qualified] warnings: Find out if a qualified name is in the interactive scope directly Message-ID: <676591d4dc0bd_35004a2664707898b@gitlab.mail> Matthew Pickering pushed to branch wip/unbound-name-qualified at Glasgow Haskell Compiler / GHC Commits: c8746a9b by Matthew Pickering at 2024-12-20T15:47:51+00:00 warnings: Find out if a qualified name is in the interactive scope directly There were two ad-hoc mechanisms used to determine which modules were in the interactive scope. 1. Look at everything in the GRE, to see what is imported qualified. 2. Look at the last loaded module in the HPT. (1) Is very inefficient, GlobalRdrEnvs can be very big. (2) is incorrect, there is no reason to assume the "last" thing added to the HPT has any relevance to module loading order. Happily, the same checks can be implemented directly by looking at the interactive imports from the interactive context. This mirrors what happens for normal imports. Arguably, the error reporting code shouldn't be doing this kind of processing and it should be an option is set when rendering the error message. However, this just improves the situation and doesn't block progress on that front in future. See #14225 and #15611 - - - - - 1 changed file: - compiler/GHC/Rename/Unbound.hs Changes: ===================================== compiler/GHC/Rename/Unbound.hs ===================================== @@ -34,10 +34,11 @@ import GHC.Prelude import GHC.Driver.DynFlags import GHC.Driver.Ppr +import GHC.Driver.Env.Types import GHC.Tc.Errors.Types import GHC.Tc.Utils.Monad -import GHC.Builtin.Names ( mkUnboundName, isUnboundName, getUnique) +import GHC.Builtin.Names ( mkUnboundName, isUnboundName ) import GHC.Utils.Misc import GHC.Utils.Panic (panic) @@ -53,16 +54,16 @@ import GHC.Types.Hint import GHC.Types.SrcLoc as SrcLoc import GHC.Types.Name import GHC.Types.Name.Reader -import GHC.Types.Unique.DFM (udfmToList) import GHC.Unit.Module import GHC.Unit.Module.Imported -import GHC.Unit.Home.ModInfo +import GHC.Utils.Outputable +import GHC.Runtime.Context import GHC.Data.Bag -import GHC.Utils.Outputable (empty) +import Language.Haskell.Syntax.ImpExp -import Data.List (sortBy, partition, nub) +import Data.List (sortBy, partition) import Data.List.NonEmpty ( pattern (:|), NonEmpty ) import Data.Function ( on ) import qualified Data.Semigroup as S @@ -146,10 +147,10 @@ unboundNameOrTermInType if_term_in_type looking_for rdr_name hints ; global_env <- getGlobalRdrEnv ; impInfo <- getImports ; currmod <- getModule - ; hpt <- getHpt + ; ic <- hsc_IC <$> getTopEnv ; let (imp_errs, suggs) = unknownNameSuggestions_ looking_for - dflags hpt currmod global_env local_env impInfo + dflags ic currmod global_env local_env impInfo rdr_name ; addErr $ make_error imp_errs (hints ++ suggs) } @@ -179,17 +180,17 @@ notInScopeErr where_look rdr_name unknownNameSuggestions :: LocalRdrEnv -> WhatLooking -> RdrName -> RnM ([ImportError], [GhcHint]) unknownNameSuggestions lcl_env what_look tried_rdr_name = do { dflags <- getDynFlags - ; hpt <- getHpt ; rdr_env <- getGlobalRdrEnv ; imp_info <- getImports ; curr_mod <- getModule + ; interactive_context <- hsc_IC <$> getTopEnv ; return $ unknownNameSuggestions_ (LF what_look WL_Anywhere) - dflags hpt curr_mod rdr_env lcl_env imp_info tried_rdr_name } + dflags interactive_context curr_mod rdr_env lcl_env imp_info tried_rdr_name } -unknownNameSuggestions_ :: LookingFor -> DynFlags - -> HomePackageTable -> Module +unknownNameSuggestions_ :: LookingFor -> DynFlags -> InteractiveContext + -> Module -> GlobalRdrEnv -> LocalRdrEnv -> ImportAvails -> RdrName -> ([ImportError], [GhcHint]) unknownNameSuggestions_ looking_for dflags hpt curr_mod global_env local_env @@ -201,7 +202,7 @@ unknownNameSuggestions_ looking_for dflags hpt curr_mod global_env local_env , map (ImportSuggestion $ rdrNameOcc tried_rdr_name) imp_suggs , extensionSuggestions tried_rdr_name , fieldSelectorSuggestions global_env tried_rdr_name ] - (imp_errs, imp_suggs) = importSuggestions looking_for global_env hpt curr_mod imports tried_rdr_name + (imp_errs, imp_suggs) = importSuggestions looking_for hpt curr_mod imports tried_rdr_name if_ne :: (NonEmpty a -> b) -> [a] -> [b] if_ne _ [] = [] @@ -308,15 +309,13 @@ similarNameSuggestions looking_for@(LF what_look where_look) dflags global_env -- | Generate errors and helpful suggestions if a qualified name Mod.foo is not in scope. importSuggestions :: LookingFor - -> GlobalRdrEnv - -> HomePackageTable -> Module + -> InteractiveContext -> Module -> ImportAvails -> RdrName -> ([ImportError], [ImportSuggestion]) -importSuggestions looking_for global_env hpt currMod imports rdr_name +importSuggestions looking_for ic currMod imports rdr_name | WL_LocalOnly <- lf_where looking_for = ([], []) | WL_LocalTop <- lf_where looking_for = ([], []) | not (isQual rdr_name || isUnqual rdr_name) = ([], []) - | null interesting_imports - , Just name <- mod_name + | Just name <- mod_name , show_not_imported_line name = ([MissingModule name], []) | is_qualified @@ -344,6 +343,17 @@ importSuggestions looking_for global_env hpt currMod imports rdr_name , Just imp <- return $ pick (importedByUser mod_imports) ] + -- Choose the imports from the interactive context which might have provided + -- a module. + interactive_imports = + filter pick_interactive (ic_imports ic) + + pick_interactive :: InteractiveImport -> Bool + pick_interactive (IIDecl d) | mod_name == Just (unLoc (ideclName d)) = True + | mod_name == fmap unLoc (ideclAs d) = True + pick_interactive (IIModule m) | mod_name == Just m = True + pick_interactive _ = False + -- We want to keep only one for each original module; preferably one with an -- explicit import list (for no particularly good reason) pick :: [ImportedModsVal] -> Maybe ImportedModsVal @@ -369,17 +379,10 @@ importSuggestions looking_for global_env hpt currMod imports rdr_name -- See Note [When to show/hide the module-not-imported line] show_not_imported_line :: ModuleName -> Bool -- #15611 show_not_imported_line modnam - | modnam `elem` glob_mods = False -- #14225 -- 1 - | moduleName currMod == modnam = False -- 2.1 - | is_last_loaded_mod modnam hpt_uniques = False -- 2.2 + | not (null interactive_imports) = False -- 1 (interactive context) + | not (null interesting_imports) = False -- 1 (normal module import) + | moduleName currMod == modnam = False -- 2 | otherwise = True - where - hpt_uniques = map fst (udfmToList hpt) - is_last_loaded_mod modnam uniqs = lastMaybe uniqs == Just (getUnique modnam) - glob_mods = nub [ mod - | gre <- globalRdrEnvElts global_env - , (mod, _) <- qualsInScope gre - ] extensionSuggestions :: RdrName -> [GhcHint] extensionSuggestions rdrName @@ -478,13 +481,8 @@ For the error message: Module X does not export Y No module named ‘X’ is imported: there are 2 cases, where we hide the last "no module is imported" line: -1. If the module X has been imported. -2. If the module X is the current module. There are 2 subcases: - 2.1 If the unknown module name is in a input source file, - then we can use the getModule function to get the current module name. - (See test T15611a) - 2.2 If the unknown module name has been entered by the user in GHCi, - then the getModule function returns something like "interactive:Ghci1", - and we have to check the current module in the last added entry of - the HomePackageTable. (See test T15611b) +1. If the module X has been imported (normally or via interactive context). +2. It is the current module we are trying to compile + then we can use the getModule function to get the current module name. + (See test T15611a) -} View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/c8746a9b67f7e6f78cc1553faa1596d85196ee86 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/c8746a9b67f7e6f78cc1553faa1596d85196ee86 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 15:52:10 2024 From: gitlab at gitlab.haskell.org (Matthew Pickering (@mpickering)) Date: Fri, 20 Dec 2024 10:52:10 -0500 Subject: [Git][ghc/ghc][wip/unbound-name-qualified] warnings: Find out if a qualified name is in the interactive scope directly Message-ID: <676592aabc749_35004a257344847cb@gitlab.mail> Matthew Pickering pushed to branch wip/unbound-name-qualified at Glasgow Haskell Compiler / GHC Commits: cc4b6a8b by Matthew Pickering at 2024-12-20T15:51:49+00:00 warnings: Find out if a qualified name is in the interactive scope directly There were two ad-hoc mechanisms used to determine which modules were in the interactive scope. 1. Look at everything in the GRE, to see what is imported qualified. 2. Look at the last loaded module in the HPT. (1) Is very inefficient, GlobalRdrEnvs can be very big. (2) is incorrect, there is no reason to assume the "last" thing added to the HPT has any relevance to module loading order. Happily, the same checks can be implemented directly by looking at the interactive imports from the interactive context. This mirrors what happens for normal imports. Arguably, the error reporting code shouldn't be doing this kind of processing and it should be an option is set when rendering the error message. However, this just improves the situation and doesn't block progress on that front in future. See #14225 and #15611 Fixes #25600 - - - - - 1 changed file: - compiler/GHC/Rename/Unbound.hs Changes: ===================================== compiler/GHC/Rename/Unbound.hs ===================================== @@ -34,10 +34,11 @@ import GHC.Prelude import GHC.Driver.DynFlags import GHC.Driver.Ppr +import GHC.Driver.Env.Types import GHC.Tc.Errors.Types import GHC.Tc.Utils.Monad -import GHC.Builtin.Names ( mkUnboundName, isUnboundName, getUnique) +import GHC.Builtin.Names ( mkUnboundName, isUnboundName ) import GHC.Utils.Misc import GHC.Utils.Panic (panic) @@ -53,16 +54,16 @@ import GHC.Types.Hint import GHC.Types.SrcLoc as SrcLoc import GHC.Types.Name import GHC.Types.Name.Reader -import GHC.Types.Unique.DFM (udfmToList) import GHC.Unit.Module import GHC.Unit.Module.Imported -import GHC.Unit.Home.ModInfo +import GHC.Utils.Outputable +import GHC.Runtime.Context import GHC.Data.Bag -import GHC.Utils.Outputable (empty) +import Language.Haskell.Syntax.ImpExp -import Data.List (sortBy, partition, nub) +import Data.List (sortBy, partition) import Data.List.NonEmpty ( pattern (:|), NonEmpty ) import Data.Function ( on ) import qualified Data.Semigroup as S @@ -146,10 +147,10 @@ unboundNameOrTermInType if_term_in_type looking_for rdr_name hints ; global_env <- getGlobalRdrEnv ; impInfo <- getImports ; currmod <- getModule - ; hpt <- getHpt + ; ic <- hsc_IC <$> getTopEnv ; let (imp_errs, suggs) = unknownNameSuggestions_ looking_for - dflags hpt currmod global_env local_env impInfo + dflags ic currmod global_env local_env impInfo rdr_name ; addErr $ make_error imp_errs (hints ++ suggs) } @@ -179,17 +180,17 @@ notInScopeErr where_look rdr_name unknownNameSuggestions :: LocalRdrEnv -> WhatLooking -> RdrName -> RnM ([ImportError], [GhcHint]) unknownNameSuggestions lcl_env what_look tried_rdr_name = do { dflags <- getDynFlags - ; hpt <- getHpt ; rdr_env <- getGlobalRdrEnv ; imp_info <- getImports ; curr_mod <- getModule + ; interactive_context <- hsc_IC <$> getTopEnv ; return $ unknownNameSuggestions_ (LF what_look WL_Anywhere) - dflags hpt curr_mod rdr_env lcl_env imp_info tried_rdr_name } + dflags interactive_context curr_mod rdr_env lcl_env imp_info tried_rdr_name } -unknownNameSuggestions_ :: LookingFor -> DynFlags - -> HomePackageTable -> Module +unknownNameSuggestions_ :: LookingFor -> DynFlags -> InteractiveContext + -> Module -> GlobalRdrEnv -> LocalRdrEnv -> ImportAvails -> RdrName -> ([ImportError], [GhcHint]) unknownNameSuggestions_ looking_for dflags hpt curr_mod global_env local_env @@ -201,7 +202,7 @@ unknownNameSuggestions_ looking_for dflags hpt curr_mod global_env local_env , map (ImportSuggestion $ rdrNameOcc tried_rdr_name) imp_suggs , extensionSuggestions tried_rdr_name , fieldSelectorSuggestions global_env tried_rdr_name ] - (imp_errs, imp_suggs) = importSuggestions looking_for global_env hpt curr_mod imports tried_rdr_name + (imp_errs, imp_suggs) = importSuggestions looking_for hpt curr_mod imports tried_rdr_name if_ne :: (NonEmpty a -> b) -> [a] -> [b] if_ne _ [] = [] @@ -308,15 +309,13 @@ similarNameSuggestions looking_for@(LF what_look where_look) dflags global_env -- | Generate errors and helpful suggestions if a qualified name Mod.foo is not in scope. importSuggestions :: LookingFor - -> GlobalRdrEnv - -> HomePackageTable -> Module + -> InteractiveContext -> Module -> ImportAvails -> RdrName -> ([ImportError], [ImportSuggestion]) -importSuggestions looking_for global_env hpt currMod imports rdr_name +importSuggestions looking_for ic currMod imports rdr_name | WL_LocalOnly <- lf_where looking_for = ([], []) | WL_LocalTop <- lf_where looking_for = ([], []) | not (isQual rdr_name || isUnqual rdr_name) = ([], []) - | null interesting_imports - , Just name <- mod_name + | Just name <- mod_name , show_not_imported_line name = ([MissingModule name], []) | is_qualified @@ -344,6 +343,17 @@ importSuggestions looking_for global_env hpt currMod imports rdr_name , Just imp <- return $ pick (importedByUser mod_imports) ] + -- Choose the imports from the interactive context which might have provided + -- a module. + interactive_imports = + filter pick_interactive (ic_imports ic) + + pick_interactive :: InteractiveImport -> Bool + pick_interactive (IIDecl d) | mod_name == Just (unLoc (ideclName d)) = True + | mod_name == fmap unLoc (ideclAs d) = True + pick_interactive (IIModule m) | mod_name == Just m = True + pick_interactive _ = False + -- We want to keep only one for each original module; preferably one with an -- explicit import list (for no particularly good reason) pick :: [ImportedModsVal] -> Maybe ImportedModsVal @@ -369,17 +379,10 @@ importSuggestions looking_for global_env hpt currMod imports rdr_name -- See Note [When to show/hide the module-not-imported line] show_not_imported_line :: ModuleName -> Bool -- #15611 show_not_imported_line modnam - | modnam `elem` glob_mods = False -- #14225 -- 1 - | moduleName currMod == modnam = False -- 2.1 - | is_last_loaded_mod modnam hpt_uniques = False -- 2.2 + | not (null interactive_imports) = False -- 1 (interactive context) + | not (null interesting_imports) = False -- 1 (normal module import) + | moduleName currMod == modnam = False -- 2 | otherwise = True - where - hpt_uniques = map fst (udfmToList hpt) - is_last_loaded_mod modnam uniqs = lastMaybe uniqs == Just (getUnique modnam) - glob_mods = nub [ mod - | gre <- globalRdrEnvElts global_env - , (mod, _) <- qualsInScope gre - ] extensionSuggestions :: RdrName -> [GhcHint] extensionSuggestions rdrName @@ -478,13 +481,8 @@ For the error message: Module X does not export Y No module named ‘X’ is imported: there are 2 cases, where we hide the last "no module is imported" line: -1. If the module X has been imported. -2. If the module X is the current module. There are 2 subcases: - 2.1 If the unknown module name is in a input source file, - then we can use the getModule function to get the current module name. - (See test T15611a) - 2.2 If the unknown module name has been entered by the user in GHCi, - then the getModule function returns something like "interactive:Ghci1", - and we have to check the current module in the last added entry of - the HomePackageTable. (See test T15611b) +1. If the module X has been imported (normally or via interactive context). +2. It is the current module we are trying to compile + then we can use the getModule function to get the current module name. + (See test T15611a) -} View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cc4b6a8b8228460a82391867caf9c2958dbc4ce6 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cc4b6a8b8228460a82391867caf9c2958dbc4ce6 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 16:29:12 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 20 Dec 2024 11:29:12 -0500 Subject: [Git][ghc/ghc][wip/boot-lib-testing] 89 commits: ghc-experimental: expose GHC.RTS.Flags, GHC.Stats Message-ID: <67659b5817df5_35004a9d7c0489637@gitlab.mail> Ben Gamari pushed to branch wip/boot-lib-testing at Glasgow Haskell Compiler / GHC Commits: 53f978c0 by doyougnu at 2024-11-26T16:07:26-05:00 ghc-experimental: expose GHC.RTS.Flags, GHC.Stats See this CLC proposal: - https://github.com/haskell/core-libraries-committee/issues/289 and this CLC proposal for background: - https://github.com/haskell/core-libraries-committee/issues/288 Metric Decrease: MultiLayerModulesTH_OneShot - - - - - e70d4140 by Wang Xin at 2024-11-26T16:08:10-05:00 Add -mcmodel=medium moduleflag to generated LLVM IR on LoongArch platform With the Medium code model, the jump range of the generated jump instruction is larger than that of the Small code model. It's a temporary fix of the problem descriped in https://gitlab.haskell .org/ghc/ghc/-/issues/25495. This commit requires that the LLVM used contains the code of commit 9dd1d451d9719aa91b3bdd59c0c6679 83e1baf05, i.e., version 8.0 and later. Actually we should not rely on LLVM, so the only way to solve this problem is to implement the LoongArch backend. Add new type for codemodel - - - - - df42ba16 by Andreas Klebinger at 2024-11-27T11:40:49-05:00 Cmm constant folding: Narrow results to operations bitwidth. When constant folding ensure the result is still within bounds for the given type by explicitly narrowing the results. Not doing so results in a lot of spurious assembler warnings especially when testing primops. - - - - - bf3db97e by Ben Gamari at 2024-11-27T11:41:26-05:00 ghc-toolchain: Introduce basic flag validation We verify that required flags (currently `--output` and `--triple`) are provided. The implementation is truly awful, but so is getopt. Begins to address #25500. - - - - - a104508d by Ben Gamari at 2024-11-27T11:42:03-05:00 rts: Allow ExecPage to allocate anywhere in address space Currently the ExecPage facility has two users: * GHCi, for constructing info tables, and * the adjustor allocation path Despite neither of these have any spatial locality constraints ExecPage was using the linker's `mmapAnonForLinker`, which tries hard to ensure that mappings end up nearby the executable image. This makes adjustor allocation needlessly subject to fragmentation concerns. We now instead return less constrained mappings, improving the robustness of the mechanism. Addresses #25503. - - - - - c3fc9b86 by Ben Gamari at 2024-11-27T11:42:39-05:00 base: Fix incorrect mentions of GHC.Internal.Numeric These were incorrectly changed by the automated refactoring of the `ghc-internal` migration. Fixes #25521. - - - - - a362b943 by sheaf at 2024-11-27T23:44:28-05:00 Add checkExact to toolTargets This change means that the Hadrian multi target will include exactprint. In particular, this means that HLS will work on exactprint inside the GHC tree. - - - - - e6c957e4 by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Add test for #25428 - - - - - 52d97f4e by Arnaud Spiwack at 2024-11-27T23:45:09-05:00 Don't bypass MonoLocalBind in empty patterns Fixes #25428 - - - - - 7890f2d8 by Ben Gamari at 2024-11-28T10:26:46-05:00 hadrian: Bump directory bound to >=1.3.9 Earlier versions of `directory` are racy on Windows due to #24382. Also includes necessary Hadrian bootstrap plan bump. Fixes #24382. - - - - - 0fd43ea6 by Adam Sandberg Ericsson at 2024-11-28T10:27:22-05:00 mention -Iw in +RTS -? - - - - - 6cf579b9 by Ben Gamari at 2024-11-28T10:27:59-05:00 gitlab-ci: Set GIT_SUBMODULE_FORCE_HTTPS GitLab recommends using `https://` to clone submodules and provides the `GIT_SUBMODULE_FORCE_HTTPS` variable to force this. Fixes #25528. - - - - - 5b4774f9 by sheaf at 2024-12-03T15:22:07+01:00 Remove TcRnDeprecatedInvisTyArgInConPat mechanism The combination of ScopedTypeVariables + TypeApplications now no longer enables the use of type applications in constructor patterns, as per GHC proposal #448. This completes the deprecation that begun with GHC 9.8. We also remove the -Wdeprecated-type-abstractions flag, which was introduced in GHC 9.10. - - - - - f813c8d7 by sheaf at 2024-12-03T17:10:15-05:00 Hadrian: use / when making filepaths absolute In Hadrian, we are careful to use -/- rather than </>, in order to use / instead of \ in filepaths. However, this gets ruined by the use of makeAbsolute from System.Directory, which, on Windows, changes back forward slashes to backslashes. - - - - - 292ed74e by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Fix out-of-bounds mapping logic Previously the structure of `mmapInRegion` concealed a subtle bug concerning handling of `mmap` returning mappings below the beginning of the desired region. Specifically, we would reset `p = result + bytes` and then again reset `p = region->start` before looping around for another iteration. This resulted in an infinite loop on FreeBSD. Fixes #25492. - - - - - 20912f5b by Ben Gamari at 2024-12-03T17:10:52-05:00 rts/linker: Clarify debug output - - - - - f98b3ac0 by Simon Hengel at 2024-12-03T17:11:30-05:00 SysTools: Avoid race conditions when processing output (fixes #16450) - - - - - 03851b64 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 mg: Drop unnecessary HasCallStack This HasCallStack was a debugging artifact from a previous commit. - - - - - 01d213b5 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Improve haddock of graphReachabilityCyclic - - - - - f7cbffe2 by Rodrigo Mesquita at 2024-12-03T17:12:06-05:00 Refactor ModuleGraph interface The 'ModuleGraph' abstraction represents the relationship and strucutre of the modules being compiled. This structure is meant to be constructed once at the start of compilation, and never changed again. However, it's exposed interface was confusing and exposed too many footguns which led to inneficient usages of the ModuleGraph. This commit improves significantly the exported interface of ModuleGraph, taking into consideration the recent improvements around reachability queries. Since the ModuleGraph graphs and related structures (HPT, EPS) are performance critical in the sense that somewhat simple mistakes can cause bad leaks and non-linear memory usage, we want to have proper APIs that guide efficient usage. This is a good step in that direction. - - - - - b69a7f3c by David Binder at 2024-12-04T18:37:42-05:00 Use consistent capitalization for "GHC Proposal" in user guide - - - - - 18d9500d by David Binder at 2024-12-04T18:37:42-05:00 Fix reference to GHC proposal 193 in user guide - - - - - dd959406 by Ben Gamari at 2024-12-04T18:38:18-05:00 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. - - - - - cad6fede by Ben Gamari at 2024-12-04T18:38:54-05:00 rts/IOManager: Drop dead code This assignment is dead code as it occurs after all branches have returned. Moreover, it can't possibly be relevant since the "available" branch already sets `flag`. Potentially fixes #25542. - - - - - 55d8304e by Ben Gamari at 2024-12-06T16:56:00-05:00 ghc-internal: Drop GHC.Internal.Data.Enum This module consists only of reexports and consequently there is no reason for it to exist. - - - - - 56b9f484 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Introduce Data.Bounded As proposed in [CLC#208] but unfortunately `Data.Enum` was already incorrectly introduced in the `ghc-internal` refactor. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - 336d392e by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Deprecate export of Bounded from Data.Enum This begins the process of bringing us into compliance with [CLC#208]. [CLC#208]: https://github.com/haskell/core-libraries-committee/issues/208 - - - - - dd7ca939 by Ben Gamari at 2024-12-06T16:56:00-05:00 base: Mention incorrect Data.Enum addition in changelog - - - - - dfd1db48 by Ben Gamari at 2024-12-06T16:56:36-05:00 base: Reintroduce {Show,Enum} IoSubSystem These instances were dropped in !9676 but not approved by the CLC. Addresses #25549. - - - - - 090fc7c1 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements on T25240 T25240 doesn't need RTS linker, GHCi is sufficient and GHCi can also be dynamically linked. - - - - - 3fb5d399 by Peter Trommler at 2024-12-07T03:41:21-05:00 Fix requirements for T25155 Loading C objects requires RTS linker. - - - - - 4c58bdf6 by Leary at 2024-12-07T03:42:07-05:00 TH: Add typed variants of dataToExpQ and liftData This commit introduces to template-haskell (via ghc-internal) two functions `dataToCodeQ` and `liftDataTyped`, typed variants of `dataToExpQ` and `liftData` respectively. Tested in: `dataToCodeQUnit`. - - - - - 63027593 by Serge S. Gulin at 2024-12-08T13:52:05+03:00 JS: Basic cleanup for unused stuff to simplify things. 1. Make `staticInitStat`, `staticDeclStat`, `allocUnboxedConStatic`, `allocateStaticList`, `jsStaticArg` local to modules. 2. Remove unused `hdRawStr`, `hdStrStr` from Haskell and JavaScript (`h$pstr`, `h$rstr`, `h$str`). 3. Introduce a special type `StaticAppKind` enumeration and `StaticApp` to represent boxed scalar static applications. Originally, StaticThunk supported to pass Maybe when it became Nothing for initializied thunks in an alternatie way but it is not used anymore. - - - - - a9f8f1fb by Serge S. Gulin at 2024-12-08T14:10:45+03:00 JS: Add trivial optimizations for `unpackCString` and `unpackCStringUtf8`. It became possible due of introduction strings unfloating at Sinker pass (#13185). Earns few more bytes at optimizations. - - - - - b519c06b by Serge S. Gulin at 2024-12-08T15:50:26+03:00 JS: Specialize unpackCString# CAFs (fixes #24744) Code analysis shown that such optimization would be possible out of the box if `cachedIdentForId` allowed to do that for Haskell `Id`s which are represented by few JavaScript `Ident`s. It is a usual for strings which are represented at JavaScript as a pair of 2 values: the string content and the offset where to start reading actual string from the full content. Usually offset is 0 but technically we need to allow such complex structures to be treated as "global". Enabling it there shown that `genToplevelRhs` and `globalOccs` had inaccuracies in their implementations: 1. `globalOccs` operated over JavaScript's `Ident`s but for complex structures it didn't pay attention to the fact that different Idents actually could be pointed to same Id. Now the algo is changed to calculate occurencies for Ids. 2. `genToplevelRhs` didn't assume that different Idents pointed to same Id can have mixed order of occurence. But actually the order is important. Strings are encoded into 2 variables where first is content and second is offset and their order are not interchangeable. It is fixed by regeneration Idents from collected Ids which is fine because all Idents generation is passed through the Cache and they are quasi-stable. - - - - - a8ceccf3 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Fix panic in multiline string with unterminated gap (#25530) - - - - - 9e464ad0 by Brandon Chinn at 2024-12-09T16:25:43-05:00 Add test case for unterminated multiline string - - - - - ed1ed5c6 by Rodrigo Mesquita at 2024-12-09T16:26:19-05:00 Revert mapMG renaming We had previously renamed this function for consistency, but that caused unnecessary breakage - - - - - 158261f7 by Sylvain Henry at 2024-12-09T16:27:01-05:00 RTS: make Cabal flags manual Cabal shouldn't automatically try to set them. We set them explicitly. - - - - - a83b7ed6 by Matthew Stephenson at 2024-12-10T14:01:22-05:00 Add missing @since documentation for (!?) function - - - - - e745e3a3 by Ben Gamari at 2024-12-10T14:01:59-05:00 compiler: Don't attempt to TSAN-instrument SIMD operations TSAN only provides instrumentation for 8, 16, 32, and 64-bit memory loads/stores. Don't attempt to instrument wider operations. Fixes #25563. - - - - - 684c0018 by Ben Gamari at 2024-12-10T14:02:35-05:00 gitlab/ci: Don't clobber RUNTEST_ARGS Previously the logic handling `IGNORE_PERF_FAILURES` clobbered the user's `RUNTEST_ARGS`. Fix this. - - - - - 41dae5b8 by Ben Gamari at 2024-12-10T14:03:11-05:00 hadrian: Mitigate mktexfmt race At least some versions of Texlive's `mktexfmt` utility cannot be invoked concurrently in their initial run since they fail to handle failure of `mkdir` due to racing. Specifically, we see ``` | Run Xelatex: users_guide.tex => /tmp/extra-dir-9616886274866 | Run Xelatex: Haddock.tex => /tmp/extra-dir-9616886274869 This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex) restricted \write18 enabled. kpathsea: Running mktexfmt xelatex.fmt mktexfmt: mktexfmt is using the following fmtutil.cnf files (in precedence order): mktexfmt: /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf mktexfmt: mktexfmt is using the following fmtutil.cnf file for writing changes: mktexfmt: /builds/ghc/ghc/tmp-home/.texlive2020/texmf-config/web2c/fmtutil.cnf /usr/bin/mktexfmt: mkdir(/builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c/) failed for tree /builds/ghc/ghc/tmp-home/.texlive2020/texmf-var/web2c: File exists at /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm line 937. I can't find the format file `xelatex.fmt'! ``` That is two `mktexfmt` invocations (for the user's guide and haddock builds) attempted to create `$HOME/texlive2020/texmf-var/web2c` and raced. One of the two `mkdir`'s consequently failed, bringing down the entire build. We avoid this by ensuring that the first `xelatex` invocation is always performed serially. Fixes #25564. - - - - - 9efbc51f by Ben Gamari at 2024-12-10T14:03:48-05:00 rts/CheckUnload: Reset old_objects if unload is skipped Previously `checkUnload` failed to reset `old_objects` when it decided not to unload (e.g. due to heap profiling being enabled). Fixes #24935. - - - - - 5192a75f by Ben Gamari at 2024-12-11T04:28:11-05:00 rts: Annotate BCOs with their Name This introduces a new bytecode instruction, `BCO_NAME`, to aid in debugging bytecode execution. This instruction is injected by `mkProtoBCO` and captures the Haskell name of the BCO. It is then printed by the disassembler, allowing ready correlation with STG dumps. - - - - - 99225996 by Ben Gamari at 2024-12-11T04:28:48-05:00 configure: Implement ld override whitelist Bring `configure` into alignment with `ghc-toolchain`, ensuring that the ld-override logic will only take effect on Linux and Windows. Fixes #25501. - - - - - 4a8fc928 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Unmark T14028 as broken on FreeBSD This now appears to pass on FreeBSD 14. Closes #19723. - - - - - d7c0eb5a by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Migrate FreeBSD runner tag to FreeBSD 14 - - - - - 7246dacc by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Reintroduce FreeBSD 14 job - - - - - 4af936da by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Allow use of newer cabal-install bindists Newer cabal-install bindists have internal directory structure. Here we detect and account for the presence of such structure. - - - - - cbf38c1b by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Enable documentation build on FreeBSD 14 - - - - - d68107fb by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Use system libffi on FreeBSD - - - - - fea3b590 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark linker_unload as broken on FreeeBSD Due to #25491. - - - - - ccf171ee by Ben Gamari at 2024-12-11T12:33:42+00:00 gitlab-ci: Prefer system toolchain on FreeBSD It's not uncommon to find machines with gcc installed via ports. We should be using the system's default clang-based toolchain instead. - - - - - cfb34738 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T21969 as broken on FreeBSD Due to #25512. - - - - - 0b64e37c by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark RestartEventLogging as broken on FreeBSD I am seeing this fail quite reproducibly. Due to #19724. - - - - - 3b412019 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Mark T16180 as "broken" on FreeBSD Sadly we in fact need to skip it as it merely times out during compilation. See #14012. - - - - - 57e3cab5 by Ben Gamari at 2024-12-11T12:33:42+00:00 testsuite: Skip T16992 unless in slow speed This test has extraordinary memory requirements and tests a rather niche aspect of the compact region mechanism. It has been suggested multiple times that we shouldn't run it in the default testsuite configuration. Finally implement this. See #21890. See #21892. - - - - - f08a72eb by Ben Gamari at 2024-12-11T19:30:54-05:00 rts(setNumCapabilities): Assert that n_caps < MAX_N_CAPS It was noticed in #25560 that this would previously be allowed, resulting in a segfault. I will add a proper exception in `base` in a future commit. - - - - - e10d31ad by Ben Gamari at 2024-12-11T19:30:55-05:00 ghc-internal: Fix inconsistent FFI import types The foreign imports of `enabled_capabilities` and `getNumberOfProcessors` were declared as `CInt` whereas they are defined as `uint32_t`. - - - - - 06265655 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Mention maximum capability count in users guide Addresses #25560. - - - - - d488470b by Ben Gamari at 2024-12-11T19:30:55-05:00 rts/Capability: Move induction variable declaration into `for`s Just a stylistic change. - - - - - 71f050b7 by Ben Gamari at 2024-12-11T19:30:55-05:00 rts: Determine max_n_capabilities at RTS startup Previously the maximum number of capabilities supported by the RTS was statically capped at 256. However, this bound is uncomfortably low given the size of today's machine. While supporting unbounded, fully-dynamic adjustment would be nice, it is complex and so instead we do something simpler: Probe the logical core count at RTS startup and use this as the static bound for the rest of our execution. This should avoid users running into the capability limit on large machines while avoiding wasting memory on a large capabilities array for most users and keeping complexity at bay. Addresses #25560. - - - - - 1e84b411 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Introduce req_c_rts As suggested by @hsyl20, this is intended to mark tests that rely on the behavior of the C RTS. - - - - - 683115a4 by Ben Gamari at 2024-12-11T19:30:55-05:00 testsuite: Add test for #25560 - - - - - ef2052a8 by Ben Gamari at 2024-12-12T04:42:32-05:00 testsuite: Only run T14497_compact in normal way This test targets the compacting GC so it makes little sense to run it across all ways. Moreover, it outright conflicts with the `nonmoving` way. - - - - - 34d3e8e6 by Ben Gamari at 2024-12-12T04:43:08-05:00 rts/CheckUnload: Don't prepare to unload if we can't unload Previously `prepareUnloadCheck` would move the `objects` list to `old_objects` even when profiling (where we cannot unload). This caused us to vacate the `objects` list during major GCs, losing track of loaded objects. Fix this by ensuring that `prepareUnloadCheck` and `checkUnload` both use the same short-cutting logic. - - - - - 9c53489d by Andrei Borzenkov at 2024-12-12T15:06:42-05:00 Update GHCi :info type declaration printing (#24459) - Do not print result's kind in type families because we have full kind in SAKS and we display invisible arity using @-binders - Do not suppress significant invisible binders An invisible binder is considered significant when it meets at least one of the following two criteria: - It visibly occurs in the declaration's body - It is followed by a significant binder, so it affects positioning For non-generative type declarations (type synonyms and type families) there is one additional criterion: - It is not followed by a visible binder, so it affects the arity of a type synonym See Note [Print invisible binders in interface declarations] for more information about what is "visibly occurs" - - - - - 13fe48d4 by Matthew Pickering at 2024-12-12T15:07:19-05:00 typechecker: Perform type family consistency checks in topological order Consider a module M importing modules A, B and C. We can waste a lot of work depending on the order that the modules are checked for family consistency. Consider that C imports A and B. When compiling C we must have already checked A and B for consistency, therefore if C is processed first then A and B will not need to be checked for consistency again. If A and B are compared first, then the consistency checks will be performed against (wasted as we already performed them for C). At the moment the order which modules are checked is non-deterministic. Clearly we should engineer that C is checked before B and A, but by what scheme? A simple one is to observe that if a module M is in the transitive closure of X then the size of the consistent family set of M is less than or equal to size of the consistent family set of X. Therefore by sorting the imports by the size of the consistent family set and processing the largest first, you make sure to process modules in topological order. In practice we have observed that this strategy has reduced the amount of consistency checks performed. One solution to #25554 - - - - - 62a2b25f by Sylvain Henry at 2024-12-14T04:31:09-05:00 TNTC: set CmmProc entry_label properly (#25565) Before this patch we were renaming the entry label of a CmmProc late in the CmmToAsm pass. It led to inconsistencies and to some labels being used in info tables but not being emitted (#25565). Now we set the CmmProc entry label earlier in the StgToCmm monad and we don't renamed it afterwards. - - - - - b339e7c3 by Simon Hengel at 2024-12-14T04:31:47-05:00 Make filter functionality for system tools line-based This is more efficient as: - All existing filter functions were line-based anyway. They broke up the input into lines and then joined it back together. - We already break up the output from system tools into lines when processing it. Splitting up the output of system tools once and then filtering and processing it reduces both code and runtime complexity. - - - - - 39669077 by Simon Hengel at 2024-12-14T04:31:47-05:00 Refactoring: Don't use a `Chan` when parsing SysTools output - - - - - 64756530 by Simon Peyton Jones at 2024-12-14T22:28:04-05:00 Tidy up the handling of `assert` Fixes #25493 - - - - - 8658fbc1 by Rodrigo Mesquita at 2024-12-14T22:28:41-05:00 base: displayException for SomeAsyncException Provide a better implementation of `SomeException` for `SomeAsyncException`. The previous, implicit, implementation, would not use the `displayException` of the exception wrapped by `SomeAsyncException`. Implements CLC-Proposal#309 Closes #25513 - - - - - 2d3a0a70 by ARATA Mizuki at 2024-12-15T18:35:30-05:00 LLVM: When emitting a vector literal with ppTypeLit, include the type information Fixes #25561 - - - - - bfacc086 by Simon Peyton Jones at 2024-12-15T18:36:05-05:00 Fix signature lookup in instance declarations This fixes a bug introduced by the fix to #16610 - - - - - 80f0e02d by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Improve GHC build times Two small changes * In GHC.Data.Unboxed, never omit interface pragmas. In "fast builds" one might omit them generally, but doing so gives very bad performance for code that imports this module. * In GHC.Hs.Dump don't do type-class specialisation. For some reason it goes mad and generates vast amounts of useless code. See #25463. - - - - - 175a1355 by Simon Peyton Jones at 2024-12-16T17:13:52+00:00 Refactor Lint Refactor Lint for two reasons: * To improve performance * To prepare for type-lets The big changes are all in GHC.Core.Lint: * Change the main APIs: * `lintType` returns nothing rather than returning a `LintedType`; * `lintCoercion` return nothing rather than returning a `LintedCoercion` Reason: these functions did a lot of allocation to return a substituted type/coercion that was often discarded, or used only to extract its kind. Instead we now return nothing, and, when needed, extract the kind and substitute. * Applications are treated as a whole, by `lintApp`. By treating multiple arguments all at once we avoid performing multiple substitutions, each substituting a single type variable. This can make an absolutely huge difference. Overall this led to a pretty massive rewrite of Lint, with many smaller changes. Smaller chnages elsewhere * Rename `GHC.Core.TyCo.Subst.getSubstInScope` to `substInScopeSet` for consistency * Define and use `GHC.Core.Type.liftedTypeOrConstraintKind` Performance. This MR someimtes gives gives a very large improvement in compile time, when Lint is on. here is a selection of changes over 5% in perf/compiler (with -dcore-lint) T25196 -97.0% T14766 -89.7% T14683 -74.4% T5631 -60.9% T20261 -56.7% T18923 -17.6% T13035 -15.8% T6048 -15.8% CoOpt_Read -14.4% T9630 -10.9% T5642 -7.3% Eliminating the egregious offenders is a big win. However, in some cases the compiler allocation /increases/. Here ae the changes over 1%: T9961 1.5% T8095 2.8% T14052 3.9% T12545 4.5% T14052Type 5.5% T5030 8.0% T5321Fun 8.3% T3064 12.7% CoOpt_Singletons 15.6% T9198 16.0% LargeRecord 18.1% I looked at the two biggest increases in compile-time bytes allocated. Interestingly, they both show substantial *decreases* in actual compile time, due to much smaller GC times. I'm honestly not sure either why the allocation increases, or why the GC time decreases; but I'm going to take the win! T9198 Baseline With patch No Lint Alloc 44.6M 44.6M Mut time 0.23s 0.22s GC time 0.21s 0.21s With Lint Alloc 309M 360M Mut time 1.51s 0.85s GC time 2.97s 0.25s ------------------- LargeRecord Baseline With patch No Lint Alloc 1.37G 1.37G Mut time 2.33s 2.33s GC time 2.40s 2.42s With Lint Alloc 3.4G 4.0G Mut time 6.02s 5.68s GC time 3.67s 3.03s IMPORTANT NOTE: These changes don't show up in CI because in CI the tests in perf/compiler are all run with -dcore-lint switched off. I gathered this data with some manual runs. - - - - - 8ef2dad6 by Simon Peyton Jones at 2024-12-17T02:48:09-05:00 Add Note [Typechecking overloaded literals] See #25494. - - - - - e86b1b20 by Ben Gamari at 2024-12-17T13:51:39-05:00 testsuite: Use math.inf instead of division-by-zero This both more directly captures the intent and also fixes #25580. - - - - - 430d965a by Ben Gamari at 2024-12-17T13:52:15-05:00 rts: Fix incorrect format specifiers in era profiling Fixes #25581. - - - - - 267098ad by Andreas Klebinger at 2024-12-18T23:43:13-05:00 Document `-prof` and non `-prof` code being incompatible. Fixes #25518. - - - - - 04433916 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: output metadata fragment in CI (cherry picked from commit 52b58a660e735b20961d792d8fa9267f01247a50) - - - - - 7c78804e by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metatdata: use fedora33 for redhat Redhat 9 doesn't have libtinfo.so.5 anymore (cherry picked from commit dc86785eb43afd1bd292287c064fb5ad94fe8c7f) - - - - - 1d72cfb2 by Zubin Duggal at 2024-12-18T23:43:50-05:00 ghcup metadata: still use centos for redhat <9 - - - - - 3f7ebc58 by Sylvain Henry at 2024-12-19T20:40:14-05:00 Merge ghc-bignum into ghc-internal (#24453) First step towards merging ghc-bignum and ghc-prim into ghc-internal. After this patch, ghc-bignum is deprecated and is just a shallow package reexporting modules from ghc-internal and base. Use those directly instead. Move `gmp` submodule into ghc-internal directory. - - - - - ee0150c2 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Improve performance of deriving Show Significantly improves performance of deriving Show instances by avoiding using the very polymorphic `.` operator in favour of inlining its definition. We were generating tons of applications of it, each which had 3 type arguments! Improves on #9557 ------------------------- Metric Decrease: InstanceMatching T12707 T3294 ------------------------ - - - - - 8b266671 by Rodrigo Mesquita at 2024-12-19T20:40:51-05:00 Don't eta expand cons when deriving Data This eta expansion was introduced with the initial commit for Linear types. I believe this isn't needed any longer. My guess is it is an artifact from the initial linear types implementation: data constructors are linear, but they shouldn't need to be eta expanded to be used as higher order functions. I suppose in the early days this wasn't true. For instance, this works now: data T x = T x f = \(x :: forall y. y -> T y) -> x True f T -- ok! T is linear, but can be passed where an unrestricted higher order function is expected. I recall there being some magic around to make this work for data constructors... Since this works, there's no need to eta_expand the data constructors in the derived Data instances. - - - - - 79fd071c by Ben Gamari at 2024-12-20T11:28:52-05:00 check-submodules: initial commit - - - - - 30 changed files: - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - .gitmodules - compiler/GHC/Builtin/Names.hs - compiler/GHC/ByteCode/Asm.hs - compiler/GHC/ByteCode/Instr.hs - compiler/GHC/Cmm/Opt.hs - compiler/GHC/Cmm/ThreadSanitizer.hs - compiler/GHC/CmmToAsm/X86/Ppr.hs - compiler/GHC/CmmToLlvm.hs - compiler/GHC/Core.hs - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/Lint.hs - compiler/GHC/Core/Opt/Arity.hs - compiler/GHC/Core/Opt/Simplify/Utils.hs - compiler/GHC/Core/Opt/SpecConstr.hs - compiler/GHC/Core/Opt/Specialise.hs - compiler/GHC/Core/SimpleOpt.hs - compiler/GHC/Core/Subst.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/Core/Type.hs - compiler/GHC/CoreToStg/Prep.hs - compiler/GHC/Data/Graph/Directed/Reachability.hs - compiler/GHC/Data/Unboxed.hs - compiler/GHC/Driver/Config/Core/Rules.hs The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/441d18668a411b33b446ff2fcc2772c891891ede...79fd071c4dd2c38190d164f524339602da920d5b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/441d18668a411b33b446ff2fcc2772c891891ede...79fd071c4dd2c38190d164f524339602da920d5b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 16:48:12 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Fri, 20 Dec 2024 11:48:12 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] 4 commits: Doc and clean up ExternalModuleGraph Message-ID: <67659fcc167f6_50472639b4179a7@gitlab.mail> Rodrigo Mesquita pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: c7d794e9 by Rodrigo Mesquita at 2024-12-19T17:29:59+00:00 Doc and clean up ExternalModuleGraph - - - - - 7f2a5f25 by Rodrigo Mesquita at 2024-12-19T18:12:05+00:00 Add package nodes and reachability to EPS module graph - - - - - 5211b644 by Rodrigo Mesquita at 2024-12-20T15:28:12+00:00 Improve code driving getLinkDeps - - - - - 2ddafd26 by Rodrigo Mesquita at 2024-12-20T16:47:59+00:00 Finish loadHomePackageInterfacesBelow, delete follow_deps - - - - - 5 changed files: - compiler/GHC/Iface/Load.hs - compiler/GHC/Linker/Deps.hs - compiler/GHC/Linker/Loader.hs - compiler/GHC/Unit/Module/External/Graph.hs - compiler/GHC/Unit/Module/Graph.hs Changes: ===================================== compiler/GHC/Iface/Load.hs ===================================== @@ -25,6 +25,7 @@ module GHC.Iface.Load ( -- IfM functions loadInterface, loadSysInterface, loadUserInterface, loadPluginInterface, + loadHomePackageInterfacesBelow, findAndReadIface, readIface, writeIface, flagsToIfCompression, moduleFreeHolesPrecise, @@ -410,20 +411,65 @@ loadInterfaceWithException doc mod_name where_from let ctx = initSDocContext dflags defaultUserStyle withIfaceErr ctx (loadInterface doc mod_name where_from) --- | Load all interfaces from the home package, presumes that this operation --- can be completed by traversing from the already loaded home packages. +-- | Load all interfaces from the home package that are transitively reachable +-- from the given modules -- presumes that this operation can be completed by +-- traversing from the already loaded home packages. +-- +-- This operation is used just before TH splices are run (in 'getLinkDeps'). +-- +-- TODO: SHOULD WE ASSERT THIS IS ONLY CALLED ON ONESHOT MODE? WE SHOULD NEVER +-- WANT TO LOAD HOME MODULE PACKAGES INTO THE EPS ANY OTHER WAY. +-- +-- The first time this is run...?? +-- +-- A field in the EPS tracks which home modules are already fully loaded, which we use +-- here to avoid trying to load them a second time. +-- +-- For convenience, reads the module graph out of the EPS after having loaded +-- all the modules and returns it. It would be harder to get the updated module +-- graph in 'getLinkDeps' another way. +loadHomePackageInterfacesBelow :: (Module -> SDoc) -> Maybe HomeUnit {-^ The current home unit -} + -> [Module] -> IfM lcl () +loadHomePackageInterfacesBelow _ Nothing _ = error "No home unit, what to do?" +loadHomePackageInterfacesBelow msg (Just home_unit) mods = do + dflags <- getDynFlags + let ctx = initSDocContext dflags defaultUserStyle + + forM_ mods $ \mod -> do + + graph <- eps_module_graph <$> getEps + let key = ExternalModuleKey $ ModNodeKeyWithUid (GWIB (moduleName mod) NotBoot) (moduleUnitId mod) + + if isFullyLoadedModule key graph + then return () + else do + iface <- withIfaceErr ctx $ + loadInterface (msg mod) mod (ImportByUser NotBoot) + + -- RM:TODO: THINGS WE ARE NOT DOING + -- + -- The ModIface contains the transitive closure of the module dependencies + -- within the current package, *except* for boot modules: if we encounter + -- a boot module, we have to find its real interface and discover the + -- dependencies of that. Hence we need to traverse the dependency + -- tree recursively. See bug #936, testcase ghci/prog007. + + -- RM:TODO: WHAT WAS THIS DOING BEFORE IN FOLLOW_DEPS? + -- (was in follow_deps) + -- when (mi_boot iface == IsBoot) $ link_boot_mod_error mod + + let deps = mi_deps iface + mod_deps = dep_direct_mods deps --- This operation is used just before TH splices are run. + -- Load all direct dependencies that are in the home package + loadHomePackageInterfacesBelow msg (Just home_unit) + $ map (\(uid, GWIB mn _) -> mkModule (RealUnit (Definite uid)) mn) + $ filter ((==) (homeUnitId home_unit) . fst) + $ Set.toList mod_deps --- The first time this is run --- A field in the EPS tracks which home modules are fully loaded -_loadHomePackageInterfacesBelow :: ModNodeKeyWithUid -> IfM lcl () -_loadHomePackageInterfacesBelow mn = do - graph <- eps_module_graph <$> getEps - let key = ExternalModuleKey mn - if isFullyLoadedModule key graph - then return () - else return () + -- Update the external graph with this module being fully loaded. + updateEps_ $ \eps -> + eps{eps_module_graph = setFullyLoadedModule key (eps_module_graph eps)} ------------------ loadInterface :: SDoc -> Module -> WhereFrom @@ -534,10 +580,12 @@ loadInterface doc_str mod from ; purged_hsc_env <- getTopEnv ; let direct_deps = map (uncurry (flip ModNodeKeyWithUid)) $ (Set.toList (dep_direct_mods $ mi_deps iface)) - ; let !module_graph_key = - if moduleUnitId mod `elem` hsc_all_home_unit_ids hsc_env + ; let !module_graph_key = pprTrace "module_graph_on_load" (ppr (eps_module_graph eps)) $ + if moduleUnitId mod `elem` hsc_all_home_unit_ids hsc_env -- can only happen in oneshot mode then Just $ NodeHomePackage (miKey iface) (map ExternalModuleKey direct_deps) else Nothing + -- ; let !module_graph_external_pkgs_nods = _ + -- ROMES:TODO: Fairly sure we need to insert package nodes somewhere here. ; let final_iface = iface & set_mi_decls (panic "No mi_decls in PIT") ===================================== compiler/GHC/Linker/Deps.hs ===================================== @@ -36,25 +36,25 @@ import GHC.Unit.Finder import GHC.Unit.Module import GHC.Unit.Module.ModIface import GHC.Unit.Module.WholeCoreBindings -import GHC.Unit.Module.Deps import GHC.Unit.Module.Graph +import GHC.Unit.Module.External.Graph import GHC.Unit.Home.ModInfo import GHC.Iface.Errors.Types -import GHC.Iface.Errors.Ppr import GHC.Utils.Misc import GHC.Unit.Home import GHC.Data.Maybe -import Control.Monad import Control.Applicative -import qualified Data.Set as Set import Data.List (isSuffixOf) import System.FilePath import System.Directory +import GHC.Utils.Monad (mapMaybeM) +import Data.Either (partitionEithers) +import Data.Bifunctor (Bifunctor(..)) data LinkDepsOpts = LinkDepsOpts { ldObjSuffix :: !String -- ^ Suffix of .o files @@ -68,8 +68,9 @@ data LinkDepsOpts = LinkDepsOpts , ldWays :: !Ways -- ^ Enabled ways , ldFinderCache :: !FinderCache , ldFinderOpts :: !FinderOpts - , ldLoadIface :: !(SDoc -> Module -> IO (MaybeErr MissingInterfaceError ModIface)) , ldLoadByteCode :: !(Module -> IO (Maybe Linkable)) + , ldLoadHomeIfacesBelow :: !((Module -> SDoc) -> Maybe HomeUnit {- current home unit -} + -> [Module] -> IO ExternalModuleGraph) } data LinkDeps = LinkDeps @@ -102,7 +103,6 @@ getLinkDeps opts interp pls span mods = do get_link_deps opts pls maybe_normal_osuf span mods - get_link_deps :: LinkDepsOpts -> LoaderState @@ -111,31 +111,26 @@ get_link_deps -> [Module] -> IO LinkDeps get_link_deps opts pls maybe_normal_osuf span mods = do - -- 1. Find the dependent home-pkg-modules/packages from each iface + + -- Three step process: + + -- 1. Find the dependent home-pkg-modules/packages from each iface -- (omitting modules from the interactive package, which is already linked) - (mods_s, pkgs_s) <- - -- Why two code paths here? There is a significant amount of repeated work - -- performed calculating transitive dependencies - -- if --make uses the oneShot code path (see MultiLayerModulesTH_* tests) - if ldOneShotMode opts - then follow_deps (filterOut isInteractiveModule mods) - emptyUniqDSet emptyUniqDSet; - else do - mmods <- mapM get_mod_info all_home_mods - return (catMaybes mmods, mkUniqDSet all_dep_pkgs) + (all_home_mods, pkgs_s) <- get_reachable_nodes opts relevant_mods + mods_s <- mapMaybeM get_mod_info all_home_mods let -- 2. Exclude ones already linked -- Main reason: avoid findModule calls in get_linkable - (mods_needed, links_got) = partitionWith split_mods mods_s - pkgs_needed = eltsUDFM $ getUniqDSet pkgs_s `minusUDFM` pkgs_loaded pls + (mods_needed, links_got) = partitionWith split_mods mods_s + pkgs_needed = eltsUDFM $ getUniqDSet pkgs_s `minusUDFM` pkgs_loaded pls - split_mods mod = - let is_linked = lookupModuleEnv (objs_loaded pls) mod - <|> lookupModuleEnv (bcos_loaded pls) mod - in case is_linked of - Just linkable -> Right linkable - Nothing -> Left mod + split_mods mod = + let is_linked = lookupModuleEnv (objs_loaded pls) mod + <|> lookupModuleEnv (bcos_loaded pls) mod + in case is_linked of + Just linkable -> Right linkable + Nothing -> Left mod -- 3. For each dependent module, find its linkable -- This will either be in the HPT or (in the case of one-shot @@ -149,20 +144,9 @@ get_link_deps opts pls maybe_normal_osuf span mods = do , ldNeededUnits = pkgs_s } where - mod_graph = ldModuleGraph opts unit_env = ldUnitEnv opts - mkNk m - = let k = NodeKey_Module (ModNodeKeyWithUid (GWIB (moduleName m) NotBoot) (moduleUnitId m)) - in if mgMember mod_graph k - then k - else NodeKey_ExternalUnit (moduleUnitId m) - - initial_keys = map mkNk (filterOut isInteractiveModule mods) - all_deps = initial_keys ++ map mkNodeKey (mgReachableLoop mod_graph initial_keys) - - all_home_mods = [with_uid | NodeKey_Module with_uid <- all_deps] - all_dep_pkgs = [uid | NodeKey_ExternalUnit uid <- all_deps] + relevant_mods = filterOut isInteractiveModule mods get_mod_info (ModNodeKeyWithUid gwib uid) = case lookupHug (ue_home_unit_graph unit_env) uid (gwib_mod gwib) of @@ -174,59 +158,6 @@ get_link_deps opts pls maybe_normal_osuf span mods = do Nothing -> throwProgramError opts $ text "getLinkDeps: Home module not loaded" <+> ppr (gwib_mod gwib) <+> ppr uid - - -- This code is used in one-shot mode to traverse downwards through the HPT - -- to find all link dependencies. - -- The ModIface contains the transitive closure of the module dependencies - -- within the current package, *except* for boot modules: if we encounter - -- a boot module, we have to find its real interface and discover the - -- dependencies of that. Hence we need to traverse the dependency - -- tree recursively. See bug #936, testcase ghci/prog007. - follow_deps :: [Module] -- modules to follow - -> UniqDSet Module -- accum. module dependencies - -> UniqDSet UnitId -- accum. package dependencies - -> IO ([Module], UniqDSet UnitId) -- result - follow_deps [] acc_mods acc_pkgs - = return (uniqDSetToList acc_mods, acc_pkgs) - follow_deps (mod:mods) acc_mods acc_pkgs - = do - mb_iface <- ldLoadIface opts msg mod - iface <- case mb_iface of - Failed err -> throwProgramError opts $ - missingInterfaceErrorDiagnostic (ldMsgOpts opts) err - Succeeded iface -> return iface - - when (mi_boot iface == IsBoot) $ link_boot_mod_error mod - - let - pkg = moduleUnit mod - deps = mi_deps iface - - pkg_deps = dep_direct_pkgs deps - (boot_deps, mod_deps) = flip partitionWith (Set.toList (dep_direct_mods deps)) $ - \case - (_, GWIB m IsBoot) -> Left m - (_, GWIB m NotBoot) -> Right m - - mod_deps' = case ue_homeUnit unit_env of - Nothing -> [] - Just home_unit -> filter (not . (`elementOfUniqDSet` acc_mods)) (map (mkHomeModule home_unit) $ (boot_deps ++ mod_deps)) - acc_mods' = case ue_homeUnit unit_env of - Nothing -> acc_mods - Just home_unit -> addListToUniqDSet acc_mods (mod : map (mkHomeModule home_unit) mod_deps) - acc_pkgs' = addListToUniqDSet acc_pkgs (Set.toList pkg_deps) - - case ue_homeUnit unit_env of - Just home_unit | isHomeUnit home_unit pkg -> follow_deps (mod_deps' ++ mods) - acc_mods' acc_pkgs' - _ -> follow_deps mods acc_mods (addOneToUniqDSet acc_pkgs' (toUnitId pkg)) - where - msg = text "need to link module" <+> ppr mod <+> - text "due to use of Template Haskell" - - - - link_boot_mod_error :: Module -> IO a link_boot_mod_error mod = throwProgramError opts $ text "module" <+> ppr mod <+> text "cannot be linked; it is only available as a boot module" @@ -299,6 +230,56 @@ get_link_deps opts pls maybe_normal_osuf span mods = do CoreBindings WholeCoreBindings {wcb_module} -> pprPanic "Unhydrated core bindings" (ppr wcb_module) +-- See Note [Reachability in One-shot mode vs Make mode] +get_reachable_nodes :: LinkDepsOpts -> [Module] -> IO ([ModNodeKeyWithUid], UniqDSet UnitId) +get_reachable_nodes opts mods + + -- Reachability on 'ExternalModuleGraph' (for one shot mode) + | ldOneShotMode opts + = do + emg <- ldLoadHomeIfacesBelow opts msg (ue_homeUnit (ldUnitEnv opts)) mods + go (ExternalModuleKey . mkModuleNk) emgNodeKey (emgReachableMany emg) (map emgProject) + --romes:todo:^ make sure we only get non-boot files out of this. perhaps as + --easy as filtering them out by ModNodeKeyWithUid with is boot information. + + -- Reachability on 'ModuleGraph' (for --make mode) + | otherwise + = go hmgModKey mkNodeKey (mgReachableLoop hmGraph) (catMaybes . map hmgProject) + + where + mkModuleNk m = ModNodeKeyWithUid (GWIB (moduleName m) NotBoot) (moduleUnitId m) + msg mod = + text "need to link module" <+> ppr mod <+> + text "and the modules below it, due to use of Template Haskell" + + hmGraph = ldModuleGraph opts + + hmgModKey m + | let k = NodeKey_Module (mkModuleNk m) + , mgMember hmGraph k = k + | otherwise = NodeKey_ExternalUnit (moduleUnitId m) + + hmgProject = \case + NodeKey_Module with_uid -> Just $ Left with_uid + NodeKey_ExternalUnit uid -> Just $ Right uid + _ -> Nothing + + emgProject = \case + ExternalModuleKey with_uid -> Left with_uid + ExternalPackageKey uid -> Right uid + + -- The main driver for getting dependencies, which calls the given + -- functions to compute the reachable nodes. + go :: (Module -> key) + -> (node -> key) + -> ([key] -> [node]) + -> ([key] -> [Either ModNodeKeyWithUid UnitId]) + -> IO ([ModNodeKeyWithUid], UniqDSet UnitId) + go modKey nodeKey manyReachable project + | let mod_keys = map modKey mods + = pure $ second mkUniqDSet $ partitionEithers $ project $ + mod_keys ++ map nodeKey (manyReachable mod_keys) + {- Note [Using Byte Code rather than Object Code for Template Haskell] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -322,6 +303,30 @@ The only other place where the flag is consulted is when enabling code generatio with `-fno-code`, which does so to anticipate what decision we will make at the splice point about what we would prefer. +Note [Reachability in One-shot mode vs Make mode] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Why are there two code paths in `get_reachable_nodes`? (ldOneShotMode vs otherwise) + +In one-shot mode, the home package modules are loaded into the EPS, +whereas for --make mode, the home package modules are in the HUG/HPT. + +For both of these cases, we cache the calculation of transitive +dependencies in a 'ModuleGraph'. For the --make case, the relevant +'ModuleGraph' is in the EPS, the other case uses the 'ModuleGraph' +for the home modules. + +The home modules graph is known statically after downsweep. +On the contrary, the EPS module graph is only extended when a +module is loaded into the EPS -- which is done lazily as needed. +Therefore, for get_link_deps, we need to force the transitive +closure to be loaded before querying the graph for the reachable +link dependencies -- done in the call to 'ldLoadHomeIfacesBelow'. +Because we cache the transitive closure, this work is only done once. + +After forcing the modules with the call to 'ldLoadHomeIfacesBelow' in +'get_reachable_nodes', the external module graph has all edges needed to +compute the full transitive closure so we can proceed just like we do in the +second path with a normal module graph. -} dieWith :: LinkDepsOpts -> SrcSpan -> SDoc -> IO a ===================================== compiler/GHC/Linker/Loader.hs ===================================== @@ -76,7 +76,7 @@ import GHC.Utils.Logger import GHC.Utils.TmpFs import GHC.Unit.Env -import GHC.Unit.External (ExternalPackageState (EPS, eps_iface_bytecode)) +import GHC.Unit.External (ExternalPackageState (EPS, eps_iface_bytecode, eps_module_graph)) import GHC.Unit.Module import GHC.Unit.State as Packages @@ -603,12 +603,16 @@ initLinkDepsOpts hsc_env = opts , ldUseByteCode = gopt Opt_UseBytecodeRatherThanObjects dflags , ldMsgOpts = initIfaceMessageOpts dflags , ldWays = ways dflags - , ldLoadIface + , ldLoadHomeIfacesBelow , ldLoadByteCode } dflags = hsc_dflags hsc_env - ldLoadIface msg mod = initIfaceCheck (text "loader") hsc_env - $ loadInterface msg mod (ImportByUser NotBoot) + ldLoadHomeIfacesBelow msg hu mods + = do + initIfaceCheck (text "loader") hsc_env + $ loadHomePackageInterfacesBelow msg hu mods + -- Read the module graph only after `loadHomePackageInterfacesBelow` + eps_module_graph <$> hscEPS hsc_env ldLoadByteCode mod = do EPS {eps_iface_bytecode} <- hscEPS hsc_env ===================================== compiler/GHC/Unit/Module/External/Graph.hs ===================================== @@ -1,6 +1,57 @@ --- | Like GHC.Unit.Module.Graph but for the ExternalModuleGraph which --- is stored in the EPS. -module GHC.Unit.Module.External.Graph where +{-# LANGUAGE LambdaCase #-} + +-- | Like @'GHC.Unit.Module.Graph'@ but for the @'ExternalModuleGraph'@ which is +-- stored in the EPS. +module GHC.Unit.Module.External.Graph + ( -- * External Module Graph + -- + -- | A module graph for the EPS. + ExternalModuleGraph, ExternalGraphNode(..) + , ExternalKey(..), emptyExternalModuleGraph + , emgNodeKey, emgNodeDeps + + -- * Extending + -- + -- | The @'ExternalModuleGraph'@ is a structure which is incrementally + -- updated as the 'ExternalPackageState' (EPS) is updated (when an iface is + -- loaded, in 'loadInterface'). + -- + -- Therefore, there is an operation for extending the 'ExternalModuleGraph', + -- unlike @'GHC.Unit.Module.Graph.ModuleGraph'@, which is constructed once + -- during downsweep and never altered (since all of the home units + -- dependencies are fully known then). + , extendExternalModuleGraph + + -- * Loading + -- + -- | As mentioned in the top-level haddocks for the + -- 'extendExternalModuleGraph', the external module graph is incrementally + -- updated as interfaces are loaded. This module graph keeps an additional + -- cache registering which modules have already been fully loaded. + -- + -- This cache is necessary to quickly check when a full-transitive-closure + -- reachability query would be valid for some module. + -- + -- Such a query may be invalid if ran on a module in the + -- 'ExternalModuleGraph' whose dependencies have /not yet/ been fully loaded + -- into the EPS. + -- (Recall that interfaces are lazily loaded, and the 'ExternalModuleGraph' + -- is only incrementally updated). + -- + -- To guarantee the full transitive closure of a given module is completely + -- loaded into the EPS (i.e. all interfaces of the modules below this one + -- are also loaded), see @'loadHomePackageInterfacesBelow'@ in + -- 'GHC.Iface.Load'. + , isFullyLoadedModule + , setFullyLoadedModule + + -- * Reachability + -- + -- | Fast reachability queries on the external module graph. Similar to + -- reachability queries on 'GHC.Unit.Module.Graph'. + , emgReachable + , emgReachableMany + ) where import GHC.Prelude import GHC.Unit.Module.Graph @@ -9,36 +60,48 @@ import GHC.Data.Graph.Directed import qualified Data.Map as M import qualified Data.Set as S import Data.Maybe +import GHC.Utils.Outputable +import GHC.Unit.Types (UnitId) -data ExternalKey = ExternalModuleKey ModNodeKeyWithUid deriving (Eq, Ord) +-------------------------------------------------------------------------------- +-- * Main +-------------------------------------------------------------------------------- -data ExternalGraphNode = NodeHomePackage { - externalNodeKey :: ModNodeKeyWithUid - , externalNodeDeps :: [ExternalKey] } - -externalKey :: ExternalGraphNode -> ExternalKey -externalKey (NodeHomePackage k _) = ExternalModuleKey k +data ExternalModuleGraph = ExternalModuleGraph + { external_nodes :: [ExternalGraphNode] + , external_trans :: (ReachabilityIndex ExternalNode, ExternalKey -> Maybe ExternalNode) + , external_fully_loaded :: !(S.Set ExternalKey) } type ExternalNode = Node Int ExternalGraphNode -data ExternalModuleGraph = ExternalModuleGraph - { external_nodes :: [ExternalGraphNode] - , external_trans :: (ReachabilityIndex ExternalNode, ExternalKey -> Maybe ExternalNode) - , external_fully_loaded :: !(S.Set ExternalKey) } +data ExternalGraphNode + -- | A node for a home package module that is inserted in the EPS. + -- + -- INVARIANT: This type of node can only ever exist if compiling in one-shot + -- mode. In --make mode, it is imperative that the EPS doesn't have any home + -- package modules ever. + = NodeHomePackage + { externalNodeKey :: ModNodeKeyWithUid + , externalNodeDeps :: [ExternalKey] } + -- | A node for packages with at least one module loaded in the EPS. + -- + -- Edge from A to NodeExternalPackage p when A has p as a direct package + -- dependency. + | NodeExternalPackage + { externalPkgKey :: UnitId + , externalPkgDeps :: [UnitId] + } + +data ExternalKey + = ExternalModuleKey ModNodeKeyWithUid + | ExternalPackageKey UnitId + deriving (Eq, Ord) emptyExternalModuleGraph :: ExternalModuleGraph emptyExternalModuleGraph = ExternalModuleGraph [] (graphReachability emptyGraph, const Nothing) S.empty -extendExternalModuleGraph :: ExternalGraphNode -> ExternalModuleGraph -> ExternalModuleGraph -extendExternalModuleGraph node graph = mkExternalModuleGraph (node : external_nodes graph) (external_fully_loaded graph) - -setFullyLoadedModule :: ExternalKey -> ExternalModuleGraph -> ExternalModuleGraph -setFullyLoadedModule key graph = graph { external_fully_loaded = S.insert key (external_fully_loaded graph)} - -isFullyLoadedModule :: ExternalKey -> ExternalModuleGraph -> Bool -isFullyLoadedModule key graph = S.member key (external_fully_loaded graph) - mkExternalModuleGraph :: [ExternalGraphNode] -> S.Set ExternalKey -> ExternalModuleGraph +-- romes:todo: does this also need to be defined in terms of extend (like for `ModuleGraph`?) mkExternalModuleGraph nodes loaded = ExternalModuleGraph { external_nodes = nodes @@ -46,9 +109,60 @@ mkExternalModuleGraph nodes loaded = in (graphReachability g, f) , external_fully_loaded = loaded } +-- | Get the dependencies of an 'ExternalNode' +emgNodeDeps :: ExternalGraphNode -> [ExternalKey] +emgNodeDeps = \case + NodeHomePackage _ dps -> dps + NodeExternalPackage _ dps -> map ExternalPackageKey dps + +-- | The graph key for a given node +emgNodeKey :: ExternalGraphNode -> ExternalKey +emgNodeKey (NodeHomePackage k _) = ExternalModuleKey k +emgNodeKey (NodeExternalPackage k _) = ExternalPackageKey k + +-------------------------------------------------------------------------------- +-- * Extending +-------------------------------------------------------------------------------- + +extendExternalModuleGraph :: ExternalGraphNode -> ExternalModuleGraph -> ExternalModuleGraph +extendExternalModuleGraph node graph = mkExternalModuleGraph (node : external_nodes graph) (external_fully_loaded graph) + +-------------------------------------------------------------------------------- +-- * Loading +-------------------------------------------------------------------------------- + +isFullyLoadedModule :: ExternalKey -> ExternalModuleGraph -> Bool +isFullyLoadedModule key graph = S.member key (external_fully_loaded graph) + +setFullyLoadedModule :: ExternalKey -> ExternalModuleGraph -> ExternalModuleGraph +setFullyLoadedModule key graph = graph { external_fully_loaded = S.insert key (external_fully_loaded graph)} + +-------------------------------------------------------------------------------- +-- * Reachability +-------------------------------------------------------------------------------- + +-- | Return all nodes reachable from the given key, also known as its full +-- transitive closure. +-- +-- @Nothing@ if the key couldn't be found in the graph. +emgReachable :: ExternalModuleGraph -> ExternalKey -> Maybe [ExternalGraphNode] +emgReachable mg nk = map node_payload <$> modules_below where + (td_map, lookup_node) = external_trans mg + modules_below = + allReachable td_map <$> lookup_node nk + +-- | Return all nodes reachable from all of the given keys. +emgReachableMany :: ExternalModuleGraph -> [ExternalKey] -> [ExternalGraphNode] +emgReachableMany mg nk = map node_payload modules_below where + (td_map, lookup_node) = external_trans mg + modules_below = + allReachableMany td_map (mapMaybe lookup_node nk) + +-------------------------------------------------------------------------------- +-- * Internals +-------------------------------------------------------------------------------- + -- | Turn a list of graph nodes into an efficient queriable graph. --- The first boolean parameter indicates whether nodes corresponding to hs-boot files --- should be collapsed into their relevant hs nodes. externalGraphNodes :: [ExternalGraphNode] -> (Graph ExternalNode, ExternalKey -> Maybe ExternalNode) @@ -60,7 +174,7 @@ externalGraphNodes summaries = where go (s, key) = DigraphNode s key $ out_edge_keys $ - (externalNodeDeps s) + (emgNodeDeps s) numbered_summaries = zip summaries [1..] @@ -72,10 +186,24 @@ externalGraphNodes summaries = node_map :: M.Map ExternalKey ExternalNode node_map = - M.fromList [ (externalKey s, node) + M.fromList [ (emgNodeKey s, node) | node <- nodes , let s = node_payload node ] out_edge_keys :: [ExternalKey] -> [Int] out_edge_keys = mapMaybe lookup_key + +instance Outputable ExternalGraphNode where + ppr = \case + NodeHomePackage mk ds -> text "NodeHomePackage" <+> ppr mk <+> ppr ds + NodeExternalPackage mk ds -> text "NodeExternalPackage" <+> ppr mk <+> ppr ds + +instance Outputable ExternalKey where + ppr = \case + ExternalModuleKey mk -> text "ExternalModuleKey" <+> ppr mk + ExternalPackageKey uid -> text "ExternalPackageKey" <+> ppr uid + +instance Outputable ExternalModuleGraph where + ppr ExternalModuleGraph{external_nodes, external_fully_loaded} + = text "ExternalModuleGraph" <+> ppr external_nodes <+> ppr external_fully_loaded ===================================== compiler/GHC/Unit/Module/Graph.hs ===================================== @@ -301,6 +301,8 @@ mgMember graph k = isJust $ snd (mg_graph graph) k -------------------------------------------------------------------------------- -- | Return all nodes reachable from the given 'NodeKey'. +-- +-- @Nothing@ if the key couldn't be found in the graph. mgReachable :: ModuleGraph -> NodeKey -> Maybe [ModuleGraphNode] mgReachable mg nk = map summaryNodeSummary <$> modules_below where (td_map, lookup_node) = mg_graph mg View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a4db8f7223054067d1c3aa25b2eb637cd3605675...2ddafd2675385742880718683be57df7aa39d587 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/a4db8f7223054067d1c3aa25b2eb637cd3605675...2ddafd2675385742880718683be57df7aa39d587 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 17:05:50 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Fri, 20 Dec 2024 12:05:50 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] Insert package nodes in external module graph Message-ID: <6765a3eeebc56_504754a600193b2@gitlab.mail> Rodrigo Mesquita pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: 7f71d0fe by Rodrigo Mesquita at 2024-12-20T17:05:38+00:00 Insert package nodes in external module graph (For every interface loaded) - - - - - 2 changed files: - compiler/GHC/Iface/Load.hs - compiler/GHC/Unit/Module/External/Graph.hs Changes: ===================================== compiler/GHC/Iface/Load.hs ===================================== @@ -580,12 +580,20 @@ loadInterface doc_str mod from ; purged_hsc_env <- getTopEnv ; let direct_deps = map (uncurry (flip ModNodeKeyWithUid)) $ (Set.toList (dep_direct_mods $ mi_deps iface)) + ; let direct_pkg_deps = Set.toList (dep_direct_pkgs $ mi_deps iface) ; let !module_graph_key = pprTrace "module_graph_on_load" (ppr (eps_module_graph eps)) $ - if moduleUnitId mod `elem` hsc_all_home_unit_ids hsc_env -- can only happen in oneshot mode + if moduleUnitId mod `elem` hsc_all_home_unit_ids hsc_env + --- ^ home unit mods in eps can only happen in oneshot mode then Just $ NodeHomePackage (miKey iface) (map ExternalModuleKey direct_deps) else Nothing - -- ; let !module_graph_external_pkgs_nods = _ - -- ROMES:TODO: Fairly sure we need to insert package nodes somewhere here. + ; let !module_graph_pkg_key = do + let pkg_key = toUnitId $ moduleUnit (mi_module iface) + pkg_node <- emgLookupKey (ExternalPackageKey pkg_key) (eps_module_graph eps) + case pkg_node of + NodeHomePackage{} -> panic "ExternalPackageKey lookup should never return a NodeHomePackage node" + NodeExternalPackage _ deps_uids -> pure $ + NodeExternalPackage pkg_key (deps_uids ++ direct_pkg_deps) + ; let final_iface = iface & set_mi_decls (panic "No mi_decls in PIT") @@ -627,9 +635,14 @@ loadInterface doc_str mod from eps_iface_bytecode = add_bytecode (eps_iface_bytecode eps), eps_rule_base = extendRuleBaseList (eps_rule_base eps) new_eps_rules, - eps_module_graph = case module_graph_key of - Just k -> extendExternalModuleGraph k (eps_module_graph eps) - Nothing -> eps_module_graph eps, + eps_module_graph = + let eps_graph' = case module_graph_key of + Just k -> extendExternalModuleGraph k (eps_module_graph eps) + Nothing -> eps_module_graph eps + eps_graph'' = case module_graph_pkg_key of + Just k -> extendExternalModuleGraph k eps_graph' + Nothing -> eps_graph' + in eps_graph'', eps_complete_matches = eps_complete_matches eps ++ new_eps_complete_matches, eps_inst_env = extendInstEnvList (eps_inst_env eps) ===================================== compiler/GHC/Unit/Module/External/Graph.hs ===================================== @@ -8,7 +8,7 @@ module GHC.Unit.Module.External.Graph -- | A module graph for the EPS. ExternalModuleGraph, ExternalGraphNode(..) , ExternalKey(..), emptyExternalModuleGraph - , emgNodeKey, emgNodeDeps + , emgNodeKey, emgNodeDeps, emgLookupKey -- * Extending -- @@ -120,6 +120,10 @@ emgNodeKey :: ExternalGraphNode -> ExternalKey emgNodeKey (NodeHomePackage k _) = ExternalModuleKey k emgNodeKey (NodeExternalPackage k _) = ExternalPackageKey k +-- | Lookup a key in the EMG. +emgLookupKey :: ExternalKey -> ExternalModuleGraph -> Maybe ExternalGraphNode +emgLookupKey k emg = node_payload <$> (snd (external_trans emg)) k + -------------------------------------------------------------------------------- -- * Extending -------------------------------------------------------------------------------- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7f71d0fe5ca57e98077c155b83cbd97f6fde70e0 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7f71d0fe5ca57e98077c155b83cbd97f6fde70e0 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 17:10:23 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Fri, 20 Dec 2024 12:10:23 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] Fix haddock warning Message-ID: <6765a4ff22224_504754a5ec2248d@gitlab.mail> Rodrigo Mesquita pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: 8cc42308 by Rodrigo Mesquita at 2024-12-20T17:10:08+00:00 Fix haddock warning - - - - - 1 changed file: - compiler/GHC/Unit/Module/Graph.hs Changes: ===================================== compiler/GHC/Unit/Module/Graph.hs ===================================== @@ -151,10 +151,10 @@ data ModuleGraph = ModuleGraph -- so that a lot of work is not repeated whenever the transitive -- dependencies need to be calculated (for example, hptInstances). -- - -- * `mg_graph` is a reachability index constructed from a module + --- - `mg_graph` is a reachability index constructed from a module -- graph /with/ boot nodes (which make the graph acyclic), and -- - -- * `mg_loop_graph` is a reachability index for the graph /without/ + --- * `mg_loop_graph` is a reachability index for the graph /without/ -- hs-boot nodes, that may be cyclic. } View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8cc42308df1f0f3cef88e6fc1760cde4261109e5 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8cc42308df1f0f3cef88e6fc1760cde4261109e5 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 17:15:24 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Fri, 20 Dec 2024 12:15:24 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] disable traces Message-ID: <6765a62c9882e_50477bd43c22783@gitlab.mail> Rodrigo Mesquita pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: e1528985 by Rodrigo Mesquita at 2024-12-20T17:15:16+00:00 disable traces - - - - - 1 changed file: - compiler/GHC/Iface/Load.hs Changes: ===================================== compiler/GHC/Iface/Load.hs ===================================== @@ -581,7 +581,7 @@ loadInterface doc_str mod from ; let direct_deps = map (uncurry (flip ModNodeKeyWithUid)) $ (Set.toList (dep_direct_mods $ mi_deps iface)) ; let direct_pkg_deps = Set.toList (dep_direct_pkgs $ mi_deps iface) - ; let !module_graph_key = pprTrace "module_graph_on_load" (ppr (eps_module_graph eps)) $ + ; let !module_graph_key = if moduleUnitId mod `elem` hsc_all_home_unit_ids hsc_env --- ^ home unit mods in eps can only happen in oneshot mode then Just $ NodeHomePackage (miKey iface) (map ExternalModuleKey direct_deps) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e1528985b4bcc6c49492ab266a8d4909dd37c2cf -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e1528985b4bcc6c49492ab266a8d4909dd37c2cf You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 19:11:02 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Fri, 20 Dec 2024 14:11:02 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] 2 commits: fix external module graph extending Message-ID: <6765c146aecb_504713ca86030789@gitlab.mail> Rodrigo Mesquita pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: 593a6149 by Rodrigo Mesquita at 2024-12-20T18:18:12+00:00 fix external module graph extending - - - - - d8599307 by Rodrigo Mesquita at 2024-12-20T19:10:53+00:00 Fixes wip - - - - - 4 changed files: - compiler/GHC/Iface/Load.hs - compiler/GHC/Linker/Deps.hs - compiler/GHC/Linker/Loader.hs - compiler/GHC/Unit/Module/External/Graph.hs Changes: ===================================== compiler/GHC/Iface/Load.hs ===================================== @@ -435,12 +435,12 @@ loadHomePackageInterfacesBelow msg (Just home_unit) mods = do dflags <- getDynFlags let ctx = initSDocContext dflags defaultUserStyle - forM_ mods $ \mod -> do + forM_ mods $ \mod -> pprTrace "modsloadhomepkgbeloW" (ppr mod) $ do graph <- eps_module_graph <$> getEps let key = ExternalModuleKey $ ModNodeKeyWithUid (GWIB (moduleName mod) NotBoot) (moduleUnitId mod) - if isFullyLoadedModule key graph + if pprTrace "==============" (ppr graph) $ isFullyLoadedModule key graph then return () else do iface <- withIfaceErr ctx $ @@ -454,10 +454,6 @@ loadHomePackageInterfacesBelow msg (Just home_unit) mods = do -- dependencies of that. Hence we need to traverse the dependency -- tree recursively. See bug #936, testcase ghci/prog007. - -- RM:TODO: WHAT WAS THIS DOING BEFORE IN FOLLOW_DEPS? - -- (was in follow_deps) - -- when (mi_boot iface == IsBoot) $ link_boot_mod_error mod - let deps = mi_deps iface mod_deps = dep_direct_mods deps @@ -506,10 +502,11 @@ loadInterface doc_str mod from -- Check whether we have the interface already ; hsc_env <- getTopEnv + ; eps <- liftIO $ hscEPS hsc_env ; let mhome_unit = ue_homeUnit (hsc_unit_env hsc_env) ; case lookupIfaceByModule hug (eps_PIT eps) mod of { Just iface - -> return (Succeeded iface) ; -- Already loaded + -> pprTrace "HWATTTT" (ppr (mi_module iface) <+> ppr (eps_module_graph eps)) $ return (Succeeded iface) ; -- Already loaded _ -> do { -- READ THE MODULE IN @@ -580,19 +577,23 @@ loadInterface doc_str mod from ; purged_hsc_env <- getTopEnv ; let direct_deps = map (uncurry (flip ModNodeKeyWithUid)) $ (Set.toList (dep_direct_mods $ mi_deps iface)) - ; let direct_pkg_deps = Set.toList (dep_direct_pkgs $ mi_deps iface) - ; let !module_graph_key = + ; let direct_pkg_deps = dep_direct_pkgs $ mi_deps iface + ; let !module_graph_key = pprTrace "module_graph_on_load" (ppr (eps_module_graph eps)) $ if moduleUnitId mod `elem` hsc_all_home_unit_ids hsc_env --- ^ home unit mods in eps can only happen in oneshot mode then Just $ NodeHomePackage (miKey iface) (map ExternalModuleKey direct_deps) else Nothing - ; let !module_graph_pkg_key = do + ; let !module_graph_pkg_key = + -- ROMES:TODO: This doesn't work as expected. Insertions on the + -- graph don't override previous nodes, they just create new + -- ones. We get multiple duplicate nodes with incomplete dependencies each. let pkg_key = toUnitId $ moduleUnit (mi_module iface) - pkg_node <- emgLookupKey (ExternalPackageKey pkg_key) (eps_module_graph eps) - case pkg_node of - NodeHomePackage{} -> panic "ExternalPackageKey lookup should never return a NodeHomePackage node" - NodeExternalPackage _ deps_uids -> pure $ - NodeExternalPackage pkg_key (deps_uids ++ direct_pkg_deps) + in case emgLookupKey (ExternalPackageKey pkg_key) (eps_module_graph eps) of + Nothing -> NodeExternalPackage pkg_key direct_pkg_deps + Just pkg_node -> case pkg_node of + NodeHomePackage{} -> panic "ExternalPackageKey lookup should never return a NodeHomePackage node" + NodeExternalPackage _ deps_uids -> + NodeExternalPackage pkg_key (deps_uids `Set.union` direct_pkg_deps) ; let final_iface = iface @@ -639,9 +640,7 @@ loadInterface doc_str mod from let eps_graph' = case module_graph_key of Just k -> extendExternalModuleGraph k (eps_module_graph eps) Nothing -> eps_module_graph eps - eps_graph'' = case module_graph_pkg_key of - Just k -> extendExternalModuleGraph k eps_graph' - Nothing -> eps_graph' + eps_graph'' = extendExternalModuleGraph module_graph_pkg_key eps_graph' in eps_graph'', eps_complete_matches = eps_complete_matches eps ++ new_eps_complete_matches, ===================================== compiler/GHC/Linker/Deps.hs ===================================== @@ -44,6 +44,7 @@ import GHC.Iface.Errors.Types import GHC.Utils.Misc import GHC.Unit.Home +import GHC.Unit.External (ExternalPackageState, eps_module_graph, eps_PIT) import GHC.Data.Maybe import Control.Applicative @@ -54,7 +55,7 @@ import System.FilePath import System.Directory import GHC.Utils.Monad (mapMaybeM) import Data.Either (partitionEithers) -import Data.Bifunctor (Bifunctor(..)) +import Control.Monad (forM) data LinkDepsOpts = LinkDepsOpts { ldObjSuffix :: !String -- ^ Suffix of .o files @@ -69,8 +70,8 @@ data LinkDepsOpts = LinkDepsOpts , ldFinderCache :: !FinderCache , ldFinderOpts :: !FinderOpts , ldLoadByteCode :: !(Module -> IO (Maybe Linkable)) - , ldLoadHomeIfacesBelow :: !((Module -> SDoc) -> Maybe HomeUnit {- current home unit -} - -> [Module] -> IO ExternalModuleGraph) + , ldLoadHomeIfacesBelow :: !((Module -> SDoc) -> Maybe HomeUnit {-^ current home unit -} + -> [Module] -> IO ExternalPackageState {-^ EPS after loading -}) } data LinkDeps = LinkDeps @@ -116,8 +117,8 @@ get_link_deps opts pls maybe_normal_osuf span mods = do -- 1. Find the dependent home-pkg-modules/packages from each iface -- (omitting modules from the interactive package, which is already linked) - (all_home_mods, pkgs_s) <- get_reachable_nodes opts relevant_mods - mods_s <- mapMaybeM get_mod_info all_home_mods + (mods_s, pkgs_s) <- get_reachable_nodes opts relevant_mods + pprTraceM "Linkable deps:" (ppr relevant_mods $$ ppr mods_s $$ ppr pkgs_s) let -- 2. Exclude ones already linked @@ -144,24 +145,9 @@ get_link_deps opts pls maybe_normal_osuf span mods = do , ldNeededUnits = pkgs_s } where - unit_env = ldUnitEnv opts - + unit_env = ldUnitEnv opts relevant_mods = filterOut isInteractiveModule mods - get_mod_info (ModNodeKeyWithUid gwib uid) = - case lookupHug (ue_home_unit_graph unit_env) uid (gwib_mod gwib) of - Just hmi -> - let iface = (hm_iface hmi) - in case mi_hsc_src iface of - HsBootFile -> link_boot_mod_error (mi_module iface) - _ -> return $ Just (mi_module iface) - Nothing -> throwProgramError opts $ - text "getLinkDeps: Home module not loaded" <+> ppr (gwib_mod gwib) <+> ppr uid - - link_boot_mod_error mod = throwProgramError opts $ - text "module" <+> ppr mod <+> - text "cannot be linked; it is only available as a boot module" - no_obj :: Outputable a => a -> IO b no_obj mod = dieWith opts span $ text "cannot find object file for module " <> @@ -231,22 +217,32 @@ get_link_deps opts pls maybe_normal_osuf span mods = do pprPanic "Unhydrated core bindings" (ppr wcb_module) -- See Note [Reachability in One-shot mode vs Make mode] -get_reachable_nodes :: LinkDepsOpts -> [Module] -> IO ([ModNodeKeyWithUid], UniqDSet UnitId) +get_reachable_nodes :: LinkDepsOpts -> [Module] -> IO ([Module], UniqDSet UnitId) get_reachable_nodes opts mods -- Reachability on 'ExternalModuleGraph' (for one shot mode) | ldOneShotMode opts = do - emg <- ldLoadHomeIfacesBelow opts msg (ue_homeUnit (ldUnitEnv opts)) mods - go (ExternalModuleKey . mkModuleNk) emgNodeKey (emgReachableMany emg) (map emgProject) - --romes:todo:^ make sure we only get non-boot files out of this. perhaps as - --easy as filtering them out by ModNodeKeyWithUid with is boot information. + eps <- ldLoadHomeIfacesBelow opts msg (ue_homeUnit (ldUnitEnv opts)) mods + let + emg = eps_module_graph eps + get_mod_info_eps (ModNodeKeyWithUid gwib uid) + | Just iface <- lookupModuleEnv (eps_PIT eps) (Module (RealUnit $ Definite uid) (gwib_mod gwib)) + = return iface + | otherwise + = moduleNotLoaded "(in EPS)" gwib uid + + go (ExternalModuleKey . mkModuleNk) emgNodeKey (emgReachableMany emg) (map emgProject) get_mod_info_eps + --romes:todo:^ do we need to make sure we only get non-boot files out of + --this. perhaps as easy as filtering them out by ModNodeKeyWithUid with is + --boot information? -- Reachability on 'ModuleGraph' (for --make mode) | otherwise - = go hmgModKey mkNodeKey (mgReachableLoop hmGraph) (catMaybes . map hmgProject) + = go hmgModKey mkNodeKey (mgReachableLoop hmGraph) (catMaybes . map hmgProject) get_mod_info_hug where + unit_env = ldUnitEnv opts mkModuleNk m = ModNodeKeyWithUid (GWIB (moduleName m) NotBoot) (moduleUnitId m) msg mod = text "need to link module" <+> ppr mod <+> @@ -274,11 +270,31 @@ get_reachable_nodes opts mods -> (node -> key) -> ([key] -> [node]) -> ([key] -> [Either ModNodeKeyWithUid UnitId]) - -> IO ([ModNodeKeyWithUid], UniqDSet UnitId) - go modKey nodeKey manyReachable project + -> (ModNodeKeyWithUid -> IO ModIface) + -> IO ([Module], UniqDSet UnitId) + go modKey nodeKey manyReachable project get_mod_info | let mod_keys = map modKey mods - = pure $ second mkUniqDSet $ partitionEithers $ project $ - mod_keys ++ map nodeKey (manyReachable mod_keys) + = do + let (all_home_mods, pkgs_s) = partitionEithers $ project $ mod_keys ++ map nodeKey (manyReachable mod_keys) + ifaces <- mapM get_mod_info all_home_mods + mods_s <- forM ifaces $ \iface -> case mi_hsc_src iface of + HsBootFile -> link_boot_mod_error (mi_module iface) + _ -> return $ mi_module iface + return (mods_s, mkUniqDSet pkgs_s) + + get_mod_info_hug (ModNodeKeyWithUid gwib uid) + | Just hmi <- lookupHug (ue_home_unit_graph unit_env) uid (gwib_mod gwib) + = return (hm_iface hmi) + | otherwise + = moduleNotLoaded "(in HUG)" gwib uid + + moduleNotLoaded m gwib uid = throwProgramError opts $ + text "getLinkDeps: Home module not loaded" <+> text m <+> ppr (gwib_mod gwib) <+> ppr uid + + link_boot_mod_error mod = throwProgramError opts $ + text "module" <+> ppr mod <+> + text "cannot be linked; it is only available as a boot module" + {- Note [Using Byte Code rather than Object Code for Template Haskell] ===================================== compiler/GHC/Linker/Loader.hs ===================================== @@ -76,7 +76,7 @@ import GHC.Utils.Logger import GHC.Utils.TmpFs import GHC.Unit.Env -import GHC.Unit.External (ExternalPackageState (EPS, eps_iface_bytecode, eps_module_graph)) +import GHC.Unit.External (ExternalPackageState (EPS, eps_iface_bytecode)) import GHC.Unit.Module import GHC.Unit.State as Packages @@ -611,8 +611,8 @@ initLinkDepsOpts hsc_env = opts = do initIfaceCheck (text "loader") hsc_env $ loadHomePackageInterfacesBelow msg hu mods - -- Read the module graph only after `loadHomePackageInterfacesBelow` - eps_module_graph <$> hscEPS hsc_env + -- Read the EPS only after `loadHomePackageInterfacesBelow` + hscEPS hsc_env ldLoadByteCode mod = do EPS {eps_iface_bytecode} <- hscEPS hsc_env ===================================== compiler/GHC/Unit/Module/External/Graph.hs ===================================== @@ -1,4 +1,5 @@ {-# LANGUAGE LambdaCase #-} +{-# LANGUAGE RecordWildCards #-} -- | Like @'GHC.Unit.Module.Graph'@ but for the @'ExternalModuleGraph'@ which is -- stored in the EPS. @@ -59,6 +60,7 @@ import GHC.Data.Graph.Directed.Reachability import GHC.Data.Graph.Directed import qualified Data.Map as M import qualified Data.Set as S +import Data.Bifunctor (first) import Data.Maybe import GHC.Utils.Outputable import GHC.Unit.Types (UnitId) @@ -89,7 +91,7 @@ data ExternalGraphNode -- dependency. | NodeExternalPackage { externalPkgKey :: UnitId - , externalPkgDeps :: [UnitId] + , externalPkgDeps :: S.Set UnitId } data ExternalKey @@ -100,20 +102,11 @@ data ExternalKey emptyExternalModuleGraph :: ExternalModuleGraph emptyExternalModuleGraph = ExternalModuleGraph [] (graphReachability emptyGraph, const Nothing) S.empty -mkExternalModuleGraph :: [ExternalGraphNode] -> S.Set ExternalKey -> ExternalModuleGraph --- romes:todo: does this also need to be defined in terms of extend (like for `ModuleGraph`?) -mkExternalModuleGraph nodes loaded = - ExternalModuleGraph { - external_nodes = nodes - , external_trans = let (g, f) = (externalGraphNodes nodes) - in (graphReachability g, f) - , external_fully_loaded = loaded } - -- | Get the dependencies of an 'ExternalNode' emgNodeDeps :: ExternalGraphNode -> [ExternalKey] emgNodeDeps = \case NodeHomePackage _ dps -> dps - NodeExternalPackage _ dps -> map ExternalPackageKey dps + NodeExternalPackage _ dps -> map ExternalPackageKey $ S.toList dps -- | The graph key for a given node emgNodeKey :: ExternalGraphNode -> ExternalKey @@ -129,7 +122,14 @@ emgLookupKey k emg = node_payload <$> (snd (external_trans emg)) k -------------------------------------------------------------------------------- extendExternalModuleGraph :: ExternalGraphNode -> ExternalModuleGraph -> ExternalModuleGraph -extendExternalModuleGraph node graph = mkExternalModuleGraph (node : external_nodes graph) (external_fully_loaded graph) +extendExternalModuleGraph node ExternalModuleGraph{..} = + ExternalModuleGraph + { external_fully_loaded = external_fully_loaded + , external_nodes = node : external_nodes + , external_trans = first graphReachability $ + externalGraphNodes (node : external_nodes) + } + -------------------------------------------------------------------------------- -- * Loading View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/e1528985b4bcc6c49492ab266a8d4909dd37c2cf...d8599307d8fa6bdd30859e72b7273b723b1bd005 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/e1528985b4bcc6c49492ab266a8d4909dd37c2cf...d8599307d8fa6bdd30859e72b7273b723b1bd005 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 19:16:35 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 20 Dec 2024 14:16:35 -0500 Subject: [Git][ghc/ghc][ghc-9.8] Set RELEASE=NO Message-ID: <6765c293e538f_5047146bd28345d0@gitlab.mail> Ben Gamari pushed to branch ghc-9.8 at Glasgow Haskell Compiler / GHC Commits: 2beabb11 by Ben Gamari at 2024-12-20T14:16:23-05:00 Set RELEASE=NO - - - - - 1 changed file: - configure.ac Changes: ===================================== configure.ac ===================================== @@ -22,7 +22,7 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.8.4], [glasgow-has AC_CONFIG_MACRO_DIRS([m4]) # Set this to YES for a released version, otherwise NO -: ${RELEASE=YES} +: ${RELEASE=NO} # The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line # above. If this is not a released version, then we will append the View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2beabb11ea99dea4ee5146f9b6224191dba3c406 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/2beabb11ea99dea4ee5146f9b6224191dba3c406 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 20:04:16 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 20 Dec 2024 15:04:16 -0500 Subject: [Git][ghc/ghc][wip/boot-lib-testing] check-submodules: initial commit Message-ID: <6765cdc0decf8_50471bc948036573@gitlab.mail> Ben Gamari pushed to branch wip/boot-lib-testing at Glasgow Haskell Compiler / GHC Commits: 853dc572 by Ben Gamari at 2024-12-20T15:04:09-05:00 check-submodules: initial commit - - - - - 9 changed files: - + utils/check-submodules/LICENSE - + utils/check-submodules/app/Main.hs - + utils/check-submodules/check-submodules.cabal - + utils/check-submodules/flake.lock - + utils/check-submodules/flake.nix - + utils/check-submodules/hie.yaml - + utils/check-submodules/src/CheckSubmodules.hs - + utils/check-submodules/src/Hackage.hs - + utils/check-submodules/src/Package.hs Changes: ===================================== utils/check-submodules/LICENSE ===================================== @@ -0,0 +1,30 @@ +Copyright (c) 2024, Ben Gamari + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Ben Gamari nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ===================================== utils/check-submodules/app/Main.hs ===================================== @@ -0,0 +1,13 @@ +module Main (main) where + +import CheckSubmodules +import System.Environment (getArgs) + +main :: IO () +main = do + args <- getArgs + case args of + ["check"] -> check + ["summarize"] -> summarize + ["email"] -> maintainerEmails >>= putStrLn + _ -> fail "invalid mode" ===================================== utils/check-submodules/check-submodules.cabal ===================================== @@ -0,0 +1,41 @@ +cabal-version: 3.0 +name: check-submodules +version: 0.1.0.0 +-- synopsis: +-- description: +homepage: https://gitlab.haskell.org/ghc/ghc +license: BSD-3-Clause +license-file: LICENSE +author: Ben Gamari +maintainer: ben at smart-cactus.org +copyright: (c) 2024 Ben Gamari +category: Development +build-type: Simple +-- extra-source-files: + +common warnings + ghc-options: -Wall + +executable check-submodules + import: warnings + main-is: Main.hs + build-depends: base, + check-submodules + hs-source-dirs: app + default-language: Haskell2010 + +library + import: warnings + exposed-modules: Hackage, CheckSubmodules, Package + build-depends: base, + wreq, + aeson, + bytestring, + text, + transformers, + filepath, + microlens, + containers, + Cabal + hs-source-dirs: src + default-language: Haskell2010 ===================================== utils/check-submodules/flake.lock ===================================== @@ -0,0 +1,58 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1734083684, + "narHash": "sha256-5fNndbndxSx5d+C/D0p/VF32xDiJCJzyOqorOYW4JEo=", + "path": "/nix/store/0xbni69flk8380w0apw4h640n37wn1i9-source", + "rev": "314e12ba369ccdb9b352a4db26ff419f7c49fa84", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} ===================================== utils/check-submodules/flake.nix ===================================== @@ -0,0 +1,26 @@ +{ + description = "GHC boot library linting"; + + inputs.flake-utils.url = "github:numtide/flake-utils"; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; in + { + packages = rec { + check-submodules = pkgs.haskellPackages.callCabal2nix "generate-ci" ./. {}; + default = check-submodules; + }; + + devShells.default = self.packages.${system}.default.env; + + apps = rec { + check-submodules = flake-utils.lib.mkApp { + drv = self.packages.${system}.check-submodules; + }; + default = check-submodules; + }; + } + ); +} + ===================================== utils/check-submodules/hie.yaml ===================================== @@ -0,0 +1,2 @@ +cradle: + cabal: ===================================== utils/check-submodules/src/CheckSubmodules.hs ===================================== @@ -0,0 +1,104 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TupleSections #-} + +module CheckSubmodules + ( check + , summarize + , maintainerEmails + , packages + ) where + +import Control.Monad (forM_) +import Control.Monad.IO.Class +import Control.Monad.Trans.Writer +import Data.Function (on) +import Data.List (intercalate, sort, nubBy) +import Data.Map.Strict qualified as M +import Data.Text qualified as T +import Data.Version +import Distribution.Types.PackageName qualified as C +import System.Exit + +import Hackage (getVersions, PackageState (..)) +import Package + +isPvpCompatible :: Version -> Version -> Bool +isPvpCompatible a b = + take 2 (versionBranch a) == take 2 (versionBranch b) + +packages :: [Package] +packages = + [ Package "file-io" "libraries/file-io" + , Package "hsc2hs" "utils/hsc2hs" + , Package "Cabal" "libraries/Cabal/Cabal" + , Package "Cabal-syntax" "libraries/Cabal/Cabal-syntax" + , Package "bytestring" "libraries/bytestring" + , Package "binary" "libraries/binary" + , Package "array" "libraries/array" + , Package "containers" "libraries/containers/containers" + , Package "deepseq" "libraries/deepseq" + , Package "directory" "libraries/directory" + , Package "filepath" "libraries/filepath" + , Package "haskeline" "libraries/haskeline" + , Package "hpc" "libraries/hpc" + , Package "mtl" "libraries/mtl" + , Package "parsec" "libraries/parsec" + , Package "pretty" "libraries/pretty" + , Package "process" "libraries/process" + , Package "terminfo" "libraries/terminfo" + , Package "text" "libraries/text" + , Package "time" "libraries/time" + , Package "unix" "libraries/unix" + , Package "exceptions" "libraries/exceptions" + , Package "semaphore-compat" "libraries/semaphore-compat" + , Package "stm" "libraries/stm" + , Package "Win32" "libraries/Win32" + , Package "xhtml" "libraries/xhtml" + ] + +checkPackage :: Package -> WriterT [String] IO () +checkPackage pkg = do + v <- liftIO $ getPackageVersion pkg + available <- liftIO $ getVersions (pkgName pkg) + + case M.lookup v available of + Nothing -> tell ["Version not on Hackage"] + Just Deprecated -> tell ["Version has been deprecated"] + Just Normal -> return () + + let compatible = [ v' + | v' <- M.keys available -- versions available via Hackage... + , v' > v -- that are newer than the submodule... + , v' `isPvpCompatible` v -- and are compatible with the submodule + ] + case compatible of + [] -> return () + vs -> tell ["At " <> showVersion v <> " but version " <> showVersion (maximum vs) <> " is available"] + + return () + +formatError :: Package -> String -> String +formatError pkg err = + pkgPath pkg <> ": " <> err + +summarizeSubmodules :: [Package] -> IO () +summarizeSubmodules pkgs = forM_ pkgs $ \pkg -> do + v <- getPackageVersion pkg + putStrLn $ " " <> C.unPackageName (pkgName pkg) <> " " <> showVersion v <> " @ " <> pkgPath pkg + +maintainerEmails :: IO String +maintainerEmails = do + maintainers <- concat <$> mapM getPackageMaintainers packages + return $ intercalate ", " $ map (T.unpack . contactRecipient) $ nubBy ((==) `on` contactEmail) $ sort maintainers + +summarize :: IO () +summarize = + summarizeSubmodules packages + +check :: IO () +check = do + errs <- mapM (\pkg -> map (pkg, ) <$> execWriterT (checkPackage pkg)) packages + mapM_ (putStrLn . uncurry formatError) (concat errs) + exitWith $ if null errs then ExitSuccess else ExitFailure 1 + ===================================== utils/check-submodules/src/Hackage.hs ===================================== @@ -0,0 +1,32 @@ +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE OverloadedStrings #-} + +module Hackage + ( PackageState(..) + , getVersions + ) where + +import qualified Data.Map.Strict as M +import Lens.Micro +import Network.Wreq +import Distribution.Types.PackageName +import qualified Data.Aeson as JSON +import Data.Version + +data PackageState = Normal | Deprecated + deriving (Show) + +instance JSON.FromJSON PackageState where + parseJSON = JSON.withText "package state" $ \case + "normal" -> pure Normal + "deprecated" -> pure Deprecated + _ -> fail "unknown PackageState" + +getVersions :: PackageName -> IO (M.Map Version PackageState) +getVersions pn = do + r <- asJSON =<< getWith opts url + maybe (fail "getVersions: failed") pure (r ^? responseBody) + where + opts = defaults & header "Accept" .~ ["application/json"] + url = "https://hackage.haskell.org/package/" <> unPackageName pn + ===================================== utils/check-submodules/src/Package.hs ===================================== @@ -0,0 +1,61 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} + +module Package + ( Contact(..) + , parseContact + , contactRecipient + + , Package(..) + , getPackageVersion + , getPackageMaintainers + ) where + +import Data.ByteString qualified as BS +import Data.Text qualified as T +import Data.Version +import Distribution.PackageDescription.Parsec qualified as C +import Distribution.Types.GenericPackageDescription qualified as C +import Distribution.Types.PackageDescription qualified as C +import Distribution.Types.PackageId qualified as C +import Distribution.Types.PackageName (PackageName) +import Distribution.Types.PackageName qualified as C +import Distribution.Types.Version qualified as C +import Distribution.Utils.ShortText qualified as C +import System.FilePath + +data Contact = Contact { contactName, contactEmail :: T.Text } + deriving (Eq, Ord, Show) + +parseContact :: T.Text -> Contact +parseContact t + | '<' `T.elem` t = + let (name,email) = T.break (== '<') t + in Contact (T.strip name) (T.strip $ T.takeWhile (/= '>') $ T.drop 1 email) + | otherwise = Contact "" t + +contactRecipient :: Contact -> T.Text +contactRecipient (Contact name email) + | T.null name = email + | otherwise = name <> " <" <> email <> ">" + +data Package = Package { pkgName :: PackageName + , pkgPath :: FilePath + } + +getPackageDescription :: Package -> IO C.PackageDescription +getPackageDescription pkg = do + Just gpd <- C.parseGenericPackageDescriptionMaybe <$> BS.readFile (pkgPath pkg C.unPackageName (pkgName pkg) <.> "cabal") + return $ C.packageDescription gpd + +getPackageMaintainers :: Package -> IO [Contact] +getPackageMaintainers pkg = + map (parseContact . T.strip . T.filter (/= '\n')) . T.splitOn "," + . T.pack . C.fromShortText . C.maintainer + <$> getPackageDescription pkg + +getPackageVersion :: Package -> IO Version +getPackageVersion pkg = + Data.Version.makeVersion . C.versionNumbers . C.pkgVersion . C.package + <$> getPackageDescription pkg + View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/853dc572de9e6bc5a74108fba2030558277b466d -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/853dc572de9e6bc5a74108fba2030558277b466d You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 20:09:30 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 20 Dec 2024 15:09:30 -0500 Subject: [Git][ghc/ghc][wip/boot-lib-testing] check-submodules: initial commit Message-ID: <6765cefab4413_50471d0d238369e2@gitlab.mail> Ben Gamari pushed to branch wip/boot-lib-testing at Glasgow Haskell Compiler / GHC Commits: 4f703ff5 by Ben Gamari at 2024-12-20T15:09:20-05:00 check-submodules: initial commit - - - - - 10 changed files: - + utils/check-submodules/LICENSE - + utils/check-submodules/README.mkd - + utils/check-submodules/app/Main.hs - + utils/check-submodules/check-submodules.cabal - + utils/check-submodules/flake.lock - + utils/check-submodules/flake.nix - + utils/check-submodules/hie.yaml - + utils/check-submodules/src/CheckSubmodules.hs - + utils/check-submodules/src/Hackage.hs - + utils/check-submodules/src/Package.hs Changes: ===================================== utils/check-submodules/LICENSE ===================================== @@ -0,0 +1,30 @@ +Copyright (c) 2024, Ben Gamari + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Ben Gamari nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ===================================== utils/check-submodules/README.mkd ===================================== @@ -0,0 +1,16 @@ +# check-submodules + +This is a utilities used in GHC CI to verify the consistency and +up-to-date-ness of GHC's boot library dependencies. Specifically +we verify that: + + * the referenced commits are released on Hackage + * that the Hackage version has not been deprecated + * that there is not a more recent version in the same major series + +## Usage + +In the GHC tree: +```bash +nix run utils/check-submodules# +``` ===================================== utils/check-submodules/app/Main.hs ===================================== @@ -0,0 +1,13 @@ +module Main (main) where + +import CheckSubmodules +import System.Environment (getArgs) + +main :: IO () +main = do + args <- getArgs + case args of + ["check"] -> check + ["summarize"] -> summarize + ["email"] -> maintainerEmails >>= putStrLn + _ -> fail "invalid mode" ===================================== utils/check-submodules/check-submodules.cabal ===================================== @@ -0,0 +1,41 @@ +cabal-version: 3.0 +name: check-submodules +version: 0.1.0.0 +-- synopsis: +-- description: +homepage: https://gitlab.haskell.org/ghc/ghc +license: BSD-3-Clause +license-file: LICENSE +author: Ben Gamari +maintainer: ben at smart-cactus.org +copyright: (c) 2024 Ben Gamari +category: Development +build-type: Simple +-- extra-source-files: + +common warnings + ghc-options: -Wall + +executable check-submodules + import: warnings + main-is: Main.hs + build-depends: base, + check-submodules + hs-source-dirs: app + default-language: Haskell2010 + +library + import: warnings + exposed-modules: Hackage, CheckSubmodules, Package + build-depends: base, + wreq, + aeson, + bytestring, + text, + transformers, + filepath, + microlens, + containers, + Cabal + hs-source-dirs: src + default-language: Haskell2010 ===================================== utils/check-submodules/flake.lock ===================================== @@ -0,0 +1,58 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1734083684, + "narHash": "sha256-5fNndbndxSx5d+C/D0p/VF32xDiJCJzyOqorOYW4JEo=", + "path": "/nix/store/0xbni69flk8380w0apw4h640n37wn1i9-source", + "rev": "314e12ba369ccdb9b352a4db26ff419f7c49fa84", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} ===================================== utils/check-submodules/flake.nix ===================================== @@ -0,0 +1,26 @@ +{ + description = "GHC boot library linting"; + + inputs.flake-utils.url = "github:numtide/flake-utils"; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; in + { + packages = rec { + check-submodules = pkgs.haskellPackages.callCabal2nix "generate-ci" ./. {}; + default = check-submodules; + }; + + devShells.default = self.packages.${system}.default.env; + + apps = rec { + check-submodules = flake-utils.lib.mkApp { + drv = self.packages.${system}.check-submodules; + }; + default = check-submodules; + }; + } + ); +} + ===================================== utils/check-submodules/hie.yaml ===================================== @@ -0,0 +1,2 @@ +cradle: + cabal: ===================================== utils/check-submodules/src/CheckSubmodules.hs ===================================== @@ -0,0 +1,104 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TupleSections #-} + +module CheckSubmodules + ( check + , summarize + , maintainerEmails + , packages + ) where + +import Control.Monad (forM_) +import Control.Monad.IO.Class +import Control.Monad.Trans.Writer +import Data.Function (on) +import Data.List (intercalate, sort, nubBy) +import Data.Map.Strict qualified as M +import Data.Text qualified as T +import Data.Version +import Distribution.Types.PackageName qualified as C +import System.Exit + +import Hackage (getVersions, PackageState (..)) +import Package + +isPvpCompatible :: Version -> Version -> Bool +isPvpCompatible a b = + take 2 (versionBranch a) == take 2 (versionBranch b) + +packages :: [Package] +packages = + [ Package "file-io" "libraries/file-io" + , Package "hsc2hs" "utils/hsc2hs" + , Package "Cabal" "libraries/Cabal/Cabal" + , Package "Cabal-syntax" "libraries/Cabal/Cabal-syntax" + , Package "bytestring" "libraries/bytestring" + , Package "binary" "libraries/binary" + , Package "array" "libraries/array" + , Package "containers" "libraries/containers/containers" + , Package "deepseq" "libraries/deepseq" + , Package "directory" "libraries/directory" + , Package "filepath" "libraries/filepath" + , Package "haskeline" "libraries/haskeline" + , Package "hpc" "libraries/hpc" + , Package "mtl" "libraries/mtl" + , Package "parsec" "libraries/parsec" + , Package "pretty" "libraries/pretty" + , Package "process" "libraries/process" + , Package "terminfo" "libraries/terminfo" + , Package "text" "libraries/text" + , Package "time" "libraries/time" + , Package "unix" "libraries/unix" + , Package "exceptions" "libraries/exceptions" + , Package "semaphore-compat" "libraries/semaphore-compat" + , Package "stm" "libraries/stm" + , Package "Win32" "libraries/Win32" + , Package "xhtml" "libraries/xhtml" + ] + +checkPackage :: Package -> WriterT [String] IO () +checkPackage pkg = do + v <- liftIO $ getPackageVersion pkg + available <- liftIO $ getVersions (pkgName pkg) + + case M.lookup v available of + Nothing -> tell ["Version not on Hackage"] + Just Deprecated -> tell ["Version has been deprecated"] + Just Normal -> return () + + let compatible = [ v' + | v' <- M.keys available -- versions available via Hackage... + , v' > v -- that are newer than the submodule... + , v' `isPvpCompatible` v -- and are compatible with the submodule + ] + case compatible of + [] -> return () + vs -> tell ["At " <> showVersion v <> " but version " <> showVersion (maximum vs) <> " is available"] + + return () + +formatError :: Package -> String -> String +formatError pkg err = + pkgPath pkg <> ": " <> err + +summarizeSubmodules :: [Package] -> IO () +summarizeSubmodules pkgs = forM_ pkgs $ \pkg -> do + v <- getPackageVersion pkg + putStrLn $ " " <> C.unPackageName (pkgName pkg) <> " " <> showVersion v <> " @ " <> pkgPath pkg + +maintainerEmails :: IO String +maintainerEmails = do + maintainers <- concat <$> mapM getPackageMaintainers packages + return $ intercalate ", " $ map (T.unpack . contactRecipient) $ nubBy ((==) `on` contactEmail) $ sort maintainers + +summarize :: IO () +summarize = + summarizeSubmodules packages + +check :: IO () +check = do + errs <- mapM (\pkg -> map (pkg, ) <$> execWriterT (checkPackage pkg)) packages + mapM_ (putStrLn . uncurry formatError) (concat errs) + exitWith $ if null errs then ExitSuccess else ExitFailure 1 + ===================================== utils/check-submodules/src/Hackage.hs ===================================== @@ -0,0 +1,32 @@ +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE OverloadedStrings #-} + +module Hackage + ( PackageState(..) + , getVersions + ) where + +import qualified Data.Map.Strict as M +import Lens.Micro +import Network.Wreq +import Distribution.Types.PackageName +import qualified Data.Aeson as JSON +import Data.Version + +data PackageState = Normal | Deprecated + deriving (Show) + +instance JSON.FromJSON PackageState where + parseJSON = JSON.withText "package state" $ \case + "normal" -> pure Normal + "deprecated" -> pure Deprecated + _ -> fail "unknown PackageState" + +getVersions :: PackageName -> IO (M.Map Version PackageState) +getVersions pn = do + r <- asJSON =<< getWith opts url + maybe (fail "getVersions: failed") pure (r ^? responseBody) + where + opts = defaults & header "Accept" .~ ["application/json"] + url = "https://hackage.haskell.org/package/" <> unPackageName pn + ===================================== utils/check-submodules/src/Package.hs ===================================== @@ -0,0 +1,61 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} + +module Package + ( Contact(..) + , parseContact + , contactRecipient + + , Package(..) + , getPackageVersion + , getPackageMaintainers + ) where + +import Data.ByteString qualified as BS +import Data.Text qualified as T +import Data.Version +import Distribution.PackageDescription.Parsec qualified as C +import Distribution.Types.GenericPackageDescription qualified as C +import Distribution.Types.PackageDescription qualified as C +import Distribution.Types.PackageId qualified as C +import Distribution.Types.PackageName (PackageName) +import Distribution.Types.PackageName qualified as C +import Distribution.Types.Version qualified as C +import Distribution.Utils.ShortText qualified as C +import System.FilePath + +data Contact = Contact { contactName, contactEmail :: T.Text } + deriving (Eq, Ord, Show) + +parseContact :: T.Text -> Contact +parseContact t + | '<' `T.elem` t = + let (name,email) = T.break (== '<') t + in Contact (T.strip name) (T.strip $ T.takeWhile (/= '>') $ T.drop 1 email) + | otherwise = Contact "" t + +contactRecipient :: Contact -> T.Text +contactRecipient (Contact name email) + | T.null name = email + | otherwise = name <> " <" <> email <> ">" + +data Package = Package { pkgName :: PackageName + , pkgPath :: FilePath + } + +getPackageDescription :: Package -> IO C.PackageDescription +getPackageDescription pkg = do + Just gpd <- C.parseGenericPackageDescriptionMaybe <$> BS.readFile (pkgPath pkg C.unPackageName (pkgName pkg) <.> "cabal") + return $ C.packageDescription gpd + +getPackageMaintainers :: Package -> IO [Contact] +getPackageMaintainers pkg = + map (parseContact . T.strip . T.filter (/= '\n')) . T.splitOn "," + . T.pack . C.fromShortText . C.maintainer + <$> getPackageDescription pkg + +getPackageVersion :: Package -> IO Version +getPackageVersion pkg = + Data.Version.makeVersion . C.versionNumbers . C.pkgVersion . C.package + <$> getPackageDescription pkg + View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4f703ff55fe7426340ca3c933ddd949bd6edc1cc -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/4f703ff55fe7426340ca3c933ddd949bd6edc1cc You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 20:12:22 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Fri, 20 Dec 2024 15:12:22 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] don't search for non-home unit modules because those weren't fetched eitheRgit add -up! Message-ID: <6765cfa6186f6_50471e99e94390da@gitlab.mail> Rodrigo Mesquita pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: cdeb073c by Rodrigo Mesquita at 2024-12-20T20:12:13+00:00 don't search for non-home unit modules because those weren't fetched eitheRgit add -up! - - - - - 1 changed file: - compiler/GHC/Linker/Deps.hs Changes: ===================================== compiler/GHC/Linker/Deps.hs ===================================== @@ -70,8 +70,8 @@ data LinkDepsOpts = LinkDepsOpts , ldFinderCache :: !FinderCache , ldFinderOpts :: !FinderOpts , ldLoadByteCode :: !(Module -> IO (Maybe Linkable)) - , ldLoadHomeIfacesBelow :: !((Module -> SDoc) -> Maybe HomeUnit {-^ current home unit -} - -> [Module] -> IO ExternalPackageState {-^ EPS after loading -}) + , ldLoadHomeIfacesBelow :: !((Module -> SDoc) -> Maybe HomeUnit {- current home unit -} + -> [Module] -> IO ExternalPackageState {- EPS after loading -}) } data LinkDeps = LinkDeps @@ -227,10 +227,12 @@ get_reachable_nodes opts mods let emg = eps_module_graph eps get_mod_info_eps (ModNodeKeyWithUid gwib uid) - | Just iface <- lookupModuleEnv (eps_PIT eps) (Module (RealUnit $ Definite uid) (gwib_mod gwib)) - = return iface + | uid == homeUnitId (ue_unsafeHomeUnit unit_env) + = case lookupModuleEnv (eps_PIT eps) (Module (RealUnit $ Definite uid) (gwib_mod gwib)) of + Just iface -> return $ Just iface + Nothing -> moduleNotLoaded "(in EPS)" gwib uid | otherwise - = moduleNotLoaded "(in EPS)" gwib uid + = return Nothing go (ExternalModuleKey . mkModuleNk) emgNodeKey (emgReachableMany emg) (map emgProject) get_mod_info_eps --romes:todo:^ do we need to make sure we only get non-boot files out of @@ -270,13 +272,13 @@ get_reachable_nodes opts mods -> (node -> key) -> ([key] -> [node]) -> ([key] -> [Either ModNodeKeyWithUid UnitId]) - -> (ModNodeKeyWithUid -> IO ModIface) + -> (ModNodeKeyWithUid -> IO (Maybe ModIface)) -> IO ([Module], UniqDSet UnitId) go modKey nodeKey manyReachable project get_mod_info | let mod_keys = map modKey mods = do let (all_home_mods, pkgs_s) = partitionEithers $ project $ mod_keys ++ map nodeKey (manyReachable mod_keys) - ifaces <- mapM get_mod_info all_home_mods + ifaces <- mapMaybeM get_mod_info all_home_mods mods_s <- forM ifaces $ \iface -> case mi_hsc_src iface of HsBootFile -> link_boot_mod_error (mi_module iface) _ -> return $ mi_module iface @@ -284,7 +286,7 @@ get_reachable_nodes opts mods get_mod_info_hug (ModNodeKeyWithUid gwib uid) | Just hmi <- lookupHug (ue_home_unit_graph unit_env) uid (gwib_mod gwib) - = return (hm_iface hmi) + = return $ Just (hm_iface hmi) | otherwise = moduleNotLoaded "(in HUG)" gwib uid View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cdeb073ca72a7cd2ef9855d2ea3a7fb0ce1e38ab -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/cdeb073ca72a7cd2ef9855d2ea3a7fb0ce1e38ab You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 23:34:48 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 20 Dec 2024 18:34:48 -0500 Subject: [Git][ghc/ghc][wip/boot-lib-testing] 2 commits: check-submodules: initial commit Message-ID: <6765ff18d0c07_50473267624434f9@gitlab.mail> Ben Gamari pushed to branch wip/boot-lib-testing at Glasgow Haskell Compiler / GHC Commits: d9fcfc05 by Ben Gamari at 2024-12-20T18:24:57-05:00 check-submodules: initial commit - - - - - eae74661 by Ben Gamari at 2024-12-20T18:34:24-05:00 gitlab-ci: Add boot library linting steps - - - - - 14 changed files: - .gitlab-ci.yml - + utils/check-submodules/LICENSE - + utils/check-submodules/README.mkd - + utils/check-submodules/app/Main.hs - + utils/check-submodules/check-submodules.cabal - + utils/check-submodules/flake.lock - + utils/check-submodules/flake.nix - + utils/check-submodules/hie.yaml - + utils/check-submodules/src/CheckTags.hs - + utils/check-submodules/src/CheckVersions.hs - + utils/check-submodules/src/Git.hs - + utils/check-submodules/src/Hackage.hs - + utils/check-submodules/src/Package.hs - + utils/check-submodules/src/Packages.hs Changes: ===================================== .gitlab-ci.yml ===================================== @@ -205,6 +205,23 @@ not-interruptible: - if: $NIGHTLY when: always +.nix: + image: nixos/nix:2.25.2 + before_script: + - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf + # Note [Nix-in-Docker] + # ~~~~~~~~~~~~~~~~~~~~ + # The nixos/nix default config is max-jobs=1 and cores=$(logical + # cores num) which doesn't play nice with our $CPUS convention. We + # fix it before invoking any nix build to avoid oversubscribing + # while allowing a reasonable degree of parallelism. + # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See + # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for + # discussion. + - echo "cores = $CPUS" >> /etc/nix/nix.conf + - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf + - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf + ############################################################ # Validate jobs @@ -255,6 +272,24 @@ typecheck-testsuite: - mypy testsuite/driver/runtests.py dependencies: [] +lint-boot-tags: + extends: [.lint, .nix] + script: + - nix run utils/check-submodules# -- check-tags + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + +lint-boot-versions: + extends: [.lint, .nix] + script: + - nix run utils/check-submodules# -- check-versions + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + # We allow the submodule checker to fail when run on merge requests (to # accommodate, e.g., haddock changes not yet upstream) but not on `master` or # Marge jobs. @@ -292,26 +327,11 @@ lint-author: - *drafts-can-fail-lint lint-ci-config: - image: nixos/nix:2.25.2 - extends: .lint + extends: [.lint, .nix] # We don't need history/submodules in this job variables: GIT_DEPTH: 1 GIT_SUBMODULE_STRATEGY: none - before_script: - - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf - # Note [Nix-in-Docker] - # ~~~~~~~~~~~~~~~~~~~~ - # The nixos/nix default config is max-jobs=1 and cores=$(logical - # cores num) which doesn't play nice with our $CPUS convention. We - # fix it before invoking any nix build to avoid oversubscribing - # while allowing a reasonable degree of parallelism. - # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See - # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for - # discussion. - - echo "cores = $CPUS" >> /etc/nix/nix.conf - - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf - - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf script: - nix run .gitlab/generate-ci#generate-jobs # 1 if .gitlab/generate_jobs changed the output of the generated config ===================================== utils/check-submodules/LICENSE ===================================== @@ -0,0 +1,30 @@ +Copyright (c) 2024, Ben Gamari + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Ben Gamari nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ===================================== utils/check-submodules/README.mkd ===================================== @@ -0,0 +1,16 @@ +# check-submodules + +This is a utilities used in GHC CI to verify the consistency and +up-to-date-ness of GHC's boot library dependencies. Specifically +we verify that: + + * the referenced commits are released on Hackage + * that the Hackage version has not been deprecated + * that there is not a more recent version in the same major series + +## Usage + +In the GHC tree: +```bash +nix run ./utils/check-submodules# +``` ===================================== utils/check-submodules/app/Main.hs ===================================== @@ -0,0 +1,15 @@ +module Main (main) where + +import CheckVersions +import CheckTags +import System.Environment (getArgs) + +main :: IO () +main = do + args <- getArgs + case args of + ["check-versions"] -> checkVersions + ["check-tags"] -> checkTags + ["summarize"] -> summarize + ["email"] -> maintainerEmails >>= putStrLn + _ -> fail "invalid mode" ===================================== utils/check-submodules/check-submodules.cabal ===================================== @@ -0,0 +1,47 @@ +cabal-version: 3.0 +name: check-submodules +version: 0.1.0.0 +-- synopsis: +-- description: +homepage: https://gitlab.haskell.org/ghc/ghc +license: BSD-3-Clause +license-file: LICENSE +author: Ben Gamari +maintainer: ben at smart-cactus.org +copyright: (c) 2024 Ben Gamari +category: Development +build-type: Simple +-- extra-source-files: + +common warnings + ghc-options: -Wall + +executable check-submodules + import: warnings + main-is: Main.hs + build-depends: base, + check-submodules + hs-source-dirs: app + default-language: Haskell2010 + +library + import: warnings + exposed-modules: Git, + Hackage, + CheckVersions, + CheckTags, + Packages, + Package + build-depends: base, + wreq, + aeson, + bytestring, + text, + transformers, + filepath, + microlens, + containers, + typed-process, + Cabal + hs-source-dirs: src + default-language: Haskell2010 ===================================== utils/check-submodules/flake.lock ===================================== @@ -0,0 +1,58 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1734083684, + "narHash": "sha256-5fNndbndxSx5d+C/D0p/VF32xDiJCJzyOqorOYW4JEo=", + "path": "/nix/store/0xbni69flk8380w0apw4h640n37wn1i9-source", + "rev": "314e12ba369ccdb9b352a4db26ff419f7c49fa84", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} ===================================== utils/check-submodules/flake.nix ===================================== @@ -0,0 +1,26 @@ +{ + description = "GHC boot library linting"; + + inputs.flake-utils.url = "github:numtide/flake-utils"; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; in + { + packages = rec { + check-submodules = pkgs.haskellPackages.callCabal2nix "generate-ci" ./. {}; + default = check-submodules; + }; + + devShells.default = self.packages.${system}.default.env; + + apps = rec { + check-submodules = flake-utils.lib.mkApp { + drv = self.packages.${system}.check-submodules; + }; + default = check-submodules; + }; + } + ); +} + ===================================== utils/check-submodules/hie.yaml ===================================== @@ -0,0 +1,2 @@ +cradle: + cabal: ===================================== utils/check-submodules/src/CheckTags.hs ===================================== @@ -0,0 +1,56 @@ +{-# LANGUAGE ImportQualifiedPost #-} + +module CheckTags + ( checkTags + ) where + +import Package (Package(..)) +import Packages (packages) +import Git qualified +import Data.List (intercalate, isPrefixOf, isSuffixOf) +import Data.Maybe (catMaybes) + +findReleaseTag :: Git.GitRepo -> Package -> IO (Maybe String) +findReleaseTag repo pkg = do + allTags <- Git.reachableTags repo "HEAD" + case filter (\tag -> pkgIsReleaseTag pkg tag || isGhcTag tag) allTags of + [] -> return Nothing + tag:_ -> return (Just tag) + +isGhcTag :: String -> Bool +isGhcTag tag = "-ghc" `isSuffixOf` tag + +checkTag :: Git.GitRepo -> Package -> IO (Maybe String) +checkTag repo pkg = do + mb_tag <- findReleaseTag repo pkg + case mb_tag of + Nothing -> return $ Just "No release tags found" + Just tag -> checkChanges repo tag + +-- | Check whether the tag only deviates from HEAD in trivial ways. +checkChanges :: Git.GitRepo -> Git.Ref -> IO (Maybe String) +checkChanges repo tag = do + files <- Git.changedFiles repo tag "HEAD" + case filter (not . okayChange) files of + [] -> return Nothing + badFiles -> do + described <- Git.describeRef repo "HEAD" + let msg = "Tag " <> show tag <> " differs from " <> described <> " in: " <> fileList + maxFiles = 5 + commaList = intercalate ", " + fileList + | length badFiles > maxFiles = commaList (take maxFiles badFiles) <> " and " <> show (length badFiles - maxFiles) <> " other files" + | otherwise = commaList badFiles + return $ Just msg + +okayChange :: FilePath -> Bool +okayChange path + | "." `isPrefixOf` path = True + | ".gitignore" `isSuffixOf` path = True + | otherwise = False + +checkTags :: IO () +checkTags = do + let ghcRepo = Git.GitRepo "." + mapM (\pkg -> checkTag (Git.submoduleIn ghcRepo (pkgPath pkg)) pkg) packages >>= putStrLn . unlines . catMaybes + ===================================== utils/check-submodules/src/CheckVersions.hs ===================================== @@ -0,0 +1,79 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TupleSections #-} + +module CheckVersions + ( checkVersions + , summarize + , maintainerEmails + ) where + +import Control.Monad (forM_) +import Control.Monad.IO.Class +import Control.Monad.Trans.Writer +import Data.Function (on) +import Data.List (intercalate, sort, nubBy) +import Data.Map.Strict qualified as M +import Data.Text qualified as T +import Data.Version +import Distribution.Types.PackageName qualified as C +import System.Exit + +import Hackage (getVersions, PackageState (..)) +import Package +import Packages + +isPvpCompatible :: Version -> Version -> Bool +isPvpCompatible a b = + take 2 (versionBranch a) == take 2 (versionBranch b) + +updateVersion :: M.Map Version PackageState -> Version -> Maybe Version +updateVersion available v + | [] <- compatible = Nothing + | otherwise = Just $ maximum compatible + where + compatible = + [ v' + | (v', Normal) <- M.assocs available -- non-deprecated versions available via Hackage... + , v' > v -- that are newer than the submodule... + , v' `isPvpCompatible` v -- and are compatible with the submodule + ] + +checkPackage :: Package -> WriterT [String] IO () +checkPackage pkg = do + v <- liftIO $ getPackageVersion pkg + available <- liftIO $ getVersions (pkgName pkg) + + case M.lookup v available of + Nothing -> tell ["Version not on Hackage"] + Just Deprecated -> tell ["Version has been deprecated"] + Just Normal -> return () + + case updateVersion available v of + Nothing -> return () + Just v' -> tell ["At " <> showVersion v <> " but version " <> showVersion v' <> " is available"] + +formatError :: Package -> String -> String +formatError pkg err = + pkgPath pkg <> ": " <> err + +summarizeSubmodules :: [Package] -> IO () +summarizeSubmodules pkgs = forM_ pkgs $ \pkg -> do + v <- getPackageVersion pkg + putStrLn $ " " <> C.unPackageName (pkgName pkg) <> " " <> showVersion v <> " @ " <> pkgPath pkg + +maintainerEmails :: IO String +maintainerEmails = do + maintainers <- concat <$> mapM getPackageMaintainers packages + return $ intercalate ", " $ map (T.unpack . contactRecipient) $ nubBy ((==) `on` contactEmail) $ sort maintainers + +summarize :: IO () +summarize = + summarizeSubmodules packages + +checkVersions :: IO () +checkVersions = do + errs <- mapM (\pkg -> map (pkg, ) <$> execWriterT (checkPackage pkg)) packages + mapM_ (putStrLn . uncurry formatError) (concat errs) + exitWith $ if null errs then ExitSuccess else ExitFailure 1 + ===================================== utils/check-submodules/src/Git.hs ===================================== @@ -0,0 +1,50 @@ +{-# LANGUAGE ImportQualifiedPost #-} + +module Git + ( GitRepo(..) + , submoduleIn + + , Ref + , describeRef + , submoduleCommit + , reachableTags + , changedFiles + ) where + +import System.Process.Typed +import Data.ByteString.Lazy.Char8 qualified as BSL +import System.FilePath (()) + +newtype GitRepo = GitRepo { gitRepoPath :: FilePath } + +submoduleIn :: GitRepo -> FilePath -> GitRepo +submoduleIn (GitRepo path) submod = + GitRepo $ path submod + +type Ref = String + +runGit :: GitRepo -> [String] -> IO BSL.ByteString +runGit (GitRepo path) args = do + readProcessStdout_ $ setWorkingDir path (proc "git" args) + +describeRef :: GitRepo -> Ref -> IO String +describeRef repo ref = + head . lines . BSL.unpack <$> runGit repo ["describe", "--always", ref] + +-- | Get the commit of the given submodule. +submoduleCommit :: GitRepo -> FilePath -> IO Ref +submoduleCommit repo submodule = do + out <- runGit repo ["submodule", "status", submodule] + case BSL.words $ BSL.drop 1 out of + commit:_ -> return $ BSL.unpack commit + _ -> fail "Unrecognized output from `git submodule status`" + +-- | Get the most recent tags reacheable from the given commit. +reachableTags :: GitRepo -> Ref -> IO [Ref] +reachableTags repo ref = + reverse . map BSL.unpack . BSL.lines <$> runGit repo ["tag", "--sort=taggerdate", "--merged", ref] + +changedFiles :: GitRepo -> Ref -> Ref -> IO [FilePath] +changedFiles repo a b = do + map BSL.unpack . BSL.lines <$> runGit repo ["diff", "--name-only", a, b] + ===================================== utils/check-submodules/src/Hackage.hs ===================================== @@ -0,0 +1,32 @@ +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE OverloadedStrings #-} + +module Hackage + ( PackageState(..) + , getVersions + ) where + +import qualified Data.Map.Strict as M +import Lens.Micro +import Network.Wreq +import Distribution.Types.PackageName +import qualified Data.Aeson as JSON +import Data.Version + +data PackageState = Normal | Deprecated + deriving (Show) + +instance JSON.FromJSON PackageState where + parseJSON = JSON.withText "package state" $ \case + "normal" -> pure Normal + "deprecated" -> pure Deprecated + _ -> fail "unknown PackageState" + +getVersions :: PackageName -> IO (M.Map Version PackageState) +getVersions pn = do + r <- asJSON =<< getWith opts url + maybe (fail "getVersions: failed") pure (r ^? responseBody) + where + opts = defaults & header "Accept" .~ ["application/json"] + url = "https://hackage.haskell.org/package/" <> unPackageName pn + ===================================== utils/check-submodules/src/Package.hs ===================================== @@ -0,0 +1,62 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} + +module Package + ( Contact(..) + , parseContact + , contactRecipient + + , Package(..) + , getPackageVersion + , getPackageMaintainers + ) where + +import Data.ByteString qualified as BS +import Data.Text qualified as T +import Data.Version +import Distribution.PackageDescription.Parsec qualified as C +import Distribution.Types.GenericPackageDescription qualified as C +import Distribution.Types.PackageDescription qualified as C +import Distribution.Types.PackageId qualified as C +import Distribution.Types.PackageName (PackageName) +import Distribution.Types.PackageName qualified as C +import Distribution.Types.Version qualified as C +import Distribution.Utils.ShortText qualified as C +import System.FilePath + +data Contact = Contact { contactName, contactEmail :: T.Text } + deriving (Eq, Ord, Show) + +parseContact :: T.Text -> Contact +parseContact t + | '<' `T.elem` t = + let (name,email) = T.break (== '<') t + in Contact (T.strip name) (T.strip $ T.takeWhile (/= '>') $ T.drop 1 email) + | otherwise = Contact "" t + +contactRecipient :: Contact -> T.Text +contactRecipient (Contact name email) + | T.null name = email + | otherwise = name <> " <" <> email <> ">" + +data Package = Package { pkgName :: PackageName + , pkgPath :: FilePath + , pkgIsReleaseTag :: String -> Bool + } + +getPackageDescription :: Package -> IO C.PackageDescription +getPackageDescription pkg = do + Just gpd <- C.parseGenericPackageDescriptionMaybe <$> BS.readFile (pkgPath pkg C.unPackageName (pkgName pkg) <.> "cabal") + return $ C.packageDescription gpd + +getPackageMaintainers :: Package -> IO [Contact] +getPackageMaintainers pkg = + map (parseContact . T.strip . T.filter (/= '\n')) . T.splitOn "," + . T.pack . C.fromShortText . C.maintainer + <$> getPackageDescription pkg + +getPackageVersion :: Package -> IO Version +getPackageVersion pkg = + Data.Version.makeVersion . C.versionNumbers . C.pkgVersion . C.package + <$> getPackageDescription pkg + ===================================== utils/check-submodules/src/Packages.hs ===================================== @@ -0,0 +1,54 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Packages (packages) where + +import Package +import Data.Char (isDigit) +import qualified Distribution.Types.PackageName as C +import Data.List + +packages :: [Package] +packages = + [ stdPackage "file-io" "libraries/file-io" + , stdPackage "hsc2hs" "utils/hsc2hs" + , Package "Cabal" "libraries/Cabal/Cabal" (isPrefixTag "Cabal-") + , Package "Cabal-syntax" "libraries/Cabal/Cabal-syntax" (isPrefixTag "Cabal-syntax-") + , stdPackage "bytestring" "libraries/bytestring" + , stdPackage "binary" "libraries/binary" + , stdPackage "array" "libraries/array" + , stdPackage "containers" "libraries/containers/containers" + , stdPackage "deepseq" "libraries/deepseq" + , stdPackage "directory" "libraries/directory" + , stdPackage "filepath" "libraries/filepath" + , stdPackage "haskeline" "libraries/haskeline" + , stdPackage "hpc" "libraries/hpc" + , stdPackage "mtl" "libraries/mtl" + , stdPackage "parsec" "libraries/parsec" + , stdPackage "pretty" "libraries/pretty" + , stdPackage "process" "libraries/process" + , stdPackage "terminfo" "libraries/terminfo" + , stdPackage "text" "libraries/text" + , stdPackage "time" "libraries/time" + , stdPackage "unix" "libraries/unix" + , stdPackage "exceptions" "libraries/exceptions" + , stdPackage "semaphore-compat" "libraries/semaphore-compat" + , stdPackage "stm" "libraries/stm" + , stdPackage "Win32" "libraries/Win32" + , stdPackage "xhtml" "libraries/xhtml" + ] + +stdPackage :: C.PackageName -> FilePath -> Package +stdPackage name path = Package name path stdIsReleaseTag + +looksLikeVersion :: String -> Bool +looksLikeVersion = + all (\c -> isDigit c || c == '.') + +isPrefixTag :: String -> String -> Bool +isPrefixTag prefix tag + | Just rest <- prefix `stripPrefix` tag = looksLikeVersion rest + | otherwise = False + +stdIsReleaseTag :: String -> Bool +stdIsReleaseTag tag = + isPrefixTag "v" tag || isPrefixTag "" tag View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4f703ff55fe7426340ca3c933ddd949bd6edc1cc...eae74661c8d8a7381bcd86948a86cbde4be4d1fc -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/4f703ff55fe7426340ca3c933ddd949bd6edc1cc...eae74661c8d8a7381bcd86948a86cbde4be4d1fc You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Fri Dec 20 23:43:45 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 20 Dec 2024 18:43:45 -0500 Subject: [Git][ghc/ghc][wip/boot-lib-testing] gitlab-ci: Add boot library linting steps Message-ID: <676601314d093_504736e9a58442aa@gitlab.mail> Ben Gamari pushed to branch wip/boot-lib-testing at Glasgow Haskell Compiler / GHC Commits: 7c34906b by Ben Gamari at 2024-12-20T18:43:37-05:00 gitlab-ci: Add boot library linting steps - - - - - 1 changed file: - .gitlab-ci.yml Changes: ===================================== .gitlab-ci.yml ===================================== @@ -205,6 +205,23 @@ not-interruptible: - if: $NIGHTLY when: always +.nix: + image: nixos/nix:2.25.2 + before_script: + - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf + # Note [Nix-in-Docker] + # ~~~~~~~~~~~~~~~~~~~~ + # The nixos/nix default config is max-jobs=1 and cores=$(logical + # cores num) which doesn't play nice with our $CPUS convention. We + # fix it before invoking any nix build to avoid oversubscribing + # while allowing a reasonable degree of parallelism. + # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See + # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for + # discussion. + - echo "cores = $CPUS" >> /etc/nix/nix.conf + - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf + - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf + ############################################################ # Validate jobs @@ -255,6 +272,24 @@ typecheck-testsuite: - mypy testsuite/driver/runtests.py dependencies: [] +lint-boot-tags: + extends: [.lint, .nix] + script: + - nix run ./utils/check-submodules# -- check-tags + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + +lint-boot-versions: + extends: [.lint, .nix] + script: + - nix run ./utils/check-submodules# -- check-versions + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + # We allow the submodule checker to fail when run on merge requests (to # accommodate, e.g., haddock changes not yet upstream) but not on `master` or # Marge jobs. @@ -292,26 +327,11 @@ lint-author: - *drafts-can-fail-lint lint-ci-config: - image: nixos/nix:2.25.2 - extends: .lint + extends: [.lint, .nix] # We don't need history/submodules in this job variables: GIT_DEPTH: 1 GIT_SUBMODULE_STRATEGY: none - before_script: - - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf - # Note [Nix-in-Docker] - # ~~~~~~~~~~~~~~~~~~~~ - # The nixos/nix default config is max-jobs=1 and cores=$(logical - # cores num) which doesn't play nice with our $CPUS convention. We - # fix it before invoking any nix build to avoid oversubscribing - # while allowing a reasonable degree of parallelism. - # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See - # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for - # discussion. - - echo "cores = $CPUS" >> /etc/nix/nix.conf - - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf - - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf script: - nix run .gitlab/generate-ci#generate-jobs # 1 if .gitlab/generate_jobs changed the output of the generated config View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7c34906b6c07639d52447f9141a698df656f4e56 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7c34906b6c07639d52447f9141a698df656f4e56 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 21 01:09:04 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 20 Dec 2024 20:09:04 -0500 Subject: [Git][ghc/ghc][wip/boot-lib-testing] 2 commits: check-submodules: initial commit Message-ID: <67661530e483f_16efb37512b466198@gitlab.mail> Ben Gamari pushed to branch wip/boot-lib-testing at Glasgow Haskell Compiler / GHC Commits: 663143d3 by Ben Gamari at 2024-12-20T20:08:53-05:00 check-submodules: initial commit - - - - - ba3deaf9 by Ben Gamari at 2024-12-20T20:08:53-05:00 gitlab-ci: Add boot library linting steps - - - - - 15 changed files: - .gitlab-ci.yml - + utils/check-submodules/LICENSE - + utils/check-submodules/README.mkd - + utils/check-submodules/app/Main.hs - + utils/check-submodules/check-submodules.cabal - + utils/check-submodules/flake.lock - + utils/check-submodules/flake.nix - + utils/check-submodules/hie.yaml - + utils/check-submodules/src/CheckTags.hs - + utils/check-submodules/src/CheckVersions.hs - + utils/check-submodules/src/Git.hs - + utils/check-submodules/src/Hackage.hs - + utils/check-submodules/src/Package.hs - + utils/check-submodules/src/Packages.hs - + utils/check-submodules/src/Pretty.hs Changes: ===================================== .gitlab-ci.yml ===================================== @@ -205,6 +205,23 @@ not-interruptible: - if: $NIGHTLY when: always +.nix: + image: nixos/nix:2.25.2 + before_script: + - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf + # Note [Nix-in-Docker] + # ~~~~~~~~~~~~~~~~~~~~ + # The nixos/nix default config is max-jobs=1 and cores=$(logical + # cores num) which doesn't play nice with our $CPUS convention. We + # fix it before invoking any nix build to avoid oversubscribing + # while allowing a reasonable degree of parallelism. + # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See + # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for + # discussion. + - echo "cores = $CPUS" >> /etc/nix/nix.conf + - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf + - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf + ############################################################ # Validate jobs @@ -255,6 +272,24 @@ typecheck-testsuite: - mypy testsuite/driver/runtests.py dependencies: [] +lint-boot-tags: + extends: [.lint, .nix] + script: + - nix run ./utils/check-submodules# -- check-tags + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + +lint-boot-versions: + extends: [.lint, .nix] + script: + - nix run ./utils/check-submodules# -- check-versions + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + # We allow the submodule checker to fail when run on merge requests (to # accommodate, e.g., haddock changes not yet upstream) but not on `master` or # Marge jobs. @@ -292,26 +327,11 @@ lint-author: - *drafts-can-fail-lint lint-ci-config: - image: nixos/nix:2.25.2 - extends: .lint + extends: [.lint, .nix] # We don't need history/submodules in this job variables: GIT_DEPTH: 1 GIT_SUBMODULE_STRATEGY: none - before_script: - - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf - # Note [Nix-in-Docker] - # ~~~~~~~~~~~~~~~~~~~~ - # The nixos/nix default config is max-jobs=1 and cores=$(logical - # cores num) which doesn't play nice with our $CPUS convention. We - # fix it before invoking any nix build to avoid oversubscribing - # while allowing a reasonable degree of parallelism. - # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See - # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for - # discussion. - - echo "cores = $CPUS" >> /etc/nix/nix.conf - - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf - - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf script: - nix run .gitlab/generate-ci#generate-jobs # 1 if .gitlab/generate_jobs changed the output of the generated config ===================================== utils/check-submodules/LICENSE ===================================== @@ -0,0 +1,30 @@ +Copyright (c) 2024, Ben Gamari + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Ben Gamari nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ===================================== utils/check-submodules/README.mkd ===================================== @@ -0,0 +1,16 @@ +# check-submodules + +This is a utilities used in GHC CI to verify the consistency and +up-to-date-ness of GHC's boot library dependencies. Specifically +we verify that: + + * the referenced commits are released on Hackage + * that the Hackage version has not been deprecated + * that there is not a more recent version in the same major series + +## Usage + +In the GHC tree: +```bash +nix run ./utils/check-submodules# +``` ===================================== utils/check-submodules/app/Main.hs ===================================== @@ -0,0 +1,15 @@ +module Main (main) where + +import CheckVersions +import CheckTags +import System.Environment (getArgs) + +main :: IO () +main = do + args <- getArgs + case args of + ["check-versions"] -> checkVersions + ["check-tags"] -> checkTags + ["summarize"] -> summarize + ["email"] -> maintainerEmails >>= putStrLn + _ -> fail "invalid mode" ===================================== utils/check-submodules/check-submodules.cabal ===================================== @@ -0,0 +1,50 @@ +cabal-version: 3.0 +name: check-submodules +version: 0.1.0.0 +-- synopsis: +-- description: +homepage: https://gitlab.haskell.org/ghc/ghc +license: BSD-3-Clause +license-file: LICENSE +author: Ben Gamari +maintainer: ben at smart-cactus.org +copyright: (c) 2024 Ben Gamari +category: Development +build-type: Simple +-- extra-source-files: + +common warnings + ghc-options: -Wall + +executable check-submodules + import: warnings + main-is: Main.hs + build-depends: base, + check-submodules + hs-source-dirs: app + default-language: Haskell2010 + +library + import: warnings + exposed-modules: Git, + Hackage, + CheckVersions, + CheckTags, + Packages, + Package, + Pretty + build-depends: base, + wreq, + aeson, + bytestring, + text, + transformers, + prettyprinter, + prettyprinter-ansi-terminal, + filepath, + microlens, + containers, + typed-process, + Cabal + hs-source-dirs: src + default-language: Haskell2010 ===================================== utils/check-submodules/flake.lock ===================================== @@ -0,0 +1,58 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1734083684, + "narHash": "sha256-5fNndbndxSx5d+C/D0p/VF32xDiJCJzyOqorOYW4JEo=", + "path": "/nix/store/0xbni69flk8380w0apw4h640n37wn1i9-source", + "rev": "314e12ba369ccdb9b352a4db26ff419f7c49fa84", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} ===================================== utils/check-submodules/flake.nix ===================================== @@ -0,0 +1,26 @@ +{ + description = "GHC boot library linting"; + + inputs.flake-utils.url = "github:numtide/flake-utils"; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; in + { + packages = rec { + check-submodules = pkgs.haskellPackages.callCabal2nix "generate-ci" ./. {}; + default = check-submodules; + }; + + devShells.default = self.packages.${system}.default.env; + + apps = rec { + check-submodules = flake-utils.lib.mkApp { + drv = self.packages.${system}.check-submodules; + }; + default = check-submodules; + }; + } + ); +} + ===================================== utils/check-submodules/hie.yaml ===================================== @@ -0,0 +1,2 @@ +cradle: + cabal: ===================================== utils/check-submodules/src/CheckTags.hs ===================================== @@ -0,0 +1,64 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TupleSections #-} + +module CheckTags + ( checkTags + ) where + +import Data.List (isPrefixOf, isSuffixOf) +import Git qualified +import Package (Package(..)) +import Packages (packages) +import Pretty + +findReleaseTag :: Git.GitRepo -> Package -> IO (Maybe Git.Tag) +findReleaseTag repo pkg = do + allTags <- Git.reachableTags repo "HEAD" + case filter (\tag -> pkgIsReleaseTag pkg tag || isGhcTag tag) allTags of + [] -> return Nothing + tag:_ -> return (Just tag) + +isGhcTag :: Git.Tag -> Bool +isGhcTag tag = "-ghc" `isSuffixOf` tag + +checkTag :: Git.GitRepo -> Package -> IO (Maybe Doc) +checkTag repo pkg = do + mb_tag <- findReleaseTag repo pkg + case mb_tag of + Nothing -> return $ Just "No release tags found" + Just tag -> checkChanges repo tag + +-- | Check whether the tag only deviates from HEAD in trivial ways. +checkChanges :: Git.GitRepo -> Git.Ref -> IO (Maybe Doc) +checkChanges repo tag = do + files <- Git.changedFiles repo tag "HEAD" + case filter (not . okayChange) files of + [] -> return Nothing + badFiles -> do + described <- Git.describeRef repo "HEAD" + let msg = vsep + [ "Tag" <+> ppCommit (pretty tag) <+> "differs from" <+> ppCommit (pretty described) <+> "in:" + , bulletList fileList + ] + maxFiles = 5 + fileList + | length badFiles > maxFiles = take maxFiles (map pretty badFiles) ++ ["... and" <+> pretty (length badFiles - maxFiles) <> " other files"] + | otherwise = map pretty badFiles + return $ Just msg + +okayChange :: FilePath -> Bool +okayChange path + | "." `isPrefixOf` path = True + | ".gitignore" `isSuffixOf` path = True + | otherwise = False + +checkTags :: IO () +checkTags = do + let ghcRepo = Git.GitRepo "." + errs <- mapM (\pkg -> (pkg,) <$> checkTag (Git.submoduleIn ghcRepo (pkgPath pkg)) pkg) packages + putDoc $ bulletList + [ severityIcon Error <+> ppPackage pkg <> ":" <+> err + | (pkg, Just err) <- errs + ] + ===================================== utils/check-submodules/src/CheckVersions.hs ===================================== @@ -0,0 +1,82 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TupleSections #-} + +module CheckVersions + ( checkVersions + , summarize + , maintainerEmails + ) where + +import Control.Monad (forM_) +import Control.Monad.IO.Class +import Control.Monad.Trans.Writer +import Data.Function (on) +import Data.List (intercalate, sort, nubBy) +import Data.Map.Strict qualified as M +import Data.Text qualified as T +import Data.Version +import Distribution.Types.PackageName qualified as C +import System.Exit + +import Hackage (getVersions, PackageState (..)) +import Pretty +import Package +import Packages + +isPvpCompatible :: Version -> Version -> Bool +isPvpCompatible a b = + take 2 (versionBranch a) == take 2 (versionBranch b) + +updateVersion :: M.Map Version PackageState -> Version -> Maybe Version +updateVersion available v + | [] <- compatible = Nothing + | otherwise = Just $ maximum compatible + where + compatible = + [ v' + | (v', Normal) <- M.assocs available -- non-deprecated versions available via Hackage... + , v' > v -- that are newer than the submodule... + , v' `isPvpCompatible` v -- and are compatible with the submodule + ] + +checkPackage :: Package -> WriterT [(Severity, Doc)] IO () +checkPackage pkg = do + v <- liftIO $ getPackageVersion pkg + available <- liftIO $ getVersions (pkgName pkg) + + case M.lookup v available of + Nothing -> tellMsg Error $ "Version" <+> ppVersion v <+> "is not on Hackage" + Just Deprecated -> tellMsg Error $ "Version" <+> ppVersion v <+> "has been deprecated" + Just Normal -> return () + + case updateVersion available v of + Nothing -> return () + Just v' -> tellMsg Warning $ "Shipping with" <+> ppVersion v <+> "but newer version" <+> ppVersion v' <+> "is available" + +tellMsg :: Severity -> Doc -> WriterT [(Severity, Doc)] IO () +tellMsg sev msg = tell [(sev, msg)] + +summarizeSubmodules :: [Package] -> IO () +summarizeSubmodules pkgs = forM_ pkgs $ \pkg -> do + v <- getPackageVersion pkg + putStrLn $ " " <> C.unPackageName (pkgName pkg) <> " " <> showVersion v <> " @ " <> pkgPath pkg + +maintainerEmails :: IO String +maintainerEmails = do + maintainers <- concat <$> mapM getPackageMaintainers packages + return $ intercalate ", " $ map (T.unpack . contactRecipient) $ nubBy ((==) `on` contactEmail) $ sort maintainers + +summarize :: IO () +summarize = + summarizeSubmodules packages + +checkVersions :: IO () +checkVersions = do + errs <- mapM (\pkg -> map (pkg, ) <$> execWriterT (checkPackage pkg)) packages + putDoc $ bulletList + [ severityIcon sev <+> ppPackage pkg <> ":" <+> err + | (pkg, (sev, err)) <- concat errs + ] + exitWith $ if null errs then ExitSuccess else ExitFailure 1 + ===================================== utils/check-submodules/src/Git.hs ===================================== @@ -0,0 +1,52 @@ +{-# LANGUAGE ImportQualifiedPost #-} + +module Git + ( GitRepo(..) + , submoduleIn + + , Ref + , describeRef + , submoduleCommit + , Tag + , reachableTags + , changedFiles + ) where + +import System.Process.Typed +import Data.ByteString.Lazy.Char8 qualified as BSL +import System.FilePath (()) + +newtype GitRepo = GitRepo { gitRepoPath :: FilePath } + +submoduleIn :: GitRepo -> FilePath -> GitRepo +submoduleIn (GitRepo path) submod = + GitRepo $ path submod + +type Ref = String +type Tag = String + +runGit :: GitRepo -> [String] -> IO BSL.ByteString +runGit (GitRepo path) args = do + readProcessStdout_ $ setWorkingDir path (proc "git" args) + +describeRef :: GitRepo -> Ref -> IO String +describeRef repo ref = + head . lines . BSL.unpack <$> runGit repo ["describe", "--always", ref] + +-- | Get the commit of the given submodule. +submoduleCommit :: GitRepo -> FilePath -> IO Ref +submoduleCommit repo submodule = do + out <- runGit repo ["submodule", "status", submodule] + case BSL.words $ BSL.drop 1 out of + commit:_ -> return $ BSL.unpack commit + _ -> fail "Unrecognized output from `git submodule status`" + +-- | Get the most recent tags reacheable from the given commit. +reachableTags :: GitRepo -> Ref -> IO [Tag] +reachableTags repo ref = + reverse . map BSL.unpack . BSL.lines <$> runGit repo ["tag", "--sort=taggerdate", "--merged", ref] + +changedFiles :: GitRepo -> Ref -> Ref -> IO [FilePath] +changedFiles repo a b = do + map BSL.unpack . BSL.lines <$> runGit repo ["diff", "--name-only", a, b] + ===================================== utils/check-submodules/src/Hackage.hs ===================================== @@ -0,0 +1,32 @@ +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE OverloadedStrings #-} + +module Hackage + ( PackageState(..) + , getVersions + ) where + +import qualified Data.Map.Strict as M +import Lens.Micro +import Network.Wreq +import Distribution.Types.PackageName +import qualified Data.Aeson as JSON +import Data.Version + +data PackageState = Normal | Deprecated + deriving (Show) + +instance JSON.FromJSON PackageState where + parseJSON = JSON.withText "package state" $ \case + "normal" -> pure Normal + "deprecated" -> pure Deprecated + _ -> fail "unknown PackageState" + +getVersions :: PackageName -> IO (M.Map Version PackageState) +getVersions pn = do + r <- asJSON =<< getWith opts url + maybe (fail "getVersions: failed") pure (r ^? responseBody) + where + opts = defaults & header "Accept" .~ ["application/json"] + url = "https://hackage.haskell.org/package/" <> unPackageName pn + ===================================== utils/check-submodules/src/Package.hs ===================================== @@ -0,0 +1,62 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} + +module Package + ( Contact(..) + , parseContact + , contactRecipient + + , Package(..) + , getPackageVersion + , getPackageMaintainers + ) where + +import Data.ByteString qualified as BS +import Data.Text qualified as T +import Data.Version +import Distribution.PackageDescription.Parsec qualified as C +import Distribution.Types.GenericPackageDescription qualified as C +import Distribution.Types.PackageDescription qualified as C +import Distribution.Types.PackageId qualified as C +import Distribution.Types.PackageName (PackageName) +import Distribution.Types.PackageName qualified as C +import Distribution.Types.Version qualified as C +import Distribution.Utils.ShortText qualified as C +import System.FilePath + +data Contact = Contact { contactName, contactEmail :: T.Text } + deriving (Eq, Ord, Show) + +parseContact :: T.Text -> Contact +parseContact t + | '<' `T.elem` t = + let (name,email) = T.break (== '<') t + in Contact (T.strip name) (T.strip $ T.takeWhile (/= '>') $ T.drop 1 email) + | otherwise = Contact "" t + +contactRecipient :: Contact -> T.Text +contactRecipient (Contact name email) + | T.null name = email + | otherwise = name <> " <" <> email <> ">" + +data Package = Package { pkgName :: PackageName + , pkgPath :: FilePath + , pkgIsReleaseTag :: String -> Bool + } + +getPackageDescription :: Package -> IO C.PackageDescription +getPackageDescription pkg = do + Just gpd <- C.parseGenericPackageDescriptionMaybe <$> BS.readFile (pkgPath pkg C.unPackageName (pkgName pkg) <.> "cabal") + return $ C.packageDescription gpd + +getPackageMaintainers :: Package -> IO [Contact] +getPackageMaintainers pkg = + map (parseContact . T.strip . T.filter (/= '\n')) . T.splitOn "," + . T.pack . C.fromShortText . C.maintainer + <$> getPackageDescription pkg + +getPackageVersion :: Package -> IO Version +getPackageVersion pkg = + Data.Version.makeVersion . C.versionNumbers . C.pkgVersion . C.package + <$> getPackageDescription pkg + ===================================== utils/check-submodules/src/Packages.hs ===================================== @@ -0,0 +1,54 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Packages (packages) where + +import Package +import Data.Char (isDigit) +import qualified Distribution.Types.PackageName as C +import Data.List + +packages :: [Package] +packages = + [ stdPackage "file-io" "libraries/file-io" + , stdPackage "hsc2hs" "utils/hsc2hs" + , Package "Cabal" "libraries/Cabal/Cabal" (isPrefixTag "Cabal-") + , Package "Cabal-syntax" "libraries/Cabal/Cabal-syntax" (isPrefixTag "Cabal-syntax-") + , stdPackage "bytestring" "libraries/bytestring" + , stdPackage "binary" "libraries/binary" + , stdPackage "array" "libraries/array" + , stdPackage "containers" "libraries/containers/containers" + , stdPackage "deepseq" "libraries/deepseq" + , stdPackage "directory" "libraries/directory" + , stdPackage "filepath" "libraries/filepath" + , stdPackage "haskeline" "libraries/haskeline" + , stdPackage "hpc" "libraries/hpc" + , stdPackage "mtl" "libraries/mtl" + , stdPackage "parsec" "libraries/parsec" + , stdPackage "pretty" "libraries/pretty" + , stdPackage "process" "libraries/process" + , stdPackage "terminfo" "libraries/terminfo" + , stdPackage "text" "libraries/text" + , stdPackage "time" "libraries/time" + , stdPackage "unix" "libraries/unix" + , stdPackage "exceptions" "libraries/exceptions" + , stdPackage "semaphore-compat" "libraries/semaphore-compat" + , stdPackage "stm" "libraries/stm" + , stdPackage "Win32" "libraries/Win32" + , stdPackage "xhtml" "libraries/xhtml" + ] + +stdPackage :: C.PackageName -> FilePath -> Package +stdPackage name path = Package name path stdIsReleaseTag + +looksLikeVersion :: String -> Bool +looksLikeVersion = + all (\c -> isDigit c || c == '.') + +isPrefixTag :: String -> String -> Bool +isPrefixTag prefix tag + | Just rest <- prefix `stripPrefix` tag = looksLikeVersion rest + | otherwise = False + +stdIsReleaseTag :: String -> Bool +stdIsReleaseTag tag = + isPrefixTag "v" tag || isPrefixTag "" tag ===================================== utils/check-submodules/src/Pretty.hs ===================================== @@ -0,0 +1,57 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} + +module Pretty + ( module Prettyprinter + , Doc + , mkMsg + , Severity(..) + , severityIcon + , bulletList + , ppCommit + , ppPackage + , ppVersion + , ppHeading + , putDoc + ) where + +import Data.Version +import Package +import Prettyprinter hiding (Doc) +import Prettyprinter qualified as PP +import Prettyprinter.Render.Terminal +import Distribution.Types.PackageName qualified as C + +type Doc = PP.Doc AnsiStyle + +ppPackage :: Package -> Doc +ppPackage = + annotate (color Green) . pretty . C.unPackageName . pkgName + +ppVersion :: Version -> Doc +ppVersion v = + annotate (color Blue) $ pretty $ showVersion v + +ppCommit :: Doc -> Doc +ppCommit = + annotate (color Blue) + +ppHeading :: Doc -> Doc +ppHeading = + annotate bold . ("#" <+>) + +bullet :: Doc +bullet = "‣" + +bulletList :: [Doc] -> Doc +bulletList xs = vcat [ " " <> bullet <+> align x | x <- xs ] + +data Severity = Info | Warning | Error + +severityIcon :: Severity -> Doc +severityIcon Info = annotate (color Blue) "ℹ" -- "🔵" +severityIcon Warning = "🟡" +severityIcon Error = annotate (color Red) "✗" -- "🔴" + +mkMsg :: Severity -> Doc -> Doc +mkMsg s msg = severityIcon s <+> msg View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/7c34906b6c07639d52447f9141a698df656f4e56...ba3deaf9a3f576c33e4dd118da962c87f0b1ced1 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/7c34906b6c07639d52447f9141a698df656f4e56...ba3deaf9a3f576c33e4dd118da962c87f0b1ced1 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 21 03:55:54 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 20 Dec 2024 22:55:54 -0500 Subject: [Git][ghc/ghc][wip/boot-lib-testing] gitlab-ci: Add boot library linting steps Message-ID: <67663c4a6ba86_16efb31846bc8735f5@gitlab.mail> Ben Gamari pushed to branch wip/boot-lib-testing at Glasgow Haskell Compiler / GHC Commits: b76fbb7f by Ben Gamari at 2024-12-20T22:55:43-05:00 gitlab-ci: Add boot library linting steps - - - - - 1 changed file: - .gitlab-ci.yml Changes: ===================================== .gitlab-ci.yml ===================================== @@ -205,6 +205,25 @@ not-interruptible: - if: $NIGHTLY when: always +.nix: + image: nixos/nix:2.25.2 + env: + LANG: "C.UTF-8" + before_script: + - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf + # Note [Nix-in-Docker] + # ~~~~~~~~~~~~~~~~~~~~ + # The nixos/nix default config is max-jobs=1 and cores=$(logical + # cores num) which doesn't play nice with our $CPUS convention. We + # fix it before invoking any nix build to avoid oversubscribing + # while allowing a reasonable degree of parallelism. + # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See + # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for + # discussion. + - echo "cores = $CPUS" >> /etc/nix/nix.conf + - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf + - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf + ############################################################ # Validate jobs @@ -255,6 +274,24 @@ typecheck-testsuite: - mypy testsuite/driver/runtests.py dependencies: [] +lint-boot-tags: + extends: [.lint, .nix] + script: + - nix run ./utils/check-submodules# -- check-tags + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + +lint-boot-versions: + extends: [.lint, .nix] + script: + - nix run ./utils/check-submodules# -- check-versions + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + # We allow the submodule checker to fail when run on merge requests (to # accommodate, e.g., haddock changes not yet upstream) but not on `master` or # Marge jobs. @@ -292,26 +329,11 @@ lint-author: - *drafts-can-fail-lint lint-ci-config: - image: nixos/nix:2.25.2 - extends: .lint + extends: [.lint, .nix] # We don't need history/submodules in this job variables: GIT_DEPTH: 1 GIT_SUBMODULE_STRATEGY: none - before_script: - - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf - # Note [Nix-in-Docker] - # ~~~~~~~~~~~~~~~~~~~~ - # The nixos/nix default config is max-jobs=1 and cores=$(logical - # cores num) which doesn't play nice with our $CPUS convention. We - # fix it before invoking any nix build to avoid oversubscribing - # while allowing a reasonable degree of parallelism. - # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See - # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for - # discussion. - - echo "cores = $CPUS" >> /etc/nix/nix.conf - - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf - - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf script: - nix run .gitlab/generate-ci#generate-jobs # 1 if .gitlab/generate_jobs changed the output of the generated config View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b76fbb7f91d43a3f577b24383a2f72e32cb430bd -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b76fbb7f91d43a3f577b24383a2f72e32cb430bd You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 21 03:58:58 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 20 Dec 2024 22:58:58 -0500 Subject: [Git][ghc/ghc][wip/boot-lib-testing] gitlab-ci: Add boot library linting steps Message-ID: <67663d026bae4_16efb31828614741f7@gitlab.mail> Ben Gamari pushed to branch wip/boot-lib-testing at Glasgow Haskell Compiler / GHC Commits: 6f1f87ff by Ben Gamari at 2024-12-20T22:58:53-05:00 gitlab-ci: Add boot library linting steps - - - - - 1 changed file: - .gitlab-ci.yml Changes: ===================================== .gitlab-ci.yml ===================================== @@ -205,6 +205,25 @@ not-interruptible: - if: $NIGHTLY when: always +.nix: + image: nixos/nix:2.25.2 + variables: + LANG: "C.UTF-8" + before_script: + - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf + # Note [Nix-in-Docker] + # ~~~~~~~~~~~~~~~~~~~~ + # The nixos/nix default config is max-jobs=1 and cores=$(logical + # cores num) which doesn't play nice with our $CPUS convention. We + # fix it before invoking any nix build to avoid oversubscribing + # while allowing a reasonable degree of parallelism. + # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See + # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for + # discussion. + - echo "cores = $CPUS" >> /etc/nix/nix.conf + - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf + - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf + ############################################################ # Validate jobs @@ -255,6 +274,24 @@ typecheck-testsuite: - mypy testsuite/driver/runtests.py dependencies: [] +lint-boot-tags: + extends: [.lint, .nix] + script: + - nix run ./utils/check-submodules# -- check-tags + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + +lint-boot-versions: + extends: [.lint, .nix] + script: + - nix run ./utils/check-submodules# -- check-versions + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + # We allow the submodule checker to fail when run on merge requests (to # accommodate, e.g., haddock changes not yet upstream) but not on `master` or # Marge jobs. @@ -292,26 +329,11 @@ lint-author: - *drafts-can-fail-lint lint-ci-config: - image: nixos/nix:2.25.2 - extends: .lint + extends: [.lint, .nix] # We don't need history/submodules in this job variables: GIT_DEPTH: 1 GIT_SUBMODULE_STRATEGY: none - before_script: - - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf - # Note [Nix-in-Docker] - # ~~~~~~~~~~~~~~~~~~~~ - # The nixos/nix default config is max-jobs=1 and cores=$(logical - # cores num) which doesn't play nice with our $CPUS convention. We - # fix it before invoking any nix build to avoid oversubscribing - # while allowing a reasonable degree of parallelism. - # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See - # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for - # discussion. - - echo "cores = $CPUS" >> /etc/nix/nix.conf - - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf - - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf script: - nix run .gitlab/generate-ci#generate-jobs # 1 if .gitlab/generate_jobs changed the output of the generated config View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/6f1f87ff7f0c20269e42f8d8aa2227652afe3346 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/6f1f87ff7f0c20269e42f8d8aa2227652afe3346 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 21 04:20:07 2024 From: gitlab at gitlab.haskell.org (Ben Gamari (@bgamari)) Date: Fri, 20 Dec 2024 23:20:07 -0500 Subject: [Git][ghc/ghc][wip/boot-lib-testing] 2 commits: check-submodules: initial commit Message-ID: <676641f76f65_16efb31cc9664745bb@gitlab.mail> Ben Gamari pushed to branch wip/boot-lib-testing at Glasgow Haskell Compiler / GHC Commits: d3894ce8 by Ben Gamari at 2024-12-20T23:19:57-05:00 check-submodules: initial commit - - - - - 28d5201f by Ben Gamari at 2024-12-20T23:19:57-05:00 gitlab-ci: Add boot library linting steps - - - - - 15 changed files: - .gitlab-ci.yml - + utils/check-submodules/LICENSE - + utils/check-submodules/README.mkd - + utils/check-submodules/app/Main.hs - + utils/check-submodules/check-submodules.cabal - + utils/check-submodules/flake.lock - + utils/check-submodules/flake.nix - + utils/check-submodules/hie.yaml - + utils/check-submodules/src/CheckTags.hs - + utils/check-submodules/src/CheckVersions.hs - + utils/check-submodules/src/Git.hs - + utils/check-submodules/src/Hackage.hs - + utils/check-submodules/src/Package.hs - + utils/check-submodules/src/Packages.hs - + utils/check-submodules/src/Pretty.hs Changes: ===================================== .gitlab-ci.yml ===================================== @@ -205,6 +205,25 @@ not-interruptible: - if: $NIGHTLY when: always +.nix: + image: nixos/nix:2.25.2 + variables: + LANG: "C.UTF-8" + before_script: + - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf + # Note [Nix-in-Docker] + # ~~~~~~~~~~~~~~~~~~~~ + # The nixos/nix default config is max-jobs=1 and cores=$(logical + # cores num) which doesn't play nice with our $CPUS convention. We + # fix it before invoking any nix build to avoid oversubscribing + # while allowing a reasonable degree of parallelism. + # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See + # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for + # discussion. + - echo "cores = $CPUS" >> /etc/nix/nix.conf + - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf + - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf + ############################################################ # Validate jobs @@ -255,6 +274,24 @@ typecheck-testsuite: - mypy testsuite/driver/runtests.py dependencies: [] +lint-boot-tags: + extends: [.lint, .nix] + script: + - nix run ./utils/check-submodules# -- check-tags + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + +lint-boot-versions: + extends: [.lint, .nix] + script: + - nix run ./utils/check-submodules# -- check-versions + rules: + - if: $RELEASE_JOB + allow_failure: false + - allow_failure: true + # We allow the submodule checker to fail when run on merge requests (to # accommodate, e.g., haddock changes not yet upstream) but not on `master` or # Marge jobs. @@ -292,26 +329,11 @@ lint-author: - *drafts-can-fail-lint lint-ci-config: - image: nixos/nix:2.25.2 - extends: .lint + extends: [.lint, .nix] # We don't need history/submodules in this job variables: GIT_DEPTH: 1 GIT_SUBMODULE_STRATEGY: none - before_script: - - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf - # Note [Nix-in-Docker] - # ~~~~~~~~~~~~~~~~~~~~ - # The nixos/nix default config is max-jobs=1 and cores=$(logical - # cores num) which doesn't play nice with our $CPUS convention. We - # fix it before invoking any nix build to avoid oversubscribing - # while allowing a reasonable degree of parallelism. - # FIXME: Disabling build-users-group=nixbld is a workaround for a Nix-in-Docker issue. See - # https://gitlab.haskell.org/ghc/head.hackage/-/issues/38#note_560487 for - # discussion. - - echo "cores = $CPUS" >> /etc/nix/nix.conf - - echo "max-jobs = $CPUS" >> /etc/nix/nix.conf - - nix run nixpkgs#gnused -- -i -e 's/ nixbld//' /etc/nix/nix.conf script: - nix run .gitlab/generate-ci#generate-jobs # 1 if .gitlab/generate_jobs changed the output of the generated config ===================================== utils/check-submodules/LICENSE ===================================== @@ -0,0 +1,30 @@ +Copyright (c) 2024, Ben Gamari + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Ben Gamari nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ===================================== utils/check-submodules/README.mkd ===================================== @@ -0,0 +1,16 @@ +# check-submodules + +This is a utilities used in GHC CI to verify the consistency and +up-to-date-ness of GHC's boot library dependencies. Specifically +we verify that: + + * the referenced commits are released on Hackage + * that the Hackage version has not been deprecated + * that there is not a more recent version in the same major series + +## Usage + +In the GHC tree: +```bash +nix run ./utils/check-submodules# +``` ===================================== utils/check-submodules/app/Main.hs ===================================== @@ -0,0 +1,15 @@ +module Main (main) where + +import CheckVersions +import CheckTags +import System.Environment (getArgs) + +main :: IO () +main = do + args <- getArgs + case args of + ["check-versions"] -> checkVersions + ["check-tags"] -> checkTags + ["summarize"] -> summarize + ["email"] -> maintainerEmails >>= putStrLn + _ -> fail "invalid mode" ===================================== utils/check-submodules/check-submodules.cabal ===================================== @@ -0,0 +1,50 @@ +cabal-version: 3.0 +name: check-submodules +version: 0.1.0.0 +-- synopsis: +-- description: +homepage: https://gitlab.haskell.org/ghc/ghc +license: BSD-3-Clause +license-file: LICENSE +author: Ben Gamari +maintainer: ben at smart-cactus.org +copyright: (c) 2024 Ben Gamari +category: Development +build-type: Simple +-- extra-source-files: + +common warnings + ghc-options: -Wall + +executable check-submodules + import: warnings + main-is: Main.hs + build-depends: base, + check-submodules + hs-source-dirs: app + default-language: Haskell2010 + +library + import: warnings + exposed-modules: Git, + Hackage, + CheckVersions, + CheckTags, + Packages, + Package, + Pretty + build-depends: base, + wreq, + aeson, + bytestring, + text, + transformers, + prettyprinter, + prettyprinter-ansi-terminal, + filepath, + microlens, + containers, + typed-process, + Cabal + hs-source-dirs: src + default-language: Haskell2010 ===================================== utils/check-submodules/flake.lock ===================================== @@ -0,0 +1,58 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1734083684, + "narHash": "sha256-5fNndbndxSx5d+C/D0p/VF32xDiJCJzyOqorOYW4JEo=", + "path": "/nix/store/0xbni69flk8380w0apw4h640n37wn1i9-source", + "rev": "314e12ba369ccdb9b352a4db26ff419f7c49fa84", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} ===================================== utils/check-submodules/flake.nix ===================================== @@ -0,0 +1,26 @@ +{ + description = "GHC boot library linting"; + + inputs.flake-utils.url = "github:numtide/flake-utils"; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let pkgs = nixpkgs.legacyPackages.${system}; in + { + packages = rec { + check-submodules = pkgs.haskellPackages.callCabal2nix "generate-ci" ./. {}; + default = check-submodules; + }; + + devShells.default = self.packages.${system}.default.env; + + apps = rec { + check-submodules = flake-utils.lib.mkApp { + drv = self.packages.${system}.check-submodules; + }; + default = check-submodules; + }; + } + ); +} + ===================================== utils/check-submodules/hie.yaml ===================================== @@ -0,0 +1,2 @@ +cradle: + cabal: ===================================== utils/check-submodules/src/CheckTags.hs ===================================== @@ -0,0 +1,68 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TupleSections #-} + +module CheckTags + ( checkTags + ) where + +import Data.List (isPrefixOf, isSuffixOf) +import Git qualified +import Package (Package(..)) +import Packages (packages) +import Pretty +import Control.Monad (unless) + +findReleaseTag :: Git.GitRepo -> Package -> IO (Maybe Git.Tag) +findReleaseTag repo pkg = do + allTags <- Git.reachableTags repo "HEAD" + case filter (\tag -> pkgIsReleaseTag pkg tag || isGhcTag tag) allTags of + [] -> return Nothing + tag:_ -> return (Just tag) + +isGhcTag :: Git.Tag -> Bool +isGhcTag tag = "-ghc" `isSuffixOf` tag + +checkTag :: Git.GitRepo -> Package -> IO (Maybe Doc) +checkTag repo pkg = do + mb_tag <- findReleaseTag repo pkg + case mb_tag of + Nothing -> return $ Just "No release tags found" + Just tag -> checkChanges repo tag + +-- | Check whether the tag only deviates from HEAD in trivial ways. +checkChanges :: Git.GitRepo -> Git.Ref -> IO (Maybe Doc) +checkChanges repo tag = do + files <- Git.changedFiles repo tag "HEAD" + case filter (not . okayChange) files of + [] -> return Nothing + badFiles -> do + described <- Git.describeRef repo "HEAD" + let msg = vsep + [ "Tag" <+> ppCommit (pretty tag) <+> "differs from" <+> ppCommit (pretty described) <+> "in:" + , bulletList fileList + ] + maxFiles = 5 + fileList + | n > 0 = + take maxFiles (map pretty badFiles) ++ + ["... and" <+> pretty n <+> "other" <+> plural "file" "files" n] + | otherwise = map pretty badFiles + where n = length badFiles - maxFiles + return $ Just msg + +okayChange :: FilePath -> Bool +okayChange path + | "." `isPrefixOf` path = True + | ".gitignore" `isSuffixOf` path = True + | otherwise = False + +checkTags :: IO () +checkTags = do + let ghcRepo = Git.GitRepo "." + errs <- mapM (\pkg -> (pkg,) <$> checkTag (Git.submoduleIn ghcRepo (pkgPath pkg)) pkg) packages + putDoc $ bulletList + [ severityIcon Error <+> ppPackage pkg <> ":" <+> err + | (pkg, Just err) <- errs + ] + unless (null errs) $ fail "Tag issues above" ===================================== utils/check-submodules/src/CheckVersions.hs ===================================== @@ -0,0 +1,82 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TupleSections #-} + +module CheckVersions + ( checkVersions + , summarize + , maintainerEmails + ) where + +import Control.Monad (forM_) +import Control.Monad.IO.Class +import Control.Monad.Trans.Writer +import Data.Function (on) +import Data.List (intercalate, sort, nubBy) +import Data.Map.Strict qualified as M +import Data.Text qualified as T +import Data.Version +import Distribution.Types.PackageName qualified as C +import System.Exit + +import Hackage (getVersions, PackageState (..)) +import Pretty +import Package +import Packages + +isPvpCompatible :: Version -> Version -> Bool +isPvpCompatible a b = + take 2 (versionBranch a) == take 2 (versionBranch b) + +updateVersion :: M.Map Version PackageState -> Version -> Maybe Version +updateVersion available v + | [] <- compatible = Nothing + | otherwise = Just $ maximum compatible + where + compatible = + [ v' + | (v', Normal) <- M.assocs available -- non-deprecated versions available via Hackage... + , v' > v -- that are newer than the submodule... + , v' `isPvpCompatible` v -- and are compatible with the submodule + ] + +checkPackage :: Package -> WriterT [(Severity, Doc)] IO () +checkPackage pkg = do + v <- liftIO $ getPackageVersion pkg + available <- liftIO $ getVersions (pkgName pkg) + + case M.lookup v available of + Nothing -> tellMsg Error $ "Version" <+> ppVersion v <+> "is not on Hackage" + Just Deprecated -> tellMsg Error $ "Version" <+> ppVersion v <+> "has been deprecated" + Just Normal -> return () + + case updateVersion available v of + Nothing -> return () + Just v' -> tellMsg Warning $ "Shipping with" <+> ppVersion v <+> "but newer version" <+> ppVersion v' <+> "is available" + +tellMsg :: Severity -> Doc -> WriterT [(Severity, Doc)] IO () +tellMsg sev msg = tell [(sev, msg)] + +summarizeSubmodules :: [Package] -> IO () +summarizeSubmodules pkgs = forM_ pkgs $ \pkg -> do + v <- getPackageVersion pkg + putStrLn $ " " <> C.unPackageName (pkgName pkg) <> " " <> showVersion v <> " @ " <> pkgPath pkg + +maintainerEmails :: IO String +maintainerEmails = do + maintainers <- concat <$> mapM getPackageMaintainers packages + return $ intercalate ", " $ map (T.unpack . contactRecipient) $ nubBy ((==) `on` contactEmail) $ sort maintainers + +summarize :: IO () +summarize = + summarizeSubmodules packages + +checkVersions :: IO () +checkVersions = do + errs <- mapM (\pkg -> map (pkg, ) <$> execWriterT (checkPackage pkg)) packages + putDoc $ bulletList + [ severityIcon sev <+> ppPackage pkg <> ":" <+> err + | (pkg, (sev, err)) <- concat errs + ] + exitWith $ if null errs then ExitSuccess else ExitFailure 1 + ===================================== utils/check-submodules/src/Git.hs ===================================== @@ -0,0 +1,52 @@ +{-# LANGUAGE ImportQualifiedPost #-} + +module Git + ( GitRepo(..) + , submoduleIn + + , Ref + , describeRef + , submoduleCommit + , Tag + , reachableTags + , changedFiles + ) where + +import System.Process.Typed +import Data.ByteString.Lazy.Char8 qualified as BSL +import System.FilePath (()) + +newtype GitRepo = GitRepo { gitRepoPath :: FilePath } + +submoduleIn :: GitRepo -> FilePath -> GitRepo +submoduleIn (GitRepo path) submod = + GitRepo $ path submod + +type Ref = String +type Tag = String + +runGit :: GitRepo -> [String] -> IO BSL.ByteString +runGit (GitRepo path) args = do + readProcessStdout_ $ setWorkingDir path (proc "git" args) + +describeRef :: GitRepo -> Ref -> IO String +describeRef repo ref = + head . lines . BSL.unpack <$> runGit repo ["describe", "--always", ref] + +-- | Get the commit of the given submodule. +submoduleCommit :: GitRepo -> FilePath -> IO Ref +submoduleCommit repo submodule = do + out <- runGit repo ["submodule", "status", submodule] + case BSL.words $ BSL.drop 1 out of + commit:_ -> return $ BSL.unpack commit + _ -> fail "Unrecognized output from `git submodule status`" + +-- | Get the most recent tags reacheable from the given commit. +reachableTags :: GitRepo -> Ref -> IO [Tag] +reachableTags repo ref = + reverse . map BSL.unpack . BSL.lines <$> runGit repo ["tag", "--sort=taggerdate", "--merged", ref] + +changedFiles :: GitRepo -> Ref -> Ref -> IO [FilePath] +changedFiles repo a b = do + map BSL.unpack . BSL.lines <$> runGit repo ["diff", "--name-only", a, b] + ===================================== utils/check-submodules/src/Hackage.hs ===================================== @@ -0,0 +1,32 @@ +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE OverloadedStrings #-} + +module Hackage + ( PackageState(..) + , getVersions + ) where + +import qualified Data.Map.Strict as M +import Lens.Micro +import Network.Wreq +import Distribution.Types.PackageName +import qualified Data.Aeson as JSON +import Data.Version + +data PackageState = Normal | Deprecated + deriving (Show) + +instance JSON.FromJSON PackageState where + parseJSON = JSON.withText "package state" $ \case + "normal" -> pure Normal + "deprecated" -> pure Deprecated + _ -> fail "unknown PackageState" + +getVersions :: PackageName -> IO (M.Map Version PackageState) +getVersions pn = do + r <- asJSON =<< getWith opts url + maybe (fail "getVersions: failed") pure (r ^? responseBody) + where + opts = defaults & header "Accept" .~ ["application/json"] + url = "https://hackage.haskell.org/package/" <> unPackageName pn + ===================================== utils/check-submodules/src/Package.hs ===================================== @@ -0,0 +1,62 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} + +module Package + ( Contact(..) + , parseContact + , contactRecipient + + , Package(..) + , getPackageVersion + , getPackageMaintainers + ) where + +import Data.ByteString qualified as BS +import Data.Text qualified as T +import Data.Version +import Distribution.PackageDescription.Parsec qualified as C +import Distribution.Types.GenericPackageDescription qualified as C +import Distribution.Types.PackageDescription qualified as C +import Distribution.Types.PackageId qualified as C +import Distribution.Types.PackageName (PackageName) +import Distribution.Types.PackageName qualified as C +import Distribution.Types.Version qualified as C +import Distribution.Utils.ShortText qualified as C +import System.FilePath + +data Contact = Contact { contactName, contactEmail :: T.Text } + deriving (Eq, Ord, Show) + +parseContact :: T.Text -> Contact +parseContact t + | '<' `T.elem` t = + let (name,email) = T.break (== '<') t + in Contact (T.strip name) (T.strip $ T.takeWhile (/= '>') $ T.drop 1 email) + | otherwise = Contact "" t + +contactRecipient :: Contact -> T.Text +contactRecipient (Contact name email) + | T.null name = email + | otherwise = name <> " <" <> email <> ">" + +data Package = Package { pkgName :: PackageName + , pkgPath :: FilePath + , pkgIsReleaseTag :: String -> Bool + } + +getPackageDescription :: Package -> IO C.PackageDescription +getPackageDescription pkg = do + Just gpd <- C.parseGenericPackageDescriptionMaybe <$> BS.readFile (pkgPath pkg C.unPackageName (pkgName pkg) <.> "cabal") + return $ C.packageDescription gpd + +getPackageMaintainers :: Package -> IO [Contact] +getPackageMaintainers pkg = + map (parseContact . T.strip . T.filter (/= '\n')) . T.splitOn "," + . T.pack . C.fromShortText . C.maintainer + <$> getPackageDescription pkg + +getPackageVersion :: Package -> IO Version +getPackageVersion pkg = + Data.Version.makeVersion . C.versionNumbers . C.pkgVersion . C.package + <$> getPackageDescription pkg + ===================================== utils/check-submodules/src/Packages.hs ===================================== @@ -0,0 +1,54 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Packages (packages) where + +import Package +import Data.Char (isDigit) +import qualified Distribution.Types.PackageName as C +import Data.List + +packages :: [Package] +packages = + [ stdPackage "file-io" "libraries/file-io" + , stdPackage "hsc2hs" "utils/hsc2hs" + , Package "Cabal" "libraries/Cabal/Cabal" (isPrefixTag "Cabal-") + , Package "Cabal-syntax" "libraries/Cabal/Cabal-syntax" (isPrefixTag "Cabal-syntax-") + , stdPackage "bytestring" "libraries/bytestring" + , stdPackage "binary" "libraries/binary" + , stdPackage "array" "libraries/array" + , stdPackage "containers" "libraries/containers/containers" + , stdPackage "deepseq" "libraries/deepseq" + , stdPackage "directory" "libraries/directory" + , stdPackage "filepath" "libraries/filepath" + , stdPackage "haskeline" "libraries/haskeline" + , stdPackage "hpc" "libraries/hpc" + , stdPackage "mtl" "libraries/mtl" + , stdPackage "parsec" "libraries/parsec" + , stdPackage "pretty" "libraries/pretty" + , stdPackage "process" "libraries/process" + , stdPackage "terminfo" "libraries/terminfo" + , stdPackage "text" "libraries/text" + , stdPackage "time" "libraries/time" + , stdPackage "unix" "libraries/unix" + , stdPackage "exceptions" "libraries/exceptions" + , stdPackage "semaphore-compat" "libraries/semaphore-compat" + , stdPackage "stm" "libraries/stm" + , stdPackage "Win32" "libraries/Win32" + , stdPackage "xhtml" "libraries/xhtml" + ] + +stdPackage :: C.PackageName -> FilePath -> Package +stdPackage name path = Package name path stdIsReleaseTag + +looksLikeVersion :: String -> Bool +looksLikeVersion = + all (\c -> isDigit c || c == '.') + +isPrefixTag :: String -> String -> Bool +isPrefixTag prefix tag + | Just rest <- prefix `stripPrefix` tag = looksLikeVersion rest + | otherwise = False + +stdIsReleaseTag :: String -> Bool +stdIsReleaseTag tag = + isPrefixTag "v" tag || isPrefixTag "" tag ===================================== utils/check-submodules/src/Pretty.hs ===================================== @@ -0,0 +1,57 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} + +module Pretty + ( module Prettyprinter + , Doc + , mkMsg + , Severity(..) + , severityIcon + , bulletList + , ppCommit + , ppPackage + , ppVersion + , ppHeading + , putDoc + ) where + +import Data.Version +import Package +import Prettyprinter hiding (Doc) +import Prettyprinter qualified as PP +import Prettyprinter.Render.Terminal +import Distribution.Types.PackageName qualified as C + +type Doc = PP.Doc AnsiStyle + +ppPackage :: Package -> Doc +ppPackage = + annotate (color Green) . pretty . C.unPackageName . pkgName + +ppVersion :: Version -> Doc +ppVersion v = + annotate (color Blue) $ pretty $ showVersion v + +ppCommit :: Doc -> Doc +ppCommit = + annotate (color Blue) + +ppHeading :: Doc -> Doc +ppHeading = + annotate bold . ("#" <+>) + +bullet :: Doc +bullet = "‣" + +bulletList :: [Doc] -> Doc +bulletList xs = vcat [ " " <> bullet <+> align x | x <- xs ] + +data Severity = Info | Warning | Error + +severityIcon :: Severity -> Doc +severityIcon Info = annotate (color Blue) "ℹ" -- "🔵" +severityIcon Warning = "🟡" +severityIcon Error = annotate (color Red) "✗" -- "🔴" + +mkMsg :: Severity -> Doc -> Doc +mkMsg s msg = severityIcon s <+> msg View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6f1f87ff7f0c20269e42f8d8aa2227652afe3346...28d5201ffa05d31ed00b10ad679d763d95375abd -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/6f1f87ff7f0c20269e42f8d8aa2227652afe3346...28d5201ffa05d31ed00b10ad679d763d95375abd You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 21 14:24:28 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Sat, 21 Dec 2024 09:24:28 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] unused Message-ID: <6766cf9c83c68_297625bd1c8191c@gitlab.mail> Rodrigo Mesquita pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: a94d1346 by Rodrigo Mesquita at 2024-12-21T14:24:07+00:00 unused - - - - - 1 changed file: - compiler/GHC/Iface/Load.hs Changes: ===================================== compiler/GHC/Iface/Load.hs ===================================== @@ -502,7 +502,6 @@ loadInterface doc_str mod from -- Check whether we have the interface already ; hsc_env <- getTopEnv - ; eps <- liftIO $ hscEPS hsc_env ; let mhome_unit = ue_homeUnit (hsc_unit_env hsc_env) ; case lookupIfaceByModule hug (eps_PIT eps) mod of { Just iface View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/a94d13464b40902fca6fc36b97dc0d7a6654bc94 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/a94d13464b40902fca6fc36b97dc0d7a6654bc94 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sat Dec 21 16:17:20 2024 From: gitlab at gitlab.haskell.org (Rodrigo Mesquita (@alt-romes)) Date: Sat, 21 Dec 2024 11:17:20 -0500 Subject: [Git][ghc/ghc][wip/mpickering/get-link-deps] Drop traces Message-ID: <6766ea10e11aa_297625cc3ee021652@gitlab.mail> Rodrigo Mesquita pushed to branch wip/mpickering/get-link-deps at Glasgow Haskell Compiler / GHC Commits: 19367100 by Rodrigo Mesquita at 2024-12-21T16:17:13+00:00 Drop traces - - - - - 1 changed file: - compiler/GHC/Iface/Load.hs Changes: ===================================== compiler/GHC/Iface/Load.hs ===================================== @@ -435,12 +435,12 @@ loadHomePackageInterfacesBelow msg (Just home_unit) mods = do dflags <- getDynFlags let ctx = initSDocContext dflags defaultUserStyle - forM_ mods $ \mod -> pprTrace "modsloadhomepkgbeloW" (ppr mod) $ do + forM_ mods $ \mod -> do graph <- eps_module_graph <$> getEps let key = ExternalModuleKey $ ModNodeKeyWithUid (GWIB (moduleName mod) NotBoot) (moduleUnitId mod) - if pprTrace "==============" (ppr graph) $ isFullyLoadedModule key graph + if isFullyLoadedModule key graph then return () else do iface <- withIfaceErr ctx $ @@ -505,7 +505,7 @@ loadInterface doc_str mod from ; let mhome_unit = ue_homeUnit (hsc_unit_env hsc_env) ; case lookupIfaceByModule hug (eps_PIT eps) mod of { Just iface - -> pprTrace "HWATTTT" (ppr (mi_module iface) <+> ppr (eps_module_graph eps)) $ return (Succeeded iface) ; -- Already loaded + -> return (Succeeded iface) ; -- Already loaded _ -> do { -- READ THE MODULE IN @@ -577,7 +577,7 @@ loadInterface doc_str mod from ; let direct_deps = map (uncurry (flip ModNodeKeyWithUid)) $ (Set.toList (dep_direct_mods $ mi_deps iface)) ; let direct_pkg_deps = dep_direct_pkgs $ mi_deps iface - ; let !module_graph_key = pprTrace "module_graph_on_load" (ppr (eps_module_graph eps)) $ + ; let !module_graph_key = -- pprTrace "module_graph_on_load" (ppr (eps_module_graph eps)) $ if moduleUnitId mod `elem` hsc_all_home_unit_ids hsc_env --- ^ home unit mods in eps can only happen in oneshot mode then Just $ NodeHomePackage (miKey iface) (map ExternalModuleKey direct_deps) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/19367100257652a203c4cb1de61f1da0a9936845 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/19367100257652a203c4cb1de61f1da0a9936845 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 22 04:51:54 2024 From: gitlab at gitlab.haskell.org (Brandon Chinn (@brandonchinn178)) Date: Sat, 21 Dec 2024 23:51:54 -0500 Subject: [Git][ghc/ghc][wip/interpolated-strings] 7 commits: Rewrite showMultiLineString as showLitStringLines Message-ID: <67679aeaad105_2937abf44afc78265@gitlab.mail> Brandon Chinn pushed to branch wip/interpolated-strings at Glasgow Haskell Compiler / GHC Commits: c5da0c13 by Brandon Chinn at 2024-12-21T20:36:24-08:00 Rewrite showMultiLineString as showLitStringLines - - - - - b128435c by Brandon Chinn at 2024-12-21T20:49:30-08:00 Fix rendering multiline string without SourceText - - - - - 6dc4ecc3 by Brandon Chinn at 2024-12-21T20:49:34-08:00 Unify ITstring + ITstringMulti - - - - - 38847c78 by Brandon Chinn at 2024-12-21T20:49:34-08:00 Unify HsString + HsMultilineString - - - - - d9368cdf by Brandon Chinn at 2024-12-21T20:49:34-08:00 Move multiline string processing functions to top-level - - - - - 9a376559 by Brandon Chinn at 2024-12-21T20:49:34-08:00 Always use processCharsSingle to get StringLexError - - - - - 619596cd by Brandon Chinn at 2024-12-21T20:51:25-08:00 Implement interpolated strings - - - - - 29 changed files: - compiler/GHC/Hs/Expr.hs - compiler/GHC/Hs/Lit.hs - compiler/GHC/Hs/Syn/Type.hs - compiler/GHC/Hs/Utils.hs - compiler/GHC/HsToCore/Match/Literal.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/Lexer.x - compiler/GHC/Parser/String.hs - compiler/GHC/Rename/Expr.hs - compiler/GHC/Rename/Pat.hs - compiler/GHC/Rename/Splice.hs - compiler/GHC/Tc/Gen/HsType.hs - compiler/GHC/Tc/Utils/Instantiate.hs - compiler/GHC/Tc/Utils/TcMType.hs - compiler/GHC/ThToHs.hs - compiler/GHC/Utils/Outputable.hs - compiler/Language/Haskell/Syntax/Expr.hs - compiler/Language/Haskell/Syntax/Extension.hs - compiler/Language/Haskell/Syntax/Lit.hs - libraries/base/src/GHC/Show.hs - libraries/ghc-boot-th/GHC/Internal/TH/Ppr.hs - libraries/ghc-internal/src/GHC/Internal/Show.hs - 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 - utils/check-exact/ExactPrint.hs - utils/haddock/haddock-api/src/Haddock/Backends/Hyperlinker/Parser.hs Changes: ===================================== compiler/GHC/Hs/Expr.hs ===================================== @@ -130,7 +130,7 @@ data SyntaxExprTc = SyntaxExprTc { syn_expr :: HsExpr GhcTc -- | This is used for rebindable-syntax pieces that are too polymorphic -- for tcSyntaxOp (trS_fmap and the mzip in ParStmt) noExpr :: HsExpr (GhcPass p) -noExpr = HsLit noExtField (HsString (SourceText $ fsLit "noExpr") (fsLit "noExpr")) +noExpr = HsLit noExtField (HsString (SourceText $ fsLit "noExpr") HsStringTypeSingle (fsLit "noExpr")) noSyntaxExpr :: forall p. IsPass p => SyntaxExpr (GhcPass p) -- Before renaming, and sometimes after @@ -254,6 +254,10 @@ type instance XIPVar GhcRn = NoExtField type instance XIPVar GhcTc = DataConCantHappen type instance XOverLitE (GhcPass _) = NoExtField type instance XLitE (GhcPass _) = NoExtField +type instance XInterString (GhcPass _) = NoExtField +-- | Note: does not contain any delimiters +type instance XInterStringRaw (GhcPass _) = SourceText +type instance XInterStringExp (GhcPass _) = NoExtField type instance XLam (GhcPass _) = EpAnnLam type instance XApp (GhcPass _) = NoExtField @@ -710,6 +714,24 @@ ppr_expr (HsOverLabel s l) = case ghcPass @p of SourceText src -> ftext src ppr_expr (HsLit _ lit) = ppr lit ppr_expr (HsOverLit _ lit) = ppr lit + +ppr_expr (HsInterString _ strType parts) = + char 's' <> delim <> foldMap pprInterPart parts <> delim + where + pprInterPart = \case + HsInterStringRaw st s -> + case (strType, st) of + (HsStringTypeSingle, SourceText src) -> ftext src + (HsStringTypeSingle, NoSourceText) -> pprHsString' (unpackFS s) + (HsStringTypeMulti, SourceText src) -> vcat $ map text $ split '\n' (unpackFS src) + (HsStringTypeMulti, NoSourceText) -> pprHsStringMulti' (unpackFS s) + HsInterStringExpr _ expr -> text "${" <> ppr_expr expr <> text "}" + + delim = + case strType of + HsStringTypeSingle -> char '"' + HsStringTypeMulti -> text "\"\"\"" + ppr_expr (HsPar _ e) = parens (ppr_lexpr e) ppr_expr (HsPragE _ prag e) = sep [ppr prag, ppr_lexpr e] ===================================== compiler/GHC/Hs/Lit.hs ===================================== @@ -48,8 +48,8 @@ import Language.Haskell.Syntax.Lit type instance XHsChar (GhcPass _) = SourceText type instance XHsCharPrim (GhcPass _) = SourceText +-- | Note: contains quote delimiters type instance XHsString (GhcPass _) = SourceText -type instance XHsMultilineString (GhcPass _) = SourceText type instance XHsStringPrim (GhcPass _) = SourceText type instance XHsInt (GhcPass _) = NoExtField type instance XHsIntPrim (GhcPass _) = SourceText @@ -151,7 +151,6 @@ hsLitNeedsParens p = go go (HsChar {}) = False go (HsCharPrim {}) = False go (HsString {}) = False - go (HsMultilineString {}) = False go (HsStringPrim {}) = False go (HsInt _ x) = p > topPrec && il_neg x go (HsFloatPrim {}) = False @@ -180,8 +179,7 @@ hsLitNeedsParens p = go convertLit :: XXLit (GhcPass p)~DataConCantHappen => HsLit (GhcPass p) -> HsLit (GhcPass p') convertLit (HsChar a x) = HsChar a x convertLit (HsCharPrim a x) = HsCharPrim a x -convertLit (HsString a x) = HsString a x -convertLit (HsMultilineString a x) = HsMultilineString a x +convertLit (HsString a ty x) = HsString a ty x convertLit (HsStringPrim a x) = HsStringPrim a x convertLit (HsInt a x) = HsInt a x convertLit (HsIntPrim a x) = HsIntPrim a x @@ -216,11 +214,11 @@ Equivalently it's True if instance IsPass p => Outputable (HsLit (GhcPass p)) where ppr (HsChar st c) = pprWithSourceText st (pprHsChar c) ppr (HsCharPrim st c) = pprWithSourceText st (pprPrimChar c) - ppr (HsString st s) = pprWithSourceText st (pprHsString s) - ppr (HsMultilineString st s) = - case st of - NoSourceText -> pprHsString s - SourceText src -> vcat $ map text $ split '\n' (unpackFS src) + ppr (HsString st ty s) = + case (ty, st) of + (HsStringTypeSingle, _) -> pprWithSourceText st (pprHsString s) + (HsStringTypeMulti, SourceText src) -> vcat $ map text $ split '\n' (unpackFS src) + (HsStringTypeMulti, NoSourceText) -> text "\"\"\"" <> pprHsStringMulti' (unpackFS s) <> text "\"\"\"" ppr (HsStringPrim st s) = pprWithSourceText st (pprHsBytes s) ppr (HsInt _ i) = pprWithSourceText (il_text i) (integer (il_value i)) @@ -261,8 +259,7 @@ instance Outputable OverLitVal where pmPprHsLit :: forall p. IsPass p => HsLit (GhcPass p) -> SDoc pmPprHsLit (HsChar _ c) = pprHsChar c pmPprHsLit (HsCharPrim _ c) = pprHsChar c -pmPprHsLit (HsString st s) = pprWithSourceText st (pprHsString s) -pmPprHsLit (HsMultilineString st s) = pprWithSourceText st (pprHsString s) +pmPprHsLit (HsString st _ s) = pprWithSourceText st (pprHsString s) pmPprHsLit (HsStringPrim _ s) = pprHsBytes s pmPprHsLit (HsInt _ i) = integer (il_value i) pmPprHsLit (HsIntPrim _ i) = integer i ===================================== compiler/GHC/Hs/Syn/Type.hs ===================================== @@ -74,8 +74,7 @@ hsPatType (SplicePat v _) = dataConCantHappen v hsLitType :: forall p. IsPass p => HsLit (GhcPass p) -> Type hsLitType (HsChar _ _) = charTy hsLitType (HsCharPrim _ _) = charPrimTy -hsLitType (HsString _ _) = stringTy -hsLitType (HsMultilineString _ _) = stringTy +hsLitType (HsString _ _ _) = stringTy hsLitType (HsStringPrim _ _) = addrPrimTy hsLitType (HsInt _ _) = intTy hsLitType (HsIntPrim _ _) = intPrimTy ===================================== compiler/GHC/Hs/Utils.hs ===================================== @@ -478,10 +478,10 @@ mkHsOpApp :: LHsExpr GhcPs -> IdP GhcPs -> LHsExpr GhcPs -> HsExpr GhcPs mkHsOpApp e1 op e2 = OpApp noExtField e1 (noLocA (HsVar noExtField (noLocA op))) e2 mkHsString :: String -> HsLit (GhcPass p) -mkHsString s = HsString NoSourceText (mkFastString s) +mkHsString s = HsString NoSourceText HsStringTypeSingle (mkFastString s) mkHsStringFS :: FastString -> HsLit (GhcPass p) -mkHsStringFS s = HsString NoSourceText s +mkHsStringFS s = HsString NoSourceText HsStringTypeSingle s mkHsStringPrimLit :: FastString -> HsLit (GhcPass p) mkHsStringPrimLit fs = HsStringPrim NoSourceText (bytesFS fs) ===================================== compiler/GHC/HsToCore/Match/Literal.hs ===================================== @@ -120,8 +120,7 @@ dsLit l = do HsFloatPrim _ fl -> return (Lit (LitFloat (rationalFromFractionalLit fl))) HsDoublePrim _ fl -> return (Lit (LitDouble (rationalFromFractionalLit fl))) HsChar _ c -> return (mkCharExpr c) - HsString _ str -> mkStringExprFS str - HsMultilineString _ str -> mkStringExprFS str + HsString _ _ str -> mkStringExprFS str HsInt _ i -> return (mkIntExpr platform (il_value i)) XLit x -> case ghcPass @p of GhcTc -> case x of @@ -467,7 +466,6 @@ getSimpleIntegralLit (XLit (HsInteger _ i ty)) = Just (i, ty) getSimpleIntegralLit HsChar{} = Nothing getSimpleIntegralLit HsCharPrim{} = Nothing getSimpleIntegralLit HsString{} = Nothing -getSimpleIntegralLit HsMultilineString{} = Nothing getSimpleIntegralLit HsStringPrim{} = Nothing getSimpleIntegralLit (XLit (HsRat{})) = Nothing getSimpleIntegralLit HsFloatPrim{} = Nothing @@ -531,7 +529,7 @@ tidyLitPat :: HsLit GhcTc -> Pat GhcTc -- HsFloatPrim and HsDoublePrim can't show up in LitPats -- * We get rid of HsChar right here tidyLitPat (HsChar src c) = unLoc (mkCharLitPat src c) -tidyLitPat (HsString src s) +tidyLitPat (HsString src _ s) | lengthFS s <= 1 -- Short string literals only = unLoc $ foldr (\c pat -> mkPrefixConPat consDataCon [mkCharLitPat src c, pat] [charTy]) @@ -560,7 +558,7 @@ tidyNPat (OverLit (OverLitTc False _ ty) val) mb_neg _eq outer_ty | not type_change, isWordTy ty, Just int_lit <- mb_int_lit = mk_con_pat wordDataCon (HsWordPrim NoSourceText int_lit) | not type_change, isStringTy ty, Just str_lit <- mb_str_lit - = tidyLitPat (HsString NoSourceText str_lit) + = tidyLitPat (HsString NoSourceText HsStringTypeSingle str_lit) -- NB: do /not/ convert Float or Double literals to F# 3.8 or D# 5.3 -- If we do convert to the constructor form, we'll generate a case -- expression on a Float# or Double# and that's not allowed in Core; see @@ -664,7 +662,7 @@ hsLitKey _ (HsCharPrim _ c) = mkLitChar c hsLitKey _ (HsFloatPrim _ fl) = mkLitFloat (rationalFromFractionalLit fl) hsLitKey _ (HsDoublePrim _ fl) = mkLitDouble (rationalFromFractionalLit fl) -hsLitKey _ (HsString _ s) = LitString (bytesFS s) +hsLitKey _ (HsString _ _ s) = LitString (bytesFS s) hsLitKey _ l = pprPanic "hsLitKey" (ppr l) {- ===================================== compiler/GHC/HsToCore/Quote.hs ===================================== @@ -3040,8 +3040,7 @@ repLiteral lit HsDoublePrim _ _ -> Just doublePrimLName HsChar _ _ -> Just charLName HsCharPrim _ _ -> Just charPrimLName - HsString _ _ -> Just stringLName - HsMultilineString _ _ -> Just stringLName + HsString _ _ _ -> Just stringLName _ -> Nothing mk_integer :: Integer -> MetaM (HsLit GhcTc) @@ -3052,7 +3051,7 @@ mk_rational r = do rat_ty <- lookupType rationalTyConName return $ XLit $ HsRat r rat_ty mk_string :: FastString -> MetaM (HsLit GhcRn) -mk_string s = return $ HsString NoSourceText s +mk_string s = return $ HsString NoSourceText HsStringTypeSingle s mk_char :: Char -> MetaM (HsLit GhcRn) mk_char c = return $ HsChar NoSourceText c ===================================== compiler/GHC/Parser.y ===================================== @@ -88,6 +88,7 @@ import GHC.Parser.HaddockLex import GHC.Parser.Annotation import GHC.Parser.Errors.Types import GHC.Parser.Errors.Ppr () +import GHC.Parser.String (StringType(..)) import GHC.Builtin.Types ( unitTyCon, unitDataCon, sumTyCon, tupleTyCon, tupleDataCon, nilDataCon, @@ -727,8 +728,15 @@ are the most common patterns, rewritten as regular expressions for clarity: LABELVARID { L _ (ITlabelvarid _ _) } CHAR { L _ (ITchar _ _) } - STRING { L _ (ITstring _ _) } - STRING_MULTI { L _ (ITstringMulti _ _) } + STRING { L _ (ITstring _ StringTypeSingle _) } + STRING_MULTI { L _ (ITstring _ StringTypeMulti _) } + STRING_INTER_BEGIN { L _ (ITstringInterBegin StringTypeSingle) } + STRING_INTER_END { L _ (ITstringInterEnd StringTypeSingle) } + STRING_INTER_MULTI_BEGIN { L _ (ITstringInterBegin StringTypeMulti) } + STRING_INTER_MULTI_END { L _ (ITstringInterEnd StringTypeMulti) } + STRING_INTER_RAW { L _ (ITstringInterRaw _ _) } + STRING_INTER_EXP_OPEN { L _ ITstringInterExpOpen } + STRING_INTER_EXP_CLOSE { L _ ITstringInterExpClose } INTEGER { L _ (ITinteger _) } RATIONAL { L _ (ITrational _) } @@ -3113,6 +3121,7 @@ aexp2 :: { ECP } -- into HsOverLit when -XOverloadedStrings is on. -- | STRING { sL (getLoc $1) (HsOverLit $! mkHsIsString (getSTRINGs $1) -- (getSTRING $1) noExtField) } + | stringInter { ecpFromExp $1 } | INTEGER { ECP $ mkHsOverLitPV (sL1a $1 $ mkHsIntegral (getINTEGER $1)) } | RATIONAL { ECP $ mkHsOverLitPV (sL1a $1 $ mkHsFractional (getRATIONAL $1)) } @@ -3707,6 +3716,22 @@ ipvar :: { Located HsIPName } overloaded_label :: { Located (SourceText, FastString) } : LABELVARID { sL1 $1 (getLABELVARIDs $1, getLABELVARID $1) } +----------------------------------------------------------------------------- +-- Interpolated strings +-- See Note [Interpolated strings] in GHC.Parser.String + +stringInter :: { LHsExpr GhcPs } + : STRING_INTER_BEGIN stringInterParts STRING_INTER_END { processStringInter StringTypeSingle $1 $2 $3 } + | STRING_INTER_MULTI_BEGIN stringInterParts STRING_INTER_MULTI_END { processStringInter StringTypeMulti $1 $2 $3 } + +stringInterParts :: { [Either (SourceText, RawLexedString) (LHsExpr GhcPs)] } + : stringInterPart { [$1] } + | stringInterPart stringInterParts { $1 : $2 } + +stringInterPart :: { Either (SourceText, RawLexedString) (LHsExpr GhcPs) } + : STRING_INTER_RAW { Left (getStringInterRaw $1) } + | STRING_INTER_EXP_OPEN exp STRING_INTER_EXP_CLOSE { Right $2 } + ----------------------------------------------------------------------------- -- Warnings and deprecations @@ -4076,8 +4101,10 @@ consym :: { LocatedN RdrName } literal :: { Located (HsLit GhcPs) } : CHAR { sL1 $1 $ HsChar (getCHARs $1) $ getCHAR $1 } | STRING { sL1 $1 $ HsString (getSTRINGs $1) + HsStringTypeSingle $ getSTRING $1 } - | STRING_MULTI { sL1 $1 $ HsMultilineString (getSTRINGMULTIs $1) + | STRING_MULTI { sL1 $1 $ HsString (getSTRINGMULTIs $1) + HsStringTypeMulti $ getSTRINGMULTI $1 } | PRIMINTEGER { sL1 $1 $ HsIntPrim (getPRIMINTEGERs $1) $ getPRIMINTEGER $1 } @@ -4183,8 +4210,8 @@ getQCONSYM (L _ (ITqconsym x)) = x getIPDUPVARID (L _ (ITdupipvarid x)) = x getLABELVARID (L _ (ITlabelvarid _ x)) = x getCHAR (L _ (ITchar _ x)) = x -getSTRING (L _ (ITstring _ x)) = x -getSTRINGMULTI (L _ (ITstringMulti _ x)) = x +getSTRING (L _ (ITstring _ StringTypeSingle x)) = x +getSTRINGMULTI (L _ (ITstring _ StringTypeMulti x)) = x getINTEGER (L _ (ITinteger x)) = x getRATIONAL (L _ (ITrational x)) = x getPRIMCHAR (L _ (ITprimchar _ x)) = x @@ -4209,8 +4236,8 @@ getVOCURLY (L (RealSrcSpan l _) ITvocurly) = srcSpanStartCol l getINTEGERs (L _ (ITinteger (IL src _ _))) = src getCHARs (L _ (ITchar src _)) = src -getSTRINGs (L _ (ITstring src _)) = src -getSTRINGMULTIs (L _ (ITstringMulti src _)) = src +getSTRINGs (L _ (ITstring src StringTypeSingle _)) = src +getSTRINGMULTIs (L _ (ITstring src StringTypeMulti _)) = src getPRIMCHARs (L _ (ITprimchar src _)) = src getPRIMSTRINGs (L _ (ITprimstring src _)) = src getPRIMINTEGERs (L _ (ITprimint src _)) = src @@ -4281,6 +4308,70 @@ getSCC lt = do let s = getSTRING lt stringLiteralToHsDocWst :: Located StringLiteral -> LocatedE (WithHsDocIdentifiers StringLiteral GhcPs) stringLiteralToHsDocWst sl = reLoc $ lexStringLiteral parseIdentifier sl +getStringInterRaw :: Located Token -> (SourceText, RawLexedString) +getStringInterRaw (L _ (ITstringInterRaw src s)) = (src, s) + +processStringInter :: + StringType + -> Located Token + -> Located Token + -> [Either (SourceText, RawLexedString) (LHsExpr GhcPs)] + -> LHsExpr GhcPs +processStringInter strType tokBegin tokEnd parts = + L (comb2 tokBegin tokEnd) $ + HsInterString noExtField strType $ processParts parts + where + processParts = + map toInterStringPart $ + case strType of + StringTypeSingle -> map (first (fmap fromRawLexedStringSingle)) + StringTypeMulti -> fromAlt . withoutSrcText fromRawLexedStringMulti . toAlt + + toInterStringPart = \case + Left (src, s) -> HsInterStringRaw src (fsLit s) + Right e -> HsInterStringExpr noExtField e + + -- Strip SourceText annotations, run the given function, and + -- reapply SourceText annotations. Assumes the function does + -- not change the order or number of elements, which is true + -- for fromRawLexedStringMulti. + withoutSrcText :: + ((s, [(x, s)]) -> (s, [(x, s)])) -> + ((SourceText, s), [(x, (SourceText, s))]) -> + ((SourceText, s), [(x, (SourceText, s))]) + withoutSrcText f vals = + let + -- extract out (SourceText, [SourceText]) from the parts + unannotate ((src, s), parts) = ((src, map (fst . snd) parts), (s, map (fmap snd) parts)) + -- reapply SourceTexts + reannotate ((src0, srcs), (s, parts)) = + ( (src0, s) + , zipWith (\src (x, s) -> (x, (src, s))) srcs parts + ) + in + reannotate . f . unannotate + + toAlt :: Monoid s => [Either s x] -> (s, [(x, s)]) + toAlt = + let go = \case + [] -> (mempty, []) + Left s : [] -> (s, []) + Left s1 : Left s2 : rest -> go $ Left (s1 <> s2) : rest + Left s : Right x : rest -> + let (s', rest') = go rest + in (s, (x, s') : rest') + Right x : rest -> + let (s, rest') = go rest + in (mempty, (x, s) : rest') + in go + + fromAlt :: Foldable s => (s, [(x, s)]) -> [Either s x] + fromAlt (s, xs) = + let notEmpty = \case + Left s -> null s + Right _ -> True + in filter notEmpty $ Left s : concatMap (\(x, s') -> [Right x, Left s']) xs + -- Utilities for combining source spans comb2 :: (HasLoc a, HasLoc b) => a -> b -> SrcSpan comb2 !a !b = combineHasLocs a b ===================================== compiler/GHC/Parser/Lexer.x ===================================== @@ -170,7 +170,7 @@ $idchar = [$small $large $digit $uniidchar \'] $unigraphic = \x06 -- Trick Alex into handling Unicode. See Note [Unicode in Alex]. $graphic = [$small $large $symbol $digit $idchar $special $unigraphic \"\'] -$charesc = [a b f n r t v \\ \" \' \&] +$charesc = [a b f n r t v \\ \" \' \& \$] $binit = 0-1 $octit = 0-7 @@ -228,8 +228,9 @@ $docsym = [\| \^ \* \$] -- character sets can be subtracted, not strings @escape = \\ ( $charesc | @ascii | @decimal | o @octal | x @hexadecimal ) @escapechar = \\ ( $charesc # \& | @ascii | @decimal | o @octal | x @hexadecimal ) - at stringchar = ($graphic # [\\ \"]) | $space | @escape | @gap - at char = ($graphic # [\\ \']) | $space | @escapechar + at stringchar = ($graphic # [\\ \"]) | $space | @escape | @gap + at char = ($graphic # [\\ \']) | $space | @escapechar + at stringinterchar = ($graphic # [\\ \" \$]) | $space | @escape | @gap -- normal signed numerical literals can only be explicitly negative, -- not explicitly positive (contrast @exponent) @@ -629,6 +630,21 @@ $unigraphic / { isSmartQuote } { smart_quote_error } (\" | \"\") / ([\n .] # \") { tok_string_multi_content } } +-- See Note [Interpolated strings] +<0> { + s \" { \span _ _ _ -> pushLexState string_inter_content >> pure (L span (ITstringInterBegin StringTypeSingle)) } + -- TODO(bchinn): interpolated multiline strings +} + +-- TODO(bchinn): add string_inter state to all <0> states that can be in an interpolated string + { + @stringinterchar* { tok_string_inter_raw } + \$ \{ { \span _ _ _ -> pushLexState string_inter >> pure (L span ITstringInterExpOpen) } + \" { \span _ _ _ -> popLexState >> pure (L span (ITstringInterEnd StringTypeSingle)) } + + -- TODO(bchinn): check for smart quotes +} + <0> { \'\' { token ITtyQuote } @@ -920,9 +936,16 @@ data Token -- have a string literal as a label -- Note [Literal source text] in "GHC.Types.SourceText" - | ITchar SourceText Char -- Note [Literal source text] in "GHC.Types.SourceText" - | ITstring SourceText FastString -- Note [Literal source text] in "GHC.Types.SourceText" - | ITstringMulti SourceText FastString -- Note [Literal source text] in "GHC.Types.SourceText" + | ITchar SourceText Char -- Note [Literal source text] in "GHC.Types.SourceText" + | ITstring SourceText StringType FastString -- Note [Literal source text] in "GHC.Types.SourceText" + + -- See Note [Interpolated strings] + | ITstringInterBegin StringType + | ITstringInterRaw SourceText RawLexedString -- Note [Literal source text] in "GHC.Types.SourceText" + | ITstringInterExpOpen + | ITstringInterExpClose + | ITstringInterEnd StringType + | ITinteger IntegralLit -- Note [Literal source text] in "GHC.Types.SourceText" | ITrational FractionalLit @@ -1672,8 +1695,11 @@ open_brace span _str _len _buf2 = do setContext (NoLayout:ctx) return (L span ITocurly) close_brace span _str _len _buf2 = do - popContext - return (L span ITccurly) + ctx <- getContext + sc <- getLexState + if null ctx && sc == string_inter + then popLexState >> pure (L span ITstringInterExpClose) + else popContext >> pure (L span ITccurly) qvarid, qconid :: StringBuffer -> Int -> Token qvarid buf len = ITqvarid $! splitQualName buf len False @@ -2166,11 +2192,19 @@ tok_string span buf len _buf2 = do addError err pure $ L span (ITprimstring src (unsafeMkByteString s)) else - pure $ L span (ITstring src (mkFastString s)) + pure $ L span (ITstring src StringTypeSingle (mkFastString s)) where src = SourceText $ lexemeToFastString buf len endsInHash = currentChar (offsetBytes (len - 1) buf) == '#' +tok_string_inter_raw :: Action +tok_string_inter_raw span buf len _ = do + s <- either (throwStringLexError i0) pure $ lexStringRaw len buf + pure $ L span (ITstringInterRaw src s) + where + i0 = AI (psSpanStart span) buf + src = SourceText $ lexemeToFastString buf len + -- | Ideally, we would define this completely with Alex syntax, like normal strings. -- Instead, this is defined as a hybrid solution by manually invoking lex states, which -- we're doing for two reasons: @@ -2195,10 +2229,10 @@ tok_string_multi startSpan startBuf _len _buf2 = do let contentLen = byteDiff contentStartBuf contentEndBuf s <- either (throwStringLexError (AI startLoc startBuf)) pure $ - lexMultilineString contentLen contentStartBuf + lexString StringTypeMulti contentLen contentStartBuf setInput i' - pure $ L span $ ITstringMulti src (mkFastString s) + pure $ L span $ ITstring src StringTypeMulti (mkFastString s) where goContent i0 = case alexScan i0 string_multi_content of @@ -2243,7 +2277,7 @@ tok_string_multi_content = panic "tok_string_multi_content unexpectedly invoked" lex_chars :: (String, String) -> PsSpan -> StringBuffer -> Int -> P String lex_chars (startDelim, endDelim) span buf len = either (throwStringLexError i0) pure $ - lexString contentLen contentBuf + lexString StringTypeSingle contentLen contentBuf where i0@(AI _ contentBuf) = advanceInputBytes (length startDelim) $ AI (psSpanStart span) buf ===================================== compiler/GHC/Parser/String.hs ===================================== @@ -5,8 +5,12 @@ module GHC.Parser.String ( StringLexError (..), + StringType (..), lexString, - lexMultilineString, + + -- * Raw strings + RawLexedString, + lexStringRaw, -- * Unicode smart quote helpers isDoubleSmartQuote, @@ -17,8 +21,11 @@ import GHC.Prelude hiding (getChar) import Control.Arrow ((>>>)) import Control.Monad (when) +import Data.Bifunctor (first) import Data.Char (chr, ord) import qualified Data.Foldable1 as Foldable1 +import Data.Functor.Identity (Identity (..)) +import Data.List (unsnoc) import qualified Data.List.NonEmpty as NonEmpty import Data.Maybe (listToMaybe, mapMaybe) import GHC.Data.StringBuffer (StringBuffer) @@ -37,13 +44,16 @@ import GHC.Utils.Panic (panic) type BufPos = Int data StringLexError = StringLexError LexErr BufPos -lexString :: Int -> StringBuffer -> Either StringLexError String -lexString = lexStringWith processChars processChars +data StringType = StringTypeSingle | StringTypeMulti deriving (Show) + +lexString :: StringType -> Int -> StringBuffer -> Either StringLexError String +lexString strType = lexStringWith processChars where - processChars :: HasChar c => [c] -> Either (c, LexErr) [c] + processChars :: HasChar c => [c] -> Maybe [c] processChars = - collapseGaps - >>> resolveEscapes + case strType of + StringTypeSingle -> fromRight . processCharsSingle + StringTypeMulti -> processCharsMulti -- ----------------------------------------------------------------------------- -- Lexing interface @@ -66,26 +76,27 @@ So what we'll do is do two passes. The first pass is optimistic; just convert to a plain String and process it. If this results in an error, we do a second pass, this time where each character is annotated with its position. Now, the error has all the information it needs. - -Ideally, lexStringWith would take a single (forall c. HasChar c => ...) function, -but to help the specializer, we pass it in twice to concretize it for the two -types we actually use. -} -- | See Note [Lexing strings] -lexStringWith :: - ([Char] -> Either (Char, LexErr) [Char]) - -> ([CharPos] -> Either (CharPos, LexErr) [CharPos]) - -> Int - -> StringBuffer - -> Either StringLexError String -lexStringWith processChars processCharsPos len buf = +lexStringWith :: (String -> Maybe String) -> Int -> StringBuffer -> Either StringLexError String +lexStringWith processChars len buf = case processChars $ bufferChars buf len of - Right s -> Right s - Left _ -> - case processCharsPos $ bufferLocatedChars buf len of - Right _ -> panic "expected lex error on second pass" - Left ((_, pos), e) -> Left $ StringLexError e pos + Just s -> Right s + Nothing -> do + validateString len buf -- should return Left + panic "expected lex error on second pass" + +-- | Find any lexical errors in the string. +-- +-- Can validate both single- and multi-line strings, since multi-line strings +-- have the same validation logic as single-line strings, and none of the +-- multi-line string processing steps affect the validity of the string. +validateString :: Int -> StringBuffer -> Either StringLexError () +validateString len buf = + case processCharsSingle $ bufferLocatedChars buf len of + Right _ -> Right () + Left ((_, pos), e) -> Left $ StringLexError e pos class HasChar c where getChar :: c -> Char @@ -122,6 +133,11 @@ bufferLocatedChars initialBuf len = go initialBuf -- ----------------------------------------------------------------------------- -- Lexing phases +processCharsSingle :: HasChar c => [c] -> Either (c, LexErr) [c] +processCharsSingle = + collapseGaps + >>> resolveEscapes + collapseGaps :: HasChar c => [c] -> [c] collapseGaps = go where @@ -149,6 +165,9 @@ resolveEscapes = go dlistEmpty Left (c, e) -> Left (c, e) c : cs -> go (acc `dlistSnoc` c) cs +resolveEscapesMaybe :: HasChar c => [c] -> Maybe [c] +resolveEscapesMaybe = fromRight . resolveEscapes + -- ----------------------------------------------------------------------------- -- Escape characters @@ -247,6 +266,76 @@ isSingleSmartQuote = \case '’' -> True _ -> False +-- ----------------------------------------------------------------------------- +-- Interpolated strings + +-- | A string that's been validated to be lexically correct, but still +-- contains the raw string lexed, without anything resolved. +newtype RawLexedString = RawLexedString {unRawLexedString :: String} + deriving (Foldable, Semigroup, Monoid) + +-- | Load and validate the string in the given StringBuffer. +-- +-- e.g. Lexing "a\nb" will return RawLexedString ['a', '\\', 'n', 'b']. +lexStringRaw :: Int -> StringBuffer -> Either StringLexError RawLexedString +lexStringRaw len buf = RawLexedString (bufferChars len buf) <$ validateString len buf + +fromRawLexedStringSingle :: RawLexedString -> String +fromRawLexedStringSingle (RawLexedString s) = + case processCharsSingle s of + Right s' -> s' + Left _ -> panic "Unexpectedly got an error when re-lexing the string" + +fromRawLexedStringMulti :: (RawLexedString, [(x, RawLexedString)]) -> (String, [(x, String)]) +fromRawLexedStringMulti s = + case processCharsMulti' (to s) of + Just s' -> from s' + Nothing -> panic "Unexpectedly got an error when re-lexing the string" + where + to (pre, parts) = InterMultiString pre parts + from (InterMultiString pre parts) = (pre, parts) + +{- +Note [Interpolated strings] +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Interpolated string syntax was accepted in this proposal: +https://github.com/ghc-proposals/ghc-proposals/pull/570 + +Interpolated strings are syntax sugar for + +Interpolated strings are implemented in the following manner: + +1. Lexer takes the string as input: + + s"Hello ${Text.toUpper name}!" + + and outputs the following tokens: + + [ ITstringInterBegin src StringTypeSingle + , ITstringInterRaw src "Hello " + , ITstringInterExpOpen src + , ITqvarid ("Text.toUpper", "name") + , ITvarid "name" + , ITstringInterExpClose src + , ITstringInterRaw src "!" + , ITstringInterEnd src StringTypeSingle + ] + +2. The parser will then parse the tokens into the following HsExpr: + + HsInterString ext + [ HsInterRaw ext "Hello " + , HsInterExp ext $ + HsApp ext + (HsVar ext 'Text.toUpper) + (HsVar ext 'name) + , HsInterRaw ext "!" + ] + +3. This will then be desugared into +-} + -- ----------------------------------------------------------------------------- -- Multiline strings @@ -255,89 +344,98 @@ isSingleSmartQuote = \case -- Assumes string is lexically valid. Skips the steps about splitting -- and rejoining lines, and instead manually find newline characters, -- for performance. -lexMultilineString :: Int -> StringBuffer -> Either StringLexError String -lexMultilineString = lexStringWith processChars processChars +processCharsMulti :: String -> Maybe String +processCharsMulti = fmap from . processCharsMulti' . to where - processChars :: HasChar c => [c] -> Either (c, LexErr) [c] - processChars = - collapseGaps -- Step 1 - >>> normalizeEOL - >>> expandLeadingTabs -- Step 3 - >>> rmCommonWhitespacePrefix -- Step 4 - >>> collapseOnlyWsLines -- Step 5 - >>> rmFirstNewline -- Step 7a - >>> rmLastNewline -- Step 7b - >>> resolveEscapes -- Step 8 - - -- Normalize line endings to LF. The spec dictates that lines should be - -- split on newline characters and rejoined with ``\n``. But because we - -- aren't actually splitting/rejoining, we'll manually normalize here - normalizeEOL :: HasChar c => [c] -> [c] - normalizeEOL = - let go = \case - Char '\r' : c@(Char '\n') : cs -> c : go cs - c@(Char '\r') : cs -> setChar '\n' c : go cs - c@(Char '\f') : cs -> setChar '\n' c : go cs - c : cs -> c : go cs - [] -> [] - in go - - -- expands all tabs, since the lexer will verify that tabs can only appear - -- as leading indentation - expandLeadingTabs :: HasChar c => [c] -> [c] - expandLeadingTabs = - let go !col = \case - c@(Char '\t') : cs -> - let fill = 8 - (col `mod` 8) - in replicate fill (setChar ' ' c) ++ go (col + fill) cs - c : cs -> c : go (if getChar c == '\n' then 0 else col + 1) cs - [] -> [] - in go 0 + -- Convert a normal multiline string to/from an interpolated multiline string + -- with no interpolated expressions. + to s = InterMultiString s [] + from = \case + InterMultiString s [] -> s + _ -> panic "Got unexpected result when processing characters in multiline string" + +-- | An interpolated, multiline string to be processed. +-- +-- `x` here will only ever be instantiated as `HsExpr`, but we'll leave it general to ensure +-- we never modify it, we only ever propagate it. +-- +-- We represent this as a list of (x, String) tuples instead of [Either x String] to guarantee +-- that we don't have to handle two raw Strings next to each other. +data InterMultiString x = + InterMultiString + String -- ^ beginning of the string before the first interpolated expr + [(x, String)] -- ^ (expr, raw string) interleaved groups + +-- Run the given function over all raw strings, ignoring expressions +overRaw :: (String -> String) -> InterMultiString x -> InterMultiString x +overRaw f = runIdentity . overRawM (Identity . f) + +overRawM :: Monad m => (String -> m String) -> InterMultiString x -> m (InterMultiString x) +overRawM f (InterMultiString pre parts) = InterMultiString <$> f pre <*> (traverse . traverse) f parts + +-- | Process multiline characters generally, for both normal multiline strings and interpolated +-- multiline strings. +processCharsMulti' :: InterMultiString x -> Maybe (InterMultiString x) +processCharsMulti' = + overRaw collapseGaps -- Step 1 + >>> overRaw normalizeEOL + >>> expandLeadingTabs -- Step 3 + >>> rmCommonWhitespacePrefix -- Step 4 + >>> collapseOnlyWsLines -- Step 5 + >>> rmFirstNewline -- Step 7a + >>> rmLastNewline -- Step 7b + >>> overRawM resolveEscapesMaybe -- Step 8 + +-- | Expands all tabs blindly, since the lexer will verify that tabs can only appear +-- as leading indentation +expandLeadingTabs :: InterMultiString x -> InterMultiString x +expandLeadingTabs = + -- we can expand each raw string part independently, because leading + -- indentation will never contain an interpolated expression + overRaw $ go 0 + where + go !col = \case + c@'\t' : cs -> + let fill = 8 - (col `mod` 8) + in replicate fill ' ' ++ go (col + fill) cs + c : cs -> c : go (if c == '\n' then 0 else col + 1) cs + [] -> [] + +-- Normalize line endings to LF. The spec dictates that lines should be +-- split on newline characters and rejoined with ``\n``. But because we +-- aren't actually splitting/rejoining, we'll manually normalize here +normalizeEOL :: String -> String +normalizeEOL = go + where + go = \case + Char '\r' : c@(Char '\n') : cs -> c : go cs + c@(Char '\r') : cs -> setChar '\n' c : go cs + c@(Char '\f') : cs -> setChar '\n' c : go cs + c : cs -> c : go cs + [] -> [] + +rmCommonWhitespacePrefix :: InterMultiString x -> InterMultiString x +rmCommonWhitespacePrefix s0 = + -- Whitespace prefix, by definition, only comes after newline characters, and there can + -- never be an interpolated expr within a whitespace prefix (since the expr would end + -- the prefix). So we can use a plain `map` to just process the string parts, because + -- the "drop prefix" logic will never span over multiple parts. + map (first go) parts + where + -- treat interpolated exprs as a single, non-space character string + commonWSPrefix = getCommonWsPrefix $ case s0 of InterMultiString pre parts -> pre ++ concatMap snd parts + + go = \case + c@'\n' : cs -> c : go (dropPrefix commonWSPrefix cs) + c : cs -> c : go cs + [] -> [] - rmCommonWhitespacePrefix :: HasChar c => [c] -> [c] - rmCommonWhitespacePrefix cs0 = - let commonWSPrefix = getCommonWsPrefix (map getChar cs0) - go = \case - c@(Char '\n') : cs -> c : go (dropLine commonWSPrefix cs) - c : cs -> c : go cs - [] -> [] - -- drop x characters from the string, or up to a newline, whichever - -- comes first - dropLine !x = \case - cs | x <= 0 -> cs - cs@(Char '\n' : _) -> cs - _ : cs -> dropLine (x - 1) cs - [] -> [] - in go cs0 - - collapseOnlyWsLines :: HasChar c => [c] -> [c] - collapseOnlyWsLines = - let go = \case - c@(Char '\n') : cs | Just cs' <- checkAllWs cs -> c : go cs' - c : cs -> c : go cs - [] -> [] - checkAllWs = \case - -- got all the way to a newline or the end of the string, return - cs@(Char '\n' : _) -> Just cs - cs@[] -> Just cs - -- found whitespace, continue - Char c : cs | is_space c -> checkAllWs cs - -- anything else, stop - _ -> Nothing - in go - - rmFirstNewline :: HasChar c => [c] -> [c] - rmFirstNewline = \case - Char '\n' : cs -> cs - cs -> cs - - rmLastNewline :: HasChar c => [c] -> [c] - rmLastNewline = - let go = \case - [] -> [] - [Char '\n'] -> [] - c : cs -> c : go cs - in go + -- drop x characters from the string, or up to a newline, whichever comes first + dropPrefix !x = \case + cs | x <= 0 -> cs + cs@('\n' : _) -> cs + _ : cs -> dropPrefix (x - 1) cs + [] -> [] -- | See step 4 in Note [Multiline string literals] -- @@ -353,6 +451,48 @@ getCommonWsPrefix s = . drop 1 -- ignore first line in calculation $ lines s +collapseOnlyWsLines :: InterMultiString x -> InterMultiString x +collapseOnlyWsLines (InterMultiString pre parts) = + let pre' = go (null parts) pre + parts' = [(expr, go isLast s) | ((expr, s), isLast) <- withIsLast parts] + in InterMultiString pre' parts' + where + go isLast = \case + c@'\n' : cs | Just cs' <- checkAllWs isLast cs -> c : go cs' + c : cs -> c : go cs + [] -> [] + + checkAllWs isLast = \case + -- got all the way to a newline or the end of the string, return + cs@('\n' : _) -> Just cs + cs@[] | isLast -> Just cs + -- found whitespace, continue + c : cs | is_space c -> checkAllWs cs + -- anything else, stop + _ -> Nothing + + -- annotate every element with a Bool indicating if it's the last element + withIsLast :: [a] -> [(a, Bool)] + withIsLast xs = zip xs $ (False <$ init xs) ++ [True] + +rmFirstNewline :: InterMultiString x -> InterMultiString x +rmFirstNewline = \case + InterMultiString ('\n' : pre) parts -> InterMultiString pre parts + s -> s + +rmLastNewline :: InterMultiString x -> InterMultiString x +rmLastNewline (InterMultiString pre parts) = + case unsnoc parts of + Nothing -> + InterMultiString (go pre) parts + Just (parts0, (x, lastLine)) -> + InterMultiString pre (parts0 ++ [(x, go lastLine)]) + where + go = \case + [] -> [] + ['\n'] -> [] + c : cs -> c : go cs + {- Note [Multiline string literals] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -362,8 +502,8 @@ proposal: https://github.com/ghc-proposals/ghc-proposals/pull/569 Multiline string literals are syntax sugar for normal string literals, with an extra post processing step. This all happens in the Lexer; that -is, HsMultilineString will contain the post-processed string. This matches -the same behavior as HsString, which contains the normalized string +is, HsString will contain the post-processed string. This matches the same +behavior as single-line HsString, which contains the normalized string (see Note [Literal source text]). The canonical steps for post processing a multiline string are: @@ -405,3 +545,9 @@ dlistToList (DList f) = f [] dlistSnoc :: DList a -> a -> DList a dlistSnoc (DList f) x = DList (f . (x :)) + +-- ----------------------------------------------------------------------------- +-- Other utilities + +fromRight :: Either e a -> Maybe a +fromRight = either (const Nothing) Just ===================================== compiler/GHC/Rename/Expr.hs ===================================== @@ -375,8 +375,7 @@ rnExpr (HsLit x lit) | Just (src, s) <- stringLike lit ; return (HsLit x (convertLit lit), emptyFVs) } } where stringLike = \case - HsString src s -> Just (src, s) - HsMultilineString src s -> Just (src, s) + HsString src _ s -> Just (src, s) _ -> Nothing rnExpr (HsLit x lit) @@ -391,6 +390,9 @@ rnExpr (HsOverLit x lit) return (HsApp noExtField (noLocA neg) (noLocA (HsOverLit x lit')) , fvs ) } +rnExpr (HsInterString x ty parts) + = undefined -- TODO(bchinn) + rnExpr (HsApp x fun arg) = do { (fun',fvFun) <- rnLExpr fun ; (arg',fvArg) <- rnLExpr arg ===================================== compiler/GHC/Rename/Pat.hs ===================================== @@ -565,7 +565,7 @@ rnPatAndThen mk (SigPat _ pat sig) rnHsPatSigTypeAndThen sig = liftCpsWithCont (rnHsPatSigType AlwaysBind PatCtx sig) rnPatAndThen mk (LitPat x lit) - | HsString src s <- lit + | HsString src _ s <- lit = do { ovlStr <- liftCps (xoptM LangExt.OverloadedStrings) ; if ovlStr then rnPatAndThen mk ===================================== compiler/GHC/Rename/Splice.hs ===================================== @@ -427,7 +427,7 @@ mkQuasiQuoteExpr flavour quoter (L q_span' quote) where q_span = noAnnSrcSpan (locA q_span') quoterExpr = L q_span $! HsVar noExtField $! (L (l2l q_span) quoter) - quoteExpr = L q_span $! HsLit noExtField $! HsString NoSourceText quote + quoteExpr = L q_span $! HsLit noExtField $! HsString NoSourceText HsStringTypeSingle quote quote_selector = case flavour of UntypedExpSplice -> quoteExpName UntypedPatSplice -> quotePatName ===================================== compiler/GHC/Tc/Gen/HsType.hs ===================================== @@ -4774,8 +4774,7 @@ addTyConFlavCtxt name flav tyLitFromLit :: HsLit GhcRn -> Maybe (HsTyLit GhcRn) -tyLitFromLit (HsString x str) = Just (HsStrTy x str) -tyLitFromLit (HsMultilineString x str) = Just (HsStrTy x str) +tyLitFromLit (HsString x _ str) = Just (HsStrTy x str) tyLitFromLit (HsChar x char) = Just (HsCharTy x char) tyLitFromLit _ = Nothing ===================================== compiler/GHC/Tc/Utils/Instantiate.hs ===================================== @@ -822,7 +822,7 @@ mkOverLit (HsFractional r) = do { rat_ty <- tcMetaTy rationalTyConName ; return (XLit $ HsRat r rat_ty) } -mkOverLit (HsIsString src s) = return (HsString src s) +mkOverLit (HsIsString src s) = return (HsString src HsStringTypeSingle s) {- ************************************************************************ ===================================== compiler/GHC/Tc/Utils/TcMType.hs ===================================== @@ -2379,7 +2379,7 @@ shortCutLit platform val res_ty -- is less than 100, which ensures desugaring isn't slow. go_string src s - | isStringTy res_ty = Just (HsLit noExtField (HsString src s)) + | isStringTy res_ty = Just (HsLit noExtField (HsString src HsStringTypeSingle s)) | otherwise = Nothing mkLit :: DataCon -> HsLit GhcTc -> HsExpr GhcTc ===================================== compiler/GHC/ThToHs.hs ===================================== @@ -1428,7 +1428,7 @@ cvtLit (CharL c) = do { force c; return $ HsChar NoSourceText c } cvtLit (CharPrimL c) = do { force c; return $ HsCharPrim NoSourceText c } cvtLit (StringL s) = do { let { s' = mkFastString s } ; force s' - ; return $ HsString (quotedSourceText s) s' } + ; return $ HsString (quotedSourceText s) HsStringTypeSingle s' } cvtLit (StringPrimL s) = do { let { !s' = BS.pack s } ; return $ HsStringPrim NoSourceText s' } cvtLit (BytesPrimL (Bytes fptr off sz)) = do ===================================== compiler/GHC/Utils/Outputable.hs ===================================== @@ -69,7 +69,7 @@ module GHC.Utils.Outputable ( pprDebugAndThen, pprInfixVar, pprPrefixVar, - pprHsChar, pprHsString, pprHsBytes, + pprHsChar, pprHsString, pprHsString', pprHsStringMulti', pprHsBytes, primFloatSuffix, primCharSuffix, primDoubleSuffix, primInt8Suffix, primWord8Suffix, @@ -161,7 +161,7 @@ import Data.Void import Control.DeepSeq (NFData(rnf)) import GHC.Fingerprint -import GHC.Show ( showMultiLineString ) +import GHC.Show ( showLitStringLines, showLitStringMultiline ) import GHC.Utils.Exception import GHC.Exts (oneShot) @@ -1297,14 +1297,20 @@ pprHsChar :: Char -> SDoc pprHsChar c | c > '\x10ffff' = char '\\' <> text (show (fromIntegral (ord c) :: Word32)) | otherwise = text (show c) --- | Special combinator for showing string literals. +-- | Special combinator for showing single-line string literals. pprHsString :: FastString -> SDoc -pprHsString fs = vcat (map text (showMultiLineString (unpackFS fs))) +pprHsString fs = char '"' <> pprHsString' (unpackFS fs) <> char '"' + +pprHsString' :: String -> SDoc +pprHsString' = vcat . map text . showLitStringLines + +pprHsStringMulti' :: String -> SDoc +pprHsStringMulti' = vcat . map text . showLitStringMultiline -- | Special combinator for showing bytestring literals. pprHsBytes :: ByteString -> SDoc pprHsBytes bs = let escaped = concatMap escape $ BS.unpack bs - in vcat (map text (showMultiLineString escaped)) <> char '#' + in char '"' <> pprHsString' escaped <> text "\"#" where escape :: Word8 -> String escape w = let c = chr (fromIntegral w) in if isAscii c ===================================== compiler/Language/Haskell/Syntax/Expr.hs ===================================== @@ -346,19 +346,24 @@ data HsExpr p -- erroring expression will be written after -- solving. See Note [Holes] in GHC.Tc.Types.Constraint. - - | HsOverLabel (XOverLabel p) FastString -- ^ Overloaded label (Note [Overloaded labels] in GHC.OverloadedLabels) | HsIPVar (XIPVar p) HsIPName -- ^ Implicit parameter (not in use after typechecking) + | HsOverLit (XOverLitE p) (HsOverLit p) -- ^ Overloaded literals | HsLit (XLitE p) (HsLit p) -- ^ Simple (non-overloaded) literals + | -- | See Note [Interpolated strings] + HsInterString + (XInterString p) + HsStringType + [HsInterStringPart p] + -- | Lambda, Lambda-case, and Lambda-cases | HsLam (XLam p) HsLamVariant -- ^ Tells whether this is for lambda, \case, or \cases @@ -589,6 +594,10 @@ data HsLamVariant | LamCases -- ^ `\cases psi -> ei` deriving (Data, Eq) +data HsInterStringPart p + = HsInterStringRaw (XInterStringRaw p) FastString + | HsInterStringExpr (XInterStringExp p) (LHsExpr p) + {- Note [Parens in HsSyn] ~~~~~~~~~~~~~~~~~~~~~~ ===================================== compiler/Language/Haskell/Syntax/Extension.hs ===================================== @@ -410,6 +410,9 @@ type family XOverLabel x type family XIPVar x type family XOverLitE x type family XLitE x +type family XInterString x +type family XInterStringRaw x +type family XInterStringExp x type family XLam x type family XLamCase x type family XApp x @@ -550,7 +553,6 @@ type family XXParStmtBlock x x' type family XHsChar x type family XHsCharPrim x type family XHsString x -type family XHsMultilineString x type family XHsStringPrim x type family XHsInt x type family XHsIntPrim x ===================================== compiler/Language/Haskell/Syntax/Lit.hs ===================================== @@ -50,9 +50,7 @@ data HsLit x -- ^ Character | HsCharPrim (XHsCharPrim x) {- SourceText -} Char -- ^ Unboxed character - | HsString (XHsString x) {- SourceText -} FastString - -- ^ String - | HsMultilineString (XHsMultilineString x) {- SourceText -} FastString + | HsString (XHsString x) {- SourceText -} HsStringType FastString -- ^ String | HsStringPrim (XHsStringPrim x) {- SourceText -} !ByteString -- ^ Packed bytes @@ -88,7 +86,7 @@ data HsLit x instance (Eq (XXLit x)) => Eq (HsLit x) where (HsChar _ x1) == (HsChar _ x2) = x1==x2 (HsCharPrim _ x1) == (HsCharPrim _ x2) = x1==x2 - (HsString _ x1) == (HsString _ x2) = x1==x2 + (HsString _ _ x1) == (HsString _ _ x2) = x1==x2 (HsStringPrim _ x1) == (HsStringPrim _ x2) = x1==x2 (HsInt _ x1) == (HsInt _ x2) = x1==x2 (HsIntPrim _ x1) == (HsIntPrim _ x2) = x1==x2 @@ -134,3 +132,6 @@ instance Ord OverLitVal where compare (HsIsString _ s1) (HsIsString _ s2) = s1 `lexicalCompareFS` s2 compare (HsIsString _ _) (HsIntegral _) = GT compare (HsIsString _ _) (HsFractional _) = GT + +data HsStringType = HsStringTypeSingle | HsStringTypeMulti + deriving Data ===================================== libraries/base/src/GHC/Show.hs ===================================== @@ -18,7 +18,7 @@ module GHC.Show Show(..), ShowS, -- * Show support code - shows, showChar, showString, showMultiLineString, + shows, showChar, showString, showLitStringLines, showLitStringMultiline, showParen, showList__, showCommaSpace, showSpace, showLitChar, showLitString, protectEsc, intToDigit, showSignedInt, ===================================== libraries/ghc-boot-th/GHC/Internal/TH/Ppr.hs ===================================== @@ -14,7 +14,7 @@ import GHC.Internal.TH.Syntax import Data.Word ( Word8 ) import Data.Char ( toLower, chr ) import Data.List ( intersperse ) -import GHC.Show ( showMultiLineString ) +import GHC.Show ( showLitStringLines ) import GHC.Lexeme( isVarSymChar ) import Data.Ratio ( numerator, denominator ) import Data.Foldable ( toList ) @@ -359,7 +359,7 @@ bytesToString = map (chr . fromIntegral) pprString :: String -> Doc -- Print newlines as newlines with Haskell string escape notation, -- not as '\n'. For other non-printables use regular escape notation. -pprString s = vcat (map text (showMultiLineString s)) +pprString s = char '"' <> vcat (map text (showLitStringLines s)) <> char '"' ------------------------------ instance Ppr Pat where ===================================== libraries/ghc-internal/src/GHC/Internal/Show.hs ===================================== @@ -38,7 +38,7 @@ module GHC.Internal.Show -- Instances for Show: (), [], Bool, Ordering, Int, Char -- Show support code - shows, showChar, showString, showMultiLineString, + shows, showChar, showString, showLitStringLines, showLitStringMultiline, showParen, showList__, showCommaSpace, showSpace, showLitChar, showLitString, protectEsc, intToDigit, showSignedInt, @@ -389,13 +389,17 @@ showLitChar c s = showString ('\\' : asciiTab!!ord c) s -- I've done manual eta-expansion here, because otherwise it's -- impossible to stop (asciiTab!!ord) getting floated out as an MFE +showLitChars :: String -> ShowS +showLitChars [] s = s +showLitChars (c : cs) s = showLitChar c (showLitChars cs s) + showLitString :: String -> ShowS -- | Same as 'showLitChar', but for strings -- It converts the string to a string using Haskell escape conventions -- for non-printable characters. Does not add double-quotes around the -- whole thing; the caller should do that. --- The main difference from showLitChar (apart from the fact that the --- argument is a string not a list) is that we must escape double-quotes +-- The main difference from showLitChar (apart from iterating over all Chars +-- in the String) is that we must escape double-quotes showLitString [] s = s showLitString ('"' : cs) s = showString "\\\"" (showLitString cs s) showLitString (c : cs) s = showLitChar c (showLitString cs s) @@ -404,20 +408,32 @@ showLitString (c : cs) s = showLitChar c (showLitString cs s) -- The sticking point is the recursive call to (showLitString cs), which -- it can't figure out would be ok with arity 2. -showMultiLineString :: String -> [String] --- | Like 'showLitString' (expand escape characters using Haskell --- escape conventions), but --- * break the string into multiple lines --- * wrap the entire thing in double quotes --- Example: @showMultiLineString "hello\ngoodbye\nblah"@ --- returns @["\"hello\\n\\", "\\goodbye\n\\", "\\blah\""]@ -showMultiLineString str - = go '\"' str +-- | Like 'showLitString', but split on newlines, assuming that all newlines +-- were written with string gaps. +-- +-- Example: @showLitStringLines "hello\ngoodbye\nblah"@ +-- returns @["hello\\n\\", "\\goodbye\n\\", "\\blah"]@ +-- +-- Caller is responsible for adding double-quotes around the result. +showLitStringLines :: String -> [String] +showLitStringLines str + = go id str + where + go pre s = case break (== '\n') s of + (l, _:s'@(_:_)) -> (pre $ showLitString l "\\n\\") : go ('\\' :) s' + (l, "\n") -> [pre $ showLitString l "\\n"] + (l, _) -> [pre $ showLitString l ""] + +-- | Split input into lines and escape characters in a multiline string. +-- Does not include start/end delimiters. +showLitStringMultiline :: String -> [String] +showLitStringMultiline = map (flip showLitChars "") . lines where - go ch s = case break (== '\n') s of - (l, _:s'@(_:_)) -> (ch : showLitString l "\\n\\") : go '\\' s' - (l, "\n") -> [ch : showLitString l "\\n\""] - (l, _) -> [ch : showLitString l "\""] + lines "" = [] + lines s = + case break (== '\n') s of + (line, _ : s') -> line : lines s' + (line, []) -> [line] isDec :: Char -> Bool isDec c = c >= '0' && c <= '9' ===================================== testsuite/tests/interface-stability/base-exports.stdout ===================================== @@ -9322,7 +9322,7 @@ module GHC.Show where showList__ :: forall a. (a -> ShowS) -> [a] -> ShowS showLitChar :: GHC.Types.Char -> ShowS showLitString :: GHC.Internal.Base.String -> ShowS - showMultiLineString :: GHC.Internal.Base.String -> [GHC.Internal.Base.String] + showLitStringLines :: GHC.Internal.Base.String -> [GHC.Internal.Base.String] showParen :: GHC.Types.Bool -> ShowS -> ShowS showSignedInt :: GHC.Types.Int -> GHC.Types.Int -> ShowS showSpace :: ShowS ===================================== testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs ===================================== @@ -12364,7 +12364,7 @@ module GHC.Show where showList__ :: forall a. (a -> ShowS) -> [a] -> ShowS showLitChar :: GHC.Types.Char -> ShowS showLitString :: GHC.Internal.Base.String -> ShowS - showMultiLineString :: GHC.Internal.Base.String -> [GHC.Internal.Base.String] + showLitStringLines :: GHC.Internal.Base.String -> [GHC.Internal.Base.String] showParen :: GHC.Types.Bool -> ShowS -> ShowS showSignedInt :: GHC.Types.Int -> GHC.Types.Int -> ShowS showSpace :: ShowS ===================================== testsuite/tests/interface-stability/base-exports.stdout-mingw32 ===================================== @@ -9546,7 +9546,7 @@ module GHC.Show where showList__ :: forall a. (a -> ShowS) -> [a] -> ShowS showLitChar :: GHC.Types.Char -> ShowS showLitString :: GHC.Internal.Base.String -> ShowS - showMultiLineString :: GHC.Internal.Base.String -> [GHC.Internal.Base.String] + showLitStringLines :: GHC.Internal.Base.String -> [GHC.Internal.Base.String] showParen :: GHC.Types.Bool -> ShowS -> ShowS showSignedInt :: GHC.Types.Int -> GHC.Types.Int -> ShowS showSpace :: ShowS ===================================== testsuite/tests/interface-stability/base-exports.stdout-ws-32 ===================================== @@ -9322,7 +9322,7 @@ module GHC.Show where showList__ :: forall a. (a -> ShowS) -> [a] -> ShowS showLitChar :: GHC.Types.Char -> ShowS showLitString :: GHC.Internal.Base.String -> ShowS - showMultiLineString :: GHC.Internal.Base.String -> [GHC.Internal.Base.String] + showLitStringLines :: GHC.Internal.Base.String -> [GHC.Internal.Base.String] showParen :: GHC.Types.Bool -> ShowS -> ShowS showSignedInt :: GHC.Types.Int -> GHC.Types.Int -> ShowS showSpace :: ShowS ===================================== utils/check-exact/ExactPrint.hs ===================================== @@ -4768,8 +4768,7 @@ hsLit2String lit = case lit of HsChar src v -> toSourceTextWithSuffix src v "" HsCharPrim src p -> toSourceTextWithSuffix src p "" - HsString src v -> toSourceTextWithSuffix src v "" - HsMultilineString src v -> toSourceTextWithSuffix src v "" + HsString src _ v -> toSourceTextWithSuffix src v "" HsStringPrim src v -> toSourceTextWithSuffix src v "" HsInt _ (IL src _ v) -> toSourceTextWithSuffix src v "" HsIntPrim src v -> toSourceTextWithSuffix src v "" ===================================== utils/haddock/haddock-api/src/Haddock/Backends/Hyperlinker/Parser.hs ===================================== @@ -23,6 +23,7 @@ import GHC.Parser.Lexer as Lexer , initParserState , lexer ) +import GHC.Parser.String (StringType (..)) import qualified GHC.Types.Error as E import GHC.Types.SourceText import GHC.Types.SrcLoc @@ -118,7 +119,7 @@ parse parserOpts sDocContext fpath bs = case unP (go False []) initState of -- Update internal line + file position if this is a LINE pragma ITline_prag _ -> tryOrElse (bEnd, inPragDef) $ do L _ (ITinteger (IL{il_value = line})) <- tryP wrappedLexer - L _ (ITstring _ file) <- tryP wrappedLexer + L _ (ITstring _ StringTypeSingle file) <- tryP wrappedLexer L spF ITclose_prag <- tryP wrappedLexer let newLoc = mkRealSrcLoc file (fromIntegral line - 1) (srcSpanEndCol spF) @@ -320,7 +321,6 @@ classify tok = ITlabelvarid{} -> TkUnknown ITchar{} -> TkChar ITstring{} -> TkString - ITstringMulti{} -> TkString ITinteger{} -> TkNumber ITrational{} -> TkNumber ITprimchar{} -> TkChar View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/40a9d4458428aeab496a9ab1864da368a7ef15f4...619596cd178c6fc6e6d8c0b93f4855ff047e623b -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/40a9d4458428aeab496a9ab1864da368a7ef15f4...619596cd178c6fc6e6d8c0b93f4855ff047e623b You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: From gitlab at gitlab.haskell.org Sun Dec 22 06:35:08 2024 From: gitlab at gitlab.haskell.org (Brandon Chinn (@brandonchinn178)) Date: Sun, 22 Dec 2024 01:35:08 -0500 Subject: [Git][ghc/ghc][wip/interpolated-strings] Implement interpolated strings Message-ID: <6767b31cde235_2937ab18f0ba0855f9@gitlab.mail> Brandon Chinn pushed to branch wip/interpolated-strings at Glasgow Haskell Compiler / GHC Commits: 0af9f775 by Brandon Chinn at 2024-12-21T22:34:55-08:00 Implement interpolated strings - - - - - 13 changed files: - compiler/GHC/Hs/Expr.hs - compiler/GHC/Hs/Instances.hs - compiler/GHC/Hs/Lit.hs - compiler/GHC/Hs/Syn/Type.hs - compiler/GHC/HsToCore/Ticks.hs - compiler/GHC/Parser.y - compiler/GHC/Parser/Lexer.x - compiler/GHC/Parser/String.hs - compiler/GHC/Rename/Expr.hs - compiler/GHC/Tc/Types/Origin.hs - compiler/Language/Haskell/Syntax/Expr.hs - compiler/Language/Haskell/Syntax/Extension.hs - testsuite/tests/parser/should_run/all.T Changes: ===================================== compiler/GHC/Hs/Expr.hs ===================================== @@ -254,6 +254,10 @@ type instance XIPVar GhcRn = NoExtField type instance XIPVar GhcTc = DataConCantHappen type instance XOverLitE (GhcPass _) = NoExtField type instance XLitE (GhcPass _) = NoExtField +type instance XInterString (GhcPass _) = NoExtField +-- | Note: does not contain any delimiters +type instance XInterStringRaw (GhcPass _) = SourceText +type instance XInterStringExp (GhcPass _) = NoExtField type instance XLam (GhcPass _) = EpAnnLam type instance XApp (GhcPass _) = NoExtField @@ -710,6 +714,24 @@ ppr_expr (HsOverLabel s l) = case ghcPass @p of SourceText src -> ftext src ppr_expr (HsLit _ lit) = ppr lit ppr_expr (HsOverLit _ lit) = ppr lit + +ppr_expr (HsInterString _ strType parts) = + char 's' <> delim <> hcat (map pprInterPart parts) <> delim + where + pprInterPart = \case + HsInterStringRaw st s -> + case (strType, st) of + (HsStringTypeSingle, SourceText src) -> ftext src + (HsStringTypeSingle, NoSourceText) -> pprHsString' (unpackFS s) + (HsStringTypeMulti, SourceText src) -> vcat $ map text $ split '\n' (unpackFS src) + (HsStringTypeMulti, NoSourceText) -> pprHsStringMulti' (unpackFS s) + HsInterStringExpr _ expr -> text "${" <> ppr_lexpr expr <> text "}" + + delim = + case strType of + HsStringTypeSingle -> char '"' + HsStringTypeMulti -> text "\"\"\"" + ppr_expr (HsPar _ e) = parens (ppr_lexpr e) ppr_expr (HsPragE _ prag e) = sep [ppr prag, ppr_lexpr e] @@ -1028,6 +1050,7 @@ hsExprNeedsParens prec = go go (HsOverLabel{}) = False go (HsLit _ l) = hsLitNeedsParens prec l go (HsOverLit _ ol) = hsOverLitNeedsParens prec ol + go (HsInterString{}) = False go (HsPar{}) = False go (HsApp{}) = prec >= appPrec go (HsAppType {}) = prec >= appPrec ===================================== compiler/GHC/Hs/Instances.hs ===================================== @@ -319,6 +319,11 @@ deriving instance Data (HsTupArg GhcPs) deriving instance Data (HsTupArg GhcRn) deriving instance Data (HsTupArg GhcTc) +-- deriving instance (DataIdLR p p) => Data (HsInterStringPart p) +deriving instance Data (HsInterStringPart GhcPs) +deriving instance Data (HsInterStringPart GhcRn) +deriving instance Data (HsInterStringPart GhcTc) + -- deriving instance (DataIdLR p p) => Data (HsCmd p) deriving instance Data (HsCmd GhcPs) deriving instance Data (HsCmd GhcRn) ===================================== compiler/GHC/Hs/Lit.hs ===================================== @@ -48,6 +48,7 @@ import Language.Haskell.Syntax.Lit type instance XHsChar (GhcPass _) = SourceText type instance XHsCharPrim (GhcPass _) = SourceText +-- | Note: contains quote delimiters type instance XHsString (GhcPass _) = SourceText type instance XHsStringPrim (GhcPass _) = SourceText type instance XHsInt (GhcPass _) = NoExtField ===================================== compiler/GHC/Hs/Syn/Type.hs ===================================== @@ -107,6 +107,7 @@ hsExprType (HsOverLabel v _) = dataConCantHappen v hsExprType (HsIPVar v _) = dataConCantHappen v hsExprType (HsOverLit _ lit) = overLitType lit hsExprType (HsLit _ lit) = hsLitType lit +hsExprType (HsInterString _ _ _) = stringTy -- TODO: handle OverloadedStrings hsExprType (HsLam _ _ (MG { mg_ext = match_group })) = matchGroupTcType match_group hsExprType (HsApp _ f _) = funResultTy $ lhsExprType f hsExprType (HsAppType x f _) = piResultTy (lhsExprType f) x ===================================== compiler/GHC/HsToCore/Ticks.hs ===================================== @@ -1,4 +1,5 @@ {-# LANGUAGE DeriveFunctor #-} +{-# LANGUAGE LambdaCase #-} {-# LANGUAGE NondecreasingIndentation #-} {-# LANGUAGE TypeFamilies #-} @@ -476,6 +477,11 @@ addTickHsExpr e@(HsIPVar {}) = return e addTickHsExpr e@(HsOverLit {}) = return e addTickHsExpr e@(HsOverLabel{}) = return e addTickHsExpr e@(HsLit {}) = return e +addTickHsExpr (HsInterString x ty parts) = do + parts' <- forM parts $ \case + part@(HsInterStringRaw {}) -> return part + HsInterStringExpr x e -> HsInterStringExpr x <$> addTickLHsExpr e + return $ HsInterString x ty parts' addTickHsExpr e@(HsEmbTy {}) = return e addTickHsExpr e@(HsQual {}) = return e addTickHsExpr e@(HsForAll {}) = return e ===================================== compiler/GHC/Parser.y ===================================== @@ -730,6 +730,13 @@ are the most common patterns, rewritten as regular expressions for clarity: CHAR { L _ (ITchar _ _) } STRING { L _ (ITstring _ StringTypeSingle _) } STRING_MULTI { L _ (ITstring _ StringTypeMulti _) } + STRING_INTER_BEGIN { L _ (ITstringInterBegin StringTypeSingle) } + STRING_INTER_END { L _ (ITstringInterEnd StringTypeSingle) } + STRING_INTER_MULTI_BEGIN { L _ (ITstringInterBegin StringTypeMulti) } + STRING_INTER_MULTI_END { L _ (ITstringInterEnd StringTypeMulti) } + STRING_INTER_RAW { L _ (ITstringInterRaw _ _) } + STRING_INTER_EXP_OPEN { L _ ITstringInterExpOpen } + STRING_INTER_EXP_CLOSE { L _ ITstringInterExpClose } INTEGER { L _ (ITinteger _) } RATIONAL { L _ (ITrational _) } @@ -3114,6 +3121,7 @@ aexp2 :: { ECP } -- into HsOverLit when -XOverloadedStrings is on. -- | STRING { sL (getLoc $1) (HsOverLit $! mkHsIsString (getSTRINGs $1) -- (getSTRING $1) noExtField) } + | stringInter { ecpFromExp $1 } | INTEGER { ECP $ mkHsOverLitPV (sL1a $1 $ mkHsIntegral (getINTEGER $1)) } | RATIONAL { ECP $ mkHsOverLitPV (sL1a $1 $ mkHsFractional (getRATIONAL $1)) } @@ -3708,6 +3716,22 @@ ipvar :: { Located HsIPName } overloaded_label :: { Located (SourceText, FastString) } : LABELVARID { sL1 $1 (getLABELVARIDs $1, getLABELVARID $1) } +----------------------------------------------------------------------------- +-- Interpolated strings +-- See Note [Interpolated strings] in GHC.Parser.String + +stringInter :: { LHsExpr GhcPs } + : STRING_INTER_BEGIN stringInterParts STRING_INTER_END { processStringInter StringTypeSingle $1 $2 $3 } + | STRING_INTER_MULTI_BEGIN stringInterParts STRING_INTER_MULTI_END { processStringInter StringTypeMulti $1 $2 $3 } + +stringInterParts :: { [Either (SourceText, RawLexedString) (LHsExpr GhcPs)] } + : stringInterPart { [$1] } + | stringInterPart stringInterParts { $1 : $2 } + +stringInterPart :: { Either (SourceText, RawLexedString) (LHsExpr GhcPs) } + : STRING_INTER_RAW { Left (getStringInterRaw $1) } + | STRING_INTER_EXP_OPEN exp STRING_INTER_EXP_CLOSE { Right $2 } + ----------------------------------------------------------------------------- -- Warnings and deprecations @@ -4284,6 +4308,70 @@ getSCC lt = do let s = getSTRING lt stringLiteralToHsDocWst :: Located StringLiteral -> LocatedE (WithHsDocIdentifiers StringLiteral GhcPs) stringLiteralToHsDocWst sl = reLoc $ lexStringLiteral parseIdentifier sl +getStringInterRaw :: Located Token -> (SourceText, RawLexedString) +getStringInterRaw (L _ (ITstringInterRaw src s)) = (src, s) + +processStringInter :: + StringType + -> Located Token + -> Located Token + -> [Either (SourceText, RawLexedString) (LHsExpr GhcPs)] + -> LHsExpr GhcPs +processStringInter strType tokBegin tokEnd parts = + L (comb2 tokBegin tokEnd) $ + HsInterString noExtField strType $ processParts parts + where + processParts = + map toInterStringPart $ + case strType of + StringTypeSingle -> map (first (fmap fromRawLexedStringSingle)) + StringTypeMulti -> fromAlt . withoutSrcText fromRawLexedStringMulti . toAlt + + toInterStringPart = \case + Left (src, s) -> HsInterStringRaw src (fsLit s) + Right e -> HsInterStringExpr noExtField e + + -- Strip SourceText annotations, run the given function, and + -- reapply SourceText annotations. Assumes the function does + -- not change the order or number of elements, which is true + -- for fromRawLexedStringMulti. + withoutSrcText :: + ((s, [(x, s)]) -> (s, [(x, s)])) -> + ((SourceText, s), [(x, (SourceText, s))]) -> + ((SourceText, s), [(x, (SourceText, s))]) + withoutSrcText f vals = + let + -- extract out (SourceText, [SourceText]) from the parts + unannotate ((src, s), parts) = ((src, map (fst . snd) parts), (s, map (fmap snd) parts)) + -- reapply SourceTexts + reannotate ((src0, srcs), (s, parts)) = + ( (src0, s) + , zipWith (\src (x, s) -> (x, (src, s))) srcs parts + ) + in + reannotate . f . unannotate + + toAlt :: Monoid s => [Either s x] -> (s, [(x, s)]) + toAlt = + let go = \case + [] -> (mempty, []) + Left s : [] -> (s, []) + Left s1 : Left s2 : rest -> go $ Left (s1 <> s2) : rest + Left s : Right x : rest -> + let (s', rest') = go rest + in (s, (x, s') : rest') + Right x : rest -> + let (s, rest') = go rest + in (mempty, (x, s) : rest') + in go + + fromAlt :: Foldable s => (s, [(x, s)]) -> [Either s x] + fromAlt (s, xs) = + let notEmpty = \case + Left s -> null s + Right _ -> True + in filter notEmpty $ Left s : concatMap (\(x, s') -> [Right x, Left s']) xs + -- Utilities for combining source spans comb2 :: (HasLoc a, HasLoc b) => a -> b -> SrcSpan comb2 !a !b = combineHasLocs a b ===================================== compiler/GHC/Parser/Lexer.x ===================================== @@ -170,7 +170,7 @@ $idchar = [$small $large $digit $uniidchar \'] $unigraphic = \x06 -- Trick Alex into handling Unicode. See Note [Unicode in Alex]. $graphic = [$small $large $symbol $digit $idchar $special $unigraphic \"\'] -$charesc = [a b f n r t v \\ \" \' \&] +$charesc = [a b f n r t v \\ \" \' \& \$] $binit = 0-1 $octit = 0-7 @@ -228,8 +228,9 @@ $docsym = [\| \^ \* \$] -- character sets can be subtracted, not strings @escape = \\ ( $charesc | @ascii | @decimal | o @octal | x @hexadecimal ) @escapechar = \\ ( $charesc # \& | @ascii | @decimal | o @octal | x @hexadecimal ) - at stringchar = ($graphic # [\\ \"]) | $space | @escape | @gap - at char = ($graphic # [\\ \']) | $space | @escapechar + at stringchar = ($graphic # [\\ \"]) | $space | @escape | @gap + at char = ($graphic # [\\ \']) | $space | @escapechar + at stringinterchar = ($graphic # [\\ \" \$]) | $space | @escape | @gap -- normal signed numerical literals can only be explicitly negative, -- not explicitly positive (contrast @exponent) @@ -629,6 +630,21 @@ $unigraphic / { isSmartQuote } { smart_quote_error } (\" | \"\") / ([\n .] # \") { tok_string_multi_content } } +-- See Note [Interpolated strings] +<0> { + s \" { \span _ _ _ -> pushLexState string_inter_content >> pure (L span (ITstringInterBegin StringTypeSingle)) } + -- TODO(bchinn): interpolated multiline strings +} + +-- TODO(bchinn): add string_inter state to all <0> states that can be in an interpolated string + { + @stringinterchar* { tok_string_inter_raw } + \$ \{ { \span _ _ _ -> pushLexState string_inter >> pure (L span ITstringInterExpOpen) } + \" { \span _ _ _ -> popLexState >> pure (L span (ITstringInterEnd StringTypeSingle)) } + + -- TODO(bchinn): check for smart quotes +} + <0> { \'\' { token ITtyQuote } @@ -923,6 +939,13 @@ data Token | ITchar SourceText Char -- Note [Literal source text] in "GHC.Types.SourceText" | ITstring SourceText StringType FastString -- Note [Literal source text] in "GHC.Types.SourceText" + -- See Note [Interpolated strings] + | ITstringInterBegin StringType + | ITstringInterRaw SourceText RawLexedString -- Note [Literal source text] in "GHC.Types.SourceText" + | ITstringInterExpOpen + | ITstringInterExpClose + | ITstringInterEnd StringType + | ITinteger IntegralLit -- Note [Literal source text] in "GHC.Types.SourceText" | ITrational FractionalLit @@ -1672,8 +1695,11 @@ open_brace span _str _len _buf2 = do setContext (NoLayout:ctx) return (L span ITocurly) close_brace span _str _len _buf2 = do - popContext - return (L span ITccurly) + ctx <- getContext + sc <- getLexState + if null ctx && sc == string_inter + then popLexState >> pure (L span ITstringInterExpClose) + else popContext >> pure (L span ITccurly) qvarid, qconid :: StringBuffer -> Int -> Token qvarid buf len = ITqvarid $! splitQualName buf len False @@ -2171,6 +2197,14 @@ tok_string span buf len _buf2 = do src = SourceText $ lexemeToFastString buf len endsInHash = currentChar (offsetBytes (len - 1) buf) == '#' +tok_string_inter_raw :: Action +tok_string_inter_raw span buf len _ = do + s <- either (throwStringLexError i0) pure $ lexStringRaw len buf + pure $ L span (ITstringInterRaw src s) + where + i0 = AI (psSpanStart span) buf + src = SourceText $ lexemeToFastString buf len + -- | Ideally, we would define this completely with Alex syntax, like normal strings. -- Instead, this is defined as a hybrid solution by manually invoking lex states, which -- we're doing for two reasons: ===================================== compiler/GHC/Parser/String.hs ===================================== @@ -8,6 +8,10 @@ module GHC.Parser.String ( StringType (..), lexString, + -- * Raw strings + RawLexedString, + lexStringRaw, + -- * Unicode smart quote helpers isDoubleSmartQuote, isSingleSmartQuote, @@ -17,8 +21,11 @@ import GHC.Prelude hiding (getChar) import Control.Arrow ((>>>)) import Control.Monad (when) +import Data.Bifunctor (first) import Data.Char (chr, ord) import qualified Data.Foldable1 as Foldable1 +import Data.Functor.Identity (Identity (..)) +import Data.List (unsnoc) import qualified Data.List.NonEmpty as NonEmpty import Data.Maybe (listToMaybe, mapMaybe) import GHC.Data.StringBuffer (StringBuffer) @@ -259,6 +266,76 @@ isSingleSmartQuote = \case '’' -> True _ -> False +-- ----------------------------------------------------------------------------- +-- Interpolated strings + +-- | A string that's been validated to be lexically correct, but still +-- contains the raw string lexed, without anything resolved. +newtype RawLexedString = RawLexedString {unRawLexedString :: String} + deriving (Foldable, Semigroup, Monoid) + +-- | Load and validate the string in the given StringBuffer. +-- +-- e.g. Lexing "a\nb" will return RawLexedString ['a', '\\', 'n', 'b']. +lexStringRaw :: Int -> StringBuffer -> Either StringLexError RawLexedString +lexStringRaw len buf = RawLexedString (bufferChars len buf) <$ validateString len buf + +fromRawLexedStringSingle :: RawLexedString -> String +fromRawLexedStringSingle (RawLexedString s) = + case processCharsSingle s of + Right s' -> s' + Left _ -> panic "Unexpectedly got an error when re-lexing the string" + +fromRawLexedStringMulti :: (RawLexedString, [(x, RawLexedString)]) -> (String, [(x, String)]) +fromRawLexedStringMulti s = + case processCharsMulti' (to s) of + Just s' -> from s' + Nothing -> panic "Unexpectedly got an error when re-lexing the string" + where + to (pre, parts) = InterMultiString pre parts + from (InterMultiString pre parts) = (pre, parts) + +{- +Note [Interpolated strings] +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Interpolated string syntax was accepted in this proposal: +https://github.com/ghc-proposals/ghc-proposals/pull/570 + +Interpolated strings are syntax sugar for + +Interpolated strings are implemented in the following manner: + +1. Lexer takes the string as input: + + s"Hello ${Text.toUpper name}!" + + and outputs the following tokens: + + [ ITstringInterBegin src StringTypeSingle + , ITstringInterRaw src "Hello " + , ITstringInterExpOpen src + , ITqvarid ("Text.toUpper", "name") + , ITvarid "name" + , ITstringInterExpClose src + , ITstringInterRaw src "!" + , ITstringInterEnd src StringTypeSingle + ] + +2. The parser will then parse the tokens into the following HsExpr: + + HsInterString ext + [ HsInterRaw ext "Hello " + , HsInterExp ext $ + HsApp ext + (HsVar ext 'Text.toUpper) + (HsVar ext 'name) + , HsInterRaw ext "!" + ] + +3. This will then be desugared into +-} + -- ----------------------------------------------------------------------------- -- Multiline strings @@ -268,20 +345,54 @@ isSingleSmartQuote = \case -- and rejoining lines, and instead manually find newline characters, -- for performance. processCharsMulti :: String -> Maybe String -processCharsMulti = - collapseGaps -- Step 1 - >>> normalizeEOL - >>> expandLeadingTabs -- Step 3 - >>> rmCommonWhitespacePrefix -- Step 4 - >>> collapseOnlyWsLines -- Step 5 - >>> rmFirstNewline -- Step 7a - >>> rmLastNewline -- Step 7b - >>> resolveEscapesMaybe -- Step 8 +processCharsMulti = fmap from . processCharsMulti' . to + where + -- Convert a normal multiline string to/from an interpolated multiline string + -- with no interpolated expressions. + to s = InterMultiString s [] + from = \case + InterMultiString s [] -> s + _ -> panic "Got unexpected result when processing characters in multiline string" + +-- | An interpolated, multiline string to be processed. +-- +-- `x` here will only ever be instantiated as `HsExpr`, but we'll leave it general to ensure +-- we never modify it, we only ever propagate it. +-- +-- We represent this as a list of (x, String) tuples instead of [Either x String] to guarantee +-- that we don't have to handle two raw Strings next to each other. +data InterMultiString x = + InterMultiString + String -- ^ beginning of the string before the first interpolated expr + [(x, String)] -- ^ (expr, raw string) interleaved groups + +-- Run the given function over all raw strings, ignoring expressions +overRaw :: (String -> String) -> InterMultiString x -> InterMultiString x +overRaw f = runIdentity . overRawM (Identity . f) + +overRawM :: Monad m => (String -> m String) -> InterMultiString x -> m (InterMultiString x) +overRawM f (InterMultiString pre parts) = InterMultiString <$> f pre <*> (traverse . traverse) f parts + +-- | Process multiline characters generally, for both normal multiline strings and interpolated +-- multiline strings. +processCharsMulti' :: InterMultiString x -> Maybe (InterMultiString x) +processCharsMulti' = + overRaw collapseGaps -- Step 1 + >>> overRaw normalizeEOL + >>> expandLeadingTabs -- Step 3 + >>> rmCommonWhitespacePrefix -- Step 4 + >>> collapseOnlyWsLines -- Step 5 + >>> rmFirstNewline -- Step 7a + >>> rmLastNewline -- Step 7b + >>> overRawM resolveEscapesMaybe -- Step 8 -- | Expands all tabs blindly, since the lexer will verify that tabs can only appear -- as leading indentation -expandLeadingTabs :: String -> String -expandLeadingTabs = go 0 +expandLeadingTabs :: InterMultiString x -> InterMultiString x +expandLeadingTabs = + -- we can expand each raw string part independently, because leading + -- indentation will never contain an interpolated expression + overRaw $ go 0 where go !col = \case c@'\t' : cs -> @@ -303,21 +414,27 @@ normalizeEOL = go c : cs -> c : go cs [] -> [] -rmCommonWhitespacePrefix :: String -> String -rmCommonWhitespacePrefix cs0 = go cs0 +rmCommonWhitespacePrefix :: InterMultiString x -> InterMultiString x +rmCommonWhitespacePrefix s0 = + -- Whitespace prefix, by definition, only comes after newline characters, and there can + -- never be an interpolated expr within a whitespace prefix (since the expr would end + -- the prefix). So we can use a plain `map` to just process the string parts, because + -- the "drop prefix" logic will never span over multiple parts. + map (first go) parts where - commonWSPrefix = getCommonWsPrefix cs0 + -- treat interpolated exprs as a single, non-space character string + commonWSPrefix = getCommonWsPrefix $ case s0 of InterMultiString pre parts -> pre ++ concatMap snd parts go = \case - c@'\n' : cs -> c : go (dropLine commonWSPrefix cs) + c@'\n' : cs -> c : go (dropPrefix commonWSPrefix cs) c : cs -> c : go cs [] -> [] -- drop x characters from the string, or up to a newline, whichever comes first - dropLine !x = \case + dropPrefix !x = \case cs | x <= 0 -> cs cs@('\n' : _) -> cs - _ : cs -> dropLine (x - 1) cs + _ : cs -> dropPrefix (x - 1) cs [] -> [] -- | See step 4 in Note [Multiline string literals] @@ -334,30 +451,42 @@ getCommonWsPrefix s = . drop 1 -- ignore first line in calculation $ lines s -collapseOnlyWsLines :: String -> String -collapseOnlyWsLines = go +collapseOnlyWsLines :: InterMultiString x -> InterMultiString x +collapseOnlyWsLines (InterMultiString pre parts) = + let pre' = go (null parts) pre + parts' = [(expr, go isLast s) | ((expr, s), isLast) <- withIsLast parts] + in InterMultiString pre' parts' where - go = \case - c@'\n' : cs | Just cs' <- checkAllWs cs -> c : go cs' + go isLast = \case + c@'\n' : cs | Just cs' <- checkAllWs isLast cs -> c : go cs' c : cs -> c : go cs [] -> [] - checkAllWs = \case + checkAllWs isLast = \case -- got all the way to a newline or the end of the string, return cs@('\n' : _) -> Just cs - cs@[] -> Just cs + cs@[] | isLast -> Just cs -- found whitespace, continue c : cs | is_space c -> checkAllWs cs -- anything else, stop _ -> Nothing -rmFirstNewline :: String -> String -rmFirstNewline = \case - '\n' : cs -> cs - cs -> cs + -- annotate every element with a Bool indicating if it's the last element + withIsLast :: [a] -> [(a, Bool)] + withIsLast xs = zip xs $ (False <$ init xs) ++ [True] -rmLastNewline :: String -> String -rmLastNewline = go +rmFirstNewline :: InterMultiString x -> InterMultiString x +rmFirstNewline = \case + InterMultiString ('\n' : pre) parts -> InterMultiString pre parts + s -> s + +rmLastNewline :: InterMultiString x -> InterMultiString x +rmLastNewline (InterMultiString pre parts) = + case unsnoc parts of + Nothing -> + InterMultiString (go pre) parts + Just (parts0, (x, lastLine)) -> + InterMultiString pre (parts0 ++ [(x, go lastLine)]) where go = \case [] -> [] ===================================== compiler/GHC/Rename/Expr.hs ===================================== @@ -390,6 +390,9 @@ rnExpr (HsOverLit x lit) return (HsApp noExtField (noLocA neg) (noLocA (HsOverLit x lit')) , fvs ) } +rnExpr (HsInterString x ty parts) + = undefined -- TODO(bchinn) + rnExpr (HsApp x fun arg) = do { (fun',fvFun) <- rnLExpr fun ; (arg',fvArg) <- rnLExpr arg ===================================== compiler/GHC/Tc/Types/Origin.hs ===================================== @@ -537,6 +537,7 @@ data CtOrigin | LiteralOrigin (HsOverLit GhcRn) -- Occurrence of a literal | NegateOrigin -- Occurrence of syntactic negation + | InterStringOrigin -- Occurrence of an interpolated string | ArithSeqOrigin (ArithSeqInfo GhcRn) -- [x..], [x..y] etc | AssocFamPatOrigin -- When matching the patterns of an associated @@ -723,6 +724,7 @@ exprCtOrigin (ExplicitList {}) = ListOrigin exprCtOrigin (HsIPVar _ ip) = IPOccOrigin ip exprCtOrigin (HsOverLit _ lit) = LiteralOrigin lit exprCtOrigin (HsLit {}) = Shouldn'tHappenOrigin "concrete literal" +exprCtOrigin (HsInterString _ _ _) = InterStringOrigin exprCtOrigin (HsLam _ _ ms) = matchesCtOrigin ms exprCtOrigin (HsApp _ e1 _) = lexprCtOrigin e1 exprCtOrigin (HsAppType _ e1 _) = lexprCtOrigin e1 @@ -913,6 +915,7 @@ pprCtO PatSigOrigin = text "a pattern type signature" pprCtO PatOrigin = text "a pattern" pprCtO ViewPatOrigin = text "a view pattern" pprCtO (LiteralOrigin lit) = hsep [text "the literal", quotes (ppr lit)] +pprCtO InterStringOrigin = text "an interpolated string" pprCtO (ArithSeqOrigin seq) = hsep [text "the arithmetic sequence", quotes (ppr seq)] pprCtO SectionOrigin = text "an operator section" pprCtO (GetFieldOrigin f) = hsep [text "selecting the field", quotes (ppr f)] ===================================== compiler/Language/Haskell/Syntax/Expr.hs ===================================== @@ -346,19 +346,24 @@ data HsExpr p -- erroring expression will be written after -- solving. See Note [Holes] in GHC.Tc.Types.Constraint. - - | HsOverLabel (XOverLabel p) FastString -- ^ Overloaded label (Note [Overloaded labels] in GHC.OverloadedLabels) | HsIPVar (XIPVar p) HsIPName -- ^ Implicit parameter (not in use after typechecking) + | HsOverLit (XOverLitE p) (HsOverLit p) -- ^ Overloaded literals | HsLit (XLitE p) (HsLit p) -- ^ Simple (non-overloaded) literals + | -- | See Note [Interpolated strings] + HsInterString + (XInterString p) + HsStringType + [HsInterStringPart p] + -- | Lambda, Lambda-case, and Lambda-cases | HsLam (XLam p) HsLamVariant -- ^ Tells whether this is for lambda, \case, or \cases @@ -589,6 +594,10 @@ data HsLamVariant | LamCases -- ^ `\cases psi -> ei` deriving (Data, Eq) +data HsInterStringPart p + = HsInterStringRaw (XInterStringRaw p) FastString + | HsInterStringExpr (XInterStringExp p) (LHsExpr p) + {- Note [Parens in HsSyn] ~~~~~~~~~~~~~~~~~~~~~~ ===================================== compiler/Language/Haskell/Syntax/Extension.hs ===================================== @@ -410,6 +410,9 @@ type family XOverLabel x type family XIPVar x type family XOverLitE x type family XLitE x +type family XInterString x +type family XInterStringRaw x +type family XInterStringExp x type family XLam x type family XLamCase x type family XApp x ===================================== testsuite/tests/parser/should_run/all.T ===================================== @@ -24,3 +24,5 @@ test('ListTuplePunsConstraints', extra_files(['ListTuplePunsConstraints.hs']), g test('MultilineStrings', normal, compile_and_run, ['']) test('MultilineStringsOverloaded', normal, compile_and_run, ['']) test('T25375', normal, compile_and_run, ['']) +# TODO(bchinn): interpolated strings +# TODO(bchinn): interpolated multiline strings View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0af9f7757c7c20638c61e626807aee5dc72dce94 -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0af9f7757c7c20638c61e626807aee5dc72dce94 You're receiving this email because of your account on gitlab.haskell.org. -------------- next part -------------- An HTML attachment was scrubbed... URL: